Merge "Add redirect=no only to redirects on redirect pages"
authorTjones <tjones@wikimedia.org>
Thu, 24 Mar 2016 15:45:43 +0000 (15:45 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 24 Mar 2016 15:45:43 +0000 (15:45 +0000)
1801 files changed:
.jscsrc
RELEASE-NOTES-1.27
autoload.php
composer.json
docs/hooks.txt
docs/memcached.txt
includes/AutoLoader.php
includes/Block.php
includes/CategoryViewer.php
includes/DefaultSettings.php
includes/EditPage.php
includes/GitInfo.php
includes/GlobalFunctions.php
includes/HistoryBlob.php
includes/Html.php
includes/HtmlFormatter.php
includes/HttpFunctions.php
includes/LinkTarget.php
includes/Linker.php
includes/ListToggle.php [new file with mode: 0644]
includes/MagicWord.php
includes/MagicWordArray.php [new file with mode: 0644]
includes/MediaWiki.php
includes/MergeHistory.php
includes/Message.php
includes/MimeMagic.php
includes/MovePage.php
includes/OutputPage.php
includes/Revision.php
includes/Sanitizer.php
includes/Setup.php
includes/Status.php
includes/StubObject.php
includes/TemplateParser.php
includes/Title.php
includes/WatchedItem.php
includes/WatchedItemStore.php [new file with mode: 0644]
includes/WebRequest.php
includes/WebRequestUpload.php
includes/WebResponse.php
includes/WikiMap.php
includes/actions/Action.php
includes/actions/HistoryAction.php
includes/actions/InfoAction.php
includes/actions/RollbackAction.php
includes/actions/WatchAction.php
includes/api/ApiBase.php
includes/api/ApiBlock.php
includes/api/ApiContinuationManager.php
includes/api/ApiEditPage.php
includes/api/ApiExpandTemplates.php
includes/api/ApiFeedContributions.php
includes/api/ApiFormatBase.php
includes/api/ApiFormatXml.php
includes/api/ApiHelp.php
includes/api/ApiImageRotate.php
includes/api/ApiImport.php
includes/api/ApiLogin.php
includes/api/ApiLogout.php
includes/api/ApiMain.php
includes/api/ApiMergeHistory.php
includes/api/ApiOpenSearch.php
includes/api/ApiOptions.php
includes/api/ApiPageSet.php
includes/api/ApiParamInfo.php
includes/api/ApiParse.php
includes/api/ApiPatrol.php
includes/api/ApiProtect.php
includes/api/ApiPurge.php
includes/api/ApiQuery.php
includes/api/ApiQueryAllLinks.php
includes/api/ApiQueryBacklinks.php
includes/api/ApiQueryBacklinksprop.php
includes/api/ApiQueryCategoryMembers.php
includes/api/ApiQueryFileRepoInfo.php
includes/api/ApiQueryImageInfo.php
includes/api/ApiQueryInfo.php
includes/api/ApiQueryMyStashedFiles.php
includes/api/ApiQueryPageProps.php
includes/api/ApiQueryPrefixSearch.php
includes/api/ApiQueryRevisionsBase.php
includes/api/ApiQuerySearch.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiQueryStashImageInfo.php
includes/api/ApiQueryUserInfo.php
includes/api/ApiResult.php
includes/api/ApiStashEdit.php
includes/api/ApiTokens.php
includes/api/ApiUnblock.php
includes/api/ApiUndelete.php
includes/api/ApiUpload.php
includes/api/ApiWatch.php
includes/api/i18n/ar.json
includes/api/i18n/ast.json
includes/api/i18n/ba.json
includes/api/i18n/be-tarask.json
includes/api/i18n/bn.json
includes/api/i18n/cs.json
includes/api/i18n/de.json
includes/api/i18n/el.json
includes/api/i18n/en.json
includes/api/i18n/eo.json [new file with mode: 0644]
includes/api/i18n/es.json
includes/api/i18n/fa.json
includes/api/i18n/fr.json
includes/api/i18n/gl.json
includes/api/i18n/he.json
includes/api/i18n/it.json
includes/api/i18n/ja.json
includes/api/i18n/ko.json
includes/api/i18n/ksh.json
includes/api/i18n/lt.json
includes/api/i18n/nap.json
includes/api/i18n/nl.json
includes/api/i18n/oc.json
includes/api/i18n/olo.json
includes/api/i18n/pl.json
includes/api/i18n/pt.json
includes/api/i18n/qqq.json
includes/api/i18n/ru.json
includes/api/i18n/uk.json
includes/api/i18n/vi.json
includes/api/i18n/zh-hans.json
includes/cache/BacklinkCache.php
includes/cache/MessageCache.php
includes/changes/CategoryMembershipChange.php
includes/changes/ChangesList.php
includes/changes/EnhancedChangesList.php
includes/changes/OldChangesList.php
includes/changes/RecentChange.php
includes/changetags/ChangeTags.php
includes/changetags/ChangeTagsLogItem.php
includes/content/Content.php
includes/content/ContentHandler.php
includes/content/JsonContent.php
includes/content/MessageContent.php
includes/content/TextContent.php
includes/content/TextContentHandler.php
includes/content/WikitextContent.php
includes/context/RequestContext.php
includes/db/Database.php
includes/db/DatabaseMssql.php
includes/db/DatabaseMysqlBase.php
includes/db/DatabaseMysqli.php
includes/db/DatabaseOracle.php
includes/db/DatabaseUtility.php
includes/db/IDatabase.php
includes/db/loadbalancer/LoadMonitor.php
includes/diff/DairikiDiff.php
includes/diff/DifferenceEngine.php
includes/export/XmlDumpWriter.php
includes/filebackend/FSFileBackend.php
includes/filebackend/FileBackend.php
includes/filebackend/FileBackendMultiWrite.php
includes/filebackend/SwiftFileBackend.php
includes/filebackend/TempFSFile.php
includes/filerepo/FileRepo.php
includes/filerepo/ForeignAPIRepo.php
includes/filerepo/LocalRepo.php
includes/filerepo/file/File.php
includes/filerepo/file/LocalFile.php
includes/filerepo/file/OldLocalFile.php
includes/htmlform/HTMLAutoCompleteSelectField.php
includes/htmlform/HTMLButtonField.php
includes/htmlform/HTMLCheckField.php
includes/htmlform/HTMLCheckMatrix.php
includes/htmlform/HTMLComboboxField.php
includes/htmlform/HTMLFormField.php
includes/htmlform/HTMLFormFieldWithButton.php
includes/htmlform/HTMLMultiSelectField.php
includes/htmlform/HTMLRadioField.php
includes/htmlform/HTMLSelectField.php
includes/htmlform/HTMLTextAreaField.php
includes/htmlform/HTMLTextField.php
includes/htmlform/HTMLTitleTextField.php
includes/htmlform/HTMLUserTextField.php
includes/htmlform/VFormHTMLForm.php
includes/import/WikiImporter.php
includes/import/WikiRevision.php
includes/installer/CliInstaller.php
includes/installer/DatabaseInstaller.php
includes/installer/DatabaseUpdater.php
includes/installer/Installer.php
includes/installer/MssqlInstaller.php
includes/installer/MssqlUpdater.php
includes/installer/MysqlUpdater.php
includes/installer/OracleUpdater.php
includes/installer/PostgresInstaller.php
includes/installer/PostgresUpdater.php
includes/installer/SqliteUpdater.php
includes/installer/WebInstaller.php
includes/installer/WebInstallerComplete.php
includes/installer/WebInstallerInstall.php
includes/installer/WebInstallerName.php
includes/installer/WebInstallerOptions.php
includes/installer/i18n/ar.json
includes/installer/i18n/ast.json
includes/installer/i18n/ba.json
includes/installer/i18n/be-tarask.json
includes/installer/i18n/bn.json
includes/installer/i18n/ce.json
includes/installer/i18n/cs.json
includes/installer/i18n/de.json
includes/installer/i18n/diq.json
includes/installer/i18n/en.json
includes/installer/i18n/eo.json
includes/installer/i18n/es.json
includes/installer/i18n/fi.json
includes/installer/i18n/fr.json
includes/installer/i18n/gl.json
includes/installer/i18n/ia.json
includes/installer/i18n/inh.json [new file with mode: 0644]
includes/installer/i18n/is.json
includes/installer/i18n/it.json
includes/installer/i18n/ja.json
includes/installer/i18n/jbo.json [new file with mode: 0644]
includes/installer/i18n/ka.json
includes/installer/i18n/ko.json
includes/installer/i18n/ksh.json
includes/installer/i18n/lt.json
includes/installer/i18n/mg.json
includes/installer/i18n/nap.json
includes/installer/i18n/nl.json
includes/installer/i18n/oc.json
includes/installer/i18n/olo.json
includes/installer/i18n/pl.json
includes/installer/i18n/ps.json
includes/installer/i18n/pt.json
includes/installer/i18n/qqq.json
includes/installer/i18n/ru.json
includes/installer/i18n/sah.json
includes/installer/i18n/sl.json
includes/installer/i18n/sr-ec.json
includes/installer/i18n/sr-el.json
includes/installer/i18n/tt-cyrl.json
includes/installer/i18n/uk.json
includes/installer/i18n/vi.json
includes/installer/i18n/yi.json
includes/installer/i18n/zh-hans.json
includes/installer/i18n/zh-hant.json
includes/jobqueue/Job.php
includes/jobqueue/JobQueueDB.php
includes/jobqueue/JobQueueFederated.php
includes/jobqueue/JobRunner.php
includes/jobqueue/JobSpecification.php
includes/jobqueue/jobs/AssembleUploadChunksJob.php
includes/jobqueue/jobs/PublishStashedFileJob.php
includes/jobqueue/utils/BacklinkJobUtils.php
includes/libs/CSSMin.php
includes/libs/GenericArrayObject.php
includes/libs/MWMessagePack.php
includes/libs/MultiHttpClient.php
includes/libs/RiffExtractor.php
includes/libs/objectcache/CachedBagOStuff.php
includes/libs/objectcache/HashBagOStuff.php
includes/libs/objectcache/MemcachedClient.php
includes/libs/objectcache/MultiWriteBagOStuff.php
includes/libs/virtualrest/RestbaseVirtualRESTService.php
includes/libs/virtualrest/VirtualRESTServiceClient.php
includes/logging/DeleteLogFormatter.php
includes/logging/LogEntry.php
includes/logging/LogEventsList.php
includes/logging/LogPager.php
includes/logging/PatrolLog.php
includes/logging/PatrolLogFormatter.php
includes/logging/RightsLogFormatter.php
includes/logging/TagLogFormatter.php
includes/mail/EmailNotification.php
includes/mail/UserMailer.php
includes/media/BMP.php
includes/media/Bitmap.php
includes/media/Bitmap_ClientOnly.php
includes/media/DjVu.php
includes/media/ExifBitmap.php
includes/media/GIFMetadataExtractor.php
includes/media/ImageHandler.php
includes/media/Jpeg.php
includes/media/MediaHandler.php
includes/media/MediaTransformOutput.php
includes/media/PNGMetadataExtractor.php
includes/media/SVG.php
includes/media/SVGMetadataExtractor.php
includes/media/Tiff.php
includes/media/TransformationalImageHandler.php
includes/media/WebP.php
includes/media/XCF.php
includes/mime.types
includes/page/Article.php
includes/page/ImagePage.php
includes/page/WikiPage.php
includes/pager/ReverseChronologicalPager.php
includes/parser/CoreParserFunctions.php
includes/parser/Parser.php
includes/parser/ParserCache.php
includes/parser/ParserOptions.php
includes/parser/Preprocessor.php
includes/poolcounter/PoolCounter.php
includes/registration/ExtensionProcessor.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderContext.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderImage.php
includes/resourceloader/ResourceLoaderRawFileModule.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/resourceloader/ResourceLoaderUserTokensModule.php
includes/revisiondelete/RevDelLogItem.php
includes/search/SearchEngine.php
includes/search/SearchMssql.php
includes/search/SearchPostgres.php
includes/session/BotPasswordSessionProvider.php
includes/session/MetadataMergeException.php
includes/session/PHPSessionHandler.php
includes/session/Session.php
includes/session/SessionBackend.php
includes/session/SessionManager.php
includes/site/HashSiteStore.php
includes/skins/BaseTemplate.php
includes/skins/MediaWikiI18N.php
includes/skins/QuickTemplate.php
includes/skins/Skin.php
includes/skins/SkinApi.php
includes/skins/SkinApiTemplate.php
includes/skins/SkinFactory.php
includes/skins/SkinFallbackTemplate.php
includes/skins/SkinTemplate.php
includes/specialpage/QueryPage.php
includes/specialpage/SpecialPageFactory.php
includes/specials/SpecialActiveusers.php
includes/specials/SpecialBlock.php
includes/specials/SpecialBotPasswords.php
includes/specials/SpecialChangeContentModel.php
includes/specials/SpecialChangeEmail.php
includes/specials/SpecialChangePassword.php
includes/specials/SpecialContributions.php
includes/specials/SpecialDeletedContributions.php
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialEmailuser.php
includes/specials/SpecialFileDuplicateSearch.php
includes/specials/SpecialImport.php
includes/specials/SpecialJavaScriptTest.php
includes/specials/SpecialLinkSearch.php
includes/specials/SpecialListDuplicatedFiles.php
includes/specials/SpecialListfiles.php
includes/specials/SpecialListusers.php
includes/specials/SpecialLog.php
includes/specials/SpecialMediaStatistics.php
includes/specials/SpecialNewimages.php
includes/specials/SpecialNewpages.php
includes/specials/SpecialPasswordReset.php
includes/specials/SpecialRandomInCategory.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialRecentchangeslinked.php
includes/specials/SpecialRedirect.php
includes/specials/SpecialSearch.php
includes/specials/SpecialTags.php
includes/specials/SpecialUnblock.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUploadStash.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialUserrights.php
includes/specials/SpecialVersion.php
includes/specials/SpecialWatchlist.php
includes/specials/SpecialWhatlinkshere.php
includes/templates/Usercreate.php
includes/templates/Userlogin.php
includes/tidy/tidy.conf
includes/upload/UploadBase.php
includes/upload/UploadFromChunks.php
includes/upload/UploadFromUrl.php
includes/upload/UploadStash.php
includes/user/BotPassword.php
includes/user/LoggedOutEditToken.php
includes/user/User.php
includes/utils/AutoloadGenerator.php
includes/utils/BatchRowIterator.php
includes/utils/MWCryptHash.php
includes/utils/MWRestrictions.php
includes/utils/ZipDirectoryReader.php
includes/widget/SearchInputWidget.php [new file with mode: 0644]
languages/ConverterRule.php
languages/Language.php
languages/LanguageConverter.php
languages/classes/LanguageCu.php
languages/classes/LanguageHy.php
languages/classes/LanguageUk.php
languages/data/Names.php
languages/data/ZhConversion.php
languages/i18n/ace.json
languages/i18n/ady-cyrl.json
languages/i18n/af.json
languages/i18n/aln.json
languages/i18n/am.json
languages/i18n/an.json
languages/i18n/ang.json
languages/i18n/anp.json
languages/i18n/ar.json
languages/i18n/arc.json
languages/i18n/arq.json
languages/i18n/ary.json
languages/i18n/arz.json
languages/i18n/as.json
languages/i18n/ast.json
languages/i18n/avk.json
languages/i18n/awa.json
languages/i18n/az.json
languages/i18n/azb.json
languages/i18n/ba.json
languages/i18n/bar.json
languages/i18n/bcc.json
languages/i18n/bcl.json
languages/i18n/be-tarask.json
languages/i18n/be.json
languages/i18n/bg.json
languages/i18n/bgn.json
languages/i18n/bho.json
languages/i18n/bjn.json
languages/i18n/bn.json
languages/i18n/bpy.json
languages/i18n/br.json
languages/i18n/bs.json
languages/i18n/ca.json
languages/i18n/cdo.json
languages/i18n/ce.json
languages/i18n/ceb.json
languages/i18n/ch.json
languages/i18n/ckb.json
languages/i18n/crh-cyrl.json
languages/i18n/crh-latn.json
languages/i18n/cs.json
languages/i18n/cv.json
languages/i18n/cy.json
languages/i18n/da.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/dsb.json
languages/i18n/dtp.json
languages/i18n/dty.json
languages/i18n/egl.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/eu.json
languages/i18n/ext.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fo.json
languages/i18n/fr.json
languages/i18n/frc.json
languages/i18n/frp.json
languages/i18n/frr.json
languages/i18n/fur.json
languages/i18n/fy.json
languages/i18n/ga.json
languages/i18n/gan-hans.json
languages/i18n/gan-hant.json
languages/i18n/gd.json
languages/i18n/gl.json
languages/i18n/gom-deva.json
languages/i18n/gom-latn.json
languages/i18n/grc.json
languages/i18n/gsw.json
languages/i18n/gu.json
languages/i18n/gv.json
languages/i18n/hak.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hif-latn.json
languages/i18n/hil.json
languages/i18n/hr.json
languages/i18n/hrx.json
languages/i18n/hsb.json
languages/i18n/ht.json
languages/i18n/hu.json
languages/i18n/hy.json
languages/i18n/ia.json
languages/i18n/id.json
languages/i18n/ie.json
languages/i18n/ilo.json
languages/i18n/inh.json
languages/i18n/io.json
languages/i18n/is.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/jam.json
languages/i18n/jut.json
languages/i18n/jv.json
languages/i18n/ka.json
languages/i18n/kaa.json
languages/i18n/kab.json
languages/i18n/kbd-cyrl.json
languages/i18n/khw.json
languages/i18n/kiu.json
languages/i18n/kk-arab.json
languages/i18n/kk-cyrl.json
languages/i18n/kk-latn.json
languages/i18n/km.json
languages/i18n/kn.json
languages/i18n/ko.json
languages/i18n/krc.json
languages/i18n/ksh.json
languages/i18n/ku-latn.json
languages/i18n/kw.json
languages/i18n/la.json
languages/i18n/lb.json
languages/i18n/lg.json
languages/i18n/li.json
languages/i18n/lij.json
languages/i18n/lki.json
languages/i18n/lmo.json
languages/i18n/lrc.json
languages/i18n/lt.json
languages/i18n/lus.json
languages/i18n/luz.json
languages/i18n/lv.json
languages/i18n/lzh.json
languages/i18n/mai.json
languages/i18n/map-bms.json
languages/i18n/mdf.json
languages/i18n/mg.json
languages/i18n/mhr.json
languages/i18n/min.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mn.json
languages/i18n/mr.json
languages/i18n/ms.json
languages/i18n/mt.json
languages/i18n/my.json
languages/i18n/myv.json
languages/i18n/mzn.json
languages/i18n/nah.json
languages/i18n/nan.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/nds-nl.json
languages/i18n/nds.json
languages/i18n/ne.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/nso.json
languages/i18n/oc.json
languages/i18n/olo.json
languages/i18n/or.json
languages/i18n/os.json
languages/i18n/pa.json
languages/i18n/pam.json
languages/i18n/pdc.json
languages/i18n/pfl.json
languages/i18n/pl.json
languages/i18n/pms.json
languages/i18n/pnb.json
languages/i18n/prg.json
languages/i18n/ps.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/qu.json
languages/i18n/rm.json
languages/i18n/ro.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/rue.json
languages/i18n/sa.json
languages/i18n/sah.json
languages/i18n/sc.json
languages/i18n/scn.json
languages/i18n/sco.json
languages/i18n/sd.json
languages/i18n/sdc.json
languages/i18n/se.json
languages/i18n/ses.json
languages/i18n/sgs.json
languages/i18n/sh.json
languages/i18n/si.json
languages/i18n/sk.json
languages/i18n/sl.json
languages/i18n/sli.json
languages/i18n/so.json
languages/i18n/sq.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/stq.json
languages/i18n/su.json
languages/i18n/sv.json
languages/i18n/sw.json
languages/i18n/szl.json
languages/i18n/ta.json
languages/i18n/tcy.json
languages/i18n/te.json
languages/i18n/tg-cyrl.json
languages/i18n/tg-latn.json
languages/i18n/th.json
languages/i18n/tk.json
languages/i18n/tl.json
languages/i18n/to.json
languages/i18n/tr.json
languages/i18n/tt-cyrl.json
languages/i18n/tt-latn.json
languages/i18n/tyv.json
languages/i18n/ug-arab.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/uz.json
languages/i18n/vec.json
languages/i18n/vep.json
languages/i18n/vi.json
languages/i18n/vo.json
languages/i18n/vro.json
languages/i18n/wa.json
languages/i18n/war.json
languages/i18n/wo.json
languages/i18n/wuu.json
languages/i18n/xal.json
languages/i18n/xmf.json
languages/i18n/yi.json
languages/i18n/yo.json
languages/i18n/yue.json
languages/i18n/zea.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesBs.php
load.php
maintenance/Maintenance.php
maintenance/archives/patch-add-cl_collation_ext_index.sql [new file with mode: 0644]
maintenance/archives/patch-categorylinks-better-collation.sql
maintenance/archives/patch-kill-cl_collation_index.sql [new file with mode: 0644]
maintenance/archives/patch-watchlist-wl_id.sql [new file with mode: 0644]
maintenance/benchmarks/Benchmarker.php
maintenance/benchmarks/bench_utf8_title_check.php
maintenance/cleanupUploadStash.php
maintenance/commandLine.inc
maintenance/dumpBackup.php
maintenance/findHooks.php
maintenance/getConfiguration.php
maintenance/importImages.php
maintenance/initSiteStats.php
maintenance/jsduck/categories.json
maintenance/language/checkDupeMessages.php
maintenance/language/checkLanguage.php
maintenance/language/transstat.php
maintenance/language/zhtable/Makefile.py
maintenance/language/zhtable/toCN.manual
maintenance/language/zhtable/toHK.manual
maintenance/language/zhtable/toTW.manual
maintenance/language/zhtable/toTrad.manual
maintenance/language/zhtable/trad2simp.manual
maintenance/language/zhtable/tradphrases.manual
maintenance/language/zhtable/tradphrases_exclude.manual
maintenance/mcc.php
maintenance/mergeMessageFileList.php
maintenance/mssql/archives/patch-watchlist-wl_id.sql [new file with mode: 0644]
maintenance/mssql/tables.sql
maintenance/namespaceDupes.php
maintenance/oracle/archives/patch-watchlist-wl_id.sql [new file with mode: 0644]
maintenance/oracle/tables.sql
maintenance/parse.php
maintenance/postgres/tables.sql
maintenance/preprocessorFuzzTest.php
maintenance/resetUserEmail.php
maintenance/runJobs.php
maintenance/sqlite.php
maintenance/sqlite/archives/patch-watchlist-wl_id.sql [new file with mode: 0644]
maintenance/storage/checkStorage.php
maintenance/storage/fixBug20757.php
maintenance/storage/moveToExternal.php
maintenance/storage/testCompression.php
maintenance/tables.sql
maintenance/tidyUpBug37714.php
maintenance/update.php
maintenance/updateCollation.php
maintenance/updateSearchIndex.php
mw-config/images/critical-32.png
mw-config/images/download-32.png
mw-config/images/info-32.png
mw-config/images/installer-logo.png
mw-config/images/tick-32.png
mw-config/images/warning-32.png
package.json
phpcs.xml
resources/Resources.php
resources/assets/file-type-icons/fileicon-deb.png
resources/assets/file-type-icons/fileicon-djvu.png
resources/assets/file-type-icons/fileicon-dvi.png
resources/assets/file-type-icons/fileicon-exe.png
resources/assets/file-type-icons/fileicon-html.png
resources/assets/file-type-icons/fileicon-java.png
resources/assets/file-type-icons/fileicon-mid.png
resources/assets/file-type-icons/fileicon-mov.png
resources/assets/file-type-icons/fileicon-pdf.png
resources/assets/file-type-icons/fileicon-ps.png
resources/assets/file-type-icons/fileicon-psd.png
resources/assets/file-type-icons/fileicon-rm.png
resources/assets/file-type-icons/fileicon-rpm.png
resources/assets/file-type-icons/fileicon-svg.png
resources/assets/file-type-icons/fileicon-tex.png
resources/assets/file-type-icons/fileicon-ttf.png
resources/assets/file-type-icons/fileicon-txt.png
resources/assets/file-type-icons/fileicon-xcf.png
resources/assets/licenses/public-domain.png
resources/assets/mediawiki.png
resources/assets/poweredby_mediawiki_132x47.png
resources/assets/poweredby_mediawiki_176x62.png
resources/assets/poweredby_mediawiki_88x31.png
resources/assets/wiki.png
resources/lib/oojs-ui/i18n/ba.json
resources/lib/oojs-ui/i18n/gu.json
resources/lib/oojs-ui/i18n/hi.json
resources/lib/oojs-ui/i18n/mn.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/nan.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/ps.json
resources/lib/oojs-ui/i18n/sah.json
resources/lib/oojs-ui/i18n/sl.json
resources/lib/oojs-ui/i18n/ug-arab.json
resources/lib/oojs-ui/oojs-ui-apex.js
resources/lib/oojs-ui/oojs-ui-core-apex.css
resources/lib/oojs-ui/oojs-ui-core-mediawiki.css
resources/lib/oojs-ui/oojs-ui-core.js
resources/lib/oojs-ui/oojs-ui-mediawiki.js
resources/lib/oojs-ui/oojs-ui-toolbars-apex.css
resources/lib/oojs-ui/oojs-ui-toolbars-mediawiki.css
resources/lib/oojs-ui/oojs-ui-toolbars.js
resources/lib/oojs-ui/oojs-ui-widgets-apex.css
resources/lib/oojs-ui/oojs-ui-widgets-mediawiki.css
resources/lib/oojs-ui/oojs-ui-widgets.js
resources/lib/oojs-ui/oojs-ui-windows-apex.css
resources/lib/oojs-ui/oojs-ui-windows-mediawiki.css
resources/lib/oojs-ui/oojs-ui-windows.js
resources/lib/oojs-ui/themes/apex/icons-editing-advanced.json
resources/lib/oojs-ui/themes/apex/icons-editing-core.json
resources/lib/oojs-ui/themes/apex/icons-editing-styling.json
resources/lib/oojs-ui/themes/apex/images/icons/add.png
resources/lib/oojs-ui/themes/apex/images/icons/advanced.png
resources/lib/oojs-ui/themes/apex/images/icons/alert.png
resources/lib/oojs-ui/themes/apex/images/icons/align-center.png
resources/lib/oojs-ui/themes/apex/images/icons/align-float-left.png
resources/lib/oojs-ui/themes/apex/images/icons/align-float-right.png
resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/arrow-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/arrow-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/articleRedirect-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/articleRedirect-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/attachment-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/attachment-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/beta-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/beta.png
resources/lib/oojs-ui/themes/apex/images/icons/betaLaunch-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/betaLaunch.png
resources/lib/oojs-ui/themes/apex/images/icons/bigger-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/bigger-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/block.png
resources/lib/oojs-ui/themes/apex/images/icons/blockUndo-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/blockUndo-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-a.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-ain.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-dad.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-armn-to.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-b.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-be.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-te.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-zhe.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-f.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-g.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-geor-man.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-l.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-n.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-v.png
resources/lib/oojs-ui/themes/apex/images/icons/bookmark-ltr-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/bookmark-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/bookmark-rtl-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/bookmark-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/browser-ltr-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/browser-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/browser-rtl-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/browser-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/calendar-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/calendar-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/cancel.png
resources/lib/oojs-ui/themes/apex/images/icons/caret-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/caret-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/caretDown.png
resources/lib/oojs-ui/themes/apex/images/icons/caretUp.png
resources/lib/oojs-ui/themes/apex/images/icons/case-sensitive.png
resources/lib/oojs-ui/themes/apex/images/icons/check.png
resources/lib/oojs-ui/themes/apex/images/icons/circle.png
resources/lib/oojs-ui/themes/apex/images/icons/clear-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/clear.png
resources/lib/oojs-ui/themes/apex/images/icons/clock-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/clock.png
resources/lib/oojs-ui/themes/apex/images/icons/close.png
resources/lib/oojs-ui/themes/apex/images/icons/code.png
resources/lib/oojs-ui/themes/apex/images/icons/collapse.png
resources/lib/oojs-ui/themes/apex/images/icons/comment.png
resources/lib/oojs-ui/themes/apex/images/icons/downTriangle.png
resources/lib/oojs-ui/themes/apex/images/icons/edit-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/edit-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/editLock-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/editLock-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/editUndo-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/editUndo-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/ellipsis.png
resources/lib/oojs-ui/themes/apex/images/icons/expand.png
resources/lib/oojs-ui/themes/apex/images/icons/external-link-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/external-link-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/find-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/find-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/flag-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/flag-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/flagUndo-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/flagUndo-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/funnel-ltr-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/funnel-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/funnel-rtl-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/funnel-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/heart-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/heart.png
resources/lib/oojs-ui/themes/apex/images/icons/help-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/help-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/history.png
resources/lib/oojs-ui/themes/apex/images/icons/image.png
resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/indent-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/indent-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/info.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-a.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-keheh-jeem.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-meem.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-armn-sha.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-c.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-d.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-e.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-geor-kan.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-i.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-k.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-s.png
resources/lib/oojs-ui/themes/apex/images/icons/key-ltr-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/key-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/key-rtl-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/key-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/keyboard-ltr-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/keyboard-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/keyboard-rtl-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/keyboard-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/language-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/language-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/layout-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/layout-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/link.png
resources/lib/oojs-ui/themes/apex/images/icons/listBullet-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/listBullet-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/lock.png
resources/lib/oojs-ui/themes/apex/images/icons/logOut-ltr-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/logOut-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/logOut-rtl-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/logOut-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/markup.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/markup.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/menu.png
resources/lib/oojs-ui/themes/apex/images/icons/move-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/move.png
resources/lib/oojs-ui/themes/apex/images/icons/newWindow-ltr-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/newWindow-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/newWindow-rtl-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/newWindow-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/newline-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/newline-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/noWikiText-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/noWikiText-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/notice.png
resources/lib/oojs-ui/themes/apex/images/icons/outdent-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/outdent-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/outline-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/outline-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/printer-ltr-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/printer-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/printer-rtl-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/printer-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/puzzle-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/puzzle-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/quotes-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/quotes-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/regular-expression.png
resources/lib/oojs-ui/themes/apex/images/icons/ribbonPrize-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/ribbonPrize.png
resources/lib/oojs-ui/themes/apex/images/icons/search.png
resources/lib/oojs-ui/themes/apex/images/icons/secure-link.png
resources/lib/oojs-ui/themes/apex/images/icons/settings.png
resources/lib/oojs-ui/themes/apex/images/icons/smaller-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/smaller-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/specialCharacter.png
resources/lib/oojs-ui/themes/apex/images/icons/star.png
resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-a.png
resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-s.png
resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-y.png
resources/lib/oojs-ui/themes/apex/images/icons/subscript-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/subscript-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/sun-ltr-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/sun-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/sun-rtl-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/sun-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/superscript-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/superscript-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/table-caption.png
resources/lib/oojs-ui/themes/apex/images/icons/table-insert-column-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/table-insert-column-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/table-insert-row-after.png
resources/lib/oojs-ui/themes/apex/images/icons/table-insert-row-before.png
resources/lib/oojs-ui/themes/apex/images/icons/table-merge-cells.png
resources/lib/oojs-ui/themes/apex/images/icons/table.png
resources/lib/oojs-ui/themes/apex/images/icons/tag.png
resources/lib/oojs-ui/themes/apex/images/icons/templateAdd-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/templateAdd-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/text-dir-lefttoright.png
resources/lib/oojs-ui/themes/apex/images/icons/text-dir-righttoleft.png
resources/lib/oojs-ui/themes/apex/images/icons/text-style.png
resources/lib/oojs-ui/themes/apex/images/icons/trash.png
resources/lib/oojs-ui/themes/apex/images/icons/trashUndo-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/trashUndo-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/unLock-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/unLock-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/unStar.png
resources/lib/oojs-ui/themes/apex/images/icons/underline-a.png
resources/lib/oojs-ui/themes/apex/images/icons/underline-u.png
resources/lib/oojs-ui/themes/apex/images/icons/upTriangle.png
resources/lib/oojs-ui/themes/apex/images/icons/upload-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/upload-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/watchlist-ltr-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/watchlist-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/watchlist-rtl-invert.png
resources/lib/oojs-ui/themes/apex/images/icons/watchlist-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/wikiText.png
resources/lib/oojs-ui/themes/apex/images/icons/window.png
resources/lib/oojs-ui/themes/apex/images/indicators/alert.png
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-down.png
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-ltr.png
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-rtl.png
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-up.png
resources/lib/oojs-ui/themes/apex/images/indicators/clear.png
resources/lib/oojs-ui/themes/apex/images/indicators/required.png
resources/lib/oojs-ui/themes/apex/images/indicators/search-ltr.png
resources/lib/oojs-ui/themes/apex/images/indicators/search-rtl.png
resources/lib/oojs-ui/themes/apex/images/textures/transparency.png
resources/lib/oojs-ui/themes/apex/images/toolbar-shadow.png
resources/lib/oojs-ui/themes/mediawiki/icons-editing-advanced.json
resources/lib/oojs-ui/themes/mediawiki/icons-editing-core.json
resources/lib/oojs-ui/themes/mediawiki/icons-editing-styling.json
resources/lib/oojs-ui/themes/mediawiki/icons-layout.json
resources/lib/oojs-ui/themes/mediawiki/icons-moderation.json
resources/lib/oojs-ui/themes/mediawiki/icons.json
resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/add-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/add-progressive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/add-progressive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/add.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-warning.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleRedirect-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleRedirect-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleRedirect-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleRedirect-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/attachment-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/attachment-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/attachment-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/attachment-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bell-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bell.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/beta-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/beta.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/block-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/block.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bright-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bright.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-destructive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive-deprecated.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive-deprecated.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/check-destructive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/check-progressive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/check.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive-deprecated.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive-deprecated.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-progressive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-progressive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/circle.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/clock-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/clock.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/code.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/comment-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/comment.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-progressive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-progressive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/expand-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/expand.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/eye-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/eye-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/eye.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/eye.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/halfBright-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/halfBright.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/heart-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/heart.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/history-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/history.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/info.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/language-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/language-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/language-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/language-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-destructive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-destructive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/markup-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/markup-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/markup.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/markup.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/moon-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/moon.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/move.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/notBright-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/notBright.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/notice-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/notice.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-progressive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-progressive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/settings-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/settings.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/star-constructive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/star-constructive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/star-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/star-progressive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/star-progressive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/star.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/stop-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/stop.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-progressive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-progressive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/table.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-destructive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-progressive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-warning.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/trash-destructive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/trash-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/trash.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-destructive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-destructive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-constructive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-constructive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-progressive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-progressive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/window-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/window.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/textures/transparency.png
resources/lib/qunitjs/qunit.css
resources/lib/qunitjs/qunit.js
resources/lib/sinonjs/sinon-1.15.4.js [deleted file]
resources/lib/sinonjs/sinon-1.17.3.js [new file with mode: 0644]
resources/lib/sinonjs/sinon-ie-1.15.4.js [deleted file]
resources/src/jquery.tipsy/images/tipsy.png
resources/src/jquery/images/jquery.arrowSteps.divider-rtl.png
resources/src/jquery/images/jquery.arrowSteps.head-ltr.png
resources/src/jquery/images/jquery.arrowSteps.head-rtl.png
resources/src/jquery/images/marker.png
resources/src/jquery/images/mask.png
resources/src/jquery/images/sort_both.png
resources/src/jquery/images/sort_down.png
resources/src/jquery/images/sort_up.png
resources/src/jquery/images/wheel.png
resources/src/jquery/jquery.suggestions.js
resources/src/jquery/jquery.tablesorter.js
resources/src/mediawiki.action/images/green-checkmark.png
resources/src/mediawiki.action/images/nextredirect-ltr.png
resources/src/mediawiki.action/images/nextredirect-rtl.png
resources/src/mediawiki.action/images/redirect-ltr.png
resources/src/mediawiki.action/mediawiki.action.view.postEdit.js
resources/src/mediawiki.legacy/images/magnify-clip-ltr.png
resources/src/mediawiki.legacy/images/magnify-clip-rtl.png
resources/src/mediawiki.less/mediawiki.mixins.animation.less
resources/src/mediawiki.less/mediawiki.mixins.less
resources/src/mediawiki.less/mediawiki.mixins.rotation.less
resources/src/mediawiki.less/mediawiki.ui/mixins.less
resources/src/mediawiki.skinning/images/audio-ltr.png
resources/src/mediawiki.skinning/images/audio-rtl.png
resources/src/mediawiki.skinning/images/chat-ltr.png
resources/src/mediawiki.skinning/images/chat-rtl.png
resources/src/mediawiki.skinning/images/document-ltr.png
resources/src/mediawiki.skinning/images/document-rtl.png
resources/src/mediawiki.skinning/images/external-ltr.png
resources/src/mediawiki.skinning/images/external-rtl.png
resources/src/mediawiki.skinning/images/ftp-ltr.png
resources/src/mediawiki.skinning/images/ftp-rtl.png
resources/src/mediawiki.skinning/images/magnify-clip-ltr.png
resources/src/mediawiki.skinning/images/magnify-clip-rtl.png
resources/src/mediawiki.skinning/images/mail.png
resources/src/mediawiki.skinning/images/video.png
resources/src/mediawiki.special/images/glyph-people-large.png
resources/src/mediawiki.special/images/icon-contributors.png
resources/src/mediawiki.special/images/icon-edits.png
resources/src/mediawiki.special/images/icon-pages.png
resources/src/mediawiki.special/mediawiki.special.apisandbox.css
resources/src/mediawiki.special/mediawiki.special.apisandbox.js
resources/src/mediawiki.special/mediawiki.special.preferences.js
resources/src/mediawiki.special/mediawiki.special.userlogin.common.css
resources/src/mediawiki.special/mediawiki.special.userlogin.login.css
resources/src/mediawiki.toolbar/images/ar/button_bold.png
resources/src/mediawiki.toolbar/images/ar/button_headline.png
resources/src/mediawiki.toolbar/images/ar/button_italic.png
resources/src/mediawiki.toolbar/images/ar/button_link.png
resources/src/mediawiki.toolbar/images/ar/button_nowiki.png
resources/src/mediawiki.toolbar/images/be-tarask/button_bold.png
resources/src/mediawiki.toolbar/images/be-tarask/button_italic.png
resources/src/mediawiki.toolbar/images/be-tarask/button_link.png
resources/src/mediawiki.toolbar/images/de/button_bold.png
resources/src/mediawiki.toolbar/images/de/button_italic.png
resources/src/mediawiki.toolbar/images/en/button_bold.png
resources/src/mediawiki.toolbar/images/en/button_headline.png
resources/src/mediawiki.toolbar/images/en/button_italic.png
resources/src/mediawiki.toolbar/images/en/button_link.png
resources/src/mediawiki.toolbar/images/en/button_media.png
resources/src/mediawiki.toolbar/images/en/button_nowiki.png
resources/src/mediawiki.toolbar/images/en/button_sig.png
resources/src/mediawiki.toolbar/images/fa/button_bold.png
resources/src/mediawiki.toolbar/images/fa/button_headline.png
resources/src/mediawiki.toolbar/images/fa/button_italic.png
resources/src/mediawiki.toolbar/images/fa/button_link.png
resources/src/mediawiki.toolbar/images/fa/button_nowiki.png
resources/src/mediawiki.toolbar/images/ksh/button_italic.png
resources/src/mediawiki.toolbar/images/ru/button_bold.png
resources/src/mediawiki.toolbar/images/ru/button_italic.png
resources/src/mediawiki.toolbar/images/ru/button_link.png
resources/src/mediawiki.ui/components/buttons.less
resources/src/mediawiki.ui/components/images/checked.png
resources/src/mediawiki.ui/components/images/checked_disabled.png
resources/src/mediawiki.ui/components/images/radio_checked.png
resources/src/mediawiki.ui/components/images/radio_disabled.png
resources/src/mediawiki.widgets/mw.widgets.CalendarWidget.js
resources/src/mediawiki.widgets/mw.widgets.CategoryCapsuleItemWidget.js
resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.NamespaceInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.SearchInputWidget.css [new file with mode: 0644]
resources/src/mediawiki.widgets/mw.widgets.SearchInputWidget.js [new file with mode: 0644]
resources/src/mediawiki.widgets/mw.widgets.TitleWidget.js
resources/src/mediawiki/api/options.js
resources/src/mediawiki/api/parse.js
resources/src/mediawiki/api/upload.js
resources/src/mediawiki/images/arrow-collapsed-ltr.png
resources/src/mediawiki/images/arrow-collapsed-rtl.png
resources/src/mediawiki/images/arrow-expanded.png
resources/src/mediawiki/images/arrow-sort-ascending.png
resources/src/mediawiki/images/arrow-sort-descending.png
resources/src/mediawiki/images/feed-icon.png
resources/src/mediawiki/images/help.png
resources/src/mediawiki/images/pager-arrow-fastforward-ltr.png
resources/src/mediawiki/images/pager-arrow-fastforward-rtl.png
resources/src/mediawiki/images/pager-arrow-forward-ltr.png
resources/src/mediawiki/images/pager-arrow-forward-rtl.png
resources/src/mediawiki/images/question.png
resources/src/mediawiki/mediawiki.ForeignStructuredUpload.BookletLayout.js
resources/src/mediawiki/mediawiki.Title.js
resources/src/mediawiki/mediawiki.Upload.BookletLayout.css
resources/src/mediawiki/mediawiki.Upload.BookletLayout.js
resources/src/mediawiki/mediawiki.inspect.js
resources/src/mediawiki/mediawiki.js
resources/src/mediawiki/mediawiki.requestIdleCallback.js
resources/src/mediawiki/mediawiki.searchSuggest.js
resources/src/mediawiki/mediawiki.viewport.js [new file with mode: 0644]
tests/TestsAutoLoader.php
tests/browser/features/create_account.feature
tests/browser/features/create_and_follow_wiki_link.feature
tests/browser/features/edit_page.feature
tests/browser/features/file.feature
tests/browser/features/login.feature
tests/browser/features/main_page_links.feature
tests/browser/features/preferences.feature
tests/browser/features/step_definitions/preferences_appearance_steps.rb
tests/browser/features/support/pages/preferences_appearance_page.rb
tests/browser/features/view_history.feature
tests/parser/parserTest.inc
tests/parser/parserTests.txt
tests/parserTests.php
tests/phpunit/MediaWikiLangTestCase.php
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/includes/BlockTest.php
tests/phpunit/includes/ExportTest.php
tests/phpunit/includes/ExtraParserTest.php
tests/phpunit/includes/FauxResponseTest.php
tests/phpunit/includes/HtmlTest.php
tests/phpunit/includes/MWTimestampTest.php
tests/phpunit/includes/MergeHistoryTest.php
tests/phpunit/includes/MessageTest.php
tests/phpunit/includes/OutputPageTest.php
tests/phpunit/includes/PrefixSearchTest.php
tests/phpunit/includes/RevisionStorageTest.php
tests/phpunit/includes/StatusTest.php
tests/phpunit/includes/TitlePermissionTest.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/WatchedItemIntegrationTest.php [new file with mode: 0644]
tests/phpunit/includes/WatchedItemStoreIntegrationTest.php [new file with mode: 0644]
tests/phpunit/includes/WatchedItemStoreUnitTest.php [new file with mode: 0644]
tests/phpunit/includes/WatchedItemUnitTest.php [new file with mode: 0644]
tests/phpunit/includes/XmlTest.php
tests/phpunit/includes/actions/ActionTest.php
tests/phpunit/includes/api/ApiBlockTest.php
tests/phpunit/includes/api/ApiLoginTest.php
tests/phpunit/includes/api/ApiUploadTest.php
tests/phpunit/includes/api/RandomImageGenerator.php
tests/phpunit/includes/api/UserWrapper.php
tests/phpunit/includes/api/query/ApiQueryBasicTest.php
tests/phpunit/includes/api/query/ApiQueryContinue2Test.php
tests/phpunit/includes/api/query/ApiQueryContinueTest.php
tests/phpunit/includes/cache/GenderCacheTest.php
tests/phpunit/includes/cache/LocalisationCacheTest.php
tests/phpunit/includes/cache/MessageCacheTest.php
tests/phpunit/includes/changes/CategoryMembershipChangeTest.php
tests/phpunit/includes/changes/OldChangesListTest.php
tests/phpunit/includes/changes/TestRecentChangesHelper.php
tests/phpunit/includes/content/ContentHandlerTest.php
tests/phpunit/includes/context/RequestContextTest.php
tests/phpunit/includes/db/DatabaseMysqlBaseTest.php
tests/phpunit/includes/db/DatabaseSqliteTest.php
tests/phpunit/includes/debug/logger/LegacyLoggerTest.php
tests/phpunit/includes/debug/logger/MonologSpiTest.php
tests/phpunit/includes/debug/logger/monolog/LineFormatterTest.php
tests/phpunit/includes/deferred/LinksUpdateTest.php
tests/phpunit/includes/exception/HttpErrorTest.php
tests/phpunit/includes/exception/MWExceptionTest.php
tests/phpunit/includes/filebackend/FileBackendTest.php
tests/phpunit/includes/filebackend/SwiftFileBackendTest.php
tests/phpunit/includes/filerepo/FileBackendDBRepoWrapperTest.php
tests/phpunit/includes/filerepo/file/FileTest.php
tests/phpunit/includes/filerepo/file/LocalFileTest.php
tests/phpunit/includes/jobqueue/JobTest.php
tests/phpunit/includes/jobqueue/jobs/CategoryMembershipChangeJobTest.php [new file with mode: 0644]
tests/phpunit/includes/libs/MemoizedCallableTest.php
tests/phpunit/includes/libs/ProcessCacheLRUTest.php
tests/phpunit/includes/libs/objectcache/CachedBagOStuffTest.php
tests/phpunit/includes/media/BitmapMetadataHandlerTest.php
tests/phpunit/includes/media/ExifBitmapTest.php
tests/phpunit/includes/media/IPTCTest.php
tests/phpunit/includes/media/MediaWikiMediaTestCase.php
tests/phpunit/includes/media/WebPTest.php
tests/phpunit/includes/media/XMPTest.php
tests/phpunit/includes/page/ArticleTablesTest.php
tests/phpunit/includes/page/ArticleTest.php
tests/phpunit/includes/parser/NewParserTest.php
tests/phpunit/includes/password/BcryptPasswordTest.php
tests/phpunit/includes/password/PasswordPolicyChecksTest.php
tests/phpunit/includes/password/UserPasswordPolicyTest.php
tests/phpunit/includes/registration/ExtensionProcessorTest.php
tests/phpunit/includes/search/SearchEnginePrefixTest.php
tests/phpunit/includes/search/SearchEngineTest.php
tests/phpunit/includes/session/BotPasswordSessionProviderTest.php
tests/phpunit/includes/session/CookieSessionProviderTest.php
tests/phpunit/includes/session/MetadataMergeExceptionTest.php [new file with mode: 0644]
tests/phpunit/includes/session/PHPSessionHandlerTest.php
tests/phpunit/includes/session/SessionBackendTest.php
tests/phpunit/includes/session/SessionManagerTest.php
tests/phpunit/includes/session/SessionProviderTest.php
tests/phpunit/includes/session/SessionTest.php
tests/phpunit/includes/skins/SkinTemplateTest.php
tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php
tests/phpunit/includes/specials/SpecialEditWatchlistTest.php [new file with mode: 0644]
tests/phpunit/includes/specials/SpecialMyLanguageTest.php
tests/phpunit/includes/specials/SpecialWatchlistTest.php [new file with mode: 0644]
tests/phpunit/includes/title/MediaWikiTitleCodecTest.php
tests/phpunit/includes/user/LocalIdLookupTest.php
tests/phpunit/includes/utils/FileContentsHasherTest.php
tests/phpunit/includes/utils/MWCryptHKDFTest.php
tests/phpunit/includes/utils/MWCryptHashTest.php
tests/phpunit/includes/utils/UIDGeneratorTest.php
tests/phpunit/languages/LanguageClassesTestCase.php
tests/phpunit/languages/LanguageTest.php
tests/phpunit/maintenance/backupTextPassTest.php
tests/phpunit/maintenance/backup_LogTest.php
tests/phpunit/maintenance/backup_PageTest.php
tests/phpunit/mocks/content/DummyContentForTesting.php
tests/phpunit/mocks/content/DummyNonTextContent.php
tests/phpunit/mocks/media/MockOggHandler.php [new file with mode: 0644]
tests/phpunit/phpunit.php
tests/phpunit/skins/SideBarTest.php
tests/phpunit/structure/ApiDocumentationTest.php
tests/phpunit/structure/ExtensionJsonValidationTest.php [new file with mode: 0644]
tests/phpunit/structure/ResourcesTest.php
tests/phpunit/suite.xml
tests/phpunit/suites/ExtensionsTestSuite.php
tests/phpunit/suites/UploadFromUrlTestSuite.php
tests/qunit/QUnitTestResources.php
tests/qunit/data/generateJqueryMsgData.php
tests/qunit/data/testrunner.js
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.options.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/mediawiki.requestIdleCallback.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.viewport.test.js [new file with mode: 0644]
tests/testHelpers.inc

diff --git a/.jscsrc b/.jscsrc
index 3b94b90..f3db218 100644 (file)
--- a/.jscsrc
+++ b/.jscsrc
@@ -4,16 +4,14 @@
 
        "requireVarDeclFirst": null,
 
-       "disallowQuotedKeysInObjects": "allButReserved",
        "requireDotNotation": { "allExcept": [ "keywords" ] },
        "jsDoc": {
                "checkAnnotations": {
                        "preset": "jsduck5",
                        "extra": {
-                               "context": true,
-                               "source": true,
-                               "see": true,
-                               "private": true
+                               "context": "some",
+                               "source": "some",
+                               "see": "some"
                        }
                },
                "checkParamNames": true,
index 3a83b36..2f8f53a 100644 (file)
@@ -10,6 +10,9 @@ As of 1.27, MediaWiki now requires PHP 5.5.9 or higher. This corresponds with
 HHVM 3.1.
 
 === Configuration changes in 1.27 ===
+* $wgAllowMicrodataAttributes and $wgAllowRdfaAttributes were removed,
+  now always enabled. If you use RDFa on your wiki, you now have to explicitly
+  set $wgHtml5Version to 'HTML+RDFa 1.0' or 'XHTML+RDFa 1.0'.
 * $wgUseLinkNamespaceDBFields was removed.
 * Deprecated $wgResourceLoaderMinifierStatementsOnOwnLine and
   $wgResourceLoaderMinifierMaxLineLength, because there was little value in
@@ -98,6 +101,9 @@ HHVM 3.1.
 * $wgEnotifUseJobQ was removed and the job queue is always used.
 * The functionality of the ApiSandbox extension has been merged into core. The
   extension should no longer be used.
+* $wgPreloadJavaScriptMwUtil was removed (deprecated in 1.26).
+  Extensions, skins, gadgets and scripts that use the mediawiki.util module must
+  express a dependency on it.
 
 === New features in 1.27 ===
 * $wgDataCenterUpdateStickTTL was also added. This decides how long a user
@@ -172,7 +178,8 @@ HHVM 3.1.
 ==== Upgraded external libraries ====
 * Updated oojs/oojs-ui from v0.12.12 to v0.13.3.
 * Updated composer/semver from v1.0.0 to v1.2.0.
-* Update liuggio/statsd-php-client to 1.0.18.
+* Updated liuggio/statsd-php-client to 1.0.18.
+* Updated QUnit from v1.18.0 to v1.22.0.
 
 ==== New external libraries ====
 * Added wikimedia/base-convert v1.0.1.
@@ -213,13 +220,36 @@ HHVM 3.1.
 ** ApiFormatDbg
 ** ApiFormatTxt
 ** ApiFormatYaml
+* ApiBase::addTokenProperties() was removed (deprecated since 1.24).
+* ApiBase::getFinalPossibleErrors() was removed (deprecated since 1.24).
+* ApiBase::getFinalResultProperties() was removed (deprecated since 1.24).
+* ApiBase::getRequireAtLeastOneParameterErrorMessages() was removed (deprecated since 1.24).
+* ApiBase::getPossibleErrors() was removed (deprecated since 1.24).
+* ApiBase::getRequireMaxOneParameterErrorMessages() was removed (deprecated since 1.24).
+* ApiBase::getRequireOnlyOneParameterErrorMessages() was removed (deprecated since 1.24).
+* ApiBase::getResultProperties() was removed (deprecated since 1.24).
+* ApiBase::getTitleOrPageIdErrorMessage() was removed (deprecated since 1.24).
+* ApiBase::parseErrors() was removed (deprecated since 1.24).
 * ApiQueryBase::titleToKey(), ApiQueryBase::keyToTitle() and
   ApiQueryBase::keyPartToTitle() all removed (deprecated since 1.24).
 * ApiQueryBase::checkRowCount() was removed (deprecated since 1.24).
 * ApiQueryBase::getDirectionDescription() was removed (deprecated since 1.25).
+* ApiQuery::getGenerators() was removed (deprecated since 1.21).
 * ApiQuery::getModules() was removed (deprecated since 1.21).
+* ApiQuery::getModuleType() was removed (deprecated since 1.21).
+* ApiQuery::setGeneratorContinue() was removed (deprecated since 1.24).
 * ApiMain::getModules() was removed (deprecated since 1.21).
 * ApiBase::getVersion() was removed (deprecated since 1.21).
+* Language::getLangObj() was removed (deprecated since 1.24).
+* Language::getLanguageName() was removed (deprecated since 1.20).
+* Language::getLanguageNames() was removed (deprecated since 1.20).
+* Language::getTranslatedLanguageNames() was removed (deprecated since 1.20).
+* Language::specialPage() was removed (deprecated since 1.24).
+* MediaWikiTestCase::assertException() was removed (deprecated since 1.22).
+* OutputPage::getHeadItems() was removed (deprecated since 1.24).
+* OutputPage::getScript() was removed (deprecated since 1.24).
+* OutputPage::out() was removed (deprecated since 1.22).
+* OutputPage::setAllowedModules() was removed (deprecated since 1.24).
 
 === Languages updated in 1.27 ===
 
@@ -317,6 +347,28 @@ changes to languages because of Phabricator reports.
   rather than consume everything until the end of the page.
 * New maintenance script resetUserEmail.php allows sysadmins to reset user emails in case
   a user forgot password/account was stolen.
+* wfCheckEntropy() was removed (deprecated in 1.27).
+* Browser support for Internet Explorer 8 lowered from Grade A to Grade C.
+* ContentHandler::supportsCategories method added. Default is true.
+  CategoryMembershipChangeJob updates are skipped for content that
+  does not support categories.
+* wikidiff difference engine is no longer supported, anyone still using it are encouraged
+  to upgrade to wikidiff2 which is actively maintained and has better package availability.
+* Database logic was removed from WatchedItem and a WatchedItemStore was created:
+** WatchedItem::IGNORE_USER_RIGHTS and WatchedItem::CHECK_USER_RIGHTS were deprecated.
+   User::IGNORE_USER_RIGHTS and User::CHECK_USER_RIGHTS were introduced.
+** WatchedItem::fromUserTitle was deprecated in favour of the constructor.
+** WatchedItem::resetNotificationTimestamp was deprecated.
+** WatchedItem::batchAddWatch was deprecated.
+** WatchedItem::addWatch was deprecated.
+** WatchedItem::removeWatch was deprecated.
+** WatchedItem::isWatched was deprecated.
+** WatchedItem::duplicateEntries was deprecated.
+** EmailNotification::updateWatchlistTimestamp was deprecated.
+** User::getWatchedItem was removed.
+* Unit tests don't work with external PHPUnit anymore, Composer is now the only supported
+  way. Run `composer install` to install it and other dev dependencies to run unit tests.
+* wl_id field added to the watchlist table.
 
 == Compatibility ==
 
index 341cb90..e74df0a 100644 (file)
@@ -703,6 +703,7 @@ $wgAutoloadLocalClasses = [
        'LinksDeletionUpdate' => __DIR__ . '/includes/deferred/LinksDeletionUpdate.php',
        'LinksUpdate' => __DIR__ . '/includes/deferred/LinksUpdate.php',
        'ListDuplicatedFilesPage' => __DIR__ . '/includes/specials/SpecialListDuplicatedFiles.php',
+       'ListToggle' => __DIR__ . '/includes/ListToggle.php',
        'ListVariants' => __DIR__ . '/maintenance/language/listVariants.php',
        'ListredirectsPage' => __DIR__ . '/includes/specials/SpecialListredirects.php',
        'LoadBalancer' => __DIR__ . '/includes/db/loadbalancer/LoadBalancer.php',
@@ -755,7 +756,7 @@ $wgAutoloadLocalClasses = [
        'MWUnknownContentModelException' => __DIR__ . '/includes/content/ContentHandler.php',
        'MachineReadableRCFeedFormatter' => __DIR__ . '/includes/rcfeed/MachineReadableRCFeedFormatter.php',
        'MagicWord' => __DIR__ . '/includes/MagicWord.php',
-       'MagicWordArray' => __DIR__ . '/includes/MagicWord.php',
+       'MagicWordArray' => __DIR__ . '/includes/MagicWordArray.php',
        'MailAddress' => __DIR__ . '/includes/mail/MailAddress.php',
        'Maintenance' => __DIR__ . '/maintenance/Maintenance.php',
        'MaintenanceFormatInstallDoc' => __DIR__ . '/maintenance/formatInstallDoc.php',
@@ -820,6 +821,7 @@ $wgAutoloadLocalClasses = [
        'MediaWiki\\Widget\\ComplexNamespaceInputWidget' => __DIR__ . '/includes/widget/ComplexNamespaceInputWidget.php',
        'MediaWiki\\Widget\\ComplexTitleInputWidget' => __DIR__ . '/includes/widget/ComplexTitleInputWidget.php',
        'MediaWiki\\Widget\\NamespaceInputWidget' => __DIR__ . '/includes/widget/NamespaceInputWidget.php',
+       'MediaWiki\\Widget\\SearchInputWidget' => __DIR__ . '/includes/widget/SearchInputWidget.php',
        'MediaWiki\\Widget\\TitleInputWidget' => __DIR__ . '/includes/widget/TitleInputWidget.php',
        'MediaWiki\\Widget\\UserInputWidget' => __DIR__ . '/includes/widget/UserInputWidget.php',
        'MemCachedClientforWiki' => __DIR__ . '/includes/compat/MemcachedClientCompat.php',
@@ -1401,6 +1403,7 @@ $wgAutoloadLocalClasses = [
        'WantedTemplatesPage' => __DIR__ . '/includes/specials/SpecialWantedtemplates.php',
        'WatchAction' => __DIR__ . '/includes/actions/WatchAction.php',
        'WatchedItem' => __DIR__ . '/includes/WatchedItem.php',
+       'WatchedItemStore' => __DIR__ . '/includes/WatchedItemStore.php',
        'WatchlistCleanup' => __DIR__ . '/maintenance/cleanupWatchlist.php',
        'WebInstaller' => __DIR__ . '/includes/installer/WebInstaller.php',
        'WebInstallerComplete' => __DIR__ . '/includes/installer/WebInstallerComplete.php',
index f114914..e0667e2 100644 (file)
@@ -21,7 +21,7 @@
                "ext-iconv": "*",
                "liuggio/statsd-php-client": "1.0.18",
                "mediawiki/at-ease": "1.1.0",
-               "oojs/oojs-ui": "0.15.4",
+               "oojs/oojs-ui": "0.16.4",
                "oyejorge/less.php": "1.7.0.10",
                "php": ">=5.5.9",
                "psr/log": "1.0.0",
@@ -29,7 +29,7 @@
                "wikimedia/base-convert": "1.0.1",
                "wikimedia/cdb": "1.3.0",
                "wikimedia/cldr-plural-rule-parser": "1.0.0",
-               "wikimedia/composer-merge-plugin": "1.3.0",
+               "wikimedia/composer-merge-plugin": "1.3.1",
                "wikimedia/ip-set": "1.0.1",
                "wikimedia/php-session-serializer": "1.0.3",
                "wikimedia/relpath": "1.0.3",
@@ -45,7 +45,7 @@
                "monolog/monolog": "~1.17.2",
                "nikic/php-parser": "1.4.1",
                "nmred/kafka-php": "0.1.5",
-               "phpunit/phpunit": "3.7.37",
+               "phpunit/phpunit": "4.8.24",
                "wikimedia/avro": "1.7.7"
        },
        "suggest": {
index 8822e0c..9478f48 100644 (file)
@@ -178,7 +178,8 @@ once for 'TimStarling', and once for 'brion'.
 
 Hooks can return three possible values:
 
-  * true: the hook has operated successfully
+  * No return value (or null): the hook has operated successfully. Previously,
+    true was required. This is the default since MediaWiki 1.23.
   * "some string": an error occurred; processing should stop and the error
                    should be shown to the user
   * false: the hook has successfully done the work necessary and the calling
@@ -375,6 +376,7 @@ $user: Current user
 'APIEditBeforeSave': Before saving a page with api.php?action=edit, after
 processing request parameters. Return false to let the request fail, returning
 an error message or an <edit result="Failure"> tag if $resultArr was filled.
+Unlike for example 'EditFilterMergedContent' this also being run on undo.
 $editPage: the EditPage object
 $text: the new text of the article (has yet to be saved)
 &$resultArr: data in this array will be added to the API result
@@ -2397,7 +2399,8 @@ $key: the section name
 &$legend: the legend text. Defaults to wfMessage( "prefs-$key" )->text() but may
   be overridden
 
-'PrefixSearchBackend': Override the title prefix search used for OpenSearch and
+'PrefixSearchBackend': DEPRECATED! Override SearchEngine::completionSearchBackend instead.
+Override the title prefix search used for OpenSearch and
 AJAX search suggestions. Put results into &$results outparam and return false.
 $ns: array of int namespace keys to search in
 $search: search term (not guaranteed to be conveniently normalized)
@@ -2913,6 +2916,14 @@ go to the existing page.
 $t: title object searched for
 &$params: an array of the default message name and page title (as parameter)
 
+'SpecialSearchGoResult': If a hook returns false the 'go' feature will be
+canceled and a normal search will be performed. Returning true without setting
+$url does a standard redirect to $title. Setting $url redirects to the
+specified URL.
+$term - The string the user searched for
+$title - The title the 'go' feature has decided to forward the user to
+&$url - Initially null, hook subscribers can set this to specify the final url to redirect to
+
 'SpecialSearchNogomatch': Called when user clicked the "Go" button but the
 target doesn't exist.
 &$title: title object generated from the text entered by the user
@@ -3065,6 +3076,11 @@ $old: old title
 $nt: new title
 $user: user who does the move
 
+'TitleMoveStarting': Before moving an article (title), but just after the atomic DB section starts.
+$old: old title
+$nt: new title
+$user: user who does the move
+
 'TitleMoveComplete': After moving an article (title), post-commit.
 &$old: old title
 &$nt: new title
index 55fa725..8c59e72 100644 (file)
@@ -122,7 +122,7 @@ Lag time of the databases:
        key: $wgDBname:lag_times
        ex: wikidb:lag_times
        stores: array mapping the database id to its lag time
-       expriy: 5 secondes
+       expiry: 5 secondes
        cleared by: nothing
 
 Localisation:
@@ -139,7 +139,7 @@ Message Cache:
        ex: wikidb:messages, wikidb:messages-hash, wikidb:messages-status
        stores: an array where the keys are DB keys and the values are messages
        set in: wfMessage(), Article::editUpdates() and Title::moveTo()
-       expriy: $wgMsgCacheExpiry
+       expiry: $wgMsgCacheExpiry
        cleared by: nothing
 
 Newtalk:
@@ -194,14 +194,14 @@ Revision text:
        ex: wikidb:revisiontext:textid:1012
        stores: text of a revision
        cleared by: nothing
-       expriry: $wgRevisionCacheExpiry
+       expiry: $wgRevisionCacheExpiry
 
 Sessions:
        controlled by: $wgSessionsInObjectCache
        key: $wgBDname:session:$id
        ex: wikidb:session:38d7c5b8d3bfc51egf40c69bc40f8be3
        stores: $SESSION, useful when using a multi-sever wiki
-       expriy: one hour
+       expiry: one hour
        cleared by: session_destroy()
 
 Sidebar:
@@ -210,7 +210,7 @@ Sidebar:
        key: $wgDBname:sidebar
        ex: wikidb:sidebar
        stores: the html output of the sidebar
-       expriy: $wgSidebarCacheExpiry
+       expiry: $wgSidebarCacheExpiry
        cleared by: MessageCache::replace()
 
 Special:Allpages:
@@ -232,11 +232,4 @@ Special:Recentchanges (feed):
        Special:Recentchanges?action=purge&feed=atom,
        but note need $wgGroupPermissions[...]['purge'] permission.
 
-User:
-       key: $wgDBname:user:id:$sId
-       ex: wikidb:user:id:51
-       stores: instance of class User
-       set in: User::saveToCache()
-       cleared by: User::saveSettings(), User::clearSharedCache()
-
 ... more to come ...
index 4a08185..883b8a3 100644 (file)
@@ -39,15 +39,6 @@ class AutoLoader {
                global $wgAutoloadClasses, $wgAutoloadLocalClasses,
                        $wgAutoloadAttemptLowercase;
 
-               // Workaround for PHP bug <https://bugs.php.net/bug.php?id=49143> (5.3.2. is broken, it's
-               // fixed in 5.3.6). Strip leading backslashes from class names. When namespaces are used,
-               // leading backslashes are used to indicate the top-level namespace, e.g. \foo\Bar. When
-               // used like this in the code, the leading backslash isn't passed to the auto-loader
-               // ($className would be 'foo\Bar'). However, if a class is accessed using a string instead
-               // of a class literal (e.g. $class = '\foo\Bar'; new $class()), then some versions of PHP
-               // do not strip the leading backlash in this case, causing autoloading to fail.
-               $className = ltrim( $className, '\\' );
-
                $filename = false;
 
                if ( isset( $wgAutoloadLocalClasses[$className] ) ) {
index 696a520..93df004 100644 (file)
@@ -137,7 +137,7 @@ class Block {
 
                if ( $options['by'] ) {
                        # Local user
-                       $this->setBlocker( User::newFromID( $options['by'] ) );
+                       $this->setBlocker( User::newFromId( $options['by'] ) );
                } else {
                        # Foreign user
                        $this->setBlocker( $options['byText'] );
@@ -568,7 +568,7 @@ class Block {
                if ( $this->forcedTargetID ) {
                        $uid = $this->forcedTargetID;
                } else {
-                       $uid = $this->target instanceof User ? $this->target->getID() : 0;
+                       $uid = $this->target instanceof User ? $this->target->getId() : 0;
                }
 
                $a = [
@@ -844,7 +844,7 @@ class Block {
                                        'ipb_expiry' => $dbw->timestamp( $this->mExpiry ),
                                ],
                                [ /* WHERE */
-                                       'ipb_address' => (string)$this->getTarget()
+                                       'ipb_id' => $this->getId(),
                                ],
                                __METHOD__
                        );
@@ -1307,8 +1307,7 @@ class Block {
                # but actually an old subpage (bug #29797)
                if ( strpos( $target, '/' ) !== false ) {
                        # An old subpage, drill down to the user behind it
-                       $parts = explode( '/', $target );
-                       $target = $parts[0];
+                       $target = explode( '/', $target )[0];
                }
 
                $userObj = User::newFromName( $target );
index b912603..f749003 100644 (file)
@@ -387,6 +387,7 @@ class CategoryViewer extends ContextSource {
                $r = '';
                $rescnt = count( $this->children );
                $dbcnt = $this->cat->getSubcatCount();
+               // This function should be called even if the result isn't used, it has side-effects
                $countmsg = $this->getCountMessage( $rescnt, $dbcnt, 'subcat' );
 
                if ( $rescnt > 0 ) {
@@ -417,6 +418,7 @@ class CategoryViewer extends ContextSource {
                $dbcnt = $this->cat->getPageCount() - $this->cat->getSubcatCount()
                        - $this->cat->getFileCount();
                $rescnt = count( $this->articles );
+               // This function should be called even if the result isn't used, it has side-effects
                $countmsg = $this->getCountMessage( $rescnt, $dbcnt, 'article' );
 
                if ( $rescnt > 0 ) {
@@ -437,10 +439,11 @@ class CategoryViewer extends ContextSource {
        function getImageSection() {
                $r = '';
                $rescnt = $this->showGallery ? $this->gallery->count() : count( $this->imgsNoGallery );
-               if ( $rescnt > 0 ) {
-                       $dbcnt = $this->cat->getFileCount();
-                       $countmsg = $this->getCountMessage( $rescnt, $dbcnt, 'file' );
+               $dbcnt = $this->cat->getFileCount();
+               // This function should be called even if the result isn't used, it has side-effects
+               $countmsg = $this->getCountMessage( $rescnt, $dbcnt, 'file' );
 
+               if ( $rescnt > 0 ) {
                        $r .= "<div id=\"mw-category-media\">\n";
                        $r .= '<h2>' .
                                $this->msg(
index 08538ee..63d04c9 100644 (file)
@@ -1461,27 +1461,27 @@ $wgDjvuOutputExtension = 'jpg';
 $wgEmergencyContact = false;
 
 /**
- * Password reminder email address.
+ * Sender email address for e-mail notifications.
  *
- * The address we should use as sender when a user is requesting his password.
+ * The address we use as sender when a user requests a password reminder.
  *
  * Defaults to "apache@$wgServerName".
  */
 $wgPasswordSender = false;
 
 /**
- * Password reminder name
+ * Sender name for e-mail notifications.
  *
  * @deprecated since 1.23; use the system message 'emailsender' instead.
  */
 $wgPasswordSenderName = 'MediaWiki Mail';
 
 /**
- * Dummy address which should be accepted during mail send action.
- * It might be necessary to adapt the address or to set it equal
- * to the $wgEmergencyContact address.
+ * Reply-To address for e-mail notifications.
+ *
+ * Defaults to $wgPasswordSender.
  */
-$wgNoReplyAddress = 'reply@not.possible.invalid';
+$wgNoReplyAddress = false;
 
 /**
  * Set to true to enable the e-mail basic features:
@@ -1500,7 +1500,7 @@ $wgEnableUserEmail = true;
  * Set to true to put the sending user's email in a Reply-To header
  * instead of From. ($wgEmergencyContact will be used as From.)
  *
- * Some mailers (eg sSMTP) set the SMTP envelope sender to the From value,
+ * Some mailers (eg SMTP) set the SMTP envelope sender to the From value,
  * which can cause problems with SPF validation and leak recipient addresses
  * when bounces are sent to the sender.
  */
@@ -2096,7 +2096,7 @@ $wgTransactionalTimeLimit = 120;
 
 /**
  * Directory for caching data in the local filesystem. Should not be accessible
- * from the web. Set this to false to not use any local caches.
+ * from the web.
  *
  * Note: if multiple wikis share the same localisation cache directory, they
  * must all have the same set of extensions. You can set a directory just for
@@ -2294,6 +2294,14 @@ $wgSessionHandler = null;
 
 /**
  * Whether to use PHP session handling ($_SESSION and session_*() functions)
+ *
+ * If the constant MW_NO_SESSION is defined, this is forced to 'disable'.
+ *
+ * If the constant MW_NO_SESSION_HANDLER is defined, this is ignored and PHP
+ * session handling will function independently of SessionHandler.
+ * SessionHandler and PHP's session handling may attempt to override each
+ * others' cookies.
+ *
  * @since 1.27
  * @var string
  *  - 'enable': Integrate with PHP's session handling as much as possible.
@@ -2302,28 +2310,6 @@ $wgSessionHandler = null;
  */
 $wgPHPSessionHandling = 'enable';
 
-/**
- * The number of different IPs in the same session within a period of $wgSuspiciousIpExpiry
- * that should cause warnings to be logged. This is meant more for debugging errors in the
- * authentication system than for detecting abuse.
- * @since 1.27
- */
-$wgSuspiciousIpPerSessionLimit = 2;
-
-/**
- * Like $wgSuspiciousIpPerSessionLimit but over all requests from the same user within
- * $wgSuspiciousIpExpiry, whether they are in the same session or not.
- * @since 1.27
- */
-$wgSuspiciousIpPerUserLimit = 5;
-
-/**
- * Time in seconds to remember IPs for, for the purposes of $wgSuspiciousIpPerSessionLimit and
- * $wgSuspiciousIpPerUserLimit.
- * @since 1.27
- */
-$wgSuspiciousIpExpiry = 600;
-
 /**
  * If enabled, will send MemCached debugging information to $wgDebugLogFile
  */
@@ -3095,10 +3081,11 @@ $wgHtml5 = true;
 
 /**
  * Defines the value of the version attribute in the &lt;html&gt; tag, if any.
- * If $wgAllowRdfaAttributes is true, and this evaluates to boolean false
- * (like if it's left at the default null value), it will be auto-initialized
- * to the correct value for RDFa+HTML5.  As such, you should have no reason to
- * ever actually set this to anything.
+ *
+ * If your wiki uses RDFa, set it to the correct value for RDFa+HTML5.
+ * Correct current values are 'HTML+RDFa 1.0' or 'XHTML+RDFa 1.0'.
+ * See also http://www.w3.org/TR/rdfa-in-html/#document-conformance
+ * @since 1.16
  */
 $wgHtml5Version = null;
 
@@ -3119,17 +3106,6 @@ $wgHTMLFormAllowTableFormat = true;
  */
 $wgUseMediaWikiUIEverywhere = false;
 
-/**
- * Enabled RDFa attributes for use in wikitext.
- * NOTE: Interaction with HTML5 is somewhat underspecified.
- */
-$wgAllowRdfaAttributes = false;
-
-/**
- * Enabled HTML5 microdata attributes for use in wikitext.
- */
-$wgAllowMicrodataAttributes = false;
-
 /**
  * Should we try to make our HTML output well-formed XML?  If set to false,
  * output will be a few bytes shorter, and the HTML will arguably be more
@@ -3588,24 +3564,6 @@ $wgResourceLoaderMinifierMaxLineLength = 1000;
  */
 $wgIncludeLegacyJavaScript = true;
 
-/**
- * Whether to ensure the mediawiki.util is loaded before other modules.
- *
- * Before MediaWiki 1.19, modules used to load less asynchronous which allowed
- * modules to lack dependencies on 'popular' modules that were likely loaded already.
- *
- * This setting is to aid scripts during migration by providing mediawiki.util
- * unconditionally (which was the most commonly missed dependency). It doesn't
- * cover all missing dependencies obviously but should fix most of them.
- *
- * This should be removed at some point after site/user scripts have been fixed.
- * Enable this if your wiki has a large amount of user/site scripts that are
- * lacking dependencies.
- *
- * @deprecated since 1.26: Always declare dependencies.
- */
-$wgPreloadJavaScriptMwUtil = false;
-
 /**
  * Whether or not to assign configuration variables to the global window object.
  *
@@ -4889,6 +4847,7 @@ $wgGroupPermissions['sysop']['undelete'] = true;
 $wgGroupPermissions['sysop']['editinterface'] = true;
 $wgGroupPermissions['sysop']['editusercss'] = true;
 $wgGroupPermissions['sysop']['edituserjs'] = true;
+$wgGroupPermissions['sysop']['editcontentmodel'] = true;
 $wgGroupPermissions['sysop']['import'] = true;
 $wgGroupPermissions['sysop']['importupload'] = true;
 $wgGroupPermissions['sysop']['move'] = true;
@@ -5204,7 +5163,7 @@ $wgHideUserContribLimit = 1000;
 /**
  * Number of accounts each IP address may create, 0 to disable.
  *
- * @warning Requires memcached
+ * @warning Requires $wgMainCacheType to be enabled
  */
 $wgAccountCreationThrottle = 0;
 
@@ -5385,9 +5344,23 @@ $wgQueryPageDefaultLimit = 50;
 /**
  * Limit password attempts to X attempts per Y seconds per IP per account.
  *
- * @warning Requires memcached.
- */
-$wgPasswordAttemptThrottle = [ 'count' => 5, 'seconds' => 300 ];
+ * Value is an array of arrays. Each sub-array must have a key for count
+ * (ie count of how many attempts before throttle) and a key for seconds.
+ * If the key 'allIPs' (case sensitive) is present, then the limit is
+ * just per account instead of per IP per account.
+ *
+ * @since 1.27 allIps support and multiple limits added in 1.27. Prior
+ *   to 1.27 this only supported having a single throttle.
+ * @warning Requires $wgMainCacheType to be enabled
+ */
+$wgPasswordAttemptThrottle = [
+       // Short term limit
+       [ 'count' => 5, 'seconds' => 300 ],
+       // Long term limit. We need to balance the risk
+       // of somebody using this as a DoS attack to lock someone
+       // out of their account, and someone doing a brute force attack.
+       [ 'count' => 150, 'seconds' => 60*60*48 ],
+];
 
 /**
  * @var Array Map of (grant => right => boolean)
@@ -5972,7 +5945,7 @@ $wgCachePrefix = false;
 /**
  * Display the new debugging toolbar. This also enables profiling on database
  * queries and other useful output.
- * Will disable file cache.
+ * Will be ignored if $wgUseFileCache or $wgUseSquid is enabled.
  *
  * @since 1.19
  */
@@ -7202,6 +7175,7 @@ $wgLogActionsHandlers = [
        'block/reblock' => 'BlockLogFormatter',
        'block/unblock' => 'BlockLogFormatter',
        'contentmodel/change' => 'ContentModelLogFormatter',
+       'contentmodel/new' => 'ContentModelLogFormatter',
        'delete/delete' => 'DeleteLogFormatter',
        'delete/event' => 'DeleteLogFormatter',
        'delete/restore' => 'DeleteLogFormatter',
@@ -7743,7 +7717,11 @@ $wgUpdateRowsPerQuery = 100;
  */
 
 /**
- * Name of the external diff engine to use
+ * Name of the external diff engine to use. Supported values:
+ * * false: default PHP implementation, DairikiDiff
+ * * 'wikidiff2': Wikimedia's fast difference engine implemented as a PHP/HHVM module
+ * * 'wikidiff3': newer PHP-based difference engine
+ * * any other string is treated as a path to external diff executable
  */
 $wgExternalDiffEngine = false;
 
index b5d0a7b..b3bb07a 100644 (file)
@@ -530,11 +530,12 @@ class EditPage {
                if ( $permErrors ) {
                        wfDebug( __METHOD__ . ": User can't edit\n" );
                        // Auto-block user's IP if the account was "hard" blocked
-                       $user = $wgUser;
-                       DeferredUpdates::addCallableUpdate( function() use ( $user ) {
-                               $user->spreadAnyEditBlock();
-                       } );
-
+                       if ( !wfReadOnly() ) {
+                               $user = $wgUser;
+                               DeferredUpdates::addCallableUpdate( function () use ( $user ) {
+                                       $user->spreadAnyEditBlock();
+                               } );
+                       }
                        $this->displayPermissionsError( $permErrors );
 
                        return;
@@ -1520,7 +1521,7 @@ class EditPage {
                                // is if an extension hook aborted from inside ArticleSave.
                                // Render the status object into $this->hookError
                                // FIXME this sucks, we should just use the Status object throughout
-                               $this->hookError = '<div class="error">' . $status->getWikitext() .
+                               $this->hookError = '<div class="error">' . $status->getWikiText() .
                                        '</div>';
                                return true;
                }
@@ -1735,7 +1736,9 @@ class EditPage {
 
                if ( $wgUser->isBlockedFrom( $this->mTitle, false ) ) {
                        // Auto-block user's IP if the account was "hard" blocked
-                       $wgUser->spreadAnyEditBlock();
+                       if ( !wfReadOnly() ) {
+                               $wgUser->spreadAnyEditBlock();
+                       }
                        # Check block state against master, thus 'false'.
                        $status->setResult( false, self::AS_BLOCKED_PAGE_FOR_USER );
                        return $status;
@@ -2065,7 +2068,7 @@ class EditPage {
                if ( $changingContentModel ) {
                        $this->addContentModelChangeLogEntry(
                                $wgUser,
-                               $oldContentModel,
+                               $new ? false : $oldContentModel,
                                $this->contentModel,
                                $this->summary
                        );
@@ -2076,12 +2079,13 @@ class EditPage {
 
        /**
         * @param User $user
-        * @param string $oldModel
+        * @param string|false $oldModel false if the page is being newly created
         * @param string $newModel
         * @param string $reason
         */
        protected function addContentModelChangeLogEntry( User $user, $oldModel, $newModel, $reason ) {
-               $log = new ManualLogEntry( 'contentmodel', 'change' );
+               $new = $oldModel === false;
+               $log = new ManualLogEntry( 'contentmodel', $new ? 'new' : 'change' );
                $log->setPerformer( $user );
                $log->setTarget( $this->mTitle );
                $log->setComment( $reason );
@@ -2108,7 +2112,7 @@ class EditPage {
                $watch = $this->watchthis;
                // Do this in its own transaction to reduce contention...
                DeferredUpdates::addCallableUpdate( function () use ( $user, $title, $watch ) {
-                       if ( $watch == $user->isWatched( $title, WatchedItem::IGNORE_USER_RIGHTS ) ) {
+                       if ( $watch == $user->isWatched( $title, User::IGNORE_USER_RIGHTS ) ) {
                                return; // nothing to change
                        }
                        WatchAction::doWatchOrUnwatch( $watch, $title, $user );
@@ -2320,8 +2324,7 @@ class EditPage {
                # Show a warning message when someone creates/edits a user (talk) page but the user does not exist
                # Show log extract when the user is currently blocked
                if ( $namespace == NS_USER || $namespace == NS_USER_TALK ) {
-                       $parts = explode( '/', $this->mTitle->getText(), 2 );
-                       $username = $parts[0];
+                       $username = explode( '/', $this->mTitle->getText(), 2 )[0];
                        $user = User::newFromName( $username, false /* allow IP users*/ );
                        $ip = User::isIP( $username );
                        $block = Block::newFromTarget( $user, $user );
@@ -2540,7 +2543,7 @@ class EditPage {
                        Xml::openElement( 'div', [ 'id' => 'antispam-container', 'style' => 'display: none;' ] )
                        . Html::rawElement(
                                'label',
-                               [ 'for' => 'wpAntiSpam' ],
+                               [ 'for' => 'wpAntispam' ],
                                wfMessage( 'simpleantispam-label' )->parse()
                        )
                        . Xml::element(
index 14f3cc1..29516ab 100644 (file)
@@ -43,7 +43,7 @@ class GitInfo {
        /**
         * Cached git information.
         */
-       protected $cache = array();
+       protected $cache = [];
 
        /**
         * Map of repo URLs to viewer URLs. Access via static method getViewers().
@@ -215,7 +215,7 @@ class GitInfo {
                                is_executable( $wgGitBin ) &&
                                $this->getHead() !== false
                        ) {
-                               $environment = array( "GIT_DIR" => $this->basedir );
+                               $environment = [ "GIT_DIR" => $this->basedir ];
                                $cmd = wfEscapeShellArg( $wgGitBin ) .
                                        " show -s --format=format:%ct HEAD";
                                $retc = false;
@@ -265,11 +265,11 @@ class GitInfo {
                        if ( preg_match( $pattern, $url, $matches ) ) {
                                $viewerUrl = preg_replace( $pattern, $viewer, $url );
                                $headSHA1 = $this->getHeadSHA1();
-                               $replacements = array(
+                               $replacements = [
                                        '%h' => substr( $headSHA1, 0, 7 ),
                                        '%H' => $headSHA1,
                                        '%r' => urlencode( $matches[1] ),
-                               );
+                               ];
                                return strtr( $viewerUrl, $replacements );
                        }
                }
@@ -396,7 +396,7 @@ class GitInfo {
 
                if ( self::$viewers === false ) {
                        self::$viewers = $wgGitRepositoryViewers;
-                       Hooks::run( 'GitViewers', array( &self::$viewers ) );
+                       Hooks::run( 'GitViewers', [ &self::$viewers ] );
                }
 
                return self::$viewers;
index ac1dd6d..3fa91fa 100644 (file)
@@ -1557,7 +1557,7 @@ function wfDebugBacktrace( $limit = 0 ) {
                return [];
        }
 
-       if ( $limit && version_compare( PHP_VERSION, '5.4.0', '>=' ) ) {
+       if ( $limit ) {
                return array_slice( debug_backtrace( DEBUG_BACKTRACE_PROVIDE_OBJECT, $limit + 1 ), 1 );
        } else {
                return array_slice( debug_backtrace(), 1 );
@@ -1738,7 +1738,7 @@ function wfEscapeWikiText( $text ) {
                                $repl2[] = preg_quote( substr( $prot, 0, -1 ), '/' );
                        }
                }
-               $repl2 = $repl2 ? '/\b(' . join( '|', $repl2 ) . '):/i' : '/^(?!)/';
+               $repl2 = $repl2 ? '/\b(' . implode( '|', $repl2 ) . '):/i' : '/^(?!)/';
        }
        $text = substr( strtr( "\n$text", $repl ), 1 );
        $text = preg_replace( $repl2, '$1&#58;', $text );
@@ -1949,9 +1949,9 @@ function mimeTypeMatch( $type, $avail ) {
        if ( array_key_exists( $type, $avail ) ) {
                return $type;
        } else {
-               $parts = explode( '/', $type );
-               if ( array_key_exists( $parts[0] . '/*', $avail ) ) {
-                       return $parts[0] . '/*';
+               $mainType = explode( '/', $type )[0];
+               if ( array_key_exists( "$mainType/*", $avail ) ) {
+                       return "$mainType/*";
                } elseif ( array_key_exists( '*/*', $avail ) ) {
                        return '*/*';
                } else {
@@ -1977,8 +1977,8 @@ function wfNegotiateType( $cprefs, $sprefs ) {
        $combine = [];
 
        foreach ( array_keys( $sprefs ) as $type ) {
-               $parts = explode( '/', $type );
-               if ( $parts[1] != '*' ) {
+               $subType = explode( '/', $type )[1];
+               if ( $subType != '*' ) {
                        $ckey = mimeTypeMatch( $type, $cprefs );
                        if ( $ckey ) {
                                $combine[$type] = $sprefs[$type] * $cprefs[$ckey];
@@ -1987,8 +1987,8 @@ function wfNegotiateType( $cprefs, $sprefs ) {
        }
 
        foreach ( array_keys( $cprefs ) as $type ) {
-               $parts = explode( '/', $type );
-               if ( $parts[1] != '*' && !array_key_exists( $type, $sprefs ) ) {
+               $subType = explode( '/', $type )[1];
+               if ( $subType != '*' && !array_key_exists( $type, $sprefs ) ) {
                        $skey = mimeTypeMatch( $type, $sprefs );
                        if ( $skey ) {
                                $combine[$type] = $sprefs[$skey] * $cprefs[$type];
@@ -2988,22 +2988,6 @@ function wfBaseConvert( $input, $sourceBase, $destBase, $pad = 1,
        return Wikimedia\base_convert( $input, $sourceBase, $destBase, $pad, $lowercase, $engine );
 }
 
-/**
- * Check if there is sufficient entropy in php's built-in session generation
- *
- * @deprecated since 1.27, PHP's session generation isn't used with
- *  MediaWiki\\Session\\SessionManager
- * @return bool True = there is sufficient entropy
- */
-function wfCheckEntropy() {
-       wfDeprecated( __FUNCTION__, '1.27' );
-       return (
-                       ( wfIsWindows() && version_compare( PHP_VERSION, '5.3.3', '>=' ) )
-                       || ini_get( 'session.entropy_file' )
-               )
-               && intval( ini_get( 'session.entropy_length' ) ) >= 32;
-}
-
 /**
  * @deprecated since 1.27, PHP's session generation isn't used with
  *  MediaWiki\\Session\\SessionManager
@@ -3046,12 +3030,6 @@ function wfResetSessionID() {
 function wfSetupSession( $sessionId = false ) {
        wfDeprecated( __FUNCTION__, '1.27' );
 
-       // If they're calling this, they probably want our session management even
-       // if NO_SESSION was set for Setup.php.
-       if ( !MediaWiki\Session\PHPSessionHandler::isInstalled() ) {
-               MediaWiki\Session\PHPSessionHandler::install( SessionManager::singleton() );
-       }
-
        if ( $sessionId ) {
                session_id( $sessionId );
        }
index 87fc012..8673125 100644 (file)
@@ -263,7 +263,7 @@ class HistoryBlobStub {
                                if ( !isset( $parts[1] ) || $parts[1] == '' ) {
                                        return false;
                                }
-                               $row->old_text = ExternalStore::fetchFromUrl( $url );
+                               $row->old_text = ExternalStore::fetchFromURL( $url );
 
                        }
 
index 3b36039..890beb0 100644 (file)
@@ -216,7 +216,7 @@ class Html {
                if ( in_array( $element, self::$voidElements ) ) {
                        if ( $wgWellFormedXml ) {
                                // Silly XML.
-                               return substr( $start, 0, -1 ) . ' />';
+                               return substr( $start, 0, -1 ) . '/>';
                        }
                        return $start;
                } else {
index 5b8122d..5749775 100644 (file)
@@ -290,7 +290,7 @@ class HtmlFormatter {
                        }
                        $html = $this->doc->saveHTML();
 
-                       $html = $this->fixLibXml( $html );
+                       $html = $this->fixLibXML( $html );
                        if ( wfIsWindows() ) {
                                // Cleanup for CRLF misprocessing of unknown origin on Windows.
                                // If this error continues in the future, please track it down in the
index 600bd79..1a6e382 100644 (file)
@@ -80,7 +80,7 @@ class Http {
                } else {
                        $errors = $status->getErrorsByType( 'error' );
                        $logger = LoggerFactory::getInstance( 'http' );
-                       $logger->warning( $status->getWikiText(),
+                       $logger->warning( $status->getWikiText( null, null, 'en' ),
                                [ 'error' => $errors, 'caller' => $caller, 'content' => $req->getContent() ] );
                        return false;
                }
@@ -991,7 +991,7 @@ class PhpHttpRequest extends MWHttpRequest {
                ];
 
                if ( $this->proxy ) {
-                       $options['http']['proxy'] = $this->urlToTCP( $this->proxy );
+                       $options['http']['proxy'] = $this->urlToTcp( $this->proxy );
                        $options['http']['request_fulluri'] = true;
                }
 
index 1ce5f32..175a839 100644 (file)
@@ -8,29 +8,28 @@
 interface LinkTarget {
 
        /**
-        * Get the namespace index
+        * Get the namespace index.
         *
         * @return int Namespace index
         */
        public function getNamespace();
 
        /**
-        * Get the link fragment (i.e.\ the bit after the #) in text form
+        * Get the link fragment (i.e. the bit after the #) in text form.
         *
         * @return string link fragment
         */
        public function getFragment();
 
        /**
-        * Get the main part with underscores
+        * Get the main part with underscores.
         *
-        * @return string Main part of the link, with underscores (for use in hrf attributes)
+        * @return string Main part of the link, with underscores (for use in href attributes)
         */
        public function getDBkey();
 
        /**
-        * Returns the link in text form,
-        * without namespace prefix or fragment.
+        * Returns the link in text form, without namespace prefix or fragment.
         *
         * This is computed from the DB key by replacing any underscores with spaces.
         *
index 8e79d9c..4ba3a75 100644 (file)
@@ -992,7 +992,7 @@ class Linker {
         */
        public static function makeMediaLinkFile( Title $title, $file, $html = '' ) {
                if ( $file && $file->exists() ) {
-                       $url = $file->getURL();
+                       $url = $file->getUrl();
                        $class = 'internal';
                } else {
                        $url = self::getUploadUrl( $title );
@@ -1449,31 +1449,34 @@ class Linker {
                                        }
                                } else {
                                        # Other kind of link
-                                       if ( preg_match( $wgContLang->linkTrail(), $match[3], $submatch ) ) {
-                                               $trail = $submatch[1];
-                                       } else {
-                                               $trail = "";
-                                       }
-                                       $linkRegexp = '/\[\[(.*?)\]\]' . preg_quote( $trail, '/' ) . '/';
+                                       # Make sure its target is non-empty
                                        if ( isset( $match[1][0] ) && $match[1][0] == ':' ) {
                                                $match[1] = substr( $match[1], 1 );
                                        }
-                                       list( $inside, $trail ) = Linker::splitTrail( $trail );
-
-                                       $linkText = $text;
-                                       $linkTarget = Linker::normalizeSubpageLink( $title, $match[1], $linkText );
-
-                                       $target = Title::newFromText( $linkTarget );
-                                       if ( $target ) {
-                                               if ( $target->getText() == '' && !$target->isExternal()
-                                                       && !$local && $title
-                                               ) {
-                                                       $newTarget = clone $title;
-                                                       $newTarget->setFragment( '#' . $target->getFragment() );
-                                                       $target = $newTarget;
+                                       if ( $match[1] !== false && $match[1] !== '' ) {
+                                               if ( preg_match( $wgContLang->linkTrail(), $match[3], $submatch ) ) {
+                                                       $trail = $submatch[1];
+                                               } else {
+                                                       $trail = "";
                                                }
+                                               $linkRegexp = '/\[\[(.*?)\]\]' . preg_quote( $trail, '/' ) . '/';
+                                               list( $inside, $trail ) = Linker::splitTrail( $trail );
+
+                                               $linkText = $text;
+                                               $linkTarget = Linker::normalizeSubpageLink( $title, $match[1], $linkText );
+
+                                               $target = Title::newFromText( $linkTarget );
+                                               if ( $target ) {
+                                                       if ( $target->getText() == '' && !$target->isExternal()
+                                                               && !$local && $title
+                                                       ) {
+                                                               $newTarget = clone $title;
+                                                               $newTarget->setFragment( '#' . $target->getFragment() );
+                                                               $target = $newTarget;
+                                                       }
 
-                                               $thelink = Linker::makeCommentLink( $target, $linkText . $inside, $wikiId ) . $trail;
+                                                       $thelink = Linker::makeCommentLink( $target, $linkText . $inside, $wikiId ) . $trail;
+                                               }
                                        }
                                }
                                if ( $thelink ) {
diff --git a/includes/ListToggle.php b/includes/ListToggle.php
new file mode 100644 (file)
index 0000000..4733dfb
--- /dev/null
@@ -0,0 +1,68 @@
+<?php
+/**
+ * Class for generating clickable toggle links for a list of checkboxes.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Class for generating clickable toggle links for a list of checkboxes.
+ *
+ * This is only supported on clients that have JavaScript enabled; it is hidden
+ * for clients that have it disabled.
+ *
+ * @since 1.27
+ */
+class ListToggle {
+       /** @var OutputPage */
+       private $output;
+
+       public function __construct( OutputPage $output ) {
+               $this->output = $output;
+
+               $output->addModules( 'mediawiki.checkboxtoggle' );
+               $output->addModuleStyles( 'mediawiki.checkboxtoggle.styles' );
+       }
+
+       private function checkboxLink( $checkboxType ) {
+               return Html::element(
+                       'a', [ 'href' => '#', 'class' => 'mw-checkbox-' . $checkboxType ],
+                       $this->output->msg( 'checkbox-' . $checkboxType )->text()
+               );
+       }
+
+       /**
+        * @return string
+        */
+       public function getHTML() {
+               // Select: All, None, Invert
+               $links = [
+                       $this->checkboxLink( 'all' ),
+                       $this->checkboxLink( 'none' ),
+                       $this->checkboxLink( 'invert' ),
+               ];
+
+               return Html::rawElement( 'div',
+                       [
+                               'class' => 'mw-checkbox-toggle-controls'
+                       ],
+                       $this->output->msg( 'checkbox-select' )
+                               ->rawParams( $this->output->getLanguage()->commaList( $links ) )->escaped()
+               );
+       }
+}
index 12a445b..13f706d 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * File for magic words.
- *
  * See docs/magicword.txt.
  *
  * This program is free software; you can redistribute it and/or modify
@@ -23,8 +21,6 @@
  * @ingroup Parser
  */
 
-use MediaWiki\Logger\LoggerFactory;
-
 /**
  * This class encapsulates "magic words" such as "#redirect", __NOTOC__, etc.
  *
@@ -96,8 +92,8 @@ class MagicWord {
        /** @var bool */
        private $mFound = false;
 
-       static public $mVariableIDsInitialised = false;
-       static public $mVariableIDs = [
+       public static $mVariableIDsInitialised = false;
+       public static $mVariableIDs = [
                '!',
                'currentmonth',
                'currentmonth1',
@@ -178,7 +174,7 @@ class MagicWord {
        ];
 
        /* Array of caching hints for ParserCache */
-       static public $mCacheTTLs = [
+       public static $mCacheTTLs = [
                'currentmonth' => 86400,
                'currentmonth1' => 86400,
                'currentmonthname' => 86400,
@@ -219,7 +215,7 @@ class MagicWord {
                'numberingroup' => 3600,
        ];
 
-       static public $mDoubleUnderscoreIDs = [
+       public static $mDoubleUnderscoreIDs = [
                'notoc',
                'nogallery',
                'forcetoc',
@@ -235,17 +231,17 @@ class MagicWord {
                'nocontentconvert',
        ];
 
-       static public $mSubstIDs = [
+       public static $mSubstIDs = [
                'subst',
                'safesubst',
        ];
 
-       static public $mObjects = [];
-       static public $mDoubleUnderscoreArray = null;
+       public static $mObjects = [];
+       public static $mDoubleUnderscoreArray = null;
 
        /**#@-*/
 
-       function __construct( $id = 0, $syn = [], $cs = false ) {
+       public function __construct( $id = 0, $syn = [], $cs = false ) {
                $this->mId = $id;
                $this->mSynonyms = (array)$syn;
                $this->mCaseSensitive = $cs;
@@ -258,7 +254,7 @@ class MagicWord {
         *
         * @return MagicWord
         */
-       static function &get( $id ) {
+       public static function &get( $id ) {
                if ( !isset( self::$mObjects[$id] ) ) {
                        $mw = new MagicWord();
                        $mw->load( $id );
@@ -272,7 +268,7 @@ class MagicWord {
         *
         * @return array
         */
-       static function getVariableIDs() {
+       public static function getVariableIDs() {
                if ( !self::$mVariableIDsInitialised ) {
                        # Get variable IDs
                        Hooks::run( 'MagicWordwgVariableIDs', [ &self::$mVariableIDs ] );
@@ -285,7 +281,7 @@ class MagicWord {
         * Get an array of parser substitution modifier IDs
         * @return array
         */
-       static function getSubstIDs() {
+       public static function getSubstIDs() {
                return self::$mSubstIDs;
        }
 
@@ -295,7 +291,7 @@ class MagicWord {
         * @param int $id
         * @return int
         */
-       static function getCacheTTL( $id ) {
+       public static function getCacheTTL( $id ) {
                if ( array_key_exists( $id, self::$mCacheTTLs ) ) {
                        return self::$mCacheTTLs[$id];
                } else {
@@ -308,7 +304,7 @@ class MagicWord {
         *
         * @return MagicWordArray
         */
-       static function getDoubleUnderscoreArray() {
+       public static function getDoubleUnderscoreArray() {
                if ( is_null( self::$mDoubleUnderscoreArray ) ) {
                        Hooks::run( 'GetDoubleUnderscoreIDs', [ &self::$mDoubleUnderscoreIDs ] );
                        self::$mDoubleUnderscoreArray = new MagicWordArray( self::$mDoubleUnderscoreIDs );
@@ -330,7 +326,7 @@ class MagicWord {
         * @param int $id
         * @throws MWException
         */
-       function load( $id ) {
+       public function load( $id ) {
                global $wgContLang;
                $this->mId = $id;
                $wgContLang->getMagic( $this );
@@ -344,7 +340,7 @@ class MagicWord {
         * Preliminary initialisation
         * @private
         */
-       function initRegex() {
+       public function initRegex() {
                // Sort the synonyms by length, descending, so that the longest synonym
                // matches in precedence to the shortest
                $synonyms = $this->mSynonyms;
@@ -376,7 +372,7 @@ class MagicWord {
         *
         * @return int
         */
-       function compareStringLength( $s1, $s2 ) {
+       public function compareStringLength( $s1, $s2 ) {
                $l1 = strlen( $s1 );
                $l2 = strlen( $s2 );
                if ( $l1 < $l2 ) {
@@ -393,7 +389,7 @@ class MagicWord {
         *
         * @return string
         */
-       function getRegex() {
+       public function getRegex() {
                if ( $this->mRegex == '' ) {
                        $this->initRegex();
                }
@@ -407,7 +403,7 @@ class MagicWord {
         *
         * @return string
         */
-       function getRegexCase() {
+       public function getRegexCase() {
                if ( $this->mRegex === '' ) {
                        $this->initRegex();
                }
@@ -420,7 +416,7 @@ class MagicWord {
         *
         * @return string
         */
-       function getRegexStart() {
+       public function getRegexStart() {
                if ( $this->mRegex == '' ) {
                        $this->initRegex();
                }
@@ -433,7 +429,7 @@ class MagicWord {
         * @return string
         * @since 1.23
         */
-       function getRegexStartToEnd() {
+       public function getRegexStartToEnd() {
                if ( $this->mRegexStartToEnd == '' ) {
                        $this->initRegex();
                }
@@ -445,7 +441,7 @@ class MagicWord {
         *
         * @return string
         */
-       function getBaseRegex() {
+       public function getBaseRegex() {
                if ( $this->mRegex == '' ) {
                        $this->initRegex();
                }
@@ -459,7 +455,7 @@ class MagicWord {
         *
         * @return bool
         */
-       function match( $text ) {
+       public function match( $text ) {
                return (bool)preg_match( $this->getRegex(), $text );
        }
 
@@ -470,7 +466,7 @@ class MagicWord {
         *
         * @return bool
         */
-       function matchStart( $text ) {
+       public function matchStart( $text ) {
                return (bool)preg_match( $this->getRegexStart(), $text );
        }
 
@@ -482,7 +478,7 @@ class MagicWord {
         * @return bool
         * @since 1.23
         */
-       function matchStartToEnd( $text ) {
+       public function matchStartToEnd( $text ) {
                return (bool)preg_match( $this->getRegexStartToEnd(), $text );
        }
 
@@ -496,7 +492,7 @@ class MagicWord {
         *
         * @return string
         */
-       function matchVariableStartToEnd( $text ) {
+       public function matchVariableStartToEnd( $text ) {
                $matches = [];
                $matchcount = preg_match( $this->getVariableStartToEndRegex(), $text, $matches );
                if ( $matchcount == 0 ) {
@@ -525,7 +521,7 @@ class MagicWord {
         *
         * @return bool
         */
-       function matchAndRemove( &$text ) {
+       public function matchAndRemove( &$text ) {
                $this->mFound = false;
                $text = preg_replace_callback(
                        $this->getRegex(),
@@ -540,7 +536,7 @@ class MagicWord {
         * @param string $text
         * @return bool
         */
-       function matchStartAndRemove( &$text ) {
+       public function matchStartAndRemove( &$text ) {
                $this->mFound = false;
                $text = preg_replace_callback(
                        $this->getRegexStart(),
@@ -556,7 +552,7 @@ class MagicWord {
         *
         * @return string
         */
-       function pregRemoveAndRecord() {
+       public function pregRemoveAndRecord() {
                $this->mFound = true;
                return '';
        }
@@ -570,7 +566,7 @@ class MagicWord {
         *
         * @return string
         */
-       function replace( $replacement, $subject, $limit = -1 ) {
+       public function replace( $replacement, $subject, $limit = -1 ) {
                $res = preg_replace(
                        $this->getRegex(),
                        StringUtils::escapeRegexReplacement( $replacement ),
@@ -591,7 +587,7 @@ class MagicWord {
         *
         * @return string
         */
-       function substituteCallback( $text, $callback ) {
+       public function substituteCallback( $text, $callback ) {
                $res = preg_replace_callback( $this->getVariableRegex(), $callback, $text );
                $this->mModified = $res !== $text;
                return $res;
@@ -602,7 +598,7 @@ class MagicWord {
         *
         * @return string
         */
-       function getVariableRegex() {
+       public function getVariableRegex() {
                if ( $this->mVariableRegex == '' ) {
                        $this->initRegex();
                }
@@ -614,7 +610,7 @@ class MagicWord {
         *
         * @return string
         */
-       function getVariableStartToEndRegex() {
+       public function getVariableStartToEndRegex() {
                if ( $this->mVariableStartToEndRegex == '' ) {
                        $this->initRegex();
                }
@@ -628,14 +624,14 @@ class MagicWord {
         *
         * @return string
         */
-       function getSynonym( $i ) {
+       public function getSynonym( $i ) {
                return $this->mSynonyms[$i];
        }
 
        /**
         * @return array
         */
-       function getSynonyms() {
+       public function getSynonyms() {
                return $this->mSynonyms;
        }
 
@@ -645,7 +641,7 @@ class MagicWord {
         *
         * @return bool
         */
-       function getWasModified() {
+       public function getWasModified() {
                return $this->mModified;
        }
 
@@ -662,7 +658,7 @@ class MagicWord {
         *
         * @return bool
         */
-       function replaceMultiple( $magicarr, $subject, &$result ) {
+       public function replaceMultiple( $magicarr, $subject, &$result ) {
                wfDeprecated( __METHOD__, '1.25' );
                $search = [];
                $replace = [];
@@ -683,7 +679,7 @@ class MagicWord {
         * @param array $array
         * @param string $value
         */
-       function addToArray( &$array, $value ) {
+       public function addToArray( &$array, $value ) {
                global $wgContLang;
                foreach ( $this->mSynonyms as $syn ) {
                        $array[$wgContLang->lc( $syn )] = $value;
@@ -693,318 +689,14 @@ class MagicWord {
        /**
         * @return bool
         */
-       function isCaseSensitive() {
+       public function isCaseSensitive() {
                return $this->mCaseSensitive;
        }
 
        /**
         * @return int
         */
-       function getId() {
+       public function getId() {
                return $this->mId;
        }
 }
-
-/**
- * Class for handling an array of magic words
- * @ingroup Parser
- */
-class MagicWordArray {
-       /** @var array */
-       public $names = [];
-
-       /** @var array */
-       private $hash;
-
-       private $baseRegex;
-
-       private $regex;
-
-       /**
-        * @param array $names
-        */
-       function __construct( $names = [] ) {
-               $this->names = $names;
-       }
-
-       /**
-        * Add a magic word by name
-        *
-        * @param string $name
-        */
-       public function add( $name ) {
-               $this->names[] = $name;
-               $this->hash = $this->baseRegex = $this->regex = null;
-       }
-
-       /**
-        * Add a number of magic words by name
-        *
-        * @param array $names
-        */
-       public function addArray( $names ) {
-               $this->names = array_merge( $this->names, array_values( $names ) );
-               $this->hash = $this->baseRegex = $this->regex = null;
-       }
-
-       /**
-        * Get a 2-d hashtable for this array
-        * @return array
-        */
-       function getHash() {
-               if ( is_null( $this->hash ) ) {
-                       global $wgContLang;
-                       $this->hash = [ 0 => [], 1 => [] ];
-                       foreach ( $this->names as $name ) {
-                               $magic = MagicWord::get( $name );
-                               $case = intval( $magic->isCaseSensitive() );
-                               foreach ( $magic->getSynonyms() as $syn ) {
-                                       if ( !$case ) {
-                                               $syn = $wgContLang->lc( $syn );
-                                       }
-                                       $this->hash[$case][$syn] = $name;
-                               }
-                       }
-               }
-               return $this->hash;
-       }
-
-       /**
-        * Get the base regex
-        * @return array
-        */
-       function getBaseRegex() {
-               if ( is_null( $this->baseRegex ) ) {
-                       $this->baseRegex = [ 0 => '', 1 => '' ];
-                       foreach ( $this->names as $name ) {
-                               $magic = MagicWord::get( $name );
-                               $case = intval( $magic->isCaseSensitive() );
-                               foreach ( $magic->getSynonyms() as $i => $syn ) {
-                                       // Group name must start with a non-digit in PCRE 8.34+
-                                       $it = strtr( $i, '0123456789', 'abcdefghij' );
-                                       $group = "(?P<{$it}_{$name}>" . preg_quote( $syn, '/' ) . ')';
-                                       if ( $this->baseRegex[$case] === '' ) {
-                                               $this->baseRegex[$case] = $group;
-                                       } else {
-                                               $this->baseRegex[$case] .= '|' . $group;
-                                       }
-                               }
-                       }
-               }
-               return $this->baseRegex;
-       }
-
-       /**
-        * Get an unanchored regex that does not match parameters
-        * @return array
-        */
-       function getRegex() {
-               if ( is_null( $this->regex ) ) {
-                       $base = $this->getBaseRegex();
-                       $this->regex = [ '', '' ];
-                       if ( $this->baseRegex[0] !== '' ) {
-                               $this->regex[0] = "/{$base[0]}/iuS";
-                       }
-                       if ( $this->baseRegex[1] !== '' ) {
-                               $this->regex[1] = "/{$base[1]}/S";
-                       }
-               }
-               return $this->regex;
-       }
-
-       /**
-        * Get a regex for matching variables with parameters
-        *
-        * @return string
-        */
-       function getVariableRegex() {
-               return str_replace( "\\$1", "(.*?)", $this->getRegex() );
-       }
-
-       /**
-        * Get a regex anchored to the start of the string that does not match parameters
-        *
-        * @return array
-        */
-       function getRegexStart() {
-               $base = $this->getBaseRegex();
-               $newRegex = [ '', '' ];
-               if ( $base[0] !== '' ) {
-                       $newRegex[0] = "/^(?:{$base[0]})/iuS";
-               }
-               if ( $base[1] !== '' ) {
-                       $newRegex[1] = "/^(?:{$base[1]})/S";
-               }
-               return $newRegex;
-       }
-
-       /**
-        * Get an anchored regex for matching variables with parameters
-        *
-        * @return array
-        */
-       function getVariableStartToEndRegex() {
-               $base = $this->getBaseRegex();
-               $newRegex = [ '', '' ];
-               if ( $base[0] !== '' ) {
-                       $newRegex[0] = str_replace( "\\$1", "(.*?)", "/^(?:{$base[0]})$/iuS" );
-               }
-               if ( $base[1] !== '' ) {
-                       $newRegex[1] = str_replace( "\\$1", "(.*?)", "/^(?:{$base[1]})$/S" );
-               }
-               return $newRegex;
-       }
-
-       /**
-        * @since 1.20
-        * @return array
-        */
-       public function getNames() {
-               return $this->names;
-       }
-
-       /**
-        * Parse a match array from preg_match
-        * Returns array(magic word ID, parameter value)
-        * If there is no parameter value, that element will be false.
-        *
-        * @param array $m
-        *
-        * @throws MWException
-        * @return array
-        */
-       function parseMatch( $m ) {
-               reset( $m );
-               while ( list( $key, $value ) = each( $m ) ) {
-                       if ( $key === 0 || $value === '' ) {
-                               continue;
-                       }
-                       $parts = explode( '_', $key, 2 );
-                       if ( count( $parts ) != 2 ) {
-                               // This shouldn't happen
-                               // continue;
-                               throw new MWException( __METHOD__ . ': bad parameter name' );
-                       }
-                       list( /* $synIndex */, $magicName ) = $parts;
-                       $paramValue = next( $m );
-                       return [ $magicName, $paramValue ];
-               }
-               // This shouldn't happen either
-               throw new MWException( __METHOD__ . ': parameter not found' );
-       }
-
-       /**
-        * Match some text, with parameter capture
-        * Returns an array with the magic word name in the first element and the
-        * parameter in the second element.
-        * Both elements are false if there was no match.
-        *
-        * @param string $text
-        *
-        * @return array
-        */
-       public function matchVariableStartToEnd( $text ) {
-               $regexes = $this->getVariableStartToEndRegex();
-               foreach ( $regexes as $regex ) {
-                       if ( $regex !== '' ) {
-                               $m = [];
-                               if ( preg_match( $regex, $text, $m ) ) {
-                                       return $this->parseMatch( $m );
-                               }
-                       }
-               }
-               return [ false, false ];
-       }
-
-       /**
-        * Match some text, without parameter capture
-        * Returns the magic word name, or false if there was no capture
-        *
-        * @param string $text
-        *
-        * @return string|bool False on failure
-        */
-       public function matchStartToEnd( $text ) {
-               $hash = $this->getHash();
-               if ( isset( $hash[1][$text] ) ) {
-                       return $hash[1][$text];
-               }
-               global $wgContLang;
-               $lc = $wgContLang->lc( $text );
-               if ( isset( $hash[0][$lc] ) ) {
-                       return $hash[0][$lc];
-               }
-               return false;
-       }
-
-       /**
-        * Returns an associative array, ID => param value, for all items that match
-        * Removes the matched items from the input string (passed by reference)
-        *
-        * @param string $text
-        *
-        * @return array
-        */
-       public function matchAndRemove( &$text ) {
-               $found = [];
-               $regexes = $this->getRegex();
-               foreach ( $regexes as $regex ) {
-                       if ( $regex === '' ) {
-                               continue;
-                       }
-                       $matches = [];
-                       $res = preg_match_all( $regex, $text, $matches, PREG_SET_ORDER );
-                       if ( $res === false ) {
-                               LoggerFactory::getInstance( 'parser' )->warning( 'preg_match_all returned false', [
-                                       'code' => preg_last_error(),
-                                       'regex' => $regex,
-                                       'text' => $text,
-                               ] );
-                       } elseif ( $res ) {
-                               foreach ( $matches as $m ) {
-                                       list( $name, $param ) = $this->parseMatch( $m );
-                                       $found[$name] = $param;
-                               }
-                       }
-                       $res = preg_replace( $regex, '', $text );
-                       if ( $res === null ) {
-                               LoggerFactory::getInstance( 'parser' )->warning( 'preg_replace returned null', [
-                                       'code' => preg_last_error(),
-                                       'regex' => $regex,
-                                       'text' => $text,
-                               ] );
-                       }
-                       $text = $res;
-               }
-               return $found;
-       }
-
-       /**
-        * Return the ID of the magic word at the start of $text, and remove
-        * the prefix from $text.
-        * Return false if no match found and $text is not modified.
-        * Does not match parameters.
-        *
-        * @param string $text
-        *
-        * @return int|bool False on failure
-        */
-       public function matchStartAndRemove( &$text ) {
-               $regexes = $this->getRegexStart();
-               foreach ( $regexes as $regex ) {
-                       if ( $regex === '' ) {
-                               continue;
-                       }
-                       if ( preg_match( $regex, $text, $m ) ) {
-                               list( $id, ) = $this->parseMatch( $m );
-                               if ( strlen( $m[0] ) >= strlen( $text ) ) {
-                                       $text = '';
-                               } else {
-                                       $text = substr( $text, strlen( $m[0] ) );
-                               }
-                               return $id;
-                       }
-               }
-               return false;
-       }
-}
diff --git a/includes/MagicWordArray.php b/includes/MagicWordArray.php
new file mode 100644 (file)
index 0000000..6a9ead5
--- /dev/null
@@ -0,0 +1,329 @@
+<?php
+
+/**
+ * See docs/magicword.txt.
+ *
+ * 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 Parser
+ */
+
+use MediaWiki\Logger\LoggerFactory;
+
+/**
+ * Class for handling an array of magic words
+ * @ingroup Parser
+ */
+class MagicWordArray {
+       /** @var array */
+       public $names = [];
+
+       /** @var array */
+       private $hash;
+
+       private $baseRegex;
+
+       private $regex;
+
+       /**
+        * @param array $names
+        */
+       public function __construct( $names = [] ) {
+               $this->names = $names;
+       }
+
+       /**
+        * Add a magic word by name
+        *
+        * @param string $name
+        */
+       public function add( $name ) {
+               $this->names[] = $name;
+               $this->hash = $this->baseRegex = $this->regex = null;
+       }
+
+       /**
+        * Add a number of magic words by name
+        *
+        * @param array $names
+        */
+       public function addArray( $names ) {
+               $this->names = array_merge( $this->names, array_values( $names ) );
+               $this->hash = $this->baseRegex = $this->regex = null;
+       }
+
+       /**
+        * Get a 2-d hashtable for this array
+        * @return array
+        */
+       public function getHash() {
+               if ( is_null( $this->hash ) ) {
+                       global $wgContLang;
+                       $this->hash = [ 0 => [], 1 => [] ];
+                       foreach ( $this->names as $name ) {
+                               $magic = MagicWord::get( $name );
+                               $case = intval( $magic->isCaseSensitive() );
+                               foreach ( $magic->getSynonyms() as $syn ) {
+                                       if ( !$case ) {
+                                               $syn = $wgContLang->lc( $syn );
+                                       }
+                                       $this->hash[$case][$syn] = $name;
+                               }
+                       }
+               }
+               return $this->hash;
+       }
+
+       /**
+        * Get the base regex
+        * @return array
+        */
+       public function getBaseRegex() {
+               if ( is_null( $this->baseRegex ) ) {
+                       $this->baseRegex = [ 0 => '', 1 => '' ];
+                       foreach ( $this->names as $name ) {
+                               $magic = MagicWord::get( $name );
+                               $case = intval( $magic->isCaseSensitive() );
+                               foreach ( $magic->getSynonyms() as $i => $syn ) {
+                                       // Group name must start with a non-digit in PCRE 8.34+
+                                       $it = strtr( $i, '0123456789', 'abcdefghij' );
+                                       $group = "(?P<{$it}_{$name}>" . preg_quote( $syn, '/' ) . ')';
+                                       if ( $this->baseRegex[$case] === '' ) {
+                                               $this->baseRegex[$case] = $group;
+                                       } else {
+                                               $this->baseRegex[$case] .= '|' . $group;
+                                       }
+                               }
+                       }
+               }
+               return $this->baseRegex;
+       }
+
+       /**
+        * Get an unanchored regex that does not match parameters
+        * @return array
+        */
+       public function getRegex() {
+               if ( is_null( $this->regex ) ) {
+                       $base = $this->getBaseRegex();
+                       $this->regex = [ '', '' ];
+                       if ( $this->baseRegex[0] !== '' ) {
+                               $this->regex[0] = "/{$base[0]}/iuS";
+                       }
+                       if ( $this->baseRegex[1] !== '' ) {
+                               $this->regex[1] = "/{$base[1]}/S";
+                       }
+               }
+               return $this->regex;
+       }
+
+       /**
+        * Get a regex for matching variables with parameters
+        *
+        * @return string
+        */
+       public function getVariableRegex() {
+               return str_replace( "\\$1", "(.*?)", $this->getRegex() );
+       }
+
+       /**
+        * Get a regex anchored to the start of the string that does not match parameters
+        *
+        * @return array
+        */
+       public function getRegexStart() {
+               $base = $this->getBaseRegex();
+               $newRegex = [ '', '' ];
+               if ( $base[0] !== '' ) {
+                       $newRegex[0] = "/^(?:{$base[0]})/iuS";
+               }
+               if ( $base[1] !== '' ) {
+                       $newRegex[1] = "/^(?:{$base[1]})/S";
+               }
+               return $newRegex;
+       }
+
+       /**
+        * Get an anchored regex for matching variables with parameters
+        *
+        * @return array
+        */
+       public function getVariableStartToEndRegex() {
+               $base = $this->getBaseRegex();
+               $newRegex = [ '', '' ];
+               if ( $base[0] !== '' ) {
+                       $newRegex[0] = str_replace( "\\$1", "(.*?)", "/^(?:{$base[0]})$/iuS" );
+               }
+               if ( $base[1] !== '' ) {
+                       $newRegex[1] = str_replace( "\\$1", "(.*?)", "/^(?:{$base[1]})$/S" );
+               }
+               return $newRegex;
+       }
+
+       /**
+        * @since 1.20
+        * @return array
+        */
+       public function getNames() {
+               return $this->names;
+       }
+
+       /**
+        * Parse a match array from preg_match
+        * Returns array(magic word ID, parameter value)
+        * If there is no parameter value, that element will be false.
+        *
+        * @param array $m
+        *
+        * @throws MWException
+        * @return array
+        */
+       public function parseMatch( $m ) {
+               reset( $m );
+               while ( list( $key, $value ) = each( $m ) ) {
+                       if ( $key === 0 || $value === '' ) {
+                               continue;
+                       }
+                       $parts = explode( '_', $key, 2 );
+                       if ( count( $parts ) != 2 ) {
+                               // This shouldn't happen
+                               // continue;
+                               throw new MWException( __METHOD__ . ': bad parameter name' );
+                       }
+                       list( /* $synIndex */, $magicName ) = $parts;
+                       $paramValue = next( $m );
+                       return [ $magicName, $paramValue ];
+               }
+               // This shouldn't happen either
+               throw new MWException( __METHOD__ . ': parameter not found' );
+       }
+
+       /**
+        * Match some text, with parameter capture
+        * Returns an array with the magic word name in the first element and the
+        * parameter in the second element.
+        * Both elements are false if there was no match.
+        *
+        * @param string $text
+        *
+        * @return array
+        */
+       public function matchVariableStartToEnd( $text ) {
+               $regexes = $this->getVariableStartToEndRegex();
+               foreach ( $regexes as $regex ) {
+                       if ( $regex !== '' ) {
+                               $m = [];
+                               if ( preg_match( $regex, $text, $m ) ) {
+                                       return $this->parseMatch( $m );
+                               }
+                       }
+               }
+               return [ false, false ];
+       }
+
+       /**
+        * Match some text, without parameter capture
+        * Returns the magic word name, or false if there was no capture
+        *
+        * @param string $text
+        *
+        * @return string|bool False on failure
+        */
+       public function matchStartToEnd( $text ) {
+               $hash = $this->getHash();
+               if ( isset( $hash[1][$text] ) ) {
+                       return $hash[1][$text];
+               }
+               global $wgContLang;
+               $lc = $wgContLang->lc( $text );
+               if ( isset( $hash[0][$lc] ) ) {
+                       return $hash[0][$lc];
+               }
+               return false;
+       }
+
+       /**
+        * Returns an associative array, ID => param value, for all items that match
+        * Removes the matched items from the input string (passed by reference)
+        *
+        * @param string $text
+        *
+        * @return array
+        */
+       public function matchAndRemove( &$text ) {
+               $found = [];
+               $regexes = $this->getRegex();
+               foreach ( $regexes as $regex ) {
+                       if ( $regex === '' ) {
+                               continue;
+                       }
+                       $matches = [];
+                       $res = preg_match_all( $regex, $text, $matches, PREG_SET_ORDER );
+                       if ( $res === false ) {
+                               LoggerFactory::getInstance( 'parser' )->warning( 'preg_match_all returned false', [
+                                       'code' => preg_last_error(),
+                                       'regex' => $regex,
+                                       'text' => $text,
+                               ] );
+                       } elseif ( $res ) {
+                               foreach ( $matches as $m ) {
+                                       list( $name, $param ) = $this->parseMatch( $m );
+                                       $found[$name] = $param;
+                               }
+                       }
+                       $res = preg_replace( $regex, '', $text );
+                       if ( $res === null ) {
+                               LoggerFactory::getInstance( 'parser' )->warning( 'preg_replace returned null', [
+                                       'code' => preg_last_error(),
+                                       'regex' => $regex,
+                                       'text' => $text,
+                               ] );
+                       }
+                       $text = $res;
+               }
+               return $found;
+       }
+
+       /**
+        * Return the ID of the magic word at the start of $text, and remove
+        * the prefix from $text.
+        * Return false if no match found and $text is not modified.
+        * Does not match parameters.
+        *
+        * @param string $text
+        *
+        * @return int|bool False on failure
+        */
+       public function matchStartAndRemove( &$text ) {
+               $regexes = $this->getRegexStart();
+               foreach ( $regexes as $regex ) {
+                       if ( $regex === '' ) {
+                               continue;
+                       }
+                       if ( preg_match( $regex, $text, $m ) ) {
+                               list( $id, ) = $this->parseMatch( $m );
+                               if ( strlen( $m[0] ) >= strlen( $text ) ) {
+                                       $text = '';
+                               } else {
+                                       $text = substr( $text, strlen( $m[0] ) );
+                               }
+                               return $id;
+                       }
+               }
+               return false;
+       }
+}
index 45a1385..ad02e68 100644 (file)
@@ -246,13 +246,13 @@ class MediaWiki {
                } elseif ( !$this->tryNormaliseRedirect( $title ) ) {
                        // Prevent information leak via Special:MyPage et al (T109724)
                        if ( $title->isSpecialPage() ) {
-                               $specialPage = SpecialPageFactory::getPage( $title->getDBKey() );
+                               $specialPage = SpecialPageFactory::getPage( $title->getDBkey() );
                                if ( $specialPage instanceof RedirectSpecialPage ) {
                                        $specialPage->setContext( $this->context );
                                        if ( $this->config->get( 'HideIdentifiableRedirects' )
                                                && $specialPage->personallyIdentifiableTarget()
                                        ) {
-                                               list( , $subpage ) = SpecialPageFactory::resolveAlias( $title->getDBKey() );
+                                               list( , $subpage ) = SpecialPageFactory::resolveAlias( $title->getDBkey() );
                                                $target = $specialPage->getRedirect( $subpage );
                                                // target can also be true. We let that case fall through to normal processing.
                                                if ( $target instanceof Title ) {
@@ -830,9 +830,18 @@ class MediaWiki {
                $errno = $errstr = null;
                $info = wfParseUrl( $this->config->get( 'Server' ) );
                MediaWiki\suppressWarnings();
+               $host = $info['host'];
+               $port = 80;
+               if ( isset( $info['scheme'] ) && $info['scheme'] == 'https' ) {
+                       $host = "tls://" . $host;
+                       $port = 443;
+               }
+               if ( isset( $info['port'] ) ) {
+                       $port = $info['port'];
+               }
                $sock = fsockopen(
-                       $info['host'],
-                       isset( $info['port'] ) ? $info['port'] : 80,
+                       $host,
+                       $port,
                        $errno,
                        $errstr,
                        // If it takes more than 100ms to connect to ourselves there
index a92056d..441fe9e 100644 (file)
@@ -51,7 +51,7 @@ class MergeHistory {
        /** @var string SQL WHERE condition that selects source revisions to insert into destination */
        protected $timeWhere;
 
-       /** @var MWTimestamp|boolean Timestamp upto which history from the source will be merged */
+       /** @var MWTimestamp|bool Timestamp upto which history from the source will be merged */
        protected $timestampLimit;
 
        /** @var integer Number of revisions merged (for Special:MergeHistory success message) */
@@ -61,7 +61,7 @@ class MergeHistory {
         * MergeHistory constructor.
         * @param Title $source Page from which history will be merged
         * @param Title $dest Page to which history will be merged
-        * @param string|boolean $timestamp Timestamp up to which history from the source will be merged
+        * @param string|bool $timestamp Timestamp up to which history from the source will be merged
         */
        public function __construct( Title $source, Title $dest, $timestamp = false ) {
                // Save the parameters
index 4056f38..fd016fc 100644 (file)
@@ -160,19 +160,18 @@ class Message implements MessageSpecifier, Serializable {
 
        /**
         * In which language to get this message. True, which is the default,
-        * means the current interface language, false content language.
+        * means the current user language, false content language.
         *
         * @var bool
         */
        protected $interface = true;
 
        /**
-        * In which language to get this message. Overrides the $interface
-        * variable.
+        * In which language to get this message. Overrides the $interface setting.
         *
-        * @var Language
+        * @var Language|bool Explicit language object, or false for user language
         */
-       protected $language = null;
+       protected $language = false;
 
        /**
         * @var string The message key. If $keysToTry has more than one element,
@@ -225,18 +224,14 @@ class Message implements MessageSpecifier, Serializable {
 
        /**
         * @since 1.17
-        *
         * @param string|string[]|MessageSpecifier $key Message key, or array of
         * message keys to try and use the first non-empty message for, or a
         * MessageSpecifier to copy from.
         * @param array $params Message parameters.
-        * @param Language $language Optional language of the message, defaults to $wgLang.
-        *
+        * @param Language $language [optional] Language to use (defaults to current user language).
         * @throws InvalidArgumentException
         */
        public function __construct( $key, $params = [], Language $language = null ) {
-               global $wgLang;
-
                if ( $key instanceof MessageSpecifier ) {
                        if ( $params ) {
                                throw new InvalidArgumentException(
@@ -260,7 +255,9 @@ class Message implements MessageSpecifier, Serializable {
                $this->key = reset( $this->keysToTry );
 
                $this->parameters = array_values( $params );
-               $this->language = $language ?: $wgLang;
+               // User language is only resolved in getLanguage(). This helps preserve the
+               // semantic intent of "user language" across serialize() and unserialize().
+               $this->language = $language ?: false;
        }
 
        /**
@@ -271,7 +268,7 @@ class Message implements MessageSpecifier, Serializable {
        public function serialize() {
                return serialize( [
                        'interface' => $this->interface,
-                       'language' => $this->language instanceof StubUserLang ? false : $this->language->getCode(),
+                       'language' => $this->language ? $this->language->getCode() : false,
                        'key' => $this->key,
                        'keysToTry' => $this->keysToTry,
                        'parameters' => $this->parameters,
@@ -287,8 +284,6 @@ class Message implements MessageSpecifier, Serializable {
         * @param string $serialized
         */
        public function unserialize( $serialized ) {
-               global $wgLang;
-
                $data = unserialize( $serialized );
                $this->interface = $data['interface'];
                $this->key = $data['key'];
@@ -296,7 +291,7 @@ class Message implements MessageSpecifier, Serializable {
                $this->parameters = $data['parameters'];
                $this->format = $data['format'];
                $this->useDatabase = $data['useDatabase'];
-               $this->language = $data['language'] ? Language::factory( $data['language'] ) : $wgLang;
+               $this->language = $data['language'] ? Language::factory( $data['language'] ) : false;
                $this->title = $data['title'];
        }
 
@@ -365,7 +360,8 @@ class Message implements MessageSpecifier, Serializable {
         * @return Language
         */
        public function getLanguage() {
-               return $this->language;
+               // Defaults to false which means current user language
+               return $this->language ?: RequestContext::getMain()->getLanguage();
        }
 
        /**
@@ -425,7 +421,7 @@ class Message implements MessageSpecifier, Serializable {
        public function getTitle() {
                global $wgContLang, $wgForceUIMsgAsContentMsg;
 
-               $code = $this->language->getCode();
+               $code = $this->getLanguage()->getCode();
                $title = $this->key;
                if (
                        $wgContLang->getCode() !== $code
@@ -656,23 +652,24 @@ class Message implements MessageSpecifier, Serializable {
 
        /**
         * Request the message in any language that is supported.
+        *
         * As a side effect interface message status is unconditionally
         * turned off.
         *
         * @since 1.17
-        *
         * @param Language|string $lang Language code or Language object.
-        *
         * @return Message $this
         * @throws MWException
         */
        public function inLanguage( $lang ) {
-               if ( $lang instanceof Language || $lang instanceof StubUserLang ) {
+               if ( $lang instanceof Language ) {
                        $this->language = $lang;
                } elseif ( is_string( $lang ) ) {
                        if ( !$this->language instanceof Language || $this->language->getCode() != $lang ) {
                                $this->language = Language::factory( $lang );
                        }
+               } elseif ( $lang instanceof StubUserLang ) {
+                       $this->language = false;
                } else {
                        $type = gettype( $lang );
                        throw new MWException( __METHOD__ . " must be "
@@ -810,7 +807,7 @@ class Message implements MessageSpecifier, Serializable {
 
        /**
         * Magic method implementation of the above (for PHP >= 5.2.0), so we can do, eg:
-        *     $foo = Message::get( $key );
+        *     $foo = new Message( $key );
         *     $string = "<abbr>$foo</abbr>";
         *
         * @since 1.18
@@ -1061,17 +1058,17 @@ class Message implements MessageSpecifier, Serializable {
                        } elseif ( isset( $param['num'] ) ) {
                                // Replace number params always in before step for now.
                                // No support for combined raw and num params
-                               return [ 'before', $this->language->formatNum( $param['num'] ) ];
+                               return [ 'before', $this->getLanguage()->formatNum( $param['num'] ) ];
                        } elseif ( isset( $param['duration'] ) ) {
-                               return [ 'before', $this->language->formatDuration( $param['duration'] ) ];
+                               return [ 'before', $this->getLanguage()->formatDuration( $param['duration'] ) ];
                        } elseif ( isset( $param['expiry'] ) ) {
-                               return [ 'before', $this->language->formatExpiry( $param['expiry'] ) ];
+                               return [ 'before', $this->getLanguage()->formatExpiry( $param['expiry'] ) ];
                        } elseif ( isset( $param['period'] ) ) {
-                               return [ 'before', $this->language->formatTimePeriod( $param['period'] ) ];
+                               return [ 'before', $this->getLanguage()->formatTimePeriod( $param['period'] ) ];
                        } elseif ( isset( $param['size'] ) ) {
-                               return [ 'before', $this->language->formatSize( $param['size'] ) ];
+                               return [ 'before', $this->getLanguage()->formatSize( $param['size'] ) ];
                        } elseif ( isset( $param['bitrate'] ) ) {
-                               return [ 'before', $this->language->formatBitrate( $param['bitrate'] ) ];
+                               return [ 'before', $this->getLanguage()->formatBitrate( $param['bitrate'] ) ];
                        } elseif ( isset( $param['plaintext'] ) ) {
                                return [ 'after', $this->formatPlaintext( $param['plaintext'] ) ];
                        } else {
@@ -1108,7 +1105,7 @@ class Message implements MessageSpecifier, Serializable {
                        $this->title,
                        /*linestart*/true,
                        $this->interface,
-                       $this->language
+                       $this->getLanguage()
                );
 
                return $out instanceof ParserOutput ? $out->getText() : $out;
@@ -1127,7 +1124,7 @@ class Message implements MessageSpecifier, Serializable {
                return MessageCache::singleton()->transform(
                        $string,
                        $this->interface,
-                       $this->language,
+                       $this->getLanguage(),
                        $this->title
                );
        }
@@ -1145,7 +1142,7 @@ class Message implements MessageSpecifier, Serializable {
                        $cache = MessageCache::singleton();
 
                        foreach ( $this->keysToTry as $key ) {
-                               $message = $cache->get( $key, $this->useDatabase, $this->language );
+                               $message = $cache->get( $key, $this->useDatabase, $this->getLanguage() );
                                if ( $message !== false && $message !== '' ) {
                                        break;
                                }
index aedfd8f..a432d44 100644 (file)
@@ -645,7 +645,7 @@ class MimeMagic {
                        throw new MWException(
                                "Seeking $tailLength bytes from EOF failed in " . __METHOD__ );
                }
-               $tail = fread( $f, $tailLength );
+               $tail = $tailLength ? fread( $f, $tailLength ) : '';
                fclose( $f );
 
                wfDebug( __METHOD__ . ": analyzing head and tail of $file for magic numbers.\n" );
index 6d69eaa..b9af755 100644 (file)
@@ -238,7 +238,7 @@ class MovePage {
                        $file->load( File::READ_LATEST );
                        if ( $file->exists() ) {
                                $status = $file->move( $this->newTitle );
-                               if ( !$status->isOk() ) {
+                               if ( !$status->isOK() ) {
                                        return $status;
                                }
                        }
@@ -248,6 +248,9 @@ class MovePage {
                }
 
                $dbw->startAtomic( __METHOD__ );
+
+               Hooks::run( 'TitleMoveStarting', [ $this->oldTitle, $this->newTitle, $user ] );
+
                $pageid = $this->oldTitle->getArticleID( Title::GAID_FOR_UPDATE );
                $protected = $this->oldTitle->isProtected();
 
@@ -366,7 +369,8 @@ class MovePage {
                $oldsnamespace = MWNamespace::getSubject( $this->oldTitle->getNamespace() );
                $newsnamespace = MWNamespace::getSubject( $this->newTitle->getNamespace() );
                if ( $oldsnamespace != $newsnamespace || $oldtitle != $newtitle ) {
-                       WatchedItem::duplicateEntries( $this->oldTitle, $this->newTitle );
+                       $store = WatchedItemStore::getDefaultInstance();
+                       $store->duplicateAllAssociatedEntries( $this->oldTitle, $this->newTitle );
                }
 
                Hooks::run(
index 2570cfb..0c3d609 100644 (file)
@@ -460,7 +460,7 @@ class OutputPage extends ContextSource {
         * @param string $script Raw HTML
         */
        function addScript( $script ) {
-               $this->mScripts .= $script . "\n";
+               $this->mScripts .= $script;
        }
 
        /**
@@ -516,18 +516,7 @@ class OutputPage extends ContextSource {
         * @param string $script JavaScript text, no "<script>" tags
         */
        public function addInlineScript( $script ) {
-               $this->mScripts .= Html::inlineScript( "\n$script\n" ) . "\n";
-       }
-
-       /**
-        * Get all registered JS and CSS tags for the header.
-        *
-        * @return string
-        * @deprecated since 1.24 Use OutputPage::headElement to build the full header.
-        */
-       function getScript() {
-               wfDeprecated( __METHOD__, '1.24' );
-               return $this->mScripts . $this->getHeadItems();
+               $this->mScripts .= Html::inlineScript( $script );
        }
 
        /**
@@ -678,22 +667,6 @@ class OutputPage extends ContextSource {
                return $this->mHeadItems;
        }
 
-       /**
-        * Get all header items in a string
-        *
-        * @return string
-        * @deprecated since 1.24 Use OutputPage::headElement or
-        *   if absolutely necessary use OutputPage::getHeadItemsArray
-        */
-       function getHeadItems() {
-               wfDeprecated( __METHOD__, '1.24' );
-               $s = '';
-               foreach ( $this->mHeadItems as $item ) {
-                       $s .= $item;
-               }
-               return $s;
-       }
-
        /**
         * Add or replace an header item to the output
         *
@@ -1495,19 +1468,6 @@ class OutputPage extends ContextSource {
                }
        }
 
-       /**
-        * Set the highest level of CSS/JS untrustworthiness allowed
-        *
-        * @deprecated since 1.24 Raising level of allowed untrusted content is no longer supported.
-        *  Use reduceAllowedModules() instead
-        * @param string $type ResourceLoaderModule TYPE_ constant
-        * @param int $level ResourceLoaderModule class constant
-        */
-       public function setAllowedModules( $type, $level ) {
-               wfDeprecated( __METHOD__, '1.24' );
-               $this->reduceAllowedModules( $type, $level );
-       }
-
        /**
         * Limit the highest level of CSS/JS untrustworthiness allowed.
         *
@@ -2069,7 +2029,7 @@ class OutputPage extends ContextSource {
                foreach ( SessionManager::singleton()->getVaryHeaders() as $header => $options ) {
                        $this->addVaryHeader( $header, $options );
                }
-               return 'Vary: ' . join( ', ', array_keys( $this->mVaryHeader ) );
+               return 'Vary: ' . implode( ', ', array_keys( $this->mVaryHeader ) );
        }
 
        /**
@@ -2213,8 +2173,12 @@ class OutputPage extends ContextSource {
 
                if ( $this->mEnableClientCache ) {
                        if (
-                               $config->get( 'UseSquid' ) && !SessionManager::getGlobalSession()->isPersistent() &&
-                               !$this->isPrintable() && $this->mCdnMaxage != 0 && !$this->haveCacheVaryCookies()
+                               $config->get( 'UseSquid' ) &&
+                               !$response->hasCookies() &&
+                               !SessionManager::getGlobalSession()->isPersistent() &&
+                               !$this->isPrintable() &&
+                               $this->mCdnMaxage != 0 &&
+                               !$this->haveCacheVaryCookies()
                        ) {
                                if ( $config->get( 'UseESI' ) ) {
                                        # We'll purge the proxy cache explicitly, but require end user agents
@@ -2363,17 +2327,6 @@ class OutputPage extends ContextSource {
 
        }
 
-       /**
-        * Actually output something with print.
-        *
-        * @param string $ins The string to output
-        * @deprecated since 1.22 Use echo yourself.
-        */
-       public function out( $ins ) {
-               wfDeprecated( __METHOD__, '1.22' );
-               print $ins;
-       }
-
        /**
         * Prepare this object to display an error page; disable caching and
         * indexing, clear the current text and redirect, set the page's title
@@ -2989,7 +2942,7 @@ class OutputPage extends ContextSource {
         * @return string HTML fragment
         */
        function getHeadScripts() {
-               return $this->getInlineHeadScripts() . "\n" . $this->getExternalHeadScripts();
+               return $this->getInlineHeadScripts() . $this->getExternalHeadScripts();
        }
 
        /**
@@ -3214,7 +3167,7 @@ class OutputPage extends ContextSource {
                        $articleId = $wikiPage->getId();
                }
 
-               $lang = $title->getPageLanguage();
+               $lang = $title->getPageViewLanguage();
 
                // Pre-process information
                $separatorTransTable = $lang->separatorTransformTable();
@@ -3256,7 +3209,7 @@ class OutputPage extends ContextSource {
                        'wgMonthNames' => $lang->getMonthNamesArray(),
                        'wgMonthNamesShort' => $lang->getMonthAbbreviationsArray(),
                        'wgRelevantPageName' => $relevantTitle->getPrefixedDBkey(),
-                       'wgRelevantArticleId' => $relevantTitle->getArticleId(),
+                       'wgRelevantArticleId' => $relevantTitle->getArticleID(),
                ];
 
                if ( $user->isLoggedIn() ) {
@@ -3671,7 +3624,7 @@ class OutputPage extends ContextSource {
                        # If wanted, and the interface is right-to-left, flip the CSS
                        $style_css = CSSJanus::transform( $style_css, true, false );
                }
-               $this->mInlineStyles .= Html::inlineStyle( $style_css ) . "\n";
+               $this->mInlineStyles .= Html::inlineStyle( $style_css );
        }
 
        /**
@@ -3723,7 +3676,7 @@ class OutputPage extends ContextSource {
                        if ( $this->getLanguage()->getDir() !== $wgContLang->getDir() ) {
                                $previewedCSS = CSSJanus::transform( $previewedCSS, true, false );
                        }
-                       $otherTags[] = Html::inlineStyle( $previewedCSS ) . "\n";
+                       $otherTags[] = Html::inlineStyle( $previewedCSS );
                } else {
                        // Load the user styles normally
                        $moduleStyles[] = 'user';
@@ -3762,7 +3715,7 @@ class OutputPage extends ContextSource {
                        ResourceLoaderModule::TYPE_STYLES
                );
                // Add normal styles added through addStyle()/addInlineStyle() here
-               $links[] = implode( "\n", $this->buildCssLinksArray() ) . $this->mInlineStyles;
+               $links[] = implode( '', $this->buildCssLinksArray() ) . $this->mInlineStyles;
                // Add marker tag to mark the place where the client-side
                // loader should inject dynamic styles
                // We use a <meta> tag with a made-up name for this because that's valid HTML
@@ -3870,13 +3823,20 @@ class OutputPage extends ContextSource {
         */
        public static function transformResourcePath( Config $config, $path ) {
                global $IP;
-               $remotePath = $config->get( 'ResourceBasePath' );
+               $remotePathPrefix = $config->get( 'ResourceBasePath' );
+               if ( $remotePathPrefix === '' ) {
+                       // The configured base path is required to be empty string for
+                       // wikis in the domain root
+                       $remotePath = '/';
+               } else {
+                       $remotePath = $remotePathPrefix;
+               }
                if ( strpos( $path, $remotePath ) !== 0 ) {
                        // Path is outside wgResourceBasePath, ignore.
                        return $path;
                }
                $path = RelPath\getRelativePath( $path, $remotePath );
-               return self::transformFilePath( $remotePath, $IP, $path );
+               return self::transformFilePath( $remotePathPrefix, $IP, $path );
        }
 
        /**
@@ -3885,18 +3845,18 @@ class OutputPage extends ContextSource {
         * Caller is responsible for ensuring the file exists. Emits a PHP warning otherwise.
         *
         * @since 1.27
-        * @param string $remotePath URL path that points to $localPath
+        * @param string $remotePath URL path prefix that points to $localPath
         * @param string $localPath File directory exposed at $remotePath
         * @param string $file Path to target file relative to $localPath
         * @return string URL
         */
-       public static function transformFilePath( $remotePath, $localPath, $file ) {
+       public static function transformFilePath( $remotePathPrefix, $localPath, $file ) {
                $hash = md5_file( "$localPath/$file" );
                if ( $hash === false ) {
                        wfLogWarning( __METHOD__ . ": Failed to hash $localPath/$file" );
                        $hash = '';
                }
-               return "$remotePath/$file?" . substr( $hash, 0, 5 );
+               return "$remotePathPrefix/$file?" . substr( $hash, 0, 5 );
        }
 
        /**
index 3db3744..b7bb346 100644 (file)
@@ -1549,14 +1549,24 @@ class Revision implements IDBAccessObject {
        protected function loadText() {
                // Caching may be beneficial for massive use of external storage
                global $wgRevisionCacheExpiry;
+               static $processCache = null;
+
+               if ( !$processCache ) {
+                       $processCache = new MapCacheLRU( 10 );
+               }
 
                $cache = ObjectCache::getMainWANInstance();
                $textId = $this->getTextId();
                $key = wfMemcKey( 'revisiontext', 'textid', $textId );
+
                if ( $wgRevisionCacheExpiry ) {
+                       if ( $processCache->has( $key ) ) {
+                               return $processCache->get( $key );
+                       }
                        $text = $cache->get( $key );
                        if ( is_string( $text ) ) {
                                wfDebug( __METHOD__ . ": got id $textId from cache\n" );
+                               $processCache->set( $key, $text );
                                return $text;
                        }
                }
@@ -1601,6 +1611,7 @@ class Revision implements IDBAccessObject {
 
                # No negative caching -- negative hits on text rows may be due to corrupted slave servers
                if ( $wgRevisionCacheExpiry && $text !== false ) {
+                       $processCache->set( $key, $text );
                        $cache->set( $key, $text, $wgRevisionCacheExpiry );
                }
 
index b84adc3..d321e9f 100644 (file)
@@ -332,7 +332,8 @@ class Sanitizer {
 
        /**
         * Regular expression to match HTML/XML attribute pairs within a tag.
-        * Allows some... latitude.
+        * Allows some... latitude. Based on,
+        * http://www.w3.org/TR/html5/syntax.html#before-attribute-value-state
         * Used in Sanitizer::fixTagAttributes and Sanitizer::decodeTagAttributes
         * @return string
         */
@@ -340,15 +341,15 @@ class Sanitizer {
                if ( self::$attribsRegex === null ) {
                        $attribFirst = '[:A-Z_a-z0-9]';
                        $attrib = '[:A-Z_a-z-.0-9]';
-                       $space = '[\x09\x0a\x0d\x20]';
+                       $space = '[\x09\x0a\x0c\x0d\x20]';
                        self::$attribsRegex =
                                "/(?:^|$space)({$attribFirst}{$attrib}*)
                                  ($space*=$space*
                                        (?:
                                         # The attribute value: quoted or alone
-                                         \"([^<\"]*)(?:\"|\$)
-                                        | '([^<']*)(?:'|\$)
-                                        |  ([a-zA-Z0-9!#$%&()*,\\-.\\/:;<>?@[\\]^_`{|}~]+)
+                                         \"([^\"]*)(?:\"|\$)
+                                        | '([^']*)(?:'|\$)
+                                        |  (((?!$space|>).)*)
                                        )
                                )?(?=$space|\$)/sx";
                }
@@ -362,14 +363,14 @@ class Sanitizer {
         * @return array
         */
        public static function getRecognizedTagData( $extratags = [], $removetags = [] ) {
-               global $wgAllowMicrodataAttributes, $wgAllowImageTag;
+               global $wgAllowImageTag;
 
                static $htmlpairsStatic, $htmlsingle, $htmlsingleonly, $htmlnest, $tabletags,
                        $htmllist, $listtags, $htmlsingleallowed, $htmlelementsStatic, $staticInitialised;
 
                // Base our staticInitialised variable off of the global config state so that if the globals
                // are changed (like in the screwed up test system) we will re-initialise the settings.
-               $globalContext = implode( '-', compact( 'wgAllowMicrodataAttributes', 'wgAllowImageTag' ) );
+               $globalContext = $wgAllowImageTag;
                if ( !$staticInitialised || $staticInitialised != $globalContext ) {
                        $htmlpairsStatic = [ # Tags that must be closed
                                'b', 'bdi', 'del', 'i', 'ins', 'u', 'font', 'big', 'small', 'sub', 'sup', 'h1',
@@ -385,10 +386,10 @@ class Sanitizer {
                        $htmlsingleonly = [ # Elements that cannot have close tags
                                'br', 'wbr', 'hr'
                        ];
-                       if ( $wgAllowMicrodataAttributes ) {
-                               $htmlsingle[] = $htmlsingleonly[] = 'meta';
-                               $htmlsingle[] = $htmlsingleonly[] = 'link';
-                       }
+
+                       $htmlsingle[] = $htmlsingleonly[] = 'meta';
+                       $htmlsingle[] = $htmlsingleonly[] = 'link';
+
                        $htmlnest = [ # Tags that can be nested--??
                                'table', 'tr', 'td', 'th', 'div', 'blockquote', 'ol', 'ul',
                                'li', 'dl', 'dt', 'dd', 'font', 'big', 'small', 'sub', 'sup', 'span',
@@ -733,15 +734,13 @@ class Sanitizer {
         * @todo Check for unique id attribute :P
         */
        static function validateAttributes( $attribs, $whitelist ) {
-               global $wgAllowRdfaAttributes, $wgAllowMicrodataAttributes;
-
                $whitelist = array_flip( $whitelist );
                $hrefExp = '/^(' . wfUrlProtocols() . ')[^\s]+$/';
 
                $out = [];
                foreach ( $attribs as $attribute => $value ) {
-                       # allow XML namespace declaration if RDFa is enabled
-                       if ( $wgAllowRdfaAttributes && preg_match( self::XMLNS_ATTRIBUTE_PATTERN, $attribute ) ) {
+                       # Allow XML namespace declaration to allow RDFa
+                       if ( preg_match( self::XMLNS_ATTRIBUTE_PATTERN, $attribute ) ) {
                                if ( !preg_match( self::EVIL_URI_PATTERN, $value ) ) {
                                        $out[$attribute] = $value;
                                }
@@ -816,15 +815,14 @@ class Sanitizer {
                        $out[$attribute] = $value;
                }
 
-               if ( $wgAllowMicrodataAttributes ) {
-                       # itemtype, itemid, itemref don't make sense without itemscope
-                       if ( !array_key_exists( 'itemscope', $out ) ) {
-                               unset( $out['itemtype'] );
-                               unset( $out['itemid'] );
-                               unset( $out['itemref'] );
-                       }
-                       # TODO: Strip itemprop if we aren't descendants of an itemscope or pointed to by an itemref.
+               # itemtype, itemid, itemref don't make sense without itemscope
+               if ( !array_key_exists( 'itemscope', $out ) ) {
+                       unset( $out['itemtype'] );
+                       unset( $out['itemid'] );
+                       unset( $out['itemref'] );
                }
+               # TODO: Strip itemprop if we aren't descendants of an itemscope or pointed to by an itemref.
+
                return $out;
        }
 
@@ -1560,12 +1558,9 @@ class Sanitizer {
         * @return array
         */
        static function setupAttributeWhitelist() {
-               global $wgAllowRdfaAttributes, $wgAllowMicrodataAttributes;
-               static $whitelist, $staticInitialised;
+               static $whitelist;
 
-               $globalContext = implode( '-', compact( 'wgAllowRdfaAttributes', 'wgAllowMicrodataAttributes' ) );
-
-               if ( $whitelist !== null && $staticInitialised == $globalContext ) {
+               if ( $whitelist !== null ) {
                        return $whitelist;
                }
 
@@ -1585,23 +1580,24 @@ class Sanitizer {
                        'aria-labelledby',
                        'aria-owns',
                        'role',
-               ];
 
-               if ( $wgAllowRdfaAttributes ) {
-                       # RDFa attributes as specified in section 9 of
+                       # RDFa
+                       # These attributes are specified in section 9 of
                        # http://www.w3.org/TR/2008/REC-rdfa-syntax-20081014
-                       $common = array_merge( $common, [
-                               'about', 'property', 'resource', 'datatype', 'typeof',
-                       ] );
-               }
+                       'about',
+                       'property',
+                       'resource',
+                       'datatype',
+                       'typeof',
 
-               if ( $wgAllowMicrodataAttributes ) {
-                       # add HTML5 microdata tags as specified by
+                       # Microdata. These are specified by
                        # http://www.whatwg.org/html/microdata.html#the-microdata-model
-                       $common = array_merge( $common, [
-                               'itemid', 'itemprop', 'itemref', 'itemscope', 'itemtype'
-                       ] );
-               }
+                       'itemid',
+                       'itemprop',
+                       'itemref',
+                       'itemscope',
+                       'itemtype',
+               ];
 
                $block = array_merge( $common, [ 'align' ] );
                $tablealign = [ 'align', 'valign' ];
@@ -1772,8 +1768,6 @@ class Sanitizer {
                        'link' => [ 'itemprop', 'href' ],
                ];
 
-               $staticInitialised = $globalContext;
-
                return $whitelist;
        }
 
index 4854727..f7d8d08 100644 (file)
@@ -443,15 +443,6 @@ $wgHtml5 = true;
 $wgXhtmlDefaultNamespace = 'http://www.w3.org/1999/xhtml';
 $wgJsMimeType = 'text/javascript';
 
-if ( !$wgHtml5Version && $wgAllowRdfaAttributes ) {
-       // see http://www.w3.org/TR/rdfa-in-html/#document-conformance
-       if ( $wgMimeType == 'application/xhtml+xml' ) {
-               $wgHtml5Version = 'XHTML+RDFa 1.0';
-       } else {
-               $wgHtml5Version = 'HTML+RDFa 1.0';
-       }
-}
-
 // Blacklisted file extensions shouldn't appear on the "allowed" list
 $wgFileExtensions = array_values( array_diff( $wgFileExtensions, $wgFileBlacklist ) );
 
@@ -517,6 +508,11 @@ if ( $wgPHPSessionHandling !== 'enable' &&
 ) {
        $wgPHPSessionHandling = 'warn';
 }
+if ( defined( 'MW_NO_SESSION' ) ) {
+       // If the entry point wants no session, force 'disable' here unless they
+       // specifically set it to the (undocumented) 'warn'.
+       $wgPHPSessionHandling = MW_NO_SESSION === 'warn' ? 'warn' : 'disable';
+}
 
 Profiler::instance()->scopedProfileOut( $ps_default );
 
@@ -531,6 +527,35 @@ if ( !class_exists( 'AutoLoader' ) ) {
        require_once "$IP/includes/AutoLoader.php";
 }
 
+// Install a header callback to prevent caching of responses with cookies (T127993)
+if ( !$wgCommandLineMode ) {
+       header_register_callback( function () {
+               $headers = [];
+               foreach ( headers_list() as $header ) {
+                       list( $name, $value ) = explode( ':', $header, 2 );
+                       $headers[strtolower( trim( $name ) )][] = trim( $value );
+               }
+
+               if ( isset( $headers['set-cookie'] ) ) {
+                       $cacheControl = isset( $headers['cache-control'] )
+                               ? implode( ', ', $headers['cache-control'] )
+                               : '';
+
+                       if ( !preg_match( '/(?:^|,)\s*(?:private|no-cache|no-store)\s*(?:$|,)/i', $cacheControl ) ) {
+                               header( 'Expires: Thu, 01 Jan 1970 00:00:00 GMT' );
+                               header( 'Cache-Control: private, max-age=0, s-maxage=0' );
+                               MediaWiki\Logger\LoggerFactory::getInstance( 'cache-cookies' )->warning(
+                                       'Cookies set on {url} with Cache-Control "{cache-control}"', [
+                                               'url' => WebRequest::getGlobalRequestURL(),
+                                               'cookies' => $headers['set-cookie'],
+                                               'cache-control' => $cacheControl ?: '<not set>',
+                                       ]
+                               );
+                       }
+               }
+       } );
+}
+
 MWExceptionHandler::installHandler();
 
 require_once "$IP/includes/compat/normal/UtfNormalUtil.php";
@@ -575,6 +600,9 @@ if ( !$wgEmergencyContact ) {
 if ( !$wgPasswordSender ) {
        $wgPasswordSender = 'apache@' . $wgServerName;
 }
+if ( !$wgNoReplyAddress ) {
+       $wgNoReplyAddress = $wgPasswordSender;
+}
 
 if ( $wgSecureLogin && substr( $wgServer, 0, 2 ) !== '//' ) {
        $wgSecureLogin = false;
@@ -702,10 +730,13 @@ if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
                session_name( $wgSessionName ? $wgSessionName : $wgCookiePrefix . '_session' );
        }
 
-       // Create the SessionManager singleton and set up our session handler
-       MediaWiki\Session\PHPSessionHandler::install(
-               MediaWiki\Session\SessionManager::singleton()
-       );
+       // Create the SessionManager singleton and set up our session handler,
+       // unless we're specifically asked not to.
+       if ( !defined( 'MW_NO_SESSION_HANDLER' ) ) {
+               MediaWiki\Session\PHPSessionHandler::install(
+                       MediaWiki\Session\SessionManager::singleton()
+               );
+       }
 
        // Initialize the session
        try {
@@ -740,6 +771,16 @@ if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
                session_id( $session->getId() );
                MediaWiki\quietCall( 'session_start' );
        }
+
+       unset( $session );
+} else {
+       // Even if we didn't set up a global Session, still install our session
+       // handler unless specifically requested not to.
+       if ( !defined( 'MW_NO_SESSION_HANDLER' ) ) {
+               MediaWiki\Session\PHPSessionHandler::install(
+                       MediaWiki\Session\SessionManager::singleton()
+               );
+       }
 }
 Profiler::instance()->scopedProfileOut( $ps_session );
 
@@ -809,10 +850,5 @@ if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
 wfDebug( "Fully initialised\n" );
 $wgFullyInitialised = true;
 
-// T125455
-if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
-       MediaWiki\Session\SessionManager::singleton()->checkIpLimits();
-}
-
 Profiler::instance()->scopedProfileOut( $ps_extensions );
 Profiler::instance()->scopedProfileOut( $ps_setup );
index 5370239..cc7abc8 100644 (file)
@@ -178,15 +178,36 @@ class Status {
                return $cleanParams;
        }
 
+       /**
+        * @param string|Language|null $lang Language to use for processing
+        *  messages, or null to default to the user language.
+        * @return Language
+        */
+       protected function languageFromParam( $lang ) {
+               global $wgLang;
+
+               if ( $lang === null ) {
+                       // @todo: Use RequestContext::getMain()->getLanguage() instead
+                       return $wgLang;
+               } elseif ( $lang instanceof Language || $lang instanceof StubUserLang ) {
+                       return $lang;
+               } else {
+                       return Language::factory( $lang );
+               }
+       }
+
        /**
         * Get the error list as a wikitext formatted list
         *
         * @param string|bool $shortContext A short enclosing context message name, to
         *        be used when there is a single error
         * @param string|bool $longContext A long enclosing context message name, for a list
+        * @param string|Language $lang Language to use for processing messages
         * @return string
         */
-       public function getWikiText( $shortContext = false, $longContext = false ) {
+       public function getWikiText( $shortContext = false, $longContext = false, $lang = null ) {
+               $lang = $this->languageFromParam( $lang );
+
                $rawErrors = $this->sv->getErrors();
                if ( count( $rawErrors ) == 0 ) {
                        if ( $this->sv->isOK() ) {
@@ -199,22 +220,22 @@ class Status {
                        $rawErrors = $this->sv->getErrors(); // just added a fatal
                }
                if ( count( $rawErrors ) == 1 ) {
-                       $s = $this->getErrorMessage( $rawErrors[0] )->plain();
+                       $s = $this->getErrorMessage( $rawErrors[0], $lang )->plain();
                        if ( $shortContext ) {
-                               $s = wfMessage( $shortContext, $s )->plain();
+                               $s = wfMessage( $shortContext, $s )->inLanguage( $lang )->plain();
                        } elseif ( $longContext ) {
-                               $s = wfMessage( $longContext, "* $s\n" )->plain();
+                               $s = wfMessage( $longContext, "* $s\n" )->inLanguage( $lang )->plain();
                        }
                } else {
-                       $errors = $this->getErrorMessageArray( $rawErrors );
+                       $errors = $this->getErrorMessageArray( $rawErrors, $lang );
                        foreach ( $errors as &$error ) {
                                $error = $error->plain();
                        }
                        $s = '* ' . implode( "\n* ", $errors ) . "\n";
                        if ( $longContext ) {
-                               $s = wfMessage( $longContext, $s )->plain();
+                               $s = wfMessage( $longContext, $s )->inLanguage( $lang )->plain();
                        } elseif ( $shortContext ) {
-                               $s = wfMessage( $shortContext, "\n$s\n" )->plain();
+                               $s = wfMessage( $shortContext, "\n$s\n" )->inLanguage( $lang )->plain();
                        }
                }
                return $s;
@@ -227,10 +248,12 @@ class Status {
         * 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.
-        *
+        * @param string|Language $lang Language to use for processing messages
         * @return Message
         */
-       public function getMessage( $shortContext = false, $longContext = false ) {
+       public function getMessage( $shortContext = false, $longContext = false, $lang = null ) {
+               $lang = $this->languageFromParam( $lang );
+
                $rawErrors = $this->sv->getErrors();
                if ( count( $rawErrors ) == 0 ) {
                        if ( $this->sv->isOK() ) {
@@ -243,16 +266,16 @@ class Status {
                        $rawErrors = $this->sv->getErrors(); // just added a fatal
                }
                if ( count( $rawErrors ) == 1 ) {
-                       $s = $this->getErrorMessage( $rawErrors[0] );
+                       $s = $this->getErrorMessage( $rawErrors[0], $lang );
                        if ( $shortContext ) {
-                               $s = wfMessage( $shortContext, $s );
+                               $s = wfMessage( $shortContext, $s )->inLanguage( $lang );
                        } elseif ( $longContext ) {
                                $wrapper = new RawMessage( "* \$1\n" );
                                $wrapper->params( $s )->parse();
-                               $s = wfMessage( $longContext, $wrapper );
+                               $s = wfMessage( $longContext, $wrapper )->inLanguage( $lang );
                        }
                } else {
-                       $msgs = $this->getErrorMessageArray( $rawErrors );
+                       $msgs = $this->getErrorMessageArray( $rawErrors, $lang );
                        $msgCount = count( $msgs );
 
                        if ( $shortContext ) {
@@ -263,11 +286,11 @@ class Status {
                        $s->params( $msgs )->parse();
 
                        if ( $longContext ) {
-                               $s = wfMessage( $longContext, $s );
+                               $s = wfMessage( $longContext, $s )->inLanguage( $lang );
                        } elseif ( $shortContext ) {
-                               $wrapper = new RawMessage( "\n\$1\n", $s );
+                               $wrapper = new RawMessage( "\n\$1\n", [ $s ] );
                                $wrapper->parse();
-                               $s = wfMessage( $shortContext, $wrapper );
+                               $s = wfMessage( $shortContext, $wrapper )->inLanguage( $lang );
                        }
                }
 
@@ -280,10 +303,10 @@ class Status {
         * 'message' and 'params', use those keys-value pairs.
         * Otherwise, if its an array, just use the first value as the
         * message and the remaining items as the params.
-        *
+        * @param string|Language $lang Language to use for processing messages
         * @return Message
         */
-       protected function getErrorMessage( $error ) {
+       protected function getErrorMessage( $error, $lang = null ) {
                if ( is_array( $error ) ) {
                        if ( isset( $error['message'] ) && $error['message'] instanceof Message ) {
                                $msg = $error['message'];
@@ -298,6 +321,8 @@ class Status {
                } else {
                        $msg = wfMessage( $error );
                }
+
+               $msg->inLanguage( $this->languageFromParam( $lang ) );
                return $msg;
        }
 
@@ -307,21 +332,27 @@ class Status {
         * @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|Language $lang Language to use for processing messages
         * @return string
         */
-       public function getHTML( $shortContext = false, $longContext = false ) {
-               $text = $this->getWikiText( $shortContext, $longContext );
-               $out = MessageCache::singleton()->parse( $text, null, true, true );
+       public function getHTML( $shortContext = false, $longContext = false, $lang = null ) {
+               $lang = $this->languageFromParam( $lang );
+               $text = $this->getWikiText( $shortContext, $longContext, $lang );
+               $out = MessageCache::singleton()->parse( $text, null, true, true, $lang );
                return $out instanceof ParserOutput ? $out->getText() : $out;
        }
 
        /**
         * Return an array with a Message object for each error.
         * @param array $errors
+        * @param string|Language $lang Language to use for processing messages
         * @return Message[]
         */
-       protected function getErrorMessageArray( $errors ) {
-               return array_map( [ $this, 'getErrorMessage' ], $errors );
+       protected function getErrorMessageArray( $errors, $lang = null ) {
+               $lang = $this->languageFromParam( $lang );
+               return array_map( function ( $e ) use ( $lang ) {
+                       return $this->getErrorMessage( $e, $lang );
+               }, $errors );
        }
 
        /**
index 4abc283..211afda 100644 (file)
@@ -165,9 +165,7 @@ class StubObject {
 }
 
 /**
- * Stub object for the user language. It depends of the user preferences and
- * "uselang" parameter that can be passed to index.php. This object have to be
- * in $wgLang global.
+ * Stub object for the user language. Assigned to the $wgLang global.
  */
 class StubUserLang extends StubObject {
 
@@ -175,10 +173,6 @@ class StubUserLang extends StubObject {
                parent::__construct( 'wgLang' );
        }
 
-       public function __call( $name, $args ) {
-               return $this->_call( $name, $args );
-       }
-
        /**
         * Call Language::findVariantLink after unstubbing $wgLang.
         *
index 6420dc7..20142a7 100644 (file)
@@ -38,7 +38,7 @@ class TemplateParser {
 
        /**
         * @param string $templateDir
-        * @param boolean $forceRecompile
+        * @param bool $forceRecompile
         */
        public function __construct( $templateDir = null, $forceRecompile = false ) {
                $this->templateDir = $templateDir ?: __DIR__ . '/templates';
index c0ec97f..8bafe26 100644 (file)
@@ -145,7 +145,7 @@ class Title implements LinkTarget {
        /** @var bool The (string) language code of the page's language and content code. */
        private $mPageLanguage = false;
 
-       /** @var string|boolean|null The page language code from the database, null if not saved in
+       /** @var string|bool|null The page language code from the database, null if not saved in
         * the database or false if not loaded, yet. */
        private $mDbPageLanguage = false;
 
@@ -174,7 +174,7 @@ class Title implements LinkTarget {
                // make sure we are using the right one. To detect changes over the course
                // of a request, we remember a fingerprint of the config used to create the
                // codec singleton, and re-create it if the fingerprint doesn't match.
-               $fingerprint = spl_object_hash( $wgContLang ) . '|' . join( '+', $wgLocalInterwikis );
+               $fingerprint = spl_object_hash( $wgContLang ) . '|' . implode( '+', $wgLocalInterwikis );
 
                if ( $fingerprint !== $titleCodecFingerprint ) {
                        $titleCodec = null;
@@ -2452,8 +2452,8 @@ class Title implements LinkTarget {
 
        /**
         * Can $user perform $action on this page? This is an internal function,
-        * which checks ONLY that previously checked by userCan (i.e. it leaves out
-        * checks on wfReadOnly() and blocks)
+        * with multiple levels of checks depending on performance needs; see $rigor below.
+        * It does not check wfReadOnly().
         *
         * @param string $action Action that permission needs to be checked for
         * @param User $user User to check
@@ -3570,9 +3570,9 @@ class Title implements LinkTarget {
 
                // If we are looking at a css/js user subpage, purge the action=raw.
                if ( $this->isJsSubpage() ) {
-                       $urls[] = $this->getInternalUrl( 'action=raw&ctype=text/javascript' );
+                       $urls[] = $this->getInternalURL( 'action=raw&ctype=text/javascript' );
                } elseif ( $this->isCssSubpage() ) {
-                       $urls[] = $this->getInternalUrl( 'action=raw&ctype=text/css' );
+                       $urls[] = $this->getInternalURL( 'action=raw&ctype=text/css' );
                }
 
                Hooks::run( 'TitleSquidURLs', [ $this, &$urls ] );
@@ -4466,8 +4466,12 @@ class Title implements LinkTarget {
                        $this->mNotificationTimestamp = [];
                }
 
-               $watchedItem = WatchedItem::fromUserTitle( $user, $this );
-               $this->mNotificationTimestamp[$uid] = $watchedItem->getNotificationTimestamp();
+               $watchedItem = WatchedItemStore::getDefaultInstance()->getWatchedItem( $user, $this );
+               if ( $watchedItem ) {
+                       $this->mNotificationTimestamp[$uid] = $watchedItem->getNotificationTimestamp();
+               } else {
+                       $this->mNotificationTimestamp[$uid] = false;
+               }
 
                return $this->mNotificationTimestamp[$uid];
        }
@@ -4623,7 +4627,7 @@ class Title implements LinkTarget {
         * to true in LocalSettings.php, otherwise returns false. If there is no language saved in
         * the db, it will return NULL.
         *
-        * @return string|null|boolean
+        * @return string|null|bool
         */
        private function getDbPageLanguageCode() {
                global $wgPageLanguageUseDB;
index 2c400d0..5b4a4fc 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * Accessor and mutator for watchlist entries.
- *
  * 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
 /**
  * Representation of a pair of user and title for watchlist entries.
  *
+ * @author Tim Starling
+ * @author Addshore
+ *
  * @ingroup Watchlist
  */
 class WatchedItem {
-       /** @var Title */
-       private $mTitle;
-
-       /** @var User */
-       private $mUser;
-
-       /** @var int */
-       private $mCheckRights;
-
-       /** @var bool */
-       private $loaded = false;
-
-       /** @var bool */
-       private $watched;
-
-       /** @var string */
-       private $timestamp;
 
        /**
-        * Constant to specify that user rights 'editmywatchlist' and
-        * 'viewmywatchlist' should not be checked.
-        * @since 1.22
+        * @deprecated since 1.27, see User::IGNORE_USER_RIGHTS
         */
-       const IGNORE_USER_RIGHTS = 0;
+       const IGNORE_USER_RIGHTS = User::IGNORE_USER_RIGHTS;
 
        /**
-        * Constant to specify that user rights 'editmywatchlist' and
-        * 'viewmywatchlist' should be checked.
-        * @since 1.22
+        * @deprecated since 1.27, see User::CHECK_USER_RIGHTS
         */
-       const CHECK_USER_RIGHTS = 1;
+       const CHECK_USER_RIGHTS = User::CHECK_USER_RIGHTS;
 
        /**
-        * Create a WatchedItem object with the given user and title
-        * @since 1.22 $checkRights parameter added
-        * @param User $user The user to use for (un)watching
-        * @param Title $title The title we're going to (un)watch
-        * @param int $checkRights Whether to check the 'viewmywatchlist' and 'editmywatchlist' rights.
-        *     Pass either WatchedItem::IGNORE_USER_RIGHTS or WatchedItem::CHECK_USER_RIGHTS.
-        * @return WatchedItem
+        * @deprecated Internal class use only
         */
-       public static function fromUserTitle( $user, $title,
-               $checkRights = WatchedItem::CHECK_USER_RIGHTS
-       ) {
-               $wl = new WatchedItem;
-               $wl->mUser = $user;
-               $wl->mTitle = $title;
-               $wl->mCheckRights = $checkRights;
-
-               return $wl;
-       }
+       const DEPRECATED_USAGE_TIMESTAMP = -100;
 
        /**
-        * Title being watched
-        * @return Title
+        * @var bool
+        * @deprecated Internal class use only
         */
-       protected function getTitle() {
-               return $this->mTitle;
-       }
+       public $checkRights = User::CHECK_USER_RIGHTS;
 
        /**
-        * Helper to retrieve the title namespace
-        * @return int
+        * @var Title
+        * @deprecated Internal class use only
         */
-       protected function getTitleNs() {
-               return $this->getTitle()->getNamespace();
-       }
+       private $title;
 
        /**
-        * Helper to retrieve the title DBkey
-        * @return string
+        * @var LinkTarget
         */
-       protected function getTitleDBkey() {
-               return $this->getTitle()->getDBkey();
-       }
+       private $linkTarget;
 
        /**
-        * Helper to retrieve the user id
-        * @return int
+        * @var User
         */
-       protected function getUserId() {
-               return $this->mUser->getId();
-       }
+       private $user;
 
        /**
-        * Return an array of conditions to select or update the appropriate database
-        * row.
-        *
-        * @return array
+        * @var null|string the value of the wl_notificationtimestamp field
         */
-       private function dbCond() {
-               return [
-                       'wl_user' => $this->getUserId(),
-                       'wl_namespace' => $this->getTitleNs(),
-                       'wl_title' => $this->getTitleDBkey(),
-               ];
-       }
+       private $notificationTimestamp;
 
        /**
-        * Load the object from the database
+        * @param User $user
+        * @param LinkTarget $linkTarget
+        * @param null|string $notificationTimestamp the value of the wl_notificationtimestamp field
+        * @param bool|null $checkRights DO NOT USE - used internally for backward compatibility
         */
-       private function load() {
-               if ( $this->loaded ) {
-                       return;
-               }
-               $this->loaded = true;
-
-               // Only loggedin user can have a watchlist
-               if ( $this->mUser->isAnon() ) {
-                       $this->watched = false;
-                       return;
-               }
-
-               // some pages cannot be watched
-               if ( !$this->getTitle()->isWatchable() ) {
-                       $this->watched = false;
-                       return;
-               }
-
-               # Pages and their talk pages are considered equivalent for watching;
-               # remember that talk namespaces are numbered as page namespace+1.
-
-               $dbr = wfGetDB( DB_SLAVE );
-               $row = $dbr->selectRow( 'watchlist', 'wl_notificationtimestamp',
-                       $this->dbCond(), __METHOD__ );
-
-               if ( $row === false ) {
-                       $this->watched = false;
-               } else {
-                       $this->watched = true;
-                       $this->timestamp = $row->wl_notificationtimestamp;
+       public function __construct(
+               User $user,
+               LinkTarget $linkTarget,
+               $notificationTimestamp,
+               $checkRights = null
+       ) {
+               $this->user = $user;
+               $this->linkTarget = $linkTarget;
+               $this->notificationTimestamp = $notificationTimestamp;
+               if ( $checkRights !== null ) {
+                       $this->checkRights = $checkRights;
                }
        }
 
        /**
-        * Check permissions
-        * @param string $what 'viewmywatchlist' or 'editmywatchlist'
-        * @return bool
+        * @return User
         */
-       private function isAllowed( $what ) {
-               return !$this->mCheckRights || $this->mUser->isAllowed( $what );
+       public function getUser() {
+               return $this->user;
        }
 
        /**
-        * Is mTitle being watched by mUser?
-        * @return bool
+        * @return LinkTarget
         */
-       public function isWatched() {
-               if ( !$this->isAllowed( 'viewmywatchlist' ) ) {
-                       return false;
-               }
-
-               $this->load();
-               return $this->watched;
+       public function getLinkTarget() {
+               return $this->linkTarget;
        }
 
        /**
         * Get the notification timestamp of this entry.
         *
-        * @return bool|null|string False if the page is not watched, the value of
-        *   the wl_notificationtimestamp field otherwise
+        * @return bool|null|string
         */
        public function getNotificationTimestamp() {
-               if ( !$this->isAllowed( 'viewmywatchlist' ) ) {
-                       return false;
-               }
-
-               $this->load();
-               if ( $this->watched ) {
-                       return $this->timestamp;
-               } else {
-                       return false;
+               // Back compat for objects constructed using self::fromUserTitle
+               if ( $this->notificationTimestamp === self::DEPRECATED_USAGE_TIMESTAMP ) {
+                       // wfDeprecated( __METHOD__, '1.27' );
+                       if ( $this->checkRights && !$this->user->isAllowed( 'viewmywatchlist' ) ) {
+                               return false;
+                       }
+                       $item = WatchedItemStore::getDefaultInstance()
+                               ->loadWatchedItem( $this->user, $this->linkTarget );
+                       if ( $item ) {
+                               $this->notificationTimestamp = $item->getNotificationTimestamp();
+                       } else {
+                               $this->notificationTimestamp = false;
+                       }
                }
+               return $this->notificationTimestamp;
        }
 
        /**
-        * Reset the notification timestamp of this entry
-        *
-        * @param bool $force Whether to force the write query to be executed even if the
-        *    page is not watched or the notification timestamp is already NULL.
-        * @param int $oldid The revision id being viewed. If not given or 0, latest revision is assumed.
+        * Back compat pre 1.27 with the WatchedItemStore introduction
+        * @todo remove in 1.28/9
+        * -------------------------------------------------
         */
-       public function resetNotificationTimestamp(
-               $force = '', $oldid = 0
-       ) {
-               // Only loggedin user can have a watchlist
-               if ( wfReadOnly() || $this->mUser->isAnon() || !$this->isAllowed( 'editmywatchlist' ) ) {
-                       return;
-               }
 
-               if ( $force != 'force' ) {
-                       $this->load();
-                       if ( !$this->watched || $this->timestamp === null ) {
-                               return;
+       /**
+        * @return Title
+        * @deprecated Internal class use only
+        */
+       public function getTitle() {
+               if ( !$this->title ) {
+                       if ( $this->linkTarget instanceof Title ) {
+                               $this->title = $this->linkTarget;
+                       } else {
+                               $this->title = Title::newFromLinkTarget( $this->linkTarget );
                        }
                }
+               return $this->title;
+       }
 
-               $title = $this->getTitle();
-               if ( !$oldid ) {
-                       // No oldid given, assuming latest revision; clear the timestamp.
-                       $notificationTimestamp = null;
-               } elseif ( !$title->getNextRevisionID( $oldid ) ) {
-                       // Oldid given and is the latest revision for this title; clear the timestamp.
-                       $notificationTimestamp = null;
-               } else {
-                       // See if the version marked as read is more recent than the one we're viewing.
-                       // Call load() if it wasn't called before due to $force.
-                       $this->load();
-
-                       if ( $this->timestamp === null ) {
-                               // This can only happen if $force is enabled.
-                               $notificationTimestamp = null;
-                       } else {
-                               // Oldid given and isn't the latest; update the timestamp.
-                               // This will result in no further notification emails being sent!
-                               $notificationTimestamp = Revision::getTimestampFromId( $title, $oldid );
-                               // We need to go one second to the future because of various strict comparisons
-                               // throughout the codebase
-                               $ts = new MWTimestamp( $notificationTimestamp );
-                               $ts->timestamp->add( new DateInterval( 'PT1S' ) );
-                               $notificationTimestamp = $ts->getTimestamp( TS_MW );
+       /**
+        * @deprecated since 1.27 Use the constructor, WatchedItemStore::getWatchedItem()
+        *             or WatchedItemStore::loadWatchedItem()
+        */
+       public static function fromUserTitle( $user, $title, $checkRights = User::CHECK_USER_RIGHTS ) {
+               // wfDeprecated( __METHOD__, '1.27' );
+               return new self( $user, $title, self::DEPRECATED_USAGE_TIMESTAMP, (bool)$checkRights );
+       }
 
-                               if ( $notificationTimestamp < $this->timestamp ) {
-                                       if ( $force != 'force' ) {
-                                               return;
-                                       } else {
-                                               // This is a little silly…
-                                               $notificationTimestamp = $this->timestamp;
-                                       }
-                               }
-                       }
+       /**
+        * @deprecated since 1.27 Use WatchedItemStore::resetNotificationTimestamp()
+        */
+       public function resetNotificationTimestamp( $force = '', $oldid = 0 ) {
+               // wfDeprecated( __METHOD__, '1.27' );
+               if ( $this->checkRights && !$this->user->isAllowed( 'editmywatchlist' ) ) {
+                       return;
                }
-
-               // If the page is watched by the user (or may be watched), update the timestamp
-               $job = new ActivityUpdateJob(
-                       $title,
-                       [
-                               'type'      => 'updateWatchlistNotification',
-                               'userid'    => $this->getUserId(),
-                               'notifTime' => $notificationTimestamp,
-                               'curTime'   => time()
-                       ]
+               WatchedItemStore::getDefaultInstance()->resetNotificationTimestamp(
+                       $this->user,
+                       $this->getTitle(),
+                       $force,
+                       $oldid
                );
-               // Try to run this post-send
-               DeferredUpdates::addCallableUpdate( function() use ( $job ) {
-                       $job->run();
-               } );
-
-               $this->timestamp = null;
        }
 
        /**
-        * @param WatchedItem[] $items
-        * @return bool
+        * @deprecated since 1.27 Use WatchedItemStore::addWatchBatch()
         */
        public static function batchAddWatch( array $items ) {
-
-               if ( wfReadOnly() ) {
-                       return false;
-               }
-
-               $rows = [];
-               foreach ( $items as $item ) {
-                       // Only loggedin user can have a watchlist
-                       if ( $item->mUser->isAnon() || !$item->isAllowed( 'editmywatchlist' ) ) {
+               // wfDeprecated( __METHOD__, '1.27' );
+               $userTargetCombinations = [];
+               /** @var WatchedItem $watchedItem */
+               foreach ( $items as $watchedItem ) {
+                       if ( $watchedItem->checkRights && !$watchedItem->getUser()->isAllowed( 'editmywatchlist' ) ) {
                                continue;
                        }
-                       $rows[] = [
-                               'wl_user' => $item->getUserId(),
-                               'wl_namespace' => MWNamespace::getSubject( $item->getTitleNs() ),
-                               'wl_title' => $item->getTitleDBkey(),
-                               'wl_notificationtimestamp' => null,
+                       $userTargetCombinations[] = [
+                               $watchedItem->getUser(),
+                               $watchedItem->getTitle()->getSubjectPage()
                        ];
-                       // Every single watched page needs now to be listed in watchlist;
-                       // namespace:page and namespace_talk:page need separate entries:
-                       $rows[] = [
-                               'wl_user' => $item->getUserId(),
-                               'wl_namespace' => MWNamespace::getTalk( $item->getTitleNs() ),
-                               'wl_title' => $item->getTitleDBkey(),
-                               'wl_notificationtimestamp' => null
+                       $userTargetCombinations[] = [
+                               $watchedItem->getUser(),
+                               $watchedItem->getTitle()->getTalkPage()
                        ];
-                       $item->watched = true;
-               }
-
-               if ( !$rows ) {
-                       return false;
-               }
-
-               $dbw = wfGetDB( DB_MASTER );
-               foreach ( array_chunk( $rows, 100 ) as $toInsert ) {
-                       // Use INSERT IGNORE to avoid overwriting the notification timestamp
-                       // if there's already an entry for this page
-                       $dbw->insert( 'watchlist', $toInsert, __METHOD__, 'IGNORE' );
                }
-
-               return true;
+               $store = WatchedItemStore::getDefaultInstance();
+               return $store->addWatchBatch( $userTargetCombinations );
        }
 
        /**
-        * Given a title and user (assumes the object is setup), add the watch to the database.
+        * @deprecated since 1.27 Use User::addWatch()
         * @return bool
         */
        public function addWatch() {
-               return self::batchAddWatch( [ $this ] );
+               // wfDeprecated( __METHOD__, '1.27' );
+               $this->user->addWatch( $this->getTitle(), $this->checkRights );
+               return true;
        }
 
        /**
-        * Same as addWatch, only the opposite.
+        * @deprecated since 1.27 Use User::removeWatch()
         * @return bool
         */
        public function removeWatch() {
-
-               // Only loggedin user can have a watchlist
-               if ( wfReadOnly() || $this->mUser->isAnon() || !$this->isAllowed( 'editmywatchlist' ) ) {
+               // wfDeprecated( __METHOD__, '1.27' );
+               if ( $this->checkRights && !$this->user->isAllowed( 'editmywatchlist' ) ) {
                        return false;
                }
-
-               $success = false;
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->delete( 'watchlist',
-                       [
-                               'wl_user' => $this->getUserId(),
-                               'wl_namespace' => MWNamespace::getSubject( $this->getTitleNs() ),
-                               'wl_title' => $this->getTitleDBkey(),
-                       ], __METHOD__
-               );
-               if ( $dbw->affectedRows() ) {
-                       $success = true;
-               }
-
-               # the following code compensates the new behavior, introduced by the
-               # enotif patch, that every single watched page needs now to be listed
-               # in watchlist namespace:page and namespace_talk:page had separate
-               # entries: clear them
-               $dbw->delete( 'watchlist',
-                       [
-                               'wl_user' => $this->getUserId(),
-                               'wl_namespace' => MWNamespace::getTalk( $this->getTitleNs() ),
-                               'wl_title' => $this->getTitleDBkey(),
-                       ], __METHOD__
-               );
-
-               if ( $dbw->affectedRows() ) {
-                       $success = true;
-               }
-
-               $this->watched = false;
-
-               return $success;
+               $this->user->removeWatch( $this->getTitle(), $this->checkRights );
+               return true;
        }
 
        /**
-        * Check if the given title already is watched by the user, and if so
-        * add watches on a new title. To be used for page renames and such.
-        *
-        * @param Title $ot Page title to duplicate entries from, if present
-        * @param Title $nt Page title to add watches on
+        * @deprecated since 1.27 Use User::isWatched()
+        * @return bool
         */
-       public static function duplicateEntries( $ot, $nt ) {
-               WatchedItem::doDuplicateEntries( $ot->getSubjectPage(), $nt->getSubjectPage() );
-               WatchedItem::doDuplicateEntries( $ot->getTalkPage(), $nt->getTalkPage() );
+       public function isWatched() {
+               // wfDeprecated( __METHOD__, '1.27' );
+               return $this->user->isWatched( $this->getTitle(), $this->checkRights );
        }
 
        /**
-        * Handle duplicate entries. Backend for duplicateEntries().
-        *
-        * @param Title $ot
-        * @param Title $nt
-        *
-        * @return bool
+        * @deprecated since 1.27 Use WatchedItemStore::duplicateAllAssociatedEntries()
         */
-       private static function doDuplicateEntries( $ot, $nt ) {
-               $oldnamespace = $ot->getNamespace();
-               $newnamespace = $nt->getNamespace();
-               $oldtitle = $ot->getDBkey();
-               $newtitle = $nt->getDBkey();
-
-               $dbw = wfGetDB( DB_MASTER );
-               $res = $dbw->select( 'watchlist',
-                       [ 'wl_user', 'wl_notificationtimestamp' ],
-                       [ 'wl_namespace' => $oldnamespace, 'wl_title' => $oldtitle ],
-                       __METHOD__, 'FOR UPDATE'
-               );
-               # Construct array to replace into the watchlist
-               $values = [];
-               foreach ( $res as $s ) {
-                       $values[] = [
-                               'wl_user' => $s->wl_user,
-                               'wl_namespace' => $newnamespace,
-                               'wl_title' => $newtitle,
-                               'wl_notificationtimestamp' => $s->wl_notificationtimestamp,
-                       ];
-               }
-
-               if ( empty( $values ) ) {
-                       // Nothing to do
-                       return true;
-               }
-
-               # Perform replace
-               # Note that multi-row replace is very efficient for MySQL but may be inefficient for
-               # some other DBMSes, mostly due to poor simulation by us
-               $dbw->replace(
-                       'watchlist',
-                       [ [ 'wl_user', 'wl_namespace', 'wl_title' ] ],
-                       $values,
-                       __METHOD__
-               );
-
-               return true;
+       public static function duplicateEntries( Title $oldTitle, Title $newTitle ) {
+               // wfDeprecated( __METHOD__, '1.27' );
+               $store = WatchedItemStore::getDefaultInstance();
+               $store->duplicateAllAssociatedEntries( $oldTitle, $newTitle );
        }
+
 }
diff --git a/includes/WatchedItemStore.php b/includes/WatchedItemStore.php
new file mode 100644 (file)
index 0000000..4eea54d
--- /dev/null
@@ -0,0 +1,958 @@
+<?php
+
+use Wikimedia\Assert\Assert;
+
+/**
+ * Storage layer class for WatchedItems.
+ * Database interaction.
+ *
+ * @author Addshore
+ *
+ * @since 1.27
+ */
+class WatchedItemStore {
+
+       const SORT_DESC = 'DESC';
+       const SORT_ASC = 'ASC';
+
+       /**
+        * @var LoadBalancer
+        */
+       private $loadBalancer;
+
+       /**
+        * @var HashBagOStuff
+        */
+       private $cache;
+
+       /**
+        * @var array[] Looks like $cacheIndex[Namespace ID][Target DB Key][User Id] => 'key'
+        * The index is needed so that on mass changes all relevant items can be un-cached.
+        * For example: Clearing a users watchlist of all items or updating notification timestamps
+        *              for all users watching a single target.
+        */
+       private $cacheIndex = [];
+
+       /**
+        * @var callable|null
+        */
+       private $deferredUpdatesAddCallableUpdateCallback;
+
+       /**
+        * @var callable|null
+        */
+       private $revisionGetTimestampFromIdCallback;
+
+       /**
+        * @var self|null
+        */
+       private static $instance;
+
+       /**
+        * @param LoadBalancer $loadBalancer
+        * @param HashBagOStuff $cache
+        */
+       public function __construct(
+               LoadBalancer $loadBalancer,
+               HashBagOStuff $cache
+       ) {
+               $this->loadBalancer = $loadBalancer;
+               $this->cache = $cache;
+               $this->deferredUpdatesAddCallableUpdateCallback = [ 'DeferredUpdates', 'addCallableUpdate' ];
+               $this->revisionGetTimestampFromIdCallback = [ 'Revision', 'getTimestampFromId' ];
+       }
+
+       /**
+        * Overrides the DeferredUpdates::addCallableUpdate callback
+        * This is intended for use while testing and will fail if MW_PHPUNIT_TEST is not defined.
+        *
+        * @param callable $callback
+        *
+        * @see DeferredUpdates::addCallableUpdate for callback signiture
+        *
+        * @return ScopedCallback to reset the overridden value
+        * @throws MWException
+        */
+       public function overrideDeferredUpdatesAddCallableUpdateCallback( $callback ) {
+               if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
+                       throw new MWException(
+                               'Cannot override DeferredUpdates::addCallableUpdate callback in operation.'
+                       );
+               }
+               Assert::parameterType( 'callable', $callback, '$callback' );
+
+               $previousValue = $this->deferredUpdatesAddCallableUpdateCallback;
+               $this->deferredUpdatesAddCallableUpdateCallback = $callback;
+               return new ScopedCallback( function() use ( $previousValue ) {
+                       $this->deferredUpdatesAddCallableUpdateCallback = $previousValue;
+               } );
+       }
+
+       /**
+        * Overrides the Revision::getTimestampFromId callback
+        * This is intended for use while testing and will fail if MW_PHPUNIT_TEST is not defined.
+        *
+        * @param callable $callback
+        * @see Revision::getTimestampFromId for callback signiture
+        *
+        * @return ScopedCallback to reset the overridden value
+        * @throws MWException
+        */
+       public function overrideRevisionGetTimestampFromIdCallback( $callback ) {
+               if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
+                       throw new MWException(
+                               'Cannot override Revision::getTimestampFromId callback in operation.'
+                       );
+               }
+               Assert::parameterType( 'callable', $callback, '$callback' );
+
+               $previousValue = $this->revisionGetTimestampFromIdCallback;
+               $this->revisionGetTimestampFromIdCallback = $callback;
+               return new ScopedCallback( function() use ( $previousValue ) {
+                       $this->revisionGetTimestampFromIdCallback = $previousValue;
+               } );
+       }
+
+       /**
+        * Overrides the default instance of this class
+        * This is intended for use while testing and will fail if MW_PHPUNIT_TEST is not defined.
+        *
+        * If this method is used it MUST also be called with null after a test to ensure a new
+        * default instance is created next time getDefaultInstance is called.
+        *
+        * @param WatchedItemStore|null $store
+        *
+        * @return ScopedCallback to reset the overridden value
+        * @throws MWException
+        */
+       public static function overrideDefaultInstance( WatchedItemStore $store = null ) {
+               if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
+                       throw new MWException(
+                               'Cannot override ' . __CLASS__ . 'default instance in operation.'
+                       );
+               }
+
+               $previousValue = self::$instance;
+               self::$instance = $store;
+               return new ScopedCallback( function() use ( $previousValue ) {
+                       self::$instance = $previousValue;
+               } );
+       }
+
+       /**
+        * @return self
+        */
+       public static function getDefaultInstance() {
+               if ( !self::$instance ) {
+                       self::$instance = new self(
+                               wfGetLB(),
+                               new HashBagOStuff( [ 'maxKeys' => 100 ] )
+                       );
+               }
+               return self::$instance;
+       }
+
+       private function getCacheKey( User $user, LinkTarget $target ) {
+               return $this->cache->makeKey(
+                       (string)$target->getNamespace(),
+                       $target->getDBkey(),
+                       (string)$user->getId()
+               );
+       }
+
+       private function cache( WatchedItem $item ) {
+               $user = $item->getUser();
+               $target = $item->getLinkTarget();
+               $key = $this->getCacheKey( $user, $target );
+               $this->cache->set( $key, $item );
+               $this->cacheIndex[$target->getNamespace()][$target->getDBkey()][$user->getId()] = $key;
+       }
+
+       private function uncache( User $user, LinkTarget $target ) {
+               $this->cache->delete( $this->getCacheKey( $user, $target ) );
+               unset( $this->cacheIndex[$target->getNamespace()][$target->getDBkey()][$user->getId()] );
+       }
+
+       private function uncacheLinkTarget( LinkTarget $target ) {
+               if ( !isset( $this->cacheIndex[$target->getNamespace()][$target->getDBkey()] ) ) {
+                       return;
+               }
+               foreach ( $this->cacheIndex[$target->getNamespace()][$target->getDBkey()] as $key ) {
+                       $this->cache->delete( $key );
+               }
+       }
+
+       /**
+        * @param User $user
+        * @param LinkTarget $target
+        *
+        * @return WatchedItem|null
+        */
+       private function getCached( User $user, LinkTarget $target ) {
+               return $this->cache->get( $this->getCacheKey( $user, $target ) );
+       }
+
+       /**
+        * Return an array of conditions to select or update the appropriate database
+        * row.
+        *
+        * @param User $user
+        * @param LinkTarget $target
+        *
+        * @return array
+        */
+       private function dbCond( User $user, LinkTarget $target ) {
+               return [
+                       'wl_user' => $user->getId(),
+                       'wl_namespace' => $target->getNamespace(),
+                       'wl_title' => $target->getDBkey(),
+               ];
+       }
+
+       /**
+        * @param int $slaveOrMaster DB_MASTER or DB_SLAVE
+        *
+        * @return DatabaseBase
+        * @throws MWException
+        */
+       private function getConnection( $slaveOrMaster ) {
+               return $this->loadBalancer->getConnection( $slaveOrMaster, [ 'watchlist' ] );
+       }
+
+       /**
+        * @param DatabaseBase $connection
+        *
+        * @throws MWException
+        */
+       private function reuseConnection( $connection ) {
+               $this->loadBalancer->reuseConnection( $connection );
+       }
+
+       /**
+        * Count the number of individual items that are watched by the user.
+        * If a subject and corresponding talk page are watched this will return 2.
+        *
+        * @param User $user
+        *
+        * @return int
+        */
+       public function countWatchedItems( User $user ) {
+               $dbr = $this->getConnection( DB_SLAVE );
+               $return = (int)$dbr->selectField(
+                       'watchlist',
+                       'COUNT(*)',
+                       [
+                               'wl_user' => $user->getId()
+                       ],
+                       __METHOD__
+               );
+               $this->reuseConnection( $dbr );
+
+               return $return;
+       }
+
+       /**
+        * @param LinkTarget $target
+        *
+        * @return int
+        */
+       public function countWatchers( LinkTarget $target ) {
+               $dbr = $this->getConnection( DB_SLAVE );
+               $return = (int)$dbr->selectField(
+                       'watchlist',
+                       'COUNT(*)',
+                       [
+                               'wl_namespace' => $target->getNamespace(),
+                               'wl_title' => $target->getDBkey(),
+                       ],
+                       __METHOD__
+               );
+               $this->reuseConnection( $dbr );
+
+               return $return;
+       }
+
+       /**
+        * Number of page watchers who also visited a "recent" edit
+        *
+        * @param LinkTarget $target
+        * @param mixed $threshold timestamp accepted by wfTimestamp
+        *
+        * @return int
+        * @throws DBUnexpectedError
+        * @throws MWException
+        */
+       public function countVisitingWatchers( LinkTarget $target, $threshold ) {
+               $dbr = $this->getConnection( DB_SLAVE );
+               $visitingWatchers = (int)$dbr->selectField(
+                       'watchlist',
+                       'COUNT(*)',
+                       [
+                               'wl_namespace' => $target->getNamespace(),
+                               'wl_title' => $target->getDBkey(),
+                               'wl_notificationtimestamp >= ' .
+                               $dbr->addQuotes( $dbr->timestamp( $threshold ) ) .
+                               ' OR wl_notificationtimestamp IS NULL'
+                       ],
+                       __METHOD__
+               );
+               $this->reuseConnection( $dbr );
+
+               return $visitingWatchers;
+       }
+
+       /**
+        * @param LinkTarget[] $targets
+        * @param array $options Allowed keys:
+        *        'minimumWatchers' => int
+        *
+        * @return array multi dimensional like $return[$namespaceId][$titleString] = int $watchers
+        *         All targets will be present in the result. 0 either means no watchers or the number
+        *         of watchers was below the minimumWatchers option if passed.
+        */
+       public function countWatchersMultiple( array $targets, array $options = [] ) {
+               $dbOptions = [ 'GROUP BY' => [ 'wl_namespace', 'wl_title' ] ];
+
+               $dbr = $this->getConnection( DB_SLAVE );
+
+               if ( array_key_exists( 'minimumWatchers', $options ) ) {
+                       $dbOptions['HAVING'] = 'COUNT(*) >= ' . (int)$options['minimumWatchers'];
+               }
+
+               $lb = new LinkBatch( $targets );
+               $res = $dbr->select(
+                       'watchlist',
+                       [ 'wl_title', 'wl_namespace', 'watchers' => 'COUNT(*)' ],
+                       [ $lb->constructSet( 'wl', $dbr ) ],
+                       __METHOD__,
+                       $dbOptions
+               );
+
+               $this->reuseConnection( $dbr );
+
+               $watchCounts = [];
+               foreach ( $targets as $linkTarget ) {
+                       $watchCounts[$linkTarget->getNamespace()][$linkTarget->getDBkey()] = 0;
+               }
+
+               foreach ( $res as $row ) {
+                       $watchCounts[$row->wl_namespace][$row->wl_title] = (int)$row->watchers;
+               }
+
+               return $watchCounts;
+       }
+
+       /**
+        * Number of watchers of each page who have visited recent edits to that page
+        *
+        * @param array $targetsWithVisitThresholds array of pairs (LinkTarget $target, mixed $threshold),
+        *        $threshold is:
+        *        - a timestamp of the recent edit if $target exists (format accepted by wfTimestamp)
+        *        - null if $target doesn't exist
+        * @param int|null $minimumWatchers
+        * @return array multi-dimensional like $return[$namespaceId][$titleString] = $watchers,
+        *         where $watchers is an int:
+        *         - if the page exists, number of users watching who have visited the page recently
+        *         - if the page doesn't exist, number of users that have the page on their watchlist
+        *         - 0 means there are no visiting watchers or their number is below the minimumWatchers
+        *         option (if passed).
+        */
+       public function countVisitingWatchersMultiple(
+               array $targetsWithVisitThresholds,
+               $minimumWatchers = null
+       ) {
+               $dbr = $this->getConnection( DB_SLAVE );
+
+               $conds = $this->getVisitingWatchersCondition( $dbr, $targetsWithVisitThresholds );
+
+               $dbOptions = [ 'GROUP BY' => [ 'wl_namespace', 'wl_title' ] ];
+               if ( $minimumWatchers !== null ) {
+                       $dbOptions['HAVING'] = 'COUNT(*) >= ' . (int)$minimumWatchers;
+               }
+               $res = $dbr->select(
+                       'watchlist',
+                       [ 'wl_namespace', 'wl_title', 'watchers' => 'COUNT(*)' ],
+                       $conds,
+                       __METHOD__,
+                       $dbOptions
+               );
+
+               $this->reuseConnection( $dbr );
+
+               $watcherCounts = [];
+               foreach ( $targetsWithVisitThresholds as list( $target ) ) {
+                       /* @var LinkTarget $target */
+                       $watcherCounts[$target->getNamespace()][$target->getDBkey()] = 0;
+               }
+
+               foreach ( $res as $row ) {
+                       $watcherCounts[$row->wl_namespace][$row->wl_title] = (int)$row->watchers;
+               }
+
+               return $watcherCounts;
+       }
+
+       /**
+        * Generates condition for the query used in a batch count visiting watchers.
+        *
+        * @param IDatabase $db
+        * @param array $targetsWithVisitThresholds array of pairs (LinkTarget, last visit threshold)
+        * @return string
+        */
+       private function getVisitingWatchersCondition(
+               IDatabase $db,
+               array $targetsWithVisitThresholds
+       ) {
+               $missingTargets = [];
+               $namespaceConds = [];
+               foreach ( $targetsWithVisitThresholds as list( $target, $threshold ) ) {
+                       if ( $threshold === null ) {
+                               $missingTargets[] = $target;
+                               continue;
+                       }
+                       /* @var LinkTarget $target */
+                       $namespaceConds[$target->getNamespace()][] = $db->makeList( [
+                               'wl_title = ' . $db->addQuotes( $target->getDBkey() ),
+                               $db->makeList( [
+                                       'wl_notificationtimestamp >= ' . $db->addQuotes( $db->timestamp( $threshold ) ),
+                                       'wl_notificationtimestamp IS NULL'
+                               ], LIST_OR )
+                       ], LIST_AND );
+               }
+
+               $conds = [];
+               foreach ( $namespaceConds as $namespace => $pageConds ) {
+                       $conds[] = $db->makeList( [
+                               'wl_namespace = ' . $namespace,
+                               '(' . $db->makeList( $pageConds, LIST_OR ) . ')'
+                       ], LIST_AND );
+               }
+
+               if ( $missingTargets ) {
+                       $lb = new LinkBatch( $missingTargets );
+                       $conds[] = $lb->constructSet( 'wl', $db );
+               }
+
+               return $db->makeList( $conds, LIST_OR );
+       }
+
+       /**
+        * Get an item (may be cached)
+        *
+        * @param User $user
+        * @param LinkTarget $target
+        *
+        * @return WatchedItem|false
+        */
+       public function getWatchedItem( User $user, LinkTarget $target ) {
+               if ( $user->isAnon() ) {
+                       return false;
+               }
+
+               $cached = $this->getCached( $user, $target );
+               if ( $cached ) {
+                       return $cached;
+               }
+               return $this->loadWatchedItem( $user, $target );
+       }
+
+       /**
+        * Loads an item from the db
+        *
+        * @param User $user
+        * @param LinkTarget $target
+        *
+        * @return WatchedItem|false
+        */
+       public function loadWatchedItem( User $user, LinkTarget $target ) {
+               // Only loggedin user can have a watchlist
+               if ( $user->isAnon() ) {
+                       return false;
+               }
+
+               $dbr = $this->getConnection( DB_SLAVE );
+               $row = $dbr->selectRow(
+                       'watchlist',
+                       'wl_notificationtimestamp',
+                       $this->dbCond( $user, $target ),
+                       __METHOD__
+               );
+               $this->reuseConnection( $dbr );
+
+               if ( !$row ) {
+                       return false;
+               }
+
+               $item = new WatchedItem(
+                       $user,
+                       $target,
+                       $row->wl_notificationtimestamp
+               );
+               $this->cache( $item );
+
+               return $item;
+       }
+
+       /**
+        * @param User $user
+        * @param array $options Allowed keys:
+        *        'forWrite' => bool defaults to false
+        *        'sort' => string optional sorting by namespace ID and title
+        *                     one of the self::SORT_* constants
+        *
+        * @return WatchedItem[]
+        */
+       public function getWatchedItemsForUser( User $user, array $options = [] ) {
+               $options += [ 'forWrite' => false ];
+
+               $dbOptions = [];
+               if ( array_key_exists( 'sort', $options ) ) {
+                       Assert::parameter(
+                               ( in_array( $options['sort'], [ self::SORT_ASC, self::SORT_DESC ] ) ),
+                               '$options[\'sort\']',
+                               'must be SORT_ASC or SORT_DESC'
+                       );
+                       $dbOptions['ORDER BY'] = [
+                               "wl_namespace {$options['sort']}",
+                               "wl_title {$options['sort']}"
+                       ];
+               }
+               $db = $this->getConnection( $options['forWrite'] ? DB_MASTER : DB_SLAVE );
+
+               $res = $db->select(
+                       'watchlist',
+                       [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
+                       [ 'wl_user' => $user->getId() ],
+                       __METHOD__,
+                       $dbOptions
+               );
+               $this->reuseConnection( $db );
+
+               $watchedItems = [];
+               foreach ( $res as $row ) {
+                       // todo these could all be cached at some point?
+                       $watchedItems[] = new WatchedItem(
+                               $user,
+                               new TitleValue( (int)$row->wl_namespace, $row->wl_title ),
+                               $row->wl_notificationtimestamp
+                       );
+               }
+
+               return $watchedItems;
+       }
+
+       /**
+        * Must be called separately for Subject & Talk namespaces
+        *
+        * @param User $user
+        * @param LinkTarget $target
+        *
+        * @return bool
+        */
+       public function isWatched( User $user, LinkTarget $target ) {
+               return (bool)$this->getWatchedItem( $user, $target );
+       }
+
+       /**
+        * @param User $user
+        * @param LinkTarget[] $targets
+        *
+        * @return array multi-dimensional like $return[$namespaceId][$titleString] = $timestamp,
+        *         where $timestamp is:
+        *         - string|null value of wl_notificationtimestamp,
+        *         - false if $target is not watched by $user.
+        */
+       public function getNotificationTimestampsBatch( User $user, array $targets ) {
+               $timestamps = [];
+               foreach ( $targets as $target ) {
+                       $timestamps[$target->getNamespace()][$target->getDBkey()] = false;
+               }
+
+               if ( $user->isAnon() ) {
+                       return $timestamps;
+               }
+
+               $targetsToLoad = [];
+               foreach ( $targets as $target ) {
+                       $cachedItem = $this->getCached( $user, $target );
+                       if ( $cachedItem ) {
+                               $timestamps[$target->getNamespace()][$target->getDBkey()] =
+                                       $cachedItem->getNotificationTimestamp();
+                       } else {
+                               $targetsToLoad[] = $target;
+                       }
+               }
+
+               if ( !$targetsToLoad ) {
+                       return $timestamps;
+               }
+
+               $dbr = $this->getConnection( DB_SLAVE );
+
+               $lb = new LinkBatch( $targetsToLoad );
+               $res = $dbr->select(
+                       'watchlist',
+                       [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
+                       [
+                               $lb->constructSet( 'wl', $dbr ),
+                               'wl_user' => $user->getId(),
+                       ],
+                       __METHOD__
+               );
+               $this->reuseConnection( $dbr );
+
+               foreach ( $res as $row ) {
+                       $timestamps[(int)$row->wl_namespace][$row->wl_title] = $row->wl_notificationtimestamp;
+               }
+
+               return $timestamps;
+       }
+
+       /**
+        * Must be called separately for Subject & Talk namespaces
+        *
+        * @param User $user
+        * @param LinkTarget $target
+        */
+       public function addWatch( User $user, LinkTarget $target ) {
+               $this->addWatchBatch( [ [ $user, $target ] ] );
+       }
+
+       /**
+        * @param array[] $userTargetCombinations array of arrays containing [0] => User [1] => LinkTarget
+        *
+        * @return bool success
+        */
+       public function addWatchBatch( array $userTargetCombinations ) {
+               if ( $this->loadBalancer->getReadOnlyReason() !== false ) {
+                       return false;
+               }
+
+               $rows = [];
+               foreach ( $userTargetCombinations as list( $user, $target ) ) {
+                       /**
+                        * @var User $user
+                        * @var LinkTarget $target
+                        */
+
+                       // Only loggedin user can have a watchlist
+                       if ( $user->isAnon() ) {
+                               continue;
+                       }
+                       $rows[] = [
+                               'wl_user' => $user->getId(),
+                               'wl_namespace' => $target->getNamespace(),
+                               'wl_title' => $target->getDBkey(),
+                               'wl_notificationtimestamp' => null,
+                       ];
+                       $this->uncache( $user, $target );
+               }
+
+               if ( !$rows ) {
+                       return false;
+               }
+
+               $dbw = $this->getConnection( DB_MASTER );
+               foreach ( array_chunk( $rows, 100 ) as $toInsert ) {
+                       // Use INSERT IGNORE to avoid overwriting the notification timestamp
+                       // if there's already an entry for this page
+                       $dbw->insert( 'watchlist', $toInsert, __METHOD__, 'IGNORE' );
+               }
+               $this->reuseConnection( $dbw );
+
+               return true;
+       }
+
+       /**
+        * Removes the an entry for the User watching the LinkTarget
+        * Must be called separately for Subject & Talk namespaces
+        *
+        * @param User $user
+        * @param LinkTarget $target
+        *
+        * @return bool success
+        * @throws DBUnexpectedError
+        * @throws MWException
+        */
+       public function removeWatch( User $user, LinkTarget $target ) {
+               // Only logged in user can have a watchlist
+               if ( $this->loadBalancer->getReadOnlyReason() !== false || $user->isAnon() ) {
+                       return false;
+               }
+
+               $this->uncache( $user, $target );
+
+               $dbw = $this->getConnection( DB_MASTER );
+               $dbw->delete( 'watchlist',
+                       [
+                               'wl_user' => $user->getId(),
+                               'wl_namespace' => $target->getNamespace(),
+                               'wl_title' => $target->getDBkey(),
+                       ], __METHOD__
+               );
+               $success = (bool)$dbw->affectedRows();
+               $this->reuseConnection( $dbw );
+
+               return $success;
+       }
+
+       /**
+        * @param User $editor The editor that triggered the update. Their notification
+        *  timestamp will not be updated(they have already seen it)
+        * @param LinkTarget $target The target to update timestamps for
+        * @param string $timestamp Set the update timestamp to this value
+        *
+        * @return int[] Array of user IDs the timestamp has been updated for
+        */
+       public function updateNotificationTimestamp( User $editor, LinkTarget $target, $timestamp ) {
+               $dbw = $this->getConnection( DB_MASTER );
+               $res = $dbw->select( [ 'watchlist' ],
+                       [ 'wl_user' ],
+                       [
+                               'wl_user != ' . intval( $editor->getId() ),
+                               'wl_namespace' => $target->getNamespace(),
+                               'wl_title' => $target->getDBkey(),
+                               'wl_notificationtimestamp IS NULL',
+                       ], __METHOD__
+               );
+
+               $watchers = [];
+               foreach ( $res as $row ) {
+                       $watchers[] = intval( $row->wl_user );
+               }
+
+               if ( $watchers ) {
+                       // Update wl_notificationtimestamp for all watching users except the editor
+                       $fname = __METHOD__;
+                       $dbw->onTransactionIdle(
+                               function () use ( $dbw, $timestamp, $watchers, $target, $fname ) {
+                                       $dbw->update( 'watchlist',
+                                               [ /* SET */
+                                                       'wl_notificationtimestamp' => $dbw->timestamp( $timestamp )
+                                               ], [ /* WHERE */
+                                                       'wl_user' => $watchers,
+                                                       'wl_namespace' => $target->getNamespace(),
+                                                       'wl_title' => $target->getDBkey(),
+                                               ], $fname
+                                       );
+                                       $this->uncacheLinkTarget( $target );
+                               }
+                       );
+               }
+
+               $this->reuseConnection( $dbw );
+
+               return $watchers;
+       }
+
+       /**
+        * Reset the notification timestamp of this entry
+        *
+        * @param User $user
+        * @param Title $title
+        * @param string $force Whether to force the write query to be executed even if the
+        *    page is not watched or the notification timestamp is already NULL.
+        *    'force' in order to force
+        * @param int $oldid The revision id being viewed. If not given or 0, latest revision is assumed.
+        *
+        * @return bool success
+        */
+       public function resetNotificationTimestamp( User $user, Title $title, $force = '', $oldid = 0 ) {
+               // Only loggedin user can have a watchlist
+               if ( $this->loadBalancer->getReadOnlyReason() !== false || $user->isAnon() ) {
+                       return false;
+               }
+
+               $item = null;
+               if ( $force != 'force' ) {
+                       $item = $this->loadWatchedItem( $user, $title );
+                       if ( !$item || $item->getNotificationTimestamp() === null ) {
+                               return false;
+                       }
+               }
+
+               // If the page is watched by the user (or may be watched), update the timestamp
+               $job = new ActivityUpdateJob(
+                       $title,
+                       [
+                               'type'      => 'updateWatchlistNotification',
+                               'userid'    => $user->getId(),
+                               'notifTime' => $this->getNotificationTimestamp( $user, $title, $item, $force, $oldid ),
+                               'curTime'   => time()
+                       ]
+               );
+
+               // Try to run this post-send
+               // Calls DeferredUpdates::addCallableUpdate in normal operation
+               call_user_func(
+                       $this->deferredUpdatesAddCallableUpdateCallback,
+                       function() use ( $job ) {
+                               $job->run();
+                       }
+               );
+
+               $this->uncache( $user, $title );
+
+               return true;
+       }
+
+       private function getNotificationTimestamp( User $user, Title $title, $item, $force, $oldid ) {
+               if ( !$oldid ) {
+                       // No oldid given, assuming latest revision; clear the timestamp.
+                       return null;
+               }
+
+               if ( !$title->getNextRevisionID( $oldid ) ) {
+                       // Oldid given and is the latest revision for this title; clear the timestamp.
+                       return null;
+               }
+
+               if ( $item === null ) {
+                       $item = $this->loadWatchedItem( $user, $title );
+               }
+
+               if ( !$item ) {
+                       // This can only happen if $force is enabled.
+                       return null;
+               }
+
+               // Oldid given and isn't the latest; update the timestamp.
+               // This will result in no further notification emails being sent!
+               // Calls Revision::getTimestampFromId in normal operation
+               $notificationTimestamp = call_user_func(
+                       $this->revisionGetTimestampFromIdCallback,
+                       $title,
+                       $oldid
+               );
+
+               // We need to go one second to the future because of various strict comparisons
+               // throughout the codebase
+               $ts = new MWTimestamp( $notificationTimestamp );
+               $ts->timestamp->add( new DateInterval( 'PT1S' ) );
+               $notificationTimestamp = $ts->getTimestamp( TS_MW );
+
+               if ( $notificationTimestamp < $item->getNotificationTimestamp() ) {
+                       if ( $force != 'force' ) {
+                               return false;
+                       } else {
+                               // This is a little silly…
+                               return $item->getNotificationTimestamp();
+                       }
+               }
+
+               return $notificationTimestamp;
+       }
+
+       /**
+        * @param User $user
+        * @param int $unreadLimit
+        *
+        * @return int|bool The number of unread notifications
+        *                  true if greater than or equal to $unreadLimit
+        */
+       public function countUnreadNotifications( User $user, $unreadLimit = null ) {
+               $queryOptions = [];
+               if ( $unreadLimit !== null ) {
+                       $unreadLimit = (int)$unreadLimit;
+                       $queryOptions['LIMIT'] = $unreadLimit;
+               }
+
+               $dbr = $this->getConnection( DB_SLAVE );
+               $rowCount = $dbr->selectRowCount(
+                       'watchlist',
+                       '1',
+                       [
+                               'wl_user' => $user->getId(),
+                               'wl_notificationtimestamp IS NOT NULL',
+                       ],
+                       __METHOD__,
+                       $queryOptions
+               );
+               $this->reuseConnection( $dbr );
+
+               if ( !isset( $unreadLimit ) ) {
+                       return $rowCount;
+               }
+
+               if ( $rowCount >= $unreadLimit ) {
+                       return true;
+               }
+
+               return $rowCount;
+       }
+
+       /**
+        * Check if the given title already is watched by the user, and if so
+        * add a watch for the new title.
+        *
+        * To be used for page renames and such.
+        *
+        * @param LinkTarget $oldTarget
+        * @param LinkTarget $newTarget
+        */
+       public function duplicateAllAssociatedEntries( LinkTarget $oldTarget, LinkTarget $newTarget ) {
+               if ( !$oldTarget instanceof Title ) {
+                       $oldTarget = Title::newFromLinkTarget( $oldTarget );
+               }
+               if ( !$newTarget instanceof Title ) {
+                       $newTarget = Title::newFromLinkTarget( $newTarget );
+               }
+
+               $this->duplicateEntry( $oldTarget->getSubjectPage(), $newTarget->getSubjectPage() );
+               $this->duplicateEntry( $oldTarget->getTalkPage(), $newTarget->getTalkPage() );
+       }
+
+       /**
+        * Check if the given title already is watched by the user, and if so
+        * add a watch for the new title.
+        *
+        * To be used for page renames and such.
+        * This must be called separately for Subject and Talk pages
+        *
+        * @param LinkTarget $oldTarget
+        * @param LinkTarget $newTarget
+        */
+       public function duplicateEntry( LinkTarget $oldTarget, LinkTarget $newTarget ) {
+               $dbw = $this->getConnection( DB_MASTER );
+
+               $result = $dbw->select(
+                       'watchlist',
+                       [ 'wl_user', 'wl_notificationtimestamp' ],
+                       [
+                               'wl_namespace' => $oldTarget->getNamespace(),
+                               'wl_title' => $oldTarget->getDBkey(),
+                       ],
+                       __METHOD__,
+                       [ 'FOR UPDATE' ]
+               );
+
+               $newNamespace = $newTarget->getNamespace();
+               $newDBkey = $newTarget->getDBkey();
+
+               # Construct array to replace into the watchlist
+               $values = [];
+               foreach ( $result as $row ) {
+                       $values[] = [
+                               'wl_user' => $row->wl_user,
+                               'wl_namespace' => $newNamespace,
+                               'wl_title' => $newDBkey,
+                               'wl_notificationtimestamp' => $row->wl_notificationtimestamp,
+                       ];
+               }
+
+               if ( !empty( $values ) ) {
+                       # Perform replace
+                       # Note that multi-row replace is very efficient for MySQL but may be inefficient for
+                       # some other DBMSes, mostly due to poor simulation by us
+                       $dbw->replace(
+                               'watchlist',
+                               [ [ 'wl_user', 'wl_namespace', 'wl_title' ] ],
+                               $values,
+                               __METHOD__
+                       );
+               }
+
+               $this->reuseConnection( $dbw );
+       }
+
+}
index 714ab97..812a320 100644 (file)
@@ -676,6 +676,16 @@ class WebRequest {
                $this->sessionId = $sessionId;
        }
 
+       /**
+        * Get the session id for this request, if any
+        * @since 1.27
+        * @private For use by MediaWiki\\Session classes only
+        * @return MediaWiki\\Session\\SessionId|null
+        */
+       public function getSessionId() {
+               return $this->sessionId;
+       }
+
        /**
         * Returns true if the request has a persistent session.
         * This does not necessarily mean that the user is logged in!
@@ -709,13 +719,13 @@ class WebRequest {
        }
 
        /**
-        * Return the path and query string portion of the request URI.
+        * Return the path and query string portion of the main request URI.
         * This will be suitable for use as a relative link in HTML output.
         *
         * @throws MWException
         * @return string
         */
-       public function getRequestURL() {
+       public static function getGlobalRequestURL() {
                if ( isset( $_SERVER['REQUEST_URI'] ) && strlen( $_SERVER['REQUEST_URI'] ) ) {
                        $base = $_SERVER['REQUEST_URI'];
                } elseif ( isset( $_SERVER['HTTP_X_ORIGINAL_URL'] )
@@ -752,6 +762,17 @@ class WebRequest {
                }
        }
 
+       /**
+        * Return the path and query string portion of the request URI.
+        * This will be suitable for use as a relative link in HTML output.
+        *
+        * @throws MWException
+        * @return string
+        */
+       public function getRequestURL() {
+               return self::getGlobalRequestURL();
+       }
+
        /**
         * Return the request URI with the canonical service and hostname, path,
         * and query string. This will be suitable for use as an absolute link
index 0881a16..c741907 100644 (file)
@@ -126,7 +126,7 @@ class WebRequestUpload {
                        return true;
                }
 
-               $contentLength = $this->request->getHeader( 'CONTENT-LENGTH' );
+               $contentLength = $this->request->getHeader( 'Content-Length' );
                $maxPostSize = wfShorthandToInteger(
                        ini_get( 'post_max_size' ) ?: ini_get( 'hhvm.server.max_post_size' ),
                        0
index c7d0a5b..458c207 100644 (file)
@@ -179,6 +179,16 @@ class WebResponse {
        public function clearCookie( $name, $options = [] ) {
                $this->setCookie( $name, '', time() - 31536000 /* 1 year */, $options );
        }
+
+       /**
+        * Checks whether this request is performing cookie operations
+        *
+        * @return bool
+        * @since 1.27
+        */
+       public function hasCookies() {
+               return (bool)self::$setCookies;
+       }
 }
 
 /**
index dca0f32..4534414 100644 (file)
@@ -221,10 +221,10 @@ class WikiReference {
         * @return string relative URL, without the server part.
         */
        private function getLocalUrl( $page, $fragmentId = null ) {
-               $page = wfUrlEncode( str_replace( ' ', '_', $page ) );
+               $page = wfUrlencode( str_replace( ' ', '_', $page ) );
 
                if ( is_string( $fragmentId ) && $fragmentId !== '' ) {
-                       $page .= '#' . wfUrlEncode( $fragmentId );
+                       $page .= '#' . wfUrlencode( $fragmentId );
                }
 
                return str_replace( '$1', $page, $this->mPath );
index ead8efa..839d7b2 100644 (file)
@@ -96,6 +96,9 @@ abstract class Action {
                $classOrCallable = self::getClass( $action, $page->getActionOverrides() );
 
                if ( is_string( $classOrCallable ) ) {
+                       if ( !class_exists( $classOrCallable ) ) {
+                               return false;
+                       }
                        $obj = new $classOrCallable( $page, $context );
                        return $obj;
                }
index 073b3ca..5ec10e6 100644 (file)
@@ -517,6 +517,11 @@ class HistoryPager extends ReverseChronologicalPager {
                        $this->buttons .= Xml::tags( 'div', [ 'class' =>
                                'mw-history-revisionactions' ], $actionButtons );
                }
+
+               if ( $user->isAllowed( 'deleterevision' ) || $this->showTagEditUI ) {
+                       $this->buttons .= ( new ListToggle( $this->getOutput() ) )->getHTML();
+               }
+
                $this->buttons .= '</div>';
 
                $s .= $this->buttons;
@@ -677,7 +682,7 @@ class HistoryPager extends ReverseChronologicalPager {
                $s .= $dirmark;
 
                if ( $rev->isMinor() ) {
-                       $s .= ' ' . ChangesList::flag( 'minor' );
+                       $s .= ' ' . ChangesList::flag( 'minor', $this->getContext() );
                }
 
                # Sometimes rev_len isn't populated
index 87d269a..f7c30b7 100644 (file)
@@ -677,39 +677,17 @@ class InfoAction extends FormlessAction {
 
                                $setOpts += Database::getCacheSetOptions( $dbr, $dbrWatchlist );
 
-                               $result = [];
+                               $watchedItemStore = WatchedItemStore::getDefaultInstance();
 
-                               // Number of page watchers
-                               $watchers = (int)$dbrWatchlist->selectField(
-                                       'watchlist',
-                                       'COUNT(*)',
-                                       [
-                                               'wl_namespace' => $title->getNamespace(),
-                                               'wl_title' => $title->getDBkey(),
-                                       ],
-                                       $fname
-                               );
-                               $result['watchers'] = $watchers;
+                               $result = [];
+                               $result['watchers'] = $watchedItemStore->countWatchers( $title );
 
                                if ( $config->get( 'ShowUpdatedMarker' ) ) {
-                                       // Threshold: last visited about 26 weeks before latest edit
                                        $updated = wfTimestamp( TS_UNIX, $page->getTimestamp() );
-                                       $age = $config->get( 'WatchersMaxAge' );
-                                       $threshold = $dbrWatchlist->timestamp( $updated - $age );
-                                       // Number of page watchers who also visited a "recent" edit
-                                       $visitingWatchers = (int)$dbrWatchlist->selectField(
-                                               'watchlist',
-                                               'COUNT(*)',
-                                               [
-                                                       'wl_namespace' => $title->getNamespace(),
-                                                       'wl_title' => $title->getDBkey(),
-                                                       'wl_notificationtimestamp >= ' .
-                                                               $dbrWatchlist->addQuotes( $threshold ) .
-                                                               ' OR wl_notificationtimestamp IS NULL'
-                                               ],
-                                               $fname
+                                       $result['visitingWatchers'] = $watchedItemStore->countVisitingWatchers(
+                                               $title,
+                                               $updated - $config->get( 'WatchersMaxAge' )
                                        );
-                                       $result['visitingWatchers'] = $visitingWatchers;
                                }
 
                                // Total number of edits
@@ -842,7 +820,7 @@ class InfoAction extends FormlessAction {
                                : $user->getUserPage();
 
                        $hiddenPrefs = $this->context->getConfig()->get( 'HiddenPrefs' );
-                       if ( $user->getID() == 0 ) {
+                       if ( $user->getId() == 0 ) {
                                $anon_ips[] = Linker::link( $page, htmlspecialchars( $user->getName() ) );
                        } elseif ( !in_array( 'realname', $hiddenPrefs ) && $user->getRealName() ) {
                                $real_names[] = Linker::link( $page, htmlspecialchars( $user->getRealName() ) );
index db8c82d..d002da8 100644 (file)
@@ -103,7 +103,7 @@ class RollbackAction extends FormlessAction {
                        ->parseAsBlock() );
 
                if ( $user->getBoolOption( 'watchrollback' ) ) {
-                       $user->addWatch( $this->page->getTitle(), WatchedItem::IGNORE_USER_RIGHTS );
+                       $user->addWatch( $this->page->getTitle(), User::IGNORE_USER_RIGHTS );
                }
 
                $this->getOutput()->returnToMain( false, $this->getTitle() );
index 8f13456..890740f 100644 (file)
@@ -82,12 +82,12 @@ class WatchAction extends FormAction {
         */
        public static function doWatchOrUnwatch( $watch, Title $title, User $user ) {
                if ( $user->isLoggedIn() &&
-                       $user->isWatched( $title, WatchedItem::IGNORE_USER_RIGHTS ) != $watch
+                       $user->isWatched( $title, User::IGNORE_USER_RIGHTS ) != $watch
                ) {
                        // If the user doesn't have 'editmywatchlist', we still want to
                        // allow them to add but not remove items via edits and such.
                        if ( $watch ) {
-                               return self::doWatch( $title, $user, WatchedItem::IGNORE_USER_RIGHTS );
+                               return self::doWatch( $title, $user, User::IGNORE_USER_RIGHTS );
                        } else {
                                return self::doUnwatch( $title, $user );
                        }
@@ -101,15 +101,16 @@ class WatchAction extends FormAction {
         * @since 1.22 Returns Status, $checkRights parameter added
         * @param Title $title Page to watch/unwatch
         * @param User $user User who is watching/unwatching
-        * @param int $checkRights Passed through to $user->addWatch()
+        * @param bool $checkRights Passed through to $user->addWatch()
+        *     Pass User::CHECK_USER_RIGHTS or User::IGNORE_USER_RIGHTS.
         * @return Status
         */
-       public static function doWatch( Title $title, User $user,
-               $checkRights = WatchedItem::CHECK_USER_RIGHTS
+       public static function doWatch(
+               Title $title,
+               User $user,
+               $checkRights = User::CHECK_USER_RIGHTS
        ) {
-               if ( $checkRights !== WatchedItem::IGNORE_USER_RIGHTS &&
-                       !$user->isAllowed( 'editmywatchlist' )
-               ) {
+               if ( $checkRights && !$user->isAllowed( 'editmywatchlist' ) ) {
                        return User::newFatalPermissionDeniedStatus( 'editmywatchlist' );
                }
 
index e71cbae..1c20229 100644 (file)
@@ -302,7 +302,7 @@ abstract class ApiBase extends ContextSource {
                                        $qs = $k;
                                        $msg = self::escapeWikiText( $v );
                                        if ( is_array( $msg ) ) {
-                                               $msg = join( " ", $msg );
+                                               $msg = implode( ' ', $msg );
                                        }
                                }
 
@@ -437,7 +437,7 @@ abstract class ApiBase extends ContextSource {
         *    RFC 7232 § 2.2 for semantics.
         *  - etag: Return an entity-tag representing the state of all resources involved
         *    in the request. Quotes must be included. See RFC 7232 § 2.3 for semantics.
-        * @return string|boolean|null As described above, or null if no value is available.
+        * @return string|bool|null As described above, or null if no value is available.
         */
        public function getConditionalRequestData( $condition ) {
                return null;
@@ -547,13 +547,13 @@ abstract class ApiBase extends ContextSource {
                        $parent = $module;
                        $manager = $parent->getModuleManager();
                        if ( $manager === null ) {
-                               $errorPath = join( '+', array_slice( $parts, 0, $i ) );
+                               $errorPath = implode( '+', array_slice( $parts, 0, $i ) );
                                $this->dieUsage( "The module \"$errorPath\" has no submodules", 'badmodule' );
                        }
                        $module = $manager->getModule( $parts[$i] );
 
                        if ( $module === null ) {
-                               $errorPath = $i ? join( '+', array_slice( $parts, 0, $i ) ) : $parent->getModuleName();
+                               $errorPath = $i ? implode( '+', array_slice( $parts, 0, $i ) ) : $parent->getModuleName();
                                $this->dieUsage(
                                        "The module \"$errorPath\" does not have a submodule \"{$parts[$i]}\"",
                                        'badmodule'
@@ -694,8 +694,7 @@ abstract class ApiBase extends ContextSource {
         * @return mixed Parameter value
         */
        protected function getParameter( $paramName, $parseLimit = true ) {
-               $params = $this->getFinalParams();
-               $paramSettings = $params[$paramName];
+               $paramSettings = $this->getFinalParams()[$paramName];
 
                return $this->getParameterFromSettings( $paramName, $paramSettings, $parseLimit );
        }
@@ -712,7 +711,7 @@ abstract class ApiBase extends ContextSource {
                $p = $this->getModulePrefix();
 
                $intersection = array_intersect( array_keys( array_filter( $params,
-                       [ $this, "parameterNotEmpty" ] ) ), $required );
+                       [ $this, 'parameterNotEmpty' ] ) ), $required );
 
                if ( count( $intersection ) > 1 ) {
                        $this->dieUsage(
@@ -738,7 +737,7 @@ abstract class ApiBase extends ContextSource {
                $p = $this->getModulePrefix();
 
                $intersection = array_intersect( array_keys( array_filter( $params,
-                       [ $this, "parameterNotEmpty" ] ) ), $required );
+                       [ $this, 'parameterNotEmpty' ] ) ), $required );
 
                if ( count( $intersection ) > 1 ) {
                        $this->dieUsage(
@@ -761,7 +760,7 @@ abstract class ApiBase extends ContextSource {
                $p = $this->getModulePrefix();
 
                $intersection = array_intersect(
-                       array_keys( array_filter( $params, [ $this, "parameterNotEmpty" ] ) ),
+                       array_keys( array_filter( $params, [ $this, 'parameterNotEmpty' ] ) ),
                        $required
                );
 
@@ -831,7 +830,7 @@ abstract class ApiBase extends ContextSource {
         */
        protected function getWatchlistValue( $watchlist, $titleObj, $userOption = null ) {
 
-               $userWatching = $this->getUser()->isWatched( $titleObj, WatchedItem::IGNORE_USER_RIGHTS );
+               $userWatching = $this->getUser()->isWatched( $titleObj, User::IGNORE_USER_RIGHTS );
 
                switch ( $watchlist ) {
                        case 'watch':
@@ -918,7 +917,7 @@ abstract class ApiBase extends ContextSource {
                                ApiBase::dieDebug(
                                        __METHOD__,
                                        "Boolean param $encParamName's default is set to '$default'. " .
-                                               "Boolean parameters must default to false."
+                                               'Boolean parameters must default to false.'
                                );
                        }
 
@@ -943,8 +942,8 @@ abstract class ApiBase extends ContextSource {
                                if ( $value !== null ) {
                                        $this->dieUsage(
                                                "File upload param $encParamName is not a file upload; " .
-                                                       "be sure to use multipart/form-data for your POST and include " .
-                                                       "a filename in the Content-Disposition header.",
+                                                       'be sure to use multipart/form-data for your POST and include ' .
+                                                       'a filename in the Content-Disposition header.',
                                                "badupload_{$encParamName}"
                                        );
                                }
@@ -1158,7 +1157,7 @@ abstract class ApiBase extends ContextSource {
                        if ( count( $unknown ) ) {
                                if ( $allowMultiple ) {
                                        $s = count( $unknown ) > 1 ? 's' : '';
-                                       $vals = implode( ", ", $unknown );
+                                       $vals = implode( ', ', $unknown );
                                        $this->setWarning( "Unrecognized value$s for parameter '$valueName': $vals" );
                                } else {
                                        $this->dieUsage(
@@ -1572,507 +1571,507 @@ abstract class ApiBase extends ContextSource {
        /**
         * Array that maps message keys to error messages. $1 and friends are replaced.
         */
-       public static $messageMap = array(
+       public static $messageMap = [
                // This one MUST be present, or dieUsageMsg() will recurse infinitely
-               'unknownerror' => array( 'code' => 'unknownerror', 'info' => "Unknown error: \"\$1\"" ),
-               'unknownerror-nocode' => array( 'code' => 'unknownerror', 'info' => 'Unknown error' ),
+               'unknownerror' => [ 'code' => 'unknownerror', 'info' => "Unknown error: \"\$1\"" ],
+               'unknownerror-nocode' => [ 'code' => 'unknownerror', 'info' => 'Unknown error' ],
 
                // Messages from Title::getUserPermissionsErrors()
-               'ns-specialprotected' => array(
+               'ns-specialprotected' => [
                        'code' => 'unsupportednamespace',
                        'info' => "Pages in the Special namespace can't be edited"
-               ),
-               'protectedinterface' => array(
+               ],
+               'protectedinterface' => [
                        'code' => 'protectednamespace-interface',
                        'info' => "You're not allowed to edit interface messages"
-               ),
-               'namespaceprotected' => array(
+               ],
+               'namespaceprotected' => [
                        'code' => 'protectednamespace',
                        'info' => "You're not allowed to edit pages in the \"\$1\" namespace"
-               ),
-               'customcssprotected' => array(
+               ],
+               'customcssprotected' => [
                        'code' => 'customcssprotected',
                        'info' => "You're not allowed to edit custom CSS pages"
-               ),
-               'customjsprotected' => array(
+               ],
+               'customjsprotected' => [
                        'code' => 'customjsprotected',
                        'info' => "You're not allowed to edit custom JavaScript pages"
-               ),
-               'cascadeprotected' => array(
+               ],
+               'cascadeprotected' => [
                        'code' => 'cascadeprotected',
                        'info' => "The page you're trying to edit is protected because it's included in a cascade-protected page"
-               ),
-               'protectedpagetext' => array(
+               ],
+               'protectedpagetext' => [
                        'code' => 'protectedpage',
                        'info' => "The \"\$1\" right is required to edit this page"
-               ),
-               'protect-cantedit' => array(
+               ],
+               'protect-cantedit' => [
                        'code' => 'cantedit',
                        'info' => "You can't protect this page because you can't edit it"
-               ),
-               'deleteprotected' => array(
+               ],
+               'deleteprotected' => [
                        'code' => 'cantedit',
                        'info' => "You can't delete this page because it has been protected"
-               ),
-               'badaccess-group0' => array(
+               ],
+               'badaccess-group0' => [
                        'code' => 'permissiondenied',
-                       'info' => "Permission denied"
-               ), // Generic permission denied message
-               'badaccess-groups' => array(
+                       'info' => 'Permission denied'
+               ], // Generic permission denied message
+               'badaccess-groups' => [
                        'code' => 'permissiondenied',
-                       'info' => "Permission denied"
-               ),
-               'titleprotected' => array(
+                       'info' => 'Permission denied'
+               ],
+               'titleprotected' => [
                        'code' => 'protectedtitle',
-                       'info' => "This title has been protected from creation"
-               ),
-               'nocreate-loggedin' => array(
+                       'info' => 'This title has been protected from creation'
+               ],
+               'nocreate-loggedin' => [
                        'code' => 'cantcreate',
                        'info' => "You don't have permission to create new pages"
-               ),
-               'nocreatetext' => array(
+               ],
+               'nocreatetext' => [
                        'code' => 'cantcreate-anon',
                        'info' => "Anonymous users can't create new pages"
-               ),
-               'movenologintext' => array(
+               ],
+               'movenologintext' => [
                        'code' => 'cantmove-anon',
                        'info' => "Anonymous users can't move pages"
-               ),
-               'movenotallowed' => array(
+               ],
+               'movenotallowed' => [
                        'code' => 'cantmove',
                        'info' => "You don't have permission to move pages"
-               ),
-               'confirmedittext' => array(
+               ],
+               'confirmedittext' => [
                        'code' => 'confirmemail',
-                       'info' => "You must confirm your email address before you can edit"
-               ),
-               'blockedtext' => array(
+                       'info' => 'You must confirm your email address before you can edit'
+               ],
+               'blockedtext' => [
                        'code' => 'blocked',
-                       'info' => "You have been blocked from editing"
-               ),
-               'autoblockedtext' => array(
+                       'info' => 'You have been blocked from editing'
+               ],
+               'autoblockedtext' => [
                        'code' => 'autoblocked',
-                       'info' => "Your IP address has been blocked automatically, because it was used by a blocked user"
-               ),
+                       'info' => 'Your IP address has been blocked automatically, because it was used by a blocked user'
+               ],
 
                // Miscellaneous interface messages
-               'actionthrottledtext' => array(
+               'actionthrottledtext' => [
                        'code' => 'ratelimited',
                        'info' => "You've exceeded your rate limit. Please wait some time and try again"
-               ),
-               'alreadyrolled' => array(
+               ],
+               'alreadyrolled' => [
                        'code' => 'alreadyrolled',
-                       'info' => "The page you tried to rollback was already rolled back"
-               ),
-               'cantrollback' => array(
+                       'info' => 'The page you tried to rollback was already rolled back'
+               ],
+               'cantrollback' => [
                        'code' => 'onlyauthor',
-                       'info' => "The page you tried to rollback only has one author"
-               ),
-               'readonlytext' => array(
+                       'info' => 'The page you tried to rollback only has one author'
+               ],
+               'readonlytext' => [
                        'code' => 'readonly',
-                       'info' => "The wiki is currently in read-only mode"
-               ),
-               'sessionfailure' => array(
+                       'info' => 'The wiki is currently in read-only mode'
+               ],
+               'sessionfailure' => [
                        'code' => 'badtoken',
-                       'info' => "Invalid token" ),
-               'cannotdelete' => array(
+                       'info' => 'Invalid token' ],
+               'cannotdelete' => [
                        'code' => 'cantdelete',
                        'info' => "Couldn't delete \"\$1\". Maybe it was deleted already by someone else"
-               ),
-               'notanarticle' => array(
+               ],
+               'notanarticle' => [
                        'code' => 'missingtitle',
                        'info' => "The page you requested doesn't exist"
-               ),
-               'selfmove' => array( 'code' => 'selfmove', 'info' => "Can't move a page to itself"
-               ),
-               'immobile_namespace' => array(
+               ],
+               'selfmove' => [ 'code' => 'selfmove', 'info' => "Can't move a page to itself"
+               ],
+               'immobile_namespace' => [
                        'code' => 'immobilenamespace',
-                       'info' => "You tried to move pages from or to a namespace that is protected from moving"
-               ),
-               'articleexists' => array(
+                       'info' => 'You tried to move pages from or to a namespace that is protected from moving'
+               ],
+               'articleexists' => [
                        'code' => 'articleexists',
-                       'info' => "The destination article already exists and is not a redirect to the source article"
-               ),
-               'protectedpage' => array(
+                       'info' => 'The destination article already exists and is not a redirect to the source article'
+               ],
+               'protectedpage' => [
                        'code' => 'protectedpage',
                        'info' => "You don't have permission to perform this move"
-               ),
-               'hookaborted' => array(
+               ],
+               'hookaborted' => [
                        'code' => 'hookaborted',
-                       'info' => "The modification you tried to make was aborted by an extension hook"
-               ),
-               'cantmove-titleprotected' => array(
+                       'info' => 'The modification you tried to make was aborted by an extension hook'
+               ],
+               'cantmove-titleprotected' => [
                        'code' => 'protectedtitle',
-                       'info' => "The destination article has been protected from creation"
-               ),
-               'imagenocrossnamespace' => array(
+                       'info' => 'The destination article has been protected from creation'
+               ],
+               'imagenocrossnamespace' => [
                        'code' => 'nonfilenamespace',
                        'info' => "Can't move a file to a non-file namespace"
-               ),
-               'imagetypemismatch' => array(
+               ],
+               'imagetypemismatch' => [
                        'code' => 'filetypemismatch',
                        'info' => "The new file extension doesn't match its type"
-               ),
+               ],
                // 'badarticleerror' => shouldn't happen
                // 'badtitletext' => shouldn't happen
-               'ip_range_invalid' => array( 'code' => 'invalidrange', 'info' => "Invalid IP range" ),
-               'range_block_disabled' => array(
+               'ip_range_invalid' => [ 'code' => 'invalidrange', 'info' => 'Invalid IP range' ],
+               'range_block_disabled' => [
                        'code' => 'rangedisabled',
-                       'info' => "Blocking IP ranges has been disabled"
-               ),
-               'nosuchusershort' => array(
+                       'info' => 'Blocking IP ranges has been disabled'
+               ],
+               'nosuchusershort' => [
                        'code' => 'nosuchuser',
                        'info' => "The user you specified doesn't exist"
-               ),
-               'badipaddress' => array( 'code' => 'invalidip', 'info' => "Invalid IP address specified" ),
-               'ipb_expiry_invalid' => array( 'code' => 'invalidexpiry', 'info' => "Invalid expiry time" ),
-               'ipb_already_blocked' => array(
+               ],
+               'badipaddress' => [ 'code' => 'invalidip', 'info' => 'Invalid IP address specified' ],
+               'ipb_expiry_invalid' => [ 'code' => 'invalidexpiry', 'info' => 'Invalid expiry time' ],
+               'ipb_already_blocked' => [
                        'code' => 'alreadyblocked',
-                       'info' => "The user you tried to block was already blocked"
-               ),
-               'ipb_blocked_as_range' => array(
+                       'info' => 'The user you tried to block was already blocked'
+               ],
+               'ipb_blocked_as_range' => [
                        'code' => 'blockedasrange',
                        'info' => "IP address \"\$1\" was blocked as part of range \"\$2\". You can't unblock the IP individually, but you can unblock the range as a whole."
-               ),
-               'ipb_cant_unblock' => array(
+               ],
+               'ipb_cant_unblock' => [
                        'code' => 'cantunblock',
-                       'info' => "The block you specified was not found. It may have been unblocked already"
-               ),
-               'mailnologin' => array(
+                       'info' => 'The block you specified was not found. It may have been unblocked already'
+               ],
+               'mailnologin' => [
                        'code' => 'cantsend',
-                       'info' => "You are not logged in, you do not have a confirmed email address, or you are not allowed to send email to other users, so you cannot send email"
-               ),
-               'ipbblocked' => array(
+                       'info' => 'You are not logged in, you do not have a confirmed email address, or you are not allowed to send email to other users, so you cannot send email'
+               ],
+               'ipbblocked' => [
                        'code' => 'ipbblocked',
                        'info' => 'You cannot block or unblock users while you are yourself blocked'
-               ),
-               'ipbnounblockself' => array(
+               ],
+               'ipbnounblockself' => [
                        'code' => 'ipbnounblockself',
                        'info' => 'You are not allowed to unblock yourself'
-               ),
-               'usermaildisabled' => array(
+               ],
+               'usermaildisabled' => [
                        'code' => 'usermaildisabled',
-                       'info' => "User email has been disabled"
-               ),
-               'blockedemailuser' => array(
+                       'info' => 'User email has been disabled'
+               ],
+               'blockedemailuser' => [
                        'code' => 'blockedfrommail',
-                       'info' => "You have been blocked from sending email"
-               ),
-               'notarget' => array(
+                       'info' => 'You have been blocked from sending email'
+               ],
+               'notarget' => [
                        'code' => 'notarget',
-                       'info' => "You have not specified a valid target for this action"
-               ),
-               'noemail' => array(
+                       'info' => 'You have not specified a valid target for this action'
+               ],
+               'noemail' => [
                        'code' => 'noemail',
-                       'info' => "The user has not specified a valid email address, or has chosen not to receive email from other users"
-               ),
-               'rcpatroldisabled' => array(
+                       'info' => 'The user has not specified a valid email address, or has chosen not to receive email from other users'
+               ],
+               'rcpatroldisabled' => [
                        'code' => 'patroldisabled',
-                       'info' => "Patrolling is disabled on this wiki"
-               ),
-               'markedaspatrollederror-noautopatrol' => array(
+                       'info' => 'Patrolling is disabled on this wiki'
+               ],
+               'markedaspatrollederror-noautopatrol' => [
                        'code' => 'noautopatrol',
                        'info' => "You don't have permission to patrol your own changes"
-               ),
-               'delete-toobig' => array(
+               ],
+               'delete-toobig' => [
                        'code' => 'bigdelete',
                        'info' => "You can't delete this page because it has more than \$1 revisions"
-               ),
-               'movenotallowedfile' => array(
+               ],
+               'movenotallowedfile' => [
                        'code' => 'cantmovefile',
                        'info' => "You don't have permission to move files"
-               ),
-               'userrights-no-interwiki' => array(
+               ],
+               'userrights-no-interwiki' => [
                        'code' => 'nointerwikiuserrights',
                        'info' => "You don't have permission to change user rights on other wikis"
-               ),
-               'userrights-nodatabase' => array(
+               ],
+               'userrights-nodatabase' => [
                        'code' => 'nosuchdatabase',
                        'info' => "Database \"\$1\" does not exist or is not local"
-               ),
-               'nouserspecified' => array( 'code' => 'invaliduser', 'info' => "Invalid username \"\$1\"" ),
-               'noname' => array( 'code' => 'invaliduser', 'info' => "Invalid username \"\$1\"" ),
-               'summaryrequired' => array( 'code' => 'summaryrequired', 'info' => 'Summary required' ),
-               'import-rootpage-invalid' => array(
+               ],
+               'nouserspecified' => [ 'code' => 'invaliduser', 'info' => "Invalid username \"\$1\"" ],
+               'noname' => [ 'code' => 'invaliduser', 'info' => "Invalid username \"\$1\"" ],
+               'summaryrequired' => [ 'code' => 'summaryrequired', 'info' => 'Summary required' ],
+               'import-rootpage-invalid' => [
                        'code' => 'import-rootpage-invalid',
                        'info' => 'Root page is an invalid title'
-               ),
-               'import-rootpage-nosubpage' => array(
+               ],
+               'import-rootpage-nosubpage' => [
                        'code' => 'import-rootpage-nosubpage',
                        'info' => 'Namespace "$1" of the root page does not allow subpages'
-               ),
+               ],
 
                // API-specific messages
-               'readrequired' => array(
+               'readrequired' => [
                        'code' => 'readapidenied',
-                       'info' => "You need read permission to use this module"
-               ),
-               'writedisabled' => array(
+                       'info' => 'You need read permission to use this module'
+               ],
+               'writedisabled' => [
                        'code' => 'noapiwrite',
                        'info' => "Editing of this wiki through the API is disabled. Make sure the \$wgEnableWriteAPI=true; statement is included in the wiki's LocalSettings.php file"
-               ),
-               'writerequired' => array(
+               ],
+               'writerequired' => [
                        'code' => 'writeapidenied',
                        'info' => "You're not allowed to edit this wiki through the API"
-               ),
-               'missingparam' => array( 'code' => 'no$1', 'info' => "The \$1 parameter must be set" ),
-               'invalidtitle' => array( 'code' => 'invalidtitle', 'info' => "Bad title \"\$1\"" ),
-               'nosuchpageid' => array( 'code' => 'nosuchpageid', 'info' => "There is no page with ID \$1" ),
-               'nosuchrevid' => array( 'code' => 'nosuchrevid', 'info' => "There is no revision with ID \$1" ),
-               'nosuchuser' => array( 'code' => 'nosuchuser', 'info' => "User \"\$1\" doesn't exist" ),
-               'invaliduser' => array( 'code' => 'invaliduser', 'info' => "Invalid username \"\$1\"" ),
-               'invalidexpiry' => array( 'code' => 'invalidexpiry', 'info' => "Invalid expiry time \"\$1\"" ),
-               'pastexpiry' => array( 'code' => 'pastexpiry', 'info' => "Expiry time \"\$1\" is in the past" ),
-               'create-titleexists' => array(
+               ],
+               'missingparam' => [ 'code' => 'no$1', 'info' => "The \$1 parameter must be set" ],
+               'invalidtitle' => [ 'code' => 'invalidtitle', 'info' => "Bad title \"\$1\"" ],
+               'nosuchpageid' => [ 'code' => 'nosuchpageid', 'info' => "There is no page with ID \$1" ],
+               'nosuchrevid' => [ 'code' => 'nosuchrevid', 'info' => "There is no revision with ID \$1" ],
+               'nosuchuser' => [ 'code' => 'nosuchuser', 'info' => "User \"\$1\" doesn't exist" ],
+               'invaliduser' => [ 'code' => 'invaliduser', 'info' => "Invalid username \"\$1\"" ],
+               'invalidexpiry' => [ 'code' => 'invalidexpiry', 'info' => "Invalid expiry time \"\$1\"" ],
+               'pastexpiry' => [ 'code' => 'pastexpiry', 'info' => "Expiry time \"\$1\" is in the past" ],
+               'create-titleexists' => [
                        'code' => 'create-titleexists',
                        'info' => "Existing titles can't be protected with 'create'"
-               ),
-               'missingtitle-createonly' => array(
+               ],
+               'missingtitle-createonly' => [
                        'code' => 'missingtitle-createonly',
                        'info' => "Missing titles can only be protected with 'create'"
-               ),
-               'cantblock' => array( 'code' => 'cantblock',
+               ],
+               'cantblock' => [ 'code' => 'cantblock',
                        'info' => "You don't have permission to block users"
-               ),
-               'canthide' => array(
+               ],
+               'canthide' => [
                        'code' => 'canthide',
                        'info' => "You don't have permission to hide user names from the block log"
-               ),
-               'cantblock-email' => array(
+               ],
+               'cantblock-email' => [
                        'code' => 'cantblock-email',
                        'info' => "You don't have permission to block users from sending email through the wiki"
-               ),
-               'unblock-notarget' => array(
+               ],
+               'unblock-notarget' => [
                        'code' => 'notarget',
-                       'info' => "Either the id or the user parameter must be set"
-               ),
-               'unblock-idanduser' => array(
+                       'info' => 'Either the id or the user parameter must be set'
+               ],
+               'unblock-idanduser' => [
                        'code' => 'idanduser',
                        'info' => "The id and user parameters can't be used together"
-               ),
-               'cantunblock' => array(
+               ],
+               'cantunblock' => [
                        'code' => 'permissiondenied',
                        'info' => "You don't have permission to unblock users"
-               ),
-               'cannotundelete' => array(
+               ],
+               'cannotundelete' => [
                        'code' => 'cantundelete',
                        'info' => "Couldn't undelete: the requested revisions may not exist, or may have been undeleted already"
-               ),
-               'permdenied-undelete' => array(
+               ],
+               'permdenied-undelete' => [
                        'code' => 'permissiondenied',
                        'info' => "You don't have permission to restore deleted revisions"
-               ),
-               'createonly-exists' => array(
+               ],
+               'createonly-exists' => [
                        'code' => 'articleexists',
-                       'info' => "The article you tried to create has been created already"
-               ),
-               'nocreate-missing' => array(
+                       'info' => 'The article you tried to create has been created already'
+               ],
+               'nocreate-missing' => [
                        'code' => 'missingtitle',
                        'info' => "The article you tried to edit doesn't exist"
-               ),
-               'cantchangecontentmodel' => array(
+               ],
+               'cantchangecontentmodel' => [
                        'code' => 'cantchangecontentmodel',
                        'info' => "You don't have permission to change the content model of a page"
-               ),
-               'nosuchrcid' => array(
+               ],
+               'nosuchrcid' => [
                        'code' => 'nosuchrcid',
                        'info' => "There is no change with rcid \"\$1\""
-               ),
-               'nosuchlogid' => array(
+               ],
+               'nosuchlogid' => [
                        'code' => 'nosuchlogid',
                        'info' => "There is no log entry with ID \"\$1\""
-               ),
-               'protect-invalidaction' => array(
+               ],
+               'protect-invalidaction' => [
                        'code' => 'protect-invalidaction',
                        'info' => "Invalid protection type \"\$1\""
-               ),
-               'protect-invalidlevel' => array(
+               ],
+               'protect-invalidlevel' => [
                        'code' => 'protect-invalidlevel',
                        'info' => "Invalid protection level \"\$1\""
-               ),
-               'toofewexpiries' => array(
+               ],
+               'toofewexpiries' => [
                        'code' => 'toofewexpiries',
                        'info' => "\$1 expiry timestamps were provided where \$2 were needed"
-               ),
-               'cantimport' => array(
+               ],
+               'cantimport' => [
                        'code' => 'cantimport',
                        'info' => "You don't have permission to import pages"
-               ),
-               'cantimport-upload' => array(
+               ],
+               'cantimport-upload' => [
                        'code' => 'cantimport-upload',
                        'info' => "You don't have permission to import uploaded pages"
-               ),
-               'importnofile' => array( 'code' => 'nofile', 'info' => "You didn't upload a file" ),
-               'importuploaderrorsize' => array(
+               ],
+               'importnofile' => [ 'code' => 'nofile', 'info' => "You didn't upload a file" ],
+               'importuploaderrorsize' => [
                        'code' => 'filetoobig',
                        'info' => 'The file you uploaded is bigger than the maximum upload size'
-               ),
-               'importuploaderrorpartial' => array(
+               ],
+               'importuploaderrorpartial' => [
                        'code' => 'partialupload',
                        'info' => 'The file was only partially uploaded'
-               ),
-               'importuploaderrortemp' => array(
+               ],
+               'importuploaderrortemp' => [
                        'code' => 'notempdir',
                        'info' => 'The temporary upload directory is missing'
-               ),
-               'importcantopen' => array(
+               ],
+               'importcantopen' => [
                        'code' => 'cantopenfile',
                        'info' => "Couldn't open the uploaded file"
-               ),
-               'import-noarticle' => array(
+               ],
+               'import-noarticle' => [
                        'code' => 'badinterwiki',
                        'info' => 'Invalid interwiki title specified'
-               ),
-               'importbadinterwiki' => array(
+               ],
+               'importbadinterwiki' => [
                        'code' => 'badinterwiki',
                        'info' => 'Invalid interwiki title specified'
-               ),
-               'import-unknownerror' => array(
+               ],
+               'import-unknownerror' => [
                        'code' => 'import-unknownerror',
                        'info' => "Unknown error on import: \"\$1\""
-               ),
-               'cantoverwrite-sharedfile' => array(
+               ],
+               'cantoverwrite-sharedfile' => [
                        'code' => 'cantoverwrite-sharedfile',
                        'info' => 'The target file exists on a shared repository and you do not have permission to override it'
-               ),
-               'sharedfile-exists' => array(
+               ],
+               'sharedfile-exists' => [
                        'code' => 'fileexists-sharedrepo-perm',
                        'info' => 'The target file exists on a shared repository. Use the ignorewarnings parameter to override it.'
-               ),
-               'mustbeposted' => array(
+               ],
+               'mustbeposted' => [
                        'code' => 'mustbeposted',
                        'info' => "The \$1 module requires a POST request"
-               ),
-               'show' => array(
+               ],
+               'show' => [
                        'code' => 'show',
                        'info' => 'Incorrect parameter - mutually exclusive values may not be supplied'
-               ),
-               'specialpage-cantexecute' => array(
+               ],
+               'specialpage-cantexecute' => [
                        'code' => 'specialpage-cantexecute',
                        'info' => "You don't have permission to view the results of this special page"
-               ),
-               'invalidoldimage' => array(
+               ],
+               'invalidoldimage' => [
                        'code' => 'invalidoldimage',
                        'info' => 'The oldimage parameter has invalid format'
-               ),
-               'nodeleteablefile' => array(
+               ],
+               'nodeleteablefile' => [
                        'code' => 'nodeleteablefile',
                        'info' => 'No such old version of the file'
-               ),
-               'fileexists-forbidden' => array(
+               ],
+               'fileexists-forbidden' => [
                        'code' => 'fileexists-forbidden',
                        'info' => 'A file with name "$1" already exists, and cannot be overwritten.'
-               ),
-               'fileexists-shared-forbidden' => array(
+               ],
+               'fileexists-shared-forbidden' => [
                        'code' => 'fileexists-shared-forbidden',
                        'info' => 'A file with name "$1" already exists in the shared file repository, and cannot be overwritten.'
-               ),
-               'filerevert-badversion' => array(
+               ],
+               'filerevert-badversion' => [
                        'code' => 'filerevert-badversion',
                        'info' => 'There is no previous local version of this file with the provided timestamp.'
-               ),
+               ],
 
                // ApiEditPage messages
-               'noimageredirect-anon' => array(
+               'noimageredirect-anon' => [
                        'code' => 'noimageredirect-anon',
                        'info' => "Anonymous users can't create image redirects"
-               ),
-               'noimageredirect-logged' => array(
+               ],
+               'noimageredirect-logged' => [
                        'code' => 'noimageredirect',
                        'info' => "You don't have permission to create image redirects"
-               ),
-               'spamdetected' => array(
+               ],
+               'spamdetected' => [
                        'code' => 'spamdetected',
                        'info' => "Your edit was refused because it contained a spam fragment: \"\$1\""
-               ),
-               'contenttoobig' => array(
+               ],
+               'contenttoobig' => [
                        'code' => 'contenttoobig',
                        'info' => "The content you supplied exceeds the article size limit of \$1 kilobytes"
-               ),
-               'noedit-anon' => array( 'code' => 'noedit-anon', 'info' => "Anonymous users can't edit pages" ),
-               'noedit' => array( 'code' => 'noedit', 'info' => "You don't have permission to edit pages" ),
-               'wasdeleted' => array(
+               ],
+               'noedit-anon' => [ 'code' => 'noedit-anon', 'info' => "Anonymous users can't edit pages" ],
+               'noedit' => [ 'code' => 'noedit', 'info' => "You don't have permission to edit pages" ],
+               'wasdeleted' => [
                        'code' => 'pagedeleted',
-                       'info' => "The page has been deleted since you fetched its timestamp"
-               ),
-               'blankpage' => array(
+                       'info' => 'The page has been deleted since you fetched its timestamp'
+               ],
+               'blankpage' => [
                        'code' => 'emptypage',
-                       'info' => "Creating new, empty pages is not allowed"
-               ),
-               'editconflict' => array( 'code' => 'editconflict', 'info' => "Edit conflict detected" ),
-               'hashcheckfailed' => array( 'code' => 'badmd5', 'info' => "The supplied MD5 hash was incorrect" ),
-               'missingtext' => array(
+                       'info' => 'Creating new, empty pages is not allowed'
+               ],
+               'editconflict' => [ 'code' => 'editconflict', 'info' => 'Edit conflict detected' ],
+               'hashcheckfailed' => [ 'code' => 'badmd5', 'info' => 'The supplied MD5 hash was incorrect' ],
+               'missingtext' => [
                        'code' => 'notext',
-                       'info' => "One of the text, appendtext, prependtext and undo parameters must be set"
-               ),
-               'emptynewsection' => array(
+                       'info' => 'One of the text, appendtext, prependtext and undo parameters must be set'
+               ],
+               'emptynewsection' => [
                        'code' => 'emptynewsection',
                        'info' => 'Creating empty new sections is not possible.'
-               ),
-               'revwrongpage' => array(
+               ],
+               'revwrongpage' => [
                        'code' => 'revwrongpage',
                        'info' => "r\$1 is not a revision of \"\$2\""
-               ),
-               'undo-failure' => array(
+               ],
+               'undo-failure' => [
                        'code' => 'undofailure',
                        'info' => 'Undo failed due to conflicting intermediate edits'
-               ),
-               'content-not-allowed-here' => array(
+               ],
+               'content-not-allowed-here' => [
                        'code' => 'contentnotallowedhere',
                        'info' => 'Content model "$1" is not allowed at title "$2"'
-               ),
+               ],
 
-               // Messages from WikiPage::doEit()
-               'edit-hook-aborted' => array(
+               // Messages from WikiPage::doEit(]
+               'edit-hook-aborted' => [
                        'code' => 'edit-hook-aborted',
-                       'info' => "Your edit was aborted by an ArticleSave hook"
-               ),
-               'edit-gone-missing' => array(
+                       'info' => 'Your edit was aborted by an ArticleSave hook'
+               ],
+               'edit-gone-missing' => [
                        'code' => 'edit-gone-missing',
                        'info' => "The page you tried to edit doesn't seem to exist anymore"
-               ),
-               'edit-conflict' => array( 'code' => 'editconflict', 'info' => "Edit conflict detected" ),
-               'edit-already-exists' => array(
+               ],
+               'edit-conflict' => [ 'code' => 'editconflict', 'info' => 'Edit conflict detected' ],
+               'edit-already-exists' => [
                        'code' => 'edit-already-exists',
                        'info' => 'It seems the page you tried to create already exist'
-               ),
+               ],
 
                // uploadMsgs
-               'invalid-file-key' => array( 'code' => 'invalid-file-key', 'info' => 'Not a valid file key' ),
-               'nouploadmodule' => array( 'code' => 'nouploadmodule', 'info' => 'No upload module set' ),
-               'uploaddisabled' => array(
+               'invalid-file-key' => [ 'code' => 'invalid-file-key', 'info' => 'Not a valid file key' ],
+               'nouploadmodule' => [ 'code' => 'nouploadmodule', 'info' => 'No upload module set' ],
+               'uploaddisabled' => [
                        'code' => 'uploaddisabled',
                        'info' => 'Uploads are not enabled. Make sure $wgEnableUploads is set to true in LocalSettings.php and the PHP ini setting file_uploads is true'
-               ),
-               'copyuploaddisabled' => array(
+               ],
+               'copyuploaddisabled' => [
                        'code' => 'copyuploaddisabled',
                        'info' => 'Uploads by URL is not enabled. Make sure $wgAllowCopyUploads is set to true in LocalSettings.php.'
-               ),
-               'copyuploadbaddomain' => array(
+               ],
+               'copyuploadbaddomain' => [
                        'code' => 'copyuploadbaddomain',
                        'info' => 'Uploads by URL are not allowed from this domain.'
-               ),
-               'copyuploadbadurl' => array(
+               ],
+               'copyuploadbadurl' => [
                        'code' => 'copyuploadbadurl',
                        'info' => 'Upload not allowed from this URL.'
-               ),
+               ],
 
-               'filename-tooshort' => array(
+               'filename-tooshort' => [
                        'code' => 'filename-tooshort',
                        'info' => 'The filename is too short'
-               ),
-               'filename-toolong' => array( 'code' => 'filename-toolong', 'info' => 'The filename is too long' ),
-               'illegal-filename' => array(
+               ],
+               'filename-toolong' => [ 'code' => 'filename-toolong', 'info' => 'The filename is too long' ],
+               'illegal-filename' => [
                        'code' => 'illegal-filename',
                        'info' => 'The filename is not allowed'
-               ),
-               'filetype-missing' => array(
+               ],
+               'filetype-missing' => [
                        'code' => 'filetype-missing',
                        'info' => 'The file is missing an extension'
-               ),
+               ],
 
-               'mustbeloggedin' => array( 'code' => 'mustbeloggedin', 'info' => 'You must be logged in to $1.' )
-       );
+               'mustbeloggedin' => [ 'code' => 'mustbeloggedin', 'info' => 'You must be logged in to $1.' ]
+       ];
        // @codingStandardsIgnoreEnd
 
        /**
@@ -2224,7 +2223,7 @@ abstract class ApiBase extends ContextSource {
                Hooks::run( 'APIGetDescription', [ &$this, &$desc ] );
                $desc = self::escapeWikiText( $desc );
                if ( is_array( $desc ) ) {
-                       $desc = join( "\n", $desc );
+                       $desc = implode( "\n", $desc );
                } else {
                        $desc = (string)$desc;
                }
@@ -2310,7 +2309,7 @@ abstract class ApiBase extends ContextSource {
                                        }
                                        return $line;
                                }, $d );
-                               $d = join( ' ', $d );
+                               $d = implode( ' ', $d );
                        }
 
                        if ( isset( $settings[ApiBase::PARAM_HELP_MSG] ) ) {
@@ -2324,18 +2323,18 @@ abstract class ApiBase extends ContextSource {
                        $msg = ApiBase::makeMessage( $msg, $this->getContext(),
                                [ $prefix, $param, $name, $path ] );
                        if ( !$msg ) {
-                               $this->dieDebug( __METHOD__,
+                               self::dieDebug( __METHOD__,
                                        'Value in ApiBase::PARAM_HELP_MSG is not valid' );
                        }
                        $msgs[$param] = [ $msg ];
 
                        if ( isset( $settings[ApiBase::PARAM_HELP_MSG_PER_VALUE] ) ) {
                                if ( !is_array( $settings[ApiBase::PARAM_HELP_MSG_PER_VALUE] ) ) {
-                                       $this->dieDebug( __METHOD__,
+                                       self::dieDebug( __METHOD__,
                                                'ApiBase::PARAM_HELP_MSG_PER_VALUE is not valid' );
                                }
                                if ( !is_array( $settings[ApiBase::PARAM_TYPE] ) ) {
-                                       $this->dieDebug( __METHOD__,
+                                       self::dieDebug( __METHOD__,
                                                'ApiBase::PARAM_HELP_MSG_PER_VALUE may only be used when ' .
                                                'ApiBase::PARAM_TYPE is an array' );
                                }
@@ -2357,7 +2356,7 @@ abstract class ApiBase extends ContextSource {
                                                );
                                                $msgs[$param][] = $m->setContext( $this->getContext() );
                                        } else {
-                                               $this->dieDebug( __METHOD__,
+                                               self::dieDebug( __METHOD__,
                                                        "Value in ApiBase::PARAM_HELP_MSG_PER_VALUE for $value is not valid" );
                                        }
                                }
@@ -2365,7 +2364,7 @@ abstract class ApiBase extends ContextSource {
 
                        if ( isset( $settings[ApiBase::PARAM_HELP_MSG_APPEND] ) ) {
                                if ( !is_array( $settings[ApiBase::PARAM_HELP_MSG_APPEND] ) ) {
-                                       $this->dieDebug( __METHOD__,
+                                       self::dieDebug( __METHOD__,
                                                'Value for ApiBase::PARAM_HELP_MSG_APPEND is not an array' );
                                }
                                foreach ( $settings[ApiBase::PARAM_HELP_MSG_APPEND] as $m ) {
@@ -2374,7 +2373,7 @@ abstract class ApiBase extends ContextSource {
                                        if ( $m ) {
                                                $msgs[$param][] = $m;
                                        } else {
-                                               $this->dieDebug( __METHOD__,
+                                               self::dieDebug( __METHOD__,
                                                        'Value in ApiBase::PARAM_HELP_MSG_APPEND is not valid' );
                                        }
                                }
@@ -2525,123 +2524,6 @@ abstract class ApiBase extends ContextSource {
         * @{
         */
 
-       /// @deprecated since 1.24
-       const PROP_ROOT = 'ROOT';
-       /// @deprecated since 1.24
-       const PROP_LIST = 'LIST';
-       /// @deprecated since 1.24
-       const PROP_TYPE = 0;
-       /// @deprecated since 1.24
-       const PROP_NULLABLE = 1;
-
-       /**
-        * Formerly used to fetch a list of possible properites in the result,
-        * somehow organized with respect to the prop parameter that causes them to
-        * be returned. The specific semantics of the return value was never
-        * specified. Since this was never possible to be accurately updated, it
-        * has been removed.
-        *
-        * @deprecated since 1.24
-        * @return array|bool
-        */
-       protected function getResultProperties() {
-               wfDeprecated( __METHOD__, '1.24' );
-               return false;
-       }
-
-       /**
-        * @see self::getResultProperties()
-        * @deprecated since 1.24
-        * @return array|bool
-        */
-       public function getFinalResultProperties() {
-               wfDeprecated( __METHOD__, '1.24' );
-               return [];
-       }
-
-       /**
-        * @see self::getResultProperties()
-        * @deprecated since 1.24
-        */
-       protected static function addTokenProperties( &$props, $tokenFunctions ) {
-               wfDeprecated( __METHOD__, '1.24' );
-       }
-
-       /**
-        * @see self::getPossibleErrors()
-        * @deprecated since 1.24
-        * @return array
-        */
-       public function getRequireOnlyOneParameterErrorMessages( $params ) {
-               wfDeprecated( __METHOD__, '1.24' );
-               return [];
-       }
-
-       /**
-        * @see self::getPossibleErrors()
-        * @deprecated since 1.24
-        * @return array
-        */
-       public function getRequireMaxOneParameterErrorMessages( $params ) {
-               wfDeprecated( __METHOD__, '1.24' );
-               return [];
-       }
-
-       /**
-        * @see self::getPossibleErrors()
-        * @deprecated since 1.24
-        * @return array
-        */
-       public function getRequireAtLeastOneParameterErrorMessages( $params ) {
-               wfDeprecated( __METHOD__, '1.24' );
-               return [];
-       }
-
-       /**
-        * @see self::getPossibleErrors()
-        * @deprecated since 1.24
-        * @return array
-        */
-       public function getTitleOrPageIdErrorMessage() {
-               wfDeprecated( __METHOD__, '1.24' );
-               return [];
-       }
-
-       /**
-        * This formerly attempted to return a list of all possible errors returned
-        * by the module. However, this was impossible to maintain in many cases
-        * since errors could come from other areas of MediaWiki and in some cases
-        * from arbitrary extension hooks. Since a partial list claiming to be
-        * comprehensive is unlikely to be useful, it was removed.
-        *
-        * @deprecated since 1.24
-        * @return array
-        */
-       public function getPossibleErrors() {
-               wfDeprecated( __METHOD__, '1.24' );
-               return [];
-       }
-
-       /**
-        * @see self::getPossibleErrors()
-        * @deprecated since 1.24
-        * @return array
-        */
-       public function getFinalPossibleErrors() {
-               wfDeprecated( __METHOD__, '1.24' );
-               return [];
-       }
-
-       /**
-        * @see self::getPossibleErrors()
-        * @deprecated since 1.24
-        * @return array
-        */
-       public function parseErrors( $errors ) {
-               wfDeprecated( __METHOD__, '1.24' );
-               return [];
-       }
-
        /**
         * Returns the description string for this module
         *
@@ -2741,7 +2623,7 @@ abstract class ApiBase extends ContextSource {
                                                $examples
                                        ];
                                }
-                               $msg .= "Example" . ( count( $examples ) > 1 ? 's' : '' ) . ":\n";
+                               $msg .= 'Example' . ( count( $examples ) > 1 ? 's' : '' ) . ":\n";
                                foreach ( $examples as $k => $v ) {
                                        if ( is_numeric( $k ) ) {
                                                $msg .= "  $v\n";
@@ -2751,7 +2633,7 @@ abstract class ApiBase extends ContextSource {
                                                } else {
                                                        $msgExample = "  $v";
                                                }
-                                               $msgExample .= ":";
+                                               $msgExample .= ':';
                                                $msg .= wordwrap( $msgExample, 100, "\n" ) . "\n    $k\n";
                                        }
                                }
@@ -2767,7 +2649,7 @@ abstract class ApiBase extends ContextSource {
         * @return string
         */
        private function indentExampleText( $item ) {
-               return "  " . $item;
+               return '  ' . $item;
        }
 
        /**
@@ -2850,7 +2732,7 @@ abstract class ApiBase extends ContextSource {
                                if ( isset( $paramSettings[self::PARAM_REQUIRED] )
                                        && $paramSettings[self::PARAM_REQUIRED]
                                ) {
-                                       $desc .= $paramPrefix . "This parameter is required";
+                                       $desc .= $paramPrefix . 'This parameter is required';
                                }
 
                                $type = isset( $paramSettings[self::PARAM_TYPE] )
@@ -2926,7 +2808,7 @@ abstract class ApiBase extends ContextSource {
                                                                }
                                                                break;
                                                        case 'upload':
-                                                               $desc .= $paramPrefix . "Must be posted as a file upload using multipart/form-data";
+                                                               $desc .= $paramPrefix . 'Must be posted as a file upload using multipart/form-data';
                                                                break;
                                                }
                                        }
@@ -2940,8 +2822,8 @@ abstract class ApiBase extends ContextSource {
                                                if ( !$isArray
                                                        || $isArray && count( $type ) > self::LIMIT_SML1
                                                ) {
-                                                       $desc .= $paramPrefix . "Maximum number of values " .
-                                                               self::LIMIT_SML1 . " (" . self::LIMIT_SML2 . " for bots)";
+                                                       $desc .= $paramPrefix . 'Maximum number of values ' .
+                                                               self::LIMIT_SML1 . ' (' . self::LIMIT_SML2 . ' for bots)';
                                                }
                                        }
                                }
index 1bf3897..e4c9d0a 100644 (file)
@@ -163,12 +163,12 @@ class ApiBlock extends ApiBase {
 
        protected function getExamplesMessages() {
                // @codingStandardsIgnoreStart Generic.Files.LineLength
-               return array(
+               return [
                        'action=block&user=192.0.2.5&expiry=3%20days&reason=First%20strike&token=123ABC'
                                => 'apihelp-block-example-ip-simple',
                        'action=block&user=Vandal&expiry=never&reason=Vandalism&nocreate=&autoblock=&noemail=&token=123ABC'
                                => 'apihelp-block-example-user-complex',
-               );
+               ];
                // @codingStandardsIgnoreEnd
        }
 
index 25407bf..8f1bd19 100644 (file)
@@ -137,7 +137,7 @@ class ApiContinuationManager {
                }
                $paramName = $module->encodeParamName( $paramName );
                if ( is_array( $paramValue ) ) {
-                       $paramValue = join( '|', $paramValue );
+                       $paramValue = implode( '|', $paramValue );
                }
                $this->continuationData[$name][$paramName] = $paramValue;
        }
@@ -152,7 +152,7 @@ class ApiContinuationManager {
                $name = $module->getModuleName();
                $paramName = $module->encodeParamName( $paramName );
                if ( is_array( $paramValue ) ) {
-                       $paramValue = join( '|', $paramValue );
+                       $paramValue = implode( '|', $paramValue );
                }
                $this->generatorContinuationData[$name][$paramName] = $paramValue;
        }
@@ -193,7 +193,7 @@ class ApiContinuationManager {
                                $data += $kvp;
                        }
                        $data += $this->generatorParams;
-                       $generatorKeys = join( '|', array_keys( $this->generatorParams ) );
+                       $generatorKeys = implode( '|', array_keys( $this->generatorParams ) );
                } elseif ( $this->generatorContinuationData ) {
                        // All the generator-using modules are complete, but the
                        // generator isn't. Continue the generator and restart the
@@ -204,7 +204,7 @@ class ApiContinuationManager {
                        }
                        $data += $generatorParams;
                        $finishedModules = array_diff( $finishedModules, $this->generatedModules );
-                       $generatorKeys = join( '|', array_keys( $generatorParams ) );
+                       $generatorKeys = implode( '|', array_keys( $generatorParams ) );
                        $batchcomplete = true;
                } else {
                        // Generator and prop modules are all done. Mark it so.
@@ -215,7 +215,7 @@ class ApiContinuationManager {
                // Set 'continue' if any continuation data is set or if the generator
                // still needs to run
                if ( $data || $generatorKeys !== '-' ) {
-                       $data['continue'] = $generatorKeys . '||' . join( '|', $finishedModules );
+                       $data['continue'] = $generatorKeys . '||' . implode( '|', $finishedModules );
                }
 
                return [ $data, $batchcomplete ];
index 03260d7..08aba94 100644 (file)
@@ -335,7 +335,7 @@ class ApiEditPage extends ApiBase {
                        $section = $params['section'];
                        if ( !preg_match( '/^((T-)?\d+|new)$/', $section ) ) {
                                $this->dieUsage( "The section parameter must be a valid section id or 'new'",
-                                       "invalidsection" );
+                                       'invalidsection' );
                        }
                        $content = $pageObj->getContent();
                        if ( $section !== '0' && $section != 'new'
@@ -364,7 +364,7 @@ class ApiEditPage extends ApiBase {
                // Apply change tags
                if ( count( $params['tags'] ) ) {
                        $tagStatus = ChangeTags::canAddTagsAccompanyingChange( $params['tags'], $user );
-                       if ( $tagStatus->isOk() ) {
+                       if ( $tagStatus->isOK() ) {
                                $requestArray['wpChangeTags'] = implode( ',', $params['tags'] );
                        } else {
                                $this->dieStatus( $tagStatus );
index 6611a09..286fe88 100644 (file)
@@ -158,7 +158,7 @@ class ApiExpandTemplates extends ApiBase {
                                        !isset( $prop['jsconfigvars'] ) && !isset( $prop['encodedjsconfigvars'] ) ) {
                                        $this->setWarning( "Property 'modules' was set but not 'jsconfigvars' " .
                                                "or 'encodedjsconfigvars'. Configuration variables are necessary " .
-                                               "for proper module usage." );
+                                               'for proper module usage.' );
                                }
                        }
                }
index dacf828..e28b068 100644 (file)
@@ -173,7 +173,7 @@ class ApiFeedContributions extends ApiBase {
 
                        return '<p>' . htmlspecialchars( $revision->getUserText() ) . $msg .
                                htmlspecialchars( FeedItem::stripComment( $revision->getComment() ) ) .
-                               "</p>\n<hr />\n<div>" . $html . "</div>";
+                               "</p>\n<hr />\n<div>" . $html . '</div>';
                }
 
                return '';
index 7c203d9..c826bba 100644 (file)
@@ -151,7 +151,7 @@ abstract class ApiFormatBase extends ApiBase {
         * Initialize the printer function and prepare the output headers.
         * @param bool $unused Always false since 1.25
         */
-       function initPrinter( $unused = false ) {
+       public function initPrinter( $unused = false ) {
                if ( $this->mDisabled ) {
                        return;
                }
index be9b6d0..a45dbeb 100644 (file)
@@ -266,7 +266,7 @@ class ApiFormatXml extends ApiFormatBase {
                );
        }
 
-       function addXslt() {
+       protected function addXslt() {
                $nt = Title::newFromText( $this->mXslt );
                if ( is_null( $nt ) || !$nt->exists() ) {
                        $this->setWarning( 'Invalid or non-existent stylesheet specified' );
index 349a34d..f2d6329 100644 (file)
@@ -268,7 +268,7 @@ class ApiHelp extends ApiBase {
                                        'level' => $level,
                                        'anchor' => $anchor,
                                        'line' => $header,
-                                       'number' => join( '.', $tocnumber ),
+                                       'number' => implode( '.', $tocnumber ),
                                        'index' => false,
                                ];
                                if ( empty( $options['noheader'] ) ) {
@@ -618,7 +618,7 @@ class ApiHelp extends ApiBase {
                                                                        ->parse();
                                                        }
                                                        if ( $extra ) {
-                                                               $info[] = join( ' ', $extra );
+                                                               $info[] = implode( ' ', $extra );
                                                        }
                                                }
                                        }
@@ -655,7 +655,7 @@ class ApiHelp extends ApiBase {
                                        }
 
                                        if ( $description ) {
-                                               $description = join( '', $description );
+                                               $description = implode( '', $description );
                                                $description = preg_replace( '!\s*</([oud]l)>\s*<\1>\s*!', "\n", $description );
                                                $help['parameters'] .= Html::rawElement( 'dd',
                                                        [ 'class' => 'description' ], $description );
@@ -744,7 +744,7 @@ class ApiHelp extends ApiBase {
 
                        Hooks::run( 'APIHelpModifyOutput', [ $module, &$help, $suboptions, &$haveModules ] );
 
-                       $out .= join( "\n", $help );
+                       $out .= implode( "\n", $help );
                }
 
                return $out;
index b309149..2b99353 100644 (file)
@@ -111,9 +111,9 @@ class ApiImageRotate extends ApiBase {
                        $tmpFile = TempFSFile::factory( 'rotate_', $ext );
                        $dstPath = $tmpFile->getPath();
                        $err = $handler->rotate( $file, [
-                               "srcPath" => $srcPath,
-                               "dstPath" => $dstPath,
-                               "rotation" => $rotation
+                               'srcPath' => $srcPath,
+                               'dstPath' => $dstPath,
+                               'rotation' => $rotation
                        ] );
                        if ( !$err ) {
                                $comment = wfMessage(
index 8574dce..10106ff 100644 (file)
@@ -175,7 +175,7 @@ class ApiImportReporter extends ImportReporter {
         * @param array $pageInfo
         * @return void
         */
-       function reportPage( $title, $origTitle, $revisionCount, $successCount, $pageInfo ) {
+       public function reportPage( $title, $origTitle, $revisionCount, $successCount, $pageInfo ) {
                // Add a result entry
                $r = [];
 
@@ -194,7 +194,7 @@ class ApiImportReporter extends ImportReporter {
                parent::reportPage( $title, $origTitle, $revisionCount, $successCount, $pageInfo );
        }
 
-       function getData() {
+       public function getData() {
                return $this->mResultArr;
        }
 }
index 801475d..02aae06 100644 (file)
@@ -97,7 +97,7 @@ class ApiLogin extends ApiBase {
                        $status = BotPassword::login(
                                $params['name'], $params['password'], $this->getRequest()
                        );
-                       if ( $status->isOk() ) {
+                       if ( $status->isOK() ) {
                                $session = $status->getValue();
                                $authRes = LoginForm::SUCCESS;
                                $loginType = 'BotPassword';
@@ -208,8 +208,7 @@ class ApiLogin extends ApiBase {
 
                        case LoginForm::THROTTLED:
                                $result['result'] = 'Throttled';
-                               $throttle = $this->getConfig()->get( 'PasswordAttemptThrottle' );
-                               $result['wait'] = intval( $throttle['seconds'] );
+                               $result['wait'] = intval( $loginForm->mThrottleWait );
                                break;
 
                        case LoginForm::USER_BLOCKED:
index 2c38208..6a26e2e 100644 (file)
@@ -24,6 +24,8 @@
  * @file
  */
 
+use MediaWiki\Session\BotPasswordSessionProvider;
+
 /**
  * API module to allow users to log out of the wiki. API equivalent of
  * Special:Userlogout.
 class ApiLogout extends ApiBase {
 
        public function execute() {
-               // Make sure it's possible to log out
                $session = MediaWiki\Session\SessionManager::getGlobalSession();
+
+               // Handle bot password logout specially
+               if ( $session->getProvider() instanceof BotPasswordSessionProvider ) {
+                       $session->unpersist();
+                       return;
+               }
+
+               // Make sure it's possible to log out
                if ( !$session->canSetUser() ) {
                        $this->dieUsage(
                                'Cannot log out when using ' .
index ed5c1bc..63b79ac 100644 (file)
@@ -114,16 +114,16 @@ class ApiMain extends ApiBase {
         *                           'params' => array ( $someVarToSubst ) ),
         *                          );
         */
-       private static $mRights = array(
-               'writeapi' => array(
+       private static $mRights = [
+               'writeapi' => [
                        'msg' => 'right-writeapi',
-                       'params' => array()
-               ),
-               'apihighlimits' => array(
+                       'params' => []
+               ],
+               'apihighlimits' => [
                        'msg' => 'api-help-right-apihighlimits',
-                       'params' => array( ApiBase::LIMIT_SML2, ApiBase::LIMIT_BIG2 )
-               )
-       );
+                       'params' => [ ApiBase::LIMIT_SML2, ApiBase::LIMIT_BIG2 ]
+               ]
+       ];
        // @codingStandardsIgnoreEnd
 
        /**
@@ -424,17 +424,17 @@ class ApiMain extends ApiBase {
                ob_start();
 
                $t = microtime( true );
+               $isError = false;
                try {
                        $this->executeAction();
-                       $isError = false;
+                       $this->logRequest( microtime( true ) - $t );
+
                } catch ( Exception $e ) {
                        $this->handleException( $e );
+                       $this->logRequest( microtime( true ) - $t, $e );
                        $isError = true;
                }
 
-               // Log the request whether or not there was an error
-               $this->logRequest( microtime( true ) - $t );
-
                // Commit DBs and send any related cookies and headers
                MediaWiki::preOutputCommit( $this->getContext() );
 
@@ -530,13 +530,13 @@ class ApiMain extends ApiBase {
                try {
                        $main = new self( RequestContext::getMain(), false );
                        $main->handleException( $e );
+                       $main->logRequest( 0, $e );
                } catch ( Exception $e2 ) {
                        // Nope, even that didn't work. Punt.
                        throw $e;
                }
 
-               // Log the request and reset cache headers
-               $main->logRequest( 0 );
+               // Reset cache headers
                $main->sendCacheHeaders( true );
 
                ob_end_flush();
@@ -711,7 +711,7 @@ class ApiMain extends ApiBase {
 
        /**
         * Send caching headers
-        * @param boolean $isError Whether an error response is being output
+        * @param bool $isError Whether an error response is being output
         * @since 1.26 added $isError parameter
         */
        protected function sendCacheHeaders( $isError ) {
@@ -847,21 +847,21 @@ class ApiMain extends ApiBase {
        }
 
        /**
-        * Replace the result data with the information about an exception.
-        * Returns the error code
+        * Create an error message for the given exception.
+        *
+        * If the exception is a UsageException then
+        * UsageException::getMessageArray() will be called to create the message.
+        *
         * @param Exception $e
-        * @return string
+        * @return array ['code' => 'some string', 'info' => 'some other string']
+        * @since 1.27
         */
-       protected function substituteResultWithError( $e ) {
-               $result = $this->getResult();
-               $config = $this->getConfig();
-
+       protected function errorMessageFromException( $e ) {
                if ( $e instanceof UsageException ) {
                        // User entered incorrect parameters - generate error response
                        $errMessage = $e->getMessageArray();
-                       $link = wfExpandUrl( wfScript( 'api' ) );
-                       ApiResult::setContentValue( $errMessage, 'docref', "See $link for API usage" );
                } else {
+                       $config = $this->getConfig();
                        // Something is seriously wrong
                        if ( ( $e instanceof DBQueryError ) && !$config->get( 'ShowSQLErrors' ) ) {
                                $info = 'Database query error';
@@ -873,6 +873,27 @@ class ApiMain extends ApiBase {
                                'code' => 'internal_api_error_' . get_class( $e ),
                                'info' => '[' . MWExceptionHandler::getLogId( $e ) . '] ' . $info,
                        ];
+               }
+               return $errMessage;
+       }
+
+       /**
+        * Replace the result data with the information about an exception.
+        * Returns the error code
+        * @param Exception $e
+        * @return string
+        */
+       protected function substituteResultWithError( $e ) {
+               $result = $this->getResult();
+               $config = $this->getConfig();
+
+               $errMessage = $this->errorMessageFromException( $e );
+               if ( $e instanceof UsageException ) {
+                       // User entered incorrect parameters - generate error response
+                       $link = wfExpandUrl( wfScript( 'api' ) );
+                       ApiResult::setContentValue( $errMessage, 'docref', "See $link for API usage" );
+               } else {
+                       // Something is seriously wrong
                        if ( $config->get( 'ShowExceptionDetails' ) ) {
                                ApiResult::setContentValue(
                                        $errMessage,
@@ -919,7 +940,7 @@ class ApiMain extends ApiBase {
                if ( $this->getConfig()->get( 'ShowHostnames' ) ) {
                        $servedby = $this->getParameter( 'servedby' );
                        if ( $servedby ) {
-                               $result->addValue( null, 'servedby', wfHostName() );
+                               $result->addValue( null, 'servedby', wfHostname() );
                        }
                }
 
@@ -957,7 +978,7 @@ class ApiMain extends ApiBase {
                if ( $module->needsToken() === true ) {
                        throw new MWException(
                                "Module '{$module->getModuleName()}' must be updated for the new token handling. " .
-                               "See documentation for ApiBase::needsToken for details."
+                               'See documentation for ApiBase::needsToken for details.'
                        );
                }
                if ( $module->needsToken() ) {
@@ -1153,7 +1174,7 @@ class ApiMain extends ApiBase {
                                $this->dieUsageMsg( 'writerequired' );
                        } elseif ( $this->getRequest()->getHeader( 'Promise-Non-Write-API-Action' ) ) {
                                $this->dieUsage(
-                                       "Promise-Non-Write-API-Action HTTP header cannot be sent to write API modules",
+                                       'Promise-Non-Write-API-Action HTTP header cannot be sent to write API modules',
                                        'promised-nonwrite-api'
                                );
                        }
@@ -1204,7 +1225,7 @@ class ApiMain extends ApiBase {
                // If a majority of slaves are too lagged then disallow writes
                $slaveCount = wfGetLB()->getServerCount() - 1;
                if ( $numLagged >= ceil( $slaveCount / 2 ) ) {
-                       $laggedServers = join( ', ', $laggedServers );
+                       $laggedServers = implode( ', ', $laggedServers );
                        wfDebugLog(
                                'api-readonly',
                                "Api request failed as read only because the following DBs are lagged: $laggedServers"
@@ -1337,23 +1358,30 @@ class ApiMain extends ApiBase {
        /**
         * Log the preceding request
         * @param float $time Time in seconds
+        * @param Exception $e Exception caught while processing the request
         */
-       protected function logRequest( $time ) {
+       protected function logRequest( $time, $e = null ) {
                $request = $this->getRequest();
                $logCtx = [
-                       'dt' => date( 'c' ),
-                       'client_ip' => $request->getIP(),
-                       'user_agent' => $this->getUserAgent(),
+                       'ts' => time(),
+                       'ip' => $request->getIP(),
+                       'userAgent' => $this->getUserAgent(),
                        'wiki' => wfWikiID(),
-                       'time_backend_ms' => round( $time * 1000 ),
+                       'timeSpentBackend' => (int) round( $time * 1000 ),
+                       'hadError' => $e !== null,
+                       'errorCodes' => [],
                        'params' => [],
                ];
 
+               if ( $e ) {
+                       $logCtx['errorCodes'][] = $this->errorMessageFromException( $e )['code'];
+               }
+
                // Construct space separated message for 'api' log channel
                $msg = "API {$request->getMethod()} " .
                        wfUrlencode( str_replace( ' ', '_', $this->getUser()->getName() ) ) .
-                       " {$logCtx['client_ip']} " .
-                       "T={$logCtx['time_backend_ms']}ms";
+                       " {$logCtx['ip']} " .
+                       "T={$logCtx['timeSpentBackend']}ms";
 
                foreach ( $this->getParamsUsed() as $name ) {
                        $value = $request->getVal( $name );
@@ -1373,8 +1401,8 @@ class ApiMain extends ApiBase {
                }
 
                wfDebugLog( 'api', $msg, 'private' );
-               // ApiRequest channel is for structured data consumers
-               wfDebugLog( 'ApiRequest', '', 'private', $logCtx );
+               // ApiAction channel is for structured data consumers
+               wfDebugLog( 'ApiAction', '', 'private', $logCtx );
        }
 
        /**
@@ -1415,7 +1443,7 @@ class ApiMain extends ApiBase {
                $ret = $this->getRequest()->getVal( $name );
                if ( $ret === null ) {
                        if ( $this->getRequest()->getArray( $name ) !== null ) {
-                               // See bug 10262 for why we don't just join( '|', ... ) the
+                               // See bug 10262 for why we don't just implode( '|', ... ) the
                                // array.
                                $this->setWarning(
                                        "Parameter '$name' uses unsupported PHP array syntax"
@@ -1609,7 +1637,7 @@ class ApiMain extends ApiBase {
                                        'level' => $level,
                                        'anchor' => 'main/datatypes',
                                        'line' => $header,
-                                       'number' => join( '.', $tocnumber ),
+                                       'number' => implode( '.', $tocnumber ),
                                        'index' => false,
                                ];
                        }
@@ -1628,7 +1656,7 @@ class ApiMain extends ApiBase {
                                        'level' => $level,
                                        'anchor' => 'main/credits',
                                        'line' => $header,
-                                       'number' => join( '.', $tocnumber ),
+                                       'number' => implode( '.', $tocnumber ),
                                        'index' => false,
                                ];
                        }
@@ -1743,7 +1771,7 @@ class ApiMain extends ApiBase {
                                ->inLanguage( 'en' )
                                ->text();
                        $groups = User::getGroupsWithPermission( $right );
-                       $msg .= "* " . $right . " *\n  $rightsMsg" .
+                       $msg .= '* ' . $right . " *\n  $rightsMsg" .
                                "\nGranted to:\n  " . str_replace( '*', 'all', implode( ', ', $groups ) ) . "\n\n";
                }
 
index 72847ea..276f1c0 100644 (file)
@@ -33,7 +33,6 @@ class ApiMergeHistory extends ApiBase {
        public function execute() {
                $this->useTransactionalTimeLimit();
 
-               $user = $this->getUser();
                $params = $this->extractRequestParams();
 
                $this->requireOnlyOneParameter( $params, 'from', 'fromid' );
index 15aa983..effa520 100644 (file)
@@ -190,7 +190,7 @@ class ApiOpenSearch extends ApiBase {
                        }
                } else {
                        foreach ( $titles as $title ) {
-                               $resultId = $title->getArticleId();
+                               $resultId = $title->getArticleID();
                                if ( $resultId === 0 ) {
                                        $resultId = $nextSpecialPageId;
                                        $nextSpecialPageId -= 1;
@@ -201,7 +201,7 @@ class ApiOpenSearch extends ApiBase {
                                        'extract' => false,
                                        'extract trimmed' => false,
                                        'image' => false,
-                                       'url' => wfExpandUrl( $title->getFullUrl(), PROTO_CURRENT ),
+                                       'url' => wfExpandUrl( $title->getFullURL(), PROTO_CURRENT ),
                                ];
                        }
                }
@@ -338,8 +338,7 @@ class ApiOpenSearch extends ApiBase {
                        return trim( $matches[1] );
                } else {
                        // Just return the first line
-                       $lines = explode( "\n", $text );
-                       return trim( $lines[0] );
+                       return trim( explode( "\n", $text )[0] );
                }
        }
 
@@ -359,7 +358,7 @@ class ApiOpenSearch extends ApiBase {
 
                $ns = implode( '|', SearchEngine::defaultNamespaces() );
                if ( !$ns ) {
-                       $ns = "0";
+                       $ns = '0';
                }
 
                switch ( $type ) {
index 1dde9c2..e51d46d 100644 (file)
@@ -99,19 +99,19 @@ class ApiOptions extends ApiBase {
                                case 'userjs':
                                        // Allow non-default preferences prefixed with 'userjs-', to be set by user scripts
                                        if ( strlen( $key ) > 255 ) {
-                                               $validation = "key too long (no more than 255 bytes allowed)";
-                                       } elseif ( preg_match( "/[^a-zA-Z0-9_-]/", $key ) !== 0 ) {
-                                               $validation = "invalid key (only a-z, A-Z, 0-9, _, - allowed)";
+                                               $validation = 'key too long (no more than 255 bytes allowed)';
+                                       } elseif ( preg_match( '/[^a-zA-Z0-9_-]/', $key ) !== 0 ) {
+                                               $validation = 'invalid key (only a-z, A-Z, 0-9, _, - allowed)';
                                        } else {
                                                $validation = true;
                                        }
                                        break;
                                case 'special':
-                                       $validation = "cannot be set by this module";
+                                       $validation = 'cannot be set by this module';
                                        break;
                                case 'unused':
                                default:
-                                       $validation = "not a valid preference";
+                                       $validation = 'not a valid preference';
                                        break;
                        }
                        if ( $validation === true ) {
index 1441a45..6bab762 100644 (file)
@@ -595,22 +595,22 @@ class ApiPageSet extends ApiBase {
                'special', 'missingIds', 'missingRevIds', 'missingTitles', 'interwikiTitles' ]
        ) {
                $result = [];
-               if ( in_array( "invalidTitles", $invalidChecks ) ) {
+               if ( in_array( 'invalidTitles', $invalidChecks ) ) {
                        self::addValues( $result, $this->getInvalidTitlesAndReasons(), 'invalid' );
                }
-               if ( in_array( "special", $invalidChecks ) ) {
+               if ( in_array( 'special', $invalidChecks ) ) {
                        self::addValues( $result, $this->getSpecialTitles(), 'special', 'title' );
                }
-               if ( in_array( "missingIds", $invalidChecks ) ) {
+               if ( in_array( 'missingIds', $invalidChecks ) ) {
                        self::addValues( $result, $this->getMissingPageIDs(), 'missing', 'pageid' );
                }
-               if ( in_array( "missingRevIds", $invalidChecks ) ) {
+               if ( in_array( 'missingRevIds', $invalidChecks ) ) {
                        self::addValues( $result, $this->getMissingRevisionIDs(), 'missing', 'revid' );
                }
-               if ( in_array( "missingTitles", $invalidChecks ) ) {
+               if ( in_array( 'missingTitles', $invalidChecks ) ) {
                        self::addValues( $result, $this->getMissingTitles(), 'missing' );
                }
-               if ( in_array( "interwikiTitles", $invalidChecks ) ) {
+               if ( in_array( 'interwikiTitles', $invalidChecks ) ) {
                        self::addValues( $result, $this->getInterwikiTitlesAsResult() );
                }
 
index 6e44f82..c3c9e21 100644 (file)
@@ -137,7 +137,7 @@ class ApiParamInfo extends ApiBase {
                                foreach ( $msgs as $m ) {
                                        $ret[] = $m->setContext( $this->context )->text();
                                }
-                               $res[$key] = join( "\n\n", $ret );
+                               $res[$key] = implode( "\n\n", $ret );
                                if ( $joinLists ) {
                                        $res[$key] = preg_replace( '!^(([*#:;])[^\n]*)\n\n(?=\2)!m', "$1\n", $res[$key] );
                                }
@@ -148,7 +148,7 @@ class ApiParamInfo extends ApiBase {
                                foreach ( $msgs as $m ) {
                                        $ret[] = $m->setContext( $this->context )->parseAsBlock();
                                }
-                               $ret = join( "\n", $ret );
+                               $ret = implode( "\n", $ret );
                                if ( $joinLists ) {
                                        $ret = preg_replace( '!\s*</([oud]l)>\s*<\1>\s*!', "\n", $ret );
                                }
index 872876d..fe418e3 100644 (file)
@@ -72,7 +72,7 @@ class ApiParse extends ApiBase {
                        $this->section = $params['section'];
                        if ( !preg_match( '/^((T-)?\d+|new)$/', $this->section ) ) {
                                $this->dieUsage(
-                                       "The section parameter must be a valid section id or 'new'", "invalidsection"
+                                       'The section parameter must be a valid section id or "new"', 'invalidsection'
                                );
                        }
                } else {
@@ -275,7 +275,7 @@ class ApiParse extends ApiBase {
                $result_array = [];
 
                $result_array['title'] = $titleObj->getPrefixedText();
-               $result_array['pageid'] = $pageid ? $pageid : $pageObj->getId();
+               $result_array['pageid'] = $pageid ?: $pageObj->getId();
 
                if ( !is_null( $oldid ) ) {
                        $result_array['revid'] = intval( $oldid );
@@ -341,8 +341,7 @@ class ApiParse extends ApiBase {
                }
 
                if ( isset( $prop['displaytitle'] ) ) {
-                       $result_array['displaytitle'] = $p_result->getDisplayTitle() ?
-                               $p_result->getDisplayTitle() :
+                       $result_array['displaytitle'] = $p_result->getDisplayTitle() ?:
                                $titleObj->getPrefixedText();
                }
 
@@ -390,9 +389,9 @@ class ApiParse extends ApiBase {
 
                if ( isset( $prop['modules'] ) &&
                        !isset( $prop['jsconfigvars'] ) && !isset( $prop['encodedjsconfigvars'] ) ) {
-                       $this->setWarning( "Property 'modules' was set but not 'jsconfigvars' " .
-                               "or 'encodedjsconfigvars'. Configuration variables are necessary " .
-                               "for proper module usage." );
+                       $this->setWarning( 'Property "modules" was set but not "jsconfigvars" ' .
+                               'or "encodedjsconfigvars". Configuration variables are necessary ' .
+                               'for proper module usage.' );
                }
 
                if ( isset( $prop['indicators'] ) ) {
@@ -428,7 +427,7 @@ class ApiParse extends ApiBase {
 
                if ( isset( $prop['parsetree'] ) || $params['generatexml'] ) {
                        if ( $this->content->getModel() != CONTENT_MODEL_WIKITEXT ) {
-                               $this->dieUsage( "parsetree is only supported for wikitext content", "notwikitext" );
+                               $this->dieUsage( 'parsetree is only supported for wikitext content', 'notwikitext' );
                        }
 
                        $wgParser->startExternalParse( $titleObj, $popts, Parser::OT_PREPROCESS );
@@ -545,10 +544,10 @@ class ApiParse extends ApiBase {
                // Not cached (save or load)
                $section = $content->getSection( $this->section );
                if ( $section === false ) {
-                       $this->dieUsage( "There is no section {$this->section} in " . $what, 'nosuchsection' );
+                       $this->dieUsage( "There is no section {$this->section} in $what", 'nosuchsection' );
                }
                if ( $section === null ) {
-                       $this->dieUsage( "Sections are not supported by " . $what, 'nosuchsection' );
+                       $this->dieUsage( "Sections are not supported by $what", 'nosuchsection' );
                        $section = false;
                }
 
index 1230bab..6252882 100644 (file)
@@ -56,7 +56,18 @@ class ApiPatrol extends ApiBase {
                        }
                }
 
-               $retval = $rc->doMarkPatrolled( $this->getUser() );
+               $user = $this->getUser();
+               $tags = $params['tags'];
+
+               // Check if user can add tags
+               if ( !is_null( $tags ) ) {
+                       $ableToTag = ChangeTags::canAddTagsAccompanyingChange( $tags, $user );
+                       if ( !$ableToTag->isOK() ) {
+                               $this->dieStatus( $ableToTag );
+                       }
+               }
+
+               $retval = $rc->doMarkPatrolled( $user, false, $tags );
 
                if ( $retval ) {
                        $this->dieUsageMsg( reset( $retval ) );
@@ -83,6 +94,10 @@ class ApiPatrol extends ApiBase {
                        'revid' => [
                                ApiBase::PARAM_TYPE => 'integer'
                        ],
+                       'tags' => [
+                               ApiBase::PARAM_TYPE => 'tags',
+                               ApiBase::PARAM_ISMULTI => true,
+                       ],
                ];
        }
 
index f1c0121..d289060 100644 (file)
@@ -42,6 +42,17 @@ class ApiProtect extends ApiBase {
                        $this->dieUsageMsg( reset( $errors ) );
                }
 
+               $user = $this->getUser();
+               $tags = $params['tags'];
+
+               // Check if user can add tags
+               if ( !is_null( $tags ) ) {
+                       $ableToTag = ChangeTags::canAddTagsAccompanyingChange( $tags, $user );
+                       if ( !$ableToTag->isOK() ) {
+                               $this->dieStatus( $ableToTag );
+                       }
+               }
+
                $expiry = (array)$params['expiry'];
                if ( count( $expiry ) != count( $params['protections'] ) ) {
                        if ( count( $expiry ) == 1 ) {
@@ -108,7 +119,8 @@ class ApiProtect extends ApiBase {
                        $expiryarray,
                        $cascade,
                        $params['reason'],
-                       $this->getUser()
+                       $user,
+                       $tags
                );
 
                if ( !$status->isOK() ) {
@@ -153,6 +165,10 @@ class ApiProtect extends ApiBase {
                                ApiBase::PARAM_DFLT => 'infinite',
                        ],
                        'reason' => '',
+                       'tags' => [
+                               ApiBase::PARAM_TYPE => 'tags',
+                               ApiBase::PARAM_ISMULTI => true,
+                       ],
                        'cascade' => false,
                        'watch' => [
                                ApiBase::PARAM_DFLT => false,
index 36b62f5..64bb9ba 100644 (file)
@@ -24,6 +24,7 @@
  *
  * @file
  */
+use MediaWiki\Logger\LoggerFactory;
 
 /**
  * API interface for page purging
@@ -75,6 +76,17 @@ class ApiPurge extends ApiBase {
                                                $enableParserCache
                                        );
 
+                                       # Logging to better see expensive usage patterns
+                                       if ( $forceRecursiveLinkUpdate ) {
+                                               LoggerFactory::getInstance( 'RecursiveLinkPurge' )->info(
+                                                       "Recursive link purge enqueued for {title}",
+                                                       [
+                                                               'user' => $this->getUser()->getName(),
+                                                               'title' => $title->getPrefixedText()
+                                                       ]
+                                               );
+                                       }
+
                                        # Update the links tables
                                        $updates = $content->getSecondaryDataUpdates(
                                                $title, null, $forceRecursiveLinkUpdate, $p_result );
index 58b670a..733ea2c 100644 (file)
@@ -185,33 +185,6 @@ class ApiQuery extends ApiBase {
                return $this->mPageSet;
        }
 
-       /**
-        * Get the generators array mapping module names to class names
-        * @deprecated since 1.21, list of generators is maintained by ApiPageSet
-        * @return array Array(modulename => classname)
-        */
-       public function getGenerators() {
-               wfDeprecated( __METHOD__, '1.21' );
-               $gens = [];
-               foreach ( $this->mModuleMgr->getNamesWithClasses() as $name => $class ) {
-                       if ( is_subclass_of( $class, 'ApiQueryGeneratorBase' ) ) {
-                               $gens[$name] = $class;
-                       }
-               }
-
-               return $gens;
-       }
-
-       /**
-        * Get whether the specified module is a prop, list or a meta query module
-        * @deprecated since 1.21, use getModuleManager()->getModuleGroup()
-        * @param string $moduleName Name of the module to find type for
-        * @return string|null
-        */
-       function getModuleType( $moduleName ) {
-               return $this->getModuleManager()->getModuleGroup( $moduleName );
-       }
-
        /**
         * @return ApiFormatRaw|null
         */
@@ -451,22 +424,6 @@ class ApiQuery extends ApiBase {
                }
        }
 
-       /**
-        * This method is called by the generator base when generator in the smart-continue
-        * mode tries to set 'query-continue' value. ApiQuery stores those values separately
-        * until the post-processing when it is known if the generation should continue or repeat.
-        * @deprecated since 1.24
-        * @param ApiQueryGeneratorBase $module Generator module
-        * @param string $paramName
-        * @param mixed $paramValue
-        * @return bool True if processed, false if this is a legacy continue
-        */
-       public function setGeneratorContinue( $module, $paramName, $paramValue ) {
-               wfDeprecated( __METHOD__, '1.24' );
-               $this->getContinuationManager()->addGeneratorContinueParam( $module, $paramName, $paramValue );
-               return !$this->getParameter( 'rawcontinue' );
-       }
-
        /**
         * @param ApiPageSet $pageSet Pages to be exported
         * @param ApiResult $result Result to output to
@@ -595,6 +552,26 @@ class ApiQuery extends ApiBase {
                return implode( "\n", $moduleDescriptions );
        }
 
+       public function isReadMode() {
+               // We need to make an exception for ApiQueryTokens so login tokens can
+               // be fetched on private wikis. Restrict that exception as much as
+               // possible: no other modules allowed, and no pageset parameters
+               // either. We do allow the 'rawcontinue' and 'indexpageids' parameters
+               // since frameworks might add these unconditionally and they can't
+               // expose anything here.
+               $params = array_filter(
+                       array_diff_key(
+                               $this->extractRequestParams() + $this->getPageSet()->extractRequestParams(),
+                               [ 'rawcontinue' => 1, 'indexpageids' => 1 ]
+                       )
+               );
+               if ( $params === [ 'meta' => [ 'tokens' ] ] ) {
+                       return false;
+               }
+
+               return true;
+       }
+
        protected function getExamplesMessages() {
                return [
                        'action=query&prop=revisions&meta=siteinfo&' .
index 94707da..ac90605 100644 (file)
@@ -117,7 +117,7 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                        if ( $matches ) {
                                $p = $this->getModulePrefix();
                                $this->dieUsage(
-                                       "Cannot use {$p}prop=" . join( '|', array_keys( $matches ) ) . " with {$p}unique",
+                                       "Cannot use {$p}prop=" . implode( '|', array_keys( $matches ) ) . " with {$p}unique",
                                        'params'
                                );
                        }
index 97b122a..fb502e4 100644 (file)
@@ -296,7 +296,7 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                                // Note we must keep the parameters for the first query constant
                                // This may be overridden at a later step
                                $title = $row->{$this->bl_title};
-                               $this->continueStr = join( '|', array_slice( $this->cont, 0, 2 ) ) .
+                               $this->continueStr = implode( '|', array_slice( $this->cont, 0, 2 ) ) .
                                        "|$ns|$title|{$row->from_ns}|{$row->page_id}";
                                break;
                        }
@@ -451,7 +451,7 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                                                [ 'query', $this->getModuleName() ],
                                                $idx, array_diff_key( $arr, [ 'redirlinks' => '' ] ) );
                                        if ( !$fit ) {
-                                               $this->continueStr = join( '|', array_slice( $this->cont, 0, 6 ) ) .
+                                               $this->continueStr = implode( '|', array_slice( $this->cont, 0, 6 ) ) .
                                                        "|$pageID";
                                                break;
                                        }
@@ -474,7 +474,7 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                                                        [ 'query', $this->getModuleName(), $idx, 'redirlinks' ],
                                                        null, $redir );
                                                if ( !$fit ) {
-                                                       $this->continueStr = join( '|', array_slice( $this->cont, 0, 6 ) ) .
+                                                       $this->continueStr = implode( '|', array_slice( $this->cont, 0, 6 ) ) .
                                                                "|$pageID|$key";
                                                        break;
                                                }
index 17b51da..3810e90 100644 (file)
@@ -164,22 +164,14 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
                        $this->dieContinueUsageIf( count( $cont ) != count( $sortby ) );
                        $where = '';
                        $i = count( $sortby ) - 1;
-                       $cont_ns = 0;
-                       $cont_title = '';
                        foreach ( array_reverse( $sortby, true ) as $field => $type ) {
                                $v = $cont[$i];
                                switch ( $type ) {
                                        case 'ns':
-                                               $cont_ns = (int)$v;
-                                               /* fall through */
                                        case 'int':
                                                $v = (int)$v;
                                                $this->dieContinueUsageIf( $v != $cont[$i] );
                                                break;
-
-                                       case 'title':
-                                               $cont_title = $v;
-                                               /* fall through */
                                        default:
                                                $v = $db->addQuotes( $v );
                                                break;
@@ -321,7 +313,7 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
                foreach ( $sortby as $field => $v ) {
                        $cont[] = $row->$field;
                }
-               $this->setContinueEnumParameter( 'continue', join( '|', $cont ) );
+               $this->setContinueEnumParameter( 'continue', implode( '|', $cont ) );
        }
 
        public function getCacheMode( $params ) {
index ef455b4..4865ad5 100644 (file)
@@ -53,7 +53,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
         */
        private function validateHexSortkey( $hexSortkey ) {
                // A hex sortkey has an unbound number of 2 letter pairs
-               return preg_match( '/^(?:[a-fA-F0-9]{2})*$/', $hexSortkey );
+               return preg_match( '/^(?:[a-fA-F0-9]{2})*$/D', $hexSortkey );
        }
 
        /**
@@ -138,8 +138,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
 
                                // Add a WHERE clause for sortkey and from
                                $this->dieContinueUsageIf( !$this->validateHexSortkey( $cont[1] ) );
-                               // pack( "H*", $foo ) is used to convert hex back to binary
-                               $escSortkey = $this->getDB()->addQuotes( pack( 'H*', $cont[1] ) );
+                               $escSortkey = $this->getDB()->addQuotes( hex2bin( $cont[1] ) );
                                $from = intval( $cont[2] );
                                $op = $dir == 'newer' ? '>' : '<';
                                // $contWhere is used further down
@@ -156,7 +155,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                                        if ( !$this->validateHexSortkey( $params['starthexsortkey'] ) ) {
                                                $this->dieUsage( 'The starthexsortkey provided is not valid', 'bad_starthexsortkey' );
                                        }
-                                       $startsortkey = pack( 'H*', $params['starthexsortkey'] );
+                                       $startsortkey = hex2bin( $params['starthexsortkey'] );
                                } else {
                                        $startsortkey = $params['startsortkey'];
                                }
@@ -166,7 +165,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                                        if ( !$this->validateHexSortkey( $params['endhexsortkey'] ) ) {
                                                $this->dieUsage( 'The endhexsortkey provided is not valid', 'bad_endhexsortkey' );
                                        }
-                                       $endsortkey = pack( 'H*', $params['endhexsortkey'] );
+                                       $endsortkey = hex2bin( $params['endhexsortkey'] );
                                } else {
                                        $endsortkey = $params['endsortkey'];
                                }
index 7848bc8..c491236 100644 (file)
@@ -78,7 +78,7 @@ class ApiQueryFileRepoInfo extends ApiQueryBase {
 
                return [
                        'prop' => [
-                               ApiBase::PARAM_DFLT => join( '|', $props ),
+                               ApiBase::PARAM_DFLT => implode( '|', $props ),
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => $props,
                        ],
index 6890046..ab94574 100644 (file)
@@ -308,7 +308,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
 
                foreach ( $paramList as $name => $value ) {
                        if ( !$h->validateParam( $name, $value ) ) {
-                               $this->dieUsage( "Invalid value for {$p}urlparam ($name=$value)", "urlparam" );
+                               $this->dieUsage( "Invalid value for {$p}urlparam ($name=$value)", 'urlparam' );
                        }
                }
 
@@ -357,7 +357,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
         *    'revdelUser': User to use when checking whether to show revision-deleted fields.
         * @return array Result array
         */
-       static function getInfo( $file, $prop, $result, $thumbParams = null, $opts = false ) {
+       public static function getInfo( $file, $prop, $result, $thumbParams = null, $opts = false ) {
                global $wgContLang;
 
                $anyHidden = false;
index ea7818c..ea1b94e 100644 (file)
@@ -448,12 +448,12 @@ class ApiQueryInfo extends ApiQueryBase {
                        ApiResult::setIndexedTagName( $pageInfo['restrictiontypes'], 'rt' );
                }
 
-               if ( $this->fld_watched ) {
-                       $pageInfo['watched'] = isset( $this->watched[$ns][$dbkey] );
+               if ( $this->fld_watched && $this->watched !== null ) {
+                       $pageInfo['watched'] = $this->watched[$ns][$dbkey];
                }
 
                if ( $this->fld_watchers ) {
-                       if ( isset( $this->watchers[$ns][$dbkey] ) ) {
+                       if ( $this->watchers !== null && $this->watchers[$ns][$dbkey] !== 0 ) {
                                $pageInfo['watchers'] = $this->watchers[$ns][$dbkey];
                        } elseif ( $this->showZeroWatchers ) {
                                $pageInfo['watchers'] = 0;
@@ -461,7 +461,7 @@ class ApiQueryInfo extends ApiQueryBase {
                }
 
                if ( $this->fld_visitingwatchers ) {
-                       if ( isset( $this->visitingwatchers[$ns][$dbkey] ) ) {
+                       if ( $this->visitingwatchers !== null && $this->visitingwatchers[$ns][$dbkey] !== 0 ) {
                                $pageInfo['visitingwatchers'] = $this->visitingwatchers[$ns][$dbkey];
                        } elseif ( $this->showZeroWatchers ) {
                                $pageInfo['visitingwatchers'] = 0;
@@ -470,7 +470,7 @@ class ApiQueryInfo extends ApiQueryBase {
 
                if ( $this->fld_notificationtimestamp ) {
                        $pageInfo['notificationtimestamp'] = '';
-                       if ( isset( $this->notificationtimestamps[$ns][$dbkey] ) ) {
+                       if ( $this->notificationtimestamps[$ns][$dbkey] ) {
                                $pageInfo['notificationtimestamp'] =
                                        wfTimestamp( TS_ISO_8601, $this->notificationtimestamps[$ns][$dbkey] );
                        }
@@ -758,30 +758,23 @@ class ApiQueryInfo extends ApiQueryBase {
 
                $this->watched = [];
                $this->notificationtimestamps = [];
-               $db = $this->getDB();
 
-               $lb = new LinkBatch( $this->everything );
+               $store = WatchedItemStore::getDefaultInstance();
+               $timestamps = $store->getNotificationTimestampsBatch( $user, $this->everything );
 
-               $this->resetQueryParams();
-               $this->addTables( [ 'watchlist' ] );
-               $this->addFields( [ 'wl_title', 'wl_namespace' ] );
-               $this->addFieldsIf( 'wl_notificationtimestamp', $this->fld_notificationtimestamp );
-               $this->addWhere( [
-                       $lb->constructSet( 'wl', $db ),
-                       'wl_user' => $user->getId()
-               ] );
-
-               $res = $this->select( __METHOD__ );
-
-               foreach ( $res as $row ) {
-                       if ( $this->fld_watched ) {
-                               $this->watched[$row->wl_namespace][$row->wl_title] = true;
-                       }
-                       if ( $this->fld_notificationtimestamp ) {
-                               $this->notificationtimestamps[$row->wl_namespace][$row->wl_title] =
-                                       $row->wl_notificationtimestamp;
+               if ( $this->fld_watched ) {
+                       foreach ( $timestamps as $namespaceId => $dbKeys ) {
+                               $this->watched[$namespaceId] = array_map(
+                                       function( $x ) {
+                                               return $x !== false;
+                                       },
+                                       $dbKeys
+                               );
                        }
                }
+               if ( $this->fld_notificationtimestamp ) {
+                       $this->notificationtimestamps = $timestamps;
+               }
        }
 
        /**
@@ -799,28 +792,17 @@ class ApiQueryInfo extends ApiQueryBase {
                        return;
                }
 
-               $this->watchers = [];
                $this->showZeroWatchers = $canUnwatchedpages;
-               $db = $this->getDB();
-
-               $lb = new LinkBatch( $this->everything );
 
-               $this->resetQueryParams();
-               $this->addTables( [ 'watchlist' ] );
-               $this->addFields( [ 'wl_title', 'wl_namespace', 'count' => 'COUNT(*)' ] );
-               $this->addWhere( [
-                       $lb->constructSet( 'wl', $db )
-               ] );
-               $this->addOption( 'GROUP BY', [ 'wl_namespace', 'wl_title' ] );
+               $countOptions = [];
                if ( !$canUnwatchedpages ) {
-                       $this->addOption( 'HAVING', "COUNT(*) >= $unwatchedPageThreshold" );
+                       $countOptions['minimumWatchers'] = $unwatchedPageThreshold;
                }
 
-               $res = $this->select( __METHOD__ );
-
-               foreach ( $res as $row ) {
-                       $this->watchers[$row->wl_namespace][$row->wl_title] = (int)$row->count;
-               }
+               $this->watchers = WatchedItemStore::getDefaultInstance()->countWatchersMultiple(
+                       $this->everything,
+                       $countOptions
+               );
        }
 
        /**
@@ -842,14 +824,7 @@ class ApiQueryInfo extends ApiQueryBase {
 
                $this->showZeroWatchers = $canUnwatchedpages;
 
-               // Assemble a WHERE condition to find:
-               // * if the page exists, number of users watching who have
-               //   visited the page recently
-               // * if the page doesn't exist, number of users that have
-               //   the page on their watchlist
-               $whereStrings = [];
-
-               // For pages that exist
+               $titlesWithThresholds = [];
                if ( $this->titles ) {
                        $lb = new LinkBatch( $this->titles );
 
@@ -864,55 +839,38 @@ class ApiQueryInfo extends ApiQueryBase {
                        $this->addOption( 'GROUP BY', [ 'page_namespace', 'page_title' ] );
                        $timestampRes = $this->select( __METHOD__ );
 
-                       // Assemble SQL WHERE condition to find number of page watchers who also
-                       // visited a "recent" edit (last visited about 26 weeks before latest edit)
                        $age = $config->get( 'WatchersMaxAge' );
                        $timestamps = [];
                        foreach ( $timestampRes as $row ) {
                                $revTimestamp = wfTimestamp( TS_UNIX, (int)$row->rev_timestamp );
-                               $threshold = $db->timestamp( $revTimestamp - $age );
-                               $timestamps[$row->page_namespace][$row->page_title] = $threshold;
-                       }
-
-                       foreach ( $timestamps as $ns_key => $namespace ) {
-                               $pageStrings = [];
-                               foreach ( $namespace as $pg_key => $threshold ) {
-                                       $pageStrings[] = "wl_title = '$pg_key' AND" .
-                                               ' (wl_notificationtimestamp >= ' .
-                                               $db->addQuotes( $threshold ) .
-                                               ' OR wl_notificationtimestamp IS NULL)';
-                               }
-                               $whereStrings[] = "wl_namespace = '$ns_key' AND (" .
-                                       $db->makeList( $pageStrings, LIST_OR ) . ')';
+                               $timestamps[$row->page_namespace][$row->page_title] = $revTimestamp - $age;
                        }
+                       $titlesWithThresholds = array_map(
+                               function( LinkTarget $target ) use ( $timestamps ) {
+                                       return [
+                                               $target, $timestamps[$target->getNamespace()][$target->getDBkey()]
+                                       ];
+                               },
+                               $this->titles
+                       );
                }
 
-               // For nonexistant pages
                if ( $this->missing ) {
-                       $lb = new LinkBatch( $this->missing );
-                       $whereStrings[] = $lb->constructSet( 'wl', $db );
-               }
-
-               // Make the actual string and do the query
-               $whereString = $db->makeList( $whereStrings, LIST_OR );
-
-               $this->resetQueryParams();
-               $this->addTables( [ 'watchlist' ] );
-               $this->addFields( [
-                       'wl_namespace',
-                       'wl_title',
-                       'count' => 'COUNT(*)'
-               ] );
-               $this->addWhere( [ $whereString ] );
-               $this->addOption( 'GROUP BY', [ 'wl_namespace', 'wl_title' ] );
-               if ( !$canUnwatchedpages ) {
-                       $this->addOption( 'HAVING', "COUNT(*) >= $unwatchedPageThreshold" );
-               }
-
-               $res = $this->select( __METHOD__ );
-               foreach ( $res as $row ) {
-                       $this->visitingwatchers[$row->wl_namespace][$row->wl_title] = (int)$row->count;
-               }
+                       $titlesWithThresholds = array_merge(
+                               $titlesWithThresholds,
+                               array_map(
+                                       function( LinkTarget $target ) {
+                                               return [ $target, null ];
+                                       },
+                                       $this->missing
+                               )
+                       );
+               }
+
+               $this->visitingwatchers = WatchedItemStore::getDefaultInstance()->countVisitingWatchersMultiple(
+                       $titlesWithThresholds,
+                       !$canUnwatchedpages ? $unwatchedPageThreshold : null
+               );
        }
 
        public function getCacheMode( $params ) {
index e609e2d..9be5849 100644 (file)
@@ -42,7 +42,6 @@ class ApiQueryMyStashedFiles extends ApiQueryBase {
                // Note: If user is logged in but cannot upload, they can still see
                // the list of stashed uploads...but it will probably be empty.
 
-               $db = $this->getDB();
                $params = $this->extractRequestParams();
 
                $this->addTables( 'uploadstash' );
index b7d90d8..de1df34 100644 (file)
@@ -60,7 +60,6 @@ class ApiQueryPageProps extends ApiQueryBase {
                }
 
                $pageProps = PageProps::getInstance();
-               $props = [];
                $result = $this->getResult();
                if ( $this->params['prop'] ) {
                        $propnames = $this->params['prop'];
index dcb8ada..d04796c 100644 (file)
@@ -80,7 +80,7 @@ class ApiQueryPrefixSearch extends ApiQueryGeneratorBase {
                                if ( $title->isSpecialPage() ) {
                                        $vals['special'] = true;
                                } else {
-                                       $vals['pageid'] = intval( $title->getArticleId() );
+                                       $vals['pageid'] = intval( $title->getArticleID() );
                                }
                                $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $vals );
                                if ( !$fit ) {
index c12393d..266d699 100644 (file)
@@ -294,9 +294,9 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
                                        $vals['parsetree'] = $xml;
                                } else {
                                        $vals['badcontentformatforparsetree'] = true;
-                                       $this->setWarning( "Conversion to XML is supported for wikitext only, " .
+                                       $this->setWarning( 'Conversion to XML is supported for wikitext only, ' .
                                                $title->getPrefixedDBkey() .
-                                               " uses content model " . $content->getModel() );
+                                               ' uses content model ' . $content->getModel() );
                                }
                        }
                }
@@ -315,9 +315,9 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
                                                ParserOptions::newFromContext( $this->getContext() )
                                        );
                                } else {
-                                       $this->setWarning( "Template expansion is supported for wikitext only, " .
+                                       $this->setWarning( 'Template expansion is supported for wikitext only, ' .
                                                $title->getPrefixedDBkey() .
-                                               " uses content model " . $content->getModel() );
+                                               ' uses content model ' . $content->getModel() );
                                        $vals['badcontentformat'] = true;
                                        $text = false;
                                }
@@ -332,7 +332,7 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
                        }
 
                        if ( $text === null ) {
-                               $format = $this->contentFormat ? $this->contentFormat : $content->getDefaultFormat();
+                               $format = $this->contentFormat ?: $content->getDefaultFormat();
                                $model = $content->getModel();
 
                                if ( !$content->isSupportedFormat( $format ) ) {
index 44b3d4c..2eb5d14 100644 (file)
@@ -351,8 +351,8 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
                                ApiBase::PARAM_MIN => 1,
-                               ApiBase::PARAM_MAX => ApiBase::LIMIT_SML1,
-                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_SML2
+                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ],
                        'interwiki' => false,
                        'enablerewrites' => false,
index 4befad6..f05556e 100644 (file)
@@ -652,8 +652,8 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                }
 
                $data = [
-                       'url' => $url ? $url : '',
-                       'text' => $text ? $text : ''
+                       'url' => $url ?: '',
+                       'text' => $text ?: ''
                ];
 
                return $this->getResult()->addValue( 'query', $property, $data );
index 51f4862..b039a1e 100644 (file)
@@ -32,6 +32,10 @@ class ApiQueryStashImageInfo extends ApiQueryImageInfo {
        }
 
        public function execute() {
+               if ( !$this->getUser()->isLoggedIn() ) {
+                       $this->dieUsage( 'You must be logged-in to have an upload stash', 'notloggedin' );
+               }
+
                $params = $this->extractRequestParams();
                $modulePrefix = $this->getModulePrefix();
 
@@ -42,7 +46,7 @@ class ApiQueryStashImageInfo extends ApiQueryImageInfo {
                $result = $this->getResult();
 
                if ( !$params['filekey'] && !$params['sessionkey'] ) {
-                       $this->dieUsage( "One of filekey or sessionkey must be supplied", 'nofilekey' );
+                       $this->dieUsage( 'One of filekey or sessionkey must be supplied', 'nofilekey' );
                }
 
                // Alias sessionkey to filekey, but give an existing filekey precedence.
@@ -62,9 +66,9 @@ class ApiQueryStashImageInfo extends ApiQueryImageInfo {
                        }
                // @todo Update exception handling here to understand current getFile exceptions
                } catch ( UploadStashFileNotFoundException $e ) {
-                       $this->dieUsage( "File not found: " . $e->getMessage(), "invalidsessiondata" );
+                       $this->dieUsage( 'File not found: ' . $e->getMessage(), 'invalidsessiondata' );
                } catch ( UploadStashBadPathException $e ) {
-                       $this->dieUsage( "Bad path: " . $e->getMessage(), "invalidsessiondata" );
+                       $this->dieUsage( 'Bad path: ' . $e->getMessage(), 'invalidsessiondata' );
                }
        }
 
index 9e7e62e..0fc443a 100644 (file)
@@ -225,23 +225,15 @@ class ApiQueryUserInfo extends ApiQueryBase {
                }
 
                if ( isset( $this->prop['unreadcount'] ) ) {
-                       $dbr = $this->getQuery()->getNamedDB( 'watchlist', DB_SLAVE, 'watchlist' );
-
-                       $count = $dbr->selectRowCount(
-                               'watchlist',
-                               '1',
-                               [
-                                       'wl_user' => $user->getId(),
-                                       'wl_notificationtimestamp IS NOT NULL',
-                               ],
-                               __METHOD__,
-                               [ 'LIMIT' => self::WL_UNREAD_LIMIT ]
+                       $unreadNotifications = WatchedItemStore::getDefaultInstance()->countUnreadNotifications(
+                               $user,
+                               self::WL_UNREAD_LIMIT
                        );
 
-                       if ( $count >= self::WL_UNREAD_LIMIT ) {
+                       if ( $unreadNotifications === true ) {
                                $vals['unreadcount'] = self::WL_UNREAD_LIMIT . '+';
                        } else {
-                               $vals['unreadcount'] = $count;
+                               $vals['unreadcount'] = $unreadNotifications;
                        }
                }
 
index f70bbe7..5d5c829 100644 (file)
@@ -312,7 +312,7 @@ class ApiResult implements ApiSerializable {
                        if ( !$conflicts ) {
                                $arr[$name] += $value;
                        } else {
-                               $keys = join( ', ', array_keys( $conflicts ) );
+                               $keys = implode( ', ', array_keys( $conflicts ) );
                                throw new RuntimeException(
                                        "Conflicting keys ($keys) when attempting to merge element $name"
                                );
@@ -340,7 +340,7 @@ class ApiResult implements ApiSerializable {
                                $value = $value->serializeForApiResult();
                                if ( is_object( $value ) ) {
                                        throw new UnexpectedValueException(
-                                               get_class( $oldValue ) . "::serializeForApiResult() returned an object of class " .
+                                               get_class( $oldValue ) . '::serializeForApiResult() returned an object of class ' .
                                                        get_class( $value )
                                        );
                                }
@@ -351,7 +351,7 @@ class ApiResult implements ApiSerializable {
                                        return self::validateValue( $value );
                                } catch ( Exception $ex ) {
                                        throw new UnexpectedValueException(
-                                               get_class( $oldValue ) . "::serializeForApiResult() returned an invalid value: " .
+                                               get_class( $oldValue ) . '::serializeForApiResult() returned an invalid value: ' .
                                                        $ex->getMessage(),
                                                0,
                                                $ex
@@ -372,7 +372,7 @@ class ApiResult implements ApiSerializable {
                        }
                        $value = $tmp;
                } elseif ( is_float( $value ) && !is_finite( $value ) ) {
-                       throw new InvalidArgumentException( "Cannot add non-finite floats to ApiResult" );
+                       throw new InvalidArgumentException( 'Cannot add non-finite floats to ApiResult' );
                } elseif ( is_string( $value ) ) {
                        $value = $wgContLang->normalize( $value );
                } elseif ( $value !== null && !is_scalar( $value ) ) {
@@ -538,7 +538,7 @@ class ApiResult implements ApiSerializable {
                ) {
                        throw new RuntimeException(
                                "Attempting to set content element as $name when " . $arr[self::META_CONTENT] .
-                                       " is already set as the content element"
+                                       ' is already set as the content element'
                        );
                }
                $arr[self::META_CONTENT] = $name;
@@ -1132,12 +1132,12 @@ class ApiResult implements ApiSerializable {
                                                $tmp = [];
                                                return $tmp;
                                        default:
-                                               $fail = join( '.', array_slice( $path, 0, $i + 1 ) );
+                                               $fail = implode( '.', array_slice( $path, 0, $i + 1 ) );
                                                throw new InvalidArgumentException( "Path $fail does not exist" );
                                }
                        }
                        if ( !is_array( $ret[$k] ) ) {
-                               $fail = join( '.', array_slice( $path, 0, $i + 1 ) );
+                               $fail = implode( '.', array_slice( $path, 0, $i + 1 ) );
                                throw new InvalidArgumentException( "Path $fail is not an array" );
                        }
                        $ret = &$ret[$k];
@@ -1150,7 +1150,7 @@ class ApiResult implements ApiSerializable {
         * the API.
         *
         * @param array $vars
-        * @param boolean $forceHash
+        * @param bool $forceHash
         * @return array
         */
        public static function addMetadataToResultVars( $vars, $forceHash = true ) {
index d8562b0..3c02c9c 100644 (file)
@@ -50,7 +50,7 @@ class ApiStashEdit extends ApiBase {
                if ( !ContentHandler::getForModelID( $params['contentmodel'] )
                        ->isSupportedFormat( $params['contentformat'] )
                ) {
-                       $this->dieUsage( "Unsupported content model/format", 'badmodelformat' );
+                       $this->dieUsage( 'Unsupported content model/format', 'badmodelformat' );
                }
 
                // Trim and fix newlines so the key SHA1's match (see RequestContext::getText())
@@ -77,7 +77,7 @@ class ApiStashEdit extends ApiBase {
                                $baseRev->getId()
                        );
                        if ( !$editContent ) {
-                               $this->dieUsage( "Could not merge updated section.", 'replacefailed' );
+                               $this->dieUsage( 'Could not merge updated section.', 'replacefailed' );
                        }
                        if ( $currentRev->getId() == $baseRev->getId() ) {
                                // Base revision was still the latest; nothing to merge
@@ -433,19 +433,19 @@ class ApiStashEdit extends ApiBase {
                ];
        }
 
-       function needsToken() {
+       public function needsToken() {
                return 'csrf';
        }
 
-       function mustBePosted() {
+       public function mustBePosted() {
                return true;
        }
 
-       function isWriteMode() {
+       public function isWriteMode() {
                return true;
        }
 
-       function isInternal() {
+       public function isInternal() {
                return true;
        }
 }
index 63bae9d..4940394 100644 (file)
@@ -32,9 +32,9 @@ class ApiTokens extends ApiBase {
 
        public function execute() {
                $this->setWarning(
-                       "action=tokens has been deprecated. Please use action=query&meta=tokens instead."
+                       'action=tokens has been deprecated. Please use action=query&meta=tokens instead.'
                );
-               $this->logFeatureUsage( "action=tokens" );
+               $this->logFeatureUsage( 'action=tokens' );
 
                $params = $this->extractRequestParams();
                $res = [
index 5f268c5..ace41a4 100644 (file)
@@ -63,9 +63,18 @@ class ApiUnblock extends ApiBase {
                        }
                }
 
+               // Check if user can add tags
+               if ( !is_null( $params['tags'] ) ) {
+                       $ableToTag = ChangeTags::canAddTagsAccompanyingChange( $params['tags'], $user );
+                       if ( !$ableToTag->isOK() ) {
+                               $this->dieStatus( $ableToTag );
+                       }
+               }
+
                $data = [
                        'Target' => is_null( $params['id'] ) ? $params['user'] : "#{$params['id']}",
-                       'Reason' => $params['reason']
+                       'Reason' => $params['reason'],
+                       'Tags' => $params['tags']
                ];
                $block = Block::newFromTarget( $data['Target'] );
                $retval = SpecialUnblock::processUnblock( $data, $this->getContext() );
@@ -96,6 +105,10 @@ class ApiUnblock extends ApiBase {
                        ],
                        'user' => null,
                        'reason' => '',
+                       'tags' => [
+                               ApiBase::PARAM_TYPE => 'tags',
+                               ApiBase::PARAM_ISMULTI => true,
+                       ],
                ];
        }
 
index f4fcb06..e24f2ce 100644 (file)
@@ -47,6 +47,14 @@ class ApiUndelete extends ApiBase {
                        $this->dieUsageMsg( [ 'invalidtitle', $params['title'] ] );
                }
 
+               // Check if user can add tags
+               if ( !is_null( $params['tags'] ) ) {
+                       $ableToTag = ChangeTags::canAddTagsAccompanyingChange( $params['tags'], $user );
+                       if ( !$ableToTag->isOK() ) {
+                               $this->dieStatus( $ableToTag );
+                       }
+               }
+
                // Convert timestamps
                if ( !isset( $params['timestamps'] ) ) {
                        $params['timestamps'] = [];
@@ -64,7 +72,8 @@ class ApiUndelete extends ApiBase {
                        $params['reason'],
                        $params['fileids'],
                        false,
-                       $this->getUser()
+                       $user,
+                       $params['tags']
                );
                if ( !is_array( $retval ) ) {
                        $this->dieUsageMsg( 'cannotundelete' );
@@ -99,6 +108,10 @@ class ApiUndelete extends ApiBase {
                                ApiBase::PARAM_REQUIRED => true
                        ],
                        'reason' => '',
+                       'tags' => [
+                               ApiBase::PARAM_TYPE => 'tags',
+                               ApiBase::PARAM_ISMULTI => true,
+                       ],
                        'timestamps' => [
                                ApiBase::PARAM_TYPE => 'timestamp',
                                ApiBase::PARAM_ISMULTI => true,
index 79e88c6..326f8ba 100644 (file)
@@ -542,9 +542,9 @@ class ApiUpload extends ApiBase {
                                ];
                                ApiResult::setIndexedTagName( $extradata['allowed'], 'ext' );
 
-                               $msg = "Filetype not permitted: ";
+                               $msg = 'Filetype not permitted: ';
                                if ( isset( $verification['blacklistedExt'] ) ) {
-                                       $msg .= join( ', ', $verification['blacklistedExt'] );
+                                       $msg .= implode( ', ', $verification['blacklistedExt'] );
                                        $extradata['blacklisted'] = array_values( $verification['blacklistedExt'] );
                                        ApiResult::setIndexedTagName( $extradata['blacklisted'], 'ext' );
                                } else {
@@ -664,7 +664,7 @@ class ApiUpload extends ApiBase {
                                $this->dieUsage( 'No such filekey: ' . $e->getMessage(), 'stashnosuchfilekey' );
                                break;
                        default:
-                               $this->dieUsage( $exceptionType . ": " . $e->getMessage(), 'stasherror' );
+                               $this->dieUsage( $exceptionType . ': ' . $e->getMessage(), 'stasherror' );
                                break;
                }
        }
@@ -714,7 +714,7 @@ class ApiUpload extends ApiBase {
                if ( $this->mParams['async'] ) {
                        $progress = UploadBase::getSessionStatus( $this->getUser(), $this->mParams['filekey'] );
                        if ( $progress && $progress['result'] === 'Poll' ) {
-                               $this->dieUsage( "Upload from stash already in progress.", 'publishfailed' );
+                               $this->dieUsage( 'Upload from stash already in progress.', 'publishfailed' );
                        }
                        UploadBase::setSessionStatus(
                                $this->getUser(),
index 4e5e000..f09fdcb 100644 (file)
@@ -80,7 +80,7 @@ class ApiWatch extends ApiBase {
                        if ( $extraParams ) {
                                $p = $this->getModulePrefix();
                                $this->dieUsage(
-                                       "The parameter {$p}title can not be used with " . implode( ", ", $extraParams ),
+                                       "The parameter {$p}title can not be used with " . implode( ', ', $extraParams ),
                                        'invalidparammix'
                                );
                        }
index 278dc6f..5072c66 100644 (file)
@@ -5,7 +5,9 @@
                        "أحمد المحمودي",
                        "Khaled",
                        "Fatz",
-                       "Hiba Alshawi"
+                       "Hiba Alshawi",
+                       "Maroen1990",
+                       "محمد أحمد عبد الفتاح"
                ]
        },
        "apihelp-main-param-action": "أي فعل للعمل.",
        "apihelp-block-description": "منع مستخدم.",
        "apihelp-block-param-reason": "السبب للمنع.",
        "apihelp-block-param-nocreate": "امنع إنشاء الحسابات.",
+       "apihelp-checktoken-param-type": "نوع من الرموز يجري اختبارها.",
+       "apihelp-checktoken-param-token": "اختبار الرموز.",
+       "apihelp-checktoken-param-maxtokenage": "أقصى عمر للرمز يسمح، في ثوان.",
        "apihelp-compare-param-fromtitle": "العنوان الأول للمقارنة.",
        "apihelp-compare-param-fromid": "رقم الصفحة الأول للمقارنة.",
        "apihelp-compare-param-fromrev": "أول مراجعة للمقارنة.",
        "apihelp-compare-param-totitle": "العنوان الثاني للمقارنة.",
        "apihelp-compare-param-toid": "رقم الصفحة الثاني للمقارنة.",
        "apihelp-compare-param-torev": "المراجعة الثانية للمقارنة.",
+       "apihelp-createaccount-description": "انشاء حساب مستخدم جديد",
        "apihelp-createaccount-param-name": "اسم المستخدم.",
+       "apihelp-createaccount-param-email": "عنوان البريد الإلكتروني للمستخدم (اختياري).",
+       "apihelp-createaccount-param-realname": "الاسم الحقيقي للمستخدم (اختياري).",
+       "apihelp-createaccount-param-mailpassword": "اذا تم تعيين اي قيمة, سيتم ارسال كلمة سر عشوائية للمستخدم عن طريق الاميل.",
        "apihelp-delete-description": "حذف صفحة.",
-       "apihelp-delete-param-unwatch": "أزل الصفحة من قائمة مراقبتك.",
+       "apihelp-delete-param-watch": "أضف الصفحة إلى لائحة مراقبة المستعمل الحالي",
+       "apihelp-delete-param-unwatch": "إزالة الصفحة من قائمة المراقبة للمستخدم الحالي.",
+       "apihelp-disabled-description": "هذا الاصدار تم تعطيله.",
        "apihelp-edit-description": "إنشاء وتعديل الصفحات.",
+       "apihelp-edit-param-sectiontitle": "عنوان لقسم جديد.",
        "apihelp-edit-param-text": "محتوى الصفحة",
        "apihelp-edit-param-notminor": "تعديل غير طفيف.",
        "apihelp-edit-param-bot": "علم على هذا التعديل كبوت.",
+       "apihelp-edit-param-createonly": "لا تحرر الصفحة إذا كان موجودا بالفعل.",
        "apihelp-edit-param-watch": "أضف الصفحة إلى لائحة مراقبة المستعمل الحالي",
+       "apihelp-edit-param-unwatch": "إزالة الصفحة من قائمة المراقبة للمستخدم الحالي.",
        "apihelp-edit-example-edit": "عدل صفحة.",
        "apihelp-emailuser-description": "مراسلة المستخدم",
+       "apihelp-expandtemplates-param-title": "عنوان الصفحة.",
        "apihelp-feedrecentchanges-param-tagfilter": "فلتر بالوسم.",
+       "apihelp-feedrecentchanges-example-simple": " اظهر التغييرات الحديثة",
+       "apihelp-feedrecentchanges-example-30days": "أظهر التغييرات الأخيرة في 30 يوم.",
+       "apihelp-feedwatchlist-example-all6hrs": "اظهر كل التغييرات في اخر 6 ساعات",
        "apihelp-filerevert-param-comment": "تعليق الرفع.",
        "apihelp-help-example-recursive": "كل المساعدة في صفحة واحدة.",
        "apihelp-import-param-summary": "تعليق الاستيراد.",
        "apihelp-login-param-name": "اسم المستخدم.",
        "apihelp-login-param-password": "كلمة السر",
+       "apihelp-login-param-domain": "النطاق (اختياري).",
        "apihelp-login-example-login": "تسجيل الدخول",
+       "apihelp-mergehistory-description": "ادمج تاريخ الصفحة.",
+       "apihelp-move-description": "نقل صفحة.",
        "apihelp-move-param-reason": "السبب لإعادة التسمية.",
        "apihelp-move-param-ignorewarnings": "تجاهل أي تحذيرات.",
+       "apihelp-opensearch-param-search": "سطر البحث",
+       "apihelp-opensearch-param-limit": "الحد الأقصى للنتائج المُرجعة",
        "apihelp-opensearch-param-namespace": "النطاقات للبحث.",
+       "apihelp-parse-example-page": "تحليل صفحة.",
        "apihelp-patrol-example-rcid": "ابحث عن تغيير جديد",
        "apihelp-patrol-example-revid": "راجع مراجعة.",
        "apihelp-protect-description": "غير مستوى الحماية لصفحة.",
        "apihelp-protect-example-protect": "حماية صفحة.",
        "apihelp-query+allpages-param-filterredir": "أي الصفحات للعرض.",
        "apihelp-query+allrevisions-description": "اعرض كل المراجعات.",
+       "apihelp-query+blocks-example-simple": "قائمة المنع.",
        "apihelp-query+imageinfo-paramvalue-prop-userid": "إضافة هوية المستخدم الذي قام بتحميل كل إصدار ملف.",
        "apihelp-query+prefixsearch-param-offset": "عدد النتائج المراد تخطيها."
 }
index a7e5754..0d19545 100644 (file)
@@ -5,7 +5,7 @@
                        "Enolp"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentación]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Llista d'alderique]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anuncios de la API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Fallos y solicitúes]\n</div>\n<strong>Estau:</strong> Toles carauterístiques qu'apaecen nesta páxina tendríen de funcionar, pero la API inda ta en desendolcu activu, y puede camudar en cualquier momentu. Suscríbete a la [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ llista de corréu mediawiki-api-announce] p'avisos sobro anovamientos.\n\n<strong>Solicitúes incorreutes:</strong> Cuando s'unvíen solicitúes incorreutes a la API, unvíase una cabecera HTTP cola clave \"MediaWiki-API-Error\" y, darréu, tanto'l valor de la cabecera como'l códigu d'error devueltu pondránse al mesmu valor. Pa más información, consulta [[mw:API:Errors_and_warnings|API: Errores y avisos]].",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentación]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Llista d'alderique]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anuncios de la API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Fallos y solicitúes]\n</div>\n<strong>Estau:</strong> Toles carauterístiques qu'apaecen nesta páxina tendríen de funcionar, pero la API inda ta en desendolcu activu, y puede camudar en cualquier momentu. Suscríbete a la [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ llista de corréu mediawiki-api-announce] p'avisos sobro anovamientos.\n\n<strong>Solicitúes incorreutes:</strong> Cuando s'unvíen solicitúes incorreutes a la API, unvíase una cabecera HTTP cola clave \"MediaWiki-API-Error\" y, darréu, tanto'l valor de la cabecera como'l códigu d'error devueltu pondránse al mesmu valor. Pa más información, consulta [[mw:API:Errors_and_warnings|API: Errores y avisos]].\n\n<strong>Pruebes:</strong> Pa facilitar les pruebes de solicitúes API, consulta [[Special:ApiSandbox]].",
        "apihelp-main-param-action": "Qué aición facer.",
        "apihelp-main-param-format": "El formatu de la salida.",
        "apihelp-block-description": "Bloquiar a un usuariu.",
index bda2291..f39998b 100644 (file)
 {
        "@metadata": {
                "authors": [
-                       "Рустам Нурыев"
+                       "Рустам Нурыев",
+                       "Азат Хәлилов",
+                       "Sagan",
+                       "Айсар",
+                       "Янмурза Баки",
+                       "Айбикә",
+                       "Лилиә"
                ]
        },
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Документация]]\n* [[mw:API:FAQ|ЧаВО]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Почта таратыу]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce  API яңылыҡтары]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R  Хаталар һәм яуаптар]\n</div>\n<strong>Статус:</strong> Был биттә  күрһәтелгән бар функциялар ҙа эшләргә тейеш,  шулай ҙа  API әүҙем эшкәртеү хәлендә тора һәм теләгән бер ваҡытта үҙгәрергә мөмкин. Яңыртылыуҙарҙы һәр саҡ белеп торор өсөн [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ почта таратыу mediawiki-api-announce], ошоға яҙыл.\n\n<strong>Хаталы һоратыуҙар:</strong> Әгәр API хаталы һоратыу алһа,     HTTP баш һүҙе   «MediaWiki-API-Error» асҡысы менән кире ҡайтарыла,  бынан һуң баш һүҙҙең мәғәнәһе һәм хата  коды кире ебәреләсәк һәм кире шул уҡ мәғәнәлә кире ҡуйыласаҡ. Киңерәк мәғлүмәтте ошонан ҡара  [[mw:API:Errors_and_warnings|API:Хаталар һәм иҫкәртеүҙәр]].\n\n<strong>Тестлау:</strong>   API-һоратыуҙарҙы тестлау уңайлы булһын өсөн ҡара. [[Special:ApiSandbox]]",
+       "apihelp-main-param-action": "Үтәлергә тейеш булған ғәмәлдәр.",
+       "apihelp-main-param-format": "Мәғлүмәттәр сығарыу форматы.",
+       "apihelp-main-param-smaxage": "Cache-Control HTTP-баш һүҙҙең <code>s-maxage</code>  мәғәнәһен бирелгән секунд эсендә билдәләй.",
+       "apihelp-main-param-maxage": "Cache-Control HTTP-баш һүҙҙең <code>s-maxage</code>  мәғәнәһен бирелгән секунд эсендә билдәләй.",
+       "apihelp-main-param-assert": "Әгәр <kbd>user</kbd>бирелһә ҡулланыусы танылған икәненә, йәки <kbd>bot</kbd>бирелһә ҡол хоҡуғына эйә икәненә ышанырға",
+       "apihelp-main-param-requestid": "Бында бирелгән һәр мәғәнә яуапҡа индереләсәк. Һорауҙарҙы айырыу өсөн файҙаланылырға мөмкин",
+       "apihelp-main-param-servedby": "Һөҙөмтәләргә һорауҙы эшкәрткән хост исемен индерергә",
+       "apihelp-main-param-curtimestamp": "Һөҙөмтәләргә ваҡытлыса тамға ҡуйырға.",
+       "apihelp-main-param-origin": "API мөрәжәғәт иткәндә AJAX-һорау (CORS) кросс-домены ҡулланһағыҙ, параметрға тәүге домен мәғәнәһен бирегеҙ. Ул алдағы һорауҙа булырға һәм шул рәүешле URI-һорауҙың (POST түгел) бер өлөшө булырға тейеш. Ул атамалағы бер сығанаҡҡа  <code>Origin<code> тап килергә тейеш, мәҫәлән, <kbd>https://ru.wikipedia.org</kbd> йәки <kbd>https://meta.wikimedia.org</kbd>. Әгәр ҙә параметр атамаға <code>Origin<code> тура килмәһә, яуап 403 хата коды менән кире ҡайтарыла. Әгәр параметр <code>Origin</code> атамаға тура килһә, һәм сығанаҡ рөхсәт ителгән исемлектә икән, <code>Access-Control-Allow-Origin</code> тигән атама ҡуйыласаҡ.",
+       "apihelp-block-description": "Ҡатнашыусыны бикләү",
+       "apihelp-block-param-user": "Һеҙ бикләргә теләгән ҡатнашыусының IP адресы йәки  IP диапозоны.",
+       "apihelp-block-param-expiry": "Ғәмәлдән сығыу ваҡыты. Ул сағыштырмаса булыуы мөмкин(мәҫәлән <kbd>5 ай</kbd> йәки <kbd>2 аҙна</kbd>) йәки абсолют (мәҫәлән <kbd>2014-09-18T12:34:56Z</kbd>). Әгәр саманан тыш ҡуйылһа <kbd>сикһеҙ</kbd>, <kbd>билдәләнмәгән</kbd>, йәки <kbd>һис ҡасан</kbd>,  блок ғәмәлдән сыҡмай.",
+       "apihelp-block-param-reason": "Бикләү сәбәбе.",
+       "apihelp-block-param-anononly": "Аноним ҡатнашыусыларҙы бикләү (йәғни IP адресынан төҙәтеүҙе тыйыу).",
+       "apihelp-block-param-nocreate": "Яңы иҫәп яҙыуҙарын булдырыуҙы тыйыу.",
+       "apihelp-block-param-autoblock": "Был ҡатнашыусы ҡулланған һуңғы IP адрестарҙы һәм артабан үҙгәртеү өсөн ҡулланрға тырышҡан IP адрестарҙы бикләргә",
+       "apihelp-block-param-noemail": "Ҡулланыусының Вики аша электрон почта ебәреүен тыйыу. (Талап итә <code>blockemail</code> хоҡуғын).",
+       "apihelp-block-param-hidename": "Бикләү журналында ҡулланыусы исемен йәшерергә. (Хоҡуҡ талап ителә<code>hideuser</code>)",
+       "apihelp-block-param-allowusertalk": "Ҡатнашыусыларға үҙҙәренең биттәрен мөхәррирләргә мөмкинлек бирә (<var> менән бәйләнгән. [[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+       "apihelp-block-param-reblock": "Әгәр ҡатнашыусы бикләнгән булһа, ғәмәлдәге бикләүгә күсереп яҙырға.",
+       "apihelp-block-param-watchuser": "Битте йәки IP-ҡатнашыусыны һәм фекер алышыу битен күҙәтеү аҫтына аларға.",
+       "apihelp-block-example-ip-simple": "Блок IP-адрес <KBD> 192.0.2.5 </ KBD> өс көн эсендә  <KBD> Беренсе удар </ KBD>.",
+       "apihelp-block-example-user-complex": "Ҡулланыусыны ябыу <KBD> Вандал </ KBD>  уйланылған  билдәһеҙ мөҙҙәткә  <KBD> Вандаллыҡ </ KBD>, шулай уҡ яңы иҫәп булдырыуға юл ҡуймау һәм электрон почтаға ебәреү.",
+       "apihelp-checktoken-description": "\n<kbd>-нан Маркерҙың дөрөҫлөгөн тикшерегеҙ [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+       "apihelp-checktoken-param-type": "Тамға тибы һынау үтә.",
+       "apihelp-checktoken-param-token": "Тикшереү токены.",
+       "apihelp-checktoken-param-maxtokenage": "Токендың максималь йәше (секундтарҙа)",
+       "apihelp-checktoken-example-simple": "<kbd>csrf</kbd>-токендың яраҡлығын тикшерергә",
+       "apihelp-clearhasmsg-description": "Ағымдағы ҡуллыныусының <code>hasmsg</code> флагын таҙарта",
+       "apihelp-clearhasmsg-example-1": "Ағымдағы ҡуллыныусының <code>hasmsg</code> флагын таҙарта",
+       "apihelp-compare-description": "\nТикшереү һаны, биттең баш һүҙе, йәки бит өсөн идентификатор баштан аҙаҡҡаса икеһе өсөн дә  ҡабул ителергә тейеш",
+       "apihelp-compare-param-fromtitle": "Сағыштырыу өсөн беренсе баш һүҙ",
+       "apihelp-compare-param-fromid": "Сағыштырыу өсөн беренсе идентификатор.",
+       "apihelp-compare-param-fromrev": "Сағыштырыу өсөн беренсе редакция.",
+       "apihelp-compare-param-totitle": "Сағыштырыу өсөн икенсе баш һүҙ",
+       "apihelp-compare-param-toid": "Сағыштырыу өсөн икенсе идентификатор.",
+       "apihelp-compare-param-torev": "Сағыштырыу өсөн икенсе версия.",
+       "apihelp-compare-example-1": "1-се һәм 2-се версиялар араһында айырма эшләү",
+       "apihelp-createaccount-description": "Ҡатнашыусыларҙың яңы иҫәп яҙыуҙарын булдырыу.",
+       "apihelp-createaccount-param-name": "Ҡатнашыусы исеме.",
+       "apihelp-createaccount-param-password": "Серһүҙ (ignored if <var>$1mailpassword</var> is set).",
+       "apihelp-createaccount-param-domain": "Тышҡы аутентификация домены (өҫтәмә).",
+       "apihelp-createaccount-param-token": "Беренсе ғариза буйынса алынған токендың иҫәп яҙмаһын булдырыу",
+       "apihelp-createaccount-param-email": "Ҡатнашыусының электрон почта адресы (өҫтәмә).",
+       "apihelp-createaccount-param-realname": "Ҡатнашыусының ысын исеме(өҫтәмә)",
+       "apihelp-createaccount-param-mailpassword": "Әгәр ҙә теләһә ниндәй мәғәнә ҡуйылһа, осраҡлы серһүҙ ҡулланыусыға ебәреләсәк",
+       "apihelp-createaccount-param-reason": "Журналға яҙыу өсөн иҫәп яҙмаһын булдырыуға өҫтәмә сәбәп",
+       "apihelp-createaccount-param-language": "Тел кодын ҡулланыусы өсөн һүҙһеҙ ҡуйырға (мотлаҡ түгел, эсенә алғандағында тел  һүҙһеҙ файҙаланыла)",
+       "apihelp-createaccount-example-pass": "<kbd>test123</kbd> серһүҙле <kbd>testuser</kbd> ҡулланыусыһын булдырыу.",
+       "apihelp-createaccount-example-mail": "<kbd>testmailuser</kbd> ҡулланыусыһын һәм электрон почтаны булдырыу, осраҡлы серһеҙ яһау",
+       "apihelp-delete-description": "Битте юйырға.",
+       "apihelp-delete-param-title": "Биттең баш һүҙен юйырға. <var>$1биттәрҙән</var> бергә файҙаланыу  мөмкин түгел.",
+       "apihelp-delete-param-pageid": "Бит идентифакторы юйылыу өсөн биттәр.  <var>$1title</var> менән бергә ҡулланыла алмайҙар",
+       "apihelp-delete-param-reason": "Юйылыу сәбәбе. Әгәр ул  ҡуйылмаған булһа, билдәләнмәгән сәбәп менән автоматик рәүештә юйыласаҡ.",
+       "apihelp-delete-param-tags": "Юйҙырылғандар журналындағы яҙмаларға  мөрәжәғәт итер өсөн, билдәләрҙе үҙгәртергә.",
+       "apihelp-delete-param-watch": "Ҡулланыусының ағымдағы күҙәтеү исемлегенә бит өҫтәргә.",
+       "apihelp-delete-param-watchlist": "Ағымдағы ҡулланыусының теҙмәһенән битте һүҙһеҙ өҫтәргә йәки юйырға, һылтанмаларҙы файҙаланығыҙ йәки сәғәтте алмаштырмаҫҡа.",
+       "apihelp-delete-param-unwatch": "Ҡулланыусының ағымдағы күҙәтеү исемлегенән битте юйырға.",
+       "apihelp-delete-param-oldimage": "Имя старого изображения для удаления, как это предусмотрено\n\nБында нисек  ҡаралғанса, юйыу өсөн иҫке һүрәтләмәнең исеме [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]]",
+       "apihelp-delete-example-simple": "Юйырға: <kbd>Main Page</kbd>.",
+       "apihelp-delete-example-reason": "Юйырға <kbd>Main Page</kbd> сәбәп <kbd>Preparing for move</kbd>.",
+       "apihelp-disabled-description": "Был модуль һүндерелгән.",
+       "apihelp-edit-description": "Биттәрҙе төҙөргә һәм мөхәррирләргә.",
+       "apihelp-edit-param-title": "Мөхәриррләү өсөн биттең исеме.<var>$1биттәрҙән</var> бергә файҙаланыу  мөмкин түгел.",
+       "apihelp-edit-param-pageid": "Бит идентифакторын мөхәррирләү өсөн биттәр.  <var>$1title</var> менән бергә ҡулланыла алмайҙар",
+       "apihelp-edit-param-section": "Номерҙы айырыу. <KBD> 0 </ KBD> өҫкө секция өсөн, <KBD> яңы </ KBD> яңынан бүлеү өсөн.",
+       "apihelp-edit-param-sectiontitle": "Яңы бүлек өсөн баш исем.",
+       "apihelp-edit-param-text": "Биттең йөкмәткеһе.",
+       "apihelp-edit-param-summary": "Һығымтаны мөхәррирләргә. Шулай уҡ бүлектең  $1section = яңы $1sectiontitle исеме ҡуйылмаған",
+       "apihelp-edit-param-tags": "Яңынан ҡарау  өсөн, билдәләрҙе үҙгәртергә.",
+       "apihelp-edit-param-minor": "Әҙ генә үҙгәртеүҙәр.",
+       "apihelp-edit-param-notminor": "Ҙур ғына үҙгәреш (ғәҙәттә, «әҙ»ҙән күберәк төҙәтеү).",
+       "apihelp-edit-param-bot": "Төҙәтеүҙе бот яһаған тип билдәләү.",
+       "apihelp-edit-param-basetimestamp": "База тикшереү билдәһе тышҡы ҡаршылыҡтарҙы  белеү өсөн файҙаланыла. \n\n[[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]] ярҙамында алынырға мөмкин",
+       "apihelp-edit-param-starttimestamp": "Билдә, мөхәриррләү процессы башланған саҡта,  мөхәриррләү ҡаршылыҡтары беленгәндә файҙаланыла. Тура килгән ғәмәл <вар> [[Special:ApiHelp/main|curtimestamp]] ярҙамы менән мөхәриррләү процессы  башында  алынырға мөмкин (мәҫәлән, мөхәриррләү бите эстәлеген тейәгәндә)",
+       "apihelp-edit-param-recreate": "Шул уҡ ваҡытта юйыласаҡ бит тураһындағы бар хаталарҙы ҡапларға.",
+       "apihelp-edit-param-createonly": "Булған битте мөхәррирләмәҫкә.",
+       "apihelp-edit-param-nocreate": "Сик күрһәтелмәһә, хаталарҙы ташларға.",
+       "apihelp-edit-param-watch": "Ҡулланыусының ағымдағы күҙәтеү исемлегенә бит өҫтәргә.",
+       "apihelp-edit-param-unwatch": "Ҡулланыусының ағымдағы күҙәтеү исемлегенән битте юйырға.",
+       "apihelp-edit-param-watchlist": "Ағымдағы ҡулланыусының теҙмәһенән битте һүҙһеҙ өҫтәргә йәки юйырға, һылтанмаларҙы файҙаланығыҙ йәки сәғәтте алмаштырмағыҙ.",
+       "apihelp-edit-param-md5": "\n\nMD5-хэш параметрының $1 text, йәки  $1 prepend тексы  һәм $1 appendtext параметрҙары  бәйләнгән. \nҠуйылған булһа, әгәр хэш дөрөҫ булмаһа, мөхәррирләү эшләнмәйәсәк.",
+       "apihelp-edit-param-prependtext": "Был тексты биттең башына өҫтәгеҙ. $ 1text алмаштыра.",
+       "apihelp-edit-param-appendtext": "Был тексты биттең аҙағынаса өҫтәгеҙ.$1text алмаштыра.\n$1section -ды файҙаланығыҙ = яңы, яңы бүлек өҫтәү өсөн, ә был параметрға түгел.",
+       "apihelp-edit-param-undo": "Был версияны кире алырға. $1text,$1prependtext,$1appendtext алмаштыра.",
+       "apihelp-edit-param-undoafter": "$1undo- нан алып барлыҡ үҙгәртеүҙәрҙе кире алырға. Әгәр ул ҡуйылмаған булһа, бер тикшереүҙе кире алыу ҙа етә.",
+       "apihelp-edit-param-redirect": "Автоматик йүнәлтәүҙе рөхсәт итергә.",
+       "apihelp-edit-param-contentformat": "Текстҡа ҡуйыу өсөн йөкмәткенең сериализация форматы.",
+       "apihelp-edit-param-contentmodel": "Яңы йөкмәткенең контент моделе.",
+       "apihelp-edit-param-token": "Маркер һуңғы параметр сифатында ебәрелергә тейеш, йәки, һәрхәлдә $1text параметрынан һуң.",
+       "apihelp-edit-example-edit": "Битте мөхәррирләү",
+       "apihelp-edit-example-prepend": "Бит башына тылсымлы һүҙ ҡуйырға <kbd>_&#95;NOTOC_&#95;</kbd>.",
+       "apihelp-edit-example-undo": " 13579-ҙан 13585-кә тиклем төҙәтеүҙәрҙе кире алырға",
+       "apihelp-emailuser-description": "Ҡатнашыусыға хат",
+       "apihelp-emailuser-param-target": "Ҡатнашыусы электрон хат ебәрә",
+       "apihelp-emailuser-param-subject": "Теманың баш һүҙе",
+       "apihelp-emailuser-param-text": "Хат эстәлеге",
+       "apihelp-emailuser-param-ccme": "Был хәбәрҙең копияһын миңә ебәрергә",
+       "apihelp-emailuser-example-email": "Ҡатнашыусыға хат ебәрергә <kbd>WikiSysop</kbd>текст <kbd>Content</kbd>.",
+       "apihelp-expandtemplates-description": "wikitext ҡалыптарын аса.",
+       "apihelp-expandtemplates-param-title": "Бит баш һүҙе",
+       "apihelp-expandtemplates-param-text": "Конвертлау өсөн викитекст",
+       "apihelp-expandtemplates-param-revid": "<nowiki>{{REVISIONID}}</nowiki> һәм шуға оҡшаған  алмаштар өсөн ID-ны яңынан ҡарау",
+       "apihelp-expandtemplates-paramvalue-prop-wikitext": "Киңәйтелгән викитекст",
+       "apihelp-expandtemplates-paramvalue-prop-parsetree": "XML керетелә торған мәғлүмәт ағасы (шәжәрәһе).",
+       "apihelp-feedcontributions-param-feedformat": "Мәғлүмәттәр сығарыу форматы.",
+       "apihelp-feedcontributions-param-year": "Йылдан башлап (һәм элегерәк):",
+       "apihelp-feedcontributions-param-month": "Айҙан башлап (һәм элегерәк):",
+       "apihelp-feedcontributions-param-deletedonly": "Юйылған төҙәтеүҙәрҙе генә күрһәтергә.",
        "apihelp-feedcontributions-param-toponly": "Һуңғы өлгө булған төҙәтеүҙәрҙе генә күрһәтергә",
+       "apihelp-feedcontributions-param-newonly": "Яңы бит яһаған төҙәтеүҙәрҙе генә күрһәтергә",
        "apihelp-feedcontributions-param-showsizediff": "Өлгәоәр араһыдағы күләм айырмаһын күрһәтергә",
+       "apihelp-feedcontributions-example-simple": "Ҡулланыусының өлөшөн күрһәтергә <kbd>Example</kbd>.",
+       "apihelp-feedrecentchanges-param-feedformat": "Мәғлүмәттәр сығарыу форматы.",
+       "apihelp-feedrecentchanges-param-invert": "Һайланғандан башҡа исемдәр арауығы",
+       "apihelp-feedrecentchanges-param-limit": "Ҡайтарылған һөҙөмтәләрҙең максималь һаны.",
        "apihelp-feedrecentchanges-param-from": "Теге ваҡыттын булған үҙгәрештәрҙе күрһәтергә",
+       "apihelp-feedrecentchanges-param-hideminor": "Бәләкәй төҙәтеүҙәрҙе йәшерергә",
+       "apihelp-feedrecentchanges-param-hidebots": "Робот эшләгән төҙәтеүҙәрҙе йәшерергә",
+       "apihelp-feedrecentchanges-param-hideanons": "Аноним ҡатнашыусылар төҙәтеүен йәшерергә",
+       "apihelp-feedrecentchanges-param-hideliu": "Теркәлгән ҡатнашыусылар өлөшөн йәшерергә",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Патрулләнгән төҙәтеүҙәрҙе йәшерергә",
+       "apihelp-feedrecentchanges-param-hidemyself": "Ағымдаға ҡатнашыусы эшләгән үҙгәртеүҙәрҙе йәшерергә.",
+       "apihelp-feedrecentchanges-param-tagfilter": "Тэг буйынса һөҙгөс",
        "apihelp-feedrecentchanges-param-target": "Был биттән һылтанған биттәрҙә һуңғы үҙгәртеүҙәрҙе күрһәтергә",
+       "apihelp-feedrecentchanges-param-showlinkedto": "Киреһенсә, был биткә һылтанма яһаған биттәрҙәге үҙгәртеүҙәрҙе күрһәтергә",
        "apihelp-feedrecentchanges-example-simple": "Һуңғы үҙгәртеүҙәрҙе күрһәтергә.",
-       "apihelp-feedwatchlist-example-default": "Күҙәтеү каналын күрһәтергә"
+       "apihelp-feedrecentchanges-example-30days": "30 көн арауығындағы һуңғы үҙгәртеүҙәрҙе күрһәтергә.",
+       "apihelp-feedwatchlist-param-feedformat": "Мәғлүмәттәр сығарыу форматы.",
+       "apihelp-feedwatchlist-param-linktosections": "Мөмкин булһа, үҙгәртеүҙәр булған бүлеккә тура һылтанма.",
+       "apihelp-feedwatchlist-example-default": "Күҙәтеү каналын күрһәтергә",
+       "apihelp-filerevert-param-filename": "Префиксһыҙ файл исеме",
+       "apihelp-filerevert-param-comment": "Комментарий тейәргә",
+       "apihelp-filerevert-example-revert": "Кире <kbd>Wiki.png</kbd> юрауға <kbd>2011-03-05T15:27:40Z</kbd> ҡайтырға.",
+       "apihelp-help-description": "Күрһәтелгән модулдәр өсөн белешмәне тасуирлау.",
+       "apihelp-help-param-modules": " Белешмәләр тасуирлау өсөн (күрһәткестәр <var>action</var> һәм <var>format</var> дәүмәленә, йәки <kbd>main</kbd>). Модулдәрҙе a <kbd>+</kbd> ярҙамында күрһәтә алаһығыҙ.",
+       "apihelp-help-param-submodules": "Модуль исеменән субмодулдәр өсөн ярҙам индерә",
+       "apihelp-help-param-recursivesubmodules": "Рекурсив рәүешле субмодулдәр өсөн ярҙам индерә.",
+       "apihelp-help-param-helpformat": "Һөҙөмтәгә ярҙам форматы",
+       "apihelp-help-example-main": "Төп модулгә ярҙам",
+       "apihelp-help-example-submodules": "<kbd>action=query</kbd> һәм уның барлыҡ субмодулдәренә ярҙам итегеҙ",
+       "apihelp-help-example-recursive": "Бар белешмә бер бүлектә.",
+       "apihelp-help-example-help": "Модулдең үҙ ярҙамына ярҙам итеү",
+       "apihelp-help-example-query": "Подмодулдәрҙең ике һорауына ярҙам итергә.",
+       "apihelp-imagerotate-description": "Бер йәки бер нисә һүрәтте бороу.",
+       "apihelp-imagerotate-param-rotation": "Һүрәтте сәғәт йөрөшө буйынса нисә градусҡа борорға.",
+       "apihelp-imagerotate-example-simple": "<kbd>File:Example.png</kbd> на <kbd>90</kbd> градусҡа борорға.",
+       "apihelp-imagerotate-example-generator": "Бар һүрәттәрҙе лә <kbd>Category:Flip</kbd> на <kbd>180</kbd> градусҡа борорға.",
+       "apihelp-import-param-summary": "Йомғаҡты импортлау.",
+       "apihelp-import-param-xml": "Тултырылған XML-файл.",
+       "apihelp-import-param-interwikisource": "Интервики-импорт өсөн: Викинан импорт.",
+       "apihelp-import-param-interwikipage": "Интервики-импорт өсөн: битте импортлау.",
+       "apihelp-import-example-import": "Импортларға [[meta:Help:ParserFunctions]]  100 исемдәр арауығында тулы тарихы менән.",
+       "apihelp-login-param-name": "Ҡатнашыусы исеме.",
+       "apihelp-login-param-password": "Серһүҙ.",
+       "apihelp-login-param-domain": "Домен (мотлаҡ түгел).",
+       "apihelp-login-example-login": "Танылыу.",
+       "apihelp-logout-description": "Сығырға һәм сессия мәғлүмәтен юйырға.",
+       "apihelp-mergehistory-description": "Үҙгәртеүҙәр тарихын берләштереү.",
+       "apihelp-mergehistory-param-reason": "Тарихты берләштереү сәбәбе",
+       "apihelp-move-description": "Биттең исемен үҙгәртергә",
+       "apihelp-move-param-to": "Исемен үҙгәртергә тейешле биттең баш һүҙе",
+       "apihelp-move-param-reason": "Үҙгәртеү сәбәбе",
+       "apihelp-move-param-movetalk": "Фекер алышыу бите булһа, исемен үҙгәртергә.",
+       "apihelp-move-param-movesubpages": "Мөмкин булһа, ярҙамсы биттең исемен үҙгәртергә.",
+       "apihelp-move-param-noredirect": "Йүнәлтеүҙәр ҡуймаҫҡа",
+       "apihelp-move-param-watch": "Ағымдағы ҡулланыусының күҙәтеү битенә бит һәм йүнәлтеү өҫтәргә.",
+       "apihelp-move-param-unwatch": "Ағымдағы ҡулланыусының күҙәтеү битендә битте һәм йүнәлтеүҙе юйырға.",
+       "apihelp-move-param-ignorewarnings": "Бөтә иҫкәрмәләргә иғтибар итмәҫкә",
+       "apihelp-move-example-move": "Исемен үҙгәртергә <kbd>Badtitle</kbd>  <kbd>Goodtitle</kbd> йүнәлтеү ҡуймаҫҡа.",
+       "apihelp-opensearch-param-search": "Эҙләү юлы.",
+       "apihelp-opensearch-param-limit": "Ҡайтарылған һөҙөмтәләрҙең максималь һаны.",
+       "apihelp-opensearch-param-namespace": "Эҙләү өсөн исемдәр арауығы",
+       "apihelp-opensearch-param-format": "Мәғлүмәттәр сығарыу форматы.",
+       "apihelp-options-param-reset": "Килешеү буйынса көйләүҙәргә күсергә.",
+       "apihelp-options-example-reset": "Бөтә көйләүҙәрҙе ташларға",
+       "apihelp-paraminfo-description": "API модуле тураһында мәғлүмәт алырға.",
+       "apihelp-paraminfo-param-helpformat": "Белешмә юлы форматы.",
+       "apihelp-parse-example-page": "Битте тикшереү.",
+       "apihelp-parse-example-text": "Тикшереү: wikitext.",
+       "apihelp-patrol-param-rcid": "Яңы ID үҙгәртеүҙәрҙе патрулләү өсөн",
+       "apihelp-patrol-param-revid": "ID мөхәррирҙе патулләү",
+       "apihelp-protect-description": "Битте һаҡлау кимәлен үҙгәртергә",
+       "apihelp-protect-example-protect": "Битте һаҡларға.",
+       "apihelp-purge-param-forcelinkupdate": "Таблицалар бәйләнешен яңыртыу.",
+       "apihelp-query-param-list": "Ниндәй исемлекте ҡулланырға",
+       "apihelp-query-param-meta": "Ниндәй матамәғлүмәт ҡулланырға",
+       "apihelp-query+allcategories-description": "Бөтә категорияларҙы иҫәпләргә",
+       "apihelp-query+allcategories-param-limit": "Нисә категорияны кире ҡайтарырға",
+       "apihelp-query+allcategories-param-prop": "Ниндәй үҙенсәлек алырға:",
+       "apihelp-query+allmessages-param-prop": "Ниндәй үҙенсәлек алырға:"
 }
index 979559c..3108e5b 100644 (file)
@@ -4,7 +4,7 @@
                        "Red Winged Duck"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Дакумэнтацыя]]\n* [[mw:API:FAQ|Частыя пытаньні]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Сьпіс рассылкі]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-аб’явы]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Памылкі і запыты]\n</div>\n<strong>Статус:</strong> усе магчымасьці на гэтай старонцы павінны працаваць, але API знаходзіцца ў актыўнай распрацоўцы і можа зьмяняцца ў любы момант. Падпісвайцеся на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ рассылку mediawiki-api-announce] дзеля паведамленьняў пра абнаўленьні.\n\n<strong>Памылковыя запыты:</strong> калі да API дасылаюцца памылковыя запыты, HTTP-загаловак будзе дасланы з ключом «MediaWiki-API-Error», а потым значэньне загалоўку і код памылкі будуць выстаўленыя на аднолькавае значэньне. Дзеля дадатковай інфармацыі глядзіце [[mw:API:Errors_and_warnings|API: Памылкі і папярэджаньні]].",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Дакумэнтацыя]]\n* [[mw:API:FAQ|Частыя пытаньні]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Сьпіс рассылкі]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-аб’явы]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Памылкі і запыты]\n</div>\n<strong>Статус:</strong> усе магчымасьці на гэтай старонцы павінны працаваць, але API знаходзіцца ў актыўнай распрацоўцы і можа зьмяняцца ў любы момант. Падпісвайцеся на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ рассылку mediawiki-api-announce] дзеля паведамленьняў пра абнаўленьні.\n\n<strong>Памылковыя запыты:</strong> калі да API дасылаюцца памылковыя запыты, HTTP-загаловак будзе дасланы з ключом «MediaWiki-API-Error», а потым значэньне загалоўку і код памылкі будуць выстаўленыя на аднолькавае значэньне. Дзеля дадатковай інфармацыі глядзіце [[mw:API:Errors_and_warnings|API: Памылкі і папярэджаньні]].\n\n<strong>Тэставаньне:</strong> для зручнасьці праверкі API-запытаў, глядзіце [[Special:ApiSandbox]].",
        "apihelp-main-param-action": "Дзеяньне для выкананьня.",
        "apihelp-main-param-format": "Фармат вываду.",
        "apihelp-main-param-maxlag": "Максымальная затрымка можа ўжывацца, калі MediaWiki ўсталяваная ў клястэр з рэплікаванай базай зьвестак. Дзеля захаваньня дзеяньняў, якія выклікаюць затрымку рэплікацыі, гэты парамэтар можа прымусіць кліента чакаць, пакуль затрымка рэплікацыі меншая за яго значэньне. У выпадку доўгай затрымкі, вяртаецца код памылкі <samp>maxlag</samp> з паведамленьнем кшталту <samp>Чаканьне $host: $lag сэкундаў затрымкі</samp>.<br />Глядзіце [[mw:Manual:Maxlag_parameter|Інструкцыя:Парамэтар maxlag]] дзеля дадатковай інфармацыі.",
index b8be085..c93d8ba 100644 (file)
@@ -1,10 +1,14 @@
 {
        "@metadata": {
                "authors": [
-                       "Aftabuzzaman"
+                       "Aftabuzzaman",
+                       "Bodhisattwa"
                ]
        },
+       "apihelp-block-description": "ব্যবহারকারীকে বাধা দিন।",
        "apihelp-createaccount-param-name": "ব্যবহারকারী নাম।",
+       "apihelp-delete-description": "একটি পাতা মুছে ফেলুন।",
+       "apihelp-delete-example-simple": "<kbd>প্রধান পাতা</kbd> মুছে ফেলুন।",
        "apihelp-edit-param-minor": "অনুল্লেখ্য সম্পাদনা।",
        "apihelp-login-example-login": "প্রবেশ"
 }
index b6ddc88..259fe65 100644 (file)
@@ -8,10 +8,11 @@
                        "Cvanca",
                        "Utar",
                        "Macofe",
-                       "Danny B."
+                       "Danny B.",
+                       "LordMsz"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Dokumentace]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-mailová konference]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Oznámení k API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Chyby a požadavky]\n</div>\n<strong>Stav:</strong> Všechny funkce uvedené na této stránce by měly fungovat, ale API se stále aktivně vyvíjí a může se kdykoli změnit. Upozornění na změny získáte přihlášením se k [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-mailové konferenci mediawiki-api-announce].\n\n<strong>Chybné požadavky:</strong> Pokud jsou do API zaslány chybné požadavky, bude vrácena HTTP hlavička s klíčem „MediaWiki-API-Error“ a hodnota této hlavičky a chybový kód budou nastaveny na stejnou hodnotu. Více informací najdete [[mw:API:Errors_and_warnings|v dokumentaci]].",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Dokumentace]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-mailová konference]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Oznámení k API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Chyby a požadavky]\n</div>\n<strong>Stav:</strong> Všechny funkce uvedené na této stránce by měly fungovat, ale API se stále aktivně vyvíjí a může se kdykoli změnit. Upozornění na změny získáte přihlášením se k [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-mailové konferenci mediawiki-api-announce].\n\n<strong>Chybné požadavky:</strong> Pokud jsou do API zaslány chybné požadavky, bude vrácena HTTP hlavička s klíčem „MediaWiki-API-Error“ a hodnota této hlavičky a chybový kód budou nastaveny na stejnou hodnotu. Více informací najdete [[mw:API:Errors_and_warnings|v dokumentaci]].\n\n<strong>Testování:</strong> Pro jednoduché testování požadavků na API zkuste [[Special:ApiSandbox]].",
        "apihelp-main-param-action": "Která akce se má provést.",
        "apihelp-main-param-format": "Formát výstupu.",
        "apihelp-main-param-maxlag": "Maximální zpoždění lze použít, když je MediaWiki nainstalováno na cluster s replikovanou databází. Abyste se vyhnuli zhoršování už tak špatného replikačního zpoždění, můžete tímto parametrem nechat klienta čekat, dokud replikační zpoždění neklesne pod uvedenou hodnotu. V případě příliš vysokého zpoždění se vrátí chybový kód „<samp>maxlag</samp>“ s hlášením typu „<samp>Waiting for $host: $lag seconds lagged</samp>“.<br />Více informací najdete v [[mw:Manual:Maxlag_parameter|příručce]].",
index 305834b..5b67c1f 100644 (file)
        "apihelp-patrol-description": "Kontrolliert eine Seite oder Version.",
        "apihelp-patrol-param-rcid": "Letzte-Änderungen-Kennung, die kontrolliert werden soll.",
        "apihelp-patrol-param-revid": "Versionskennung, die kontrolliert werden soll.",
+       "apihelp-patrol-param-tags": "Auf den Kontroll-Logbuch-Eintrag anzuwendende Änderungsmarkierungen.",
        "apihelp-patrol-example-rcid": "Kontrolliert eine kürzlich getätigte Änderung.",
        "apihelp-patrol-example-revid": "Kontrolliert eine Version",
        "apihelp-protect-description": "Ändert den Schutzstatus einer Seite.",
        "apihelp-protect-param-protections": "Liste der Schutzebenen nach dem Format <kbd>Aktion=Ebene</kbd> (z.B. <kbd>edit=sysop</kbd>).\n\n<strong>HINWEIS:</strong> Wenn eine Aktion nicht angegeben wird, wird deren Schutz entfernt.",
        "apihelp-protect-param-expiry": "Zeitstempel des Schutzablaufs. Wenn nur ein Zeitstempel übergeben wird, ist dieser für alle Seitenschutze gültig. Um eine unendliche Schutzdauer festzulegen, kannst du die Werte <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd> oder <kbd>never</kbd> übergeben.",
        "apihelp-protect-param-reason": "Grund für den Seitenschutz oder dessen Aufhebung.",
+       "apihelp-protect-param-tags": "Auf den Seitenschutz-Logbuch-Eintrag anzuwendende Änderungsmarkierungen.",
        "apihelp-protect-param-cascade": "Aktiviert den Kaskadenschutz (z.&nbsp;B. werden eingebundene Vorlagen und Bilder in dieser Seite geschützt). Wird ignoriert, falls keine der angegebenen Schutzebenen Kaskaden unterstützt.",
        "apihelp-protect-param-watch": "Wenn vorhanden, fügt dieser Parameter die zu (ent-)sperrende Seite der Beobachtungsliste des aktuellen Benutzers hinzu.",
        "apihelp-protect-param-watchlist": "Die Seite bedingungslos zur Beobachtungsliste des aktuellen Benutzers hinzufügen oder von ihr entfernen, Einstellungen verwenden oder Beobachtung nicht ändern.",
        "apihelp-unblock-description": "Einen Benutzer freigeben.",
        "apihelp-unblock-param-id": "ID der Sperre zum Entsperren (über <kbd>list=blocks</kbd> erhalten). Darf nicht zusammen mit <var>$1user</var> verwendet werden.",
        "apihelp-unblock-param-reason": "Grund für die Freigabe.",
+       "apihelp-unblock-param-tags": "Auf den Benutzersperr-Logbuch-Eintrag anzuwendende Änderungsmarkierungen.",
        "apihelp-unblock-example-id": "Sperrkennung #<kbd>105</kbd> freigeben.",
        "apihelp-undelete-param-title": "Titel der wiederherzustellenden Seite.",
        "apihelp-undelete-param-reason": "Grund für die Wiederherstellung.",
+       "apihelp-undelete-param-tags": "Auf den Lösch-Logbuch-Eintrag anzuwendende Änderungsmarkierungen.",
        "apihelp-upload-param-filename": "Ziel-Dateiname.",
        "apihelp-upload-param-tags": "Auf den Datei-Logbuch-Eintrag und die Dateiseitenversion anzuwendende Änderungsmarkierungen.",
        "apihelp-upload-param-text": "Erster Seitentext für neue Dateien.",
index 44d750a..2c5c0db 100644 (file)
@@ -99,7 +99,7 @@
        "apihelp-opensearch-param-format": "Η μορφή των δεδομένων εξόδου.",
        "apihelp-options-example-reset": "Επαναφορά όλων των προτιμήσεων.",
        "apihelp-paraminfo-param-helpformat": "Μορφή των συμβολοσειρών βοήθειας.",
-       "apihelp-patrol-example-revid": "ΠεÏ\81ιÏ\80ολία αναθεώρησης.",
+       "apihelp-patrol-example-revid": "Î\88λεγÏ\87οÏ\82 αναθεώρησης.",
        "apihelp-protect-example-protect": "Προστασία σελίδας.",
        "apihelp-query+users-paramvalue-prop-gender": "Επισημαίνει το φύλο του χρήστη. Επιστρέφει «αρσενικό», «θηλυκό» ή «άγνωστο»",
        "api-help-param-type-limit": "Τύπος: ακέραιος ή <kbd>max</kbd>",
index 6ea643a..2d1542e 100644 (file)
        "apihelp-patrol-description": "Patrol a page or revision.",
        "apihelp-patrol-param-rcid": "Recentchanges ID to patrol.",
        "apihelp-patrol-param-revid": "Revision ID to patrol.",
+       "apihelp-patrol-param-tags": "Change tags to apply to the entry in the patrol log.",
        "apihelp-patrol-example-rcid": "Patrol a recent change.",
        "apihelp-patrol-example-revid": "Patrol a revision.",
 
        "apihelp-protect-param-protections": "List of protection levels, formatted <kbd>action=level</kbd> (e.g. <kbd>edit=sysop</kbd>).\n\n<strong>Note:</strong> Any actions not listed will have restrictions removed.",
        "apihelp-protect-param-expiry": "Expiry timestamps. If only one timestamp is set, it'll be used for all protections. Use <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd>, or <kbd>never</kbd>, for a never-expiring protection.",
        "apihelp-protect-param-reason": "Reason for (un)protecting.",
+       "apihelp-protect-param-tags": "Change tags to apply to the entry in the protection log.",
        "apihelp-protect-param-cascade": "Enable cascading protection (i.e. protect transcluded templates and images used in this page). Ignored if none of the given protection levels support cascading.",
        "apihelp-protect-param-watch": "If set, add the page being (un)protected to the current user's watchlist.",
        "apihelp-protect-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
        "apihelp-unblock-param-id": "ID of the block to unblock (obtained through <kbd>list=blocks</kbd>). Cannot be used together with <var>$1user</var>.",
        "apihelp-unblock-param-user": "Username, IP address or IP range to unblock. Cannot be used together with <var>$1id</var>.",
        "apihelp-unblock-param-reason": "Reason for unblock.",
+       "apihelp-unblock-param-tags": "Change tags to apply to the entry in the block log.",
        "apihelp-unblock-example-id": "Unblock block ID #<kbd>105</kbd>.",
        "apihelp-unblock-example-user": "Unblock user <kbd>Bob</kbd> with reason <kbd>Sorry Bob</kbd>.",
 
        "apihelp-undelete-description": "Restore revisions of a deleted page.\n\nA list of deleted revisions (including timestamps) can be retrieved through [[Special:ApiHelp/query+deletedrevs|list=deletedrevs]], and a list of deleted file IDs can be retrieved through [[Special:ApiHelp/query+filearchive|list=filearchive]].",
        "apihelp-undelete-param-title": "Title of the page to restore.",
        "apihelp-undelete-param-reason": "Reason for restoring.",
+       "apihelp-undelete-param-tags": "Change tags to apply to the entry in the deletion log.",
        "apihelp-undelete-param-timestamps": "Timestamps of the revisions to restore. If both <var>$1timestamps</var> and <var>$1fileids</var> are empty, all will be restored.",
        "apihelp-undelete-param-fileids": "IDs of the file revisions to restore. If both <var>$1timestamps</var> and <var>$1fileids</var> are empty, all will be restored.",
        "apihelp-undelete-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
diff --git a/includes/api/i18n/eo.json b/includes/api/i18n/eo.json
new file mode 100644 (file)
index 0000000..45060c2
--- /dev/null
@@ -0,0 +1,13 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Robin van der Vliet"
+               ]
+       },
+       "apihelp-createaccount-param-name": "Uzantnomo.",
+       "apihelp-delete-description": "Forigi paĝon.",
+       "apihelp-edit-example-edit": "Redakti paĝon.",
+       "apihelp-login-param-name": "Uzantnomo.",
+       "apihelp-login-param-password": "Pasvorto.",
+       "apihelp-login-example-login": "Ensaluti."
+}
index 9e60fb9..2570bc1 100644 (file)
        "apihelp-unblock-example-user": "Desbloquear al usuario <kbd>Bob</kbd> con el motivo <kbd>Lo siento, Bob</kbd>",
        "apihelp-undelete-param-reason": "Motivo de la restauración.",
        "apihelp-undelete-example-revisions": "Restaurar dos revisiones de la página <kbd>Main Page</kbd>.",
+       "apihelp-upload-param-tags": "Cambiar etiquetas para aplicar a la entrada del registro de subidas y a la revisión de página de archivo.",
        "apihelp-upload-param-watch": "Vigilar la página.",
        "apihelp-upload-param-ignorewarnings": "Ignorar las advertencias.",
        "apihelp-upload-example-url": "Subir desde una URL.",
index a5af63a..a429583 100644 (file)
                        "Mjbmr",
                        "Ebraminio",
                        "Macofe",
-                       "Huji"
+                       "Huji",
+                       "Ladsgroup",
+                       "Freshman404"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|مستندات]]\n* [[mw:API:FAQ|پرسش‌های متداول]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api فهرست پست الکترونیکی]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce اعلانات رابط برنامه‌نویسی کاربردی]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R ایرادها و درخواست‌ها]\n</div>\n\n<strong>وضعیت:</strong> تمام ویژگی‌هایی که در این صفحه نمایش یافته‌اند باید کار بکنند، ولی رابط برنامه‌نویسی کاربردی کماکان در حال توسعه است، و ممکن است در هر زمان تغییر بکند. به عضویت [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ فهرست پست الکترونیکی mediawiki-api-announce] در بیایید تا از تغییرات باخبر شوید.\n\n<strong>درخواست‌های معیوب:</strong> وقتی درخواست‌های معیوب به رابط برنامه‌نویسی کاربردی فرستاده شوند، یک سرایند اچ‌تی‌تی‌پی با کلید «MediaWiki-API-Erorr» فرستاده می‌شود و بعد هم مقدار سرایند و هم کد خطای بازگردانده شده  هر دو به یک مقدار نسبت داده می‌شوند. برای اطلاعات بیشتر [[mw:API:Errors_and_warnings|API: Errors and warnings]] را ببینید.",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|مستندات]]\n* [[mw:API:FAQ|پرسش‌های متداول]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api فهرست پست الکترونیکی]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce اعلانات رابط برنامه‌نویسی کاربردی]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R ایرادها و درخواست‌ها]\n</div>\n\n<strong>وضعیت:</strong> تمام ویژگی‌هایی که در این صفحه نمایش یافته‌اند باید کار بکنند، ولی رابط برنامه‌نویسی کاربردی کماکان در حال توسعه است، و ممکن است در هر زمان تغییر بکند. به عضویت [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ فهرست پست الکترونیکی mediawiki-api-announce] در بیایید تا از تغییرات باخبر شوید.\n\n<strong>درخواست‌های معیوب:</strong> وقتی درخواست‌های معیوب به رابط برنامه‌نویسی کاربردی فرستاده شوند، یک سرایند اچ‌تی‌تی‌پی با کلید «MediaWiki-API-Erorr» فرستاده می‌شود و بعد هم مقدار سرایند و هم کد خطای بازگردانده شده  هر دو به یک مقدار نسبت داده می‌شوند. برای اطلاعات بیشتر [[mw:API:Errors_and_warnings|API: Errors and warnings]] را ببینید.\n\n<strong>آزمایش:</strong> برای انجام درخواست‌های API آزمایشی [[Special:ApiSandbox]] را ببینید.",
        "apihelp-main-param-action": "کدام عملیات را انجام دهد.",
        "apihelp-main-param-format": "فرمت خروجی.",
        "apihelp-main-param-curtimestamp": "برچسب زمان کنونی را در نتیجه قرار دهید.",
@@ -30,6 +32,9 @@
        "apihelp-block-param-reblock": "اگر کاربر پیش از این مسدود شده‌است، مسدود موجود را بازنویسی کن.",
        "apihelp-block-param-watchuser": "صفحه‌های کاربر و بحث کاربر نشانی آی‌پی یا کاربر را پی‌گیری کنید.",
        "apihelp-block-example-ip-simple": "آی‌پی <kbd>۱۹۲٫۰٫۲٫۵</kbd> را برای سه روز همراه دلیل <kbd>برخورد اول</kbd> ببندید",
+       "apihelp-checktoken-param-token": "توکن برای تست",
+       "apihelp-checktoken-param-maxtokenage": "حداکثر عمر توکن به ثانیه.",
+       "apihelp-checktoken-example-simple": "تست اعتبار یک توکن <kbd>csrf</kbd>",
        "apihelp-clearhasmsg-description": "پرچم <code>hasmsg</code> را برای کاربر جاری پاک کن.",
        "apihelp-clearhasmsg-example-1": "پاک‌کردن پرچم <code>hasmsg</code> برای کاربر جاری",
        "apihelp-compare-description": "تفاوت بین ۲ صفحه را بیابید.\n\nشما باید یک شماره بازبینی، یک عنوان صفحه، یا یک شناسه صفحه برای هر دو «از» و «به» مشخص کنید.",
        "apihelp-login-example-login": "ورود",
        "apihelp-logout-description": "خروج به همراه پاک نمودن اطلاعات این نشست",
        "apihelp-logout-example-logout": "خروج کاربر فعلی",
+       "apihelp-mergehistory-description": "ادغام تاریخچه صفحات",
        "apihelp-move-description": "انتقال صفحه",
        "apihelp-move-param-to": "عنوانی که قصد دارید صفحه را به آن نام تغییر دهید.",
        "apihelp-move-param-reason": "دلیل انتقال",
        "apihelp-opensearch-param-suggest": "کاری نکنید اگر <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> false است.",
        "apihelp-opensearch-param-format": "فرمت خروجی.",
        "apihelp-opensearch-example-te": "یافتن صفحه‌هایی که با <kbd>Te</kbd> آغاز می‌شوند",
+       "apihelp-options-param-reset": "ترجیحات را به مقادیر پیش فرض سایت بازمی گرداند.",
        "apihelp-options-example-reset": "بازنشانی همه تنظیمات.",
        "apihelp-paraminfo-param-helpformat": "ساختار راهنمای رشته‌ها",
        "apihelp-parse-example-page": "تجزیه یک صفحه.",
index 07a5c94..b1089c7 100644 (file)
        "apihelp-patrol-description": "Patrouiller une page ou une révision.",
        "apihelp-patrol-param-rcid": "ID de modification récente à patrouiller.",
        "apihelp-patrol-param-revid": "ID de révision à patrouiller.",
+       "apihelp-patrol-param-tags": "Modifier les balises à appliquer à l’entrée dans le journal de surveillance.",
        "apihelp-patrol-example-rcid": "Patrouiller une modification récente",
        "apihelp-patrol-example-revid": "Patrouiller une révision",
        "apihelp-protect-description": "Modifier le niveau de protection d’une page.",
        "apihelp-protect-param-protections": "Liste des niveaux de protection, au format <kbd>action=niveau</kbd> (par ex. <kbd>edit=sysop</kbd>).\n\n<strong>NOTE :<strong> Toutes les actions non listées auront leur restrictions supprimées.",
        "apihelp-protect-param-expiry": "Horodatages d’expiration. Si un seul horodatage est fourni, il sera utilisé pour toutes les protections. Utiliser <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd> ou <kbd>never</kbd> pour une protection sans expiration.",
        "apihelp-protect-param-reason": "Motif de (dé)protection.",
+       "apihelp-protect-param-tags": "Modifier les balises à appliquer à l’entrée dans le journal de protection.",
        "apihelp-protect-param-cascade": "Activer la protection en cascade (c’est-à-dire protéger les modèles transclus et les images utilisées dans cette page). Ignoré si aucun des niveaux de protection fournis ne supporte la mise en cascade.",
        "apihelp-protect-param-watch": "Si activé, ajouter la page (dé)protégée à la liste de suivi de l'utilisateur actuel.",
        "apihelp-protect-param-watchlist": "Ajouter ou supprimer sans condition la page de la liste de suivi de l'utilisateur actuel, utiliser les préférences ou ne pas modifier le suivi.",
        "apihelp-unblock-param-id": "ID du blocage à lever (obtenu via <kbd>list=blocks</kbd>). Impossible à utiliser avec <var>$1user</var>.",
        "apihelp-unblock-param-user": "Nom d’utilisateur, adresse IP ou plage d’adresse IP à débloquer. Impossible à utiliser avec <var>$1id</var>.",
        "apihelp-unblock-param-reason": "Motif de déblocage.",
+       "apihelp-unblock-param-tags": "Modifier les balises à appliquer à l’entrée dans le journal de blocage.",
        "apihelp-unblock-example-id": "Lever le blocage d’ID #<kbd>105</kbd>.",
        "apihelp-unblock-example-user": "Débloquer l’utilisateur <kbd>Bob</kbd> avec le motif <kbd>Désolé Bob</kbd>.",
        "apihelp-undelete-description": "Restaurer les révisions d’une page supprimée.\n\nUne liste des révisions supprimées (avec les horodatages) peut être récupérée via [[Special:ApiHelp/query+deletedrevs|list=deletedrevs]], et une liste d’IDs de fichier supprimé peut être récupérée via [[Special:ApiHelp/query+filearchive|list=filearchive]].",
        "apihelp-undelete-param-title": "Titre de la page à restaurer.",
        "apihelp-undelete-param-reason": "Motif de restauration.",
+       "apihelp-undelete-param-tags": "Modifier les balises à appliquer à l’entrée dans le journal de suppression.",
        "apihelp-undelete-param-timestamps": "Horodatages des révisions à restaurer. Si <var>$1timestamps</var> et <var>$1fileids</var> sont vides, toutes seront restaurées.",
        "apihelp-undelete-param-fileids": "IDs des révisions de fichier à restaurer. Si <var>$1timestamps</var> et <var>$1fileids</var> sont vides, toutes seront restaurées.",
        "apihelp-undelete-param-watchlist": "Ajouter ou supprimer la page de la liste de suivi de l’utilisateur actuel sans condition, utiliser les préférences ou ne pas modifier le suivi.",
index e66a900..6841ab7 100644 (file)
        "apihelp-patrol-description": "Patrullar unha páxina ou edición.",
        "apihelp-patrol-param-rcid": "ID de modificación recente a vixiar.",
        "apihelp-patrol-param-revid": "ID de revisión a vixiar.",
+       "apihelp-patrol-param-tags": "Cambiar as etiquetas a aplicar na entrada do rexistro de patrullas.",
        "apihelp-patrol-example-rcid": "Patrullar un cambio recente",
        "apihelp-patrol-example-revid": "Patrullar unha revisión",
        "apihelp-protect-description": "Cambiar o nivel de protección dunha páxina.",
        "apihelp-protect-param-protections": "Lista dos niveis de protección, con formato <kbd>action=level</kbd> (p.ex. <kbd>edit=sysop</kbd>).\n\n<strong>Nota:</strong> Todas as accións que non estean listadas terán restriccións para ser eliminadas.",
        "apihelp-protect-param-expiry": "Selos de tempo de caducidade. Se só se indica un selo de tempo, usarase para todas as proteccións. Use <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd>, ou <kbd>never</kbd>, para unha protección sen caducidade.",
        "apihelp-protect-param-reason": "Razón para (des)protexer.",
+       "apihelp-protect-param-tags": "Cambiar as etiquetas a aplicar na entrada do rexistro de protección.",
        "apihelp-protect-param-cascade": "Activar a protección en cascada (por exemplo, protexer os modelos transcluídos e as imaxes usadas nesta páxina). Ignórase se ningún dos niveis de protección soporta a protección en cascada.",
        "apihelp-protect-param-watch": "Se se define este parámetro, engadir a páxina que se (des)protexe á lista de vixilancia do usuario actual.",
        "apihelp-protect-param-watchlist": "Engadir ou eliminar sen condicións a páxina da lista de vixiancia do usuario actual, use as preferencias ou non cambie a vixiancia.",
        "apihelp-unblock-param-id": "ID do bloque a desbloquear (obtido de <kbd>list=blocks</kbd>). Non pode usarse xunto con <var>$1user</var>.",
        "apihelp-unblock-param-user": "Nome de usuario, dirección IP ou rango de direccións IP a desbloquear. Non pode usarse xunto con <var>$1id</var>.",
        "apihelp-unblock-param-reason": "Razón para desbloquear.",
+       "apihelp-unblock-param-tags": "Cambiar as etiquetas a aplicar na entrada do rexistro de bloqueo.",
        "apihelp-unblock-example-id": "Desbloquear bloqueo ID #<kbd>105</kbd>.",
        "apihelp-unblock-example-user": "Desbloquear usuario <kbd>Bob</kbd> con razón <kbd>Síntoo Bob</kbd>.",
        "apihelp-undelete-description": "Restaurar modificacións dunha páxina borrada.\n\nUnha lista de modificacións borradas (incluíndo os seus selos de tempo) pode consultarse a través de [[Special:ApiHelp/query+deletedrevs|list=deletedrevs]], e unha lista de IDs de ficheiros borrados pode consultarse a través de [[Special:ApiHelp/query+filearchive|list=filearchive]].",
        "apihelp-undelete-param-title": "Título da páxina a restaurar.",
        "apihelp-undelete-param-reason": "Razón para restaurar.",
+       "apihelp-undelete-param-tags": "Cambiar as etiquetas a aplicar na entrada do rexistro de borrado.",
        "apihelp-undelete-param-timestamps": "Selos de tempo das modificacións a restaurar. Se <var>$1timestamps</var> e <var>$1fileids</var> están baleiras, restaurarase todo.",
        "apihelp-undelete-param-fileids": "IDs das modificacións de ficheiro a restaurar. Se <var>$1timestamps</var> e <var>$1fileids</var> están baleiras, serán restauradas todas.",
        "apihelp-undelete-param-watchlist": "Engadir ou eliminar a páxina da lista de vixiancia do usuario actual sen condicións, use as preferencias ou non cambie a vixiancia.",
        "apihelp-upload-description": "Subir un ficheiro, ou obter o estado de subas pedentes.\n\nHai varios métodos dispoñibles:\n*Subir o contido do ficheiro directamente, usando o parámetro <var>$1file</var>.\n*Subir o ficheiro por partes, usando os parámetros <var>$1filesize</var>, <var>$1chunk</var>, e <var>$1offset</var>.\n*Mandar ó servidor MediaWiki que colla un ficheiro dunha URL, usando o parámetro <var>$1url</var>.\n*Completar unha suba anterior que fallou a causa dos avisos, usando o parámetro <var>$1filekey</var>. \nTeña en conta que o HTTP POST debe facerse como suba de ficheiro (p.ex. usando <code>multipart/form-data</code>)cando se envie o <var>$1file</var>.",
        "apihelp-upload-param-filename": "Nome de ficheiro obxectivo.",
        "apihelp-upload-param-comment": "Subir comentario. Tamén usado como texto da páxina inicial para ficheiros novos se non se especifica <var>$1text</var>.",
+       "apihelp-upload-param-tags": "Cambiar etiquetas a aplicar á entrada do rexistro de subas e á revisión de páxina de ficheiro.",
        "apihelp-upload-param-text": "Texto da páxina inicial para novos ficheiros.",
        "apihelp-upload-param-watch": "Vixiar a páxina.",
        "apihelp-upload-param-watchlist": "Engadir ou eliminar sen condicións a páxina da lista de vixiancia do usuario actual, use as preferencias ou non cambie a vixiancia.",
index e641102..618fbc7 100644 (file)
@@ -10,7 +10,8 @@
                        "LaG roiL",
                        "Elyashiv",
                        "Umherirrender",
-                       "Macofe"
+                       "Macofe",
+                       "MojoMann"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|תיעוד]]\n* [[mw:API:FAQ|שו\"ת]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api רשימת דיוור]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce הודעות על API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R באגים ובקשות]\n</div>\n<strong>מצב:</strong> כל האפשרויות שמוצגות בדף הזה אמורות לעבוד, אבל ה־API עדיין בפיתוח פעיל, ויכול להשתנות בכל זמן. עשו מינוי ל[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ רשימת הדיוור mediawiki-api-announce] להודעות על עדכונים.\n\n<strong>בקשות שגויות:</strong> כשבקשות שגויות נשלחות ל־API, תישלח כותרת HTTP עם המפתח \"MediaWiki-API-Error\" ואז גם הערך של הכותרת וגם קוד השגיאה יוגדרו לאותו ערך. למידע נוסף ר' [[mw:API:Errors_and_warnings|API: שגיאות ואזהרות]].\n\n<strong>בדיקה:</strong> לבדיקה קלה יותר של בקשות ר' [[Special:ApiSandbox]].",
        "apihelp-patrol-description": "לנטר דף או גרסה.",
        "apihelp-patrol-param-rcid": "מזהה שינויים אחרונים לניטור.",
        "apihelp-patrol-param-revid": "מזהה גרסה לניטור.",
+       "apihelp-patrol-param-tags": "תגי שינוי שיחולו על העיול ביומן הניטור.",
        "apihelp-patrol-example-rcid": "לנטר עיול משינויים אחרונים.",
        "apihelp-patrol-example-revid": "לנטר גרסה.",
        "apihelp-protect-description": "לשנות את רמת ההגנה של דף.",
        "apihelp-protect-param-protections": "רשימת רמות הכנה, בתסדיר <kbd>action=level</kbd> (למשל <kbd>edit=sysop</kbd>).",
        "apihelp-protect-param-expiry": "חותמי־זמן של תפוגה. אם הוגדר רק חותם־זמן אחד, הוא ישמש לכל ההגנות. יש להשתמש ב־<kbd>infinite</kbd>‏, <kbd>indefinite</kbd>‏, <kbd>infinity</kbd>, או <kbd>never</kbd> להגנה שלא פגה לעולם.",
        "apihelp-protect-param-reason": "סיבה להגנה או הסרת הגנה.",
+       "apihelp-protect-param-tags": "תגי שינוי שיחולו על העיול ביומן ההגנה.",
        "apihelp-protect-param-cascade": "הפעלת הגנה מדורגת (כלומר, להגן על דפים שמוכללים בדף הזה ועל תמונות שמשמות בו). אין לזה השפעה אם אף אחת מרמות ההגנה שניתנו אינה תומכת בדירוג.",
        "apihelp-protect-param-watch": "אם זה מוגדר, הוספת הדף שהגנה נוספת אליו או מוסרת ממנו לרשימת המעקב של המשתמש הנוכחי.",
        "apihelp-protect-param-watchlist": "הוספה או הסרה של הדף ללא תנאי מרשימת המעקב של המשתמש הנוכחי, להשתמש בהעדפות או לא לשנות את המעקב.",
        "apihelp-unblock-param-id": "מזהה החסימה לשחרור (מתקבל דרך <kbd>list=blocks</kbd>). לא יכול לשמש יחד עם <var>$1user</var>.",
        "apihelp-unblock-param-user": "שם משתמש, כתובת IP או טווח IP לחסימה. לא יכול לשמש יחד עם <var>$1id</var>",
        "apihelp-unblock-param-reason": "סיבה להסרת חסימה.",
+       "apihelp-unblock-param-tags": "תגי שינוי שיחולו על העיול ביומן החסימה.",
        "apihelp-unblock-example-id": "לשחרר את החסימה עם מזהה #<kbd>105</kbd>.",
        "apihelp-unblock-example-user": "לשחרר את החסימה של המשתמש <kbd>Bob</kbd> עם הסיבה <kbd>Sorry Bob</kbd>.",
        "apihelp-undelete-description": "שחזור גרסאות של דף מחוק.\n\nאפשר לאחזר רשימת גרסאות מחוקות (כולל חותמי־זמן) דרך [[Special:ApiHelp/query+deletedrevs|list=deletedrevs]], ואפשר לאחזר רשימת מזהי קבצים מחוקים דרך [[Special:ApiHelp/query+filearchive|list=filearchive]].",
        "apihelp-undelete-param-title": "שם הדף לשחזור ממחיקה.",
        "apihelp-undelete-param-reason": "סיבה לשחזור.",
+       "apihelp-undelete-param-tags": "תגי שינוי שיחולו על העיול ביומן המחיקה.",
        "apihelp-undelete-param-timestamps": "חותמי־זמן של הגרסה לשחזור. אם גם <var>$1timestamps</var> וגם <var>$1fileids</var> ריקים, הכול ישוחזר.",
        "apihelp-undelete-param-fileids": "מזהי גרסאות הקובץ לשחזור. אם גם <var>$1timestamps</var> וגם <var>$1fileids</var> ריקים, הכול ישוחזר.",
        "apihelp-undelete-param-watchlist": "הוספה או הסרה של הדף ללא תנאי מרשימת המעקב של המשתמש הנוכחי, להשתמש בהעדפות או לא לשנות את המעקב.",
        "apihelp-upload-description": "העלאת קובץ, או קבלת מצב ההעלאות הממתינות.\n\nיש מספר שיטות:\n* להעלות את הקובץ ישירות, באמצעות הפרמטר <var>$1file</var>.\n* להעלות את הקובץ בחלקים, באמצעות הפרמטרים <var>$1filesize</var>‏, <var>$1chunk</var> ו־<var>$1offset</var>.\n* לגרום לשרת מדיה־ויקי לאחזר את הקובץ מ־URL באמצעות הפרמטר <var>$1url</var>.\n* להשלים העלאה קודמת שנכשלה בשל אזהרות באמצעות הפרמטר <var>$1filekey</var>.\nלתשומך לבך, יש לעשות את HTTP POST בתור העלאת קובץ (כלומר באמצעות <code>multipart/form-data</code>) בעת שליחת ה־<var>$1file</var>.",
        "apihelp-upload-param-filename": "שם קובץ היעד.",
        "apihelp-upload-param-comment": "הערת העלאה. משמש גם בתור טקסט הדף ההתחלתי עבור קבצים חדשים אם <var>$1text</var> אינו מצוין.",
-       "apihelp-upload-param-tags": "ת×\92×\99 ×©×\99× ×\95×\99 ×\9c×\94×\97×\99×\9c ×¢×\9c ×¢×\99×\95×\9c×\99 ×\99×\95×\9e×\9f ×\94×¢×\9c×\90×\95ת ×\95×¢×\9c ×\92רסת דף הקובץ.",
+       "apihelp-upload-param-tags": "ש×\99× ×\95×\99 ×ª×\92×\99×\9d ×\9c×\94×\97×\9c×\94 ×\9cרש×\95×\9e×\95ת ×\94×\94×¢×\9c×\90×\94 ×\95×\9c×\92רס×\90×\95ת דף הקובץ.",
        "apihelp-upload-param-text": "טקסט הדף ההתחלתי לקבצים חדשים.",
        "apihelp-upload-param-watch": "לעקוב אחרי הדף.",
        "apihelp-upload-param-watchlist": "הוספה או הסרה של הדף ללא תנאי מרשימת המעקב של המשתמש הנוכחי, להשתמש בהעדפות או לא לשנות את המעקב.",
index ae4c71a..2825a73 100644 (file)
        "apihelp-feedcontributions-param-deletedonly": "Mostra solo i contribuiti cancellati.",
        "apihelp-feedcontributions-param-toponly": "Mostra solo i contributi che sono le ultime versioni per la pagina.",
        "apihelp-feedcontributions-param-newonly": "Visualizza solo le modifiche che sono creazioni di pagina.",
+       "apihelp-feedrecentchanges-param-feedformat": "Il formato del feed.",
+       "apihelp-feedrecentchanges-param-limit": "Numero massimo di risultati da restituire.",
        "apihelp-feedrecentchanges-param-hideminor": "Nascondi le modifiche minori.",
        "apihelp-feedrecentchanges-param-hidebots": "Nascondi le modifiche apportate da bot.",
        "apihelp-feedrecentchanges-param-hideanons": "Nascondi le modifiche fatte da utenti anonimi.",
        "apihelp-feedrecentchanges-param-showlinkedto": "Mostra solo le modifiche alle pagine collegate a quella specificata.",
        "apihelp-feedrecentchanges-example-simple": "Mostra le ultime modifiche.",
        "apihelp-feedrecentchanges-example-30days": "Mostra le modifiche degli ultimi 30 giorni.",
+       "apihelp-feedwatchlist-param-feedformat": "Il formato del feed.",
        "apihelp-feedwatchlist-param-linktosections": "Collega direttamente alla sezione modificata, se possibile.",
        "apihelp-filerevert-description": "Ripristina un file ad una versione precedente.",
        "apihelp-filerevert-param-filename": "Nome del file di destinazione, senza il prefisso 'File:'.",
        "apihelp-move-param-noredirect": "Non creare un rinvio.",
        "apihelp-move-param-watch": "Aggiunge la pagina e il redirect agli osservati speciali dell'utente attuale.",
        "apihelp-move-param-ignorewarnings": "Ignora i messaggi di avvertimento del sistema.",
+       "apihelp-opensearch-param-limit": "Numero massimo di risultati da restituire.",
        "apihelp-opensearch-param-format": "Il formato dell'output.",
        "apihelp-opensearch-example-te": "Trova le pagine che iniziano con <kbd>Te</kbd>.",
        "apihelp-options-example-reset": "Reimposta tutte le preferenze.",
        "apihelp-parse-example-text": "Analizza wikitext.",
        "apihelp-parse-example-texttitle": "Analizza wikitext, specificando il titolo della pagina.",
        "apihelp-parse-example-summary": "Analizza un oggetto.",
+       "apihelp-patrol-param-tags": "Modifica etichette da applicare all'elemento del registro delle verifiche.",
+       "apihelp-protect-description": "Modifica il livello di protezione di una pagina.",
+       "apihelp-protect-param-title": "Titolo della pagina da (s)proteggere. Non può essere usato insieme con $1pageid.",
+       "apihelp-protect-param-pageid": "ID della pagina da (s)proteggere. Non può essere usato insieme con $1title.",
+       "apihelp-protect-param-tags": "Modifica etichette da applicare all'elemento del registro delle protezioni.",
        "apihelp-protect-example-protect": "Proteggi una pagina.",
        "apihelp-query-param-export": "Esporta la versione attuale di tutte le pagine ottenute o generate.",
        "apihelp-query+allcategories-param-dir": "Direzione dell'ordinamento.",
+       "apihelp-query+allcategories-param-limit": "Quante categorie restituire.",
        "apihelp-query+allcategories-param-prop": "Quali proprietà ottenere:",
+       "apihelp-query+allcategories-paramvalue-prop-size": "Aggiungi il numero di pagine nella categoria.",
+       "apihelp-query+allcategories-paramvalue-prop-hidden": "Etichetta categorie che sono nascoste con <code>_&#95;HIDDENCAT_&#95;</code>.",
+       "apihelp-query+allcategories-example-size": "Elenca categorie con informazioni sul numero di pagine in ognuna.",
+       "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Può essere utilizzato solo con <var>$3user</var>.",
+       "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Non può essere utilizzato con <var>$3user</var>.",
+       "apihelp-query+alldeletedrevisions-example-user": "Elenca gli ultimi 50 contributi cancellati dell'utente <kbd>Example</kbd>.",
+       "apihelp-query+alldeletedrevisions-example-ns-main": "Elenca le prime 50 versioni cancellate nel namespace principale.",
        "apihelp-query+allfileusages-paramvalue-prop-title": "Aggiunge il titolo del file.",
        "apihelp-query+allfileusages-param-limit": "Quanti elementi totali restituire.",
        "apihelp-query+allfileusages-param-dir": "La direzione in cui elencare.",
        "apihelp-query+allimages-param-sort": "Proprietà di ordinamento.",
        "apihelp-query+allimages-param-dir": "La direzione in cui elencare.",
+       "apihelp-query+allimages-param-limit": "Quante immagini in totale restituire.",
+       "apihelp-query+allimages-example-B": "Mostra un elenco di file a partire dalla lettera <kbd>B</kbd>.",
        "apihelp-query+alllinks-paramvalue-prop-title": "Aggiunge il titolo del collegamento.",
        "apihelp-query+alllinks-param-limit": "Quanti elementi totali restituire.",
        "apihelp-query+alllinks-param-dir": "La direzione in cui elencare.",
        "apihelp-query+alltransclusions-param-limit": "Quanti elementi totali restituire.",
        "apihelp-query+alltransclusions-param-dir": "La direzione in cui elencare.",
        "apihelp-query+allusers-param-dir": "Direzione dell'ordinamento.",
+       "apihelp-query+allusers-param-limit": "Quanti nomi utente totali restituire.",
        "apihelp-query+backlinks-description": "Trova tutte le pagine che puntano a quella specificata.",
        "apihelp-query+backlinks-param-dir": "La direzione in cui elencare.",
        "apihelp-query+backlinks-param-redirect": "Se la pagina collegata è un redirect, trova tutte le pagine che puntano al redirect. Il limite massimo è dimezzato.",
        "apihelp-tokens-param-type": "Tipi di token da richiedere.",
        "apihelp-tokens-example-edit": "Recupera un token di modifica (il predefinito).",
        "apihelp-unblock-description": "Sblocca un utente",
+       "apihelp-unblock-param-tags": "Modifica etichette da applicare all'elemento del registro dei blocchi.",
        "apihelp-undelete-param-title": "Titolo della pagina da ripristinare.",
+       "apihelp-undelete-param-tags": "Modifica etichette da applicare all'elemento del registro delle cancellazioni.",
        "apihelp-upload-example-url": "Carica da un URL.",
        "apihelp-userrights-param-user": "Nome utente.",
        "apihelp-userrights-param-userid": "ID utente.",
index c811f56..979f023 100644 (file)
        "apihelp-managetags-example-activate": "<kbd>spam</kbd> という名前のタグを <kbd>For use in edit patrolling</kbd> という理由で有効化する",
        "apihelp-managetags-example-deactivate": "<kbd>No longer required</kbd> という理由でタグ <kbd>spam</kbd> を無効化する",
        "apihelp-mergehistory-description": "ページの履歴を統合する。",
+       "apihelp-mergehistory-param-reason": "履歴の統合の理由。",
+       "apihelp-mergehistory-example-merge": "<kbd>Oldpage</kbd> のすべての履歴を <kbd>Newpage</kbd> に統合する。",
        "apihelp-move-description": "ページを移動します。",
        "apihelp-move-param-from": "移動するページのページ名です。<var>$1fromid</var> とは同時に使用できません。",
        "apihelp-move-param-fromid": "移動するページのページIDです。<var>$1from</var> とは同時に使用できません。",
        "apihelp-paraminfo-param-querymodules": "クエリモジュール名のリスト (<var>prop</var>, <var>meta</var> or <var>list</var> パラメータの値)。<kbd>$1querymodules=foo</kbd> の代わりに <kbd>$1modules=query+foo</kbd> を使用してください。",
        "apihelp-paraminfo-example-1": "<kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>, and <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> に関する情報を表示する。",
        "apihelp-parse-param-summary": "構文解析のための要約",
+       "apihelp-parse-param-page": "このページの内容を構文解析します。<var>$1text</var> および <var>$1title</var> とは同時に使用できません。",
        "apihelp-parse-param-redirects": "もし <var>$1page</var> や <var>$1pageid</var> に転送ページが指定された場合、それを解決する。",
        "apihelp-parse-param-prop": "どの情報を取得するか:",
        "apihelp-parse-paramvalue-prop-text": "ウィキテキストの解析されたテキストを提供します。",
        "apihelp-parse-example-page": "ページをパース",
        "apihelp-parse-example-text": "ウィキテキストをパース",
        "apihelp-parse-example-summary": "要約を構文解析します。",
-       "apihelp-patrol-description": "ã\83\9aã\83¼ã\82¸ã\81¾ã\81\9fã\81¯ç\89\88ã\82\92å·¡å\9b\9eæ¸\88ã\81¿ã\81«ã\81\97ã\81¾ã\81\99。",
+       "apihelp-patrol-description": "ã\83\9aã\83¼ã\82¸ã\81¾ã\81\9fã\81¯ç\89\88ã\82\92å·¡å\9b\9eæ¸\88ã\81¿ã\81«ã\81\99ã\82\8b。",
        "apihelp-patrol-param-rcid": "巡回済みにする最近の更新ID。",
        "apihelp-patrol-param-revid": "巡回済みにする版ID。",
+       "apihelp-patrol-param-tags": "巡回記録の項目に適用する変更タグ。",
        "apihelp-patrol-example-rcid": "最近の更新を巡回",
        "apihelp-patrol-example-revid": "版を巡回済みにする。",
        "apihelp-protect-description": "ページの保護レベルを変更します。",
        "apihelp-protect-param-protections": "<kbd>action=level</kbd> の形式 (例えば、<kbd>edit=sysop</kbd>) で整形された、保護レベルの一覧。\n\n<strong>注意: </strong> ここに列挙されなかった操作の制限は解除されます。",
        "apihelp-protect-param-expiry": "有効期限です。タイムスタンプがひとつだけ指定された場合は、それがすべての保護に適用されます。無期限の保護を行う場合は<kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd>, または <kbd>never</kbd> を指定します。",
        "apihelp-protect-param-reason": "保護(解除)の理由。",
+       "apihelp-protect-param-tags": "保護記録の項目に適用する変更タグ。",
        "apihelp-protect-param-watch": "指定されると、保護(解除)するページが現在の利用者のウォッチリストに追加されます。",
        "apihelp-protect-example-protect": "ページを保護する。",
        "apihelp-protect-example-unprotect": "制限値を <kbd>all</kbd> にしてページの保護を解除する。",
        "apihelp-query+alllinks-param-prefix": "この値で始まるすべてのリンクされたページを検索する。",
        "apihelp-query+alllinks-param-unique": "リンクされたページ名を一度だけ表示します。<kbd>$1prop=ids</kbd> とは同時に使用できません。ジェネレーターとして使用される場合、リンク元ではなくリンク先のページを生成します。",
        "apihelp-query+alllinks-param-prop": "どの情報を結果に含めるか:",
+       "apihelp-query+alllinks-paramvalue-prop-ids": "リンクしているページのページIDを追加します ($1unique とは同時に使用できません)。",
        "apihelp-query+alllinks-paramvalue-prop-title": "リンクのページ名を追加します。",
        "apihelp-query+alllinks-param-namespace": "列挙する名前空間。",
+       "apihelp-query+alllinks-param-limit": "返す項目の総数。",
        "apihelp-query+alllinks-param-dir": "一覧表示する方向。",
        "apihelp-query+alllinks-example-B": "<kbd>B</kbd> で始まるリンクされたページ (存在しないページも含む)を、リンク元のページIDとともに表示する。",
        "apihelp-query+alllinks-example-unique": "ユニークなリンクのタイトルを一覧。",
        "apihelp-query+allrevisions-param-generatetitles": "ジェネレーターとして使用する場合、版IDではなくページ名を生成します。",
        "apihelp-query+allrevisions-example-user": "利用者 <kbd>Example</kbd> による直近の50版を一覧表示する。",
        "apihelp-query+allrevisions-example-ns-main": "標準名前空間にある最初の50版を一覧表示する。",
+       "apihelp-query+mystashedfiles-param-prop": "ファイルのどのプロパティを取得するか。",
+       "apihelp-query+mystashedfiles-paramvalue-prop-size": "ファイルサイズと画像の大きさを取得します。",
+       "apihelp-query+mystashedfiles-paramvalue-prop-type": "ファイルの MIME タイプとメディアタイプを取得します。",
        "apihelp-query+mystashedfiles-param-limit": "取得するファイルの数。",
        "apihelp-query+alltransclusions-param-prefix": "この値で始まるすべてのトランスクルードされているページを検索する。",
        "apihelp-query+alltransclusions-param-prop": "どの情報を結果に含めるか:",
        "apihelp-query+deletedrevs-param-excludeuser": "この利用者による版を一覧表示しない。",
        "apihelp-query+deletedrevs-param-namespace": "この名前空間に含まれるページのみを一覧表示します。",
        "apihelp-query+deletedrevs-param-limit": "一覧表示する版の最大量。",
+       "apihelp-query+deletedrevs-param-prop": "どの情報を取得するか:\n;revid:削除された版の版IDを追加します。\n;parentid:ページの前の版の版IDを追加します。\n;user:版を作成した利用者を追加します。\n;userid:版を作成した利用者のIDを追加します。\n;comment:版のコメントを追加します。\n;parsedcomment:版のコメントを構文解析して追加します。\n;minor:版が細部の編集かどうか印をつけます。\n;len:版の長さ (バイト) を追加します。\n;sha1:版のSHA-1 (base 16) を追加します。\n;content:版の内容を追加します。\n;token:<span class=\"apihelp-deprecated\">廃止予定です。</span>編集トークンを返します。\n;tags:版のタグです。",
        "apihelp-query+deletedrevs-example-mode1": "ページ <kbd>Main Page</kbd> および <kbd>Talk:Main Page</kbd> の最後に削除された版を内容と共に一覧表示する(モード 1)。",
        "apihelp-query+deletedrevs-example-mode2": "<kbd>Bob</kbd> による、削除された最後の50投稿を一覧表示する(モード 2)。",
        "apihelp-query+deletedrevs-example-mode3-main": "標準名前空間にある削除された最初の50版を一覧表示する(モード 3)。",
        "apihelp-unblock-param-id": "解除するブロックのID (<kbd>list=blocks</kbd>で取得できます)。<var>$1user</var> とは同時に使用できません。",
        "apihelp-unblock-param-user": "ブロックを解除する利用者名、IPアドレスまたはIPレンジ。<var>$1id</var>とは同時に使用できません。",
        "apihelp-unblock-param-reason": "ブロック解除の理由。",
+       "apihelp-unblock-param-tags": "ブロック記録の項目に適用する変更タグ。",
        "apihelp-unblock-example-id": "ブロックID #<kbd>105</kbd> を解除する。",
        "apihelp-unblock-example-user": "<kbd>Sorry Bob</kbd> という理由で利用者 <kbd>Bob</kbd> のブロックを解除する。",
        "apihelp-undelete-description": "削除されたページの版を復元します。\n\n削除された版の一覧 (タイムスタンプを含む) は[[Special:ApiHelp/query+deletedrevs|list=deletedrevs]]に、また削除されたファイルのID一覧は[[Special:ApiHelp/query+filearchive|list=filearchive]]で見つけることができます。",
        "apihelp-undelete-param-title": "復元するページ名。",
        "apihelp-undelete-param-reason": "復元の理由。",
+       "apihelp-undelete-param-tags": "削除記録の項目に適用する変更タグ。",
        "apihelp-undelete-param-timestamps": "復元する版のタイムスタンプ。<var>$1timestamps</var> と <var>$1fileids</var> の両方が空の場合、すべての版が復元されます。",
        "apihelp-undelete-example-page": "<kbd>Main Page</kbd> を復元する。",
        "apihelp-undelete-example-revisions": "<kbd>Main Page</kbd> の2つの版を復元する。",
index 1497e34..0618a88 100644 (file)
@@ -14,7 +14,7 @@
                        "Priviet"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|설명문서]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 메일링 리스트]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API 공지 사항] * [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 버그 및 요청] </div>\n<strong>상태:</strong> 이 페이지에 표시된 모든 기능은 정상적으로 작동하지만, API는 여전히 활발하게 개발되고 있으며, 언제든지 변경될 수 있습니다. 업데이트 정보를 받아보려면 [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce 메일링 리스트]를 구독하십시오.\n\n<strong>잘못된 요청:</strong> API에 잘못된 요청이 전송되면 HTTP 헤더에서 \"MediaWiki-API-Error\" 키를 보내고, 헤더 값과 오류 코드가 같게 설정됩니다. 자세한 정보에 대해서는 [[mw:API:Errors_and_warnings|API:오류와 경고]]를 참조하십시오.",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|설명문서]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 메일링 리스트]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API 알림 사항]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 버그 및 요청]\n</div>\n<strong>상태:</strong> 이 페이지에 보여지는 모든 기능은 정상적으로 작동하지만, API는 여전히 활발하게 개발되고 있으며, 언제든지 변경될 수 있습니다. 업데이트 공지를 받아보려면 [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce 메일링 리스트]를 구독하십시오.\n\n<strong>잘못된 요청:</strong> API에 잘못된 요청이 전송되면 HTTP 헤더에서 \"MediaWiki-API-Error\" 키를 보내고, 헤더 값과 오류 코드가 같게 설정됩니다. 자세한 정보에 대해서는 [[mw:API:Errors_and_warnings|API:오류와 경고]]를 참조하십시오.\n\n<strong>테스트하기:</strong> API 요청을 테스트의 편의를 위해, [[Special:ApiSandbox]]를 보세요.",
        "apihelp-main-param-action": "수행할 동작",
        "apihelp-main-param-format": "출력값의 형식.",
        "apihelp-main-param-maxlag": "최대 랙은 미디어위키가 데이터베이스 복제된 클러스터에 설치되었을 때 사용될 수 있습니다. 특정한 행동이 사이트 복제 랙을 유발할 때, 이 변수는 클라이언트가 복제 랙이 설정된 숫자 아래로 내려갈 때까지 기다리도록 지시합니다. 과도한 랙의 경우, <samp>maxlag</samp> 오류 코드와 <samp>Waiting for $host: $lag seconds lagged</samp> 메시지가 제공됩니다.<br />[[mw:Manual:Maxlag_parameter|매뉴얼: Maxlag 변수]] 에서 더 많은 정보를 얻을 수 있습니다.",
index f7468b4..26da426 100644 (file)
@@ -7,7 +7,7 @@
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page/de|Dokemäntazjohn]]\n* [[mw:API:FAQ/de|Öff jefrohch]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mäileng_Leß]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Aanköndejonge zom <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i>]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Jemäldte Fähler un Wönsch]\n</div>\n<strong>Status:</strong> Alle op heh dä Sigg aanjzeischte Ußwahle sullte donn, ävver et <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> weed jrahd noch äntwekeld un et kann sesch alle Nahslangs jädd ändere. Holl Der de [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ Mäileng_Leß med Aanköndejonge], öm automattesch övver Neujeschkeite enfommehrt ze wähde.\n\n<strong>Kapodde Aanfrohre:</strong> Wam_mer kapodde Aanfroheaan et API <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> schek, kritt mer ene <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Transfer Protocol\">HTTP</i>-Kopp ußjejovve met däm Täx „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">MediaWiki-API-Error</code>“ dren, dä mer als ene Schlößel bedraachte kann. Mih dohzoh fengk met op dä Sigg [[mw:API:Errors_and_warnings|<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i>: Fähler un Warnonge]].",
        "apihelp-main-param-action": "Wat för en Aufjahb.",
        "apihelp-main-param-format": "Et Fommaht för ußzejävve.",
-       "apihelp-main-param-maxlag": "Der hühste zohjelohße Verzoch kann jenumme wähde, wann MehdijaWikki obb enem Dahtebangk  replicated cluster enschtallehrt weed. Öm kein Opdräschd aan de Dahtebangk ze scheke, di dat noch schlemmer maache dähte, kam_mer övver heh dä Parramehter et Projramm affwahde lohße, bes dat  the replication lag onger däm aanjejovve Wäät lit. Wann dä Verzoch övvermähßesch jruhs es kritt mer dä Fähler <samp lang=\"en\" xml:lang=\"en\" dir=\"ltr\">maxlag</samp> jemälldt en ene Nohreesch esu wi <samp lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Mer wahde op dä ẞööver $Maschihn un di es $Verzoch Sekonde hengerher</samp>.<br />Op dä [[mw:Manual:Maxlag_parameter|Hanndbohchsigg zom \n<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Maxlag</code>-Parramehter]] kam_mer noch mih zerdoh lässe.<!-- https://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-main-param-maxlag/ksh -->",
+       "apihelp-main-param-maxlag": "Der hühste zohjelohße Verzoch kann jenumme wähde, wann MehdijaWikki obb enem Knubbel Rääschner medd ene replezehrte (dadd es, lebänndesch koppehrte) Dahtebangk enschtallehrt weed. Öm kein Opdräschd aan de Dahtebangk ze scheke, di dat noch schlemmer maache dähte, kam_mer övver heh dä Parramehter et Projramm affwahde lohße, bes dat dä Verzoch vum Replezehre onger däm aanjejovve Wäät lit. Wann dä Verzoch övvermähßesch jruhs es, kritt mer dä Fähler <samp lang=\"en\" xml:lang=\"en\" dir=\"ltr\">maxlag</samp> jemälldt med ene Nohreesch esu wi <samp lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Mer wahde op dä ẞööver $Maschihn un di es $Verzoch Sekonde hengerher</samp>.<br />Op dä [[mw:Manual:Maxlag_parameter|Hanndbohchsigg zom \n<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Maxlag</code>-Parramehter]] kam_mer noch mih zerdoh lässe.",
        "apihelp-main-param-smaxage": "Säz <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">max-age</code> en dä Kopp_Reihj <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">HTTP cache control</code> obb esu vill Sekonde. Fähler wähde nimmohls faßjehallde.",
        "apihelp-main-param-maxage": "Säz <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">max-age</code> en dä Kopp_Reihj <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">HTTP cache control</code> obb esu vill Sekonde. Fähler wähde nimmohls faßjehallde.",
        "apihelp-main-param-assert": "Ställ sescher, dat dä Metmaacher enjelogg es (doh för jiff <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">user</kbd> en), udder ene Bot es (doh för jiff <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">bot</kbd> en).",
        "apihelp-feedrecentchanges-param-hideliu": "Änderonge ußschlehße, di vun aanjemälldete Metmaacher jemaht wohde.",
        "apihelp-feedrecentchanges-param-hidepatrolled": "Nohjelohrte Änderonge övverjonn.",
        "apihelp-feedrecentchanges-param-hidemyself": "Änderonge vun heh dämm Metmaacher övverjonn.",
+       "apihelp-feedrecentchanges-param-hidecategorization": "Donn Änderonge aan de Zohjehüreshkeit zoh Saachjroppe veschteijsche.",
        "apihelp-feedrecentchanges-param-tagfilter": "Noh Makkehronge beschängke.",
        "apihelp-feedrecentchanges-param-target": "Zeijsch Änderonge aan Sigge, op di vun heh dä Sigg ene Lengk jeihd.",
        "apihelp-feedrecentchanges-param-showlinkedto": "Zeijsch Änderonge aan Sigge, op di vun dä ußjesöhk Sigg ene Lengk jeihd.",
+       "apihelp-feedrecentchanges-param-categories": "Donn blohß de Änderonge aan de Zohjehüreshkeit för all heh di Saachjroppe zeije.",
+       "apihelp-feedrecentchanges-param-categories_any": "Donn deföhr blohß de Änderonge aan de Zohjehüreshkeit för öhndseijn fun heh dä Saachjroppe zeije.",
        "apihelp-feedrecentchanges-example-simple": "Zeijsch de {{LCFIRST:{{int:recentchanges}}}}",
        "apihelp-feedrecentchanges-example-30days": "Zeijsch de {{LCFIRST:{{int:recentchanges}}}} vun de läzde 30 Dähsch.",
        "apihelp-feedwatchlist-description": "Donn ene Kannahl met dä Oppaßleß zerökjävve.",
        "apihelp-managetags-example-delete": "Schmiiß de Makkehrong mem Nahme „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">vandlaism</kbd>“ fott mem Jrond „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Misspelt</kbd>“.",
        "apihelp-managetags-example-activate": "Donn en Makkehrong aktevehre mem Nahme „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">spam</kbd>“ mem Jrond „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">For use in edit patrolling</kbd>“.",
        "apihelp-managetags-example-deactivate": "Donn en Makkehrong mem Nahme „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">spam</kbd>“ nit mieh aktihv maache, mem Jrond „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">For use in edit patrolling</kbd>“.",
+       "apihelp-mergehistory-param-reason": "Der Jrond för et Zesammelähje vun dä älldere Väsjohne.",
+       "apihelp-mergehistory-example-merge": "Donn de jannze älldere Väsjohne vun dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Oldpage</kbd>“ met dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Newpage</kbd>“ zesammelähje.",
+       "apihelp-mergehistory-example-merge-timestamp": "Donn de älldere Väsjohne vun dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Oldpage</kbd>“ bes zom <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">2015-12-31T04:37:41Z</kbd> met dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Newpage</kbd>“ zesammelähje.",
        "apihelp-move-description": "Donn en Sigg ömbenänne",
        "apihelp-move-param-from": "De Övverschreff vun dä Sigg zom Ömbenänne. Kam_mer nit zesamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1fromid</var>“ bruche.",
        "apihelp-move-param-fromid": "De ännong vun dä Sigg zom Ömbenänne. Kam_mer nit zesamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1from</var>“ bruche.",
        "apihelp-protect-param-title": "De Övverschreff vun dä Sigg zom Schöze udder Freijävve. Kam_mer nit zesamme met\n„<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1pageid</code>“ bruche.",
        "apihelp-protect-param-pageid": "De Kännong vun dä Sigg zom Schöze udder Freijävve. Kam_mer nit zesamme met\n„<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1pageid</code>“ bruche.",
        "apihelp-protect-param-reason": "Der Jrond för et Schöze udder Freijävve.",
+       "apihelp-protect-param-tags": "Donn de Makehronge aanpaße, dat se för dä Enndraach em Logbohch vum Sigge Schöze jehühre.",
        "apihelp-protect-param-cascade": "Donn en Schotz-Kaskahd zohlohße, alsu ene Schoz för ennjeföhschte Schablohne un upjerohfe Bellder vun dä Sigg. Deiht nix, wann keine von dä aanjejovve Zoote Schoz en Kaskahd zohlöht.",
        "apihelp-protect-example-protect": "Donn en Sigg schöze.",
        "apihelp-purge-param-forcelinkupdate": "Bräng de Tabälle met de lengks obb ene neue Schtand.",
        "apihelp-query+allrevisions-param-generatetitles": "Wann als ene  Jenerahtor enjesaz, brängk dat Övverschreffte un kein Kännonge vun Väsjohne.",
        "apihelp-query+allrevisions-example-user": "Donn de läzde fuffzisch Beijdrähsch vum Metmaacher „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Example</kbd>“ opleßte.",
        "apihelp-query+allrevisions-example-ns-main": "Donn de eezde fuffzisch Väsjohne em Houp-Appachemang opleßte.",
+       "apihelp-query+mystashedfiles-param-prop": "Wat för en Aanjahbe holle för di Datteije.",
+       "apihelp-query+mystashedfiles-param-limit": "Wi vill Datteije holle?",
        "apihelp-query+alltransclusions-param-from": "De Övverschreff vun dä ennjeföhschte Sigg, woh de Leß medd aanfange sull.",
        "apihelp-query+alltransclusions-param-to": "De Övverschreff vun dä ennjeföhschte Sigg, woh et Zälle ophühre sull.",
        "apihelp-query+alltransclusions-param-prefix": "Söhk noh alle dä ennjeföhschte Sigge ier Övverschreffte, di met heh däm Täx aanfange.",
        "apihelp-query+protectedtitles-param-namespace": "Donn blohß Sigge en heh dä Appachtemangs opleßte.",
        "apihelp-query+protectedtitles-param-level": "Donn blohß de Övverschreffte vun Sigge met heh dämm Nivoh vum Sigge_Schoz opeleßte.",
        "apihelp-query+protectedtitles-param-limit": "Wi vill Sigge ensjesammp zem ußjävve?",
+       "apihelp-query+protectedtitles-param-prop": "Wat för en Eijeschaffte holle:",
        "apihelp-query+protectedtitles-example-simple": "Donn jeschöz Övverschreffte opleßte.",
        "apihelp-query+protectedtitles-example-generator": "Fengk Lengks op jeschözde Övverschreffte em Houp_Appachemang.",
        "apihelp-query+querypage-param-page": "Dä {{int:specialpage}} iere Name. Opjepaß: De Jruhs- un Kleinschreff schpelld en Roll.",
        "apihelp-query+random-param-namespace": "Jiff blohß sigge en heh dä Appachtemangs uß.",
        "apihelp-query+random-param-limit": "Wi vill zohfälleje Sigge sulle ußjejovve wähde?",
        "apihelp-query+random-param-redirect": "Nemm <kbd>$1filterredir=redirects</kbd> schtatt dämm.",
+       "apihelp-query+random-param-filterredir": "Wi de Ömleijdonge ußzottehre?",
        "apihelp-query+random-example-simple": "Donn zwai zohfälleje Sigge vum Houb_Appachtemang ußjävve.",
        "apihelp-query+random-example-generator": "Donn Ennfommazjuhne övver zwai zohfälleje Sigge vum Houb_Appachtemang ußjävve.",
        "apihelp-query+recentchanges-description": "Donn de  neußte Änderonge opleßte.",
        "apihelp-rollback-param-pageid": "De Kännong vun dä Sigg för di_j_en vörrejje Väsjohn zeröckzeholle es. Kam_mer nit zersamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1title</var>“ bruche.",
        "apihelp-rollback-param-watchlist": "Donn di Sigg op däm aktoälle Metmaacher sing Oppaßleß udder nemm se druß fott, donn de Enschtällonge nämme, udder donn de Oppaßleß jaa nit verändere.",
        "apihelp-setnotificationtimestamp-param-entirewatchlist": "Donn alle Sigge beärbeide, di en Oppaßleßte dren sin.",
+       "apihelp-stashedit-param-title": "De Övverschreff vu dä Sigg för zom Änndere.",
        "apihelp-stashedit-param-section": "Däm Affschnett sing Nommer. „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr>0</kbd>“ brängk der eezde Affschnett, dä keijn Övverschreff hät, „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr>new</kbd>“ brängg_ene neuje Affschnett.",
        "apihelp-stashedit-param-sectiontitle": "De Övverschreff för ene neuje Afschnett",
        "apihelp-stashedit-param-text": "Dä Sigg ehre Ennhalld.",
        "apihelp-unblock-param-reason": "Der Jrond för de Schpärr opzehävve.",
        "apihelp-undelete-param-title": "De Övverschreff vun dä Sigg zom zerök holle.",
        "apihelp-undelete-param-reason": "Der Jrond för et Zerök holle.",
+       "apihelp-undelete-param-tags": "Donn de Makehronge aanpaße, dat se för dä Enndraach em Logbohch vum Sigge fott Schmihße jehühre.",
        "apihelp-undelete-param-watchlist": "Donn di Sigg ohne Bedengonge op däm aktoälle Metmaacher sing Oppaßleß udder nemm se druß fott, donn de Enschtällonge nämme, udder donn de Oppaßleß jaa nit verändere.",
        "apihelp-undelete-example-page": "Schmiiß de Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ fott.",
        "apihelp-undelete-example-revisions": "Holl zwai Väsjohne vun dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ zerök.",
        "api-help-permissions": "{{PLURAL:$1|Rääsch|Rääschde|Rääsch}}:",
        "api-help-permissions-granted-to": "Jejovve aan: $2{{PLURAL:$1|}}",
        "api-help-right-apihighlimits": "Donn de Beschängkonge vun Opdrähscht aan de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> kleiner maache (langsamme Opdrähscht: $1; flöcke Opdrähscht: $2). De Beschränkonge för lahme Opdrähscht jällde och för Parramehtere met vill Wähte.",
+       "api-help-open-in-apisandbox": "<small>[en de Sandkeß opmaache]</small>",
        "api-credits-header": "Aanäkännong för Beijdrähsch",
        "api-credits": "Dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> ier Äntweklere:\n* Roan Kattouw (Aanföhrer zigg em Säptämber 2007 bes 2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (Bejenner un Aanföhrer vum Säptämber 2006 bes Säptämber 2007)\n* Brad Jorsch (Aanföhrer vun 2013 bes hük)\n\nDoht Ühr Aanmärkonge, Vörschlähsch un Frohre aan de Meijlengleß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">mediawiki-api@lists.wikimedia.org</code> scheke, Ühr Vörschlähsch un Fählermälldong doht op <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">https://phabricator.wikimedia.org/</code> ennjävve."
 }
index 5ad108b..da676a1 100644 (file)
@@ -4,6 +4,13 @@
                        "Zygimantus"
                ]
        },
+       "apihelp-createaccount-param-name": "Naudotojo vardas.",
+       "apihelp-createaccount-param-realname": "Vardas (nebūtina).",
+       "apihelp-delete-description": "Ištrinti puslapį.",
+       "apihelp-edit-param-text": "Puslapio turinys.",
+       "apihelp-emailuser-description": "Siųsti el. laišką naudotojui.",
+       "apihelp-expandtemplates-param-title": "Puslapio pavadinimas.",
+       "apihelp-feedrecentchanges-example-simple": "Parodyti naujausius keitimus.",
        "apihelp-query+alldeletedrevisions-example-user": "Sąrašas paskutinių 50 ištrintų indėlių pagal vartotoją\n<kbd>Pavyzdys</kbd>.",
        "apihelp-query+allrevisions-param-namespace": "Rodyti puslapius tik šioje vardų srityje.",
        "apihelp-query+backlinks-example-simple": "Rodyti nuorodas <kbd>Pagrindinis puslapis</kbd>.",
index 1ce88e4..9235247 100644 (file)
@@ -5,11 +5,17 @@
                        "C.R."
                ]
        },
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentaziona]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista 'e mmasciate]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annunziaziune 'e ll'API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bug e richieste]\n</div>\n<strong>Stato:</strong> Tuttuquante 'e funziune 'e sta paggena avesser'a funziunà, ma ll'API è ancora a se sviluppà, picciò chesto putesse cagnà a nu certo mumento. Iscriviteve ccà ncoppa: [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce 'a lista 'e mmasciate] pe' n'avé cocche notifica 'e ll'agghiurnamente.\n\n<strong>Richieste sbagliate:</strong> Si se mannasse na richiesta sbagliata a ll'API, nu cap' 'e HTTP sarrà mannata c' 'a chiave 'e mmasciata \"MediaWiki-API-Error\" e po' tuttuquante 'e valure d' 'a cap' 'e mmasciata e codece 'errore se mannassero arreto e se mpustassero a 'o stesso valore. Pe n'avé cchiù nfurmaziune vedite [[mw:API:Errors_and_warnings|API: Errure e Avvise]].\n\n<strong>Test:</strong> Pe' ve ffà cchiù semprice 'e test 'e richieste API, vedite [[Special:ApiSandbox]].",
        "apihelp-main-param-action": "Quale aziona d'avess'a fà.",
        "apihelp-main-param-format": "Qualu furmato avess'ascì d'output.",
        "apihelp-main-param-maxlag": "'O massimo lag ca se putess'ausà quanno MediaWiki s'installasse ncopp'a nu cluster replicato 'e database. Pe' puté sarvà aziune ca causassero cchiù lag 'e replicato, stu parammetro putesse fà 'o cliente aspettà nfin'a quanno 'o tiempo 'e replicaziona fosse meno ca nu valore specificato. Si nce stesse cchiù assaje tiempo 'e lag, nu codece 'errore <samp>maxlag</samp> se turnasse comm'a na mmasciata tipo <samp>Aspettanno 'o $host: nu $lag secunde 'e lag</samp>.<br />Vedite [[mw:Manual:Maxlag_parameter|Manuale: Parammetro Maxlag]] pe' n'avé cchiù nfurmaziune.",
+       "apihelp-main-param-smaxage": "Mpustate 'a cap' 'e cuntrollo 'e cache HTTP <code>s-maxage</code> a sta quantità 'e secondi. Ll'errure nun s'acchiappassero maje.",
+       "apihelp-main-param-maxage": "Mpustate 'a cap' 'e cuntrollo 'e cache HTTP <code>max-age</code> a sta quantità 'e secondi. Ll'errure nun s'acchiappassero maje.",
+       "apihelp-main-param-assert": "Cuntrullate si l'utente è trasuto si sta mpustato comm' <kbd>user</kbd>, o pure ca téne o deritto 'e bot si <kbd>bot</kbd>.",
+       "apihelp-main-param-requestid": "Qualunque valore dato ccà se mpizzasse dint'a risposta. Se putess'ausà pe' puté distinguere richieste.",
        "apihelp-main-param-servedby": "Include 'o risultato 'e nomme d' 'o host ca servette 'a richiesta.",
        "apihelp-main-param-curtimestamp": "Include dint' 'o risultato 'o timestamp 'e mò.",
+       "apihelp-main-param-origin": "Quanno se trasesse a ll'API ausanno richieste 'e cross-dominio AJAX (CORS), mpustate chesto a 'o dominio origgenale. Chesto s'avess'azzeccà dint'a qualsiasi richiesta 'e pre-volo, e picciò avess'a ffà parte d' 'a richiesta d'URI (nun fosse 'o cuorpo POST). Chesto s'avess'azzeccà  a uno 'e ll'origgene dint' 'o cap' 'e paggena <code>Origin</code> pricisamente, picciò s'avessa mpustà coccosa tipo <kbd>https://en.wikipedia.org</kbd> o <kbd>https://meta.wikimedia.org</kbd>. Si stu parammetro nun s'azzeccasse c' 'o cap' 'e paggena <code>Origin</code>, allora na risposta 403 se turnasse. Si stu parammetro s'azzeccasse c' 'o cap' 'e paggena <code>Origin</code> e ll'origgene fosse dint' 'a lista janca, allora nu cap' 'e paggena <code>Access-Control-Allow-Origin</code> fosse mpustato.",
        "apihelp-block-description": "Blocca n'utente.",
        "apihelp-block-param-user": "Nomme utente, indirizzo IP o range IP 'a bluccà.",
        "apihelp-block-param-reason": "Mutive p' 'o blocco.",
        "apihelp-createaccount-param-mailpassword": "Si mpustato a qualunque valore, na password casuale sarrà mannat'a ll'utente.",
        "apihelp-createaccount-param-reason": "Raggiona, a facoltativa, d' 'a criaziona 'e nu cunto a mpizzà int' 'e reggistre.",
        "apihelp-createaccount-param-language": "Codece 'e llengua a mpustà comme predefinita pe' n'utente (opzionale, 'e default fosse 'a lengue d' 'e cuntenute).",
+       "apihelp-createaccount-example-pass": "Crèa utente <kbd>testuser</kbd> c' 'a password <kbd>test123</kbd>.",
+       "apihelp-createaccount-example-mail": "Crea utente <kbd>testmailuser</kbd> e manna na mail cu na password criat' 'a ccaso.",
        "apihelp-delete-description": "Scancella 'na paggena.",
+       "apihelp-delete-param-title": "Titolo d' 'a paggena a scancellà. Nun se pò ausà nziem'a <var>$1pageid</var>.",
+       "apihelp-delete-param-pageid": "ID d' 'a paggena a scancellà. Nun se pò ausà nziem'a <var>$1title</var>.",
+       "apihelp-delete-param-reason": "Raggione p' 'o scancellà. Si nun s'è mpustato, na raggione generata automaticamente s'add'ausà.",
+       "apihelp-delete-param-tags": "Càgna 'e tag pe' puté apprecà l'entrata dint' 'o riggistro 'e scancellazione.",
+       "apihelp-delete-param-watch": "Azzecc' 'a paggena â lista 'e paggene cuntrullate.",
+       "apihelp-delete-param-watchlist": "Senza condizione, azzeccà o luvà 'a paggena 'a l'elenco 'e paggene cuntrullate 'e ll'utente, ausà mpustaziune o nun 'o cagnà l'elenco.",
+       "apihelp-delete-param-unwatch": "Liev' 'a paggena â lista 'e paggene cuntrullate.",
+       "apihelp-delete-param-oldimage": "'O nomm' 'e ll'immaggene viecchia a se scancellà comme sta scritto ccà: [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+       "apihelp-delete-example-simple": "Scancella <kbd>Main Page</kbd>.",
+       "apihelp-delete-example-reason": "Scancella 'a <kbd>Main Page</kbd> c' 'o mutivo <kbd>Preparing for move</kbd>.",
+       "apihelp-disabled-description": "Stu modulo è stato stutato.",
+       "apihelp-edit-description": "Crèa e cagna paggene.",
+       "apihelp-edit-param-title": "Titolo d' 'a paggena a cagnà. Nun se pò ausà nziem'a <var>$1pageid</var>.",
+       "apihelp-edit-param-pageid": "ID d' 'a paggena a cagnà. Nun se pò ausà nziem'a <var>$1title</var>.",
+       "apihelp-edit-param-section": "Nummero 'e sezione. <kbd>0</kbd> p' 'a sezione ncoppa, <kbd>new</kbd> pe' na seziona nova.",
+       "apihelp-edit-param-sectiontitle": "'O titolo pe' na seziona nova.",
+       "apihelp-edit-param-text": "Cuntenuto 'e paggena.",
+       "apihelp-edit-param-summary": "Oggetto d' 'a modifica. Pure 'o titolo ra sezione quanno $1sezione=new e $1sectiontitle nun è mpustato.",
+       "apihelp-edit-param-tags": "Cagna 'e tag ca s'avesser'applicà 'a verziona.",
+       "apihelp-edit-param-minor": "Cagnamiento piccerillo.",
+       "apihelp-edit-param-notminor": "Cagnamiento nun-piccerillo.",
+       "apihelp-edit-param-bot": "Nzegna stu cagnamiento comm' 'e bot.",
+       "apihelp-edit-param-basetimestamp": "Nzegna 'o tiempo d' 'a verzione bbase, ausato pe' puté ffà scummiglià cunflitte 'edizione. Se putesse piglià pe' bbìa 'e [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+       "apihelp-edit-param-starttimestamp": "Nzegna 'o tiempo d' 'a verzione bbase, ausato pe' puté ffà scummiglià cunflitte 'edizione. Nu valore buono se putess'arrepiglià pe' bbìa 'e <var>[[Special:ApiHelp/main|curtimestamp]]</var> quann'accummencia 'o prucess' 'edizione (e.g. quanno se stà a carrecà 'o contenuto 'e na paggena p' 'a cagnà).",
+       "apihelp-edit-param-recreate": "Scrive ncopp'a cocch'errore ncopp'a paggena avenno scancellato chesto a nu certo punto.",
+       "apihelp-edit-param-createonly": "Nun cagnà 'a paggena si esiste già.",
+       "apihelp-edit-param-nocreate": "Ietta 'errore si 'a paggena nun esiste.",
+       "apihelp-edit-param-watch": "Azzecc' 'a paggena â lista 'e paggene cuntrullate.",
+       "apihelp-edit-param-unwatch": "Liev' 'a paggena â lista 'e paggene cuntrullate.",
+       "apihelp-edit-param-watchlist": "Senza condizione, azzeccà o luvà 'a paggena 'a l'elenco 'e paggene cuntrullate 'e ll'utente, ausà mpustaziune o nun 'o cagnà l'elenco.",
+       "apihelp-edit-param-md5": "'O hash MD5 d' 'o parammetro 'e $1text, o chill' 'e $1prependtext e $1appendtext concatenate. Si mpustato, 'o cagnamiento nun fosse fatto... 'o cuntrario succeresse si 'o hash fosse curretto.",
+       "apihelp-edit-param-prependtext": "Azzecca stu testo addò 'o cap' 'e paggena. Se mettesse ncuoll'a $1text.",
+       "apihelp-edit-param-appendtext": "Azzecca stu testo addò 'o cap' 'e paggena. Se mettesse ncuoll'a $1text.\n\nAusate $1section=new pe' ne puté appennere na seziona nova, ato che ausà stu parammetro.",
+       "apihelp-edit-param-undo": "Torna arrèto sta verziona. Miette ncuollo 'o $1text, $1prependtext e $1appendtext.",
+       "apihelp-edit-param-undoafter": "Torna arreto tuttuquante verziune 'e $1undo a cchesta. Si chesto nun fosse mpustato, avit'a ffà surtanto turnà arreto na verziona.",
+       "apihelp-edit-param-redirect": "Risolve automaticamente 'e redirect.",
+       "apihelp-edit-param-contentformat": "Serializaziona 'e furmatt' 'e cuntenute ausata p' 'o testo trasuto.",
+       "apihelp-edit-param-contentmodel": "Mudell' 'e cuntenute d' 'e cuntenute nuove nuove.",
+       "apihelp-edit-param-token": "'O token s'avess'a mannà sempe comm'a ll'urdemo parammetro, o minimo minimo aropp'a 'o parammetro 'e $1text.",
        "apihelp-edit-example-edit": "Cagna paggena.",
+       "apihelp-edit-example-prepend": "Pre-appenne <kbd>_&#95;NOTOC_&#95;</kbd> a na paggena.",
+       "apihelp-edit-example-undo": "Torna arreto 'e verziune 13579 nfin'a 13585 cu n'autosommario.",
        "apihelp-emailuser-description": "E-mail a n'utente.",
+       "apihelp-emailuser-param-target": "Utente a 'e quale s'avess'a mannà na mmasciata mail.",
+       "apihelp-emailuser-param-subject": "Oggetto d' 'a mail.",
+       "apihelp-emailuser-param-text": "Testo d' 'a mail.",
+       "apihelp-emailuser-param-ccme": "Manna na copia 'e sta mail a mme.",
+       "apihelp-emailuser-example-email": "Manna na e-mail a ll'utente <kbd>WikiSysop</kbd> c' 'o testo <kbd>Content</kbd>.",
+       "apihelp-expandtemplates-description": "Spannere tuttuquante 'e template dint' 'o wikitesto.",
+       "apihelp-expandtemplates-param-title": "Titolo d' 'a paggena.",
+       "apihelp-expandtemplates-param-text": "Wikitesto 'a scagnà/convertire.",
+       "apihelp-expandtemplates-param-revid": "ID 'e cagnamento, pe' <nowiki>{{REVISIONID}}</nowiki> e variabbele ca s'assummigliassero.",
+       "apihelp-expandtemplates-param-prop": "Quale nfurmaziune s'avess'a piglià.\n\nTenite a mmente ca nun s'è scigliuto valore nisciuno, 'o risultato cuntenesse 'o codice wiki, ma l'output sarrà fatto comm'a nu furmato obsoleto.",
+       "apihelp-expandtemplates-paramvalue-prop-wikitext": "'O wikitext spannuto.",
+       "apihelp-expandtemplates-paramvalue-prop-categories": "Ogne categurìa prisente int'a 'o valore 'e trasuta nun fosse rappresentato comm'asciuta 'e wikitesto.",
+       "apihelp-expandtemplates-paramvalue-prop-properties": "'E pruprietà 'e pagena definite p' 'e parole magiche spannute dint' 'o wikitesto.",
+       "apihelp-expandtemplates-paramvalue-prop-volatile": "Si l'output fosse volatile e nun s'avess'ausà n'atavota addò servesse dint' 'a paggena.",
+       "apihelp-expandtemplates-paramvalue-prop-ttl": "'O tiempo massimo aropp' 'o quale 'e caches d' 'o risultato s'avessero a nzegnà invalide.",
+       "apihelp-expandtemplates-paramvalue-prop-modules": "Ogne modulo ResourceLoader ch' 'e funzione parser addimannajero a s'azzeccà a ll'output. Fosse <kbd>jsconfigvars</kbd> o pure <kbd>encodedjsconfigvars</kbd> s'avesser'addimannà tutte 'nzieme pe' bbìa d' 'e <kbd>modules</kbd>.",
+       "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "Dà nfurmaziune 'e variabbele 'e mpustaziona JavaScript specifiche 'a paggena.",
+       "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "Dà 'e variabbele 'e mpustaziona 'e JavaScript specifiche 'a na paggena comm'a na stringa JSON.",
+       "apihelp-expandtemplates-paramvalue-prop-parsetree": "L'albero 'e parse XML 'a ll'input.",
+       "apihelp-expandtemplates-param-includecomments": "Si s'avess'azzeccà cocche cummento HTML dint'a ll'output.",
+       "apihelp-expandtemplates-param-generatexml": "Generà ll'albero XML (scagnato 'a $1prop=parsetree).",
+       "apihelp-expandtemplates-example-simple": "Spanne 'o wikitesto <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
+       "apihelp-feedcontributions-description": "Tuorna nu feed 'e cuntribbute 'utente.",
+       "apihelp-feedcontributions-param-feedformat": "'O furmato d' 'o feed.",
+       "apihelp-feedcontributions-param-user": "'A quale 'utente nc'avimm'a piglià cuntribbute.",
+       "apihelp-feedcontributions-param-namespace": "'A qualu namespace s'avesser'a filtrà 'e cuntribbute.",
+       "apihelp-feedcontributions-param-year": "'E ll'anno (e primma).",
+       "apihelp-feedcontributions-param-month": "D' 'o mese (e pure cchiù primma).",
+       "apihelp-feedcontributions-param-tagfilter": "Filtrà cuntribbute ca teneno sti ttag.",
+       "apihelp-feedcontributions-param-deletedonly": "Mmusta surtant' 'e cuntribbute scancellate.",
+       "apihelp-feedcontributions-param-toponly": "Fà vedé sulamente 'e contribbute 'e l'urdeme verziune.",
+       "apihelp-feedcontributions-param-newonly": "Fà vedé sulamente 'e contribbute ca songo criazione 'e paggene.",
+       "apihelp-feedcontributions-param-showsizediff": "Fà vedé 'a differenza nfra verziune.",
+       "apihelp-feedcontributions-example-simple": "Tuòrna cuntribbute 'a ll'utente <kbd>Esempio</kbd>.",
+       "apihelp-feedrecentchanges-description": "Tuorna 'o blocco 'e nutizie 'e ll'urdeme cagnamiente.",
+       "apihelp-feedrecentchanges-param-feedformat": "'O furmato d' 'o feed.",
        "apihelp-feedwatchlist-param-feedformat": "'O furmato d' 'o feed.",
+       "apihelp-filerevert-param-comment": "Carreca commento.",
+       "apihelp-help-description": "Fà veré l'aiuto p' 'e module specificate",
+       "apihelp-help-param-submodules": "Azzecca n'aiuto p' 'e submodule 'e nu modulo ca téne nome.",
        "apihelp-login-example-login": "Tràse.",
        "apihelp-move-description": "Mòve paggena.",
        "apihelp-opensearch-param-search": "Ascìa stringa.",
index e7b4421..71e08cf 100644 (file)
                        "Edoderoo"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentatie]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-maillijst]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-aankondigingen]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bugs & verzoeken]\n</div>\n<strong>Status:</strong> Alle functies die op deze pagina worden weergegeven horen te werken. Aan de API wordt actief gewerkt, en deze kan gewijzigd worden. Abonneer u op  de [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-maillijst mediawiki-api-announce] voor meldingen over aanpassingen.\n\n<strong>Foutieve verzoeken:</strong> als de API foutieve verzoeken ontvangt, wordt er geantwoord met een HTTP-header met de sleutel \"MediaWiki-API-Error\" en daarna worden de waarde van de header en de foutcode op dezelfde waarde ingesteld. Zie [[mw:API:Errors_and_warnings|API: Errors and warnings]] voor meer informatie.",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentatie]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-maillijst]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-aankondigingen]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bugs & verzoeken]\n</div>\n<strong>Status:</strong> Alle functies die op deze pagina worden weergegeven horen te werken. Aan de API wordt actief gewerkt, en deze kan gewijzigd worden. Abonneer u op  de [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-maillijst mediawiki-api-announce] voor meldingen over aanpassingen.\n\n<strong>Foutieve verzoeken:</strong> als de API foutieve verzoeken ontvangt, wordt er geantwoord met een HTTP-header met de sleutel \"MediaWiki-API-Error\" en daarna worden de waarde van de header en de foutcode op dezelfde waarde ingesteld. Zie [[mw:API:Errors_and_warnings|API: Errors and warnings]] voor meer informatie.\n\n<strong>Testen:</strong> u kunt [[Special:ApiSandbox|eenvoudig API-verzoeken testen]].",
        "apihelp-main-param-action": "Welke handeling uit te voeren.",
        "apihelp-main-param-format": "De opmaak van de uitvoer.",
        "apihelp-main-param-maxlag": "De maximale vertraging kan gebruikt worden als MediaWiki is geïnstalleerd op een databasecluster die gebruik maakt van replicatie. Om te voorkomen dat handelingen nog meer databasereplicatievertraging veroorzaken, kan deze parameter er voor zorgen dat de client wacht totdat de replicatievertraging lager is dan de aangegeven waarde. In het geval van buitensporige vertraging, wordt de foutcode <samp>maxlag</samp> teruggegeven met een bericht als <samp>Waiting for $host: $lag seconds lagged</samp>.<br />Zie [[mw:Manual:Maxlag_parameter|Handboek: Maxlag parameter]] voor mee informatie.",
-       "apihelp-main-param-smaxage": "Stelt de \"<code>s-maxage</code>\" HTTP cache controle header in op het aangegeven aantal seconden. Foutmeldingen komen nooit in de cache.",
+       "apihelp-main-param-smaxage": "Stelt de <code>s-maxage</code> HTTP cache controle header in op het aangegeven aantal seconden. Foutmeldingen komen nooit in de cache.",
        "apihelp-main-param-maxage": "Stelt de <code>max-age</code> HTTP cache controle header in op het aangegeven aantal seconden. Foutmeldingen komen nooit in de cache.",
        "apihelp-main-param-assert": "Controleer of de gebruiker is aangemeld als <kbd>user</kbd> is meegegeven, en of de gebruiker het robotgebruikersrecht heeft als <kbd>bot</kbd> is meegegeven.",
        "apihelp-main-param-requestid": "Elke waarde die hier gegeven wordt, wordt aan het antwoord toegevoegd. Dit kan gebruikt worden om verzoeken te onderscheiden.",
        "apihelp-block-param-reblock": "De huidige blokkade aanpassen als de gebruiker al geblokkeerd is.",
        "apihelp-block-param-watchuser": "De gebruikerspagina en overlegpagina van de gebruiker of het IP-adres volgen.",
        "apihelp-block-example-ip-simple": "Het IP-adres <kbd>192.0.2.5</kbd> voor drie dagen blokkeren met <kbd>First strike</kbd> als opgegeven reden.",
-       "apihelp-compare-param-fromtitle": "Eerste titel om te vergelijken.",
+       "apihelp-compare-param-fromtitle": "Eerste paginanaam om te vergelijken.",
        "apihelp-compare-param-fromid": "Eerste pagina-ID om te vergelijken.",
        "apihelp-compare-param-fromrev": "Eerste versie om te vergelijken.",
-       "apihelp-compare-param-totitle": "Tweede titel om te vergelijken.",
-       "apihelp-compare-param-toid": "Andere pagina-ID om te vergelijken.",
+       "apihelp-compare-param-totitle": "Tweede paginanaam om te vergelijken.",
+       "apihelp-compare-param-toid": "Tweede pagina-ID om te vergelijken.",
        "apihelp-compare-param-torev": "Tweede versie om te vergelijken.",
-       "apihelp-createaccount-description": "Een nieuw gebruikersaccount aanmaken.",
+       "apihelp-createaccount-description": "Nieuwe gebruikersaccount aanmaken.",
        "apihelp-createaccount-param-name": "Gebruikersnaam.",
-       "apihelp-createaccount-param-email": "E-mailadres van de gebruikers (optioneel).",
+       "apihelp-createaccount-param-email": "E-mailadres van de gebruiker (optioneel).",
        "apihelp-createaccount-param-realname": "Echte naam van de gebruiker (optioneel).",
-       "apihelp-delete-description": "Verwijder een pagina.",
+       "apihelp-delete-description": "Een pagina verwijderen.",
        "apihelp-delete-param-reason": "Reden voor verwijdering. Wanneer dit niet is opgegeven wordt een automatisch gegenereerde reden gebruikt.",
        "apihelp-delete-param-watch": "De pagina aan de volglijst van de huidige gebruiker toevoegen.",
        "apihelp-delete-param-unwatch": "De pagina van de volglijst van de huidige gebruiker verwijderen.",
        "apihelp-delete-example-reason": "Verwijder <kbd>Main Page</kbd> met als reden <kbd>Preparing for move</kbd>.",
        "apihelp-disabled-description": "Deze module is uitgeschakeld.",
        "apihelp-edit-description": "Aanmaken en bewerken van pagina's.",
-       "apihelp-edit-param-title": "Titel van de pagina om te bewerken. Kan niet gebruikt worden samen met <var>$1pageid</var>.",
-       "apihelp-edit-param-sectiontitle": "De titel van de nieuwe sectie.",
+       "apihelp-edit-param-title": "Naam van de pagina om te bewerken. Kan niet gebruikt worden samen met <var>$1pageid</var>.",
+       "apihelp-edit-param-sectiontitle": "De naam van de nieuwe sectie.",
        "apihelp-edit-param-text": "Pagina-inhoud.",
        "apihelp-edit-param-tags": "Wijzigingslabels om aan de versie toe te voegen.",
        "apihelp-edit-param-minor": "Kleine bewerking.",
        "apihelp-edit-param-notminor": "Geen kleine bewerking.",
-       "apihelp-edit-param-bot": "Markeer deze bewerking als bot.",
-       "apihelp-edit-param-createonly": "Bewerk de pagina niet als die al bestaat.",
-       "apihelp-edit-param-nocreate": "Geef een foutmelding als de pagina niet bestaat.",
+       "apihelp-edit-param-bot": "Deze bewerking als bot markeren.",
+       "apihelp-edit-param-createonly": "De pagina niet bewerken als die al bestaat.",
+       "apihelp-edit-param-nocreate": "Een foutmelding geven als de pagina niet bestaat.",
        "apihelp-edit-param-watch": "Voeg de pagina toe aan de volglijst van de huidige gebruiker.",
        "apihelp-edit-param-unwatch": "Verwijder de pagina van de volglijst van de huidige gebruiker.",
-       "apihelp-edit-param-redirect": "Automatisch doorverwijzingen oplossen.",
+       "apihelp-edit-param-redirect": "Doorverwijzingen automatisch oplossen.",
        "apihelp-edit-example-edit": "Een pagina bewerken.",
-       "apihelp-edit-example-undo": "Revisies 13579 tot 13585 ongedaan maken met automatische beschrijving.",
+       "apihelp-edit-example-undo": "Versies 13579 tot 13585 ongedaan maken met automatische beschrijving.",
        "apihelp-emailuser-description": "Gebruiker e-mailen.",
        "apihelp-emailuser-param-target": "Gebruiker naar wie de e-mail moet worden gestuurd.",
        "apihelp-emailuser-param-subject": "Onderwerpkoptekst.",
        "apihelp-emailuser-param-text": "E-mailtekst.",
-       "apihelp-emailuser-param-ccme": "Stuur mij een kopie van deze e-mail.",
+       "apihelp-emailuser-param-ccme": "Mij een kopie sturen van deze e-mail.",
        "apihelp-expandtemplates-param-title": "Paginanaam.",
        "apihelp-expandtemplates-param-text": "Wikitekst om om te zetten.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "De uitgevulde wikitekst.",
-       "apihelp-expandtemplates-paramvalue-prop-ttl": "De maximum tijdsduur waarna cache van het resultaat moet worden weggegooid.",
+       "apihelp-expandtemplates-paramvalue-prop-ttl": "De maximale tijdsduur waarna de cache van het resultaat moet worden weggegooid.",
        "apihelp-feedcontributions-description": "Haalt de feed van de gebruikersbijdragen op.",
-       "apihelp-feedcontributions-param-feedformat": "De opmaak van de feed.",
+       "apihelp-feedcontributions-param-feedformat": "De indeling van de feed.",
        "apihelp-feedcontributions-param-year": "Van jaar (en eerder).",
        "apihelp-feedcontributions-param-month": "Van maand (en eerder).",
        "apihelp-feedcontributions-param-deletedonly": "Alleen verwijderde bijdragen weergeven.",
@@ -89,7 +89,7 @@
        "apihelp-feedrecentchanges-param-tagfilter": "Filteren op label.",
        "apihelp-feedrecentchanges-example-simple": "Recente wijzigingen weergeven.",
        "apihelp-feedrecentchanges-example-30days": "Recente wijzigingen van de afgelopen 30 dagen weergeven.",
-       "apihelp-filerevert-description": "Een oude versie van een bestand herplaatsen.",
+       "apihelp-filerevert-description": "Een oude versie van een bestand terugplaatsen.",
        "apihelp-imagerotate-description": "Een of meerdere afbeeldingen draaien.",
        "apihelp-import-param-xml": "Geüpload XML-bestand.",
        "apihelp-import-param-namespace": "Importeren in deze naamruimte. Can niet samen gebruikt worden met <var>$1rootpage</var>.",
        "apihelp-logout-example-logout": "Meldt de huidige gebruiker af.",
        "apihelp-managetags-param-tag": "Label om aan te maken, te activeren of te deactiveren. Voor het aanmaken van een label, mag het niet bestaan. Voor het verwijderen van een label, moet het bestaan. Voor het activeren van een label, moet het bestaan en mag het niet gebruikt worden door een uitbreiding. Voor het deactiveren van een label, moet het gebruikt worden en handmatig gedefinieerd zijn.",
        "apihelp-move-description": "Pagina hernoemen.",
-       "apihelp-move-param-to": "Titel om de pagina naar te hernoemen.",
+       "apihelp-move-param-to": "Nieuwe paginanaam.",
        "apihelp-move-param-reason": "Reden voor de naamswijziging.",
        "apihelp-move-param-noredirect": "Geen doorverwijzing achterlaten.",
        "apihelp-move-param-watch": "Pagina en de omleiding toevoegen aan de volglijst van de huidige gebruiker.",
        "apihelp-options-example-reset": "Alle voorkeuren opnieuw instellen.",
        "apihelp-options-example-change": "Voorkeuren wijzigen voor <kbd>skin</kbd> en <kbd>hideminor</kbd>.",
        "apihelp-parse-paramvalue-prop-categorieshtml": "Vraagt een HTML-versie van de categorieën op.",
-       "apihelp-parse-example-page": "Een pagina parseren.",
-       "apihelp-parse-example-text": "Wikitext parseren.",
-       "apihelp-parse-example-summary": "Een samenvatting parseren.",
+       "apihelp-parse-example-page": "Een pagina verwerken.",
+       "apihelp-parse-example-text": "Wikitext verwerken.",
+       "apihelp-parse-example-summary": "Een samenvatting verwerken.",
        "apihelp-patrol-description": "Een pagina of versie markeren als gecontroleerd.",
        "apihelp-patrol-example-rcid": "Een recente wijziging markeren als gecontroleerd.",
        "apihelp-patrol-example-revid": "Een versie markeren als gecontroleerd.",
index 14b0c06..ad54d42 100644 (file)
@@ -82,7 +82,7 @@
        "api-help-license-noname": "Licéncia : [[$1|Veire lo ligam]]",
        "api-help-license-unknown": "Licéncia : <span class=\"apihelp-unknown\">desconeguda</span>",
        "api-help-parameters": "{{PLURAL:$1|Paramètre|Paramètres}} :",
-       "api-help-param-deprecated": "Obsolet.",
+       "api-help-param-deprecated": "Obsolèt.",
        "api-help-datatypes-header": "Tipe de donadas",
        "api-help-param-default": "Per defaut : $1",
        "api-credits-header": "Mercejaments"
index 99aef3f..5c2cb6f 100644 (file)
@@ -1,12 +1,13 @@
 {
        "@metadata": {
                "authors": [
-                       "Mashoi7"
+                       "Mashoi7",
+                       "Ilja.mos"
                ]
        },
        "apihelp-createaccount-param-name": "Käyttäitunnus.",
        "apihelp-delete-description": "Ota sivu iäre.",
        "apihelp-login-param-name": "Käyttäitunnus.",
-       "apihelp-login-param-password": "Peittosana.",
+       "apihelp-login-param-password": "Salasana.",
        "apihelp-login-example-login": "Kirjuttai."
 }
index 949b4e7..fcdbb25 100644 (file)
@@ -17,7 +17,7 @@
        "apihelp-main-param-action": "Wybierz akcję do wykonania.",
        "apihelp-main-param-format": "Format danych wyjściowych.",
        "apihelp-main-param-maxlag": "Maksymalne opóźnienie mogą być używane kiedy MediaWiki jest zainstalowana w klastrze zreplikowanej bazy danych. By zapisać działania powodujące większe opóźnienie replikacji, ten parametr może wymusić czekanie u klienta, dopóki opóźnienie replikacji jest mniejsze niż określona wartość. W przypadku nadmiernego opóźnienia, kod błędu <samp>maxlag</samp> jest zwracany z wiadomością jak <samp>Oczekiwanie na $host: $lag sekund opóźnienia</samp>.<br />Zobacz [[mw:Manual:Maxlag_parameter|Podręcznik:Parametr Maxlag]] by uzyskać więcej informacji.",
-       "apihelp-main-param-assert": "Sprawdź, czy użytkownik jest zalogowany jeżeli jest ustawiony na <kbd>użytkownik</kbd>, lub ma prawa bota jeśli <kbd>bot</kbd>.",
+       "apihelp-main-param-assert": "Zweryfikuj, czy użytkownik jest zalogowany, jeżeli wybrano <kbd>user</kbd>, lub czy ma uprawnienia bota, jeżeli wybrano <kbd>bot</kbd>.",
        "apihelp-main-param-curtimestamp": "Dołącz obecny znacznik czasu do wyniku.",
        "apihelp-block-description": "Zablokuj użytkownika.",
        "apihelp-block-param-user": "Nazwa użytkownika, adres IP lub zakres adresów IP, które chcesz zablokować.",
@@ -55,7 +55,7 @@
        "apihelp-delete-example-simple": "Usuń <kbd>Main Page</kbd>.",
        "apihelp-delete-example-reason": "Usuń <kbd>Main Page</kbd> z powodem <kbd>Preparing for move</kbd>.",
        "apihelp-disabled-description": "Ten moduł został wyłączony.",
-       "apihelp-edit-description": "Utwórz i edytuj strony.;",
+       "apihelp-edit-description": "Twórz i edytuj strony.",
        "apihelp-edit-param-section": "Numer sekcji. <kbd>0</kbd> dla górnej sekcji, <kbd>new</kbd> dla nowej sekcji.",
        "apihelp-edit-param-sectiontitle": "Tytuł nowej sekcji.",
        "apihelp-edit-param-text": "Zawartość strony.",
index 6aa5ece..254f1c8 100644 (file)
        "apihelp-watch-example-unwatch": "Deixar de vigiar a página <kbd>Página Principal</kbd>.",
        "apihelp-json-description": "Dados de saída em formato JSON.",
        "api-help-title": "Ajuda API da MediaWiki",
+       "api-help-lead": "Esta é uma página de documentação API do MediaWiki gerada automaticamente.\n\nDocumentação e exemplos: https://www.mediawiki.org/wiki/API",
        "api-help-main-header": "Módulo principal",
        "api-help-flag-deprecated": "Este módulo está obsoleto.",
+       "api-help-source": "Fonte: $1",
        "api-help-license": "Licença: [[$1|$2]]",
        "api-help-license-noname": "Licença: [[$1|Ver ligação]]",
        "api-help-license-unknown": "Licença: <span class=\"apihelp-unknown\">desconhecida</span>",
        "api-help-param-deprecated": "Obsoleto.",
        "api-help-param-required": "Este parâmetro é obrigatório.",
        "api-help-datatypes-header": "Tipo de dados",
+       "api-help-param-type-limit": "Tipo: inteiro ou <kbd>max</kbd>",
+       "api-help-param-type-boolean": "Tipo: boolean ([[Special:ApiHelp/main#main/datatypes|detalhes]])",
+       "api-help-param-type-user": "Tipo: {{PLURAL:$1|1=nome de utilizador|2=lista de nomes de utilizadores}}",
        "api-help-param-list": "{{PLURAL:$1|1=Um dos seguintes valores|2=Valores (separar com <kbd>{{!}}</kbd>)}}: $2",
        "api-help-param-multi-separate": "Separe os valores com <kbd>|</kbd>.",
        "api-help-param-default": "Padrão: $1",
        "api-help-examples": "{{PLURAL:$1|Exemplo|Exemplos}}:",
        "api-help-permissions": "{{PLURAL:$1|Permissão|Permissiões}}:",
        "api-help-permissions-granted-to": "{{PLURAL:$1|Concedida a|Concedidas a}}: $2",
+       "api-help-open-in-apisandbox": "<small>[abrir na página de testes]</small>",
        "api-credits-header": "Créditos",
        "api-credits": "Programadores API:\n* Roan Kattouw (programador principal Set 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (criador, programador-líder Set 2006–Set 2007)\n* Brad Jorsch (programador-líder 2013–presente)\n\nPor favor, envie os seus comentários, sugestões e perguntas para mediawiki-api@lists.wikimedia.org ou reporte um erro técnico em https://phabricator.wikimedia.org/."
 }
index 2108b33..cde4cf1 100644 (file)
@@ -18,7 +18,7 @@
        "apihelp-main-description": "{{doc-apihelp-description|main}}",
        "apihelp-main-param-action": "{{doc-apihelp-param|main|action}}",
        "apihelp-main-param-format": "{{doc-apihelp-param|main|format}}",
-       "apihelp-main-param-maxlag": "{{doc-apihelp-param|main|maxlag}}\n\n\"$host\" and \"$lag\" are not variables and appear as is.",
+       "apihelp-main-param-maxlag": "{{doc-apihelp-param|main|maxlag}}\n\n\"$host\" and \"$lag\" are not variables and appear as is.\n----\n\"Database replication\" is a configuration where you have multiple databases that communicate with each other so they all contain the same data. A \"database replicated cluster\" is a cluster (meaning \"a group of computers that work together\") of databases configured in this manner.\n\n\"Lag\" refers to the situation where one or more of the databases in the cluster are not completely up to date. For example, if the \"master\" database has data up to 2016-01-21T01:23:45Z while one of the \"slave\" is only up to 2016-01-21T01:23:30Z, that's a lag of 15 seconds.\n\nIn this case, \"$lag\" and \"$host\" are syntactic variables rather than computer code variables, so <var> would not be appropriate. They are there to represent that the actual output text will be something like \"Waiting for db1045: 53 seconds lagged.\"",
        "apihelp-main-param-smaxage": "{{doc-apihelp-param|main|smaxage}}",
        "apihelp-main-param-maxage": "{{doc-apihelp-param|main|maxage}}",
        "apihelp-main-param-assert": "{{doc-apihelp-param|main|assert}}",
        "apihelp-patrol-description": "{{doc-apihelp-description|patrol}}",
        "apihelp-patrol-param-rcid": "{{doc-apihelp-param|patrol|rcid}}",
        "apihelp-patrol-param-revid": "{{doc-apihelp-param|patrol|revid}}",
+       "apihelp-patrol-param-tags": "{{doc-apihelp-param|patrol|tags}}",
        "apihelp-patrol-example-rcid": "{{doc-apihelp-example|patrol}}",
        "apihelp-patrol-example-revid": "{{doc-apihelp-example|patrol}}",
        "apihelp-protect-description": "{{doc-apihelp-description|protect}}",
        "apihelp-protect-param-protections": "{{doc-apihelp-param|protect|protections}}",
        "apihelp-protect-param-expiry": "{{doc-apihelp-param|protect|expiry}}",
        "apihelp-protect-param-reason": "{{doc-apihelp-param|protect|reason}}",
+       "apihelp-protect-param-tags": "{{doc-apihelp-param|protect|tags}}",
        "apihelp-protect-param-cascade": "{{doc-apihelp-param|protect|cascade}}",
        "apihelp-protect-param-watch": "{{doc-apihelp-param|protect|watch}}",
        "apihelp-protect-param-watchlist": "{{doc-apihelp-param|protect|watchlist}}",
        "apihelp-unblock-param-id": "{{doc-apihelp-param|unblock|id}}",
        "apihelp-unblock-param-user": "{{doc-apihelp-param|unblock|user}}",
        "apihelp-unblock-param-reason": "{{doc-apihelp-param|unblock|reason}}",
+       "apihelp-unblock-param-tags": "{{doc-apihelp-param|unblock|tags}}",
        "apihelp-unblock-example-id": "{{doc-apihelp-example|unblock}}",
        "apihelp-unblock-example-user": "{{doc-apihelp-example|unblock}}",
        "apihelp-undelete-description": "{{doc-apihelp-description|undelete}}",
        "apihelp-undelete-param-title": "{{doc-apihelp-param|undelete|title}}",
        "apihelp-undelete-param-reason": "{{doc-apihelp-param|undelete|reason}}",
+       "apihelp-undelete-param-tags": "{{doc-apihelp-param|undelete|tags}}",
        "apihelp-undelete-param-timestamps": "{{doc-apihelp-param|undelete|timestamps}}",
        "apihelp-undelete-param-fileids": "{{doc-apihelp-param|undelete|fileids}}",
        "apihelp-undelete-param-watchlist": "{{doc-apihelp-param|undelete|watchlist}}",
index a692ff2..18dc60c 100644 (file)
                        "INS Pirat",
                        "Macofe",
                        "Краснорядцева Елена",
-                       "Iniquity"
+                       "Iniquity",
+                       "Лилиә"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Документация]]\n* [[mw:API:FAQ|ЧаВО]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Почтовая рассылка]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Новости API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Ошибки и запросы]\n</div>\n<strong>Статус:</strong> Все отображаемые на этой странице функции должны работать, однако API находится в статусе активной разработки, и может измениться в любой момент. Подпишитесь на  [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ почтовую рассылку mediawiki-api-announce], чтобы быть в курсе обновлений.\n\n<strong>Ошибочные запросы:</strong> Если API получает запрос с ошибкой, вернётся заголовок HTTP с ключом \"MediaWiki-API-Error\", после чего значение заголовка и код ошибки будут отправлены обратно и установлены в то же значение. Более подробную информацию см. [[mw:API:Errors_and_warnings|API: Ошибки и предупреждения]].",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Документация]]\n* [[mw:API:FAQ|ЧаВО]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Почтовая рассылка]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Новости API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Ошибки и запросы]\n</div>\n<strong>Статус:</strong> Все отображаемые на этой странице функции должны работать, однако API находится в статусе активной разработки и может измениться в любой момент. Подпишитесь на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ почтовую рассылку mediawiki-api-announce], чтобы быть в курсе обновлений.\n\n<strong>Ошибочные запросы:</strong> Если API получает запрос с ошибкой, вернётся заголовок HTTP с ключом «MediaWiki-API-Error», после чего значение заголовка и код ошибки будут отправлены обратно и установлены в то же значение. Более подробную информацию см. [[mw:API:Errors_and_warnings|API: Ошибки и предупреждения]].\n\n<strong>Тестирование:</strong> для удобства тестирования API-запросов, см. [[Special:ApiSandbox]].",
        "apihelp-main-param-action": "Действие, которое следует выполнить.",
        "apihelp-main-param-format": "Формат вывода.",
        "apihelp-main-param-smaxage": "Устанавливает значение HTTP-заголовка Cache-Control <code>s-maxage</code> в заданное число секунд. Ошибки никогда не кэшируются.",
@@ -32,7 +33,9 @@
        "apihelp-block-param-anononly": "Блокировать только анонимных пользователей (т. е. запретить анонимные правки для этого IP-адреса).",
        "apihelp-block-param-nocreate": "Запретить создание учётных записей.",
        "apihelp-block-param-autoblock": "Автоматически блокировать последний использованный IP-адрес и все последующие, с которых будут совершаться попытки авторизации.",
+       "apihelp-block-param-noemail": "Ҡулланыусының Вики аша электрон почта ебәреүен тыйыу. (Талап итә <code>blockemail</code> хоҡуғын)",
        "apihelp-block-param-hidename": "Скрыть имя участника из журнала блокировок. (Требуется право <code>hideuser</code>).",
+       "apihelp-block-param-allowusertalk": "Позволяет участникам редактировать их собственные страницы обсуждения (зависит от <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
        "apihelp-block-param-reblock": "Если участник уже заблокирован, перезаписать существующую блокировку.",
        "apihelp-block-param-watchuser": "Следить за страницей пользователя или IP-участника и страницей обсуждения.",
        "apihelp-checktoken-param-type": "Тип маркера проходит тестирование.",
        "apihelp-login-example-login": "Войти",
        "apihelp-logout-description": "Выйти и очистить данные сессии.",
        "apihelp-mergehistory-description": "Объединение историй правок",
+       "apihelp-mergehistory-param-reason": "Причина для объединения истории.",
        "apihelp-move-description": "Переместить страницу.",
        "apihelp-move-param-to": "Заголовок, в который следует переименовать страницу.",
        "apihelp-move-param-reason": "Причина переименования.",
        "apihelp-move-param-watch": "Добавить страницу и перенаправление в список наблюдения текущего пользователя.",
        "apihelp-move-param-unwatch": "Удалить страницу и перенаправление из списка наблюдения текущего пользователя.",
        "apihelp-move-param-ignorewarnings": "Игнорировать предупреждения",
+       "apihelp-move-example-move": "Переименовать <kbd>Badtitle</kbd> в <kbd>Goodtitle</kbd> без оставления перенаправления.",
        "apihelp-opensearch-param-search": "Строка поиска.",
        "apihelp-opensearch-param-limit": "Максимальное число возвращаемых результатов.",
        "apihelp-opensearch-param-namespace": "Пространства имён для поиска.",
        "apihelp-opensearch-param-format": "Формат вывода.",
+       "apihelp-options-param-reset": "Сбрасывает настройки на установленные по умолчанию.",
        "apihelp-options-example-reset": "Сбросить все настройки.",
        "apihelp-paraminfo-description": "Получить информацию о модулях API.",
        "apihelp-paraminfo-param-helpformat": "Формат строк справки.",
index 6ee9b15..4b0a00e 100644 (file)
        "apihelp-patrol-description": "Відпатрулювати сторінку чи версію.",
        "apihelp-patrol-param-rcid": "ID нещодавніх змін для патрулювання.",
        "apihelp-patrol-param-revid": "Ідентифікатор версії для патрулювання.",
+       "apihelp-patrol-param-tags": "Змінити теги, що мають бути застосовані до запису в журналі патрулювання.",
        "apihelp-patrol-example-rcid": "Відпатрулювати останню зміну.",
        "apihelp-patrol-example-revid": "Відпатрулювати версію.",
        "apihelp-protect-description": "Змінити рівень захисту сторінки.",
        "apihelp-protect-param-protections": "Список рівнів захисту у форматі <kbd>action=level</kbd> (напр., <kbd>edit=sysop</kbd>).\n\n<strong>Примітка:</strong> Обмеження на дії, яких нема в списку, буде знято.",
        "apihelp-protect-param-expiry": "Часові мітки закінчення. Якщо встановлена лише одна мітка, її буде використано для усіх захистів. Для безстрокового захисту використовуйте <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd> або <kbd>never</kbd>.",
        "apihelp-protect-param-reason": "Причина для (зняття) захисту.",
+       "apihelp-protect-param-tags": "Змінити теги, що мають бути застосовані до запису в журналі захисту.",
        "apihelp-protect-param-cascade": "Увімкнути каскадний захист (тобто захистити включені шаблоні і зображення, використані на цій сторінці). Ігнорується, якщо жоден з вказаних рівнів захисту не підтримує каскадність.",
        "apihelp-protect-param-watch": "Якщо вказано, додати сторінку, де додається/знімається захист, до списку спостереження поточного користувача.",
        "apihelp-protect-param-watchlist": "Беззастережно додати або вилучити сторінку зі списку спостереження поточного користувача, використати налаштування або не змінювати спостереження.",
        "apihelp-unblock-param-id": "Ідентифікатор блоку чи розблокування (отриманий через <kbd>list=blocks</kbd>). Не може бути використано разом з <var>$1user</var>.",
        "apihelp-unblock-param-user": "Ім'я користувача, IP-адреса чи IP-діапазон до розблокування. Не може бути використано разом з <var>$1id</var>.",
        "apihelp-unblock-param-reason": "Причина розблокування.",
+       "apihelp-unblock-param-tags": "Змінити теги, що мають бути застосовані до запису в журналі блокувань.",
        "apihelp-unblock-example-id": "Зняти блокування з ідентифікатором #<kbd>105</kbd>.",
        "apihelp-unblock-example-user": "Розблокувати користувача <kbd>Bob</kbd> з причиною <kbd>Sorry Bob</kbd>.",
        "apihelp-undelete-description": "Відновити версії вилученої сторінки.\n\nСписок вилучених версій (включено з часовими мітками) може бути отримано через [[Special:ApiHelp/query+deletedrevs|list=deletedrevs]], а список ідентифікаторів вилучених файлів може бути отримано через [[Special:ApiHelp/query+filearchive|list=filearchive]].",
        "apihelp-undelete-param-title": "Назва сторінки, яку слід відновити.",
        "apihelp-undelete-param-reason": "Причина відновлення.",
+       "apihelp-undelete-param-tags": "Змінити теги, що мають бути застосовані до запису в журналі вилучень.",
        "apihelp-undelete-param-timestamps": "Часові мітки версій, які слід відновити. Якщо і <var>$1timestamps</var>, і <var>$1fileids</var> порожні, буде відновлено всі версії.",
        "apihelp-undelete-param-fileids": "Ідентифікатори версій файлів, які слід відновити. Якщо і <var>$1timestamps</var>, і <var>$1fileids</var> порожні, буде відновлено всі версії.",
        "apihelp-undelete-param-watchlist": "Безумовно додати або вилучити сторінку із списку спостереження поточного користувача, використати налаштування, або не змінювати статус (не)спостереження.",
index 7f5e0a0..6e2ff5a 100644 (file)
@@ -61,6 +61,7 @@
        "apihelp-edit-param-unwatch": "Bỏ trang này khỏi danh sách theo dõi của người dùng hiện tại.",
        "apihelp-edit-param-undo": "Hoàn tác sửa đổi này. Ghi đè $1text, $1prependtext và $ 1appendtext.",
        "apihelp-edit-param-undoafter": "Hoàn tác tất cả các sửa đổi từ $1undo cho tới sửa đổi này. Nếu không được thiết lập, chỉ cần lùi lại một sửa đổi.",
+       "apihelp-edit-param-redirect": "Tự động giải quyết các chuyển hướng.",
        "apihelp-edit-example-edit": "Sửa đổi trang",
        "apihelp-edit-example-prepend": "Đưa <kbd>_&#95;NOTOC_&#95;</kbd> vào đầu trang",
        "apihelp-edit-example-undo": "Lùi sửa các thay đổi 13579–13585 và tự động tóm lược",
        "apihelp-expandtemplates-description": "Bung tất cả bản mẫu trong văn bản wiki.",
        "apihelp-expandtemplates-param-title": "Tên trang.",
        "apihelp-expandtemplates-param-text": "Văn bản wiki để bung.",
+       "apihelp-expandtemplates-paramvalue-prop-wikitext": "Wikitext mở rộng.",
        "apihelp-expandtemplates-paramvalue-prop-parsetree": "Cây phân tích XML của đầu vào.",
        "apihelp-feedcontributions-description": "Trả về nguồn cấp đóng góp người dùng.",
        "apihelp-feedcontributions-param-feedformat": "Định dạng nguồn cấp.",
+       "apihelp-feedcontributions-param-user": "Người dùng nhận được những đóng góp gì.",
+       "apihelp-feedcontributions-param-namespace": "Không gian tên để lọc các khoản đóng góp của.",
        "apihelp-feedcontributions-param-year": "Từ năm (trở về trước).",
        "apihelp-feedcontributions-param-month": "Từ tháng (trở về trước).",
+       "apihelp-feedcontributions-param-tagfilter": "Lọc đóng góp có những thẻ này.",
        "apihelp-feedcontributions-param-deletedonly": "Chỉ hiện các đóng góp đã xóa.",
        "apihelp-feedcontributions-param-toponly": "Chỉ hiện các phiên bản mới nhất.",
        "apihelp-feedcontributions-param-newonly": "Chỉ hiện các sửa đổi tạo trang.",
        "apihelp-feedcontributions-example-simple": "Trả về các đóng góp của người dùng <kbd>Ví dụ</kbd>.",
        "apihelp-feedrecentchanges-description": "Trả về nguồn cấp thay đổi gần đây.",
        "apihelp-feedrecentchanges-param-feedformat": "Định dạng nguồn cấp.",
+       "apihelp-feedrecentchanges-param-days": "Ngày để giới hạn kết quả.",
+       "apihelp-feedrecentchanges-param-limit": "Số kết quả lớn nhất để cho ra.",
        "apihelp-feedrecentchanges-param-hideminor": "Ẩn thay đổi nhỏ.",
        "apihelp-feedrecentchanges-param-hidebots": "Ẩn thay đổi do bot thực hiện.",
        "apihelp-feedrecentchanges-param-hideanons": "Ẩn thay đổi do người dùng vô danh thực hiện.",
        "apihelp-feedrecentchanges-param-hidemyself": "Ẩn thay đổi do người dùng hiện tại thực hiện.",
        "apihelp-feedrecentchanges-param-tagfilter": "Lọc theo thẻ.",
        "apihelp-feedrecentchanges-example-simple": "Xem thay đổi gần đây.",
+       "apihelp-feedrecentchanges-example-30days": "Hiển thị các thay đổi trong 30 ngày gần đây.",
        "apihelp-feedwatchlist-description": "Trả về nguồn cấp danh sách theo dõi.",
        "apihelp-feedwatchlist-param-feedformat": "Định dạng nguồn cấp.",
        "apihelp-feedwatchlist-example-default": "Xem nguồn cấp danh sách theo dõi.",
+       "apihelp-filerevert-description": "Phục hồi một tập tin sang một phiên bản cũ.",
        "apihelp-filerevert-param-comment": "Tải lên bình luận.",
        "apihelp-filerevert-param-archivename": "Tên lưu trữ của bản sửa đổi để trở lại .",
        "apihelp-filerevert-example-revert": "Hoàn nguyên <kbd>Wiki.png</kbd> veef phiên bản <kbd>2011-03-05T15:27:40Z</kbd>.",
        "apihelp-help-description": "Hiển thị trợ giúp cho các mô-đun xác định.",
        "apihelp-help-param-helpformat": "Định dạng của văn bản trợ giúp được cho ra.",
+       "apihelp-help-example-main": "Trợ giúp cho các mô-đun chính.",
        "apihelp-help-example-recursive": "Tất cả trợ giúp trong một trang",
        "apihelp-help-example-help": "Trợ giúp cho chính bản thân module trợ giúp",
        "apihelp-help-example-query": "Trợ giúp cho hai module con truy vấn",
        "apihelp-imagerotate-param-rotation": "Độ xoay hình ảnh theo chiều kim đồng hồ.",
        "apihelp-imagerotate-example-simple": "Xoay <kbd>Tập tin:Ví dụ.jpg</kbd> <kbd>90</kbd> độ.",
        "apihelp-imagerotate-example-generator": "Xoay tất cả các hình ảnh trong <kbd>Thể loại:Búng</kbd> <kbd>180</kbd> độ.",
+       "apihelp-import-param-summary": "Nhập tóm lược.",
+       "apihelp-import-param-xml": "Tập tin XML đã được tải lên.",
+       "apihelp-import-param-interwikisource": "Dành cho các nhập khẩu interwiki: wiki để nhập từ.",
        "apihelp-login-param-name": "Tên người dùng.",
        "apihelp-login-param-password": "Mật khẩu.",
        "apihelp-login-param-domain": "Tên miền (tùy chọn).",
        "apihelp-login-example-gettoken": "Lấy dấu hiệu đăng nhập",
        "apihelp-login-example-login": "Đăng nhập",
        "apihelp-logout-example-logout": "Đăng xuất người dùng hiện tại",
+       "apihelp-mergehistory-description": "Hợp nhất lịch sử trang.",
+       "apihelp-mergehistory-param-reason": "Lý do hợp nhất lịch sử.",
        "apihelp-move-description": "Di chuyển trang.",
        "apihelp-move-param-reason": "Lý do đổi tên.",
+       "apihelp-move-param-movesubpages": "Đổi tên trang con, nếu có thể áp dụng.",
        "apihelp-move-param-noredirect": "Không tạo trang đổi hướng.",
        "apihelp-move-param-ignorewarnings": "Bỏ qua tất cả các cảnh báo.",
        "apihelp-opensearch-description": "Tìm kiếm trong wiki qua giao thức OpenSearch.",
        "apihelp-opensearch-param-format": "Định dạng kết quả được cho ra.",
        "apihelp-opensearch-example-te": "Tìm trang bắt đầu với <kbd>Te</kbd>.",
        "apihelp-options-example-reset": "Mặc định lại các tùy chọn",
+       "apihelp-paraminfo-description": "Lấy thông tin về các module API.",
        "apihelp-paraminfo-param-helpformat": "Định dạng chuỗi trợ giúp.",
        "apihelp-parse-param-summary": "Lời tóm lược để phân tích.",
        "apihelp-parse-param-section": "Chỉ phân tích nội dung của số phần này.\n\nNếu có <kbd>new</kbd> thì phân tích <var>$1text</var> và <var>$1sectiontitle</var> như thể thêm phần mới vào trang.\n\nPhần <kbd>new</kbd> chỉ được chấp nhận khi định rõ <var>text</var>.",
index b177ce6..fb8464c 100644 (file)
        "apihelp-patrol-description": "巡查页面或修订版本。",
        "apihelp-patrol-param-rcid": "要巡查的最近更改 ID。",
        "apihelp-patrol-param-revid": "要巡查的修订版本ID。",
+       "apihelp-patrol-param-tags": "要在巡查日志中应用到实体的更改标签。",
        "apihelp-patrol-example-rcid": "巡查一次最近更改。",
        "apihelp-patrol-example-revid": "巡查一次修订。",
        "apihelp-protect-description": "更改页面的保护等级。",
        "apihelp-protect-param-protections": "保护等级列表,格式:<kbd>action=level</kbd>(例如<kbd>edit=sysop</kbd>)。\n\n<strong>注意:</strong>未列出的操作将移除限制。",
        "apihelp-protect-param-expiry": "到期时间戳。如果只有一个时间戳被设置,它将被用于所有保护。使用<kbd>infinite</kbd>、<kbd>indefinite</kbd>、<kbd>infinity</kbd>或<kbd>never</kbd>用于永不过期的保护。",
        "apihelp-protect-param-reason": "(解除)保护的原因。",
+       "apihelp-protect-param-tags": "要在保护日志中应用到实体的更改标签。",
        "apihelp-protect-param-cascade": "启用连锁保护(也就是保护包含于此页面的页面)。如果所有提供的保护等级不支持连锁,就将其忽略。",
        "apihelp-protect-param-watch": "如果设置,就加入已开始(解除)保护的页面至当前用户的监视列表。",
        "apihelp-protect-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
        "apihelp-unblock-param-id": "解封时需要的封禁ID(通过<kbd>list=blocks</kbd>获得)。不能与<var>$1user</var>一起使用。",
        "apihelp-unblock-param-user": "要解封的用户名、IP地址或IP段。不能与<var>$1id</var>一起使用。",
        "apihelp-unblock-param-reason": "解封的原因。",
+       "apihelp-unblock-param-tags": "要在封禁日志中应用到实体的更改标签。",
        "apihelp-unblock-example-id": "解封封禁ID #<kbd>105</kbd>。",
        "apihelp-unblock-example-user": "解封用户<kbd>Bob</kbd>,原因<kbd>Sorry Bob</kbd>。",
        "apihelp-undelete-description": "恢复一个被删除页面的修订。\n\n被删除修订的列表(包括时间戳)可通过[[Special:ApiHelp/query+deletedrevs|list=deletedrevs]]检索到,并且被删除的文件ID列表可通过[[Special:ApiHelp/query+filearchive|list=filearchive]]检索到。",
        "apihelp-undelete-param-title": "要恢复的页面标题。",
        "apihelp-undelete-param-reason": "恢复的原因。",
+       "apihelp-undelete-param-tags": "要在删除日志中应用到实体的更改标签。",
        "apihelp-undelete-param-timestamps": "要回复的修订的时间戳。如果<var>$1timestamps</var>和<var>$1fileids</var>都为空,所有将被恢复。",
        "apihelp-undelete-param-fileids": "要恢复的文件修订ID。如果<var>$1timestamps</var>和<var>$1fileids</var>都为空,所有将被恢复。",
        "apihelp-undelete-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
index a954d9f..361fe23 100644 (file)
@@ -279,7 +279,7 @@ class BacklinkCache {
                                $conds = [
                                        "{$prefix}_namespace" => $this->title->getNamespace(),
                                        "{$prefix}_title" => $this->title->getDBkey(),
-                                       $this->getDb()->makeList( [
+                                       $this->getDB()->makeList( [
                                                "{$prefix}_interwiki" => '',
                                                "{$prefix}_interwiki IS NULL",
                                        ], LIST_OR ),
index b058d1f..b26dc8d 100644 (file)
@@ -1054,7 +1054,7 @@ class MessageCache {
         * @param Title $title
         * @param bool $linestart Whether or not this is at the start of a line
         * @param bool $interface Whether this is an interface message
-        * @param string $language Language code
+        * @param Language|string $language Language code
         * @return ParserOutput|string
         */
        public function parse( $text, $title = null, $linestart = true,
@@ -1067,6 +1067,10 @@ class MessageCache {
                $parser = $this->getParser();
                $popts = $this->getParserOptions();
                $popts->setInterfaceMessage( $interface );
+
+               if ( is_string( $language ) ) {
+                       $language = Language::factory( $language );
+               }
                $popts->setTargetLanguage( $language );
 
                if ( !$title || !$title instanceof Title ) {
index 30906b8..1ff6f85 100644 (file)
@@ -65,7 +65,11 @@ class CategoryMembershipChange {
         */
        public function __construct( Title $pageTitle, Revision $revision = null ) {
                $this->pageTitle = $pageTitle;
-               $this->timestamp = wfTimestampNow();
+               if ( $revision === null ) {
+                       $this->timestamp = wfTimestampNow();
+               } else {
+                       $this->timestamp = $revision->getTimestamp();
+               }
                $this->revision = $revision;
                $this->newForCategorizationCallback = [ 'RecentChange', 'newForCategorization' ];
        }
index 485d523..cf97afb 100644 (file)
@@ -132,7 +132,7 @@ class ChangesList extends ContextSource {
                $f = '';
                foreach ( array_keys( $this->getConfig()->get( 'RecentChangesFlags' ) ) as $flag ) {
                        $f .= isset( $flags[$flag] ) && $flags[$flag]
-                               ? self::flag( $flag )
+                               ? self::flag( $flag, $this->getContext() )
                                : $nothing;
                }
 
@@ -140,40 +140,68 @@ class ChangesList extends ContextSource {
        }
 
        /**
-        * Provide the "<abbr>" element appropriate to a given abbreviated flag,
-        * namely the flag indicating a new page, a minor edit, a bot edit, or an
-        * unpatrolled edit.  By default in English it will contain "N", "m", "b",
-        * "!" respectively, plus it will have an appropriate title and class.
+        * Get an array of default HTML class attributes for the change.
+        *
+        * @param RecentChange|RCCacheEntry $rc
+        * @param string|bool $watched Optionally timestamp for adding watched class
+        *
+        * @return array of classes
+        */
+       protected function getHTMLClasses( $rc, $watched ) {
+               $classes = [];
+               $logType = $rc->mAttribs['rc_log_type'];
+
+               if ( $logType ) {
+                       $classes[] = Sanitizer::escapeClass( 'mw-changeslist-log-' . $logType );
+               } else {
+                       $classes[] = Sanitizer::escapeClass( 'mw-changeslist-ns' .
+                               $rc->mAttribs['rc_namespace'] . '-' . $rc->mAttribs['rc_title'] );
+               }
+
+               // Indicate watched status on the line to allow for more
+               // comprehensive styling.
+               $classes[] = $watched && $rc->mAttribs['rc_timestamp'] >= $watched
+                       ? 'mw-changeslist-line-watched'
+                       : 'mw-changeslist-line-not-watched';
+
+               return $classes;
+       }
+
+       /**
+        * Make an "<abbr>" element for a given change flag. The flag indicating a new page, minor edit,
+        * bot edit, or unpatrolled edit. In English it typically contains "N", "m", "b", or "!".
         *
         * @param string $flag One key of $wgRecentChangesFlags
-        * @return string Raw HTML
+        * @param IContextSource $context
+        * @return string HTML
         */
-       public static function flag( $flag ) {
+       public static function flag( $flag, IContextSource $context = null ) {
+               static $map = [ 'minoredit' => 'minor', 'botedit' => 'bot' ];
                static $flagInfos = null;
+
                if ( is_null( $flagInfos ) ) {
                        global $wgRecentChangesFlags;
                        $flagInfos = [];
                        foreach ( $wgRecentChangesFlags as $key => $value ) {
-                               $flagInfos[$key]['letter'] = wfMessage( $value['letter'] )->escaped();
-                               $flagInfos[$key]['title'] = wfMessage( $value['title'] )->escaped();
+                               $flagInfos[$key]['letter'] = $value['letter'];
+                               $flagInfos[$key]['title'] = $value['title'];
                                // Allow customized class name, fall back to flag name
-                               $flagInfos[$key]['class'] = Sanitizer::escapeClass(
-                                       isset( $value['class'] ) ? $value['class'] : $key );
+                               $flagInfos[$key]['class'] = isset( $value['class'] ) ? $value['class'] : $key;
                        }
                }
 
-               // Inconsistent naming, bleh, kepted for b/c
-               $map = [
-                       'minoredit' => 'minor',
-                       'botedit' => 'bot',
-               ];
+               $context = $context ?: RequestContext::getMain();
+
+               // Inconsistent naming, kepted for b/c
                if ( isset( $map[$flag] ) ) {
                        $flag = $map[$flag];
                }
 
-               return "<abbr class='" . $flagInfos[$flag]['class'] . "' title='" .
-                       $flagInfos[$flag]['title'] . "'>" . $flagInfos[$flag]['letter'] .
-                       '</abbr>';
+               $info = $flagInfos[$flag];
+               return Html::element( 'abbr', [
+                       'class' => $info['class'],
+                       'title' => wfMessage( $info['title'] )->setContext( $context )->text(),
+               ], wfMessage( $info['letter'] )->setContext( $context )->text() );
        }
 
        /**
@@ -309,16 +337,16 @@ class ChangesList extends ContextSource {
         */
        public function insertLog( &$s, $title, $logtype ) {
                $page = new LogPage( $logtype );
-               $logname = $page->getName()->escaped();
+               $logname = $page->getName()->setContext( $this->getContext() )->escaped();
                $s .= $this->msg( 'parentheses' )->rawParams( Linker::linkKnown( $title, $logname ) )->escaped();
        }
 
        /**
         * @param string $s HTML to update
         * @param RecentChange $rc
-        * @param bool $unpatrolled
+        * @param bool|null $unpatrolled Unused variable, since 1.27.
         */
-       public function insertDiffHist( &$s, &$rc, $unpatrolled ) {
+       public function insertDiffHist( &$s, &$rc, $unpatrolled = null ) {
                # Diff link
                if (
                        $rc->mAttribs['rc_type'] == RC_NEW ||
index 99cfeec..946c6d1 100644 (file)
@@ -503,10 +503,11 @@ class EnhancedChangesList extends ChangesList {
                /** @var $block0 RecentChange */
                $block0 = $block[0];
                $last = $block[count( $block ) - 1];
-               if ( !$allLogs && $rcObj->mAttribs['rc_type'] != RC_CATEGORIZE ) {
-                       if ( !ChangesList::userCan( $rcObj, Revision::DELETED_TEXT, $this->getUser() ) ) {
-                               $links['total-changes'] = $nchanges[$n];
-                       } elseif ( $isnew ) {
+               if ( !$allLogs ) {
+                       if ( !ChangesList::userCan( $rcObj, Revision::DELETED_TEXT, $this->getUser() ) ||
+                               $isnew ||
+                               $rcObj->mAttribs['rc_type'] == RC_CATEGORIZE
+                       ) {
                                $links['total-changes'] = $nchanges[$n];
                        } else {
                                $links['total-changes'] = Linker::link(
@@ -577,7 +578,9 @@ class EnhancedChangesList extends ChangesList {
 
                $type = $rcObj->mAttribs['rc_type'];
                $logType = $rcObj->mAttribs['rc_log_type'];
-               $classes = [ 'mw-enhanced-rc' ];
+               $classes = $this->getHTMLClasses( $rcObj, $rcObj->watched );
+               $classes[] = 'mw-enhanced-rc';
+
                if ( $logType ) {
                        # Log entry
                        $classes[] = Sanitizer::escapeClass( 'mw-changeslist-log-' . $logType );
@@ -585,8 +588,6 @@ class EnhancedChangesList extends ChangesList {
                        $classes[] = Sanitizer::escapeClass( 'mw-changeslist-ns' .
                                $rcObj->mAttribs['rc_namespace'] . '-' . $rcObj->mAttribs['rc_title'] );
                }
-               $classes[] = $rcObj->watched && $rcObj->mAttribs['rc_timestamp'] >= $rcObj->watched
-                       ? 'mw-changeslist-line-watched' : 'mw-changeslist-line-not-watched';
 
                # Flag and Timestamp
                $data['recentChangesFlags'] = [
index ff311f2..8eb06ce 100644 (file)
@@ -33,7 +33,7 @@ class OldChangesList extends ChangesList {
         */
        public function recentChangesLine( &$rc, $watched = false, $linenumber = null ) {
 
-               $classes = [];
+               $classes = $this->getHTMLClasses( $rc, $watched );
                // use mw-line-even/mw-line-odd class only if linenumber is given (feature from bug 14468)
                if ( $linenumber ) {
                        if ( $linenumber & 1 ) {
@@ -43,11 +43,6 @@ class OldChangesList extends ChangesList {
                        }
                }
 
-               // Indicate watched status on the line to allow for more
-               // comprehensive styling.
-               $classes[] = $watched && $rc->mAttribs['rc_timestamp'] >= $watched
-                       ? 'mw-changeslist-line-watched' : 'mw-changeslist-line-not-watched';
-
                $html = $this->formatChangeLine( $rc, $classes, $watched );
 
                if ( $this->watchlist ) {
@@ -92,7 +87,7 @@ class OldChangesList extends ChangesList {
                        }
                // Regular entries
                } else {
-                       $this->insertDiffHist( $html, $rc, $unpatrolled );
+                       $this->insertDiffHist( $html, $rc );
                        # M, N, b and ! (minor, new, bot and unpatrolled)
                        $html .= $this->recentChangesFlags(
                                [
index 2c95928..b6a0868 100644 (file)
@@ -430,9 +430,11 @@ class RecentChange {
         *
         * @param RecentChange|int $change RecentChange or corresponding rc_id
         * @param bool $auto For automatic patrol
+        * @param string|string[] $tags Change tags to add to the patrol log entry
+        *   ($user should be able to add the specified tags before this is called)
         * @return array See doMarkPatrolled(), or null if $change is not an existing rc_id
         */
-       public static function markPatrolled( $change, $auto = false ) {
+       public static function markPatrolled( $change, $auto = false, $tags = null ) {
                global $wgUser;
 
                $change = $change instanceof RecentChange
@@ -443,7 +445,7 @@ class RecentChange {
                        return null;
                }
 
-               return $change->doMarkPatrolled( $wgUser, $auto );
+               return $change->doMarkPatrolled( $wgUser, $auto, $tags );
        }
 
        /**
@@ -453,9 +455,11 @@ class RecentChange {
         * 'markedaspatrollederror-noautopatrol' as errors
         * @param User $user User object doing the action
         * @param bool $auto For automatic patrol
+        * @param string|string[] $tags Change tags to add to the patrol log entry
+        *   ($user should be able to add the specified tags before this is called)
         * @return array Array of permissions errors, see Title::getUserPermissionsErrors()
         */
-       public function doMarkPatrolled( User $user, $auto = false ) {
+       public function doMarkPatrolled( User $user, $auto = false, $tags = null ) {
                global $wgUseRCPatrol, $wgUseNPPatrol, $wgUseFilePatrol;
                $errors = [];
                // If recentchanges patrol is disabled, only new pages or new file versions
@@ -490,7 +494,8 @@ class RecentChange {
                // Actually set the 'patrolled' flag in RC
                $this->reallyMarkPatrolled();
                // Log this patrol event
-               PatrolLog::record( $this, $auto, $user );
+               PatrolLog::record( $this, $auto, $user, $tags );
+
                Hooks::run(
                                        'MarkPatrolledComplete',
                                        [ $this->getAttribute( 'rc_id' ), &$user, false, $auto ]
index af2f66b..9db1697 100644 (file)
@@ -114,7 +114,7 @@ class ChangeTags {
        /**
         * Add tags to a change given its rc_id, rev_id and/or log_id
         *
-        * @param string|array $tags Tags to add to the change
+        * @param string|string[] $tags Tags to add to the change
         * @param int|null $rc_id The rc_id of the change to add the tags to
         * @param int|null $rev_id The rev_id of the change to add the tags to
         * @param int|null $log_id The log_id of the change to add the tags to
index 24bded7..2dc953c 100644 (file)
@@ -73,8 +73,8 @@ class ChangeTagsLogItem extends RevisionItemBase {
                $loglink = Linker::link(
                        SpecialPage::getTitleFor( 'Log' ),
                        $this->list->msg( 'log' )->escaped(),
-                       array(),
-                       array( 'page' => $title->getPrefixedText() )
+                       [],
+                       [ 'page' => $title->getPrefixedText() ]
                );
                $loglink = $this->list->msg( 'parentheses' )->rawParams( $loglink )->escaped();
                // User links and action text
@@ -88,7 +88,7 @@ class ChangeTagsLogItem extends RevisionItemBase {
                }
 
                $content = "$loglink $date $action $comment";
-               $attribs = array();
+               $attribs = [];
                $tags = $this->getTags();
                if ( $tags ) {
                        list( $tagSummary, $classes ) = ChangeTags::formatSummaryRow(
index 76881bc..931128f 100644 (file)
@@ -243,7 +243,7 @@ interface Content {
         *
         * @since 1.21
         *
-        * @param bool $hasLinks If it is known whether this content contains
+        * @param bool|null $hasLinks If it is known whether this content contains
         *    links, provide this information here, to avoid redundant parsing to
         *    find out.
         *
index 6bc6abf..7430caf 100644 (file)
@@ -55,7 +55,7 @@ class MWUnknownContentModelException extends MWException {
 
        /** @return string */
        public function getModelId() {
-               return $modelId;
+               return $this->modelId;
        }
 }
 
@@ -777,7 +777,7 @@ abstract class ContentHandler {
         * @return string
         */
        protected function getDiffEngineClass() {
-               return 'DifferenceEngine';
+               return DifferenceEngine::class;
        }
 
        /**
@@ -1082,6 +1082,16 @@ abstract class ContentHandler {
                return false;
        }
 
+       /**
+        * Returns true if this content model supports categories.
+        * The default implementation returns true.
+        *
+        * @return bool Always true.
+        */
+       public function supportsCategories() {
+               return true;
+       }
+
        /**
         * Returns true if this content model supports redirects.
         * This default implementation returns false.
index 8fe88fe..40d9277 100644 (file)
@@ -121,19 +121,19 @@ class JsonContent extends TextContent {
         */
        protected function rootValueTable( $val ) {
                if ( is_object( $val ) ) {
-                       return self::objectTable( $val );
+                       return $this->objectTable( $val );
                }
 
                if ( is_array( $val ) ) {
                        // Wrap arrays in another array so that they're visually boxed in a container.
                        // Otherwise they are visually indistinguishable from a single value.
-                       return self::arrayTable( [ $val ] );
+                       return $this->arrayTable( [ $val ] );
                }
 
                return Html::rawElement( 'table', [ 'class' => 'mw-json mw-json-single-value' ],
                        Html::rawElement( 'tbody', [],
                                Html::rawElement( 'tr', [],
-                                       Html::element( 'td', [], self::primitiveValue( $val ) )
+                                       Html::element( 'td', [], $this->primitiveValue( $val ) )
                                )
                        )
                );
@@ -161,7 +161,7 @@ class JsonContent extends TextContent {
                        );
                }
                return Html::rawElement( 'table', [ 'class' => 'mw-json' ],
-                       Html::rawElement( 'tbody', [], join( '', $rows ) )
+                       Html::rawElement( 'tbody', [], implode( '', $rows ) )
                );
        }
 
@@ -174,7 +174,7 @@ class JsonContent extends TextContent {
         */
        protected function objectRow( $key, $val ) {
                $th = Html::element( 'th', [], $key );
-               $td = self::valueCell( $val );
+               $td = $this->valueCell( $val );
                return Html::rawElement( 'tr', [], $th . $td );
        }
 
@@ -200,7 +200,7 @@ class JsonContent extends TextContent {
                        );
                }
                return Html::rawElement( 'table', [ 'class' => 'mw-json' ],
-                       Html::rawElement( 'tbody', [], join( "\n", $rows ) )
+                       Html::rawElement( 'tbody', [], implode( "\n", $rows ) )
                );
        }
 
@@ -211,7 +211,7 @@ class JsonContent extends TextContent {
         * @return string HTML.
         */
        protected function arrayRow( $val ) {
-               $td = self::valueCell( $val );
+               $td = $this->valueCell( $val );
                return Html::rawElement( 'tr', [], $td );
        }
 
@@ -223,14 +223,14 @@ class JsonContent extends TextContent {
         */
        protected function valueCell( $val ) {
                if ( is_object( $val ) ) {
-                       return Html::rawElement( 'td', [], self::objectTable( $val ) );
+                       return Html::rawElement( 'td', [], $this->objectTable( $val ) );
                }
 
                if ( is_array( $val ) ) {
-                       return Html::rawElement( 'td', [], self::arrayTable( $val ) );
+                       return Html::rawElement( 'td', [], $this->arrayTable( $val ) );
                }
 
-               return Html::element( 'td', [ 'class' => 'value' ], self::primitiveValue( $val ) );
+               return Html::element( 'td', [ 'class' => 'value' ], $this->primitiveValue( $val ) );
        }
 
        /**
index e3f9375..4b58989 100644 (file)
@@ -136,7 +136,7 @@ class MessageContent extends AbstractContent {
        }
 
        /**
-        * @param bool $hasLinks
+        * @param bool|null $hasLinks
         *
         * @return bool Always false.
         *
index baea812..225522e 100644 (file)
@@ -92,7 +92,7 @@ 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|null $hasLinks If it is known whether this content contains links,
         * provide this information here, to avoid redundant parsing to find out.
         *
         * @return bool
index f5e8783..ad40cd9 100644 (file)
@@ -32,7 +32,7 @@ class TextContentHandler extends ContentHandler {
 
        // @codingStandardsIgnoreStart bug 57585
        public function __construct( $modelId = CONTENT_MODEL_TEXT,
-               $formats = array( CONTENT_FORMAT_TEXT ) ) {
+               $formats = [ CONTENT_FORMAT_TEXT ] ) {
                parent::__construct( $modelId, $formats );
        }
        // @codingStandardsIgnoreEnd
index c1fef7c..a63819d 100644 (file)
@@ -258,10 +258,10 @@ 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|null $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 Optional title, defaults to the title from the current main request.
+        * @param Title|null $title Optional title, defaults to the title from the current main request.
         *
         * @return bool
         */
index 63b4f71..c8b8108 100644 (file)
@@ -167,7 +167,7 @@ class RequestContext implements IContextSource, MutableContext {
         *
         * @param Title $title
         */
-       public function setTitle( Title $title ) {
+       public function setTitle( Title $title = null ) {
                $this->title = $title;
                // Erase the WikiPage so a new one with the new title gets created.
                $this->wikipage = null;
@@ -496,7 +496,7 @@ class RequestContext implements IContextSource, MutableContext {
         * Resets singleton returned by getMain(). Should be called only from unit tests.
         */
        public static function resetMain() {
-               if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
+               if ( !( defined( 'MW_PHPUNIT_TEST' ) || defined( 'MW_PARSER_TEST' ) ) ) {
                        throw new MWException( __METHOD__ . '() should be called only from unit tests!' );
                }
                self::$instance = null;
index 351d438..c065ee9 100644 (file)
@@ -859,8 +859,12 @@ abstract class DatabaseBase implements IDatabase {
 
                # Try reconnecting if the connection was lost
                if ( false === $ret && $this->wasErrorReissuable() ) {
-                       # Transaction is gone, like it or not
-                       $hadTrx = $this->mTrxLevel; // possible lost transaction
+                       # Transaction is gone; this can mean lost writes or REPEATABLE-READ snapshots
+                       $hadTrx = $this->mTrxLevel;
+                       # T127428: for non-write transactions, a disconnect and a COMMIT are similar:
+                       # neither changed data and in both cases any read snapshots are reset anyway.
+                       $isNoopCommit = ( !$this->writesOrCallbacksPending() && $sql === 'COMMIT' );
+                       # Update state tracking to reflect transaction loss
                        $this->mTrxLevel = 0;
                        $this->mTrxIdleCallbacks = []; // bug 65263
                        $this->mTrxPreCommitCallbacks = []; // bug 65263
@@ -874,12 +878,12 @@ abstract class DatabaseBase implements IDatabase {
                                $msg = __METHOD__ . ": lost connection to $server; reconnected";
                                wfDebugLog( 'DBPerformance', "$msg:\n" . wfBacktrace( true ) );
 
-                               if ( $hadTrx || $this->mNamedLocksHeld ) {
+                               if ( ( $hadTrx && !$isNoopCommit ) || $this->mNamedLocksHeld ) {
                                        # Leave $ret as false and let an error be reported.
                                        # Callers may catch the exception and continue to use the DB.
                                        $this->reportQueryError( $lastError, $lastErrno, $sql, $fname, $tempIgnore );
                                } else {
-                                       # Should be safe to silently retry (no trx and thus no callbacks)
+                                       # Should be safe to silently retry (no trx/callbacks/locks)
                                        $startTime = microtime( true );
                                        $ret = $this->doQuery( $commentedSql );
                                        $queryRuntime = microtime( true ) - $startTime;
@@ -1554,8 +1558,8 @@ abstract class DatabaseBase implements IDatabase {
                                                // 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] );
+                                               $value = array_values( $value )[0];
+                                               $list .= $field . " = " . $this->addQuotes( $value );
                                        } else {
                                                $list .= $field . " IN (" . $this->makeList( $value ) . ") ";
                                        }
index a295b0b..ce34537 100644 (file)
@@ -301,8 +301,7 @@ class DatabaseMssql extends Database {
                        $res = $res->result;
                }
 
-               $metadata = sqlsrv_field_metadata( $res );
-               return $metadata[$n]['Name'];
+               return sqlsrv_field_metadata( $res )[$n]['Name'];
        }
 
        /**
index 7058061..1e27205 100644 (file)
@@ -757,19 +757,13 @@ abstract class DatabaseMysqlBase extends Database {
                return $approxLag;
        }
 
-       /**
-        * Wait for the slave to catch up to a given master position.
-        * @todo Return values for this and base class are rubbish
-        *
-        * @param DBMasterPos|MySQLMasterPos $pos
-        * @param int $timeout The maximum number of seconds to wait for synchronisation
-        * @return int Zero if the slave was past that position already,
-        *   greater than zero if we waited for some period of time, less than
-        *   zero if we timed out.
-        */
        function masterPosWait( DBMasterPos $pos, $timeout ) {
+               if ( !( $pos instanceof MySQLMasterPos ) ) {
+                       throw new InvalidArgumentException( "Position not an instance of MySQLMasterPos" );
+               }
+
                if ( $this->lastKnownSlavePos && $this->lastKnownSlavePos->hasReached( $pos ) ) {
-                       return '0'; // http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html
+                       return 0;
                }
 
                # Commit any open transactions
@@ -778,18 +772,28 @@ abstract class DatabaseMysqlBase extends Database {
                # Call doQuery() directly, to avoid opening a transaction if DBO_TRX is set
                $encFile = $this->addQuotes( $pos->file );
                $encPos = intval( $pos->pos );
-               $sql = "SELECT MASTER_POS_WAIT($encFile, $encPos, $timeout)";
-               $res = $this->doQuery( $sql );
-
-               $status = false;
-               if ( $res ) {
-                       $row = $this->fetchRow( $res );
-                       if ( $row ) {
-                               $status = $row[0]; // can be NULL, -1, or 0+ per the MySQL manual
-                               if ( ctype_digit( $status ) ) { // success
-                                       $this->lastKnownSlavePos = $pos;
-                               }
+               $res = $this->doQuery( "SELECT MASTER_POS_WAIT($encFile, $encPos, $timeout)" );
+
+               $row = $res ? $this->fetchRow( $res ) : false;
+               if ( !$row ) {
+                       throw new DBExpectedError( $this, "Failed to query MASTER_POS_WAIT()" );
+               }
+
+               // Result can be NULL (error), -1 (timeout), or 0+ per the MySQL manual
+               $status = ( $row[0] !== null ) ? intval( $row[0] ) : null;
+               if ( $status === null ) {
+                       // T126436: jobs programmed to wait on master positions might be referencing binlogs
+                       // with an old master hostname. Such calls make MASTER_POS_WAIT() return null. Try
+                       // to detect this and treat the slave as having reached the position; a proper master
+                       // switchover already requires that the new master be caught up before the switch.
+                       $slavePos = $this->getSlavePos();
+                       if ( $slavePos && !$slavePos->channelsMatch( $pos ) ) {
+                               $this->lastKnownSlavePos = $slavePos;
+                               $status = 0;
                        }
+               } elseif ( $status >= 0 ) {
+                       // Remember that this position was reached to save queries next time
+                       $this->lastKnownSlavePos = $pos;
                }
 
                return $status;
@@ -1446,11 +1450,34 @@ class MySQLMasterPos implements DBMasterPos {
                return ( $thisPos && $thatPos && $thisPos >= $thatPos );
        }
 
+       function channelsMatch( DBMasterPos $pos ) {
+               if ( !( $pos instanceof self ) ) {
+                       throw new InvalidArgumentException( "Position not an instance of " . __CLASS__ );
+               }
+
+               $thisBinlog = $this->getBinlogName();
+               $thatBinlog = $pos->getBinlogName();
+
+               return ( $thisBinlog !== false && $thisBinlog === $thatBinlog );
+       }
+
        function __toString() {
                // e.g db1034-bin.000976/843431247
                return "{$this->file}/{$this->pos}";
        }
 
+       /**
+        * @return string|bool
+        */
+       protected function getBinlogName() {
+               $m = [];
+               if ( preg_match( '!^(.+)\.(\d+)/(\d+)$!', (string)$this, $m ) ) {
+                       return $m[1];
+               }
+
+               return false;
+       }
+
        /**
         * @return array|bool (int, int)
         */
index 8ca2362..d45805a 100644 (file)
@@ -322,7 +322,7 @@ class DatabaseMysqli extends DatabaseMysqlBase {
         * @return string
         */
        public function __toString() {
-               if ( $this->mConn instanceof Mysqli ) {
+               if ( $this->mConn instanceof mysqli ) {
                        return (string)$this->mConn->thread_id;
                } else {
                        // mConn might be false or something.
index 9b301a9..9e53653 100644 (file)
@@ -618,7 +618,7 @@ class DatabaseOracle extends Database {
 
                $table = $this->tableName( $table );
                // "INSERT INTO tables (a, b, c)"
-               $sql = "INSERT INTO " . $table . " (" . join( ',', array_keys( $row ) ) . ')';
+               $sql = "INSERT INTO " . $table . " (" . implode( ',', array_keys( $row ) ) . ')';
                $sql .= " VALUES (";
 
                // for each value, append ":key"
index 6fa8bf0..b6c37ee 100644 (file)
@@ -332,6 +332,13 @@ interface DBMasterPos {
         */
        public function hasReached( DBMasterPos $pos );
 
+       /**
+        * @param DBMasterPos $pos
+        * @return bool Whether this position appears to be for the same channel as another
+        * @since 1.27
+        */
+       public function channelsMatch( DBMasterPos $pos );
+
        /**
         * @return string
         * @since 1.27
index e1d1173..8b1c3df 100644 (file)
@@ -1183,14 +1183,13 @@ interface IDatabase {
        public function wasReadOnlyError();
 
        /**
-        * Wait for the slave to catch up to a given master position.
+        * Wait for the slave to catch up to a given master position
         *
         * @param DBMasterPos $pos
-        * @param int $timeout The maximum number of seconds to wait for
-        *   synchronisation
-        * @return int Zero if the slave was past that position already,
+        * @param int $timeout The maximum number of seconds to wait for synchronisation
+        * @return int|null Zero if the slave was past that position already,
         *   greater than zero if we waited for some period of time, less than
-        *   zero if we timed out.
+        *   zero if it timed out, and null on error
         */
        public function masterPosWait( DBMasterPos $pos, $timeout );
 
@@ -1334,9 +1333,13 @@ interface IDatabase {
         * @param string $fname
         * @param string $flush Flush flag, set to 'flush' to disable warnings about
         *   explicitly committing implicit transactions, or calling commit when no
-        *   transaction is in progress. This will silently break any ongoing
-        *   explicit transaction. Only set the flush flag if you are sure that it
-        *   is safe to ignore these warnings in your context.
+        *   transaction is in progress.
+        *
+        *   This will trigger an exception if there is an ongoing explicit transaction.
+        *
+        *   Only set the flush flag if you are sure that these warnings are not applicable,
+        *   and no explicit transactions are open.
+        *
         * @throws DBUnexpectedError
         */
        public function commit( $fname = __METHOD__, $flush = '' );
index d5cd017..e68cf1a 100644 (file)
@@ -36,7 +36,7 @@ interface LoadMonitor {
 
        /**
         * Perform pre-connection load ratio adjustment.
-        * @param array $loads
+        * @param array &$loads
         * @param string|bool $group The selected query group. Default: false
         * @param string|bool $wiki Default: false
         */
index bc57c93..6272e7e 100644 (file)
@@ -249,8 +249,8 @@ class DiffEngine {
                $edits = [];
                $xi = $yi = 0;
                while ( $xi < $n_from || $yi < $n_to ) {
-                       assert( '$yi < $n_to || $this->xchanged[$xi]' );
-                       assert( '$xi < $n_from || $this->ychanged[$yi]' );
+                       assert( $yi < $n_to || $this->xchanged[$xi] );
+                       assert( $xi < $n_from || $this->ychanged[$yi] );
 
                        // Skip matching "snake".
                        $copy = [];
@@ -448,7 +448,7 @@ class DiffEngine {
                                while ( list( , $y ) = each( $matches ) ) {
                                        if ( empty( $this->in_seq[$y] ) ) {
                                                $k = $this->lcsPos( $y );
-                                               assert( '$k > 0' );
+                                               assert( $k > 0 );
                                                $ymids[$k] = $ymids[$k - 1];
                                                break;
                                        }
@@ -456,7 +456,7 @@ class DiffEngine {
 
                                while ( list( , $y ) = each( $matches ) ) {
                                        if ( $y > $this->seq[$k - 1] ) {
-                                               assert( '$y < $this->seq[$k]' );
+                                               assert( $y < $this->seq[$k] );
                                                // Optimization: this is a common case:
                                                // next match is just replacing previous match.
                                                $this->in_seq[$this->seq[$k]] = false;
@@ -464,7 +464,7 @@ class DiffEngine {
                                                $this->in_seq[$y] = 1;
                                        } elseif ( empty( $this->in_seq[$y] ) ) {
                                                $k = $this->lcsPos( $y );
-                                               assert( '$k > 0' );
+                                               assert( $k > 0 );
                                                $ymids[$k] = $ymids[$k - 1];
                                        }
                                }
@@ -507,7 +507,7 @@ class DiffEngine {
                        }
                }
 
-               assert( '$ypos != $this->seq[$end]' );
+               assert( $ypos != $this->seq[$end] );
 
                $this->in_seq[$this->seq[$end]] = false;
                $this->seq[$end] = $ypos;
@@ -595,7 +595,7 @@ class DiffEngine {
                $i = 0;
                $j = 0;
 
-               assert( 'count($lines) == count($changed)' );
+               assert( count( $lines ) == count( $changed ) );
                $len = count( $lines );
                $other_len = count( $other_changed );
 
@@ -616,7 +616,7 @@ class DiffEngine {
                        }
 
                        while ( $i < $len && !$changed[$i] ) {
-                               assert( '$j < $other_len && ! $other_changed[$j]' );
+                               assert( $j < $other_len && ! $other_changed[$j] );
                                $i++;
                                $j++;
                                while ( $j < $other_len && $other_changed[$j] ) {
@@ -653,11 +653,11 @@ class DiffEngine {
                                        while ( $start > 0 && $changed[$start - 1] ) {
                                                $start--;
                                        }
-                                       assert( '$j > 0' );
+                                       assert( $j > 0 );
                                        while ( $other_changed[--$j] ) {
                                                continue;
                                        }
-                                       assert( '$j >= 0 && !$other_changed[$j]' );
+                                       assert( $j >= 0 && !$other_changed[$j] );
                                }
 
                                /*
@@ -681,7 +681,7 @@ class DiffEngine {
                                                $i++;
                                        }
 
-                                       assert( '$j < $other_len && ! $other_changed[$j]' );
+                                       assert( $j < $other_len && ! $other_changed[$j] );
                                        $j++;
                                        if ( $j < $other_len && $other_changed[$j] ) {
                                                $corresponding = $i;
@@ -699,11 +699,11 @@ class DiffEngine {
                        while ( $corresponding < $i ) {
                                $changed[--$start] = 1;
                                $changed[--$i] = 0;
-                               assert( '$j > 0' );
+                               assert( $j > 0 );
                                while ( $other_changed[--$j] ) {
                                        continue;
                                }
-                               assert( '$j >= 0 && !$other_changed[$j]' );
+                               assert( $j >= 0 && !$other_changed[$j] );
                        }
                }
        }
@@ -867,8 +867,8 @@ class MappedDiff extends Diff {
        public function __construct( $from_lines, $to_lines,
                $mapped_from_lines, $mapped_to_lines ) {
 
-               assert( 'count( $from_lines ) == count( $mapped_from_lines )' );
-               assert( 'count( $to_lines ) == count( $mapped_to_lines )' );
+               assert( count( $from_lines ) == count( $mapped_from_lines ) );
+               assert( count( $to_lines ) == count( $mapped_to_lines ) );
 
                parent::__construct( $mapped_from_lines, $mapped_to_lines );
 
@@ -959,7 +959,7 @@ class HWLDFWordAccumulator {
                                $this->flushLine( $tag );
                                $word = substr( $word, 1 );
                        }
-                       assert( '!strstr( $word, "\n" )' );
+                       assert( !strstr( $word, "\n" ) );
                        $this->group .= $word;
                }
        }
index 99eefc0..4fdacc5 100644 (file)
@@ -232,7 +232,7 @@ class DifferenceEngine extends ContextSource {
                        ->params( $this->getLanguage()->listToText( $missing ) )
                        ->numParams( count( $missing ) )
                        ->parseAsBlock();
-               $out->addHtml( $msg );
+               $out->addHTML( $msg );
        }
 
        public function showDiffPage( $diffOnly = false ) {
@@ -573,7 +573,7 @@ class DifferenceEngine extends ContextSource {
                <h2 class='diff-currentversion-title'>{$revHeader}</h2>\n" );
                # Page content may be handled by a hooked call instead...
                # @codingStandardsIgnoreStart Ignoring long lines.
-               if ( Hooks::run( 'ArticleContentOnDiff', array( $this, $out ) ) ) {
+               if ( Hooks::run( 'ArticleContentOnDiff', [ $this, $out ] ) ) {
                        $this->loadNewText();
                        $out->setRevisionId( $this->mNewid );
                        $out->setRevisionTimestamp( $this->mNewRev->getTimestamp() );
@@ -584,7 +584,7 @@ class DifferenceEngine extends ContextSource {
                                // This needs to be synchronised with Article::showCssOrJsPage(), which sucks
                                // Give hooks a chance to customise the output
                                // @todo standardize this crap into one function
-                               if ( ContentHandler::runLegacyHooks( 'ShowRawCssJs', array( $this->mNewContent, $this->mNewPage, $out ) ) ) {
+                               if ( ContentHandler::runLegacyHooks( 'ShowRawCssJs', [ $this->mNewContent, $this->mNewPage, $out ] ) ) {
                                        // NOTE: deprecated hook, B/C only
                                        // use the content object's own rendering
                                        $cnt = $this->mNewRev->getContent();
@@ -593,9 +593,9 @@ class DifferenceEngine extends ContextSource {
                                                $out->addParserOutputContent( $po );
                                        }
                                }
-                       } elseif ( !Hooks::run( 'ArticleContentViewCustom', array( $this->mNewContent, $this->mNewPage, $out ) ) ) {
+                       } elseif ( !Hooks::run( 'ArticleContentViewCustom', [ $this->mNewContent, $this->mNewPage, $out ] ) ) {
                                // Handled by extension
-                       } elseif ( !ContentHandler::runLegacyHooks( 'ArticleViewCustom', array( $this->mNewContent, $this->mNewPage, $out ) ) ) {
+                       } elseif ( !ContentHandler::runLegacyHooks( 'ArticleViewCustom', [ $this->mNewContent, $this->mNewPage, $out ] ) ) {
                                // NOTE: deprecated hook, B/C only
                                // Handled by extension
                        } else {
@@ -715,7 +715,7 @@ class DifferenceEngine extends ContextSource {
                }
                // Short-circuit
                if ( $this->mOldRev === false || ( $this->mOldRev && $this->mNewRev
-                       && $this->mOldRev->getID() == $this->mNewRev->getID() )
+                       && $this->mOldRev->getId() == $this->mNewRev->getId() )
                ) {
                        return '';
                }
@@ -842,30 +842,49 @@ class DifferenceEngine extends ContextSource {
         * @return bool|string
         */
        public function generateTextDiffBody( $otext, $ntext ) {
+               $time = microtime( true );
+
+               $result = $this->textDiff( $otext, $ntext );
+
+               $time = intval( ( microtime( true ) - $time ) * 1000 );
+               $this->getStats()->timing( 'diff_time', $time );
+               // Log requests slower than 99th percentile
+               if ( $time > 100 && $this->mOldPage && $this->mNewPage ) {
+                       wfDebugLog( 'diff',
+                               "$time ms diff: {$this->mOldid} -> {$this->mNewid} {$this->mNewPage}" );
+               }
+
+               return $result;
+       }
+
+       /**
+        * Generates diff, to be wrapped internally in a logging/instrumentation
+        *
+        * @param string $otext Old text, must be already segmented
+        * @param string $ntext New text, must be already segmented
+        * @return bool|string
+        */
+       protected function textDiff( $otext, $ntext ) {
                global $wgExternalDiffEngine, $wgContLang;
 
                $otext = str_replace( "\r\n", "\n", $otext );
                $ntext = str_replace( "\r\n", "\n", $ntext );
 
-               if ( $wgExternalDiffEngine == 'wikidiff' && function_exists( 'wikidiff_do_diff' ) ) {
-                       # For historical reasons, external diff engine expects
-                       # input text to be HTML-escaped already
-                       $otext = htmlspecialchars( $wgContLang->segmentForDiff( $otext ) );
-                       $ntext = htmlspecialchars( $wgContLang->segmentForDiff( $ntext ) );
-
-                       return $wgContLang->unsegmentForDiff( wikidiff_do_diff( $otext, $ntext, 2 ) ) .
-                       $this->debug( 'wikidiff1' );
+               if ( $wgExternalDiffEngine == 'wikidiff' ) {
+                       wfDeprecated( 'wikidiff support', '1.27' );
+                       $wgExternalDiffEngine = false;
                }
 
-               if ( $wgExternalDiffEngine == 'wikidiff2' && function_exists( 'wikidiff2_do_diff' ) ) {
-                       # Better external diff engine, the 2 may some day be dropped
-                       # This one does the escaping and segmenting itself
-                       $text = wikidiff2_do_diff( $otext, $ntext, 2 );
-                       $text .= $this->debug( 'wikidiff2' );
+               if ( $wgExternalDiffEngine == 'wikidiff2' ) {
+                       if ( function_exists( 'wikidiff2_do_diff' ) ) {
+                               # Better external diff engine, the 2 may some day be dropped
+                               # This one does the escaping and segmenting itself
+                               $text = wikidiff2_do_diff( $otext, $ntext, 2 );
+                               $text .= $this->debug( 'wikidiff2' );
 
-                       return $text;
-               }
-               if ( $wgExternalDiffEngine != 'wikidiff3' && $wgExternalDiffEngine !== false ) {
+                               return $text;
+                       }
+               } elseif ( $wgExternalDiffEngine != 'wikidiff3' && $wgExternalDiffEngine !== false ) {
                        # Diff via the shell
                        $tmpDir = wfTempDir();
                        $tempName1 = tempnam( $tmpDir, 'diff_' );
@@ -1041,12 +1060,12 @@ class DifferenceEngine extends ContextSource {
                $title = $rev->getTitle();
 
                $header = Linker::linkKnown( $title, $header, [],
-                       [ 'oldid' => $rev->getID() ] );
+                       [ 'oldid' => $rev->getId() ] );
 
                if ( $rev->userCan( Revision::DELETED_TEXT, $user ) ) {
                        $editQuery = [ 'action' => 'edit' ];
                        if ( !$rev->isCurrent() ) {
-                               $editQuery['oldid'] = $rev->getID();
+                               $editQuery['oldid'] = $rev->getId();
                        }
 
                        $key = $title->quickUserCan( 'edit', $user ) ? 'editold' : 'viewsourceold';
index a3ec66c..42168d7 100644 (file)
@@ -405,7 +405,7 @@ class XmlDumpWriter {
                        "      " . $comment . "\n" .
                        "      " . Xml::element( 'filename', null, $file->getName() ) . "\n" .
                        $archiveName .
-                       "      " . Xml::element( 'src', null, $file->getCanonicalURL() ) . "\n" .
+                       "      " . Xml::element( 'src', null, $file->getCanonicalUrl() ) . "\n" .
                        "      " . Xml::element( 'size', null, $file->getSize() ) . "\n" .
                        "      " . Xml::element( 'sha1base36', null, $file->getSha1() ) . "\n" .
                        "      " . Xml::element( 'rel', null, $file->getRel() ) . "\n" .
index 86d146d..efe78ee 100644 (file)
@@ -86,8 +86,8 @@ class FSFileBackend extends FileBackendStore {
                $this->fileMode = isset( $config['fileMode'] ) ? $config['fileMode'] : 0644;
                if ( isset( $config['fileOwner'] ) && function_exists( 'posix_getuid' ) ) {
                        $this->fileOwner = $config['fileOwner'];
-                       $info = posix_getpwuid( posix_getuid() );
-                       $this->currentUser = $info['name']; // cache this, assuming it doesn't change
+                       // cache this, assuming it doesn't change
+                       $this->currentUser = posix_getpwuid( posix_getuid() )['name'];
                }
        }
 
index fd9c8de..03974f7 100644 (file)
@@ -237,6 +237,8 @@ abstract class FileBackend {
         *  - describe (since 1.21)
         *  - null
         *
+        * FSFile/TempFSFile object support was added in 1.27.
+        *
         * a) Create a new file in storage with the contents of a string
         * @code
         *     array(
@@ -253,7 +255,7 @@ abstract class FileBackend {
         * @code
         *     array(
         *         'op'                  => 'store',
-        *         'src'                 => <file system path>,
+        *         'src'                 => <file system path, FSFile, or TempFSFile>,
         *         'dst'                 => <storage path>,
         *         'overwrite'           => <boolean>,
         *         'overwriteSame'       => <boolean>,
@@ -372,11 +374,15 @@ abstract class FileBackend {
                if ( !count( $ops ) ) {
                        return Status::newGood(); // nothing to do
                }
+
+               $ops = $this->resolveFSFileObjects( $ops );
                if ( empty( $opts['force'] ) ) { // sanity
                        unset( $opts['nonLocking'] );
                }
+
                /** @noinspection PhpUnusedLocalVariableInspection */
                $scope = $this->getScopedPHPBehaviorForOps(); // try to ignore client aborts
+
                return $this->doOperationsInternal( $ops, $opts );
        }
 
@@ -503,6 +509,8 @@ abstract class FileBackend {
         *  - describe (since 1.21)
         *  - null
         *
+        * FSFile/TempFSFile object support was added in 1.27.
+        *
         * a) Create a new file in storage with the contents of a string
         * @code
         *     array(
@@ -517,7 +525,7 @@ abstract class FileBackend {
         * @code
         *     array(
         *         'op'                  => 'store',
-        *         'src'                 => <file system path>,
+        *         'src'                 => <file system path, FSFile, or TempFSFile>,
         *         'dst'                 => <storage path>,
         *         'headers'             => <HTTP header name/value map> # since 1.21
         *     )
@@ -604,11 +612,15 @@ abstract class FileBackend {
                if ( !count( $ops ) ) {
                        return Status::newGood(); // nothing to do
                }
+
+               $ops = $this->resolveFSFileObjects( $ops );
                foreach ( $ops as &$op ) {
                        $op['overwrite'] = true; // avoids RTTs in key/value stores
                }
+
                /** @noinspection PhpUnusedLocalVariableInspection */
                $scope = $this->getScopedPHPBehaviorForOps(); // try to ignore client aborts
+
                return $this->doQuickOperationsInternal( $ops );
        }
 
@@ -1330,6 +1342,28 @@ abstract class FileBackend {
                return $this->fileJournal;
        }
 
+       /**
+        * Convert FSFile 'src' paths to string paths (with an 'srcRef' field set to the FSFile)
+        *
+        * The 'srcRef' field keeps any TempFSFile objects in scope for the backend to have it
+        * around as long it needs (which may vary greatly depending on configuration)
+        *
+        * @param array $ops File operation batch for FileBaclend::doOperations()
+        * @return array File operation batch
+        */
+       protected function resolveFSFileObjects( array $ops ) {
+               foreach ( $ops as &$op ) {
+                       $src = isset( $op['src'] ) ? $op['src'] : null;
+                       if ( $src instanceof FSFile ) {
+                               $op['srcRef'] = $src;
+                               $op['src'] = $src->getPath();
+                       }
+               }
+               unset( $op );
+
+               return $ops;
+       }
+
        /**
         * Check if a given path is a "mwstore://" path.
         * This does not do any further validation or any existence checks.
index 132c4a6..6f40bda 100644 (file)
@@ -199,14 +199,20 @@ class FileBackendMultiWrite extends FileBackend {
                                }
 
                                $realOps = $this->substOpBatchPaths( $ops, $backend );
-                               if ( $this->asyncWrites ) {
+                               if ( $this->asyncWrites && !$this->hasVolatileSources( $ops ) ) {
                                        // Bind $scopeLock to the callback to preserve locks
                                        DeferredUpdates::addCallableUpdate(
-                                               function() use ( $backend, $realOps, $opts, $scopeLock ) {
+                                               function() use ( $backend, $realOps, $opts, $scopeLock, $relevantPaths ) {
+                                                       wfDebugLog( 'FileOperationReplication',
+                                                               "'{$backend->getName()}' async replication; paths: " .
+                                                               FormatJson::encode( $relevantPaths ) );
                                                        $backend->doOperations( $realOps, $opts );
                                                }
                                        );
                                } else {
+                                       wfDebugLog( 'FileOperationReplication',
+                                               "'{$backend->getName()}' sync replication; paths: " .
+                                               FormatJson::encode( $relevantPaths ) );
                                        $status->merge( $backend->doOperations( $realOps, $opts ) );
                                }
                        }
@@ -467,6 +473,20 @@ class FileBackendMultiWrite extends FileBackend {
                );
        }
 
+       /**
+        * @param array $ops File operations for FileBackend::doOperations()
+        * @return bool Whether there are file path sources with outside lifetime/ownership
+        */
+       protected function hasVolatileSources( array $ops ) {
+               foreach ( $ops as $op ) {
+                       if ( $op['op'] === 'store' && !isset( $op['srcRef'] ) ) {
+                               return true; // source file might be deleted anytime after do*Operations()
+                       }
+               }
+
+               return false;
+       }
+
        protected function doQuickOperationsInternal( array $ops ) {
                $status = Status::newGood();
                // Do the operations on the master backend; setting Status fields...
@@ -480,7 +500,7 @@ class FileBackendMultiWrite extends FileBackend {
                        }
 
                        $realOps = $this->substOpBatchPaths( $ops, $backend );
-                       if ( $this->asyncWrites ) {
+                       if ( $this->asyncWrites && !$this->hasVolatileSources( $ops ) ) {
                                DeferredUpdates::addCallableUpdate(
                                        function() use ( $backend, $realOps ) {
                                                $backend->doQuickOperations( $realOps );
index 317346e..1f2cb06 100644 (file)
@@ -802,7 +802,7 @@ class SwiftFileBackend extends FileBackendStore {
        protected function doDirectoryExists( $fullCont, $dir, array $params ) {
                $prefix = ( $dir == '' ) ? null : "{$dir}/";
                $status = $this->objectListing( $fullCont, 'names', 1, null, $prefix );
-               if ( $status->isOk() ) {
+               if ( $status->isOK() ) {
                        return ( count( $status->value ) ) > 0;
                }
 
@@ -854,7 +854,7 @@ class SwiftFileBackend extends FileBackendStore {
                // Non-recursive: only list dirs right under $dir
                if ( !empty( $params['topOnly'] ) ) {
                        $status = $this->objectListing( $fullCont, 'names', $limit, $after, $prefix, '/' );
-                       if ( !$status->isOk() ) {
+                       if ( !$status->isOK() ) {
                                throw new FileBackendError( "Iterator page I/O error: {$status->getMessage()}" );
                        }
                        $objects = $status->value;
@@ -873,7 +873,7 @@ class SwiftFileBackend extends FileBackendStore {
                        $lastDir = $getParentDir( $after ); // must be first page
                        $status = $this->objectListing( $fullCont, 'names', $limit, $after, $prefix );
 
-                       if ( !$status->isOk() ) {
+                       if ( !$status->isOK() ) {
                                throw new FileBackendError( "Iterator page I/O error: {$status->getMessage()}" );
                        }
 
@@ -949,7 +949,7 @@ class SwiftFileBackend extends FileBackendStore {
                }
 
                // Reformat this list into a list of (name, stat array or null) entries
-               if ( !$status->isOk() ) {
+               if ( !$status->isOK() ) {
                        throw new FileBackendError( "Iterator page I/O error: {$status->getMessage()}" );
                }
 
index 3ec34f1..f572840 100644 (file)
@@ -31,9 +31,6 @@ class TempFSFile extends FSFile {
        /** @var bool Garbage collect the temp file */
        protected $canDelete = false;
 
-       /** @var array Active temp files to purge on shutdown */
-       protected static $instances = [];
-
        /** @var array Map of (path => 1) for paths to delete on shutdown */
        protected static $pathsCollect = null;
 
@@ -55,25 +52,25 @@ class TempFSFile extends FSFile {
         * @return TempFSFile|null
         */
        public static function factory( $prefix, $extension = '' ) {
-               $base = wfTempDir() . '/' . $prefix . wfRandomString( 12 );
-               $ext = ( $extension != '' ) ? ".{$extension}" : "";
-               for ( $attempt = 1; true; $attempt++ ) {
-                       $path = "{$base}-{$attempt}{$ext}";
+               $ext = ( $extension != '' ) ? ".{$extension}" : '';
+
+               $attempts = 5;
+               while ( $attempts-- ) {
+                       $path = wfTempDir() . '/' . $prefix . wfRandomString( 12 ) . $ext;
                        MediaWiki\suppressWarnings();
                        $newFileHandle = fopen( $path, 'x' );
                        MediaWiki\restoreWarnings();
                        if ( $newFileHandle ) {
                                fclose( $newFileHandle );
-                               break; // got it
-                       }
-                       if ( $attempt >= 5 ) {
-                               return null; // give up
+                               $tmpFile = new self( $path );
+                               $tmpFile->autocollect();
+                               // Safely instantiated, end loop.
+                               return $tmpFile;
                        }
                }
-               $tmpFile = new self( $path );
-               $tmpFile->autocollect(); // safely instantiated
 
-               return $tmpFile;
+               // Give up
+               return null;
        }
 
        /**
index 24c3964..15821ea 100644 (file)
@@ -956,7 +956,7 @@ class FileRepo {
         * This function can be used to write to otherwise read-only foreign repos.
         * This is intended for copying generated thumbnails into the repo.
         *
-        * @param string $src Source file system path, storage path, or virtual URL
+        * @param string|FSFile $src Source file system path, storage path, or virtual URL
         * @param string $dst Virtual URL or storage path
         * @param array|string|null $options An array consisting of a key named headers
         *   listing extra headers. If a string, taken as content-disposition header.
@@ -1003,7 +1003,7 @@ class FileRepo {
         * All path parameters may be a file system path, storage path, or virtual URL.
         * When "headers" are given they are used as HTTP headers if supported.
         *
-        * @param array $triples List of (source path, destination path, disposition)
+        * @param array $triples List of (source path or FSFile, destination path, disposition)
         * @return FileRepoStatus
         */
        public function quickImportBatch( array $triples ) {
@@ -1011,7 +1011,12 @@ class FileRepo {
                $operations = [];
                foreach ( $triples as $triple ) {
                        list( $src, $dst ) = $triple;
-                       $src = $this->resolveToStoragePath( $src );
+                       if ( $src instanceof FSFile ) {
+                               $op = 'store';
+                       } else {
+                               $src = $this->resolveToStoragePath( $src );
+                               $op = FileBackend::isStoragePath( $src ) ? 'copy' : 'store';
+                       }
                        $dst = $this->resolveToStoragePath( $dst );
 
                        if ( !isset( $triple[2] ) ) {
@@ -1026,7 +1031,7 @@ class FileRepo {
                        }
 
                        $operations[] = [
-                               'op' => FileBackend::isStoragePath( $src ) ? 'copy' : 'store',
+                               'op' => $op,
                                'src' => $src,
                                'dst' => $dst,
                                'headers' => $headers
@@ -1110,7 +1115,7 @@ class FileRepo {
         * @param array $srcPaths Ordered list of source virtual URLs/storage paths
         * @param string $dstPath Target file system path
         * @param int $flags Bitwise combination of the following flags:
-        *   self::DELETE_SOURCE     Delete the source files
+        *   self::DELETE_SOURCE     Delete the source files on success
         * @return FileRepoStatus
         */
        public function concatenate( array $srcPaths, $dstPath, $flags = 0 ) {
@@ -1153,7 +1158,7 @@ class FileRepo {
         * Options to $options include:
         *   - headers : name/value map of HTTP headers to use in response to GET/HEAD requests
         *
-        * @param string $srcPath The source file system path, storage path, or URL
+        * @param string|FSFile $src The source file system path, storage path, or URL
         * @param string $dstRel The destination relative path
         * @param string $archiveRel The relative path where the existing file is to
         *   be archived, if there is one. Relative to the public zone root.
@@ -1163,12 +1168,12 @@ class FileRepo {
         * @return FileRepoStatus
         */
        public function publish(
-               $srcPath, $dstRel, $archiveRel, $flags = 0, array $options = []
+               $src, $dstRel, $archiveRel, $flags = 0, array $options = []
        ) {
                $this->assertWritableRepo(); // fail out if read-only
 
                $status = $this->publishBatch(
-                       [ [ $srcPath, $dstRel, $archiveRel, $options ] ], $flags );
+                       [ [ $src, $dstRel, $archiveRel, $options ] ], $flags );
                if ( $status->successCount == 0 ) {
                        $status->ok = false;
                }
@@ -1207,7 +1212,9 @@ class FileRepo {
                $sourceFSFilesToDelete = []; // cleanup for disk source files
                // Validate each triplet and get the store operation...
                foreach ( $ntuples as $ntuple ) {
-                       list( $srcPath, $dstRel, $archiveRel ) = $ntuple;
+                       list( $src, $dstRel, $archiveRel ) = $ntuple;
+                       $srcPath = ( $src instanceof FSFile ) ? $src->getPath() : $src;
+
                        $options = isset( $ntuple[3] ) ? $ntuple[3] : [];
                        // Resolve source to a storage path if virtual
                        $srcPath = $this->resolveToStoragePath( $srcPath );
@@ -1270,7 +1277,7 @@ class FileRepo {
                        } else { // FS source path
                                $operations[] = [
                                        'op' => 'store',
-                                       'src' => $srcPath,
+                                       'src' => $src, // prefer FSFile objects
                                        'dst' => $dstPath,
                                        'overwrite' => true, // replace current
                                        'headers' => $headers
@@ -1899,7 +1906,7 @@ class FileRepo {
 
        /**
         * Returns whether or not storage is SHA-1 based
-        * @return boolean
+        * @return bool
         */
        public function hasSha1Storage() {
                return $this->hasSha1Storage;
@@ -1907,7 +1914,7 @@ class FileRepo {
 
        /**
         * Returns whether or not repo supports having originals SHA-1s in the thumb URLs
-        * @return boolean
+        * @return bool
         */
        public function supportsSha1URLs() {
                return $this->supportsSha1URLs;
index d29cd7d..cc9099c 100644 (file)
@@ -537,7 +537,7 @@ class ForeignAPIRepo extends FileRepo {
         * @since 1.23
         */
        protected static function getIIProps() {
-               return join( '|', self::$imageInfoProps );
+               return implode( '|', self::$imageInfoProps );
        }
 
        /**
index 5e9a4a9..d24aa24 100644 (file)
@@ -532,7 +532,7 @@ class LocalRepo extends FileRepo {
        }
 
        public function publish(
-               $srcPath,
+               $src,
                $dstRel,
                $archiveRel,
                $flags = 0,
index 6a1bb92..7e00793 100644 (file)
@@ -393,10 +393,10 @@ abstract class File implements IDBAccessObject {
                                wfDebug( __METHOD__ . ': supposed to render ' . $this->getName() .
                                        ' (' . $this->getMimeType() . "), but can't!\n" );
 
-                               return $this->getURL(); # hm... return NULL?
+                               return $this->getUrl(); # hm... return NULL?
                        }
                } else {
-                       return $this->getURL();
+                       return $this->getUrl();
                }
        }
 
@@ -1802,7 +1802,7 @@ abstract class File implements IDBAccessObject {
         * Options to $options include:
         *   - headers : name/value map of HTTP headers to use in response to GET/HEAD requests
         *
-        * @param string $srcPath Local filesystem path to the source image
+        * @param string|FSFile $src Local filesystem path to the source image
         * @param int $flags A bitwise combination of:
         *   File::DELETE_SOURCE    Delete the source file, i.e. move rather than copy
         * @param array $options Optional additional parameters
@@ -1812,7 +1812,7 @@ abstract class File implements IDBAccessObject {
         * STUB
         * Overridden by LocalFile
         */
-       function publish( $srcPath, $flags = 0, array $options = [] ) {
+       function publish( $src, $flags = 0, array $options = [] ) {
                $this->readOnlyError();
        }
 
index c232d82..609a8fb 100644 (file)
@@ -915,6 +915,7 @@ class LocalFile extends File {
                // Purge any custom thumbnail caches
                Hooks::run( 'LocalFilePurgeThumbnails', [ $this, $archiveName ] );
 
+               // Delete thumbnails
                $dir = array_shift( $files );
                $this->purgeThumbList( $dir, $files );
 
@@ -931,7 +932,6 @@ class LocalFile extends File {
         * @param array $options
         */
        public function purgeThumbnails( $options = [] ) {
-               // Delete thumbnails
                $files = $this->getThumbnails();
                // Always purge all files from CDN regardless of handler filters
                $urls = [];
@@ -951,6 +951,7 @@ class LocalFile extends File {
                // Purge any custom thumbnail caches
                Hooks::run( 'LocalFilePurgeThumbnails', [ $this, false ] );
 
+               // Delete thumbnails
                $dir = array_shift( $files );
                $this->purgeThumbList( $dir, $files );
 
@@ -1108,7 +1109,7 @@ class LocalFile extends File {
 
        /**
         * Upload a file and record it in the DB
-        * @param string $srcPath Source storage path, virtual URL, or filesystem path
+        * @param string|FSFile $src Source storage path, virtual URL, or filesystem path
         * @param string $comment Upload description
         * @param string $pageText Text to use for the new description page,
         *   if a new description page is created
@@ -1124,7 +1125,7 @@ class LocalFile extends File {
         * @return FileRepoStatus On success, the value member contains the
         *     archive name, or an empty string if it was a new file.
         */
-       function upload( $srcPath, $comment, $pageText, $flags = 0, $props = false,
+       function upload( $src, $comment, $pageText, $flags = 0, $props = false,
                $timestamp = false, $user = null, $tags = []
        ) {
                global $wgContLang;
@@ -1133,6 +1134,7 @@ class LocalFile extends File {
                        return $this->readOnlyFatalStatus();
                }
 
+               $srcPath = ( $src instanceof FSFile ) ? $src->getPath() : $src;
                if ( !$props ) {
                        if ( $this->repo->isVirtualUrl( $srcPath )
                                || FileBackend::isStoragePath( $srcPath )
@@ -1158,7 +1160,7 @@ class LocalFile extends File {
                // non-nicely (dangling multi-byte chars, non-truncated version in cache).
                $comment = $wgContLang->truncate( $comment, 255 );
                $this->lock(); // begin
-               $status = $this->publish( $srcPath, $flags, $options );
+               $status = $this->publish( $src, $flags, $options );
 
                if ( $status->successCount >= 2 ) {
                        // There will be a copy+(one of move,copy,store).
@@ -1479,18 +1481,14 @@ class LocalFile extends File {
                                __METHOD__
                        );
 
-                       # Now that the log entry is up-to-date, make an RC entry.
-                       $recentChange = $logEntry->publish( $logId );
-
+                       # Add change tags, if any
                        if ( $tags ) {
-                               ChangeTags::addTags(
-                                       $tags,
-                                       $recentChange ? $recentChange->getAttribute( 'rc_id' ) : null,
-                                       $logEntry->getAssociatedRevId(),
-                                       $logId
-                               );
+                               $logEntry->setTags( $tags );
                        }
 
+                       # Now that the log entry is up-to-date, make an RC entry.
+                       $logEntry->publish( $logId );
+
                        # Run hook for other updates (typically more cache purging)
                        Hooks::run( 'FileUpload', [ $that, $reupload, !$newPageContent ] );
 
@@ -1527,15 +1525,15 @@ class LocalFile extends File {
         * The archive name should be passed through to recordUpload for database
         * registration.
         *
-        * @param string $srcPath Local filesystem path or virtual URL to the source image
+        * @param string|FSFile $src Local filesystem path or virtual URL to the source image
         * @param int $flags A bitwise combination of:
         *     File::DELETE_SOURCE    Delete the source file, i.e. move rather than copy
         * @param array $options Optional additional parameters
         * @return FileRepoStatus On success, the value member contains the
         *     archive name, or an empty string if it was a new file.
         */
-       function publish( $srcPath, $flags = 0, array $options = [] ) {
-               return $this->publishTo( $srcPath, $this->getRel(), $flags, $options );
+       function publish( $src, $flags = 0, array $options = [] ) {
+               return $this->publishTo( $src, $this->getRel(), $flags, $options );
        }
 
        /**
@@ -1545,7 +1543,7 @@ class LocalFile extends File {
         * The archive name should be passed through to recordUpload for database
         * registration.
         *
-        * @param string $srcPath Local filesystem path or virtual URL to the source image
+        * @param string|FSFile $src Local filesystem path or virtual URL to the source image
         * @param string $dstRel Target relative path
         * @param int $flags A bitwise combination of:
         *     File::DELETE_SOURCE    Delete the source file, i.e. move rather than copy
@@ -1553,7 +1551,9 @@ class LocalFile extends File {
         * @return FileRepoStatus On success, the value member contains the
         *     archive name, or an empty string if it was a new file.
         */
-       function publishTo( $srcPath, $dstRel, $flags = 0, array $options = [] ) {
+       function publishTo( $src, $dstRel, $flags = 0, array $options = [] ) {
+               $srcPath = ( $src instanceof FSFile ) ? $src->getPath() : $src;
+
                $repo = $this->getRepo();
                if ( $repo->getReadOnlyReason() !== false ) {
                        return $this->readOnlyFatalStatus();
@@ -1567,9 +1567,9 @@ class LocalFile extends File {
                if ( $repo->hasSha1Storage() ) {
                        $sha1 = $repo->isVirtualUrl( $srcPath )
                                ? $repo->getFileSha1( $srcPath )
-                               : File::sha1Base36( $srcPath );
+                               : FSFile::getSha1Base36FromPath( $srcPath );
                        $dst = $repo->getBackend()->getPathForSHA1( $sha1 );
-                       $status = $repo->quickImport( $srcPath, $dst );
+                       $status = $repo->quickImport( $src, $dst );
                        if ( $flags & File::DELETE_SOURCE ) {
                                unlink( $srcPath );
                        }
@@ -2771,7 +2771,7 @@ class LocalFileMoveBatch {
                $this->newName = $this->file->repo->getNameFromTitle( $this->target );
                $this->oldRel = $this->oldHash . $this->oldName;
                $this->newRel = $this->newHash . $this->newName;
-               $this->db = $file->getRepo()->getMasterDb();
+               $this->db = $file->getRepo()->getMasterDB();
        }
 
        /**
index f76b38b..31e62ec 100644 (file)
@@ -332,16 +332,13 @@ class OldLocalFile extends LocalFile {
         * @param string $timestamp
         * @param string $comment
         * @param User $user
-        * @param int $flags
         * @return FileRepoStatus
         */
-       function uploadOld( $srcPath, $archiveName, $timestamp, $comment, $user, $flags = 0 ) {
+       function uploadOld( $srcPath, $archiveName, $timestamp, $comment, $user ) {
                $this->lock();
 
                $dstRel = 'archive/' . $this->getHashPath() . $archiveName;
-               $status = $this->publishTo( $srcPath, $dstRel,
-                       $flags & File::DELETE_SOURCE ? FileRepo::DELETE_SOURCE : 0
-               );
+               $status = $this->publishTo( $srcPath, $dstRel );
 
                if ( $status->isGood() ) {
                        if ( !$this->recordOldUpload( $srcPath, $archiveName, $timestamp, $comment, $user ) ) {
index 1f077a4..6606ca3 100644 (file)
@@ -101,11 +101,11 @@ class HTMLAutoCompleteSelectField extends HTMLTextField {
        }
 
        // FIXME Ewww, this shouldn't be adding any attributes not requested in $list :(
-       public function getAttributes( array $list, array $mappings = null ) {
+       public function getAttributes( array $list ) {
                $attribs = [
                        'type' => 'text',
                        'data-autocomplete' => FormatJson::encode( array_keys( $this->autocomplete ) ),
-               ] + parent::getAttributes( $list, $mappings );
+               ] + parent::getAttributes( $list );
 
                if ( $this->getOptions() ) {
                        $attribs['data-hide-if'] = FormatJson::encode(
index 211089f..16417fc 100644 (file)
@@ -56,6 +56,8 @@ class HTMLButtonField extends HTMLFormField {
                        $this->buttonLabel = $info['buttonlabel-raw'];
                }
 
+               $this->setShowEmptyLabel( false );
+
                parent::__construct( $info );
        }
 
@@ -104,7 +106,9 @@ class HTMLButtonField extends HTMLFormField {
                        'id' => $this->mID,
                        'flags' => $this->mFlags,
                        'useInputTag' => $this->isBadIE(),
-               ] + $this->getAttributes( [ 'disabled', 'tabindex' ], [ 'tabindex' => 'tabIndex' ] ) );
+               ] + OOUI\Element::configFromHtmlAttributes(
+                       $this->getAttributes( [ 'disabled', 'tabindex' ] )
+               ) );
        }
 
        protected function needsLabel() {
index 13f30c2..a59b15e 100644 (file)
@@ -56,9 +56,8 @@ class HTMLCheckField extends HTMLFormField {
                $attr['id'] = $this->mID;
                $attr['name'] = $this->mName;
 
-               $attr += $this->getAttributes(
-                       [ 'disabled', 'tabindex' ],
-                       [ 'tabindex' => 'tabIndex' ]
+               $attr += OOUI\Element::configFromHtmlAttributes(
+                       $this->getAttributes( [ 'disabled', 'tabindex' ] )
                );
 
                if ( $this->mClass !== '' ) {
index 6a4bec8..9f67233 100644 (file)
@@ -85,13 +85,7 @@ class HTMLCheckMatrix extends HTMLFormField implements HTMLNestedFilterable {
                $rows = $this->mParams['rows'];
                $columns = $this->mParams['columns'];
 
-               $mappings = [];
-
-               if ( $this->mParent instanceof OOUIHTMLForm ) {
-                       $mappings['tabindex'] = 'tabIndex';
-               }
-
-               $attribs = $this->getAttributes( [ 'disabled', 'tabindex' ], $mappings );
+               $attribs = $this->getAttributes( [ 'disabled', 'tabindex' ] );
 
                // Build the column headers
                $headerContents = Html::rawElement( 'td', [], '&#160;' );
@@ -156,8 +150,9 @@ class HTMLCheckMatrix extends HTMLFormField implements HTMLNestedFilterable {
                        return new OOUI\CheckboxInputWidget( [
                                'name' => "{$this->mName}[]",
                                'selected' => $checked,
-                               'value' => $attribs['value'],
-                       ] + $attribs );
+                       ] + OOUI\Element::configFromHtmlAttributes(
+                               $attribs
+                       ) );
                } else {
                        $checkbox = Xml::check( "{$this->mName}[]", $checked, $attribs );
                        if ( $this->mParent->getConfig()->get( 'UseMediaWikiUIEverywhere' ) ) {
index a0f248f..778aedb 100644 (file)
  */
 class HTMLComboboxField extends HTMLTextField {
        // FIXME Ewww, this shouldn't be adding any attributes not requested in $list :(
-       public function getAttributes( array $list, array $mappings = null ) {
+       public function getAttributes( array $list ) {
                $attribs = [
                        'type' => 'text',
                        'list' => $this->mName . '-datalist',
-               ] + parent::getAttributes( $list, $mappings );
+               ] + parent::getAttributes( $list );
 
                return $attribs;
        }
@@ -36,7 +36,9 @@ class HTMLComboboxField extends HTMLTextField {
        function getInputOOUI( $value ) {
                $disabled = false;
                $allowedParams = [ 'tabindex' ];
-               $attribs = $this->getAttributes( $allowedParams, [ 'tabindex' => 'tabIndex' ] );
+               $attribs = OOUI\Element::configFromHtmlAttributes(
+                       $this->getAttributes( $allowedParams )
+               );
 
                if ( $this->mClass !== '' ) {
                        $attribs['classes'] = [ $this->mClass ];
index ebbe323..a9c7632 100644 (file)
@@ -610,12 +610,17 @@ abstract class HTMLFormField {
                $config = [
                        'classes' => [ "mw-htmlform-field-$fieldType", $this->mClass ],
                        'align' => $this->getLabelAlignOOUI(),
-                       'label' => new OOUI\HtmlSnippet( $this->getLabel() ),
                        'help' => $helpText !== null ? new OOUI\HtmlSnippet( $helpText ) : null,
                        'errors' => $errors,
                        'infusable' => $infusable,
                ];
 
+               // the element could specify, that the label doesn't need to be added
+               $label = $this->getLabel();
+               if ( $label ) {
+                       $config['label'] = new OOUI\HtmlSnippet( $label );
+               }
+
                return $this->getFieldLayoutOOUI( $inputField, $config );
        }
 
@@ -912,45 +917,23 @@ abstract class HTMLFormField {
                return Linker::tooltipAndAccesskeyAttribs( $this->mParams['tooltip'] );
        }
 
-       /**
-        * Get a translated key if necessary.
-        * @param array|null $mappings Array of mappings, 'original' => 'translated'
-        * @param string $key
-        * @return string
-        */
-       protected function getMappedKey( $mappings, $key ) {
-               if ( !is_array( $mappings ) ) {
-                       return $key;
-               }
-
-               if ( !empty( $mappings[$key] ) ) {
-                       return $mappings[$key];
-               }
-
-               return $key;
-       }
-
        /**
         * Returns the given attributes from the parameters
         *
         * @param array $list List of attributes to get
-        * @param array $mappings Optional - Key/value map of attribute names to use
-        *   instead of the ones passed in.
         * @return array Attributes
         */
-       public function getAttributes( array $list, array $mappings = null ) {
+       public function getAttributes( array $list ) {
                static $boolAttribs = [ 'disabled', 'required', 'autofocus', 'multiple', 'readonly' ];
 
                $ret = [];
                foreach ( $list as $key ) {
-                       $mappedKey = $this->getMappedKey( $mappings, $key );
-
                        if ( in_array( $key, $boolAttribs ) ) {
                                if ( !empty( $this->mParams[$key] ) ) {
-                                       $ret[$mappedKey] = $mappedKey;
+                                       $ret[$key] = '';
                                }
                        } elseif ( isset( $this->mParams[$key] ) ) {
-                               $ret[$mappedKey] = $this->mParams[$key];
+                               $ret[$key] = $this->mParams[$key];
                        }
                }
 
index 272af15..bcb07bd 100644 (file)
@@ -19,7 +19,7 @@ class HTMLFormFieldWithButton extends HTMLFormField {
        protected $mButtonValue;
 
        /** @var string $mButtonType Value for the button in this field */
-       protected $mButtonFlags = [ 'primary', 'progressive' ];
+       protected $mButtonFlags = [ 'progressive' ];
 
        public function __construct( $info ) {
                if ( isset( $info['buttonclass'] ) ) {
@@ -59,7 +59,9 @@ class HTMLFormFieldWithButton extends HTMLFormField {
                        'type' => $this->mButtonType,
                        'label' => $this->mButtonValue,
                        'flags' => $this->mButtonFlags,
-               ] );
+               ] + OOUI\Element::configFromHtmlAttributes(
+                       $this->getAttributes( [ 'disabled', 'tabindex' ] )
+               ) );
        }
 
        /**
index 251bb05..1aaa3e8 100644 (file)
@@ -72,8 +72,9 @@ class HTMLMultiSelectField extends HTMLFormField implements HTMLNestedFilterable
                                new OOUI\CheckboxInputWidget( [
                                        'name' => "{$this->mName}[]",
                                        'selected' => $checked,
-                                       'value' => $attribs['value'],
-                               ] + $attribs ),
+                               ] + OOUI\Element::configFromHtmlAttributes(
+                                       $attribs
+                               ) ),
                                [
                                        'label' => $label,
                                        'align' => 'inline',
index ecca6ff..12a8a1f 100644 (file)
@@ -53,7 +53,9 @@ class HTMLRadioField extends HTMLFormField {
                        'value' => $value,
                        'options' => $options,
                        'classes' => 'mw-htmlform-flatlist-item',
-               ] + $this->getAttributes( [ 'disabled', 'tabindex' ], [ 'tabindex' => 'tabIndex' ] ) );
+               ] + OOUI\Element::configFromHtmlAttributes(
+                       $this->getAttributes( [ 'disabled', 'tabindex' ] )
+               ) );
        }
 
        function formatOptions( $options, $value ) {
index 6191665..b6ad46c 100644 (file)
@@ -45,7 +45,9 @@ class HTMLSelectField extends HTMLFormField {
        function getInputOOUI( $value ) {
                $disabled = false;
                $allowedParams = [ 'tabindex' ];
-               $attribs = $this->getAttributes( $allowedParams, [ 'tabindex' => 'tabIndex' ] );
+               $attribs = OOUI\Element::configFromHtmlAttributes(
+                       $this->getAttributes( $allowedParams )
+               );
 
                if ( $this->mClass !== '' ) {
                        $attribs['classes'] = [ $this->mClass ];
index b05fd7c..973f1cb 100644 (file)
@@ -66,10 +66,9 @@ class HTMLTextAreaField extends HTMLFormField {
                        'autofocus',
                ];
 
-               $attribs += $this->getAttributes( $allowedParams, [
-                       'tabindex' => 'tabIndex',
-                       'readonly' => 'readOnly',
-               ] );
+               $attribs += OOUI\Element::configFromHtmlAttributes(
+                       $this->getAttributes( $allowedParams )
+               );
 
                return new OOUI\TextInputWidget( [
                        'id' => $this->mID,
index c2606c2..4d5bcab 100644 (file)
@@ -22,7 +22,7 @@ class HTMLTextField extends HTMLFormField {
                                'value' => $value,
                                'dir' => $this->mDir,
                                'spellcheck' => $this->getSpellCheck(),
-                       ] + $this->getTooltipAndAccessKey();
+                       ] + $this->getTooltipAndAccessKey() + $this->getDataAttribs();
 
                if ( $this->mClass !== '' ) {
                        $attribs['class'] = $this->mClass;
@@ -107,11 +107,9 @@ class HTMLTextField extends HTMLFormField {
                        'type',
                ];
 
-               $attribs += $this->getAttributes( $allowedParams, [
-                       'maxlength' => 'maxLength',
-                       'readonly' => 'readOnly',
-                       'tabindex' => 'tabIndex',
-               ] );
+               $attribs += OOUI\Element::configFromHtmlAttributes(
+                       $this->getAttributes( $allowedParams )
+               );
 
                $type = $this->getType( $attribs );
 
@@ -126,4 +124,13 @@ class HTMLTextField extends HTMLFormField {
        protected function getInputWidget( $params ) {
                return new OOUI\TextInputWidget( $params );
        }
+
+       /**
+        * Returns an array of data-* attributes to add to the field.
+        *
+        * @return array
+        */
+       protected function getDataAttribs() {
+               return [];
+       }
 }
index 09fbaa7..fcf721a 100644 (file)
@@ -80,4 +80,20 @@ class HTMLTitleTextField extends HTMLTextField {
                $params['relative'] = $this->mParams['relative'];
                return new TitleInputWidget( $params );
        }
+
+       public function getInputHtml( $value ) {
+               // add mw-searchInput class to enable search suggestions for non-OOUI, too
+               $this->mClass .= 'mw-searchInput';
+
+               // return the HTMLTextField html
+               return parent::getInputHTML( $value );
+       }
+
+       protected function getDataAttribs() {
+               return [
+                       'data-mw-searchsuggest' => FormatJson::encode( [
+                               'wrapAsLink' => false,
+                       ] ),
+               ];
+       }
 }
index 92b35a8..5a7e0b9 100644 (file)
@@ -51,6 +51,6 @@ class HTMLUserTextField extends HTMLTextField {
                $this->mClass .= ' mw-autocomplete-user';
 
                // return parent html
-               return parent::getInputHtml( $value );
+               return parent::getInputHTML( $value );
        }
 }
index f0f961e..c446615 100644 (file)
@@ -27,7 +27,7 @@
 class VFormHTMLForm extends HTMLForm {
        /**
         * Wrapper and its legend are never generated in VForm mode.
-        * @var boolean
+        * @var bool
         */
        protected $mWrapperLegend = false;
 
index b6740d2..259d514 100644 (file)
@@ -604,7 +604,7 @@ class WikiImporter {
                $normalFields = [ 'sitename', 'base', 'generator', 'case' ];
 
                while ( $this->reader->read() ) {
-                       if ( $this->reader->nodeType == XmlReader::END_ELEMENT &&
+                       if ( $this->reader->nodeType == XMLReader::END_ELEMENT &&
                                        $this->reader->localName == 'siteinfo' ) {
                                break;
                        }
@@ -693,7 +693,7 @@ class WikiImporter {
                if ( !isset( $logInfo['contributor']['username'] ) ) {
                        $revision->setUsername( 'Unknown user' );
                } else {
-                       $revision->setUserName( $logInfo['contributor']['username'] );
+                       $revision->setUsername( $logInfo['contributor']['username'] );
                }
 
                return $this->logItemCallback( $revision );
@@ -886,9 +886,9 @@ class WikiImporter {
                if ( isset( $revisionInfo['contributor']['ip'] ) ) {
                        $revision->setUserIP( $revisionInfo['contributor']['ip'] );
                } elseif ( isset( $revisionInfo['contributor']['username'] ) ) {
-                       $revision->setUserName( $revisionInfo['contributor']['username'] );
+                       $revision->setUsername( $revisionInfo['contributor']['username'] );
                } else {
-                       $revision->setUserName( 'Unknown user' );
+                       $revision->setUsername( 'Unknown user' );
                }
                $revision->setNoUpdates( $this->mNoUpdates );
 
@@ -992,7 +992,7 @@ class WikiImporter {
                        $revision->setUserIP( $uploadInfo['contributor']['ip'] );
                }
                if ( isset( $uploadInfo['contributor']['username'] ) ) {
-                       $revision->setUserName( $uploadInfo['contributor']['username'] );
+                       $revision->setUsername( $uploadInfo['contributor']['username'] );
                }
                $revision->setNoUpdates( $this->mNoUpdates );
 
index d4db765..356a79f 100644 (file)
@@ -640,22 +640,24 @@ class WikiRevision {
 
                # Get the file source or download if necessary
                $source = $this->getFileSrc();
-               $flags = $this->isTempSrc() ? File::DELETE_SOURCE : 0;
-               if ( !$source ) {
+               $autoDeleteSource = $this->isTempSrc();
+               if ( !strlen( $source ) ) {
                        $source = $this->downloadSource();
-                       $flags |= File::DELETE_SOURCE;
+                       $autoDeleteSource = true;
                }
-               if ( !$source ) {
+               if ( !strlen( $source ) ) {
                        wfDebug( __METHOD__ . ": Could not fetch remote file.\n" );
                        return false;
                }
+
+               $tmpFile = new TempFSFile( $source );
+               if ( $autoDeleteSource ) {
+                       $tmpFile->autocollect();
+               }
+
                $sha1File = ltrim( sha1_file( $source ), '0' );
                $sha1 = $this->getSha1();
                if ( $sha1 && ( $sha1 !== $sha1File ) ) {
-                       if ( $flags & File::DELETE_SOURCE ) {
-                               # Broken file; delete it if it is a temporary file
-                               unlink( $source );
-                       }
                        wfDebug( __METHOD__ . ": Corrupt file $source.\n" );
                        return false;
                }
@@ -665,8 +667,9 @@ class WikiRevision {
                # Do the actual upload
                if ( $archiveName ) {
                        $status = $file->uploadOld( $source, $archiveName,
-                               $this->getTimestamp(), $this->getComment(), $user, $flags );
+                               $this->getTimestamp(), $this->getComment(), $user );
                } else {
+                       $flags = 0;
                        $status = $file->upload( $source, $this->getComment(), $this->getComment(),
                                $flags, false, $this->getTimestamp(), $user );
                }
index 7ecb71c..661c3ec 100644 (file)
@@ -199,7 +199,7 @@ class CliInstaller extends Installer {
                        }
                }
 
-               if ( !$status->isOk() ) {
+               if ( !$status->isOK() ) {
                        echo "\n";
                        exit( 1 );
                }
index 152f33a..79bd961 100644 (file)
@@ -202,7 +202,7 @@ abstract class DatabaseInstaller {
                        $this->db->commit( __METHOD__ );
                }
                // Resume normal operations
-               if ( $status->isOk() ) {
+               if ( $status->isOK() ) {
                        $this->enableLB();
                }
 
index 03f091b..6a20abc 100644 (file)
@@ -63,18 +63,18 @@ abstract class DatabaseUpdater {
        protected $shared = false;
 
        /**
-        * Scripts to run after database update
+        * @var string[] Scripts to run after database update
         * Should be a subclass of LoggedUpdateMaintenance
         */
        protected $postDatabaseUpdateMaintenance = [
-               'DeleteDefaultMessages',
-               'PopulateRevisionLength',
-               'PopulateRevisionSha1',
-               'PopulateImageSha1',
-               'FixExtLinksProtocolRelative',
-               'PopulateFilearchiveSha1',
-               'PopulateBacklinkNamespace',
-               'FixDefaultJsonContentPages'
+               DeleteDefaultMessages::class,
+               PopulateRevisionLength::class,
+               PopulateRevisionSha1::class,
+               PopulateImageSha1::class,
+               FixExtLinksProtocolRelative::class,
+               PopulateFilearchiveSha1::class,
+               PopulateBacklinkNamespace::class,
+               FixDefaultJsonContentPages::class,
        ];
 
        /**
@@ -375,7 +375,7 @@ abstract class DatabaseUpdater {
        /**
         * @since 1.17
         *
-        * @return array
+        * @return string[]
         */
        public function getPostDatabaseUpdateMaintenance() {
                return $this->postDatabaseUpdateMaintenance;
index 7ebab67..442baf7 100644 (file)
@@ -609,8 +609,7 @@ abstract class Installer {
                # posix_getegid() *not* getmygid() because we want the group of the webserver,
                # not whoever owns the current script.
                $gid = posix_getegid();
-               $getpwuid = posix_getpwuid( $gid );
-               $group = $getpwuid['name'];
+               $group = posix_getpwuid( $gid )['name'];
 
                return $group;
        }
@@ -843,12 +842,7 @@ abstract class Installer {
                }
 
                if ( !$caches ) {
-                       $key = 'config-no-cache';
-                       // PHP >=5.5 is called APCu, earlier versions use APC (T61998).
-                       if ( !wfIsHHVM() && version_compare( PHP_VERSION, '5.5', '>=' ) ) {
-                               // config-no-cache-apcu
-                               $key .= '-apcu';
-                       }
+                       $key = 'config-no-cache-apcu';
                        $this->showMessage( $key );
                }
 
@@ -1715,7 +1709,9 @@ abstract class Installer {
         * Override the necessary bits of the config to run an installation.
         */
        public static function overrideConfig() {
-               define( 'MW_NO_SESSION', 1 );
+               // Use PHP's built-in session handling, since MediaWiki's
+               // SessionHandler can't work before we have an object cache set up.
+               define( 'MW_NO_SESSION_HANDLER', 1 );
 
                // Don't access the database
                $GLOBALS['wgUseDatabaseMessages'] = false;
@@ -1739,6 +1735,8 @@ abstract class Installer {
                // Some of the environment checks make shell requests, remove limits
                $GLOBALS['wgMaxShellMemory'] = 0;
 
+               // Override the default CookieSessionProvider with a dummy
+               // implementation that won't stomp on PHP's cookies.
                $GLOBALS['wgSessionProviders'] = [
                        [
                                'class' => 'InstallerSessionProvider',
@@ -1747,6 +1745,9 @@ abstract class Installer {
                                ] ]
                        ]
                ];
+
+               // Don't try to use any object cache for SessionManager either.
+               $GLOBALS['wgSessionCacheType'] = CACHE_NONE;
        }
 
        /**
index f70401b..c6b8960 100644 (file)
@@ -634,7 +634,7 @@ class MssqlInstaller extends DatabaseInstaller {
                $status = parent::createTables();
 
                // Do last-minute stuff like fulltext indexes (since they can't be inside a transaction)
-               if ( $status->isOk() ) {
+               if ( $status->isOK() ) {
                        $searchindex = $this->db->tableName( 'searchindex' );
                        $schema = $this->db->addIdentifierQuotes( $this->getVar( 'wgDBmwschema' ) );
                        try {
index b3675f8..bdaf4c8 100644 (file)
@@ -68,6 +68,7 @@ class MssqlUpdater extends DatabaseUpdater {
                        // 1.27
                        [ 'dropTable', 'msg_resource_links' ],
                        [ 'dropTable', 'msg_resource' ],
+                       [ 'addField', 'watchlist', 'wl_id', 'patch-watchlist-wl_id.sql' ],
                ];
        }
 
index 57eaffe..d414d90 100644 (file)
@@ -182,7 +182,6 @@ class MysqlUpdater extends DatabaseUpdater {
                        [ 'dropIndex', 'iwlinks', 'iwl_prefix', 'patch-kill-iwl_prefix.sql' ],
                        [ 'addField', 'categorylinks', 'cl_collation', 'patch-categorylinks-better-collation.sql' ],
                        [ 'doClFieldsUpdate' ],
-                       [ 'doCollationUpdate' ],
                        [ 'addTable', 'module_deps', 'patch-module_deps.sql' ],
                        [ 'dropIndex', 'archive', 'ar_page_revid', 'patch-archive_kill_ar_page_revid.sql' ],
                        [ 'addIndex', 'archive', 'ar_revid', 'patch-archive_ar_revid.sql' ],
@@ -279,6 +278,11 @@ class MysqlUpdater extends DatabaseUpdater {
                        [ 'dropTable', 'msg_resource_links' ],
                        [ 'dropTable', 'msg_resource' ],
                        [ 'addTable', 'bot_passwords', 'patch-bot_passwords.sql' ],
+                       [ 'addField', 'watchlist', 'wl_id', 'patch-watchlist-wl_id.sql' ],
+                       [ 'dropIndex', 'categorylinks', 'cl_collation', 'patch-kill-cl_collation_index.sql' ],
+                       [ 'addIndex', 'categorylinks', 'cl_collation_ext',
+                               'patch-add-cl_collation_ext_index.sql' ],
+                       [ 'doCollationUpdate' ],
                ];
        }
 
@@ -516,7 +520,7 @@ class MysqlUpdater extends DatabaseUpdater {
                                $prev_title = $row->cur_title;
                                $prev_namespace = $row->cur_namespace;
                        }
-                       $sql = "DELETE FROM $cur WHERE cur_id IN ( " . join( ',', $deleteId ) . ')';
+                       $sql = "DELETE FROM $cur WHERE cur_id IN ( " . implode( ',', $deleteId ) . ')';
                        $this->db->query( $sql, __METHOD__ );
                        $this->output( wfTimestamp( TS_DB ) );
                        $this->output( "......<b>Deleted</b> " . $this->db->affectedRows() . " records.\n" );
index 02e59f5..334256b 100644 (file)
@@ -111,6 +111,7 @@ class OracleUpdater extends DatabaseUpdater {
                        // 1.27
                        [ 'dropTable', 'msg_resource_links' ],
                        [ 'dropTable', 'msg_resource' ],
+                       [ 'addField', 'watchlist', 'wl_id', 'patch-watchlist-wl_id.sql' ],
 
                        // KEEP THIS AT THE BOTTOM!!
                        [ 'doRebuildDuplicateFunction' ],
index 234c209..0728415 100644 (file)
@@ -615,7 +615,7 @@ class PostgresInstaller extends DatabaseInstaller {
                        $conn->commit( __METHOD__ );
                }
                // Resume normal operations
-               if ( $status->isOk() ) {
+               if ( $status->isOK() ) {
                        $this->enableLB();
                }
 
index 038c953..a3b50ac 100644 (file)
@@ -67,6 +67,7 @@ class PostgresUpdater extends DatabaseUpdater {
                        [ 'addSequence', 'filearchive', 'fa_id', 'filearchive_fa_id_seq' ],
                        [ 'addSequence', 'archive', false, 'archive_ar_id_seq' ],
                        [ 'addSequence', 'externallinks', false, 'externallinks_el_id_seq' ],
+                       [ 'addSequence', 'watchlist', false, 'watchlist_wl_id_seq' ],
 
                        # new tables
                        [ 'addTable', 'category', 'patch-category.sql' ],
@@ -428,6 +429,10 @@ class PostgresUpdater extends DatabaseUpdater {
                        // 1.27
                        [ 'dropTable', 'msg_resource_links' ],
                        [ 'dropTable', 'msg_resource' ],
+                       [
+                               'addPgField', 'watchlist', 'wl_id',
+                               "INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('watchlist_wl_id_seq')"
+                       ],
                ];
        }
 
index 7db4f1a..86dccd7 100644 (file)
@@ -65,7 +65,6 @@ class SqliteUpdater extends DatabaseUpdater {
                        [ 'addField', 'interwiki', 'iw_api', 'patch-iw_api_and_wikiid.sql' ],
                        [ 'dropIndex', 'iwlinks', 'iwl_prefix', 'patch-kill-iwl_prefix.sql' ],
                        [ 'addField', 'categorylinks', 'cl_collation', 'patch-categorylinks-better-collation.sql' ],
-                       [ 'doCollationUpdate' ],
                        [ 'addTable', 'module_deps', 'patch-module_deps.sql' ],
                        [ 'dropIndex', 'archive', 'ar_page_revid', 'patch-archive_kill_ar_page_revid.sql' ],
                        [ 'addIndex', 'archive', 'ar_revid', 'patch-archive_ar_revid.sql' ],
@@ -148,6 +147,11 @@ class SqliteUpdater extends DatabaseUpdater {
                        [ 'dropTable', 'msg_resource_links' ],
                        [ 'dropTable', 'msg_resource' ],
                        [ 'addTable', 'bot_passwords', 'patch-bot_passwords.sql' ],
+                       [ 'addField', 'watchlist', 'wl_id', 'patch-watchlist-wl_id.sql' ],
+                       [ 'dropIndex', 'categorylinks', 'cl_collation', 'patch-kill-cl_collation_index.sql' ],
+                       [ 'addIndex', 'categorylinks', 'cl_collation_ext',
+                               'patch-add-cl_collation_ext_index.sql' ],
+                       [ 'doCollationUpdate' ],
                ];
        }
 
index 97fa245..4c4e6b7 100644 (file)
@@ -510,6 +510,7 @@ class WebInstaller extends Installer {
                if ( $this->getSession( 'test' ) === null && !$this->request->wasPosted() ) {
                        $wgLanguageCode = $this->getAcceptLanguage();
                        $wgLang = $wgContLang = Language::factory( $wgLanguageCode );
+                       RequestContext::getMain()->setLanguage( $wgLang );
                        $this->setVar( 'wgLanguageCode', $wgLanguageCode );
                        $this->setVar( '_UserLang', $wgLanguageCode );
                } else {
@@ -1057,7 +1058,7 @@ class WebInstaller extends Installer {
                if ( !$status->isGood() ) {
                        $text = $status->getWikiText();
 
-                       if ( $status->isOk() ) {
+                       if ( $status->isOK() ) {
                                $box = $this->getWarningBox( $text );
                        } else {
                                $box = $this->getErrorBox( $text );
@@ -1148,7 +1149,7 @@ class WebInstaller extends Installer {
         */
        public function downloadLinkHook( $text, $attribs, $parser ) {
                $anchor = Html::rawElement( 'a',
-                       [ 'href' => $this->getURL( [ 'localsettings' => 1 ] ) ],
+                       [ 'href' => $this->getUrl( [ 'localsettings' => 1 ] ) ],
                        wfMessage( 'config-download-localsettings' )->parse()
                );
 
index ffab9bb..11a1833 100644 (file)
@@ -24,12 +24,12 @@ class WebInstallerComplete extends WebInstallerPage {
        public function execute() {
                // Pop up a dialog box, to make it difficult for the user to forget
                // to download the file
-               $lsUrl = $this->getVar( 'wgServer' ) . $this->parent->getURL( [ 'localsettings' => 1 ] );
+               $lsUrl = $this->getVar( 'wgServer' ) . $this->parent->getUrl( [ 'localsettings' => 1 ] );
                if ( isset( $_SERVER['HTTP_USER_AGENT'] ) &&
                        strpos( $_SERVER['HTTP_USER_AGENT'], 'MSIE' ) !== false
                ) {
                        // JS appears to be the only method that works consistently with IE7+
-                       $this->addHtml( "\n<script>jQuery( function () { location.href = " .
+                       $this->addHTML( "\n<script>jQuery( function () { location.href = " .
                                Xml::encodeJsVar( $lsUrl ) . "; } );</script>\n" );
                } else {
                        $this->parent->request->response()->header( "Refresh: 0;url=$lsUrl" );
index 9d0d680..63740e3 100644 (file)
@@ -81,9 +81,9 @@ class WebInstallerInstall extends WebInstallerPage {
                if ( $step == 'extension-tables' ) {
                        $this->endLiveBox();
                }
-               $msg = $status->isOk() ? 'config-install-step-done' : 'config-install-step-failed';
+               $msg = $status->isOK() ? 'config-install-step-done' : 'config-install-step-failed';
                $html = wfMessage( 'word-separator' )->escaped() . wfMessage( $msg )->escaped();
-               if ( !$status->isOk() ) {
+               if ( !$status->isOK() ) {
                        $html = "<span class=\"error\">$html</span>";
                }
                $this->addHTML( $html . "</li>\n" );
index 5564618..dcd30cf 100644 (file)
@@ -73,7 +73,7 @@ class WebInstallerName extends WebInstallerPage {
                                'label' => '', // @todo Needs a label?
                                'attribs' => [ 'readonly' => 'readonly', 'class' => 'enabledByOther' ]
                        ] ) .
-                       $this->getFieldSetStart( 'config-admin-box' ) .
+                       $this->getFieldsetStart( 'config-admin-box' ) .
                        $this->parent->getTextBox( [
                                'var' => '_AdminName',
                                'label' => 'config-admin-name',
@@ -100,7 +100,7 @@ class WebInstallerName extends WebInstallerPage {
                                'label' => 'config-subscribe',
                                'help' => $this->parent->getHelpBox( 'config-subscribe-help' )
                        ] ) .
-                       $this->getFieldSetEnd() .
+                       $this->getFieldsetEnd() .
                        $this->parent->getInfoBox( wfMessage( 'config-almost-done' )->text() ) .
                        // getRadioSet() builds a set of labeled radio buttons.
                        // For grep: The following messages are used as the item labels:
index 7cc5db2..0c01b64 100644 (file)
@@ -67,7 +67,7 @@ class WebInstallerOptions extends WebInstallerPage {
                        $this->parent->getHelpBox( 'config-license-help' ) .
 
                        # E-mail
-                       $this->getFieldSetStart( 'config-email-settings' ) .
+                       $this->getFieldsetStart( 'config-email-settings' ) .
                        $this->parent->getCheckBox( [
                                'var' => 'wgEnableEmail',
                                'label' => 'config-enable-email',
@@ -101,11 +101,11 @@ class WebInstallerOptions extends WebInstallerPage {
                        ] ) .
                        $this->parent->getHelpBox( 'config-email-auth-help' ) .
                        "</div>" .
-                       $this->getFieldSetEnd()
+                       $this->getFieldsetEnd()
                );
 
                $skins = $this->parent->findExtensions( 'skins' );
-               $skinHtml = $this->getFieldSetStart( 'config-skins' );
+               $skinHtml = $this->getFieldsetStart( 'config-skins' );
 
                $skinNames = array_map( 'strtolower', $skins );
                $chosenSkinName = $this->getVar( 'wgDefaultSkin', $this->parent->getDefaultSkin( $skinNames ) );
@@ -136,13 +136,13 @@ class WebInstallerOptions extends WebInstallerPage {
                }
 
                $skinHtml .= $this->parent->getHelpBox( 'config-skins-help' ) .
-                       $this->getFieldSetEnd();
+                       $this->getFieldsetEnd();
                $this->addHTML( $skinHtml );
 
                $extensions = $this->parent->findExtensions();
 
                if ( $extensions ) {
-                       $extHtml = $this->getFieldSetStart( 'config-extensions' );
+                       $extHtml = $this->getFieldsetStart( 'config-extensions' );
 
                        foreach ( $extensions as $ext ) {
                                $extHtml .= $this->parent->getCheckBox( [
@@ -152,7 +152,7 @@ class WebInstallerOptions extends WebInstallerPage {
                        }
 
                        $extHtml .= $this->parent->getHelpBox( 'config-extensions-help' ) .
-                               $this->getFieldSetEnd();
+                               $this->getFieldsetEnd();
                        $this->addHTML( $extHtml );
                }
 
@@ -167,7 +167,7 @@ class WebInstallerOptions extends WebInstallerPage {
                $uploadwrapperStyle = $this->getVar( 'wgEnableUploads' ) ? '' : 'display: none';
                $this->addHTML(
                        # Uploading
-                       $this->getFieldSetStart( 'config-upload-settings' ) .
+                       $this->getFieldsetStart( 'config-upload-settings' ) .
                        $this->parent->getCheckBox( [
                                'var' => 'wgEnableUploads',
                                'label' => 'config-upload-enable',
@@ -195,7 +195,7 @@ class WebInstallerOptions extends WebInstallerPage {
                                'label' => 'config-instantcommons',
                                'help' => $this->parent->getHelpBox( 'config-instantcommons-help' )
                        ] ) .
-                       $this->getFieldSetEnd()
+                       $this->getFieldsetEnd()
                );
 
                $caches = [ 'none' ];
@@ -219,7 +219,7 @@ class WebInstallerOptions extends WebInstallerPage {
                $hidden = ( $cacheval == 'memcached' ) ? '' : 'display: none';
                $this->addHTML(
                        # Advanced settings
-                       $this->getFieldSetStart( 'config-advanced-settings' ) .
+                       $this->getFieldsetStart( 'config-advanced-settings' ) .
                        # Object cache settings
                        // getRadioSet() builds a set of labeled radio buttons.
                        // For grep: The following messages are used as the item labels:
@@ -239,7 +239,7 @@ class WebInstallerOptions extends WebInstallerPage {
                                'help' => $this->parent->getHelpBox( 'config-memcached-help' )
                        ] ) .
                        '</div>' .
-                       $this->getFieldSetEnd()
+                       $this->getFieldsetEnd()
                );
                $this->endForm();
 
index 838c953..4d16d45 100644 (file)
@@ -7,7 +7,8 @@
                        "روخو",
                        "Claw eg",
                        "Kuwaity26",
-                       "محمد أحمد عبد الفتاح"
+                       "محمد أحمد عبد الفتاح",
+                       "Maroen1990"
                ]
        },
        "config-desc": "مثبت لميدياويكي",
        "config-header-sqlite": "إعدادات SQLite",
        "config-header-oracle": "إعدادات أوراكل",
        "config-invalid-db-type": "نوع قاعدة بيانات غير صحيح",
+       "config-db-web-account": "حساب قاعدة البيانات للوصول عبر الوب",
+       "config-db-web-account-same": "استعمل نفس الحساب للتنصيب",
+       "config-db-web-create": "إنشئ حساب إذا لم يكن موجودا بالفعل",
+       "config-db-web-no-create-privs": "الحساب الذي حددته لتركيب ليس لديه امتيازات كافية لإنشاء حساب.\nالحساب الذي حددته هنا موجود بالفعل.",
        "config-mysql-engine": "محرك التخزين",
        "config-mysql-innodb": "إنو دي بي",
        "config-mysql-myisam": "ماي إسام",
        "config-mysql-charset": "مجموعة محارف قاعدة البيانات",
        "config-mysql-binary": "ثنائي",
        "config-mysql-utf8": "يو تي إف-8",
+       "config-mssql-auth": "نوع الاستيثاق:",
        "config-site-name": "اسم الويكي:",
        "config-site-name-blank": "أدخل اسم موقع.",
        "config-project-namespace": "نطاق المشروع:",
        "config-admin-password": "كلمة السر:",
        "config-admin-password-confirm": "كلمة المرور مرة أخرى:",
        "config-admin-name-blank": "أدخل اسم مستخدم لإداري.",
+       "config-admin-password-mismatch": "كلمات السر اثنين التي أدخلتها لا تتطابق.",
        "config-admin-email": "عنوان البريد الإلكتروني:",
+       "config-admin-email-help": "إدخال عنوان البريد الإلكتروني هنا ليسمح لك لتلقي البريد الإلكتروني من المستخدمين الآخرين على ويكي، إعادة تعيين كلمة المرور الخاصة بك، ويتم إخطار من التغييرات للصفحات في قائمة مراقبتك. يمكنك ترك هذا الحقل فارغا.",
+       "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-pd": "ملكية عامة",
        "config-license-cc-choose": "اختر ترخيص مشاع إبداعي مخصص",
        "config-email-settings": "إعدادات البريد الإلكتروني",
+       "config-enable-email": "تمكين البريد الإلكتروني الصادرة",
        "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-instantcommons": "تمكين الاستخدام الفوري لويكيميديا كومنز InstantCommons",
        "config-cc-again": "اختر مجددًا",
        "config-advanced-settings": "ضبط متقدم",
+       "config-cache-options": "إعدادات التخزين المؤقت الكائن:",
        "config-extensions": "امتدادات",
        "config-skins": "الواجهات",
        "config-skins-use-as-default": "استخدم هذه الواجهة كافتراضية",
        "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-stats": "بدء الإحصاءات",
        "config-install-keys": "توليد المفاتيح السرية",
+       "config-install-updates": "منع تشغيل التحديثات غير الضرورية",
        "config-install-sysop": "إنشاء حساب مستخدم إداري",
        "config-install-mainpage": "إنشاء صفحة رئيسية بالمحتوى الافتراضي",
+       "config-install-extension-tables": "إنشاء جداول للامتدادات المفعلة",
+       "config-install-mainpage-failed": "لم يتمكن من إدراج الصفحة الرئيسية: $1",
+       "config-download-localsettings": "تنزيل <code>LocalSettings.php</code>",
        "config-help": "مساعدة",
        "config-help-tooltip": "اضغط للتوسيع",
-       "mainpagetext": "'''تم تثبيت ميدياويكي بنجاح.'''",
+       "config-nofile": "لا يمكن العثور على الملف \"$1\". هل حُذف؟",
+       "mainpagetext": "<strong>تم تثبيت ميدياويكي بنجاح.</strong>",
        "mainpagedocfooter": "استشر [//meta.wikimedia.org/wiki/Help:Contents دليل المستخدم] لمعلومات حول استخدام برنامج الويكي.\n\n== البداية ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings قائمة إعدادات الضبط]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ أسئلة متكررة حول ميدياويكي]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce القائمة البريدية الخاصة بإصدار ميدياويكي]"
 }
index da2a1c5..8651c15 100644 (file)
@@ -12,7 +12,7 @@
        "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-localsettings-badkey": "La clave d'anovamientu que disti 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": "Alcontróse un error al conectar cola base de datos usando la configuración especificada en <code>LocalSettings.php</code>. Corrixa esta configuración y vuelva a intentalo.\n\n$1",
        "config-no-db": "¡Nun pudo alcontrase un controlador de base de datos afayadizu! Necesites instalar un controlador de base de datos pa PHP.\n{{PLURAL:$2|Tien sofitu el tipu de base de datos siguiente|Tienen sofitu los tipos de base de datos siguientes}}: $1.\n\nSi compilasti PHP tu mesmu, reconfigúralu con un cliente de base de datos activáu, por exemplu, usando <code>./configure --with-mysqli</code>.\nSi instalasti PHP dende un paquete de Debian o Ubuntu, necesites instalar tamién,por exemplu, el paquete <code>php5-mysql</code>.",
        "config-outdated-sqlite": "'''Avisu:''' tien SQLite $1, que ye inferior a la versión mínima necesaria $2. SQLite nun tará disponible.",
        "config-no-fts3": "'''Avisu:''' SQLite ta compiláu ensin el [//sqlite.org/fts3.html módulu FTS3]; les funciones de gueta nun tarán disponibles nesti sistema.",
-       "config-register-globals-error": "<strong>Error: la opción de PHP <code>[http://php.net/register_globals register_globals]</code> ta activada.\nTien de desactivase pa siguir cola instalación.</strong>\nVisita [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] p'alcontrar ayuda tocante a cómo facelo.",
-       "config-magic-quotes-gpc": "<strong>Fatal: ¡[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] ta activáu!</strong>\nEsta opción causa la imprevisible corrupción de la entrada de datos.\nNun puedes instalar o utilizar MediaWiki nun siendo que esta opción tea desactivada.",
-       "config-magic-quotes-runtime": "<strong>Fatal: ¡[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] ta activáu!</strong>\nEsta opción causa la imprevisible corrupción de la entrada de datos.\nNun puedes instalar o utilizar MediaWiki nun siendo que esta opción tea desactivada.",
-       "config-magic-quotes-sybase": "<strong>Fatal: ¡[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] ta activáu!</strong>\nEsta opción causa la imprevisible corrupción de la entrada de datos.\nNun puedes instalar o utilizar MediaWiki nun siendo que esta opción tea desactivada.",
        "config-mbstring": "<strong>Fatal: ¡[@http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] ta activáu!</strong>\nEsta opción causa errores y pué corromper los datos de mou imprevisible.\nNun puedes instalar o utilizar MediaWiki nun siendo que esta opción tea desactivada.",
-       "config-safe-mode": "<strong>Atención:</strong> el [http://www.php.net/features.safe-mode mou seguru] de PHP ta activáu.\nPuede causar problemes, especialmente si uses la carga de ficheros ya l'encontu pa <code>math</code>.",
        "config-xml-bad": "Falta'l módulu XML de PHP.\nMediaWiki rique funciones d'esti módulu y nun va funcionar con esta configuración.\nSeique precises instalar el paquete RPM llamáu php-xml.",
        "config-pcre-old": "<strong>Fatal:</strong> Ríquese PCRE $1 o posterior.\nEl binariu de PHP ta enllazáu con PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Más información].",
        "config-apc": "[http://www.php.net/apc APC] ta instaláu",
@@ -99,6 +94,6 @@
        "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.'''",
+       "mainpagetext": "<strong>Instalóse MediaWiki.</strong>",
        "mainpagedocfooter": "Consulta la [//meta.wikimedia.org/wiki/Help:Contents Guía del usuariu] pa saber cómo usar el software wiki.\n\n== Primeros pasos ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Llista de les opciones de configuración]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ EMF de MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Llista de corréu de llanzamientos de MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Llocaliza MediaWiki na to llingua]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Depriende como combatir la puxarra na to wiki]"
 }
index 8165da2..6d6b1c6 100644 (file)
@@ -3,7 +3,14 @@
                "authors": [
                        "Haqmar",
                        "Seb35",
-                       "Рустам Нурыев"
+                       "Рустам Нурыев",
+                       "Sagan",
+                       "Азат Хәлилов",
+                       "Айсар",
+                       "Янмурза Баки",
+                       "Гульчатай",
+                       "Вильданова Гюзель",
+                       "З. ӘЙЛЕ"
                ]
        },
        "config-desc": "MediaWiki йөкләүсе",
        "config-localsettings-cli-upgrade": "<code>LocalSettings.php</code> файлы бар. \nБыл күрһәтмәне яңыртыу өсөн <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$1",
        "config-session-error": "Эш башлағанда сыҡҡан хата: $1",
+       "config-session-expired": "Һеҙҙең ваҡыт үтте. Сессия $1 оҙонлоғона көйләнгән. Уны оҙайтыу өсөн php.ini. эсендә <code>session.gc_maxlifetime</code> кодын үҙгәртегеҙ.\nУрынлаштырыу процессын яңынан башлағыҙ.",
+       "config-no-session": "Был сессия юғалған!\nҮҙегеҙҙең php.ini тикшерегеҙ, \n<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": "=== Даирәне тикшереү ===",
+       "config-copyright": "=== Авторлыҡ хоҡуҡтары һәм шарттар ===\n\n$1\n\nMediaWiki - ирекле программа тьәминәте. Һеҙ уны ирекле программа тьәминәте фонды баҫып сығарған GNU General Public License лицензия талаптарына ярашлы рәүештә тарата һәм/йәки үҙгәртә алаһығыҙ;икенсе версияһына йәки ниндәйҙә булһа һуңғы версияһына ярашлы рәүештә.\nMediaWiki - файҙалы булыу өмөтө менән таратыла, ләкин <strong> бер ниндәй ҙә гарантияларһыҙ</strong>, хатта күҙ уңында тотолған гарантияларһыҙ <strong> коммерция ҡимәтенән тыш </strong> йәки </strong> ниндәй ҙә булһа маҡсатҡа яраҡһыҙ </strong>. Ҡара. тулыраҡ мәғлүмәт алыу өсөн GNU General Public License лицезияһы. \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/Special:MyLanguage/Help:Contents/ru Ҡулланыусылар өсөн белешмә]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/ru Администраторҙар өсөн белешмә]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/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": "Мөхитте тикшереү уңышлы тамамланды. MediaWiki урынлаштырырға мөмкин.",
+       "config-env-bad": "Мөхит тикшерелде. Һеҙ MediaWiki урынлаштыра алмайһығыҙ.",
+       "config-env-php": "PHP: $1 өлгөһө урынлаштырылды.",
+       "config-env-hhvm": "HHVM $1 урынлаштырылды.",
+       "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/Special:MyLanguage/Unicode_normalization_considerations нормализации Юникодты нормалләштереү] өсөн уҡығыҙ.",
+       "config-unicode-update-warning": "\"Иҫкәртеү\". Ҡуйылған тышлыҡ Юникодты нормаға килтереүҙең иҫке китапхана версияһын ҡуллана[http://site.icu-project.org/ проекта ICU].Әгәр Юникодты тулы мәғәнәһендә ҡулланырға теләһәгеҙ, һеҙ [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations версияны яңыртырға] тейешһегеҙ.",
+       "config-no-db": "Мәғлүмәттәр базаһына тура килгән драйверҙарҙы табып булманы!Һеҙгә  PHP өсөн мәғлүмәттәр базаһының  драйверҙарын ҡуйырға кәрәк.{{PLURAL:$2|сираттағы төр ҡулланыла|сираттағы төрҙәр ҡулланыла}}мәғлүмәттәр базалары:$1.\nӘгәр һеҙ үҙегеҙ PHP -ға компиляция яһаған булһағыҙ,  мәғлүмәттәр базаһына клиентты индереп уны яңынан, мәҫәлән, <code>./configure --with-mysqli</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-mbstring": "\"Проблема\":  PHP опцияһы тоташтырылған\n[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]!'''\nБыл индерелгән мәғлүмәттәрҙең хаталарына һәм көтөлмәгән боҙолоуҙарға килтерә.\nОпцияны һүндермәйенсә MediaWikiны ҡуйыу һәм ҡулланыу мөмкин түгел.",
+       "config-xml-bad": "РНР өсөн XML-модуль юҡ. \nMediaWiki  бындай конфигурацияла эшләмәйәсәк, сөнки был модулдең функционалы талап ителә.\nБәлки, Һеҙгә RPM-пакет php-xml булдырырыға кәрәк булыр.",
+       "config-pcre-old": "'''Фаталь хата:'''  PCRE версияһы йәки яңырағы талап ителә $1.\nБашҡарылыусы файл PHP менән бәйләнгән PCRE  $2версияһы.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Ентекләберәк].",
+       "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-ctype": "<strong>Фаталь хата:</strong> PHР тотороҡло эшләргә тейеш [http://www.php.net/manual/en/iconv.installation.php киңәйтеү iconv].",
+       "config-iconv": "<strong>Фаталь хата:</strong> PHР тотороҡло эшләргә тейеш [http://www.php.net/manual/en/iconv.installation.php киңәйтеү iconv].",
+       "config-json": "'''Фаталь хата:''' PHP JSON ярҙамынан тыш эшләнгән.\nҺеҙгә йә PHP JSON киңәйтеүен, йәки MediaWiki алдынан [http://pecl.php.net/package/jsonc PECL jsonc] киңәйтеүен ҡуйырға кәрәк.\n* PHP-киңәйтеүсе <code>/etc/php.ini</code> йәки  <code>/etc/php.d/json.ini</code> инергә тейеш булһа ла, Red Hat Enterprise Linux (CentOS) 5 һәм 6, составына инә.\n* 2013 йылдың майынан һуң сығарылған Linux-тың ҡайһы бер  дистрибутивтары  PECL киңәйтеүен <code>php5-json</code> или <code>php-pecl-jsonc</code> кеүек асыр урынға,  PHP киңәйтеүсеһен асмай.",
+       "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-apcu": "'''Иғтибар:'''  [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] табылманы йәки [http://www.iis.net/download/WinCacheForPhp WinCache].\nОбъекттарҙы кэшлау һүндереләсәк..",
+       "config-mod-security": "<strong>Иғтибар</strong>: һеҙҙең веб-серверығыҙҙа [http://modsecurity.org/ mod_security]/mod_security2 ҡабыҙылған. Уның күп кенә стандарт көйләүҙәре 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": "Found GD graphics library built-in.\nImage thumbnailing will be enabled if you enable uploads.",
+       "config-no-scaling": "Эске китапхананы GD йәки ImageMagick табып булманы.\nМиниатюр рәсемдәр ҡарау мөмкин булмаясаҡ.",
+       "config-no-uri": "'''Хата:''' Ағымдағы URI билдәләп булмай.\nУрынлаштырыу өҙөлдө.",
+       "config-no-cli-uri": "'''Киҫәтеү''': параметр күрһәтелмәгән <code>--scriptpath</code>, килешеү байынса: <code>$1</code> .",
+       "config-using-server": "«<nowiki>$1</nowiki>» сервер исеме файҙаланыла.",
+       "config-using-uri": " \"<nowiki>$1$2</nowiki>\" сервер исеме файҙаланыла.",
+       "config-uploads-not-safe": "'''Иғтибар:''' (<code>$1</code>) күсереүҙәре өсөе ҡулланылған директория ирекле скриптар яһау өсөн бармай.  \nMediaWiki барлыҡ күсерелгән файлдарҙы тикшерһә лә, файлды күсереүҙән алда [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security бирешеүсәнлекте ябыу] тәҡдим ителә.",
+       "config-no-cli-uploads-check": "\"Иғтибар\" әйтмәйенсә тейәлеү өсөн каталог (<code>$1</code>) CLI  урынлаштырған мәлдә тиҙ боҙололоусанлыҡҡа, ирекле сценарийҙы үтәүгә тикшерелмәне.",
+       "config-brokenlibxml": "Системағыҙҙа  MediaWiki һәм башҡа веб-ҡушымталар мәғлүмәттәрен йәшерен щарралауы ихтимал булған  PHP һәм libxml2 версиялары бар. \nlibxml2  2.7.3  йәки юғарыраҡ версияға ([https://bugs.php.net/bug.php?id=45996 хата тураһында мәғлүмәттәр]) тиклем яңыртығыҙ.\nБәйләнеш өҙөлдө.",
+       "config-suhosin-max-value-length": "Suhosin ҡуйылған һәм  GET <code>length</code> параметрын  $1 байтҡаса кәметә.  MediaWiki-ның  ResourceLoader компоненты был сикләүҙе урап үтә, әммә был етештереүсәнлекте кәметә. Әгәр мөмкин булһа, 1024 асылындағы   <code>suhosin.get.max_value_length</code> йәки унан юғарыраҡ булған  <code>php.ini</code>, шулай уҡ  <code>$wgResourceLoaderMaxQueryLength</code> өсөн шундай уҡ  LocalSettings.php ҡуйырға була.",
+       "config-db-type": "Мәғлүмәт базаһы төрө:",
+       "config-db-host": "Мәғлүмәт базаһы хосты:",
+       "config-db-host-help": "Әгәр ҙә серверҙың база мәғлүмәттәре икенсе серверҙа урынлашһа, бында уның исемен йәки IP-адресын индерегеҙ.\nӘгәр ҙә һеҙ виртуаль хостингты ҡулланһағыҙ, һеҙҙең провайдерығыҙ  хостың дөрөҫ исемен үҙенең документацияһында күрһәтергә тейеш.\nӘгәр ҙә һеҙ системаны Windows аҫтына ҡуяһығыҙ һәм MySQL - ды ҡулланаһығыҙ икән, «localhost» исемле сервер эшләй алмаясаҡ. Был осраҡта 127.0.0.1 локаль  IP-адресығыҙҙы күрһәтергә тырышығыҙ.\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Әгәр һеҙ виртуаль хостингты ҡулланаһығыҙ икән, провайдер һеҙгә мәғлүмәттәр базаһының конкрет исемен бирер йәки идара итеү панеле ярҙамы менән мәғлүмәттәр базаһын булдырырға мөмкинлек бирер.",
+       "config-db-name-oracle": "Мәғлүмәт базаһы схемаһы",
+       "config-db-account-oracle-warn": "Oracle мәғлүмәттәр базаһы итеп ҡуйыуҙың өс юлы бар:\nӘгәр иҫәп яҙмаһын ҡуйыу процесында булдырырға теләһәгеҙ, зинһар, SYSDBA ҡуйыу өсөн иҫәп алыу ролен һәм веб-күҙәтеү мөмкинлеге булған иҫәп алыуҙың  теләгән вәкәләттәрен  күрһәтегеҙ. Шулай уҡ веб-күҙәтеү мөмкинлеге булған иҫәпте ҡулдан эшләргә һәм уны (әгәр схема объекттарын төҙөүгә кәрәкле рөхсәте бар икән) йәки ике иҫәп яҙмаһын, береһен - объекттар төҙөү хоҡуғы менән, икенсеһен веб-күҙәтеүҙе сикләүсе, күрһәтәһегеҙ. \nТейешле өҫтөнлөктәр менән иҫәп яҙмаһын булдырыу сценарийын ошо ҡоролма программаһының  «maintenance/oracle/» папкаһында табырға мөмкин. Сикләнгән иҫәп яҙмаһын файҫаланыу килешеү буйынса иҫәп яҙмаларының барлыҡ мөмкинлектәрен һүндереүгә килтереү ихтималлығын күҙ уңында тотоғоҙ.",
+       "config-db-install-account": "Көйләү өсөн иҫәп яҙмаһы",
+       "config-db-username": "Мәғлүмәт базаһын ҡулланыусы исеме",
+       "config-db-password": "Мәғлүмәт базаһының серһүҙе",
+       "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": "Викиҙың ғәҙәттәге эше ваҡытында мәғлүмәт базаһына инеү өсөн файҙаланылған ҡулланыусы исемен һәм серһүҙен индерегеҙ. Әгәр бындай иҫәп яҙмаһы юҡ икән, ә ваҡытлыса яҙма етерлек өҫтөнлөктәргә эйә икән, ғәҙәттәге иҫәп яҙмаһы викиҙа эшләү өсөн кәрәкле минималь өҫтөнлөктәр менән булдырыласаҡ.",
+       "config-db-prefix": "Мәғлүмәт базаһы таблицаларының префиксы",
+       "config-db-prefix-help": "Әгәр һеҙгә бер мәғлүмәт базаһын бер нисә вики йәки MediaWiki һәм башҡа веб-ҡушымталар араһында бүлергә тура килһә, таблицалағы барлыҡ исемдәр өсөн перфикс өҫтәй алаһығыҙ. Ара ҡулланмағыҙ.\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Был UTF-8 режимында MySQL  булыуға ҡарағанда һөҙөмтәлерәк, сөнки Юникодтың символдар тупланмаһын тулыһынса ҡулланыу мөмкинлеген бирә. \n'''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": "PostgreSQL $1 йәки тағы ла һуңыраҡ булған версия кәрәк. Һеҙҙә PostgreSQL $2 ҡуйылған.",
+       "config-db-port": "Мәғлүмәт базаһы порты:",
+       "config-db-schema": "MediaWiki өсөн схема:",
+       "config-db-schema-help": "Был схема ғәҙәттә яҡшы эшләй.\nУны, үҙегеҙгә кәрәк булһа ғына, үҙгәртегеҙ",
+       "config-pg-test-error": "Мәғлүмәт базаһына инеп булманы<strong>$1</strong>: $2",
+       "config-sqlite-dir": "SQLite мәғлүмәттәре директориһы:",
+       "config-sqlite-dir-help": "SQLite бөтә мәғлүмәттәрҙе бер файлда һаҡлай. \nҠуйған ваҡытта веб-сервер һеҙ күрһәткән директорияны уҡый алырға тейеш. \n\nУға Интернет аша инеү '''мөмкин түгел''', шуға ул PHP файлдар һаҡланған файл менән тап килмәҫкә тейеш.\nҠуйыусы бал директорияны <code>.htaccess</code> файлына яҙасаҡ, әгәр ул эшләмәһә, кемдер бөтөн мәғлүмәт базаһына инә аласаҡ. Был базала шулай уҡ ҡулланыусылар тураһында мәғлүмәт тә (электрон почта адрестары, серһүҙ хештары), шулай уҡ юйылған биттәр һәм вики тураһында башҡа йәшерен мәғлүмәттәр һаҡлана. \n\nБыл базаны, мөмкин булһа, ситтәрәк, мәҫәлән, <code>/var/lib/mediawiki/yourwiki</code> һаҡлағыҙ.",
+       "config-oracle-def-ts": "Килешеү буйынса таблица арауығы:",
+       "config-oracle-temp-ts": "Таблицаларҙың ваҡытлы киңлеге:",
+       "config-type-mysql": "MySQL (йәки тура килгән)",
+       "config-type-mssql": "Microsoft SQL Server",
+       "config-support-info": "MediaWiki -ла түбәндәге СУБД бар:\n\n$1\n\nӘгәр мәғлүмәт һаҡлау системаһын исемлектә күрмәһәгеҙ, рөхсәт алыу өсөн өҫтәге һылтанмалағы инструкция буйынса эш итегеҙ.",
+       "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] — MediaWiki-ҙың иҫ яҡшы эшләгән төп мәғлүмәттәр базаһы.  MediaWiki шулай уҡ MySQL-тап килгән [{{int:version-db-mariadb-url}} MariaDB] һәм [{{int:version-db-percona-url}} Percona Server] менән эшләй. ([http://www.php.net/manual/ru/mysql.installation.php MySQL-ярҙамында PHP туплау инструкцияһы])",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] —  СУБД-ның популяр открыткаһы, MySQL өсөн альтернатива.\nТөҙәтелмәгән хаталар булыуы мөмкин, эш схемаһында ҡулланыу тәҡдим ителмәй. ([http://www.php.net/manual/ru/pgsql.installation.php  PostgreSQL рөхсәт ителгән РНР йыйыу инструкцияһы]).",
+       "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] — яҡшы һәм еңел мәғлүмәт базаһы системаһы. ([http://www.php.net/manual/ru/pdo.installation.php  собрать PHP  SQLite]  PDO менән эшләй торған инструкция)",
+       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] — предприятие масштабындаға коммерция базыһы. ([http://www.php.net/manual/ru/oci8.installation.php OCI8 ярҙамындағы РНР нисек йыйырға])",
+       "config-dbsupport-mssql": "* [{{int:version-db-oracle-url}} Oracle] — предприятие масштабындаға Windows өсөн коммерция базыһы. ([http://www.php.net/manual/ru/oci8.installation.php OCI8 ярҙамындағы РНР нисек йыйырға])",
+       "config-header-mysql": "MySQL көйләү",
+       "config-header-postgres": "PostgreSQL көйләү",
+       "config-header-sqlite": "SQLite көйләү",
+       "config-header-oracle": "Оракул көйләү",
+       "config-header-mssql": "Microsoft SQL Серверенең билдәле дәүмәлдәре",
+       "config-invalid-db-type": "Нигеҙ тибтарының дөрөҫ булмаған күрһәткестәре",
+       "config-missing-db-name": "Һеҙ мәғәнәне индерергә тейешһегеҙ «{{int:config-db-name}}».",
+       "config-missing-db-host": "Параметр мәғәнәһен индереү мотлаҡ «{{int:config-db-host}}».",
+       "config-missing-db-server-oracle": "Һеҙ бында мәғәнәне индерергә тейешһегеҙ «{{int:config-db-host-oracle}}».",
+       "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» мәғлүмәттәр базаһының дөрөҫ булмаған префиксы. Тик 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» өсөн схема дөрөҫ түгел.\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-mssql-old": "$1 йә һуңыраҡ версиянан Microsoft SQL Server кәрәк. Һеҙҙә $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> яҙма мөмкин булған директория эшләгеҙ һәм дауам итегеҙ.\nUnix/Linux системаһында түбәндәгене башҡарығыҙ:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+       "config-sqlite-parent-unwritable-nogroup": "<nowiki><code>$1</code></nowiki> мәғлүмәт директорияһын эшләп булманы, веб-серверҙың төп директорияны яҙырға хоҡуғы юҡ <nowiki><code>$2</code></nowiki>.\n\nУрынлаштырыусы ҡатнашыусының веб-серверын билдәләй алманы.\n<nowiki><code>$3</code></nowiki> яҙма мөмкин булған директория эшләгеҙ һәм дауам итегеҙ.\nUnix/Linux системаһында түбәндәгене башҡарығыҙ:\n\n<pre>cd $2 mkdir $3 chmod a+w $3</pre>",
+       "config-sqlite-mkdir-error": "«$1» мәғлүмәттәре өсөн директорий яһауҙа хата.\nУрынлашыуын тикшерегеҙ һәм тағы ла эшләп ҡарағыҙ.",
+       "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 таблицалары бар.\nУларҙы MediaWiki $1 итеп яңыртыу өсөн '''«Дауам итергә»''' төймәһенә баҫығыҙ.",
+       "config-upgrade-done": "Яңыртыу тамамланды.\n\nХәҙер [$1 викины ҡуллана башларға] мөмкин.\n\nӘгәр ҙә <code>LocalSettings.php</code> файлын яңынан яһарға теләһәгеҙ, аҫтағы төймәгә баҫығыҙ. Ҡуйғанда проблемалар булмаһа, был '''тәҡдим ителмәй'''.",
+       "config-upgrade-done-no-regenerate": "Яңыртыу тамамланды.\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* MediaWiki коды  MyISAM үҙенсәләген иҫәпкә алмай.\n\nҺеҙҙең MySQL InnoDB менән яраҡлы эшләһә ошо механизмды һайларға тәҡдим итебеҙ.\n\nҺеҙҙең MySQL InnoDB менән яраҡһыҙ эшләһә  механизмды яңыртырға тәҡдим итебеҙ.",
+       "config-mysql-only-myisam-dep": "<strong>Иҫкәртеү:</strong> MyISAM — был компьютерҙә MySQL өсөн берҙән-бер асыҡ мәғлүмәттәр һаҡлау системаһы, һәм  MediaWiki менән берлектә ҡулланырға рөхсәт ителмәй,сөнки:\n* таблицаларҙы блокировкалау һөҙөмтәһендә параллелизмды көсһөҙ тота;\n* башҡа системаларға ҡарағанда, ватылыуға күберәк дусар ителгән;\n* MediaWiki код базаһы MyISAM -ды ғәҙәттәгесә эшкәртеп бөтә алмай\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Был MySQL-дың''UTF-8 режим''ына ҡарағанда һөҙөмтәлерәк һәм Unicode символдарының тулы тупланмаһын ҡулланыу мөмкинлеген бирә. \n\n'''UTF-8 режимы'''нда MySQL мәғлүмәттәрегеҙҙең ниндәй кодировкала ятҡанын беләсәк һәм уларҙы тейешенсә сағылдырасаҡ, үҙгәртәсәк, әммә был символдарҙы юғарыраҡ [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes База күптеллелек киңлегендә] һаәлау мөмкинлеген бирәсәк.",
+       "config-mssql-auth": "Аутентификация төрө :",
+       "config-mssql-install-auth": "Ҡуйыу процесында мәғлүмәт базаһына инеү өсөн файҙаланылған төп нөсхәне тикшереү тибын һайлағыҙ. \n\nӘгәр «{{int:config-mssql-windowsauth}}» һайлаһығыҙ, ҡулланыусының веб-сервер эшләгән иҫәп яҙмаһы файҙаланыласаҡ.",
+       "config-mssql-web-auth": "Викиҙың ғәҙәттәге эше ваҡытында мәғлүмәттәр базаһы серверына инеү өсөн веб-сервер файҙаланған  төп нөсхәне тикшереү тибын һайлағыҙ. \n\nӘгәр «{{int:config-mssql-windowsauth}}» һайлаһығыҙ, ҡулланыусының веб-сервер эшләгән иҫәп яҙмаһы файҙаланыласаҡ.",
+       "config-mssql-sqlauth": "SQL Server ысынлығын тикшереү",
+       "config-mssql-windowsauth": "Windows нөсхәһен тикшереү",
+       "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>» исеме рөхсәт ителмәй. Уның икенсе исемен яҙығыҙ.",
+       "config-admin-password-blank": "Администраторҙың иҫәп яҙмаһы өсөн серһүҙҙе яҙығыҙ",
+       "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Әгәр хәбәр алғығыҙ килһә, электрон адресығыҙҙы күрһәтегеҙ. \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": "Ләкин,  MediaWiki  шыуҙырмаһын икенсе ысул менән файҙаланырға мөмкин, һәм асыҡ вики-эштең өҫтөн икәненә барыһын да ышандырып бөтөп булмай.\nҺеҙҙең һайлап алырға мөмкинселек бар.\nСайтта теркәлеү үтмәйенсә лә, модель '''«{{int:config-profile-wiki}}»''' һәр кемгә биттәрҙә үҙгәртеү эшләргә мөмкинселек бирә. Конфигурация '''{{int:config-profile-no-anon}}''' өҫтәлмә хисап тәьмин итә,  ләкин осраҡлы ҡатнашыусыларҙы ябыуы ихтимал.\nСценарий '''«{{int:config-profile-fishbowl}}»''' аныҡланған ҡатнашыусыларға мөхәррирләүҙе рөхсәт итә, ләкин һәр кем алырлыҡ битте ҡарау ҡала, шул иҫәптән үҙгәртеҙәр тарихын ҡарау. '''«{{int:config-profile-private}}»''' режимында биттәрҙе ҡарарға айырым ҡулланыусыларға ғына рөхсәт ителә, ҡайһы бер өлөштәренең мөхәррирләү хоҡуҡтары булыуы мөмкин. \n[//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights Ярашлы ҡулланма] урынлаштырғас,  хоҡуҡтарҙы сикләүсе ҡатмарлыраҡ схемаларҙы көйләргә була.",
+       "config-license": "Автор хоҡуҡтары һәм лицензиялар:",
+       "config-license-none": "Лицензияны аҫта яҙмағыҙ",
+       "config-license-cc-by-sa": "Creative Commons Attribution Share Alike",
+       "config-license-cc-by": "Ижади лицензия, атрибутикалар",
+       "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<strong>{{int:config-license-cc-by-sa}}</strong> һайлағыҙ.\nВикипедия элек  GNU Free Documentation License лицензияһын файҙалана ине.\nGFDL файҙаланыла ала, әммә ул аңлау өсөн ҡатмарлы һәм материалдарҙы ҡабатлап ҡулланыуҙы ауырлаштыра.",
+       "config-email-settings": "Электрон почта көйләүҙәре",
+       "config-enable-email": "e-mail сығыусы почтаны рәхсәт итергә",
+       "config-enable-email-help": "Электрон почта эшләһен өсөн [http://www.php.net/manual/ru/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Был опцияны почтаны урынһыҙ ҡулланыуҙарҙы булдырмаҫ өсөн ҡулланырға \"тәҡдим\" ителә.",
+       "config-email-sender": "Электрон почта адресығыҙ",
+       "config-email-sender-help": "Баһалама алыу өсөн электрон почта адресын яҙығыҙ. Унда кире ҡағылған баһаламалар ебәреләсәк.Почта серверы домен исемен дөрөҫ яҙыуҙы талап ите.",
+       "config-upload-settings": "Рәсем-һүрәттәрҙе һәм файлдарҙы тултырыу",
+       "config-upload-enable": "Файл тултырырға рөхсәт биреү",
+       "config-upload-help": "Файлды тейәргә рөхсәт итеү серверҙың хәүефһеҙлегенә янай. Өҫтәмә мәғлүмәт алыу өсөн Ҡулланманың [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security хәүефһеҙлек бүлеген] уҡығыҙ.",
+       "config-upload-deleted": "Юйылған файлдарға директория",
+       "config-upload-deleted-help": "Юйылған файлдар архивы һаҡланасаҡ  каталогты һайлағыҙ.\nИң шәп осраҡта, интернет селтәренән был каталогҡа инеү рөхсәте булырға тейеш түгел.",
+       "config-logo": "Логотип URL-ы :",
+       "config-logo-help": "MediaWiki стантарт биҙәү темаһының ситтәге панелендә 135x160 пикселдән торған логотип урынлаштырыла. Шул ҙурлыҡтағы рәсемде тейәгеҙ, һәм  URL адресын яҙығыҙ.\nЛогитип сағыштырмаса ошо юлдарҙа ятһа, <code>$wgStylePath</code> йәки <code>$wgScriptPath</code> кодын файҙалана алаһығыҙ.\nӘгәр логотип кәрәк булмаһа, был урында буш ҡалдырығыҙ.",
+       "config-instantcommons": "Instant Commons-ты тоҡандырырға",
+       "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] — Викимилектәге рәсем, тауыш һәм башҡа медиафайлдарҙы файҙаланыу функцияһы  ([//commons.wikimedia.org/ Wikimedia Commons]).\n MediaWiki функцияһы менән эшләү өсөн интернетҡа инеү мөмкинлеге кәрәк.\n\nInstant Commons тураһында өҫтәмә мәғлүмәтте, һәм башҡа көйләүҙәрҙе [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos Ҡулланмала] табырға була.",
+       "config-cc-error": "Creative Commons лицензияһын һайлау механизмы нәтижә бирмәне.\nЛицензия исемен ҡулдан яҙығыҙ.",
+       "config-cc-again": "Ҡабаттан һайлағыҙ",
+       "config-cc-not-chosen": "Creative Commons лицензияһының ҡулланырға теләгәнен һайлағыҙ һәм \"proceed\" төймәһенә баҫыҡыҙ.",
+       "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-адрестар исемлеге.\nҺәр юлға бер генә адрес яҙып һанап сығығыҙ. \nМәҫәлән:\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": "Расширения MediaWiki, перечисленные выше, были найдены в каталоге <code>./extensions</code>.\n\nОни могут потребовать дополнительные настройки, но их можно включить прямо сейчас",
+       "config-skins": "Биҙәлеш темалары",
+       "config-skins-help": "Өҫтә һаналған биҙәү темалары һеҙҙең <code>./skins</code> каталогында табылды. Һеҙгә уларҙың берәүһен булһа ла эшләтергә һәм өндәшмәү буйынса ҡулланыласағын һайларға кәрәк.",
+       "config-skins-use-as-default": "Махсус әйтмәгәндә был биҙәлеү темаһын ҡулланырға",
+       "config-skins-missing": "Биҙәү темалары табылманы. Һеҙ яраҡлыһын ҡуйғансы, MediaWiki резерв теманы ҡулланасаҡ.",
+       "config-skins-must-enable-some": "Һеҙ иң кәмендә бер биҙәлеү темаһын эш өҫтөндә ҡалдырырға тейеш",
+       "config-skins-must-enable-default": "\n\nҺүҙһеҙ һайланған биҙәлеш темаһы теркәлергә тейеш.",
+       "config-install-alreadydone": "'''Иҫкәртеү:''' Һеҙ MediaWiki ҡуйҙығыҙ шикелле, әле быны икенсегә эшләйһегеҙ. Алдағы биткә күсегеҙ.",
+       "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": "Таблица эшләп булманы. Ҡулланыусы «$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": "Веб-ҡулланыусының күрһәтелгән иҫәп яҙмаһы инде бар. Һеҙ ҡуйыу өсөн һайлаған иҫәп яҙмаһы супер ҡулланыусы яҙмаһы түгел һәм веб-ҡулланыусы роленә инмәй; шуға ла веб-ҡулланыусыныҡы булған объекттар төҙөп булмай\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 таблицаларының булыуы ихтимал. Икенсегә яһауҙы булдырмау.",
+       "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|1=}} ҡарағыҙ.",
+       "config-install-updates": "Кәрәкмәген яңыртыуҙар туҡтатылды",
+       "config-install-updates-failed": "<strong>Хата:</strong> Яңыртыуға асҡыс ҡуйыу түбәндәге хата менән тамамланды: $1",
+       "config-install-sysop": "Администратор иҫәп яҙмаһын булдырыу",
+       "config-install-subscribe-fail": "mediawiki-announce яҙылып булманы: $1",
+       "config-install-subscribe-notpossible": "cURL урынлаштырылмаған һәм опция асылмай<code>allow_url_fopen</code>.",
+       "config-install-mainpage": "Килешеү буйынса эстәлекле баш битте эшләү",
+       "config-install-extension-tables": "Ҡушымталар өсөн таблица эшләү",
+       "config-install-mainpage-failed": "Баш битте ҡуйып булмай:$1",
+       "config-install-done": "<strong>Ҡотлайбыҙ!</strong>\nMediaWiki уңышлы урынлаштырылды.\n\nФайл булдырылды <code>LocalSettings.php</code>.\nБыл файлда һеҙҙеү бөтә көәләүҙәр бар.\n\n\nАвтоматик тейәү башланмаһа йәки үҙегеҙ өҙһәгеҙ түбәндәге һылтанма буйынса тейәргә була:\n\n$3\n\n<strong>Иҫкәртмә</strong>: Файлда тейәмәйенсә сыҡһағыҙ киләсәктә бына эшләй алмайһығыҙ.\n\n\nӨҫтә яҙылғандарҙы эшләгәс<strong>[$2 беҙҙеү викиҙа инегеҙ]</strong>.",
+       "config-download-localsettings": "<code>LocalSettings.php</code> тейәргә",
        "config-help": "белешмә",
+       "config-help-tooltip": "асыр өсөн сиртегеҙ",
+       "config-nofile": "\"$1\" файлын табып булмай, ул юйылған.",
+       "config-extension-link": "Беҙҙең вики-проектта [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions ҡушымта] барлығын беләһегеҙме??\n\n[//www.mediawiki.org/wiki/Special:MyLanguage/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/Special:MyLanguage/Manual:Configuration_settings Көйләүҙәр исемлеге (инг.)];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki тураһында йыш бирелгән һорауҙар һәм яуаптар (инг.)];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-ның яңы версиялары тураһында хәбәрҙәр алып тороу].\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
 }
index 3772dbf..b68e244 100644 (file)
        "config-no-db": "Немагчыма знайсьці адпаведны драйвэр базы зьвестак. Вам неабходна ўсталяваць драйвэр базы зьвестак для PHP.\n{{PLURAL:$2|Падтрымліваецца наступны тып базы|Падтрымліваюцца наступныя тыпы базаў}} зьвестак: $1.\n\nКалі вы скампілявалі PHP самастойна, зьмяніце канфігурацыю, каб уключыць кліента базы зьвестак, напрыклад, з дапамогай <code>./configure --with-mysqli</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-error": "<strong>Памылка: парамэтар PHP <code>[http://php.net/register_globals register_globals]</code> уключаны.\nЁн павінен быць адключаны, каб працягнуць усталяваньне.</strong>\nГлядзіце [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] дзеля дапамогі, як зрабіць гэта.",
-       "config-magic-quotes-gpc": "<strong>Непапраўная памылка: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] актываваны!</strong>\nГэтая функцыя псуе ўвод зьвестак непрадказальным чынам.\nВы ня можаце ўсталяваць або выкарыстоўваць MediaWiki, пакуль гэтая функцыя ня будзе адключаная.",
-       "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-safe-mode": "'''Папярэджаньне:''' [http://www.php.net/features.safe-mode бясьпечны рэжым] PHP уключаны.\nГэта можа выклікаць праблемы, галоўным чынам падчас загрузак файлаў і ў падтрымцы <code>math</code>.",
        "config-xml-bad": "Ня знойдзены модуль XML для PHP.\nMediaWiki патрэбныя функцыі з гэтага модулю, таму MediaWiki ня будзе працаваць у гэтай канфігурацыі.\nМагчыма, вам трэба ўсталяваць RPM-пакет php-xml.",
        "config-pcre-old": "<strong>Крытычная памылка:</strong> патрэбны PCRE вэрсіі $1 або пазьнейшай.\nPHP-файл, які выконваецца, зьвязаны з PCRE вэрсіі $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Больш інфармацыі].",
        "config-pcre-no-utf8": "'''Фатальная памылка''': модуль PCRE для PHP скампіляваны без падтрымкі PCRE_UTF8.\nMediaWiki патрабуе падтрымкі UTF-8 для слушнай працы.",
@@ -76,7 +71,6 @@
        "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-no-cache-apcu": "<strong>Папярэджаньне:</strong> ня знойдзеныя [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] ці [http://www.iis.net/download/WinCacheForPhp WinCache]. Кэшаваньне аб’ектаў адключанае.",
        "config-mod-security": "'''Папярэджаньне''': на Вашым ўэб-сэрверы ўключаны [http://modsecurity.org/ mod_security]. У выпадку няслушнай наладцы, ён можа стаць прычынай праблемаў для MediaWiki ці іншага праграмнага забесьпячэньня, якое дазваляе ўдзельнікам дасылаць на сэрвэр любы зьмест.\nГлядзіце [http://modsecurity.org/documentation/ дакумэнтацыю mod_security] ці зьвярніцеся ў падтрымку Вашага хосту, калі ў Вас узьнікаюць выпадковыя праблемы.",
        "config-diff3-bad": "GNU diff3 ня знойдзены.",
        "config-ns-site-name": "Такая ж, як і назва вікі: $1",
        "config-ns-other": "Іншая (вызначце)",
        "config-ns-other-default": "MyWiki",
-       "config-project-namespace-help": "Ð\9fа Ð¿Ñ\80Ñ\8bкладÑ\83 Ð\92Ñ\96кÑ\96пÑ\8dдÑ\8bÑ\96, Ñ\88маÑ\82лÑ\96кÑ\96Ñ\8f Ð²Ñ\96кÑ\96 Ñ\82Ñ\80Ñ\8bмаÑ\8eÑ\86Ñ\8c Ñ\83лаÑ\81нÑ\8bÑ\8f Ñ\81Ñ\82аÑ\80онкÑ\96 Ð· Ð¿Ñ\80авÑ\96ламÑ\96 Ð°Ñ\81обна Ð°Ð´ Ñ\81Ñ\82аÑ\80онак Ñ\81а Ð·Ñ\8cмеÑ\81Ñ\82ам, Ñ\83 Â«'''пÑ\80аÑ\81Ñ\82оÑ\80Ñ\8b Ð½Ð°Ð·Ð²Ð°Ñ\9e Ð¿Ñ\80аекÑ\82Ñ\83'''».\nУÑ\81е Ð½Ð°Ð·Ð²Ñ\8b Ñ\81Ñ\82аÑ\80онак Ñ\83 Ð³Ñ\8dÑ\82ай Ð¿Ñ\80аÑ\81Ñ\82оÑ\80Ñ\8b Ð½Ð°Ð·Ð²Ð°Ñ\9e Ð¿Ð°Ñ\87Ñ\8bнаÑ\8eÑ\86Ñ\86а Ð· Ð¿Ñ\80Ñ\8bÑ\81Ñ\82аÑ\9eкÑ\96, Ñ\8fкÑ\83Ñ\8e Ð\92Ñ\8b Ð¼Ð¾Ð¶Ð°Ñ\86е Ð¿Ð°Ð·Ð½Ð°Ñ\87Ñ\8bÑ\86Ñ\8c Ñ\82Ñ\83Ñ\82.\nТÑ\80адÑ\8bÑ\86Ñ\8bйна, Ð³Ñ\8dÑ\82аÑ\8f Ð¿Ñ\80Ñ\8bÑ\81Ñ\82аÑ\9eка вытворная ад назвы вікі, яле яна ня можа ўтрымліваць некаторыя сымбалі, такія як «#» ці «:».",
+       "config-project-namespace-help": "Ð\9dа Ñ\9eзоÑ\80 Ð\92Ñ\96кÑ\96пÑ\8dдÑ\8bÑ\96, Ñ\88маÑ\82лÑ\96кÑ\96Ñ\8f Ð²Ñ\96кÑ\96 Ñ\82Ñ\80Ñ\8bмаÑ\8eÑ\86Ñ\8c Ñ\83лаÑ\81нÑ\8bÑ\8f Ñ\81Ñ\82аÑ\80онкÑ\96 Ð· Ð¿Ñ\80авÑ\96ламÑ\96 Ð°Ñ\81обна Ð°Ð´ Ñ\81Ñ\82аÑ\80онак Ñ\81а Ð·Ñ\8cмеÑ\81Ñ\82ам, Ñ\83 Â«'''пÑ\80аÑ\81Ñ\82оÑ\80Ñ\8b Ð½Ð°Ð·Ð²Ð°Ñ\9e Ð¿Ñ\80аекÑ\82Ñ\83'''».\nУÑ\81е Ð½Ð°Ð·Ð²Ñ\8b Ñ\81Ñ\82аÑ\80онак Ñ\83 Ð³Ñ\8dÑ\82ай Ð¿Ñ\80аÑ\81Ñ\82оÑ\80Ñ\8b Ð½Ð°Ð·Ð²Ð°Ñ\9e Ð¿Ð°Ñ\87Ñ\8bнаÑ\8eÑ\86Ñ\86а Ð· Ð¿Ñ\80Ñ\8bÑ\81Ñ\82аÑ\9eкÑ\96, Ñ\8fкÑ\83Ñ\8e Ð\92Ñ\8b Ð¼Ð¾Ð¶Ð°Ñ\86е Ð¿Ð°Ð·Ð½Ð°Ñ\87Ñ\8bÑ\86Ñ\8c Ñ\82Ñ\83Ñ\82.\nÐ\97вÑ\8bÑ\87айна Ð³Ñ\8dÑ\82аÑ\8f Ð¿Ñ\80Ñ\8bÑ\81Ñ\82аÑ\9eка â\80\94 вытворная ад назвы вікі, яле яна ня можа ўтрымліваць некаторыя сымбалі, такія як «#» ці «:».",
        "config-ns-invalid": "Пададзеная няслушная прастора назваў «<nowiki>$1</nowiki>».\nПадайце іншую прастору назваў праекту.",
        "config-ns-conflict": "Пазначаная прастора назваў «<nowiki>$1</nowiki>» канфліктуе з прасторай назваў MediaWiki па змоўчваньні.\nПазначце іншую прастору назваў праекту.",
        "config-admin-box": "Рахунак адміністратара",
index b3ab3bf..c9e96ed 100644 (file)
        "config-install-tables": "টেবিল তৈরি",
        "config-install-keys": "গোপন কি তৈরি",
        "config-help": "সাহায্য",
-       "mainpagetext": "'''মিডিয়াউইকি সফলভাবে ইন্সটল করা হয়েছে।'''",
+       "mainpagetext": "<strong>মিডিয়াউইকি ইনস্টল করা হয়েছে।</strong>",
        "mainpagedocfooter": "কীভাবে উইকি সফটওয়্যারটি ব্যবহারকার করবেন, তা জানতে [//meta.wikimedia.org/wiki/Help:Contents ব্যবহারকারী সহায়িকা] দেখুন।\n\n== কোথা থেকে শুরু করবেন ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings কনফিগারেশন সেটিংস তালিকা]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ প্রশ্নোত্তরে মিডিয়াউইকি]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce মিডিয়াউইকি মুক্তির মেইলিং লিস্ট]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources আপনার ভাষার জন্য মিডিয়াউইকি স্থানীয়করণ করুন]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam আপনার উইকিতে স্প্যামের সাথে লড়াই করার উপায় সম্পর্কে জানুন]"
 }
index 757e2e2..daaf663 100644 (file)
@@ -46,7 +46,7 @@
        "config-mssql-auth": "Аутентификацин тайп:",
        "config-site-name": "Викин цӀе:",
        "config-site-name-blank": "Язъе сайтан цӀе.",
-       "config-project-namespace": "ЦÓ\80еÑ\80ийн Ð°Ð½Ð° Ð¿Ñ\80оекÑ\82ан:",
+       "config-project-namespace": "Ð\9fÑ\80оекÑ\82ан Ñ\86Ó\80еÑ\80ийн Ð¼ÐµÑ\82Ñ\82иг:",
        "config-ns-generic": "Проект",
        "config-ns-other-default": "MyWiki",
        "config-admin-password": "Пароль:",
index 6265a84..ddbaa19 100644 (file)
@@ -7,7 +7,8 @@
                        "아라",
                        "Matěj Grabovský",
                        "Paxt",
-                       "Matěj Suchánek"
+                       "Matěj Suchánek",
+                       "LordMsz"
                ]
        },
        "config-desc": "Instalační program pro MediaWiki",
@@ -71,7 +72,6 @@
        "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-no-cache-apcu": "<strong>Upozornění:</strong> Nebylo nalezeno [http://www.php.net/apcu APCu], [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-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-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-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-install-done": "<strong>Gratulujeme!</strong>\nNainstalovali jste 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<strong>Poznámka</strong>: 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 <strong>[$2 vstoupit do své wiki]</strong>.",
        "config-download-localsettings": "Stáhnout <code>LocalSettings.php</code>",
        "config-help": "nápověda",
        "config-help-tooltip": "rozbalíte kliknutím",
        "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/Special:MyLanguage/Manual:Extensions rozšíření]?\n\nMůžete si prohlédnout [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category seznam rozšíření po kategoriích].",
-       "mainpagetext": "'''MediaWiki byla úspěšně nainstalována.'''",
+       "mainpagetext": "<strong>MediaWiki byla úspěšně nainstalována.</strong>",
        "mainpagedocfooter": "[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak používat MediaWiki.\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/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/Special:MyLanguage/Localisation#Translation_resources Překlad MediaWiki do vašeho jazyka]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Naučte se bojovat se spamem na vaší wiki]"
 }
index 29fe870..2516a16 100644 (file)
        "config-no-db": "Es konnte kein adäquater Datenbanktreiber gefunden werden. Es muss daher ein Datenbanktreiber für PHP installiert werden.\n{{PLURAL:$2|Das folgende Datenbanksystem wird|Die folgenden Datenbanksysteme werden}} unterstützt: $1\n\nWenn du PHP selbst kompiliert hast, konfiguriere es erneut mit einem aktivierten Datenbankclient, zum Beispiel durch Verwendung von <code>./configure --with-mysqli</code>.\nWenn du PHP von einem Debian- oder Ubuntu-Paket installiert hast, dann musst du auch beispielsweise das <code>php5-mysql</code>-Paket installieren.",
        "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, sodass keine Suchfunktionen für dieses Datenbanksystem zur Verfügung stehen werden.",
-       "config-register-globals-error": "<strong>Fehler: Die PHP-Option <code>[http://php.net/register_globals register_globals]</code> ist aktiviert.\nSie muss deaktiviert sein, um mit der Installation fortzufahren.</strong>\nSiehe [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] für Hilfe.",
-       "config-magic-quotes-gpc": "<strong>Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] ist aktiv!</strong>\nDiese Option beschädigt eingegebene Daten unvorhersehbar.\nDu kannst MediaWiki nicht installieren oder verwenden, bis diese Option deaktiviert 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": "<strong>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!</strong>\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-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.\nDu musst vielleicht das „php-xml“-RPM-Paket installieren.",
        "config-pcre-old": "<strong>Fataler Fehler:</strong> PCRE $1 oder neuer ist erforderlich!\nDie vorhandene PHP-Binärdatei ist mit PCRE $2 verknüpft.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Weitere Informationen].",
        "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.",
@@ -84,7 +79,6 @@
        "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-no-cache-apcu": "<strong>Warnung:</strong> [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] oder [http://www.iis.net/download/WinCacheForPhp WinCache] konnten nicht gefunden werden.\nDer Objektcache ist nicht aktiviert.",
        "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-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-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 ein Seitenpräfix, das nun an dieser Stelle angegeben werden kann.\nNormalerweise steht dieses 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-help-tooltip": "Zum Expandieren klicken",
        "config-nofile": "Die Datei „$1“ konnte nicht gefunden werden. Wurde sie gelöscht?",
        "config-extension-link": "Wusstest du, dass dein Wiki die Nutzung von [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions Erweiterungen] unterstützt?\n\nDu kannst [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category Erweiterungen nach Kategorie] durchsuchen.",
-       "mainpagetext": "'''MediaWiki wurde erfolgreich installiert.'''",
+       "mainpagetext": "<strong>MediaWiki wurde installiert.</strong>",
        "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/Special:MyLanguage/Manual:Configuration_settings Liste der Konfigurationsvariablen]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki-FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Lokalisiere MediaWiki für deine Sprache]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Erfahre, wie du Spam auf deinem Wiki bekämpfen kannst]"
 }
index 2cc85ce..a1df4d9 100644 (file)
@@ -37,7 +37,7 @@
        "config-mysql-utf8": "UTF-8",
        "config-site-name": "Namey wiki:",
        "config-site-name-blank": "Yew nameyê sita cıkewe.",
-       "config-project-namespace": "Wareyê nameyê procey:",
+       "config-project-namespace": "Wareyê nameyê proceyi:",
        "config-ns-generic": "Proce",
        "config-ns-other": "Zewbi (keyfiyo)",
        "config-ns-other-default": "MyWiki",
index ea03831..6fa5930 100644 (file)
@@ -63,7 +63,6 @@
        "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-no-cache-apcu": "<strong>Warning:</strong> Could not find [http://www.php.net/apcu APCu], [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]/mod_security2 enabled. Many common configurations of this will cause problems for MediaWiki and other software that allows users to post arbitrary content.\nIf possible, this should be disabled. Otherwise, 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-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-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-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-install-done": "<strong>Congratulations!</strong>\nYou have 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-help-tooltip": "click to expand",
        "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/Special:MyLanguage/Manual:Extensions extensions]?\n\nYou can browse [//www.mediawiki.org/wiki/Special:MyLanguage/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>",
+       "mainpagetext": "<strong>MediaWiki has been 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/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]"
 }
index 0653a72..d70571d 100644 (file)
@@ -6,7 +6,8 @@
                        "KuboF",
                        "Fitoschido",
                        "Ochilov",
-                       "Tlustulimu"
+                       "Tlustulimu",
+                       "Robin van der Vliet"
                ]
        },
        "config-desc": "Instalilo de MediaWiki",
        "config-db-name": "Nomo de datumbazo:",
        "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
        "config-type-mysql": "MySQL (aŭ kongrua)",
+       "config-header-mysql": "MySQL-agordoj",
+       "config-header-postgres": "PostgreSQL-agordoj",
+       "config-header-sqlite": "SQLite-agordoj",
+       "config-header-oracle": "Oracle-agordoj",
+       "config-header-mssql": "Microsoft SQL Server-agordoj",
+       "config-mysql-binary": "Duuma",
        "config-mysql-utf8": "UTF-8",
        "config-site-name": "Nomo de vikio:",
        "config-ns-generic": "Projekto",
index c196cf4..3090edc 100644 (file)
@@ -26,7 +26,8 @@
                        "Macofe",
                        "AVIADOR",
                        "FuzzyDice",
-                       "Legoktm"
+                       "Legoktm",
+                       "Matiia"
                ]
        },
        "config-desc": "El instalador de MediaWiki",
        "config-no-db": "No se encontró un controlador adecuado para la base de datos. Necesitas instalar un controlador de base de datos para PHP.\n{{PLURAL:$2|El siguiente gestor de bases de datos está soportado|Los siguientes gestores de bases de datos están soportados}}: $1.\n\nSi compilaste PHP tú mismo, debes reconfigurarlo habilitando un cliente de base de datos, por ejemplo, usando <code>./configure --with-mysqli</code>.\nSi instalaste PHP desde un paquete Debian o Ubuntu, entonces también necesitas instalar, por ejemplo, el paquete <code>php5-mysql</code>.",
        "config-outdated-sqlite": "<strong>Advertencia:</strong> tienes SQLite $1, que es inferior a la mínima versión requerida: $2. SQLite no estará disponible.",
        "config-no-fts3": "<strong>Advertencia:</strong> 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-error": "<strong>Error: la opción de PHP <code>[http://php.net/register_globals register_globals]</code> está activada.\nDebe estar desactivada para continuar con la instalación.</strong>\nVéase [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] para obtener ayuda sobre cómo hacerlo.",
-       "config-magic-quotes-gpc": "<strong>Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] está activa!</strong>\nEsta opción corrompe la entrada de datos de forma impredecible.\nNo puedes instalar o utilizar MediaWiki a menos que esta opción esté desactivada.",
-       "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-safe-mode": "<strong>Advertencia:</strong> el [http://www.php.net/features.safe-mode modo seguro] de PHP está activado.\nEste modo puede causar problemas, especialmente en la carga de archivos y en compatibilidad con <code>math</code>.",
        "config-xml-bad": "Falta el módulo XML de PHP.\nMediaWiki requiere funciones de este módulo y no funcionará en esta configuración.\nPuede que necesites instalar el el paquete RPM llamado php-xml.",
        "config-pcre-old": "'''Fatal:''' Se requiere PCRE $1 o posterior.\nSu PHP binario está enlazado con PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Más información].",
        "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.",
@@ -95,7 +91,6 @@
        "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": "<strong>Advertencia:</strong> 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á activado.",
        "config-no-cache-apcu": "<strong>Advertencia:</strong> No se pudo encontrar [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache].\nEl caché de objetos no está activado.",
        "config-mod-security": "<strong>Advertencia:</strong> tu servidor web tiene activado [http://modsecurity.org/ mod_security]/mod_security2. Muchas de sus configuraciones comunes pueden causar problemas a MediaWiki u otro software que permita a los usuarios publicar contenido arbitrario. De ser posible, deberías desactivarlo. Si no, consulta la [http://modsecurity.org/documentation/ documentación de mod_security] o contacta con el administrador de tu servidor si encuentras errores aleatorios.",
        "config-diff3-bad": "GNU diff3 no se encuentra.",
        "config-ns-site-name": "Igual al 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-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 puedes especificar aquí.\nUsualmente, este prefijo se deriva del nombre del wiki, pero no puede contener caracteres de puntuación como \"#\" o \":\".",
        "config-ns-invalid": "El espacio de nombres especificado \"<nowiki>$1</nowiki>\" no es válido.\nEspecifica uno diferente.",
        "config-ns-conflict": "El espacio de nombres especificado \"<nowiki>$1</nowiki>\" entra en conflicto con uno predeterminado de MediaWiki.\nEspecifica uno diferente.",
        "config-admin-box": "Cuenta de administrador",
        "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": "<strong>¡Felicidades!</strong>\nHas instalado MediaWiki correctamente.\n\nEl instalador ha generado un  archivo <code>LocalSettings.php</code>.\nEste contiene toda su configuración.\n\nDeberás descargarlo y ponerlo en la base de la instalación de wiki (el mismo directorio que index.php). La descarga debería haber comenzado automáticamente.\n\nSi no comenzó la descarga, o si se ha cancelado, puedes reiniciar la descarga haciendo clic en el siguiente enlace:\n\n$3\n\n<strong>Nota</strong>: Si no haces esto ahora, este archivo de configuración generado no estará disponible más tarde si sales de la instalación sin descargarlo.\n\nCuando lo hayas hecho, podrás <strong>[$2  entrar en tu wiki]</strong>.",
+       "config-install-done": "<strong>¡Felicidades!</strong>\nHas instalado MediaWiki.\n\nEl instalador ha generado un archivo <code>LocalSettings.php</code>.\nEste contiene toda su configuración.\n\nDeberás descargarlo y ponerlo en la base de la instalación de wiki (el mismo directorio que index.php). La descarga debería haber comenzado automáticamente.\n\nSi no comenzó la descarga, o si se ha cancelado, puedes reiniciar la descarga haciendo clic en el siguiente enlace:\n\n$3\n\n<strong>Nota</strong>: si no haces esto ahora, este archivo de configuración generado no estará disponible más tarde si sales de la instalación sin descargarlo.\n\nCuando lo hayas hecho, podrás <strong>[$2  entrar en tu wiki]</strong>.",
        "config-download-localsettings": "Descargar <code>LocalSettings.php</code>",
        "config-help": "ayuda",
        "config-help-tooltip": "haz clic para ampliar",
        "config-nofile": "El archivo \"$1\" no se pudo encontrar. ¿Se ha eliminado?",
        "config-extension-link": "¿Sabías que tu wiki admite [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensiones]?\n\nPuedes navegar por las [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category categorías] o visitar el [//www.mediawiki.org/wiki/Extension_Matrix centro de extensiones] para ver una lista completa.",
-       "mainpagetext": "<strong>MediaWiki se ha instalado con éxito.</strong>",
+       "mainpagetext": "<strong>MediaWiki se ha instalado.</strong>",
        "mainpagedocfooter": "Consulta la [//meta.wikimedia.org/wiki/Help:Contents/es guía del usuario] para obtener información sobre el uso del software wiki.\n\n== Primeros pasos ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista de ajustes de configuración]\n* [//www.mediawiki.org/wiki/Manual:FAQ/es Preguntas frecuentes sobre MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo de anuncios de publicación de MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Traducir MediaWiki en tu idioma]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Aprende cómo combatir el spam en tu wiki]"
 }
index 223955d..a083210 100644 (file)
@@ -17,7 +17,8 @@
                        "SMAUG",
                        "SuperPete",
                        "McSalama",
-                       "Jaakkoh"
+                       "Jaakkoh",
+                       "Mikahama"
                ]
        },
        "config-desc": "MediaWiki-asennin",
        "config-type-sqlite": "SQLite",
        "config-type-oracle": "Oracle",
        "config-type-mssql": "Microsoft SQL Server",
+       "config-support-info": "MediaWiki tukee seuraavia tietokantajärjestelmiä:\n\n$1\n\nJos et näe tietokantajärjestelmää, jota yrität käyttää, listattuna alhaalla, seuraa yläpuolella olevia ohjeita tuen aktivoimiseksi.",
+       "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] on MediaWikin ensisijainen kohde ja se on myös parhaiten tuettu. MediaWiki voi myös käyttää [{{int:version-db-mariadb-url}} MariaDB]- sekä [{{int:version-db-percona-url}} Percona Server]-järjestelmiä, jotka ovat MySQL-yhteensopivia. ([http://www.php.net/manual/en/mysqli.installation.php Miten käännetään PHP MySQL-tuella])",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] on suosittu avoimen lähdekoodin tietokantajärjestelmä vaihtoehtona MySQL:lle. Tuessa saattaa olla pieniä puutteita, eikä sitä suositella käytettäväksi tuotantoympäristössä. ([http://www.php.net/manual/en/pgsql.installation.php Kuinka käännetään PHP PostgreSQL-tuella])",
+       "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] on kevyt tietokantajärjestelmä, jota tuetaan hyvin. ([http://www.php.net/manual/en/pdo.installation.php Miten käännetään PHP SQLite-tuella], käyttää PDO:ta)",
+       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] on kaupallinen yritystietokanta. ([http://www.php.net/manual/en/oci8.installation.php Kuinka käännetään PHP OCI8-tuella])",
+       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] on kaupallinen yritystietokanta Windowsille. ([http://www.php.net/manual/en/sqlsrv.installation.php Miten käännetään PHP SQLSRV-tuella])",
        "config-header-mysql": "MySQL-asetukset",
        "config-header-postgres": "PostgreSQL-asetukset",
        "config-header-sqlite": "SQLite-asetukset",
        "config-missing-db-name": "\"{{int:config-db-name}}\" on pakollinen.",
        "config-missing-db-host": "\"{{int:config-db-host}}\" on pakollinen.",
        "config-missing-db-server-oracle": "\"{{int:config-db-host-oracle}}\" on pakollinen.",
+       "config-invalid-db-server-oracle": "Virheellinen tietokanta TNS \"$1\".\nKäytä joko \"TNS Name\"- tai \"Easy Connect\" -tekstiä\n([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle metodien nimeäminen]).",
        "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-connection-error": "$1.\n\nTarkista isäntä, käyttäjänimi, salasana ja yritä uudestaan.",
+       "config-invalid-schema": "Virheellinen skeema MediaWikille \"$1\".\nKäytä pelkkiä ASCII-kirjaimia (a-z, A-Z), numeroita (0-9) ja alaviivoja (_).",
+       "config-db-sys-create-oracle": "Asennusohjelma tukee ainoastaan SYSDBA-tunnuksen käyttämistä uuden tunnuksen luonnissa.",
        "config-postgres-old": "MediaWiki tarvitsee PostgreSQL:n version $1 tai uudemman. Nykyinen versio on $2.",
        "config-mssql-old": "Vaaditaan Microsoft SQL Server $1 tai uudempi. Sinulla on käytössä $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ä.",
index f6329e8..aa2f31e 100644 (file)
                        "Wladek92",
                        "Scoopfinder",
                        "Seb35",
-                       "Linedwell"
+                       "Linedwell",
+                       "Orlodrim",
+                       "Cl3m3n7",
+                       "C13m3n7",
+                       "The RedBurn"
                ]
        },
        "config-desc": "Le programme d’installation de MediaWiki",
        "config-no-db": "Impossible de trouver un pilote de base de données approprié ! Vous devez installer un pilote de base de données pour PHP. {{PLURAL:$2|Le type suivant|Les types suivants}} de bases de données {{PLURAL:$2|est reconnu|sont reconnus}} : $1.\n\nSi vous avez compilé PHP vous-même, reconfigurez-le avec un client de base de données actif, par exemple en utilisant <code>./configure --with-mysqli</code>. Si vous avez installé PHP depuis un paquet Debian ou Ubuntu, alors vous devrez aussi installer, par exemple, le paquet <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-error": "<strong>Erreur : L’option <code>[http://php.net/register_globals register_globals]</code> de PHP est activée.\nElle doit être désactivée pour poursuivre l’installation.</strong>\nVoyez [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] pour avoir de l’aide sur la manière de faire cela.",
-       "config-magic-quotes-gpc": "<strong>Ereur critique : [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] est actif !</strong>\nCette option corrompt les entrées de donnée de façon imprévisible.\nVous ne pouvez pas installer ou utiliser MédiaWiki tant que cette option n’est pas désactivée.",
-       "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-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.\nVous pourrez avoir besoin d’installer le paquet RPM php-xml.",
        "config-pcre-old": "'''Fatal :''' PCRE $1 ou ultérieur est nécessaire.\nVotre binaire PHP est lié avec PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/Plus d’information sur PCRE].",
        "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.",
@@ -91,7 +90,6 @@
        "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-no-cache-apcu": "'''Attention :''' Impossible de trouver [http://www.php.net/apcu APCu], [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-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 de niveau projet'' 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, et ne peut contenir de caractères de ponctuation tels que « # » ou « : ».",
+       "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 de niveau projet''' 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, et ne peut contenir de 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 différent 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 pour le projet.",
        "config-admin-box": "Compte administrateur",
        "config-skins-must-enable-default": "L’habillage choisi par défaut doit être activé.",
        "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 encore apporter des modifications, appuyez sur \"{{int:config-back}}\".",
-       "config-install-step-done": "fait",
+       "config-install-step-done": "terminé",
        "config-install-step-failed": "échec",
        "config-install-extensions": "Inclusion des extensions",
        "config-install-database": "Création de la base de données",
        "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é un fichier <code>LocalSettings.php</code>. Il contient tous les paramètres de votre configuration.\n\nVous devrez le télécharger et le mettre à la racine de votre installation wiki (dans le même répertoire que index.php). Le téléchargement démarre automatiquement.\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-install-done": "<strong>Félicitations!</strong>\nVous avez installé MediaWiki.\n\nLe programme d'installation a généré un fichier <code>LocalSettings.php</code>. Il contient tous les paramètres de votre configuration.\n\nVous devrez le télécharger et le mettre à la racine de votre installation wiki (dans le même répertoire que index.php). Le téléchargement devrait démarrer automatiquement.\n\nSi le téléchargement n'a pas été proposé, ou que vous l'avez annulé, vous pouvez redémarrer le téléchargement en cliquant ce lien :\n\n$3\n\n<strong>Note :</strong> 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 <strong>[$2 accéder à votre wiki]</strong> .",
        "config-download-localsettings": "Télécharger <code>LocalSettings.php</code>",
        "config-help": "aide",
        "config-help-tooltip": "cliquer pour agrandir",
        "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/Special:MyLanguage/Manual:Extensions des extensions] ?\n\nVous pouvez consulter les [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensions par catégorie].",
-       "mainpagetext": "<strong>MediaWiki a été installé avec succès.</strong>",
+       "mainpagetext": "<strong>MediaWiki a été installé.</strong>",
        "mainpagedocfooter": "Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr 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/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]"
 }
index e2d1ba9..7b9abdb 100644 (file)
        "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.\n{{PLURAL:$2|Acéptase o seguinte tipo|Acéptanse os seguintes tipos}} de base de datos: $1.\n\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, por exemplo, o módulo <code>php5-mysql</code>.",
        "config-outdated-sqlite": "<strong>Atención:</strong> Ten o SQLite $1, que é inferior á versión mínima necesaria: $2. O SQLite non estará dispoñible.",
        "config-no-fts3": "<strong>Atención:</strong> 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-error": "<strong>Erro: A opción <code>[http://php.net/register_globals register_globals]</code> do PHP está activada.\nCómpre desactivala para continuar a instalación.</strong>\nConsulte o enderezo [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] para obter axuda sobre como facelo.",
-       "config-magic-quotes-gpc": "<strong>Erro fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] está activado!</strong>\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-runtime": "<strong>Erro fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] está activado!</strong>\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": "<strong>Erro fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] está activado!</strong>\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": "<strong>Erro fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] está activado!</strong>\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-safe-mode": "<strong>Atención:</strong> 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.\nPode que necesite instalar o php-xml no paquete RPM.",
        "config-pcre-old": "<strong>Erro fatal:</strong> Necesítase PCRE $1 ou posterior.\nO seu PHP binario está ligado con PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Máis información].",
        "config-pcre-no-utf8": "<strong>Erro fatal:</strong> Semella que o módulo PCRE do PHP foi compilado sen o soporte PCRE_UTF8.\nMediaWiki necesita soporte UTF-8 para funcionar correctamente.",
@@ -74,7 +69,6 @@
        "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": "<strong>Atención:</strong> 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-no-cache-apcu": "<strong>Advertencia:</strong> Non se puido atopar [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] ou [http://www.iis.net/download/WinCacheForPhp WinCache].\nA caché de obxectos non está activada.",
        "config-mod-security": "<strong>Atención:</strong> 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-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í.\nNormalmente, este prefixo deriva do nome do wiki, pero non pode conter caracteres de puntuación como \"#\" ou \":\".",
+       "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í.\nNormalmente, 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-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": "<strong>Parabéns!</strong>\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<strong>Nota:</strong> 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á <strong>[$2 entrar no seu wiki]</strong>.",
+       "config-install-done": "<strong>Parabéns!</strong>\nInstalou 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<strong>Nota:</strong> 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á <strong>[$2 entrar no seu wiki]</strong>.",
        "config-download-localsettings": "Descargar o <code>LocalSettings.php</code>",
        "config-help": "axuda",
        "config-help-tooltip": "prema para expandir",
        "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/Special:MyLanguage/Manual:Extensions extensións]?\n\nPode explorar as [//www.mediawiki.org/wiki/Special:MyLanguage/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": "<strong>MediaWiki instalouse correctamente.</strong>",
+       "mainpagetext": "<strong>Instalouse MediaWiki.</strong>",
        "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/Special:MyLanguage/Manual:Configuration_settings Lista das opcións de configuración]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/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/Special:MyLanguage/Localisation#Translation_resources Localice MediaWiki á súa lingua]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Aprenda como combater a publicidade na súa wiki]"
 }
index 0ff33c1..5e15c8d 100644 (file)
        "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 {{PLURAL:$2|typo|typos}} de base de datos es supportate: $1.\n\nSi tu compilava PHP tu mesme, reconfigura lo con un cliente de base de datos activate, per exemplo, usante <code>./configure --with-mysqli</code>.\nSi tu installava PHP ex un pacchetto Debian o Ubuntu, tu debe etiam installar, per exemplo, le modulo <code>php5-mysql</code>.",
        "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-error": "<strong>Error: Le option <code>[http://php.net/register_globals register_globals]</code> de PHP es active.\nIllo debe esser disactivate pro continuar le installation.</strong>\nVide [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] pro obtener adjuta sur como facer lo.",
-       "config-magic-quotes-gpc": "<strong>Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] es active!</strong>\nIste option corrumpe le datos entrate de maniera imprevisibile.\nTu non pote installar o usar MediaWiki si iste option non es disactivate.",
-       "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-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.\nEs possibile que tu debe installar le pacchetto RPM php-xml.",
        "config-pcre-old": "<strong>Fatal:</strong> PCRE $1 o plus tarde es necessari.\nTu binario de PHP binary es ligate con PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Plus information].",
        "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.",
@@ -72,7 +67,6 @@
        "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-git": "Systema de controlo de version Git trovate: <code>$1</code>",
        "config-help-tooltip": "clicca pro displicar",
        "config-nofile": "Le file \"$1\" non poteva esser trovate. Ha illo essite delite?",
        "config-extension-link": "Sapeva tu que tu wiki supporta [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensiones]?\n\nTu pote explorar le [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensiones per category] o le [//www.mediawiki.org/wiki/Extension_Matrix matrice de extensiones] pro vider le lista complete de extensiones.",
-       "mainpagetext": "'''MediaWiki ha essite installate con successo.'''",
+       "mainpagetext": "<strong>MediaWiki ha essite installate.</strong>",
        "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/Special:MyLanguage/Manual:Configuration_settings Lista de configurationes]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/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/Special:MyLanguage/Localisation#Translation_resources Traducer MediaWiki in tu lingua]"
 }
diff --git a/includes/installer/i18n/inh.json b/includes/installer/i18n/inh.json
new file mode 100644 (file)
index 0000000..abc7fbf
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Умар"
+               ]
+       },
+       "config-help": "гӀо"
+}
index f524b32..e0a7975 100644 (file)
@@ -5,14 +5,20 @@
                        "Sveinn í Felli"
                ]
        },
+       "config-desc": "Uppsetningarforrit fyrir MediaWiki",
+       "config-title": "MediaWiki $1 uppsetning",
        "config-information": "Upplýsingar",
+       "config-localsettings-key": "Uppfærslulykill:",
        "config-your-language": "Tungumálið þitt:",
        "config-your-language-help": "Veldu tungumál að nota við uppsetninguna.",
+       "config-wiki-language": "Tungumál á wiki:",
        "config-back": "← Til baka",
        "config-continue": "Halda áfram →",
        "config-page-language": "Tungumál",
        "config-page-welcome": "Velkomin í MediaWiki!",
        "config-page-dbconnect": "Tengjast gagnagrunni",
+       "config-page-upgrade": "Uppfæra núverandi kerfi",
+       "config-page-dbsettings": "Gagnagrunnsstillingar",
        "config-page-name": "Heiti",
        "config-page-options": "Valkostir",
        "config-page-install": "Setja upp",
        "config-page-releasenotes": "Athugasemdir með útgáfu",
        "config-page-copying": "Afritun",
        "config-page-upgradedoc": "Uppfærsla",
+       "config-page-existingwiki": "Fyrirliggjandi wiki",
+       "config-restart": "Já, endurræsa",
        "config-env-php": "PHP $1 er uppsett.",
        "config-env-hhvm": "HHVM $1 er uppsett.",
+       "config-diff3-bad": "GNU diff3 fannst ekki.",
+       "config-db-type": "Tegund gagnagrunns:",
+       "config-db-host": "Netþjónn gagnagrunns:",
+       "config-db-name": "Heiti gagnagrunns:",
+       "config-db-name-oracle": "Gagnagrunnsskema:",
+       "config-db-username": "Notandanafn á gagnagrunni:",
+       "config-db-password": "Lykilorð gagnagrunns:",
+       "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+       "config-type-mysql": "MySQL (eða samhæft)",
+       "config-type-postgres": "PostgreSQL",
+       "config-type-sqlite": "SQLite",
+       "config-type-oracle": "Oracle",
+       "config-type-mssql": "Microsoft SQL Server",
+       "config-regenerate": "Endurgera LocalSettings.php →",
+       "config-show-table-status": "<code>SHOW TABLE STATUS</code> beiðni mistókst!",
+       "config-db-web-account": "Gagnagrunnsreikningur fyrir vefaðgang",
+       "config-mysql-engine": "Gagnagrunnshýsing:",
+       "config-mysql-innodb": "InnoDB",
+       "config-mysql-myisam": "MyISAM",
+       "config-mysql-charset": "Stafatafla gagnagrunns:",
+       "config-mysql-binary": "Tvíundakerfis",
        "config-mysql-utf8": "UTF-8",
+       "config-mssql-auth": "Tegund auðkenningar:",
+       "config-mssql-sqlauth": "SQL Server auðkenning",
+       "config-mssql-windowsauth": "Windows auðkenning",
        "config-ns-generic": "Verkefni",
        "config-admin-name": "Notandanafnið þitt:",
        "config-admin-password": "Lykilorð:",
        "config-admin-password-confirm": "Lykilorðið aftur:",
        "config-admin-email": "Tölvupóstfang:",
-       "config-license-pd": "Almenningseign",
+       "config-profile": "Snið notandaréttinda:",
+       "config-profile-wiki": "Opið wiki",
+       "config-profile-no-anon": "Stofnun aðgangs krafist",
+       "config-profile-fishbowl": "Aðeins auðkenndir ritstjórar",
+       "config-profile-private": "Einkawiki",
+       "config-license": "Höfundaréttur og notkunarleyfi:",
+       "config-license-none": "Ekki síðufótur með notkunarleyfi",
+       "config-license-cc-by-sa": "Creative Commons: Höfundar getið - Deilist áfram",
+       "config-license-cc-by": "Creative Commons: Höfundar getið",
+       "config-license-cc-by-nc-sa": "Creative Commons: Höfundar getið - Ekki í ágóðaskyni - Deilist áfram",
+       "config-license-cc-0": "Creative Commons Zero leyfi (almenningseign)",
+       "config-license-gfdl": "Frjálsa GNU-handbókarleyfið, útgáfa 1.3 eða nýrri",
+       "config-license-pd": "Almenningseign (Public Domain)",
+       "config-license-cc-choose": "Veldu sérsniðið Creative Commons notkunarleyfi",
+       "config-extensions": "Viðbætur",
+       "config-skins": "Skinn",
        "config-install-step-done": "lokið",
        "config-install-step-failed": "mistókst",
+       "config-install-pg-commit": "Virkja breytingar",
+       "config-install-tables": "Töflur búnar til",
+       "config-download-localsettings": "Ná í <code>LocalSettings.php</code>",
+       "config-help": "hjálp",
+       "config-help-tooltip": "Smella til að þenja út",
        "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/Special:MyLanguage/Manual:Configuration_settings Listi yfir uppsetningarstillingar]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki Algengar spurningar MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Póstlisti MediaWiki-útgáfa]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Læra hvernig á að berjast við amapóst á þínum wiki]"
 }
index e5d982d..79a1f56 100644 (file)
        "config-no-db": "Impossibile trovare un driver adatto per il database! È necessario installare un driver per PHP.\n{{PLURAL:$2|Il seguente formato di database è supportato|I seguenti formati di database sono supportati}}: $1.\n\nSe compili PHP autonomamente, riconfiguralo attivando un client database, per esempio utilizzando <code>./configure --with-mysqli</code>.\nQualora avessi installato PHP per mezzo di un pacchetto Debian o Ubuntu, allora devi installare anche il pacchetto <code>php5-mysql</code>.",
        "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-register-globals-error": "<strong>Errore: l'opzione PHP <code>[http://php.net/register_globals register_globals]</code> è abilitata.\nDeve essere disabilitata per continuare con l'installazione.</strong>\nVedi [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] per un aiuto su come farlo.",
-       "config-magic-quotes-gpc": "<strong>Fatale: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] è attivo!</strong>\nQuesta opzione danneggia i dati di input in modo imprevedibile.\nNon puoi installare o utilizzare MediaWiki, a meno che questa opzione sia disabilitata.",
-       "config-magic-quotes-runtime": "'''Errore: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] è attivato!''' Questa opzione interferisce in modo imprevedibile con l'inserimento dei dati. Non è possibile installare o utilizzare MediaWiki a meno che questa opzione non sia disabilitata.",
-       "config-magic-quotes-sybase": "'''Errore: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] è attivato!''' Questa opzione interferisce in modo imprevedibile con l'inserimento dei dati. Non è possibile installare o utilizzare MediaWiki a meno che questa opzione non sia disabilitata.",
        "config-mbstring": "'''Errore: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] è attivato!''' Questa opzione causa errori e può interferire in modo imprevedibile coi dati. Non è possibile installare o utilizzare MediaWiki a meno che questa opzione non sia disabilitata.",
-       "config-safe-mode": "'''Attenzione:''' [http://www.php.net/features.safe-mode safe mode] è attivato!\nQuesta opzione potrebbe causare problemi, in particolare nel caricamento di documenti e nel supporto delle funzioni <code>math</code>.",
        "config-xml-bad": "Manca il modulo XML di PHP.\nMediaWIki ha bisogno di funzionalità presenti in questo modulo e non funzionerà con la configurazione corrente.\nSe stai eseguendo Mandrake, installa il paccketto php-xml.",
        "config-pcre-old": "<strong>Errore fatale:</strong> si richiede PCRE  $1 o successivo.\nIl tuo file binario PHP è collegato con PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/Maggiori informazioni su PCRE].",
        "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.",
@@ -85,7 +80,6 @@
        "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-no-cache-apcu": "'''Attenzione:''' [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache] non sono stati trovati.\nLa caching degli oggetti non è attivata.",
        "config-mod-security": "<strong>Attenzione:</strong> Il tuo server web ha il [http://modsecurity.org/ mod_security] abilitato. Se non correttamente configurato, può creare problemi a MediaWiki o ad altro software che permette agli utenti di pubblicare contenuto.\nFai riferimento alla [http://modsecurity.org/documentation/ documentazione sul mod_security] o contatta il supporto tecnico del tuo provider di hosting se si verificano errori.",
        "config-diff3-bad": "GNU diff3 non trovato.",
        "config-ns-site-name": "Stesso nome del wiki: $1",
        "config-ns-other": "Altro (specificare)",
        "config-ns-other-default": "MyWiki",
-       "config-project-namespace-help": "Seguendo l'esempio di Wikipedia, molti wiki tengono le loro pagine con le regole separate dalle pagine di contenuto, in un \"'''namespace di progetto'''\".\nTutti i titoli delle pagine in questo namespace iniziano con un certo prefisso, che puoi indicare qui.\nSolitamente, questo prefisso deriva dal nome del wiki, ma non può contenere caratteri di punteggiatura come \"#\" o \":\".",
+       "config-project-namespace-help": "Seguendo l'esempio di Wikipedia, molti wiki tengono le loro pagine con le regole separate dalle pagine di contenuto, in un '''namespace di progetto'''.\nTutti i titoli delle pagine in questo namespace iniziano con un certo prefisso, che puoi indicare qui.\nSolitamente, questo prefisso deriva dal nome del wiki, ma non può contenere caratteri di punteggiatura come \"#\" o \":\".",
        "config-ns-invalid": "Il namespace indicato \"<nowiki>$1</nowiki>\" non è valido.\nSpecificare un diverso namespace di progetto.",
        "config-ns-conflict": "Il namespace indicato \"<nowiki>$1</nowiki>\" è in conflitto con un namespace predefinito MediaWiki.\nSpecificare un diverso namespace di progetto.",
        "config-admin-box": "Account amministratore",
        "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-install-done": "<strong>Complimenti!</strong>\nHai installato correttamente MediaWiki.\n\nIl programma di installazione ha generato un file <code>LocalSettings.php</code> che contiene tutte le impostazioni.\n\nDevi scaricarlo ed inserirlo nella directory base del tuo wiki (la stessa dove è presente index.php). Il download dovrebbe partire automaticamente.\n\nSe il download non si avvia, o se è stato annullato, puoi riavviarlo cliccando sul collegamento di seguito:\n\n$3\n\n<strong>Nota:</strong> se esci ora dall'installazione senza scaricare il file di configurazione che è stato generato, questo poi non sarà più disponibile in seguito.\n\nQuando hai fatto, puoi <strong>[$2 entrare nel tuo wiki]</strong>.",
+       "config-install-done": "<strong>Complimenti!</strong>\nHai installato MediaWiki.\n\nIl programma di installazione ha generato un file <code>LocalSettings.php</code> che contiene tutte le impostazioni.\n\nDevi scaricarlo ed inserirlo nella directory base del tuo wiki (la stessa dove è presente index.php). Il download dovrebbe partire automaticamente.\n\nSe il download non si avvia, o se è stato annullato, puoi riavviarlo cliccando sul collegamento di seguito:\n\n$3\n\n<strong>Nota:</strong> se esci ora dall'installazione senza scaricare il file di configurazione che è stato generato, questo poi non sarà più disponibile in seguito.\n\nQuando hai fatto, puoi <strong>[$2 entrare nel tuo wiki]</strong>.",
        "config-download-localsettings": "Scarica <code>LocalSettings.php</code>",
        "config-help": "aiuto",
        "config-help-tooltip": "fai clic per espandere",
        "config-nofile": "Il file \"$1\" non può essere trovato. È stato eliminato?",
        "config-extension-link": "Sapevi che il tuo wiki supporta le  [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions estensioni]?\n\nPuoi navigare tra le [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category estensioni per categoria].",
-       "mainpagetext": "'''Installazione di MediaWiki completata correttamente.'''",
+       "mainpagetext": "<strong>MediaWiki è stato installato.</strong>",
        "mainpagedocfooter": "Consulta la [//meta.wikimedia.org/wiki/Special:MyLanguage/Help:Contents Guida utente] per maggiori informazioni sull'uso di questo software wiki.\n\n== Per iniziare ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Impostazioni di configurazione]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Domande frequenti su MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailing list annunci MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localizza MediaWiki nella tua lingua]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Imparare a combattere lo spam sul tuo wiki]"
 }
index 8c0ade9..dd576ca 100644 (file)
@@ -16,7 +16,9 @@
                        "Takot",
                        "Sujiniku",
                        "Macofe",
-                       "2nd-player"
+                       "2nd-player",
+                       "Otokoume",
+                       "Rxy"
                ]
        },
        "config-desc": "MediaWiki のインストーラー",
        "config-no-db": "適切なデータベース ドライバーが見つかりませんでした! PHP にデータベース ドライバーをインストールする必要があります。\n以下の種類のデータベース{{PLURAL:$2|のタイプ}}に対応しています: $1\n\nPHP を自分でコンパイルした場合は、例えば <code>./configure --with-mysqli</code> を実行して、データベース クライアントを使用できるように再設定してください。\nDebian または Ubuntu のパッケージから PHP をインストールした場合は、モジュール (例: <code>php5-mysql</code>) もインストールする必要があります。",
        "config-outdated-sqlite": "<strong>警告:</strong> あなたは SQLite $1 を使用していますが、最低限必要なバージョン $2 より古いバージョンです。SQLite は利用できません。",
        "config-no-fts3": "<strong>警告:</strong> SQLite は [//sqlite.org/fts3.html FTS3] モジュールなしでコンパイルされており、このバックエンドでは検索機能は利用できなくなります。",
-       "config-register-globals-error": "<strong>エラー: PHPの <code>[http://php.net/register_globals register_globals]</code> オプションが有効になっています。\nインストールを進めるには無効にしなければなりません。</strong>\nやり方については[https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] をご覧ください。",
-       "config-magic-quotes-gpc": "<strong>致命的なエラー: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] が有効になっています!</strong>\nこのオプションは予期せずしてデータ入力を破壊します。\nこのオプションを無効にするまで MediaWiki はインストールしたり使用したりはできません。",
-       "config-magic-quotes-runtime": "<strong>致命的エラー: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] が動作しています!</strong>\nこのオプションは、予期せずデータ入力を破壊します。\nこのオプションを無効化しない限り、MediaWiki のインストールや使用はできません。",
-       "config-magic-quotes-sybase": "<strong>致命的エラー: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] が動作しています!</strong>\nこのオプションは、予期せずデータ入力を破壊します。\nこのオプションを無効化しない限り、MediaWiki のインストールや使用はできません。",
        "config-mbstring": "<strong>致命的エラー: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] が動作しています!</strong>\nこのオプションは、エラーを引き起こし、予期せずデータを破壊するおそれがあります。\nこのオプションを無効化しない限り、MediaWiki のインストールや使用はできません。",
-       "config-safe-mode": "<strong>警告:</strong> PHPの[http://www.php.net/features.safe-mode セーフモード]が有効になっています。\n特に、ファイルのアップロードや<code>math</code>機能で、問題が発生するおそれがあります。",
        "config-xml-bad": "PHPのXMLモジュールが不足しています。\nMediaWikiは、このモジュールの関数を必要としているため、この構成では動作しません。\nphp-xml RPM パッケージをインストールする必要があります。",
        "config-pcre-old": "<strong>致命的エラー:</strong> PCRE $1 以降が必要です。\nご使用中の PHP のバイナリは PCRE $2 とリンクされています。\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE 詳細情報]",
        "config-pcre-no-utf8": "<strong>致命的エラー:</strong> PHP の PCRE が PCRE_UTF8 対応なしでコンパイルされているようです。\nMediaWiki を正しく動作させるには、UTF-8 対応が必要です。",
@@ -85,7 +82,7 @@
        "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": "<strong>警告:</strong> [http://www.php.net/apc APC]、[http://xcache.lighttpd.net/ XCache]、[http://www.iis.net/download/WinCacheForPhp WinCache] のいずれも見つかりませんでした。\nオブジェクトのキャッシュは有効化されません。",
+       "config-no-cache-apcu": "<strong>警告:</strong> [http://www.php.net/apcu APCu]、 [http://xcache.lighttpd.net/ XCache]、 [http://www.iis.net/download/WinCacheForPhp WinCache] のいずれも見つかりませんでした。\nオブジェクトのキャッシュは有効化されません。",
        "config-mod-security": "<strong>警告:</strong> あなたのウェブサーバーでは [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-ns-site-name": "ウィキ名と同じ: $1",
        "config-ns-other": "その他 (指定してください)",
        "config-ns-other-default": "マイウィキ",
-       "config-project-namespace-help": "ウィキペディアの例に従い、多くのウィキは、コンテンツのページとは分離したポリシーページを「'''プロジェクトの名前空間'''」に持っています。\nこの名前空間内のページのページ名はすべて特定の接頭辞で始まります。それをここで指定できます。\n通常、この接頭辞はウィキ名に基づきますが、「#」や「:」のような区切り文字を含めることはできません。",
+       "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-help-tooltip": "クリックで展開",
        "config-nofile": "ファイル「$1」が見つかりませんでした。削除された可能性があります。",
        "config-extension-link": "あなたのウィキは[//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions 拡張機能]をサポートしていることをご存知ですか?\n\n[//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category カテゴリ別で拡張機能を見る]か[//www.mediawiki.org/wiki/Extension_Matrix 拡張機能のマトリックス]で拡張機能すべてのリストをご覧になれます。",
-       "mainpagetext": "<strong>MediaWiki ã\81®ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81«æ\88\90å\8a\9fã\81\97ã\81¾ã\81\97ã\81\9f。</strong>",
+       "mainpagetext": "<strong>MediaWiki ã\81¯ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«æ¸\88ã\81¿ã\81§ã\81\99。</strong>",
        "mainpagedocfooter": "ウィキソフトウェアの使い方に関する情報は[//meta.wikimedia.org/wiki/Help:Contents 利用者案内]を参照してください。\n\n== はじめましょう ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings/ja 設定の一覧]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/ja MediaWiki よくある質問と回答]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki リリース情報メーリングリスト]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation/ja MediaWiki のあなたの言語へのローカライズ]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]"
 }
diff --git a/includes/installer/i18n/jbo.json b/includes/installer/i18n/jbo.json
new file mode 100644 (file)
index 0000000..e52919f
--- /dev/null
@@ -0,0 +1,12 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Xbony2"
+               ]
+       },
+       "config-information": "lo datni",
+       "config-page-name": "lo cmene",
+       "config-page-options": "lo cuxna",
+       "config-page-install": "lo instale",
+       "config-page-copying": "nu lo fukpi"
+}
index 13750e8..2163c6f 100644 (file)
@@ -41,6 +41,7 @@
        "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
        "config-db-port": "მონაცემთა ბაზის პორტი:",
        "config-db-schema": "მედიავიკის სქემა:",
+       "config-type-mssql": "Microsoft SQL Server",
        "config-header-mysql": "MySQL-ის პარამეტრები",
        "config-header-postgres": "PostgreSQL-ის პარამეტრები",
        "config-header-sqlite": "SQLite-ის პარამეტრები",
index 90e6dc9..09a9264 100644 (file)
@@ -9,7 +9,8 @@
                        "Revi",
                        "Alex00728",
                        "Hwangjy9",
-                       "Macofe"
+                       "Macofe",
+                       "Mooozi"
                ]
        },
        "config-desc": "미디어위키를 위한 설치 관리자",
@@ -18,7 +19,7 @@
        "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": "ì \9cê³µí\95\9c í\82¤ê°\80 ì\9e\98못ë\90\98ì\97\88ì\8aµë\8b\88ë\8b¤.",
+       "config-localsettings-badkey": "ì\97\85ê·¸ë \88ì\9d´ë\93\9c í\82¤ê°\80 ì\9e\98못ë\90\98ì\97\88ì\8aµë\8b\88ë\8b¤.",
        "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>에 지정한 설정을 사용하여 데이터베이스에 연결할 때 오류가 발생했습니다. 이러한 설정을 고치고 다시 시도하세요.\n\n$1",
        "config-no-db": "적절한 데이터베이스 드라이버를 찾을 수 없습니다! PHP용 데이터베이스 드라이버를 설치해야 합니다.\n다음 데이터베이스 {{PLURAL:$2|유형을 지원합니다}}: $1.\n\nPHP를 직접 컴파일했다면, 예를 들어 <code>./configure --with-mysql</code>을 사용하여, 데이터베이스 클라이언트를 활성화하도록 다시 설정하세요.\n데비안이나 우분투 패키지에서 PHP를 설치했다면 <code>php5-mysql</code> 모듈도 설치해야 합니다.",
        "config-outdated-sqlite": "<strong>경고:</strong> 최소인 $2 버전보다 낮은 SQLite $1(이)가 있습니다. SQLite를 사용할 수 없습니다.",
        "config-no-fts3": "<strong>경고:</strong> SQLite를 [//sqlite.org/fts3.html FTS3 모듈] 없이 컴파일하며, 검색 기능은 백엔드에 사용할 수 없습니다.",
-       "config-register-globals-error": "<strong>오류: PHP의 <code>[http://php.net/register_globals register_globals]</code> 옵션이 활성화되어 있습니다.\n설치를 계속하려면 비활성화해야 합니다.</strong>\n어떻게 하는지에 대한 도움말에 대해서는 [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals]를 보세요.",
-       "config-magic-quotes-gpc": "<strong>치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc]이 활성화되어 있습니다!</strong>\n이 옵션은 데이터를 입력하는 데 예기치 않는 손상을 일으킵니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
-       "config-magic-quotes-runtime": "<strong>치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]이 활성화되어 있습니다!</strong>\n이 옵션은 데이터를 입력하는 데 예기치 않는 손상이 일으킵니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
-       "config-magic-quotes-sybase": "<strong>치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]이 활성화되어 있습니다!</strong>\n이 옵션은 데이터를 입력하는 데 예기치 않는 손상을 일으킵니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
        "config-mbstring": "<strong>치명: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]이 활성화되어 있습니다!</strong>\n이 옵션은 오류가 발생하고 데이터를 입력하는 데 예기치 않는 손상을 일으킬 수 있습니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
-       "config-safe-mode": "<strong>경고:</strong> PHP의 [http://www.php.net/features.safe-mode 안전 모드]가 활성화되어 있습니다!\n특히 파일을 올리거나 <code>math</code>를 지원하는 데 문제가 발생할 수 있습니다.",
        "config-xml-bad": "PHP의 XML 모듈이 없습니다.\n미디어위키는 이 모듈의 기능이 필요하며 이 설정에서는 작동하지 않습니다.\nphp-xml 패키지를 설치해야할 수도 있습니다.",
        "config-pcre-old": "<strong>치명:</strong> PCRE $1 또는 그 이상이 필요합니다.\nPHP 바이너리는 PCRE $2에 연결되어 있습니다. [https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE 자세한 정보].",
        "config-pcre-no-utf8": "<strong>치명:</strong> PHP의 PCRE 모듈은 RCRE_UTF8 지원 없이 컴파일된 것 같습니다.\n미디어위키가 올바르게 작동하려면 UTF-8을 지원해야 합니다.",
@@ -78,7 +74,6 @@
        "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": "<strong>경고:</strong> [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] 또는 [http://www.iis.net/download/WinCacheForPhp WinCache]를 찾을 수 없습니다.\n개체 캐싱을 활성화하지 않습니다.",
        "config-no-cache-apcu": "<strong>경고:</strong> [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] 또는 [http://www.iis.net/download/WinCacheForPhp WinCache]를 찾을 수 없습니다.\n개체 캐싱을 활성화할 수 없습니다.",
        "config-mod-security": "<strong>경고:</strong> 웹 서버에 [http://modsecurity.org/ mod_security]가 허용되었습니다. 잘못 설정된 경우 미디어위키나 사용자가 임의의 내용을 게시할 수 있는 다른 소프트웨어에 대한 문제를 일으킬 수 있습니다.\n[http://modsecurity.org/documentation/ mod_security] 문서를 참고하거나 임의의 오류가 발생할 경우 호스트의 지원 요청에 문의하십시오.",
        "config-diff3-bad": "GNU diff3를 찾을 수 없습니다.",
        "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-help": "중요한 보안 발표를 포함한 배포판 발표에 사용되는 저용량 메일링 리스트입니다.\n이 리스트를 구독하고 새 버전이 나올 때 미디어위키 설치를 업데이트해야 합니다.",
        "config-subscribe-noemail": "이메일 주소를 입력하지 않고 릴리스 발표 메일링 리스트에 가입하려 합니다.\n메일링 리스트에 가입하고자 할 경우 이메일 주소를 입력하세요.",
        "config-almost-done": "거의 다 완료했습니다!\n이제 남은 설정을 생략하고 지금 바로 위키를 설치할 수 있습니다.",
        "config-optional-continue": "더 많은 질문을 물어보세요.",
index ac76621..b16addd 100644 (file)
@@ -12,7 +12,7 @@
        "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-localsettings-badkey": "Dä Schlößel zom aktoallesehre 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 Verbendong noh de Datebangk opmaache wullte met dä Enschtällonge uß dä Dattei <code lang=\"en\">LocalSettings</code> un et hät nit jeflupp. Bes esu joot un don dat repareere un versöhg et dann norr_ens.\n\n$1\n\n$1",
        "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ä {{PLURAL:$2|Daatebangk|Daatebangke|Daatebangk}} ö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 Zohjangsprojramm för en Daatebangk enbenge, för e Beishpell met: <code  lang=\"en\">./configure --with-mysql</code>.\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-error": "<strong>Fähler: dem PHP sing Enschtällong <code>[http://php.net/register_globals register_globals]</code> es aanjeschalldt.\nSe moß ußjeschalldt sin, domet mer heh wigger maache kann.</strong>\nLoor op dä Sigg [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] wi mer se ußschallde kann.",
-       "config-magic-quotes-gpc": "<strong>Dä!</strong> Dem PHP singe Schallder <code lang=\"en\">[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc]</code> es enjeschalldt.\nDä määt enjejovve Daate kapott, un doh draan kam_mer dann nix mih 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-runtime": "<strong>Dä!</strong> 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": "<strong>Dä!</strong> 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 mih 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-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 <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"PHP Hypertext Preprocessor\">PHP</i> sing <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>-Moduhl es nit ze fenge.\nMediaWiki bruch Funxjohne en däm Moduhl un deiht et esu nit.\nDe künns et nühdesch han, dat Pakätt \n„<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">php-xml</code>“ ze enschtallehre.",
        "config-pcre-old": "<strong>Fähler:</strong> PCRE $1 udder neuer es nüüdesch.\nPHP es jäz ävver met PCRE $2 zesamme jebonge.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Mieh dohzoh].",
        "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.",
@@ -72,7 +67,7 @@
        "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-no-cache-apcu": "'''Opjepaß:''' Mer kunnte dä <code lang=\"en\" xml:lang=\"en\" dir=\"rtl\">[http://www.php.net/apcu APCu]</code>, dä <code lang=\"en\" xml:lang=\"en\" dir=\"rtl\">[http://xcache.lighttpd.net/ XCache]</code> udder dä <code lang=\"en\" xml:lang=\"en\" dir=\"rtl\">[http://www.iis.net/download/WinCacheForPhp WinCache]</code> nit fenge.\nEt <i lang=\"en\" xml:lang=\"en\" dir=\"rtl\">object caching</i> es nit müjjelesch un es ußjeschalldt.",
        "config-mod-security": "<strong>Opjepaß</strong>: Dinge Wäbßööver hät <code  lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[http://modsecurity.org/ mod_security]</code> enjeschalldt. Jenohch schtandattmähßejje Enschtällonge heh em Wikki künne Problehme met MehdijaWikki un och met ander Projramme aanschtivvelle, di zohlohße, dat vun ußerhallef öhndsene Krohm op dä Webßööver jebraat wähde künnt.\nWann müjjelesch sullt mer dat affschallde. Söns beloor Der di Sigg <code  lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[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 bemärke 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-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-project-namespace-help": "Noh dämm Vörbeld vun de Wikipehdija, donn vill Wikkis dänne ier Sigge övver et Wikki un sing Rääjelle vun dä Sigge mem Enhald vum Wikki tränne, un en enem extra Appachtemang för et „'''Projäk'''“ afflääje.\nSigge en däm Appachtemang fange all med enem beschtemmpte Vörsaz aan, däm Name vum Appachtemang, un dä moß De heh faßlähje.\nDä Nahme darref beschtemmpte Zeiche nit enthallde, wi „#“ un „:“ un et es övv esu, dat hä vum Nahme vum Wikki 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-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\nMih Aanjahbe doh drövver un en Aanleidong, wi mer och ander Wikis ußer de <i lang=\"en\">Wikimedia Commons</i> doför enreeschte kann, fengk mer em [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos Handbooch].",
+       "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 Mehdijedatteie 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\nMih Aanjahbe doh drövver un en Aanleidong, wi mer och ander Wikis ußer de <i lang=\"en\">Wikimedia Commons</i> doför enreeschte kann, fengk mer em [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos Handbohch].",
        "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-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-install-done": "<strong>Jlöckwonsch!</strong>\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<strong>Opjepaß:</strong> 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 <strong>[$2 en Ding Wiki jonn]</strong>.",
        "config-download-localsettings": "Donn di Dattei <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">LocalSettings.php</code> eronger lahde",
        "config-help": "Hölp",
        "config-help-tooltip": "Donn Hölp heh aan däm Plaaz enblände.",
        "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/Special:MyLanguage/Manual:Extensions Zohsazprojramme] hann kann?\n\nDo kanns [//www.mediawiki.org/wiki/Special:MyLanguage/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": "'''MehdijaWikki es jäz enschtalleht.'''",
-       "mainpagedocfooter": "Luur en et (änglesche) [//meta.wikimedia.org/wiki/Help:Contents Handbohch] wann De weße wells wi de Wikki-ẞoffwähr jebruch un bedehnt wähde moß.\n\n== För der Aanfang ==\nDat es och all op Änglesch:\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings En leß met müjjelesche Enschtällonge för et MehdijaWikki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Öff jefrooch övver et Mehdijawikki&nbsp;&hellip;]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce De Meilengleß met Annköndijonge övver neuje Ußjahbe vum MehdijaWikki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Donn MediaWiki op Ding Schprohch aanpaße]\n\n=== Jrammatek ===\nJeh nohdämm, ovv_et „di {{SITENAME}}“, „dä {{SITENAME}}“ udder „dat {{SITENAME}}“ heiß, moß mer velleijsch en Datteij änndere. Wann „{{SITENAME}}“ med „wikki“ ov „wiki“ ophürt, moß mer nix donn. Bei „dä {{SITENAME}}“ och nit. Söns kütt en di Datteij <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">languages/classes/LanguageKsh.php</code> vör udder henger dä Reihj met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">No need add neuter wikis having names ending in -wiki.</code>“ en neuje Reihj eren:\n* för „di {{SITENAME}}“ heijß di:\n*: <code>'{{SITENAME}}' => 'f',</code>\n* för „dat {{SITENAME}}“ heijs et:\n*: <code>'{{SITENAME}}' => 'n',</code>\n\n== Un dann ==\nDonn heh di Sigg ömbenänne un/udder jähje en ääschte Aanfangssigg för heh dat Wikki ußtuusche!\n\nAlles Johde!"
+       "mainpagetext": "<strong>MehdijaWikki es jäz enschtalleht.</strong>",
+       "mainpagedocfooter": "Luur en et (änglesche) [//meta.wikimedia.org/wiki/Help:Contents Handbohch] wann De weße wells wi de Wikki-ẞoffwähr jebruch un bedehnt wähde moß.\n\n== För der Aanfang ==\nDat es och all op Änglesch:\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings En leß met müjjelesche Enschtällonge för et MehdijaWikki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Öff jefrooch övver et Mehdijawikki&nbsp;&hellip;]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce De Meilengleß met Annköndijonge övver neuje Ußjahbe vum MehdijaWikki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Donn MediaWiki op Ding Schprohch aanpaße]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Loor, wi der der <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„för jewöhnlesch angmaß övverdrahre Nohreeschte udder Meddeijlonge, di wä se kritt jaa nit han well,“\">SPAM</i> em Wikki klein hälls]\n\n=== Jrammatek ===\nJeh nohdämm, ovv_et „di {{SITENAME}}“, „dä {{SITENAME}}“ udder „dat {{SITENAME}}“ heiß, moß mer velleijsch en Datteij änndere. Wann „{{SITENAME}}“ med „wikki“ ov „wiki“ ophürt, moß mer nix donn. Bei „dä {{SITENAME}}“ och nit. Söns kütt en di Datteij <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">languages/classes/LanguageKsh.php</code> vör udder henger dä Reihj met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">No need add neuter wikis having names ending in -wiki.</code>“ en neuje Reihj eren:\n* för „di {{SITENAME}}“ heijß di:\n*: <code>'{{SITENAME}}' => 'f',</code>\n* för „dat {{SITENAME}}“ heijs et:\n*: <code>'{{SITENAME}}' => 'n',</code>\n\n== Un dann ==\nDonn heh di Sigg ömbenänne un/udder jähje en ääschte Aanfangssigg för heh dat Wikki ußtuusche!\n\nAlles Johde!"
 }
index 6b732a9..9a30139 100644 (file)
@@ -13,7 +13,7 @@
        "config-localsettings-upgrade": "Aptiktas failas <code>LocalSettings.php</code>. Norėdami patobulinti šią instaliaciją, prašome įvesti reikšmę <code>$wgUpgradeKey</code> į dėžutę žemiau. Jūs rasite ją <code>LocalSettings.php</code>.",
        "config-localsettings-cli-upgrade": "Aptiktas failas <code>LocalSettings.php</code>. Tam kad patobulinti šią instaliaciją, prašome paleisti <code>update.php</code>.",
        "config-localsettings-key": "Naujinimo raktas:",
-       "config-localsettings-badkey": "Raktas, kurį pateikėte, yra neteisingas.",
+       "config-localsettings-badkey": "Atnaujinimo raktas, kurį pateikėte, yra neteisingas.",
        "config-upgrade-key-missing": "Aptikta esama MediaWiki instaliacija. Tam kad atnaujinti šią instaliaciją, prašome įrašyti šią eilutę <code>LocalSettings.php</code> failo pabaigoje:\n\n$1",
        "config-localsettings-incomplete": "Esamas failas <code>LocalSettings.php</code> yra nepilnas. Nenustatytas kintamasis $1.\nPrašome pakeisti failą <code>LocalSettings.php</code> tai, kad kintamasis būtų nustatytas ir spauskite „{{int:Config-continue}}“.",
        "config-localsettings-connection-error": "Buvo susidurta su klaida, kai jungtasi prie duomenų bazės naudojantis nustatymais iš <code>LocalSettings.php</code>. Prašome pataisyti šiuos nustatymus ir bandyti dar kartą.\n\n$1",
@@ -43,6 +43,7 @@
        "config-page-existingwiki": "Esamas viki",
        "config-help-restart": "Ar norite ištrinti visus išsaugotus duomenis, kuriuos jūs įvedėte ir iš naujo paleisti diegimo procesą?",
        "config-restart": "Taip, paleiskite jį iš naujo",
+       "config-welcome": "== Aplinkos patikrinimas ==\nDabar bus atlikti pagrindiniai patikrinimai, po kurių paaiškės, ar ši aplinka yra tinkama MediaWiki įrangai.\nNepamirškite įtraukti šią informaciją, jeigu norite gauti pagalbos, kaip užbaigti įdiegimą.",
        "config-sidebar": "* [//www.mediawiki.org MediaWiki namų tinklalapis]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Vartotojo gidas]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Administratoriaus gidas]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ DUK]\n----\n* <doclink href=Readme>Skaityk mane</doclink>\n* <doclink href=ReleaseNotes>Leidimo pastabos</doclink>\n* <doclink href=Copying>Kopijavimas</doclink>\n* <doclink href=UpgradeDoc>Atnaujinimas</doclink>",
        "config-env-good": "Aplinka buvo patikrinta.\nJūs galite įdiegti MediaWiki.",
        "config-env-bad": "Aplinka buvo patikrinta.\nJūs negalite įdiegti MediaWiki.",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] yra įdiegtas",
        "config-apc": "[http://www.php.net/apc APC] yra įdiegtas",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] yra įdiegtas",
+       "config-no-cache-apcu": "<strong>Įspėjimas:</strong> Nepavyko rasti [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] or [http://www.iis.net/download/WinCacheForPhp WinCache].\nObjekto spartinimas neįjungtas.",
        "config-diff3-bad": "GNU diff3 nerastas.",
+       "config-git": "Rasta Git versijų kontrolės sistema: <code>$1</code>.",
+       "config-imagemagick": "Rastas „ImageMagick“: <code>$1</code>.\nPaveikslėlių miniatiūrizavimas bus įjungtas, jeigu įgalinsite vaizdų įkėlimą.",
+       "config-using-server": "Naudojamas serverio pavadinimas „<nowiki>$1</nowiki>“.",
        "config-using-uri": "Naudojamas serverio URL „<nowiki>$1$2</nowiki>“.",
        "config-db-type": "Duomenų bazės tipas:",
        "config-db-host": "Duomenų bazės serveris:",
        "config-header-oracle": "Oracle nustatymai",
        "config-header-mssql": "„Microsoft“ SQL serverio nustatymai",
        "config-invalid-db-type": "Neteisingas duomenų bazės tipas",
+       "config-missing-db-name": "Privalote įvesti „{{int:config-db-name}}“ reikšmę.",
        "config-missing-db-host": "Privalote įvesti „{{int:config-db-host}}“ reikšmę.",
        "config-missing-db-server-oracle": "Privalote įvesti „{{int:config-db-host-oracle}}“ reikšmę.",
        "config-postgres-old": "PostgreSQL $1 ar vėlesnė yra reikalinga. Jūs turite $2.",
+       "config-sqlite-cant-create-db": "Nepavyko sukurti duomenų bazės failo <code>$1</code>.",
        "config-regenerate": "Pergeneruoti LocalSettings.php →",
        "config-db-web-account-same": "Naudoti tą pačią paskyrą kaip ir įdiegimui",
        "config-db-web-create": "Sukurti paskyrą, jeigu jos nėra",
        "config-install-database": "Tvarkoma duomenų bazė",
        "config-install-schema": "Kuriama schema",
        "config-install-pg-schema-not-exist": "PostgreSQL schemos nėra.",
-       "config-install-user": "Kuriama naudotojų duomenų bazė",
+       "config-install-user": "Kuriamas duomenų bazės naudotojas",
        "config-install-user-alreadyexists": "Naudotojas „$1“ jau yra",
        "config-install-user-create-failed": "Nepavyko sukurti naudotojo „$1“: $2",
        "config-install-tables": "Kuriamos lentelės",
index 3916233..e576e2f 100644 (file)
        "config-localsettings-badkey": "Diso ilay lakile fanavaozana natsofokao.",
        "config-session-error": "Hadisoana teo am-panombohana ny fidirana : $1",
        "config-your-language": "Ny fiteninao :",
+       "config-your-language-help": "Hifidy ny teny ilaina amin'ny piraosesy fametrahana.",
        "config-wiki-language": "Fiteny ho ampiasain'ny wiki :",
+       "config-wiki-language-help": "Hifidy ny teny hanoratana ny votoatin'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-upgrade": "Hanavao ny fametrahana efa misy",
        "config-page-dbsettings": "Parametatry ny banky angona",
        "config-page-name": "Anarana",
        "config-page-options": "Safidy",
@@ -33,6 +36,8 @@
        "config-help-restart": "Tianao hofafana avokoa ve ny data voaangona natsofokao ary hamerina ny fizotran'ny fametrahana ?",
        "config-restart": "Eny, avereno atao",
        "config-welcome": "=== Fanamarinana mikasika ny tontolo ===\nNy fanamarihana tsotsotra dia atao hijerena raha mety ho ana rindrankajy Mediawiki ny tontolo.\nTadidio ny mametraka ireto torohay ireo raha mitady fanohanana mikasika ny fomba famaranana ny fametrahana ianao.",
+       "config-copyright": "== Zom-pamorona ary fepetra ==\n\n$1\n\n\nIo fandaharana dia rindrambaiko maimaim-poana; dia afaka zarazarain ary ovaina araka ny fepetra ao amin'ny GNU General Public License navoakan'ny Free Software Foundation; na versiona 2 ao amin'ny lisansa, na (araka ny safidinao) versiona tatỳ aoriana.\n\nIo fandaharaa io dia zaraina amin'ny fanantenana fa ho ilaina, anefa kosa dia <strong>tsy misy fiantohana</strong>; tsy misy fiantohana mikasika ny <strong>fivarotana azy</strong> na <strong>famendrehana ho azo ampiasaina amin'ny tranga iray manokana</strong>.\nJereo ny GNU General Public License hahazoana zavatra amin'ny antsipiriany.\n\nIanao dia tokony nandray <doclink href=Copying> kôpian'nyGNU General Public License </doclink> miaraka amin'ny fandaharana ity; raha tsy izany, manorata any amin'ny Free Software Foundation, Inc., 51 Franklin Street, Fahadimy Floor, Boston, MA 02110-1301, USA, na [http://www.gnu.org/copyleft/gpl.html vakio ao amin'ny Internet izany].",
+       "config-sidebar": "* [//www.mediawiki.org MediaWiki fandraisana]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Torolalan'ny mampiasa]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Torolalan'ny mpandrindra]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Fanontaniana mipetraka matetika]\n----\n* <doclink href=Readme>Vakio aho</doclink>\n* <doclink href=ReleaseNotes>Naoty famoahana</doclink>\n* <doclink href=Copying>Fandikàna</doclink>\n* <doclink href=UpgradeDoc>Fampihatsaràna</doclink>",
        "config-env-good": "Voamarina ny tontolo.\nAfaka apetrakao i MediaWiki.",
        "config-env-bad": "Voamarina ny tontolo.\nTsy afaka mametraka an'i MediaWiki ianao.",
        "config-env-php": "Misy ato PHP $1.",
        "config-unicode-pure-php-warning": "<strong>Fampitandremana: </strong>  Ny [http://pecl.php.net/intl itatra PECL intl] dia tsy misy mba hahazakana ny fampifenerana Unicode, ka mitontona amin'ny implementasiona PHP ranoray noho ny tsifisiany.\nRaha hametraka tranonkala be mpamangy ianao dia tokony mamaky ny [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations ''Unicode normalization''] (amin'ny teny anglisy)",
        "config-db-username": "Anaram-pikamban'ny banky angona :",
        "config-db-password": "Tenimiafin'ny banky angona :",
+       "config-db-prefix": "Tovom-banky angona:",
        "config-charset-mysql5-binary": "roafototra MySQL 4.1/5.0",
        "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
        "config-charset-mysql4": "MySQL 4.0 miverinjaka UTF-8",
        "config-db-port": "Seranam-banky angona:",
        "config-header-mysql": "Parametatr'i MySQL",
+       "config-header-postgres": "Parametatra PostgreSQL",
        "config-header-sqlite": "Parametatr'i SQLite",
        "config-header-oracle": "Parametatr'i Oracle",
+       "config-header-mssql": "Parametatry ny lohamilina Microsoft SQL Server",
+       "config-invalid-db-type": "Karazana banky angona tsy ekena.",
        "config-mysql-innodb": "innoDB",
        "config-mysql-myisam": "MyISAM",
        "config-ns-generic": "Tetikasa",
index 9366983..0931bea 100644 (file)
@@ -67,7 +67,6 @@
        "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": "'''Attenziò:''' [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache] nun so' state truvate.\n'A funziona caching 'e ll'oggette non è apicciata.",
        "config-no-cache-apcu": "<strong>Attenziò:</strong> [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache] nun so' state truvate.\n'A funziona caching 'e ll'oggette non è apicciata.",
        "config-mod-security": "<strong>Attenziò:</strong> 'O servitore web vuosto téne [http://modsecurity.org/ mod_security]/mod_security2 appicciato. Ce stanno tante mpustaziune commune ca 'o facessero causà prubbleme a MediaWiki e ll'ati software ca permettessero ll'utente 'e pubbrecà cuntenute.\nSi putite, stutate sta funziona. Sinò, riferite 'a [http://modsecurity.org/documentation/ documentaziona ncopp' 'o mod_security] o cuntattate 'o host vuosto pe' ve dà supporto quanno se scummogliasse cocch'errore.",
        "config-diff3-bad": "GNU diff3 nun truvato.",
        "config-ns-site-name": "'O stesso ch' 'o nomme d' 'o wiki: $1",
        "config-ns-other": "Ati (specificà)",
        "config-ns-other-default": "MyWiki",
-       "config-project-namespace-help": "Secutanno l'esempio 'e Wikipedia, tante wiki teneno 'e paggene lloro ch' 'e regole spartute d' 'e paggene 'e cuntenute, dint'a nu \"'''namespace 'e pruggetto'''\". Tuttuquante 'e titule d' 'e paggene dint'a stu namespace accummenciano cu nu certo prefisso ca se putesse nzegnà ccà.\n'O solito, stu prefisso vene d' 'o nomme d' 'o wiki, ma nun adda cuntenè carattere 'e punteggiatura comme fossero \"#\" o \":\".",
+       "config-project-namespace-help": "Secutanno l'esempio 'e Wikipedia, tante wiki teneno 'e paggene lloro ch' 'e regole spartute d' 'e paggene 'e cuntenute, dint'a nu '''namespace 'e pruggetto'''. Tuttuquante 'e titule d' 'e paggene dint'a stu namespace accummenciano cu nu certo prefisso ca se putesse nzegnà ccà.\n'O solito, stu prefisso vene d' 'o nomme d' 'o wiki, ma nun adda cuntenè carattere 'e punteggiatura comme fossero \"#\" o \":\".",
        "config-ns-invalid": "'O namespace specificato \"<nowiki>$1</nowiki>\" nun è buono.\nSpecificate nu namespace 'e pruggetto differente.",
        "config-ns-conflict": "'O namespace innecato \"<nowiki>$1</nowiki>\" tràse ncunflitto cu nu namespace predefinito 'e MediaWiki.\nSpecifiate n'atu nomme divierzo 'e namespace 'e pruggetto.",
        "config-admin-box": "Cunto ammenistratore",
index 8d5fd6e..9286446 100644 (file)
@@ -25,7 +25,7 @@
        "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 upgrade-sleutel die u hebt opgegeven is onjuist.",
+       "config-localsettings-badkey": "De upgradesleutel 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 met de database met de instellingen uit <code>LocalSettings.php</code>. Los het probleem met de instellingen op en probeer het daarna opnieuw.\n\n$1",
@@ -55,7 +55,7 @@
        "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.\nLever deze gegevens dan ook aan indien u support vraagt bij de installatie.",
+       "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.\nLever deze gegevens aan als u ondersteuning vraagt bij de installatie.",
        "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/Special:MyLanguage/Help:Contents Gebruikershandleiding] (Engelstalig)\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Beheerdershandleiding] (Engelstalig)\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Veelgestelde 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-php": "PHP $1 is op dit moment geïnstalleerd.",
        "config-env-hhvm": "HHVM $1 is geïnstalleerd.",
        "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/Special:MyLanguage/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/Special:MyLanguage/Unicode_normalization_considerations bijwerken] als Unicode voor u van belang is.",
+       "config-unicode-pure-php-warning": "<strong>Waarschuwing:</strong> de [http://pecl.php.net/intl PECL-extensie intl] is niet beschikbaar om de Unicodenormalisatie af te handelen en daarom wordt de langzamere PHP-implementatie gebruikt.\nAls u MediaWiki voor een website met veel verkeer installeert, lees u dan in over [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicodenormalisatie].",
+       "config-unicode-update-warning": "<strong>Waarschuwing:</strong> 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/Special:MyLanguage/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.\n{{PLURAL:$2|Het volgende databasetype wordt|De volgende databasetypes worden}} ondersteund: $1.\n\nAls u PHP zelf hebt gecompileerd, wijzig dan uw instellingen zodat een databasedriver wordt geactiveerd, bijvoorbeeld via <code>./configure --with-mysqli</code>.\nAls u PHP hebt geïnstalleerd via een Debian- of Ubuntu-package, installeer dan ook bijvoorbeeld de module <code>php5-mysql</code>.",
        "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]; zoekfuncties zijn niet beschikbaar.",
-       "config-mbstring": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] is actief!'''\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
+       "config-no-fts3": "<strong>Waarschuwing:</strong> SQLite is gecompileerd zonder de module [//sqlite.org/fts3.html FTS3]; zoekfuncties zijn niet beschikbaar.",
+       "config-mbstring": "<strong>Onherstelbare fout: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] is actief!</strong>\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
        "config-xml-bad": "De XML-module van PHP ontbreekt.\nMediaWiki vereist functies in deze module en werkt niet in deze configuratie.\nMogelijk moet u het RPM-pakket php-xml installeren.",
        "config-pcre-old": "'''Onherstelbare fout:''' PCRE $1 of een latere versie is vereist.\nUw uitvoerbare versie van PHP is gekoppeld met PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Meer informatie].",
        "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-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-iconv": "<strong>Onherstelbare fout:</strong> PHP moet gecompileerd zijn met ondersteuning voor de [http://www.php.net/manual/en/iconv.installation.php uitbreiding iconv].",
-       "config-json": "'''Fatale fout:''' PHP is gecompileerd zonder ondersteuning voor JSON.\nU moet de PHP-extensie JSON installeren of de extensie [http://pecl.php.net/package/jsonc PECL jsonc] voordat u MediaWiki installeert.\n* De PHP-extensie is beschikbaar in Red Hat Enterprise Linux (CentOS) 5 en 6, maar moet ingeschakeld worden <code>/etc/php.ini</code> or <code>/etc/php.d/json.ini</code>.\n* Sommige Linuxdistributies die zijn uitgebracht na mei 2013 hebben de PHP-extensie niet, maar hebben een package voor de PECL-extensie als <code>php5-json</code> of <code>php-pecl-jsonc</code>.",
+       "config-json": "<strong>Fatale fout:</strong> PHP is gecompileerd zonder ondersteuning voor JSON.\nU moet de PHP-extensie JSON installeren of de extensie [http://pecl.php.net/package/jsonc PECL jsonc] voordat u MediaWiki installeert.\n* De PHP-extensie is beschikbaar in Red Hat Enterprise Linux (CentOS) 5 en 6, maar moet ingeschakeld worden <code>/etc/php.ini</code> or <code>/etc/php.d/json.ini</code>.\n* Sommige Linuxdistributies die zijn uitgebracht na mei 2013 hebben de PHP-extensie niet, maar hebben een package voor de PECL-extensie als <code>php5-json</code> of <code>php-pecl-jsonc</code>.",
        "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-no-cache-apcu": "<strong>Waarschuwing:</strong> [http://www.php.net/apcu APCu], [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-gd": "Ingebouwde GD grafische bibliotheek aangetroffen.\nHet aanmaken van miniaturen van afbeeldingen wordt ingeschakeld als u uploaden inschakelt.",
        "config-no-scaling": "Noch de GD-bibliotheek noch ImageMagick zijn  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 <code>--scriptpath</code> is niet opgegeven. De standaardwaarde wordt gebruikt: <code>$1</code>.",
+       "config-no-cli-uri": "<strong>Waarschuwing:</strong> de parameter <code>--scriptpath</code> 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/Special:MyLanguage/Manual:Security#Upload_security beveiligingslek te verhelpen] alvorens uploads in te schakelen.",
+       "config-uploads-not-safe": "<strong>Waarschuwing:</strong> 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/Special:MyLanguage/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 libxml2 2.7.3 of hoger([https://bugs.php.net/bug.php?id=45996 bij PHP gerapporteerde fout]).\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-type-oracle": "Oracle",
        "config-type-mssql": "Microsoft SQL Server",
        "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-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] is de primaire database voor MediaWiki en wordt het best ondersteund. MediaWiki werkt ook met [{{int:version-db-mariadb-url}} MariaDB] en [{{int:version-db-percona-url}} Percona Server], die MySQL compatibel zijn ([http://www.php.net/manual/en/mysqli.installation.php hoe PHP te compileren met MySQL ondersteuning]).",
+       "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] is de primaire database voor MediaWiki en wordt het best ondersteund. MediaWiki werkt ook met [{{int:version-db-mariadb-url}} MariaDB] en [{{int:version-db-percona-url}} Percona Server], die MySQL compatibel zijn ([http://www.php.net/manual/en/mysqli.installation.php hoe PHP te compileren met MySQL-ondersteuning]).",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] is een populair open source databasesysteem als alternatief voor MySQL. Het is mogelijk dat er een aantal bekende kleinere problemen zijn met MediaWiki in combinatie met deze database en daarom wordt PostgreSQL niet aanbevolen voor een productieomgeving ([http://www.php.net/manual/en/pgsql.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor PostgreSQL]).",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] is een zeer goed ondersteund lichtgewicht databasesysteem ([http://www.php.net/manual/en/pdo.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor SQLite]; gebruikt PDO).",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] is een commerciële database voor grote bedrijven ([http://www.php.net/manual/en/oci8.installation.php PHP compileren met ondersteuning voor OCI8]).",
        "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 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-charset-help": "In <strong>binaire modus</strong> 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 <strong>UTF-8-modus</strong> 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-mssql-auth": "Authenticatietype:",
        "config-mssql-install-auth": "Selecteer de authenticatiemethode die wordt gebruikt om met de database te verbinden tijdens het installatieproces.\nAls u \"{{int:config-mssql-windowsauth}}\" selecteert, dan worden de aanmeldgegevens van de gebruiker waaronder de webserver draait voor authenticatie gebruikt.",
        "config-mssql-web-auth": "Selecteer de authenticatiemethode die de webserver gebruikt om met de database te verbinden tijdens het installatieproces.\nAls u \"{{int:config-mssql-windowsauth}}\" selecteert, dan worden de aanmeldgegevens van de gebruiker waaronder de webserver draait voor authenticatie gebruikt.",
        "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 zij 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-auth-help": "Als deze instelling actief is, moeten gebruikers hun e-mailadres bevestigen via een verwijziging die 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 <strong>aangeraden</strong> 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 ten minste het domein bestaat.",
        "config-upload-settings": "Afbeeldingen en bestanden uploaden",
        "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 succes 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 is het 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 gebruiken]'''.",
+       "config-install-done": "<strong>Gefeliciteerd!</strong>\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<strong>Let op:</strong> als u dit niet nu doet, dan is het 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 <strong>[$2 uw wiki gebruiken]</strong>.",
        "config-download-localsettings": "<code>LocalSettings.php</code> downloaden",
        "config-help": "hulp",
-       "config-help-tooltip": "klik om uit te klappen",
+       "config-help-tooltip": "klik om uit te vouwen",
        "config-nofile": "Het bestand \"$1\" is niet gevonden. Is het verwijderd?",
-       "config-extension-link": "Weet u dat u [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions uitbreidingen] kunt gebruiken voor uw wiki?\nU kunt [//www.mediawiki.org/wiki/Special:MyLanguage/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.",
+       "config-extension-link": "Weet u dat u [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions uitbreidingen] kunt gebruiken voor uw wiki?\n\nU kunt [//www.mediawiki.org/wiki/Special:MyLanguage/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/Special:MyLanguage/Help:Contents handleiding] voor informatie over het gebruik van de wikisoftware.\n\n== Meer hulp over MediaWiki ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lijst met instellingen]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/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/Special:MyLanguage/Localisation#Translation_resources Maak MediaWiki beschikbaar in uw taal]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Leer hoe u spam kunt voorkomen op uw wiki]"
 }
index 98d54ac..77e6fd0 100644 (file)
@@ -10,7 +10,7 @@
        "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-localsettings-badkey": "La clau de mesa a jorn 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-your-language-help": "Seleccionatz la lenga d'utilizar pendent lo processus d'installacion.",
@@ -38,7 +38,6 @@
        "config-env-bad": "L’environament es estat verificat.\nPodètz pas installar MediaWiki.",
        "config-env-php": "PHP $1 es installat.",
        "config-env-hhvm": "HHVM $1 es installat.",
-       "config-unicode-using-utf8": "Utilizacion de utf8_normalize.so per Brion Vibber per la normalizacion Unicode.",
        "config-unicode-using-intl": "Utilizacion de [http://pecl.php.net/intl l'extension PECL intl] per la normalizacion Unicode.",
        "config-memory-raised": "Lo paramètre <code>memory_limit</code> de PHP èra a $1, portat a $2.",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] es installat",
@@ -60,7 +59,6 @@
        "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-db-username-empty": "Vos cal entrar una valor per « {{int:config-db-username}} ».",
        "config-db-account-lock": "Utilizar lo meteis nom d'utilizaire e lo meteis senhal pendent lo foncionament abitual",
        "config-db-wiki-account": "Compte d'utilizaire pel foncionament abitual",
        "config-db-prefix": "Préfix de las taulas de la banca de donadas :",
index 9f8743c..6894534 100644 (file)
@@ -1,7 +1,8 @@
 {
        "@metadata": {
                "authors": [
-                       "Mashoi7"
+                       "Mashoi7",
+                       "Ilja.mos"
                ]
        },
        "config-your-language": "Sinun kieli:",
@@ -17,7 +18,7 @@
        "config-page-install": "Azenda",
        "config-page-complete": "Valmis!",
        "config-page-readme": "Luve minut",
-       "config-page-copying": "Kopiruitah",
+       "config-page-copying": "Kopiruijah",
        "config-page-upgradedoc": "Päivitetäh",
        "config-page-existingwiki": "Olemasolii wiki",
        "config-restart": "Muga, käynnistä uvvelleh",
@@ -25,7 +26,7 @@
        "config-env-hhvm": "HHVM $1 on azendettu.",
        "config-db-name": "Tiedokannan nimi:",
        "config-db-username": "Tiedokannan käyttäinimi:",
-       "config-db-password": "Tiedokannan peittosana:",
+       "config-db-password": "Tiedokannan salasana:",
        "config-type-mssql": "Microsoft SQL Server",
        "config-header-mysql": "MySQL-azetukset",
        "config-header-postgres": "PostgreSQL-azetukset",
        "config-ns-generic": "Projektu",
        "config-ns-other-default": "MinunWiki",
        "config-admin-name": "Sinun käyttäitunnus:",
-       "config-admin-password": "Peittosana:",
-       "config-admin-password-confirm": "Peittosana myös:",
+       "config-admin-password": "Salasana:",
+       "config-admin-password-confirm": "Salasana myös:",
        "config-admin-name-blank": "Kirjuta administruattoran käyttäinimi.",
-       "config-admin-password-blank": "Kirjuta administruattorutilin peittosana.",
-       "config-admin-password-mismatch": "Sinun kirjutetut kaksi peittosanua ei oldu yhtenjyttymät.",
+       "config-admin-password-blank": "Kirjuta administruattorutilin salasana.",
+       "config-admin-password-mismatch": "Sinun kirjutetut kaksi salasanua ei oldu yhtenjyttymät.",
        "config-admin-email": "Sähköpoštuadressu:",
        "config-optional-continue": "Kyzy minuspäi ližiä kyzymyksii.",
        "config-optional-skip": "Olen jo terstavunnuh, vaiku azenda wiki.",
        "config-email-settings": "Sähköpoštuazetukset",
        "config-logo": "Logon URL:",
-       "config-skins": "Ketut",
+       "config-skins": "Sivun ulgonävöt",
        "config-install-step-done": "ruattu",
        "config-install-user-alreadyexists": "Käyttäi \"$1\" on jo olemas",
        "config-help": "abu",
index cd75013..6251c03 100644 (file)
@@ -84,7 +84,6 @@
        "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 jest 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-help-tooltip": "kliknij, aby rozwinąć",
        "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/Special:MyLanguage/Manual:Extensions/pl rozszerzenia]?\n\nMożesz przejrzeć [//www.mediawiki.org/wiki/Special:MyLanguage/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ę.'''",
+       "mainpagetext": "<strong>Instalacja MediaWiki powiodła się.</strong>",
        "mainpagedocfooter": "Zobacz [//meta.wikimedia.org/wiki/Help:Contents przewodnik użytkownika], aby uzyskać informacje o działaniu oprogramowania wiki.\n\n== Na początek ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings/pl Lista ustawień konfiguracyjnych]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/pl MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Komunikaty o nowych wersjach MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Przetłumacz MediaWiki na swój język]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam \nDowiedz się, jak walczyć ze spamem na swojej wiki]"
 }
index 4a6526c..35835d2 100644 (file)
@@ -90,6 +90,6 @@
        "config-install-tables": "لښتيالونه جوړول",
        "config-download-localsettings": "ښکته کول <code>LocalSettings.php</code>",
        "config-help": "لارښود",
-       "mainpagetext": "'''MediaWiki په برياليتوب سره نصب شو.'''",
+       "mainpagetext": "<strong>MediaWiki نصب شو.</strong>",
        "mainpagedocfooter": "د ويکي ساوترې د کارولو د  مالوماتو په اړه [//meta.wikimedia.org/wiki/Help:Contents د کارن لارښود] سره سلا وکړۍ.\n\n== پيلول ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings د امستنو د سازونې لړليک]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ د ميډياويکي ډېرځليزې پوښتنې]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce د مېډياويکي د برېښليکونو لړليک]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources خپلې ژبې لپاره MediaWiki ځايتابول]"
 }
index dde0a2d..39ce4b1 100644 (file)
        "config-no-db": "Não foi possível encontrar um controlador apropriado da base de dados! Precisa de instalar um controlador da base de dados para o PHP. {{PLURAL:$2|É aceite o seguinte tipo|São aceites os seguintes tipos}} de base de dados: $1.\n\nSe fez a compilação do 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, por exemplo, o pacote <code>php5-mysql</code>.",
        "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-magic-quotes-runtime": "'''Erro fatal: A opção [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] está ativa!'''\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": "'''Erro fatal: A opção [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] está ativa!'''\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": "'''Erro fatal: A opção [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] está ativa!'''\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-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.\nPode precisar de instalar o pacote RPM chamado php-xml.",
        "config-pcre-old": "<strong>Erro fatal:</strong> É necessário o PCRE $1 ou versão posterior.\nO <i>link</i> do seu binário PHP foi feito com o PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Mais informações].",
        "config-pcre-no-utf8": "'''Erro 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.",
@@ -82,7 +79,6 @@
        "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-git": "Foi encontrado o software de controlo de versões Git: <code>$1</code>.",
        "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 Wikipédia, muitas wikis mantêm as páginas das suas normas e políticas, separadas das páginas de conteúdo, num \"'''domínio do projeto'''\".\nTodos os nomes das páginas neste domínio 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-project-namespace-help": "Seguindo o exemplo da Wikipédia, muitas wikis mantêm as páginas das suas normas e políticas, separadas das páginas de conteúdo, num '''domínio do projeto'''.\nTodos os nomes das páginas neste domínio 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-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-install-done": "<strong>Parabéns!</strong>\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 a descarga do ficheiro e colocá-lo no diretório de raiz da sua instalação (o mesmo diretório onde está o ficheiro index.php). Esta descarga deverá ter sido iniciada automaticamente.\n\nSe a descarga não foi iniciada, ou se o cancelou, pode recomeçá-la ao clicar na ligação abaixo:\n\n$3\n\n<strong>Nota</strong>: 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 <strong>[$2 entrar na wiki]</strong>.",
        "config-download-localsettings": "Descarga do <code>LocalSettings.php</code>",
        "config-help": "ajuda",
        "config-help-tooltip": "clique para expandir",
        "config-nofile": "Não foi possível encontrar o ficheiro \"$1\". Terá sido apagado?",
        "config-extension-link": "Sabia que a sua wiki suporta [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensões]?\n\nPode procurar [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensões por categoria].",
-       "mainpagetext": "'''MediaWiki instalado com sucesso.'''",
+       "mainpagetext": "<strong>MediaWiki instalado.</strong>",
        "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/Special:MyLanguage/Manual:Configuration_settings Lista de opções de configuração]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/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]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Regionalize MediaWiki para seu idioma]"
 }
index e20f230..e734801 100644 (file)
@@ -81,7 +81,6 @@
        "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-no-cache": "Status message in the MediaWiki installer environment checks.",
        "config-no-cache-apcu": "Status message in the MediaWiki installer environment checks.",
        "config-mod-security": "Status message in the MediaWiki installer environment checks.",
        "config-diff3-bad": "Status message in the MediaWiki installer environment checks.",
index f589678..f966b44 100644 (file)
        "config-no-db": "Не удалось найти подходящие драйвера баз данных! Вам необходимо установить драйвера базы данных для PHP.\n{{PLURAL:$2|Поддерживается следующий тип|Поддерживаются следующие типы}} баз данных: $1.\n\nЕсли вы скомпилировали PHP сами, перенастройте его с включением клиента баз данных, например, с помощью <code>./configure --with-mysqli</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-error": "<strong>Ошибка: Параметр PHP <code>[http://php.net/register_globals register_globals]</code> включен.\nОн должен быть отключен для того, чтобы можно было продолжить установку.</strong>\nПолучить справку о том, как это сделать, можно по адресу [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals].",
-       "config-magic-quotes-gpc": "'''Проблема: включена опция PHP [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc]!'''\nЭто приводит к непредсказуемой порче вводимых данных.\nУстановка и использование MediaWiki без выключения этой опции невозможно.",
-       "config-magic-quotes-runtime": "'''Проблема: включена опция PHP [http://www.php.net/manual/ru/function.magic-quotes-runtime.php 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-safe-mode": "'''Предупреждение:''' PHP работает в [http://www.php.net/features.safe-mode «безопасном режиме»].\nЭто может привести к проблемам, особенно с загрузкой файлов и вставкой математических формул.",
        "config-xml-bad": "Для РНР отсутствует XML-модуль.\nMediaWiki не будет работать в этой конфигурации, так как требуется функционал этого модуля.\nВозможно, вам понадобится установить RPM-пакет php-xml.",
        "config-pcre-old": "'''Фатальная ошибка:''' требуется PCRE версии $1 или более поздняя.\nВаш исполняемый файл PHP связан с PCRE версии $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Подробнее].",
        "config-pcre-no-utf8": "'''Фатальная ошибка'''. Модуль PCRE для PHP, похоже, собран без поддержки PCRE_UTF8.\nMediaWiki требует поддержки UTF-8 для корректной работы.",
@@ -89,7 +84,6 @@
        "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-no-cache-apcu": "'''Внимание:''' Не найдены [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] или [http://www.iis.net/download/WinCacheForPhp WinCache].\nКэширование объектов будет отключено.",
        "config-mod-security": "<strong>Внимание</strong>: На вашем веб-сервере включен [http://modsecurity.org/ mod_security]/mod_security2. Многие его стандартные настройки могут вызывать проблемы для MediaWiki или другого ПО, позволяющего пользователям отправлять на сервер произвольный контент.\nОбратитесь к [http://modsecurity.org/documentation/ документации mod_security] или в службу поддержки вашего хостинг-провайдера, если вы сталкиваетесь со случайными ошибками.",
        "config-diff3-bad": "GNU diff3 не найден.",
        "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-install-done": "<strong>Поздравляем!</strong>\nВы установили MediaWiki.\n\nВо время установки был создан файл <code>LocalSettings.php</code>.\nОн содержит все ваши настройки.\n\nВам необходимо скачать его и положить в корневую директорию вашей вики (ту же директорию, где находится файл index.php). Его загрузка должна начаться автоматически.\n\nЕсли автоматическая загрузка не началась или вы её отменили, вы можете скачать по ссылке ниже:\n\n$3\n\n<strong>Примечание</strong>: Если вы не сделаете этого сейчас, то сгенерированный файл конфигурации не будет доступен вам в дальнейшем, если вы выйдете из установки, не скачивая его.\n\nПо окончании действий, описанных выше, вы сможете <strong>[$2 войти в вашу вики]</strong>.",
        "config-download-localsettings": "Загрузить <code>LocalSettings.php</code>",
        "config-help": "справка",
        "config-help-tooltip": "нажмите, чтобы развернуть",
        "config-nofile": "Файл \"$1\" не удается найти. Он был удален?",
        "config-extension-link": "Знаете ли вы, что ваш вики-проект поддерживает [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions расширения]?\n\nВы можете просмотреть [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category расширения по категориям] или [//www.mediawiki.org/wiki/Extension_Matrix матрицу расширений], чтобы увидеть их полный список.",
-       "mainpagetext": "'''Вики-движок «MediaWiki» успешно установлен.'''",
+       "mainpagetext": "<strong>MediaWiki успешно установлена.</strong>",
        "mainpagedocfooter": "Информацию по работе с этой вики можно найти в [//meta.wikimedia.org/wiki/Help:Contents/ru справочном руководстве].\n\n== Некоторые полезные ресурсы ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Список возможных настроек];\n* [//www.mediawiki.org/wiki/Manual:FAQ/ru Часто задаваемые вопросы и ответы по MediaWiki];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка уведомлений о выходе новых версий MediaWiki].\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Перевод MediaWiki на свой язык]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Узнайте, как бороться со спамом в вашей вики]"
 }
index ab257dd..ce49110 100644 (file)
@@ -1,12 +1,39 @@
 {
        "@metadata": {
                "authors": [
-                       "HalanTul"
+                       "HalanTul",
+                       "Мария Олесова"
                ]
        },
        "config-desc": "MediaWiki инсталлятора",
        "config-title": "MediaWiki $1 туруоруу",
        "config-information": "Бу туһунан",
+       "config-localsettings-key": "Саҥатытыы күлүүһэ:",
+       "config-localsettings-badkey": "Саҥатытыыга сыыһа күлүүһү ыйдыҥ.",
+       "config-your-language-help": "Туруоруу кэмигэр туттуллар тылы тал.",
+       "config-wiki-language": "Биики туттуохтаах тыла:",
+       "config-back": "← Төттөрү",
+       "config-continue": "Салгыы →",
+       "config-page-language": "Тыла",
+       "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-upgradedoc": "Саҥардыы",
+       "config-page-existingwiki": "Баар биики",
+       "config-help-restart": "Харайыллыбыт көрдөрүүлэри сотуоххун уонна туруоруу кэмин саҥаттан ыытыаххын баҕараҕын дуо?",
+       "config-restart": "Сөп, саҥаттан саҕалыырга",
+       "config-env-good": "Тас кэккэ бэрэбиэркэтэ ситиһиилээхтик ыытылынна. \nMediaWiki туруоруоххун сөп.",
+       "config-db-type": "Билии олоҕун көрүҥэ:",
+       "config-db-wiki-settings": "Бу биики тэҥнэбилэ",
+       "config-db-name": "Билии олоҕун аата:",
+       "config-db-name-oracle": "Билии олоҕун исхиэмэтэ:",
+       "config-db-install-account": "Туруорууга анаммыт бэлиэ-аат",
+       "config-db-username": "Билии олоҕун туһанааччы аата:",
        "mainpagetext": "'''«MediaWiki» сөпкө туруорулунна.'''",
        "mainpagedocfooter": "Биики программатын туһунан [//meta.wikimedia.org/wiki/Help:Contents справочникка] көрүөххүн сөп.\n\n== Саҕаланыыта ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Конфигурация уларытыытын параметрдара]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki релизтарын почтовай испииһэгэ]"
 }
index 542a38d..25febaf 100644 (file)
        "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.'''",
+       "mainpagetext": "<strong>Programje MediaWiki je bilo nameščeno.</strong>",
        "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/Special:MyLanguage/Manual:Configuration_settings Seznam konfiguracijskih nastavitev]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/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/Special:MyLanguage/Localisation#Translation_resources Prevedite MediaWiki v svoj jezik]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Izvedite, kako se boriti proti smetju na svojem wikiju]"
 }
index 5ba505e..fc6997d 100644 (file)
@@ -84,6 +84,6 @@
        "config-install-step-failed": "није успело",
        "config-help": "помоћ",
        "config-help-tooltip": "кликните да проширите",
-       "mainpagetext": "'''Медијавики је успешно инсталиран.'''",
+       "mainpagetext": "<strong>Медијавики је успешно инсталиран.</strong>",
        "mainpagedocfooter": "Погледајте [//meta.wikimedia.org/wiki/Help:Contents кориснички водич] за коришћење програма.\n\n== Увод ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Помоћ у вези са подешавањима]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Често постављена питања]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Дописна листа о издањима Медијавикија]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Научите како да се борете против спама на Вашој вики]"
 }
index b1a97e9..3e1faf9 100644 (file)
@@ -35,6 +35,6 @@
        "config-site-name": "Ime vikija:",
        "config-license-cc-0": "Creative Commons Zero (javno vlasništvo)",
        "config-skins": "Teme",
-       "mainpagetext": "'''MedijaViki je uspešno instaliran.'''",
+       "mainpagetext": "<strong>Medijaviki je uspešno instaliran.</strong>",
        "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/Special:MyLanguage/Manual:Configuration_settings Pomoć u vezi sa podešavanjima]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Najčešće postavljena pitanja]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mejling lista o izdanjima MedijaVikija]"
 }
index aba3d34..785c90b 100644 (file)
@@ -69,6 +69,6 @@
        "config-install-step-done": "әзер",
        "config-install-step-failed": "булмады",
        "config-help": "ярдәм",
-       "mainpagetext": "<strong>«MediaWiki» уңышлы куелды.</strong>",
+       "mainpagetext": "<strong>«MediaWiki» куелды.</strong>",
        "mainpagedocfooter": "Бу вики турында мәгълүматны [//meta.wikimedia.org/wiki/Help:Contents биредә] табып була.\n\n== Кайбер файдалы ресурслар ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Көйләнмәләр исемлеге (инг.)];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki турында еш бирелгән сораулар һәм җаваплар (инг.)];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki'ның яңа версияләре турында хәбәрләр яздырып алу];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language].\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]"
 }
index 899542c..0793918 100644 (file)
@@ -21,7 +21,7 @@
        "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-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>. Будь ласка, виправте ці налаштування і спробуйте знову.\n\n$1",
        "config-no-db": "Не вдалося знайти потрібний драйвер бази даних! Вам необхідно встановити драйвер бази даних для PHP. Підтримуються {{PLURAL:$2|такий тип|такі типи}} баз даних: $1.\n\nЯкщо ви скомпілювали PHP самостійно, переналаштуйте його з увімкненим клієнтом бази даних, наприклад за допомогою <code>./configure --with-mysqli</code>.\n\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-error": "<strong>Помилка: Опція PHP <code>[http://php.net/register_globals register_globals]</code> увімкнена.\nЩоб продовжити це встановлення, її треба вимкнути.</strong>\nДив. довідку, як це зробити, на [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals].",
-       "config-magic-quotes-gpc": "'''Фатальна помилка: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] увімкнена!'''\nЦя опція призводить до непередбачуваного пошкодження даних.\nВи не можете встановити і використовувати MediaWiki, поки не буде вимкнено цю опцію.",
-       "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-safe-mode": "'''Увага:''' Опція PHP [http://www.php.net/features.safe-mode «безпечний режим»] увімкнена.\nЦе може спричинити проблеми, зокрема із завантаженням файлів та вставкою математичних формул.",
        "config-xml-bad": "XML-модуть PHP відсутній.\nMediaWiki необхідні його функції, без цього модуля вона працювати не буде.\nВам може знадобитися встановити php-xml RPM пакет.",
        "config-pcre-old": "'''Фатальна помилка:''' потрібно PCRE версії $1 або пізнішої.\nВаш виконуваний файл PHP пов'язаний з PCRE версії $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Подробиці].",
        "config-pcre-no-utf8": "'''Помилка''': PCRE-модуть PHP, вочевидь, було зібрано без підтримки PCRE_UTF8.\nMediaWiki вимагає підтримку UTF-8 для коректної роботи.",
@@ -81,7 +76,6 @@
        "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-no-cache-apcu": "<strong>Увага:</strong> Не вдалося знайти [http://www.php.net/apcu APCu], [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-ns-site-name": "Те ж саме, що й назва вікі: $1",
        "config-ns-other": "Інше (вкажіть)",
        "config-ns-other-default": "MyWiki",
-       "config-project-namespace-help": "За прикладом Вікіпедії, чимало вікі тримають свої сторінки правил окремо від сторінок основного вмісту, у «'''просторі назв проекту'''».\nУсі назви сторінок у цьому просторі назв починаються з певного префікса, який Ви можете вказати тут.\nЗазвичай цей префікс виводиться з назви вікі, але не може містити знаки пунктуації, як-то «#» чи «:».",
+       "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-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-install-done": "<strong>Вітаємо!</strong>\nВи успішно встановили MediaWiki.\n\nІнсталятор згенерував файл <code>LocalSettings.php</code>, який містить усі Ваші налаштування.\n\nВам необхідно завантажити його і помістити у кореневу папку Вашої вікі (туди ж, де index.php). Завантаження мало початись автоматично.\n\nЯкщо завантаження не почалось або Ви його скасували, можете заново його почати, натиснувши на посилання внизу:\n\n$3\n\n<strong>Примітка</strong>: Якщо Ви не зробите цього зараз, цей файл не буде доступним пізніше, коли Ви вийдете з встановлення, не скачавши його.\n\nПісля виконання дій, описаних вище, Ви зможете <strong>[$2 увійти у свою вікі]</strong>.",
        "config-download-localsettings": "Завантажити <code>LocalSettings.php</code>",
        "config-help": "допомога",
        "config-help-tooltip": "натисніть, щоб розгорнути",
        "config-nofile": "Файл \"$1\" не знайдено. Його видалено?",
        "config-extension-link": "Чи знаєте ви, що ваше вікі підтримує [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions розширення]?\n\nВи можете переглядати [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category розширення по категорії] або в [//www.mediawiki.org/wiki/Extension_Matrix матрицю розширень] щоб побачити повний список розширень.",
-       "mainpagetext": "Програмне забезпечення «MediaWiki» успішно встановлене.",
+       "mainpagetext": "<strong>Програмне забезпечення «MediaWiki» встановлено.</strong>",
        "mainpagedocfooter": "Інформацію про роботу з цією вікі можна знайти в [//meta.wikimedia.org/wiki/Help:Contents посібнику користувача].\n\n== Деякі корисні ресурси ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Список налаштувань];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Часті питання з приводу MediaWiki];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Розсилка повідомлень про появу нових версій MediaWiki];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Локалізуйте MediaWiki своєю мовою]"
 }
index 57c4790..2644f3f 100644 (file)
@@ -15,7 +15,7 @@
        "config-localsettings-upgrade": "Một tập tin <code>LocalSettings.php</code> đã được phát hiện.\nĐể nâng cấp bản cài đặt này, xin nhập giá trị của <code>$wgUpgradeKey</code> trong hộp thoại bên dưới đây.\nBạn sẽ tìm thấy nó trong <code>LocalSettings.php</code>.",
        "config-localsettings-cli-upgrade": "Một tập tin <code>LocalSettings.php</code> đã được phát hiện.\nĐể nâng cấp bản cài đặt này, hãy chạy <code>update.php</code> thay thế.",
        "config-localsettings-key": "Chìa khóa nâng cấp:",
-       "config-localsettings-badkey": "Bạn đã cung cấp một chìa khóa sai.",
+       "config-localsettings-badkey": "Bạn đã cung cấp một chìa khóa nâng cấp sai.",
        "config-upgrade-key-missing": "Một bản cài đặt MediaWiki sẵn đã được phát hiện.\nĐể nâng cấp bản cài đặt này, hãy thêm dòng sau vào cuối <code>LocalSettings.php</code>:\n\n$1",
        "config-localsettings-incomplete": "Tập tin <code>LocalSettings.php</code> đã tồn tại hình như không hoàn chỉnh.\nBiến $1 chưa được đặt.\nXin hãy thay đổi <code>LocalSettings.php</code> để đặt biến này, rồi bấm “{{int:Config-continue}}”.",
        "config-localsettings-connection-error": "Đã xuất hiện lỗi khi kết nối với cơ sở dữ liệu dùng cấu hình trong <code>LocalSettings.php</code>. Xin hãy sửa lại cấu hình và thử lại.\n\n$1",
        "config-no-db": "Không tìm thấy một trình điều khiển cơ sở dữ liệu phù hợp! Bạn cần phải cài một trình điều khiển cơ sở dữ liệu cho PHP.\n{{PLURAL:$2|Loại|Các loại}} cơ sở dữ liệu sau đây được hỗ trợ: $1.\n\nNếu bạn đã biên dịch PHP lấy, cấu hình lại nó mà kích hoạt một trình khách cơ sở dữ liệu, ví dụ bằng lệnh <code>./configure --with-mysqli</code>.\nNếu bạn đã cài PHP từ một gói Debian hoặc Ubuntu, thì bạn cũng cần phải cài ví dụ gói <code>php5-mysql</code>.",
        "config-outdated-sqlite": "<strong>Chú ý:</strong> Bạn có SQLite $1, phiên bản này thấp hơn phiên bản yêu câu tối thiểu $2. SQLite sẽ không có tác dụng.",
        "config-no-fts3": "<strong>Chú ý:</strong> SQLite được biên dịch mà không có [//sqlite.org/fts3.html mô đun FTS3], nên các chức năng tìm kiếm sẽ bị vô hiệu trên hệ thống phía sau này.",
-       "config-register-globals-error": "<strong>Lỗi: Tùy chọn <code>[http://php.net/register_globals register_globals]</code> của PHP đã được kích hoạt.\nNó phải bị vô hiệu để tiếp tục quá trình cài đặt.</strong>\nXem [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] để biết cách thực hiện.",
-       "config-magic-quotes-gpc": "<strong>Lỗi chí tử: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] đang hoạt động!</strong>\nTùy chọn này sẽ làm hỏng dữ liệu nhập một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.",
-       "config-magic-quotes-runtime": "<strong>Lỗi chí tử: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] đang hoạt động!</strong>\nTùy chọn này sẽ làm hỏng dữ liệu nhập một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.",
-       "config-magic-quotes-sybase": "<strong>Lỗi chí tử: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] đang hoạt động!</strong>\nTùy chọn này sẽ làm hỏng dữ liệu nhập một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.",
        "config-mbstring": "<strong>Lỗi chí tử: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] được kích hoạt!</strong>\nTùy chọn này gây lỗi và có thể làm hỏng dữ liệu một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.",
-       "config-safe-mode": "<strong>Cảnh báo:</strong> [http://www.php.net/features.safe-mode Chế độ an toàn] của PHP đang được kích hoạt.\nNó có thể gây vấn đề, nhất là nếu dùng các chức năng tải lên tập tin và <code>math</code>.",
        "config-xml-bad": "Mô đun XML của PHP đang bị thiếu.\nMediaWiki yêu cầu các hàm trong mô đun này và sẽ không hoạt động trong cấu hình này.\nBạn có thể cần cài đặt gói RPM php-xml.",
        "config-pcre-old": "<strong>Lỗi chí tử:</strong> PCRE $1 trở lên được yêu cầu phải có.\nBản nhị phân PHP của bạn dang được liên kết với PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Thông tin bổ sung].",
        "config-pcre-no-utf8": "<strong>Lỗi chí tử:</strong> Mô đun PCRE của PHP dường như được biên dịch mà không có hỗ trợ PCRE_UTF8.\nMediaWiki yêu cầu phải có hỗ trợ UTF-8 để hoạt động chính xác.",
@@ -75,7 +70,7 @@
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] đã được cài đặt",
        "config-apc": "[http://www.php.net/apc APC] đã được cài đặt",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] đã được cài đặt",
-       "config-no-cache": "<strong>Cảnh báo:</strong> Không tìm thấy [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] hoặc [http://www.iis.net/download/WinCacheForPhp WinCache].\nVùng nhớ đệm đối tượng không được kích hoạt.",
+       "config-no-cache-apcu": "<strong>Cảnh báo:</strong> Không tìm thấy [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache], hoặc [http://www.iis.net/download/WinCacheForPhp WinCache].\nVùng nhớ đệm đối tượng không được kích hoạt.",
        "config-mod-security": "<strong>Cảnh báo:</strong> [http://modsecurity.org/ mod_security]/mod_security2 đã được kích hoạt trên máy chủ Web của bạn. Nhiều cấu hình phổ biến của phần mềm này sẽ gây vấn đề cho MediaWiki và những phần mềm khác cho phép người dùng đăng các nội dung tùy tiện.\nNếu có thể, bạn nên vô hiệu nó. Còn không, tra cứu [http://modsecurity.org/documentation/ tài liệu mod_security] hoặc liên hệ với nhà cung cấp hỗ trợ cho máy chủ nếu bạn gặp những lỗi ngẫu nhiên nào đó.",
        "config-diff3-bad": "Không tìm thấy GNU diff3.",
        "config-git": "Đã tìm thấy phần mềm điều khiển phiên bản Git: <code>$1</code>.",
        "config-ns-site-name": "Cùng với tên wiki: $1",
        "config-ns-other": "Khác (định rõ)",
        "config-ns-other-default": "WikiTôi",
-       "config-project-namespace-help": "Ví dụ sau đây của Wikipedia, nhiều wiki tách các trang sách họ với các trang nội dung, trong một \"''' không gian tên dự án'''\".\nTất cả các tiêu đề trang trong không gian tên này bắt đầu với một tiền tố nhất định, bạn có thể xác định ở đây.\nThông thường, tiền tố này được bắt nguồn từ tên của wiki, nhưng nó không thể chứa các ký tự đặc biệt như \"#\" hoặc \":\".",
+       "config-project-namespace-help": "Nhiều wiki bắt chước Wikipedia bằng cách tách các trang quy định ra khỏi các trang nội dung trong một '''không gian tên dự án'''.\nTất cả các tên trang trong không gian tên này bắt đầu với một tiền tố cụ thể, bạn có thể xác định ở đây.\nThông thường, tiền tố này bắt nguồn từ tên của wiki, nhưng nó không thể chứa các ký tự đặc biệt như “#” hoặc “:”.",
        "config-ns-invalid": "Không gian tên cụ thể \"<nowiki>$1</nowiki>\" không hợp lệ.\nXác định một không gian tên dự án khác.",
        "config-ns-conflict": "Không gian tên cụ thể \"<nowiki>$1</nowiki>\" xung đột với một không gian tên MediaWiki mặc định.\nXác định một không gian tên dự án khác.",
        "config-admin-box": "Tài khoản bảo quản viên",
        "config-install-mainpage": "Đang tạo trang đầu với nội dung mặc định",
        "config-install-extension-tables": "Đang tạo bảng cho các phần mở rộng được kích hoạt",
        "config-install-mainpage-failed": "Không thể chèn trang đầu: $1",
-       "config-install-done": "<strong>Xin chúc mừng!</strong>\nBạn đã cài đặt thành công MediaWiki.\n\nBộ cài đặt đã tạo ra một tập tin <code>LocalSettings.php</code>.\nTập tin này chứa tất cả các cấu hình của bạn.\n\nBạn sẽ cần phải tải nó về và đặt nó trong thư mục cài đặt wiki của bạn (cùng thư mục với index.php). Việc tải về có lẽ sẽ được khởi động tự động.\n\nNếu bản tải về không được cung cấp, hoặc nếu bạn hủy bỏ nó, bạn có thể khởi động lại tải về bằng cách nhấn vào liên kết dưới đây:\n\n$3\n\n<strong>Lưu ý:</strong> Nếu bạn không làm điều này ngay bây giờ, điều này sẽ tạo ra tập tin cấu hình sẽ không có giá trị cho bạn sau này nếu bạn thoát khỏi trình cài đặt mà không tải nó về.\n\nKhi đã việc tải về đã hoàn thành, bạn có thể <strong>[$2 truy cập trang wiki của bạn]</strong>.",
+       "config-install-done": "<strong>Xin chúc mừng!</strong>\nBạn đã cài đặt MediaWiki.\n\nBộ cài đặt đã tạo ra một tập tin <code>LocalSettings.php</code>.\nTập tin này chứa tất cả các cấu hình của bạn.\n\nBạn sẽ cần phải tải nó về và đặt nó trong thư mục cài đặt wiki của bạn (cùng thư mục với index.php). Việc tải về có lẽ sẽ được khởi động tự động.\n\nNếu bản tải về không được cung cấp, hoặc nếu bạn hủy bỏ nó, bạn có thể khởi động lại tải về bằng cách nhấn vào liên kết dưới đây:\n\n$3\n\n<strong>Lưu ý:</strong> Nếu bạn không làm điều này ngay bây giờ, điều này sẽ tạo ra tập tin cấu hình sẽ không có giá trị cho bạn sau này nếu bạn thoát khỏi trình cài đặt mà không tải nó về.\n\nKhi đã việc tải về đã hoàn thành, bạn có thể <strong>[$2 truy cập trang wiki của bạn]</strong>.",
        "config-download-localsettings": "Tải về <code>LocalSettings.php</code>",
        "config-help": "Trợ giúp",
        "config-help-tooltip": "nhấn chuột để mở rộng",
        "config-nofile": "Không tìm thấy tập tin “$1”. Nó có phải bị xóa không?",
        "config-extension-link": "Bạn có biết rằng wiki của bạn có hỗ trợ [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions mở rộng]?\n\nBạn có thể truy cập [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category phần mở rộng theo thể loại] hoặc [//www.mediawiki.org/wiki/Extension_Matrix Ma trận Mở rộng] để xem danh sách đầy đủ các phần mở rộng.",
-       "mainpagetext": "'''MediaWiki đã được cài đặt thành công.'''",
+       "mainpagetext": "'''MediaWiki đã được cài đặt.'''",
        "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/Special:MyLanguage/Manual:Configuration_settings Danh sách các thiết lập cấu hình]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/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]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Tìm hiểu cách chống spam tại wiki của bạn]"
 }
index 4906b04..60133f7 100644 (file)
@@ -69,6 +69,6 @@
        "config-download-localsettings": "אראפלאדן <code>LocalSettings.php</code>",
        "config-help": "הילף",
        "config-nofile": "מ'האט נישט געקענט טרעפן די טעקע \"$1\". צי האט מען זי אויסגעמעקט?",
-       "mainpagetext": "'''מעדיעוויקי אינסטאלירט מיט דערפאלג.'''",
+       "mainpagetext": "<strong> מעדיעוויקי אינסטאלירט.</strong>",
        "mainpagedocfooter": "גיט זיך אן עצה מיט [//meta.wikimedia.org/wiki/Help:Contents באניצער'ס וועגווײַזער] פֿאר אינפֿארמאציע וויאזוי זיך באנוצן מיט וויקי ווייכוואַרג.\n\n== נוצליכע וועבלינקען פֿאַר אנהייבערס ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings רשימה פון קאנפֿיגוראציעס]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ אפֿט געפֿרעגטע שאלות]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce מעדיעוויקי באפֿרײַאונג פאסטליסטע]* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources איבערזעצן מעדיעוויקי אין אײַער שפראך]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam לערנט וויאזוי צו באקעמפן בפעם אויף אייער וויקי]"
 }
index 87dbcb7..8c6988b 100644 (file)
@@ -86,7 +86,6 @@
        "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": "<strong>警告:</strong>找不到[http://www.php.net/apc APC]、[http://xcache.lighttpd.net/ XCache]或[http://www.iis.net/download/WinCacheForPhp WinCache]。\n对象缓冲未启用。",
        "config-no-cache-apcu": "<strong>警告:</strong>找不到[http://www.php.net/apcu APCu]、[http://xcache.lighttpd.net/ XCache]或[http://www.iis.net/download/WinCacheForPhp WinCache]。\n对象缓存未启用。",
        "config-mod-security": "<strong>警告:</strong>您的web服务器已启用[http://modsecurity.org/ mod_security]/mod_security2。它的很多常见配置可能导致MediaWiki及其他软件允许用户发布任意内容的问题。如果可能,这应当被禁用。否则,当您遭遇随机错误时,请参考[http://modsecurity.org/documentation/ mod_security 文档]或联络您的主机支持。",
        "config-diff3-bad": "找不到GNU diff3。",
        "config-ns-site-name": "与wiki名称相同:$1",
        "config-ns-other": "其他(自定义)",
        "config-ns-other-default": "我的Wiki",
-       "config-project-namespace-help": "依循维基百科形成的惯例,许多wiki将他们的方针页面存放在与内容页面不同的“'''项目名字空间'''”中。所有位于该名字空间下的页面标题都会被冠以固定的前缀,您可以在此处指定这一前缀。传统上,这一前缀应与wiki的命名保持一致,但请勿在其中使用标点符号,如“#”或“:”。",
+       "config-project-namespace-help": "依循维基百科形成的惯例,许多wiki将他们的方针页面存放在与内容页面不同的'''项目名字空间'''中。所有位于该名字空间下的页面标题都会被冠以固定的前缀,您可以在此处指定这一前缀。通常,这一前缀应与wiki的命名保持一致,但请勿在其中使用标点符号,如“#”或“:”。",
        "config-ns-invalid": "指定的名字空间“<nowiki>$1</nowiki>”无效,请为项目名字空间指定其他名称。",
        "config-ns-conflict": "指定的名字空间“<nowiki>$1</nowiki>”与默认的MediaWiki名字空间冲突。请指定一个不同的项目名字空间。",
        "config-admin-box": "管理员帐号",
        "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-install-done": "<strong>恭喜!</strong>\n您已经安装了MediaWiki。\n\n安装程序已经生成了<code>LocalSettings.php</code>文件,其中包含了您所有的配置。\n\n您需要下载该文件,并将其放在您wiki的根目录(index.php的同级目录)中。稍后下载将自动开始。\n\n如果浏览器没有提示您下载,或者您取消了下载,您可以点击下面的链接重新开始下载:\n\n$3\n\n<strong>注意:</strong>如果您现在不完成本步骤,而是没有下载便退出了安装过程,此后您将无法获得自动生成的配置文件。\n\n当本步骤完成后,您可以<strong>[$2 进入您的wiki]</strong>。",
        "config-download-localsettings": "下载<code>LocalSettings.php</code>",
        "config-help": "帮助",
        "config-help-tooltip": "单击展开",
        "config-nofile": "找不到文件“$1”。它是否已被删除?",
        "config-extension-link": "您是否知道您的wiki支持[//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions 拓展]?\n您可浏览[//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category 拓展分类]。",
-       "mainpagetext": "'''已成功安装MediaWiki。'''",
+       "mainpagetext": "<strong>已安装MediaWiki。</strong>",
        "mainpagedocfooter": "请查阅[//meta.wikimedia.org/wiki/Help:Contents 用户指南]以获取使用本wiki软件的信息!\n\n== 入门 ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings MediaWiki配置设置列表]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/zh-hans MediaWiki常见问题]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki发布邮件列表]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources 本地化MediaWiki到您的语言]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam 了解如何在您的wiki上打击破坏]"
 }
index 1f319d3..4f57b1f 100644 (file)
        "config-no-db": "找不到合適的資料庫驅動程式!您需要安裝 PHP 資料庫驅動程式。\n目前支援以下{{PLURAL:$2|類型|類型}}的資料庫: $1 。\n\n如果您是自行編譯 PHP,您必須重新設定並開啟資料庫客戶端,例:使用 <code>./configure --with-mysqli</code> 指令參數。\n如果您是使用 Debian 或 Ubuntu 的套件安裝 PHP ,您則需要額外安裝,例:<code>php5-mysql</code> 套件。",
        "config-outdated-sqlite": "<strong>警告:</strong>您已安裝 SQLite $1,但是它的版本低於最低需求版本 $2。 因此您無法使用 SQLite。",
        "config-no-fts3": "<strong>警告:</strong> SQLite 編譯時未包含 [//sqlite.org/fts3.html FTS3 模組],後台搜尋功能將無法使用。",
-       "config-register-globals-error": "<strong>錯誤:PHP 的 <code>[http://php.net/register_globals register_globals]</code> 選項已開啟。\n要繼續安裝程序必須關閉該選項。</strong>\n請參考 [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] 以取得操作說明。",
-       "config-magic-quotes-gpc": "<strong>嚴重:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] 已開啟!</strong>\n此選項會在無法預期的情況下損壞資料。\n除非您將該選項關閉,否鄍您無法安裝或使用 MediaWiki。",
-       "config-magic-quotes-runtime": "<strong>嚴重:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] 選項被開啟!</strong>\n此選項會導致資料在無法預測的情況下損壞。\n您必須將開選項關閉方可繼續安裝 MediaWiki。",
-       "config-magic-quotes-sybase": "<strong>嚴重:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] 選項被開啟!</strong>\n此選項會導致資料在無法預測的情況下損壞。\n您必須將開選項關閉方可繼續安裝 MediaWiki。",
        "config-mbstring": "<strong>嚴重:[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] 選項被開啟!</strong>\n此選項會導致資料在無法預測的情況下損壞。\n您必須將開選項關閉方可繼續安裝 MediaWiki。",
-       "config-safe-mode": "<strong>警告:</strong>PHP 的 [http://www.php.net/features.safe-mode 安全模式] 選項被開啟。它可能會導致檔案上傳與數學函數 <code>math</code> 的問題。",
        "config-xml-bad": "PHP 缺少的 XML 模組。\nMediaWiki 需要使用此模組中所提供的函數,且在目前的設定下將無法繼續作業。\n您可能需要安裝 php-xml RPM 套件。",
        "config-pcre-old": "<strong>嚴重:</strong> 需要使用 PCRE $1 或更新的版本。\n您的 PHP 執行檔使用的是 PCRE $2。\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE 詳細資訊]。",
        "config-pcre-no-utf8": "<strong>嚴重:</strong> PHP 的 PCRE 模組在編譯時未包含 PCRE_UTF8 支援。\nMediaWiki 需要支援 UTF-8 才可正常運作。",
@@ -83,7 +78,6 @@
        "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": "<strong>警告:</strong> 找不到 [http://www.php.net/apc APC]、[http://xcache.lighttpd.net/ XCache] 或 [http://www.iis.net/download/WinCacheForPhp WinCache]。\n無法開啟物件快取功能。",
        "config-mod-security": "<strong>警告:</strong>您的網頁伺服器已開啟 [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-ns-generic": "專案",
        "config-ns-site-name": "同 Wiki 名稱:$1",
        "config-ns-other": "其他 (請註明)",
-       "config-ns-other-default": "我的 Wiki",
+       "config-ns-other-default": "我的 wiki",
        "config-project-namespace-help": "許多 Wiki 以維基百科(Wikipedia)做為範例將政策頁面從內容頁面抽離,放置在 \"'''專案命名空間'''\" 中。\n所有在此命名空間裡的頁面都會有特定的字首,您可以在此處設定。\n通常這些字首是由該 Wiki 的名稱所衍伸出來,但無法使用標點符號,如 \"#\" 或 \":\"。",
        "config-ns-invalid": "您指定的命名空間 \"<nowiki>$1</nowiki>\" 無效,\n請指定另一個專案命名空間。",
        "config-ns-conflict": "您指定的命名空間 \"<nowiki>$1</nowiki>\" 與 MediaWiki 預設的命名空間衝突。\n請指定另一個專案命名空間。",
        "config-profile-wiki": "開放式 Wiki",
        "config-profile-no-anon": "需要註冊帳號",
        "config-profile-fishbowl": "僅授權的編輯者",
-       "config-profile-private": "封閉式 Wiki",
+       "config-profile-private": "私人 wiki",
        "config-profile-help": "Wiki 最佳的運作方式是盡可能讓大家都可以編輯文件。\n在 MediaWiki,可以很輕易的審查最近做的所有變更動作,並且可以還原由新手或惡意使用者造成的損害。\n\n不論如何,很多人發現 MediaWiki 可以廣泛的運用在各種地方,但並不是很容易可以說服每個人都遵守對 Wiki 有益的方式。\n所以您必須做出以下選擇。\n\n使用 <strong>{{int:config-profile-wiki}}</strong> 模式,允許所有人編輯文章,包含未匿名使用者。\n使用 <strong>{{int:config-profile-no-anon}}</strong> 模式,允許所有人編輯文章,不包含未登入的使用者。此模式較能管理所有使用者的言論,但會扼殺臨時使用者的貢獻機會。\n\n使用 <strong>{{int:config-profile-fishbowl}}</strong> 模式,僅經核准的使用者可以編輯,所有人可以檢視頁面,包含修訂的記錄。\n使用 <strong>{{int:config-profile-private}}</strong> 模式,僅經核准的使用者可以編輯、檢視頁面。\n\n有關更多複雜的使用者權限設定可在安裝程序結束後設定,請參考 [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights 相關文件說明]。",
        "config-license": "版權聲明與授權條款:",
        "config-license-none": "無授權條款頁腳",
index 37e3d0f..9ccf6f8 100644 (file)
@@ -47,6 +47,9 @@ abstract class Job implements IJobSpecification {
        /** @var string Text for error that occurred last */
        protected $error;
 
+       /** @var callable[] */
+       protected $teardownCallbacks = [];
+
        /**
         * Run the job
         * @return bool Success
@@ -279,6 +282,25 @@ abstract class Job implements IJobSpecification {
                return $this->hasRootJobParams() && !empty( $this->params['rootJobIsSelf'] );
        }
 
+       /**
+        * @param callable $callback
+        * @since 1.27
+        */
+       protected function addTeardownCallback( $callback ) {
+               $this->teardownCallbacks[] = $callback;
+       }
+
+       /**
+        * Do any final cleanup after run(), deferred updates, and all DB commits happen
+        *
+        * @since 1.27
+        */
+       public function teardown() {
+               foreach ( $this->teardownCallbacks as $callback ) {
+                       call_user_func( $callback );
+               }
+       }
+
        /**
         * Insert a single job into the queue.
         * @return bool True on success
@@ -293,14 +315,6 @@ abstract class Job implements IJobSpecification {
         * @return string
         */
        public function toString() {
-               $truncFunc = function ( $value ) {
-                       $value = (string)$value;
-                       if ( mb_strlen( $value ) > 1024 ) {
-                               $value = "string(" . mb_strlen( $value ) . ")";
-                       }
-                       return $value;
-               };
-
                $paramString = '';
                if ( $this->params ) {
                        foreach ( $this->params as $key => $value ) {
@@ -310,14 +324,14 @@ abstract class Job implements IJobSpecification {
                                if ( is_array( $value ) ) {
                                        $filteredValue = [];
                                        foreach ( $value as $k => $v ) {
-                                               if ( is_scalar( $v ) ) {
-                                                       $filteredValue[$k] = $truncFunc( $v );
+                                               $json = FormatJson::encode( $v );
+                                               if ( $json === false || mb_strlen( $json ) > 512 ) {
+                                                       $filteredValue[$k] = gettype( $v ) . '(...)';
                                                } else {
-                                                       $filteredValue = null;
-                                                       break;
+                                                       $filteredValue[$k] = $v;
                                                }
                                        }
-                                       if ( $filteredValue && count( $filteredValue ) < 10 ) {
+                                       if ( count( $filteredValue ) <= 10 ) {
                                                $value = FormatJson::encode( $filteredValue );
                                        } else {
                                                $value = "array(" . count( $value ) . ")";
@@ -326,7 +340,12 @@ abstract class Job implements IJobSpecification {
                                        $value = "object(" . get_class( $value ) . ")";
                                }
 
-                               $paramString .= "$key={$truncFunc( $value )}";
+                               $flatValue = (string)$value;
+                               if ( mb_strlen( $value ) > 1024 ) {
+                                       $flatValue = "string(" . mb_strlen( $value ) . ")";
+                               }
+
+                               $paramString .= "$key={$flatValue}";
                        }
                }
 
index aaf9fb0..479ec32 100644 (file)
@@ -452,7 +452,6 @@ class JobQueueDB extends JobQueue {
         * @see JobQueue::doAck()
         * @param Job $job
         * @throws MWException
-        * @return Job|bool
         */
        protected function doAck( Job $job ) {
                if ( !isset( $job->metadata['id'] ) ) {
@@ -476,8 +475,6 @@ class JobQueueDB extends JobQueue {
                } catch ( DBError $e ) {
                        $this->throwDBException( $e );
                }
-
-               return true;
        }
 
        /**
index ecf1a28..bd832db 100644 (file)
@@ -49,7 +49,7 @@
 class JobQueueFederated extends JobQueue {
        /** @var HashRing */
        protected $partitionRing;
-       /** @var array (partition name => JobQueue) reverse sorted by weight */
+       /** @var JobQueue[] (partition name => JobQueue) reverse sorted by weight */
        protected $partitionQueues = [];
 
        /** @var int Maximum number of partitions to try */
@@ -311,18 +311,17 @@ class JobQueueFederated extends JobQueue {
                        throw new MWException( "The given job has no defined partition name." );
                }
 
-               return $this->partitionQueues[$job->metadata['QueuePartition']]->ack( $job );
+               $this->partitionQueues[$job->metadata['QueuePartition']]->ack( $job );
        }
 
        protected function doIsRootJobOldDuplicate( Job $job ) {
-               $params = $job->getRootJobParams();
-               $sigature = $params['rootJobSignature'];
-               $partition = $this->partitionRing->getLiveLocation( $sigature );
+               $signature = $job->getRootJobParams()['rootJobSignature'];
+               $partition = $this->partitionRing->getLiveLocation( $signature );
                try {
                        return $this->partitionQueues[$partition]->doIsRootJobOldDuplicate( $job );
                } catch ( JobQueueError $e ) {
                        if ( $this->partitionRing->ejectFromLiveRing( $partition, 5 ) ) {
-                               $partition = $this->partitionRing->getLiveLocation( $sigature );
+                               $partition = $this->partitionRing->getLiveLocation( $signature );
                                return $this->partitionQueues[$partition]->doIsRootJobOldDuplicate( $job );
                        }
                }
@@ -331,14 +330,13 @@ class JobQueueFederated extends JobQueue {
        }
 
        protected function doDeduplicateRootJob( IJobSpecification $job ) {
-               $params = $job->getRootJobParams();
-               $sigature = $params['rootJobSignature'];
-               $partition = $this->partitionRing->getLiveLocation( $sigature );
+               $signature = $job->getRootJobParams()['rootJobSignature'];
+               $partition = $this->partitionRing->getLiveLocation( $signature );
                try {
                        return $this->partitionQueues[$partition]->doDeduplicateRootJob( $job );
                } catch ( JobQueueError $e ) {
                        if ( $this->partitionRing->ejectFromLiveRing( $partition, 5 ) ) {
-                               $partition = $this->partitionRing->getLiveLocation( $sigature );
+                               $partition = $this->partitionRing->getLiveLocation( $signature );
                                return $this->partitionQueues[$partition]->doDeduplicateRootJob( $job );
                        }
                }
index ac02866..0a0a7a2 100644 (file)
@@ -80,7 +80,8 @@ class JobRunner implements LoggerAwareInterface {
         * The response map also has:
         *   - backoffs : the (job type => seconds) map of backoff times
         *   - elapsed  : the total time spent running tasks in ms
-        *   - reached  : the reason the script finished, one of (none-ready, job-limit, time-limit)
+        *   - reached  : the reason the script finished, one of (none-ready, job-limit, time-limit,
+        *  memory-limit)
         *
         * This method outputs status information only if a debug handler was set.
         * Any exceptions are caught and logged, but are not reported as output.
@@ -265,6 +266,7 @@ class JobRunner implements LoggerAwareInterface {
 
                        DeferredUpdates::doUpdates();
                        $this->commitMasterChanges( $job );
+                       $job->teardown();
                } catch ( Exception $e ) {
                        MWExceptionHandler::rollbackMasterChangesAndLog( $e );
                        $status = false;
@@ -288,9 +290,9 @@ class JobRunner implements LoggerAwareInterface {
                        $stats->timing( "jobqueue.pickup_delay.$jType", 1000 * $pickupDelay );
                }
                // Record root job age for jobs being run
-               $root = $job->getRootJobParams();
-               if ( $root['rootJobTimestamp'] ) {
-                       $age = max( 0, $popTime - wfTimestamp( TS_UNIX, $root['rootJobTimestamp'] ) );
+               $rootTimestamp = $job->getRootJobParams()['rootJobTimestamp'];
+               if ( $rootTimestamp ) {
+                       $age = max( 0, $popTime - wfTimestamp( TS_UNIX, $rootTimestamp ) );
                        $stats->timing( "jobqueue.pickup_root_age.$jType", 1000 * $age );
                }
                // Track the execution time for jobs
@@ -504,7 +506,7 @@ class JobRunner implements LoggerAwareInterface {
 
                $ms = intval( 1000 * $dbwSerial->pendingWriteQueryDuration() );
                $msg = $job->toString() . " COMMIT ENQUEUED [{$ms}ms of writes]";
-               $this->logger->warning( $msg );
+               $this->logger->info( $msg );
                $this->debugCallback( $msg );
 
                // Wait for an exclusive lock to commit
index 616c6d6..d636dc6 100644 (file)
@@ -216,7 +216,7 @@ class JobSpecification implements IJobSpecification {
                        'opts'   => $this->opts,
                        'title'  => [
                                'ns'  => $this->title->getNamespace(),
-                               'key' => $this->title->getDbKey()
+                               'key' => $this->title->getDBkey()
                        ]
                ];
        }
index 395da22..bc2f7c4 100644 (file)
@@ -35,6 +35,10 @@ class AssembleUploadChunksJob extends Job {
        public function run() {
                /** @noinspection PhpUnusedLocalVariableInspection */
                $scope = RequestContext::importScopedSession( $this->params['session'] );
+               $this->addTeardownCallback( function () use ( &$scope ) {
+                       ScopedCallback::consume( $scope ); // T126450
+               } );
+
                $context = RequestContext::getMain();
                $user = $context->getUser();
                try {
index 34ce4fe..a6d2f70 100644 (file)
@@ -37,6 +37,10 @@ class PublishStashedFileJob extends Job {
        public function run() {
                /** @noinspection PhpUnusedLocalVariableInspection */
                $scope = RequestContext::importScopedSession( $this->params['session'] );
+               $this->addTeardownCallback( function () use ( &$scope ) {
+                       ScopedCallback::consume( $scope ); // T126450
+               } );
+
                $context = RequestContext::getMain();
                $user = $context->getUser();
                try {
index 7fb020b..7f50055 100644 (file)
@@ -116,7 +116,7 @@ class BacklinkJobUtils {
                        foreach ( array_chunk( $titles, $cSize ) as $titleBatch ) {
                                $pages = [];
                                foreach ( $titleBatch as $tl ) {
-                                       $pages[$tl->getArticleId()] = [ $tl->getNamespace(), $tl->getDBKey() ];
+                                       $pages[$tl->getArticleID()] = [ $tl->getNamespace(), $tl->getDBkey() ];
                                }
                                $jobs[] = new $class(
                                        $title, // maintain parent job title
@@ -137,6 +137,10 @@ class BacklinkJobUtils {
                                                'batchSize' => $realBSize,
                                                'subranges' => array_slice( $ranges, 1 )
                                        ],
+                                       // Track how many times the base job divided for debugging
+                                       'division'      => isset( $params['division'] )
+                                               ? ( $params['division'] + 1 )
+                                               : 1
                                ] + $extraParams
                        );
                }
index ece29e8..2f2faed 100644 (file)
@@ -60,41 +60,13 @@ class CSSMin {
        /* Static Methods */
 
        /**
-        * Gets a list of local file paths which are referenced in a CSS style sheet.
-        *
-        * If you wish non-existent files to be listed too, use getAllLocalFileReferences().
-        *
-        * For backwards-compatibility, if the second parameter is not given or null,
-        * this function will return an empty array instead of erroring out.
-        *
-        * @param string $source CSS stylesheet source to process
-        * @param string $path File path where the source was read from
-        * @return array List of local file references
-        */
-       public static function getLocalFileReferences( $source, $path = null ) {
-               if ( $path === null ) {
-                       return [];
-               }
-
-               $files = self::getAllLocalFileReferences( $source, $path );
-
-               // Skip non-existent files
-               $files = array_filter( $files, function ( $file ) {
-                       return file_exists( $file );
-               } );
-
-               return $files;
-       }
-
-       /**
-        * Gets a list of local file paths which are referenced in a CSS style sheet, including
-        * non-existent files.
+        * Get a list of local files referenced in a stylesheet (includes non-existent files).
         *
         * @param string $source CSS stylesheet source to process
         * @param string $path File path where the source was read from
         * @return array List of local file references
         */
-       public static function getAllLocalFileReferences( $source, $path ) {
+       public static function getLocalFileReferences( $source, $path ) {
                $stripped = preg_replace( '/' . self::COMMENT_REGEX . '/s', '', $source );
                $path = rtrim( $path, '/' ) . '/';
                $files = [];
index dec55c9..76e23cf 100644 (file)
@@ -144,7 +144,7 @@ abstract class GenericArrayObject extends ArrayObject {
                if ( !$this->hasValidType( $value ) ) {
                        throw new InvalidArgumentException(
                                'Can only add ' . $this->getObjectType() . ' implementing objects to '
-                               . get_called_class() . '.'
+                               . static::class . '.'
                        );
                }
 
index cd9aad8..a9da366 100644 (file)
@@ -33,7 +33,7 @@
  * @file
  */
 class MWMessagePack {
-       /** @var boolean|null Whether current system is bigendian. **/
+       /** @var bool|null Whether current system is bigendian. **/
        public static $bigendian = null;
 
        /**
index 4e19025..331f2d5 100644 (file)
@@ -105,8 +105,7 @@ class MultiHttpClient {
         * @return array Response array for request
         */
        final public function run( array $req, array $opts = [] ) {
-               $req = $this->runMulti( [ $req ], $opts );
-               return $req[0]['response'];
+               return $this->runMulti( [ $req ], $opts )[0]['response'];
        }
 
        /**
index 3a8b55e..304b99b 100644 (file)
@@ -94,7 +94,6 @@ class RiffExtractor {
         * @return int
         */
        public static function extractUInt32( $string ) {
-               $unpacked = unpack( 'V', $string );
-               return $unpacked[1];
+               return unpack( 'V', $string )[1];
        }
 };
index c71b16e..60ec922 100644 (file)
@@ -21,8 +21,6 @@
  * @ingroup Cache
  */
 
-use Psr\Log\LoggerInterface;
-
 /**
  * Wrapper around a BagOStuff that caches data in memory
  *
@@ -50,11 +48,9 @@ class CachedBagOStuff extends HashBagOStuff {
 
        protected function doGet( $key, $flags = 0 ) {
                $ret = parent::doGet( $key, $flags );
-               if ( $ret === false ) {
+               if ( $ret === false && !$this->hasKey( $key ) ) {
                        $ret = $this->backend->doGet( $key, $flags );
-                       if ( $ret !== false ) {
-                               $this->set( $key, $ret, 0, self::WRITE_CACHE_ONLY );
-                       }
+                       $this->set( $key, $ret, 0, self::WRITE_CACHE_ONLY );
                }
                return $ret;
        }
@@ -76,11 +72,6 @@ class CachedBagOStuff extends HashBagOStuff {
                return true;
        }
 
-       public function setLogger( LoggerInterface $logger ) {
-               parent::setLogger( $logger );
-               $this->backend->setLogger( $logger );
-       }
-
        public function setDebug( $bool ) {
                parent::setDebug( $bool );
                $this->backend->setDebug( $bool );
index 6e7fb0c..e03cec6 100644 (file)
@@ -60,8 +60,19 @@ class HashBagOStuff extends BagOStuff {
                return true;
        }
 
+       /**
+        * Does this bag have a non-null value for the given key?
+        *
+        * @param string $key
+        * @return bool
+        * @since 1.27
+        */
+       protected function hasKey( $key ) {
+               return isset( $this->bag[$key] );
+       }
+
        protected function doGet( $key, $flags = 0 ) {
-               if ( !isset( $this->bag[$key] ) ) {
+               if ( !$this->hasKey( $key ) ) {
                        return false;
                }
 
index ae82ca1..59322b6 100644 (file)
@@ -791,8 +791,7 @@ class MemcachedClient {
         * @param string $host
         */
        function _dead_host( $host ) {
-               $parts = explode( ':', $host );
-               $ip = $parts[0];
+               $ip = explode( ':', $host )[0];
                $this->_host_dead[$ip] = time() + 30 + intval( rand( 0, 10 ) );
                $this->_host_dead[$host] = $this->_host_dead[$ip];
                unset( $this->_cache_sock[$host] );
index ec588ce..3e88cb1 100644 (file)
@@ -52,7 +52,7 @@ class MultiWriteBagOStuff extends BagOStuff {
         *      only use the primary store.
         *   - replication: Either 'sync' or 'async'. This controls whether writes
         *      to secondary stores are deferred when possible. Async writes
-        *      require setting 'asyncCallback'. HHVM register_postsend_function() function.
+        *      require setting 'asyncHandler'. HHVM register_postsend_function() function.
         *      Async writes can increase the chance of some race conditions
         *      or cause keys to expire seconds later than expected. It is
         *      safe to use for modules when cached values: are immutable,
index d2dd89f..16c9331 100644 (file)
@@ -109,10 +109,10 @@ class RestbaseVirtualRESTService extends VirtualRESTService {
 
                $result = [];
                foreach ( $reqs as $key => $req ) {
-                       $parts = explode( '/', $req['url'] );
-                       if ( $parts[1] === 'v3' ) {
+                       $version = explode( '/', $req['url'] )[1];
+                       if ( $version === 'v3' ) {
                                $result[$key] = $this->onParsoid3Request( $req, $idGeneratorFunc );
-                       } elseif ( $parts[1] === 'v1' ) {
+                       } elseif ( $version === 'v1' ) {
                                $result[$key] = $this->onParsoid1Request( $req, $idGeneratorFunc );
                        } else {
                                throw new Exception( "Only v1 and v3 are supported." );
index c64fe34..4b8ad5e 100644 (file)
@@ -134,8 +134,7 @@ class VirtualRESTServiceClient {
         * @return array Response array for request
         */
        public function run( array $req ) {
-               $responses = $this->runMulti( [ $req ] );
-               return $responses[0];
+               return $this->runMulti( [ $req ] )[0];
        }
 
        /**
index 3b470ec..012d53c 100644 (file)
@@ -33,6 +33,8 @@ class DeleteLogFormatter extends LogFormatter {
                $key = parent::getMessageKey();
                if ( in_array( $this->entry->getSubtype(), [ 'event', 'revision' ] ) ) {
                        if ( count( $this->getMessageParameters() ) < 5 ) {
+                               // Messages: logentry-delete-event-legacy, logentry-delete-revision-legacy,
+                               // logentry-suppress-event-legacy, logentry-suppress-revision-legacy
                                return "$key-legacy";
                        }
                }
index e76aa29..1d0a543 100644 (file)
@@ -419,6 +419,9 @@ class ManualLogEntry extends LogEntryBase {
        /** @var int A rev id associated to the log entry */
        protected $revId = 0;
 
+       /** @var array Change tags add to the log entry */
+       protected $tags = null;
+
        /** @var int Deletion state of the log entry */
        protected $deleted;
 
@@ -529,6 +532,19 @@ class ManualLogEntry extends LogEntryBase {
                $this->revId = $revId;
        }
 
+       /**
+        * Set change tags for the log entry.
+        *
+        * @since 1.27
+        * @param string|string[] $tags
+        */
+       public function setTags( $tags ) {
+               if ( is_string( $tags ) ) {
+                       $tags = [ $tags ];
+               }
+               $this->tags = $tags;
+       }
+
        /**
         * Set the 'legacy' flag
         *
@@ -696,6 +712,14 @@ class ManualLogEntry extends LogEntryBase {
                        PatrolLog::record( $rc, true, $this->getPerformer() );
                }
 
+               // Add change tags to the log entry and (if applicable) the associated revision
+               $tags = $this->getTags();
+               if ( !is_null( $tags ) ) {
+                       $rcId = $rc->getAttribute( 'rc_id' );
+                       $revId = $this->getAssociatedRevId(); // Use null if $revId is 0
+                       ChangeTags::addTags( $tags, $rcId, $revId > 0 ? $revId : null, $newId );
+               }
+
                return $rc;
        }
 
@@ -743,6 +767,14 @@ class ManualLogEntry extends LogEntryBase {
                return $this->revId;
        }
 
+       /**
+        * @since 1.27
+        * @return array
+        */
+       public function getTags() {
+               return $this->tags;
+       }
+
        /**
         * @since 1.25
         * @return bool
index c96c0db..039161a 100644 (file)
@@ -184,7 +184,7 @@ class LogEventsList extends ContextSource {
                $selector = $this->getTypeSelector();
                $selector->setDefault( $queryType );
 
-               return $selector->getHtml();
+               return $selector->getHTML();
        }
 
        /**
index 11ae5d6..8518c91 100644 (file)
@@ -209,7 +209,7 @@ class LogPager extends ReverseChronologicalPager {
 
                $doUserRightsLogLike = false;
                if ( $this->types == [ 'rights' ] ) {
-                       $parts = explode( $wgUserrightsInterwikiDelimiter, $title->getDBKey() );
+                       $parts = explode( $wgUserrightsInterwikiDelimiter, $title->getDBkey() );
                        if ( count( $parts ) == 2 ) {
                                list( $name, $database ) = array_map( 'trim', $parts );
                                if ( strstr( $database, '*' ) ) { // Search for wildcard in database name
index 510c711..f6ecc50 100644 (file)
@@ -33,10 +33,12 @@ class PatrolLog {
         * @param int|RecentChange $rc Change identifier or RecentChange object
         * @param bool $auto Was this patrol event automatic?
         * @param User $user User performing the action or null to use $wgUser
+        * @param string|string[] $tags Change tags to add to the patrol log entry
+        *   ($user should be able to add the specified tags before this is called)
         *
         * @return bool
         */
-       public static function record( $rc, $auto = false, User $user = null ) {
+       public static function record( $rc, $auto = false, User $user = null, $tags = null ) {
                global $wgLogAutopatrol;
 
                // do not log autopatrolled edits if setting disables it
@@ -60,6 +62,7 @@ class PatrolLog {
                $entry->setTarget( $rc->getTitle() );
                $entry->setParameters( self::buildParams( $rc, $auto ) );
                $entry->setPerformer( $user );
+               $entry->setTags( $tags );
                $logid = $entry->insert();
                if ( !$auto ) {
                        $entry->publish( $logid, 'udp' );
index 0d007b3..e6f9fb6 100644 (file)
@@ -33,6 +33,7 @@ class PatrolLogFormatter extends LogFormatter {
                $key = parent::getMessageKey();
                $params = $this->getMessageParameters();
                if ( isset( $params[5] ) && $params[5] ) {
+                       // Messages: logentry-patrol-patrol-auto
                        $key .= '-auto';
                }
 
index eebccdd..b9dfb6c 100644 (file)
@@ -53,6 +53,7 @@ class RightsLogFormatter extends LogFormatter {
                $key = parent::getMessageKey();
                $params = $this->getMessageParameters();
                if ( !isset( $params[3] ) && !isset( $params[4] ) ) {
+                       // Messages: logentry-rights-rights-legacy
                        $key .= '-legacy';
                }
 
index b62bcb4..230d13b 100644 (file)
@@ -39,8 +39,12 @@ class TagLogFormatter extends LogFormatter {
                $key .= ( $remove ? ( $add ? '' : '-remove' ) : '-add' );
 
                if ( isset( $params[3] ) && $params[3] ) {
+                       // Messages: logentry-tag-update-add-revision, logentry-tag-update-remove-revision,
+                       // logentry-tag-update-revision
                        $key .= '-revision';
                } else {
+                       // Messages: logentry-tag-update-add-logentry, logentry-tag-update-remove-logentry,
+                       // logentry-tag-update-logentry
                        $key .= '-logentry';
                }
 
index 30907e6..fe24c34 100644 (file)
@@ -72,10 +72,13 @@ class EmailNotification {
        protected $editor;
 
        /**
+        * @deprecated since 1.27 use WatchedItemStore::updateNotificationTimestamp directly
+        *
         * @param User $editor The editor that triggered the update.  Their notification
         *  timestamp will not be updated(they have already seen it)
         * @param LinkTarget $linkTarget The link target of the title to update timestamps for
         * @param string $timestamp Set the update timestamp to this value
+        *
         * @return int[] Array of user IDs
         */
        public static function updateWatchlistTimestamp(
@@ -83,47 +86,16 @@ class EmailNotification {
                LinkTarget $linkTarget,
                $timestamp
        ) {
-               global $wgEnotifWatchlist, $wgShowUpdatedMarker;
-
-               if ( !$wgEnotifWatchlist && !$wgShowUpdatedMarker ) {
+               // wfDeprecated( __METHOD__, '1.27' );
+               $config = RequestContext::getMain()->getConfig();
+               if ( !$config->get( 'EnotifWatchlist' ) && !$config->get( 'ShowUpdatedMarker' ) ) {
                        return [];
                }
-
-               $dbw = wfGetDB( DB_MASTER );
-               $res = $dbw->select( [ 'watchlist' ],
-                       [ 'wl_user' ],
-                       [
-                               'wl_user != ' . intval( $editor->getID() ),
-                               'wl_namespace' => $linkTarget->getNamespace(),
-                               'wl_title' => $linkTarget->getDBkey(),
-                               'wl_notificationtimestamp IS NULL',
-                       ], __METHOD__
+               return WatchedItemStore::getDefaultInstance()->updateNotificationTimestamp(
+                       $editor,
+                       $linkTarget,
+                       $timestamp
                );
-
-               $watchers = [];
-               foreach ( $res as $row ) {
-                       $watchers[] = intval( $row->wl_user );
-               }
-
-               if ( $watchers ) {
-                       // Update wl_notificationtimestamp for all watching users except the editor
-                       $fname = __METHOD__;
-                       $dbw->onTransactionIdle(
-                               function () use ( $dbw, $timestamp, $watchers, $linkTarget, $fname ) {
-                                       $dbw->update( 'watchlist',
-                                               [ /* SET */
-                                                       'wl_notificationtimestamp' => $dbw->timestamp( $timestamp )
-                                               ], [ /* WHERE */
-                                                       'wl_user' => $watchers,
-                                                       'wl_namespace' => $linkTarget->getNamespace(),
-                                                       'wl_title' => $linkTarget->getDBkey(),
-                                               ], $fname
-                                       );
-                               }
-                       );
-               }
-
-               return $watchers;
        }
 
        /**
@@ -149,7 +121,15 @@ class EmailNotification {
                }
 
                // update wl_notificationtimestamp for watchers
-               $watchers = self::updateWatchlistTimestamp( $editor, $title, $timestamp );
+               $config = RequestContext::getMain()->getConfig();
+               $watchers = [];
+               if ( $config->get( 'EnotifWatchlist' ) || $config->get( 'ShowUpdatedMarker' ) ) {
+                       $watchers = WatchedItemStore::getDefaultInstance()->updateNotificationTimestamp(
+                               $editor,
+                               $title,
+                               $timestamp
+                       );
+               }
 
                $sendEmail = true;
                // $watchers deals with $wgEnotifWatchlist.
@@ -175,7 +155,7 @@ class EmailNotification {
                                $title,
                                [
                                        'editor' => $editor->getName(),
-                                       'editorID' => $editor->getID(),
+                                       'editorID' => $editor->getId(),
                                        'timestamp' => $timestamp,
                                        'summary' => $summary,
                                        'minorEdit' => $minorEdit,
@@ -252,7 +232,7 @@ class EmailNotification {
                                        if ( $watchingUser->getOption( 'enotifwatchlistpages' )
                                                && ( !$minorEdit || $watchingUser->getOption( 'enotifminoredits' ) )
                                                && $watchingUser->isEmailConfirmed()
-                                               && $watchingUser->getID() != $userTalkId
+                                               && $watchingUser->getId() != $userTalkId
                                                && !in_array( $watchingUser->getName(), $wgUsersNotifiedOnAllChanges )
                                                && !( $wgBlockDisablesLogin && $watchingUser->isBlocked() )
                                        ) {
index 983f42c..1c7fb98 100644 (file)
@@ -33,7 +33,7 @@ class UserMailer {
        /**
         * Send mail using a PEAR mailer
         *
-        * @param UserMailer $mailer
+        * @param Mail_smtp $mailer
         * @param string $dest
         * @param string $headers
         * @param string $body
@@ -116,7 +116,7 @@ class UserMailer {
         */
        public static function send( $to, $from, $subject, $body, $options = [] ) {
                global $wgAllowHTMLEmail;
-               $contentType = 'text/plain; charset=UTF-8';
+
                if ( !is_array( $options ) ) {
                        // Old calling style
                        wfDeprecated( __METHOD__ . ' with $replyto as 5th parameter', '1.26' );
@@ -125,6 +125,9 @@ class UserMailer {
                                $options['contentType'] = func_get_arg( 5 );
                        }
                }
+               if ( !isset( $options['contentType'] ) ) {
+                       $options['contentType'] = 'text/plain; charset=UTF-8';
+               }
 
                if ( !is_array( $to ) ) {
                        $to = [ $to ];
@@ -327,8 +330,7 @@ class UserMailer {
                                $body = str_replace( "\n", "\r\n", $body );
                        }
                        $headers['MIME-Version'] = '1.0';
-                       $headers['Content-type'] = ( is_null( $contentType ) ?
-                               'text/plain; charset=UTF-8' : $contentType );
+                       $headers['Content-type'] = $contentType;
                        $headers['Content-transfer-encoding'] = '8bit';
                }
 
@@ -499,12 +501,12 @@ class UserMailer {
                }
                $out = "=?$charset?Q?";
                $out .= preg_replace_callback( "/([$replace])/",
-                       [ __CLASS__, 'quotedPrintableCallback' ], $string );
+                       function ( $matches ) {
+                               return sprintf( "=%02X", ord( $matches[1] ) );
+                       },
+                       $string
+               );
                $out .= '?=';
                return $out;
        }
-
-       protected static function quotedPrintableCallback( $matches ) {
-               return sprintf( "=%02X", ord( $matches[1] ) );
-       }
 }
index 64f12f7..4b9b268 100644 (file)
@@ -32,7 +32,7 @@ class BmpHandler extends BitmapHandler {
         * @param File $file
         * @return bool
         */
-       function mustRender( $file ) {
+       public function mustRender( $file ) {
                return true;
        }
 
index b470e06..b055d16 100644 (file)
@@ -59,7 +59,7 @@ class BitmapHandler extends TransformationalImageHandler {
                return $scaler;
        }
 
-       function makeParamString( $params ) {
+       public function makeParamString( $params ) {
                $res = parent::makeParamString( $params );
                if ( isset( $params['interlace'] ) && $params['interlace'] ) {
                        return "interlaced-{$res}";
@@ -68,7 +68,7 @@ class BitmapHandler extends TransformationalImageHandler {
                }
        }
 
-       function parseParamString( $str ) {
+       public function parseParamString( $str ) {
                $remainder = preg_replace( '/^interlaced-/', '', $str );
                $params = parent::parseParamString( $remainder );
                if ( $params === false ) {
@@ -78,7 +78,7 @@ class BitmapHandler extends TransformationalImageHandler {
                return $params;
        }
 
-       function validateParam( $name, $value ) {
+       public function validateParam( $name, $value ) {
                if ( $name === 'interlace' ) {
                        return $value === false || $value === true;
                } else {
index b91fb8a..56b20ac 100644 (file)
@@ -55,6 +55,6 @@ class BitmapHandler_ClientOnly extends BitmapHandler {
                        return new TransformParameterError( $params );
                }
 
-               return new ThumbnailImage( $image, $image->getURL(), $image->getLocalRefPath(), $params );
+               return new ThumbnailImage( $image, $image->getUrl(), $image->getLocalRefPath(), $params );
        }
 }
index 0d2ed29..cd249a8 100644 (file)
@@ -47,7 +47,7 @@ class DjVuHandler extends ImageHandler {
         * @param File $file
         * @return bool
         */
-       function mustRender( $file ) {
+       public function mustRender( $file ) {
                return true;
        }
 
@@ -64,14 +64,14 @@ class DjVuHandler extends ImageHandler {
         * @param File $file
         * @return bool
         */
-       function isMultiPage( $file ) {
+       public function isMultiPage( $file ) {
                return true;
        }
 
        /**
         * @return array
         */
-       function getParamMap() {
+       public function getParamMap() {
                return [
                        'img_width' => 'width',
                        'img_page' => 'page',
@@ -83,7 +83,7 @@ class DjVuHandler extends ImageHandler {
         * @param mixed $value
         * @return bool
         */
-       function validateParam( $name, $value ) {
+       public function validateParam( $name, $value ) {
                if ( $name === 'page' && trim( $value ) !== (string)intval( $value ) ) {
                        // Extra junk on the end of page, probably actually a caption
                        // e.g. [[File:Foo.djvu|thumb|Page 3 of the document shows foo]]
@@ -104,7 +104,7 @@ class DjVuHandler extends ImageHandler {
         * @param array $params
         * @return bool|string
         */
-       function makeParamString( $params ) {
+       public function makeParamString( $params ) {
                $page = isset( $params['page'] ) ? $params['page'] : 1;
                if ( !isset( $params['width'] ) ) {
                        return false;
@@ -117,7 +117,7 @@ class DjVuHandler extends ImageHandler {
         * @param string $str
         * @return array|bool
         */
-       function parseParamString( $str ) {
+       public function parseParamString( $str ) {
                $m = false;
                if ( preg_match( '/^page(\d+)-(\d+)px$/', $str, $m ) ) {
                        return [ 'width' => $m[2], 'page' => $m[1] ];
@@ -419,7 +419,8 @@ class DjVuHandler extends ImageHandler {
                                }
 
                                return [ 'pageCount' => $count, 'dimensionsByPage' => $dimsByPage ];
-                       }
+                       },
+                       [ 'pcTTL' => WANObjectCache::TTL_INDEFINITE ]
                );
        }
 
index 6a3809b..732be3d 100644 (file)
@@ -34,8 +34,7 @@ class ExifBitmapHandler extends BitmapHandler {
 
        function convertMetadataVersion( $metadata, $version = 1 ) {
                // basically flattens arrays.
-               $version = explode( ';', $version, 2 );
-               $version = intval( $version[0] );
+               $version = intval( explode( ';', $version, 2 )[0] );
                if ( $version < 1 || $version >= 2 ) {
                        return $metadata;
                }
index 65a8fdc..de409e7 100644 (file)
@@ -118,8 +118,7 @@ class GIFMetadataExtractor {
                                if ( strlen( $buf ) < 1 ) {
                                        throw new Exception( "Ran out of input" );
                                }
-                               $extension_code = unpack( 'C', $buf );
-                               $extension_code = $extension_code[1];
+                               $extension_code = unpack( 'C', $buf )[1];
 
                                if ( $extension_code == 0xF9 ) {
                                        // Graphics Control Extension.
@@ -131,8 +130,7 @@ class GIFMetadataExtractor {
                                        if ( strlen( $buf ) < 2 ) {
                                                throw new Exception( "Ran out of input" );
                                        }
-                                       $delay = unpack( 'v', $buf );
-                                       $delay = $delay[1];
+                                       $delay = unpack( 'v', $buf )[1];
                                        $duration += $delay * 0.01;
 
                                        fread( $fh, 1 ); // Transparent colour index
@@ -141,8 +139,7 @@ class GIFMetadataExtractor {
                                        if ( strlen( $term ) < 1 ) {
                                                throw new Exception( "Ran out of input" );
                                        }
-                                       $term = unpack( 'C', $term );
-                                       $term = $term[1];
+                                       $term = unpack( 'C', $term )[1];
                                        if ( $term != 0 ) {
                                                throw new Exception( "Malformed Graphics Control Extension block" );
                                        }
@@ -182,8 +179,7 @@ class GIFMetadataExtractor {
                                        if ( strlen( $blockLength ) < 1 ) {
                                                throw new Exception( "Ran out of input" );
                                        }
-                                       $blockLength = unpack( 'C', $blockLength );
-                                       $blockLength = $blockLength[1];
+                                       $blockLength = unpack( 'C', $blockLength )[1];
                                        $data = fread( $fh, $blockLength );
 
                                        if ( $blockLength != 11 ) {
@@ -206,8 +202,7 @@ class GIFMetadataExtractor {
                                                if ( strlen( $loopData ) < 2 ) {
                                                        throw new Exception( "Ran out of input" );
                                                }
-                                               $loopData = unpack( 'v', $loopData );
-                                               $loopCount = $loopData[1];
+                                               $loopCount = unpack( 'v', $loopData )[1];
 
                                                if ( $loopCount != 1 ) {
                                                        $isLooped = true;
@@ -245,8 +240,7 @@ class GIFMetadataExtractor {
                                if ( strlen( $buf ) < 1 ) {
                                        throw new Exception( "Ran out of input" );
                                }
-                               $byte = unpack( 'C', $buf );
-                               $byte = $byte[1];
+                               $byte = unpack( 'C', $buf )[1];
                                throw new Exception( "At position: " . ftell( $fh ) . ", Unknown byte " . $byte );
                        }
                }
@@ -283,8 +277,7 @@ class GIFMetadataExtractor {
                if ( strlen( $data ) < 1 ) {
                        throw new Exception( "Ran out of input" );
                }
-               $buf = unpack( 'C', $data );
-               $buf = $buf[1];
+               $buf = unpack( 'C', $data )[1];
                $bpp = ( $buf & 7 ) + 1;
                $buf >>= 7;
 
@@ -303,8 +296,7 @@ class GIFMetadataExtractor {
                        if ( strlen( $buf ) < 1 ) {
                                throw new Exception( "Ran out of input" );
                        }
-                       $block_len = unpack( 'C', $buf );
-                       $block_len = $block_len[1];
+                       $block_len = unpack( 'C', $buf )[1];
                        if ( $block_len == 0 ) {
                                return;
                        }
index a7847bb..158c0dc 100644 (file)
@@ -31,15 +31,15 @@ abstract class ImageHandler extends MediaHandler {
         * @param File $file
         * @return bool
         */
-       function canRender( $file ) {
+       public function canRender( $file ) {
                return ( $file->getWidth() && $file->getHeight() );
        }
 
-       function getParamMap() {
+       public function getParamMap() {
                return [ 'img_width' => 'width' ];
        }
 
-       function validateParam( $name, $value ) {
+       public function validateParam( $name, $value ) {
                if ( in_array( $name, [ 'width', 'height' ] ) ) {
                        if ( $value <= 0 ) {
                                return false;
@@ -51,7 +51,7 @@ abstract class ImageHandler extends MediaHandler {
                }
        }
 
-       function makeParamString( $params ) {
+       public function makeParamString( $params ) {
                if ( isset( $params['physicalWidth'] ) ) {
                        $width = $params['physicalWidth'];
                } elseif ( isset( $params['width'] ) ) {
@@ -65,7 +65,7 @@ abstract class ImageHandler extends MediaHandler {
                return "{$width}px";
        }
 
-       function parseParamString( $str ) {
+       public function parseParamString( $str ) {
                $m = false;
                if ( preg_match( '/^(\d+)px$/', $str, $m ) ) {
                        return [ 'width' => $m[1] ];
index 040ff96..b8b6f6c 100644 (file)
@@ -42,7 +42,7 @@ class JpegHandler extends ExifBitmapHandler {
                return true;
        }
 
-       function validateParam( $name, $value ) {
+       public function validateParam( $name, $value ) {
                if ( $name === 'quality' ) {
                        return self::validateQuality( $value );
                } else {
@@ -58,7 +58,7 @@ class JpegHandler extends ExifBitmapHandler {
                return $value === 'low';
        }
 
-       function makeParamString( $params ) {
+       public function makeParamString( $params ) {
                // Prepend quality as "qValue-". This has to match parseParamString() below
                $res = parent::makeParamString( $params );
                if ( $res && isset( $params['quality'] ) ) {
@@ -67,7 +67,7 @@ class JpegHandler extends ExifBitmapHandler {
                return $res;
        }
 
-       function parseParamString( $str ) {
+       public function parseParamString( $str ) {
                // $str contains "qlow-200px" or "200px" strings because thumb.php would strip the filename
                // first - check if the string begins with "qlow-", and if so, treat it as quality.
                // Pass the first portion, or the whole string if "qlow-" not found, to the parent
index 95498ba..6b0f887 100644 (file)
@@ -75,7 +75,7 @@ abstract class MediaHandler {
         * Get an associative array mapping magic word IDs to parameter names.
         * Will be used by the parser to identify parameters.
         */
-       abstract function getParamMap();
+       abstract public function getParamMap();
 
        /**
         * Validate a thumbnail parameter at parse time.
@@ -85,7 +85,7 @@ abstract class MediaHandler {
         * @param string $name
         * @param mixed $value
         */
-       abstract function validateParam( $name, $value );
+       abstract public function validateParam( $name, $value );
 
        /**
         * Merge a parameter array into a string appropriate for inclusion in filenames
@@ -93,7 +93,7 @@ abstract class MediaHandler {
         * @param array $params Array of parameters that have been through normaliseParams.
         * @return string
         */
-       abstract function makeParamString( $params );
+       abstract public function makeParamString( $params );
 
        /**
         * Parse a param string made with makeParamString back into an array
@@ -101,7 +101,7 @@ abstract class MediaHandler {
         * @param string $str The parameter string without file name (e.g. 122px)
         * @return array|bool Array of parameters or false on failure.
         */
-       abstract function parseParamString( $str );
+       abstract public function parseParamString( $str );
 
        /**
         * Changes the parameter array as necessary, ready for transformation.
@@ -342,7 +342,7 @@ abstract class MediaHandler {
         * @param File $file
         * @return bool
         */
-       function canRender( $file ) {
+       public function canRender( $file ) {
                return true;
        }
 
@@ -353,7 +353,7 @@ abstract class MediaHandler {
         * @param File $file
         * @return bool
         */
-       function mustRender( $file ) {
+       public function mustRender( $file ) {
                return false;
        }
 
@@ -363,7 +363,7 @@ abstract class MediaHandler {
         * @param File $file
         * @return bool
         */
-       function isMultiPage( $file ) {
+       public function isMultiPage( $file ) {
                return false;
        }
 
index 9a6547f..9176b54 100644 (file)
@@ -395,7 +395,7 @@ class ThumbnailImage extends MediaTransformOutput {
                                $query
                        );
                } elseif ( !empty( $options['file-link'] ) ) {
-                       $linkAttribs = [ 'href' => $this->file->getURL() ];
+                       $linkAttribs = [ 'href' => $this->file->getUrl() ];
                } else {
                        $linkAttribs = false;
                        if ( !empty( $options['title'] ) ) {
index 7d59767..f4f29dd 100644 (file)
@@ -105,8 +105,7 @@ class PNGMetadataExtractor {
                        if ( !$buf || strlen( $buf ) < 4 ) {
                                throw new Exception( __METHOD__ . ": Read error" );
                        }
-                       $chunk_size = unpack( "N", $buf );
-                       $chunk_size = $chunk_size[1];
+                       $chunk_size = unpack( "N", $buf )[1];
 
                        if ( $chunk_size < 0 ) {
                                throw new Exception( __METHOD__ . ": Chunk size too big for unpack" );
index d570f30..2bb6d13 100644 (file)
@@ -51,7 +51,7 @@ class SvgHandler extends ImageHandler {
                }
        }
 
-       function mustRender( $file ) {
+       public function mustRender( $file ) {
                return true;
        }
 
@@ -462,13 +462,13 @@ class SvgHandler extends ImageHandler {
         * @param mixed $value Parameter value
         * @return bool Validity
         */
-       function validateParam( $name, $value ) {
+       public function validateParam( $name, $value ) {
                if ( in_array( $name, [ 'width', 'height' ] ) ) {
                        // Reject negative heights, widths
                        return ( $value > 0 );
                } elseif ( $name == 'lang' ) {
                        // Validate $code
-                       if ( $value === '' || !Language::isValidBuiltinCode( $value ) ) {
+                       if ( $value === '' || !Language::isValidBuiltInCode( $value ) ) {
                                wfDebug( "Invalid user language code\n" );
 
                                return false;
@@ -485,7 +485,7 @@ class SvgHandler extends ImageHandler {
         * @param array $params Name=>value pairs of parameters
         * @return string Filename to use
         */
-       function makeParamString( $params ) {
+       public function makeParamString( $params ) {
                $lang = '';
                if ( isset( $params['lang'] ) && $params['lang'] !== 'en' ) {
                        $params['lang'] = strtolower( $params['lang'] );
@@ -498,7 +498,7 @@ class SvgHandler extends ImageHandler {
                return "$lang{$params['width']}px";
        }
 
-       function parseParamString( $str ) {
+       public function parseParamString( $str ) {
                $m = false;
                if ( preg_match( '/^lang([a-z]+(?:-[a-z]+)*)-(\d+)px$/', $str, $m ) ) {
                        return [ 'width' => array_pop( $m ), 'lang' => $m[1] ];
@@ -509,7 +509,7 @@ class SvgHandler extends ImageHandler {
                }
        }
 
-       function getParamMap() {
+       public function getParamMap() {
                return [ 'img_lang' => 'lang', 'img_width' => 'width' ];
        }
 
index f777230..62b5c2c 100644 (file)
@@ -229,7 +229,7 @@ class SVGReader {
                }
                // @todo Find and store type of xml snippet. metadata['metadataType'] = "rdf"
                if ( method_exists( $this->reader, 'readInnerXML' ) ) {
-                       $this->metadata[$metafield] = trim( $this->reader->readInnerXML() );
+                       $this->metadata[$metafield] = trim( $this->reader->readInnerXml() );
                } else {
                        throw new MWException( "The PHP XMLReader extension does not come " .
                                "with readInnerXML() method. Your libxml is probably out of " .
index 750528f..2e73249 100644 (file)
@@ -40,7 +40,7 @@ class TiffHandler extends ExifBitmapHandler {
         * @param File $file
         * @return bool
         */
-       function canRender( $file ) {
+       public function canRender( $file ) {
                global $wgTiffThumbnailType;
 
                return (bool)$wgTiffThumbnailType
@@ -54,7 +54,7 @@ class TiffHandler extends ExifBitmapHandler {
         * @param File $file
         * @return bool
         */
-       function mustRender( $file ) {
+       public function mustRender( $file ) {
                return true;
        }
 
index f6483a1..f1f2161 100644 (file)
@@ -335,7 +335,7 @@ abstract class TransformationalImageHandler extends ImageHandler {
                        'height' => $scalerParams['clientHeight']
                ];
 
-               return new ThumbnailImage( $image, $image->getURL(), null, $params );
+               return new ThumbnailImage( $image, $image->getUrl(), null, $params );
        }
 
        /**
index 8fda751..6a01e87 100644 (file)
@@ -154,7 +154,7 @@ class WebPHandler extends BitmapHandler {
        /**
         * Decodes a lossy chunk header
         * @param string $header Header string
-        * @return boolean|array See WebPHandler::decodeHeader
+        * @return bool|array See WebPHandler::decodeHeader
         */
        protected static function decodeLossyChunkHeader( $header ) {
                // Bytes 0-3 are 'VP8 '
@@ -180,7 +180,7 @@ class WebPHandler extends BitmapHandler {
        /**
         * Decodes a lossless chunk header
         * @param string $header Header string
-        * @return boolean|array See WebPHandler::decodeHeader
+        * @return bool|array See WebPHandler::decodeHeader
         */
        public static function decodeLosslessChunkHeader( $header ) {
                // Bytes 0-3 are 'VP8L'
@@ -205,7 +205,7 @@ class WebPHandler extends BitmapHandler {
        /**
         * Decodes an extended chunk header
         * @param string $header Header string
-        * @return boolean|array See WebPHandler::decodeHeader
+        * @return bool|array See WebPHandler::decodeHeader
         */
        public static function decodeExtendedChunkHeader( $header ) {
                // Bytes 0-3 are 'VP8X'
index 05c3847..6ac675e 100644 (file)
@@ -37,7 +37,7 @@ class XCFHandler extends BitmapHandler {
         * @param File $file
         * @return bool
         */
-       function mustRender( $file ) {
+       public function mustRender( $file ) {
                return true;
        }
 
@@ -68,21 +68,15 @@ class XCFHandler extends BitmapHandler {
 
                # Forge a return array containing metadata information just like getimagesize()
                # See PHP documentation at: http://www.php.net/getimagesize
-               $metadata = [];
-               $metadata[0] = $header['width'];
-               $metadata[1] = $header['height'];
-               $metadata[2] = null; # IMAGETYPE constant, none exist for XCF.
-               $metadata[3] = sprintf(
-                       'height="%s" width="%s"', $header['height'], $header['width']
-               );
-               $metadata['mime'] = 'image/x-xcf';
-               $metadata['channels'] = null;
-               $metadata['bits'] = 8; # Always 8-bits per color
-
-               assert( '7 == count($metadata); ' .
-                       '# return array must contains 7 elements just like getimagesize() return' );
-
-               return $metadata;
+               return [
+                       0 => $header['width'],
+                       1 => $header['height'],
+                       2 => null, # IMAGETYPE constant, none exist for XCF.
+                       3 => "height=\"{$header['height']}\" width=\"{$header['width']}\"",
+                       'mime' => 'image/x-xcf',
+                       'channels' => null,
+                       'bits' => 8, # Always 8-bits per color
+               ];
        }
 
        /**
@@ -161,7 +155,7 @@ class XCFHandler extends BitmapHandler {
         * @return string
         */
        public function getMetadata( $file, $filename ) {
-               $header = self::getXCFMetadata( $filename );
+               $header = self::getXCFMetaData( $filename );
                $metadata = [];
                if ( $header ) {
                        // Try to be consistent with the names used by PNG files.
index 73f27e6..1ef4d26 100644 (file)
@@ -64,6 +64,10 @@ application/xml xml xsl xsd kml
 application/xml-dtd dtd
 application/zip zip jar xpi sxc stc sxd std sxi sti sxm stm sxw stw
 application/x-rar rar
+application/font-woff woff
+application/font-woff2 woff2
+application/vnd.ms-fontobject eot
+application/x-font-ttf ttf
 audio/basic au snd
 audio/midi mid midi kar
 audio/mpeg mpga mp2 mp3
index e7ae446..d57d3fd 100644 (file)
@@ -225,7 +225,7 @@ class Article implements Page {
         */
        protected function getContentObject() {
 
-               if ( $this->mPage->getID() === 0 ) {
+               if ( $this->mPage->getId() === 0 ) {
                        # If this is a MediaWiki:x message, then load the messages
                        # and return the message value for x.
                        if ( $this->getTitle()->getNamespace() == NS_MEDIAWIKI ) {
@@ -282,7 +282,7 @@ class Article implements Page {
                                $this->mRevision = Revision::newFromId( $oldid );
                                if ( $this->mRevision !== null ) {
                                        // Revision title doesn't match the page title given?
-                                       if ( $this->mPage->getID() != $this->mRevision->getPage() ) {
+                                       if ( $this->mPage->getId() != $this->mRevision->getPage() ) {
                                                $function = [ get_class( $this->mPage ), 'newFromID' ];
                                                $this->mPage = call_user_func( $function, $this->mRevision->getPage() );
                                        }
@@ -636,7 +636,7 @@ class Article implements Page {
                                        # the correct version information.
                                        $outputPage->setRevisionId( $this->getRevIdFetched() );
                                        # Preload timestamp to avoid a DB hit
-                                       $outputPage->setRevisionTimestamp( $this->getTimestamp() );
+                                       $outputPage->setRevisionTimestamp( $this->mPage->getTimestamp() );
 
                                        # Pages containing custom CSS or JavaScript get special treatment
                                        if ( $this->getTitle()->isCssOrJsPage() || $this->getTitle()->isCssJsSubpage() ) {
@@ -768,7 +768,7 @@ class Article implements Page {
                                ->params( $oldid )
                                ->numParams( 1 )
                                ->parseAsBlock();
-                       $this->getContext()->getOutput()->addHtml( $msg );
+                       $this->getContext()->getOutput()->addHTML( $msg );
                        return;
                }
 
@@ -863,7 +863,7 @@ class Article implements Page {
                        }
                }
 
-               if ( $this->mPage->getID() === 0 || $this->getOldID() ) {
+               if ( $this->mPage->getId() === 0 || $this->getOldID() ) {
                        # Non-articles (special pages etc), and old revisions
                        return [
                                'index' => 'noindex',
@@ -1252,8 +1252,7 @@ class Article implements Page {
                if ( $title->getNamespace() == NS_USER
                        || $title->getNamespace() == NS_USER_TALK
                ) {
-                       $parts = explode( '/', $title->getText() );
-                       $rootPart = $parts[0];
+                       $rootPart = explode( '/', $title->getText() )[0];
                        $user = User::newFromName( $rootPart, false /* allow IP users*/ );
                        $ip = User::isIP( $rootPart );
                        $block = Block::newFromTarget( $user, $user );
@@ -1446,7 +1445,7 @@ class Article implements Page {
                $outputPage->addSubtitle( "<div id=\"mw-{$infomsg}\">" .
                        $context->msg( $infomsg, $td )
                                ->rawParams( $userlinks )
-                               ->params( $revision->getID(), $tddate, $tdtime, $revision->getUserText() )
+                               ->params( $revision->getId(), $tddate, $tdtime, $revision->getUserText() )
                                ->rawParams( Linker::revComment( $revision, true, true ) )
                                ->parse() .
                        "</div>"
@@ -1962,7 +1961,7 @@ class Article implements Page {
                $cacheable = false;
 
                if ( HTMLFileCache::useFileCache( $this->getContext() ) ) {
-                       $cacheable = $this->mPage->getID()
+                       $cacheable = $this->mPage->getId()
                                && !$this->mRedirectedFrom && !$this->getTitle()->isRedirect();
                        // Extension may have reason to disable file caching on some pages.
                        if ( $cacheable ) {
index e569762..106911c 100644 (file)
@@ -160,7 +160,7 @@ class ImagePage extends Article {
                }
 
                # No need to display noarticletext, we use our own message, output in openShowImage()
-               if ( $this->mPage->getID() ) {
+               if ( $this->mPage->getId() ) {
                        # NS_FILE is in the user language, but this section (the actual wikitext)
                        # should be in page content language
                        $pageLang = $this->getTitle()->getPageViewLanguage();
@@ -299,7 +299,7 @@ class ImagePage extends Article {
         */
        public function getContentObject() {
                $this->loadFile();
-               if ( $this->mPage->getFile() && !$this->mPage->getFile()->isLocal() && 0 == $this->getID() ) {
+               if ( $this->mPage->getFile() && !$this->mPage->getFile()->isLocal() && 0 == $this->getId() ) {
                        return null;
                }
                return parent::getContentObject();
@@ -565,7 +565,7 @@ EOT
                                if ( is_null( $currentLanguage ) ) {
                                        $currentLanguage = $defaultLang;
                                }
-                               $out->addHtml( $this->doRenderLangOpt( $renderLangOptions, $currentLanguage, $defaultLang ) );
+                               $out->addHTML( $this->doRenderLangOpt( $renderLangOptions, $currentLanguage, $defaultLang ) );
                        }
 
                        // Add cannot animate thumbnail warning
@@ -592,7 +592,7 @@ EOT
                        }
                } else {
                        # Image does not exist
-                       if ( !$this->getID() ) {
+                       if ( !$this->getId() ) {
                                # No article exists either
                                # Show deletion log to be consistent with normal articles
                                LogEventsList::showLogExtract(
@@ -623,7 +623,7 @@ EOT
                        // by Article::View().
                        $out->setRobotPolicy( 'noindex,nofollow' );
                        $out->wrapWikiMsg( "<div id='mw-imagepage-nofile' class='plainlinks'>\n$1\n</div>", $nofile );
-                       if ( !$this->getID() && $wgSend404Code ) {
+                       if ( !$this->getId() && $wgSend404Code ) {
                                // If there is no image, no shared image, and no description page,
                                // output a 404, to be consistent with Article::showMissingArticle.
                                $request->response()->statusHeader( 404 );
@@ -635,7 +635,7 @@ EOT
        /**
         * Make the text under the image to say what size preview
         *
-        * @param $params Array parameters for thumbnail
+        * @param $params array parameters for thumbnail
         * @param $sizeLinkBigImagePreview HTML for the current size
         * @return string HTML output
         */
@@ -704,7 +704,7 @@ EOT
                $descText = $this->mPage->getFile()->getDescriptionText( $this->getContext()->getLanguage() );
 
                /* Add canonical to head if there is no local page for this shared file */
-               if ( $descUrl && $this->mPage->getID() == 0 ) {
+               if ( $descUrl && $this->mPage->getId() == 0 ) {
                        $out->setCanonicalUrl( $descUrl );
                }
 
index 3308890..0e3512b 100644 (file)
@@ -2261,6 +2261,7 @@ class WikiPage implements Page, IDBAccessObject {
                                DeferredUpdates::addUpdate( $update );
                        }
                        if ( $wgRCWatchCategoryMembership
+                               && $this->getContentHandler()->supportsCategories() === true
                                && ( $options['changed'] || $options['created'] )
                                && !$options['restored']
                        ) {
@@ -2403,10 +2404,13 @@ class WikiPage implements Page, IDBAccessObject {
         * @param int &$cascade Set to false if cascading protection isn't allowed.
         * @param string $reason
         * @param User $user The user updating the restrictions
-        * @return Status
+        * @param string|string[] $tags Change tags to add to the pages and protection log entries
+        *   ($user should be able to add the specified tags before this is called)
+        * @return Status Status object; if action is taken, $status->value is the log_id of the
+        *   protection log entry.
         */
        public function doUpdateRestrictions( array $limit, array $expiry,
-               &$cascade, $reason, User $user
+               &$cascade, $reason, User $user, $tags = null
        ) {
                global $wgCascadingRestrictionLevels, $wgContLang;
 
@@ -2488,6 +2492,9 @@ class WikiPage implements Page, IDBAccessObject {
                $logRelationsField = null;
                $logParamsDetails = [];
 
+               // Null revision (used for change tag insertion)
+               $nullRevision = null;
+
                if ( $id ) { // Protection of existing page
                        if ( !Hooks::run( 'ArticleProtect', [ &$this, &$user, $limit, $reason ] ) ) {
                                return Status::newGood();
@@ -2631,13 +2638,17 @@ class WikiPage implements Page, IDBAccessObject {
                $logEntry->setComment( $reason );
                $logEntry->setPerformer( $user );
                $logEntry->setParameters( $params );
+               if ( !is_null( $nullRevision ) ) {
+                       $logEntry->setAssociatedRevId( $nullRevision->getId() );
+               }
+               $logEntry->setTags( $tags );
                if ( $logRelationsField !== null && count( $logRelationsValues ) ) {
                        $logEntry->setRelations( [ $logRelationsField => $logRelationsValues ] );
                }
                $logId = $logEntry->insert();
                $logEntry->publish( $logId );
 
-               return Status::newGood();
+               return Status::newGood( $logId );
        }
 
        /**
@@ -2869,7 +2880,7 @@ class WikiPage implements Page, IDBAccessObject {
                $dbw->startAtomic( __METHOD__ );
 
                $this->loadPageData( self::READ_LATEST );
-               $id = $this->getID();
+               $id = $this->getId();
                // T98706: lock the page from various other updates but avoid using
                // WikiPage::READ_LOCKING as that will carry over the FOR UPDATE to
                // the revisions queries (which also JOIN on user). Only lock the page
index 2c415d6..31c9c6d 100644 (file)
@@ -115,7 +115,7 @@ abstract class ReverseChronologicalPager extends IndexPager {
 
                // Treat the given time in the wiki timezone and get a UTC timestamp for the database lookup
                $timestamp = MWTimestamp::getInstance( "${ymd}000000" );
-               $timestamp->setTimeZone( $this->getConfig()->get( 'Localtimezone' ) );
+               $timestamp->setTimezone( $this->getConfig()->get( 'Localtimezone' ) );
 
                $this->mOffset = $this->mDb->timestamp( $timestamp->getTimestamp() );
        }
index 1cc0efc..a55ddf3 100644 (file)
@@ -634,7 +634,7 @@ class CoreParserFunctions {
                if ( is_null( $t ) ) {
                        return '';
                }
-               return wfEscapeWikiText( wfUrlEncode( str_replace( ' ', '_', $t->getRootText() ) ) );
+               return wfEscapeWikiText( wfUrlencode( str_replace( ' ', '_', $t->getRootText() ) ) );
        }
        public static function basepagename( $parser, $title = null ) {
                $t = Title::newFromText( $title );
@@ -648,7 +648,7 @@ class CoreParserFunctions {
                if ( is_null( $t ) ) {
                        return '';
                }
-               return wfEscapeWikiText( wfUrlEncode( str_replace( ' ', '_', $t->getBaseText() ) ) );
+               return wfEscapeWikiText( wfUrlencode( str_replace( ' ', '_', $t->getBaseText() ) ) );
        }
        public static function talkpagename( $parser, $title = null ) {
                $t = Title::newFromText( $title );
index 477d1f7..5ee0c5a 100644 (file)
@@ -3000,7 +3000,7 @@ class Parser {
                                $value = wfEscapeWikiText( $this->mTitle->getRootText() );
                                break;
                        case 'rootpagenamee':
-                               $value = wfEscapeWikiText( wfUrlEncode( str_replace(
+                               $value = wfEscapeWikiText( wfUrlencode( str_replace(
                                        ' ',
                                        '_',
                                        $this->mTitle->getRootText()
@@ -3010,7 +3010,7 @@ class Parser {
                                $value = wfEscapeWikiText( $this->mTitle->getBaseText() );
                                break;
                        case 'basepagenamee':
-                               $value = wfEscapeWikiText( wfUrlEncode( str_replace(
+                               $value = wfEscapeWikiText( wfUrlencode( str_replace(
                                        ' ',
                                        '_',
                                        $this->mTitle->getBaseText()
@@ -3948,8 +3948,7 @@ class Parser {
         * @return string|bool
         */
        public function fetchTemplate( $title ) {
-               $rv = $this->fetchTemplateAndTitle( $title );
-               return $rv[0];
+               return $this->fetchTemplateAndTitle( $title )[0];
        }
 
        /**
@@ -4052,8 +4051,7 @@ class Parser {
         * @return File|bool
         */
        public function fetchFile( $title, $options = [] ) {
-               $res = $this->fetchFileAndTitle( $title, $options );
-               return $res[0];
+               return $this->fetchFileAndTitle( $title, $options )[0];
        }
 
        /**
@@ -4638,7 +4636,7 @@ class Parser {
                        $anchor = $safeHeadline;
                        $legacyAnchor = $legacyHeadline;
                        if ( isset( $refers[$arrayKey] ) ) {
-                               // @codingStandardsIgnoreStart 
+                               // @codingStandardsIgnoreStart
                                for ( $i = 2; isset( $refers["${arrayKey}_$i"] ); ++$i );
                                // @codingStandardsIgnoreEnd
                                $anchor .= "_$i";
@@ -4647,7 +4645,7 @@ class Parser {
                                $refers[$arrayKey] = true;
                        }
                        if ( $legacyHeadline !== false && isset( $refers[$legacyArrayKey] ) ) {
-                               // @codingStandardsIgnoreStart 
+                               // @codingStandardsIgnoreStart
                                for ( $i = 2; isset( $refers["${legacyArrayKey}_$i"] ); ++$i );
                                // @codingStandardsIgnoreEnd
                                $legacyAnchor .= "_$i";
@@ -4795,7 +4793,7 @@ class Parser {
                        $sections[0] = $sections[0] . $toc . "\n";
                }
 
-               $full .= join( '', $sections );
+               $full .= implode( '', $sections );
 
                if ( $this->mForceTocPosition ) {
                        return str_replace( '<!--MWTOC-->', $toc, $full );
index bd5afaf..916cfc2 100644 (file)
@@ -64,7 +64,7 @@ class ParserCache {
                global $wgRequest;
 
                // idhash seem to mean 'page id' + 'rendering hash' (r3710)
-               $pageid = $article->getID();
+               $pageid = $article->getId();
                $renderkey = (int)( $wgRequest->getVal( 'action' ) == 'render' );
 
                $key = wfMemcKey( 'pcache', 'idhash', "{$pageid}-{$renderkey}!{$hash}" );
@@ -76,7 +76,7 @@ class ParserCache {
         * @return mixed|string
         */
        protected function getOptionsKey( $article ) {
-               $pageid = $article->getID();
+               $pageid = $article->getId();
                return wfMemcKey( 'pcache', 'idoptions', "{$pageid}" );
        }
 
index d2559f7..729b9db 100644 (file)
@@ -860,7 +860,7 @@ class ParserOptions {
                                                'page' => $title->getArticleID(),
                                                'user_text' => $user->getName(),
                                                'user' => $user->getId(),
-                                               'parent_id' => $title->getLatestRevId(),
+                                               'parent_id' => $title->getLatestRevID(),
                                                'title' => $title,
                                                'content' => $content
                                        ] );
index 255fef8..368d79e 100644 (file)
@@ -67,9 +67,7 @@ abstract class Preprocessor {
                }
 
                $key = wfMemcKey(
-                       // TODO: Once we require PHP 5.5, use static::class instead of
-                       // get_called_class() or get_class( $this ).
-                       defined( 'static::CACHE_PREFIX' ) ? static::CACHE_PREFIX : get_called_class(),
+                       defined( 'static::CACHE_PREFIX' ) ? static::CACHE_PREFIX : static::class,
                        md5( $text ), $flags );
                $value = sprintf( "%08d", static::CACHE_VERSION ) . $tree;
 
@@ -100,9 +98,7 @@ abstract class Preprocessor {
                $cache = ObjectCache::getInstance( $config->get( 'MainCacheType' ) );
 
                $key = wfMemcKey(
-                       // TODO: Once we require PHP 5.5, use static::class instead of
-                       // get_called_class() or get_class( $this ).
-                       defined( 'static::CACHE_PREFIX' ) ? static::CACHE_PREFIX : get_called_class(),
+                       defined( 'static::CACHE_PREFIX' ) ? static::CACHE_PREFIX : static::class,
                        md5( $text ), $flags );
 
                $value = $cache->get( $key );
index 1ec14aa..acdbd81 100644 (file)
@@ -71,11 +71,11 @@ abstract class PoolCounter {
        protected $timeout;
 
        /**
-        * @var boolean Whether the key is a "might wait" key
+        * @var bool Whether the key is a "might wait" key
         */
        private $isMightWaitKey;
        /**
-        * @var boolean Whether this process holds a "might wait" lock key
+        * @var bool Whether this process holds a "might wait" lock key
         */
        private static $acquiredMightWaitKey = 0;
 
index fe9304f..7c60aa5 100644 (file)
@@ -168,12 +168,12 @@ class ExtensionProcessor implements Processor {
                $this->extractCredits( $path, $info );
                foreach ( $info as $key => $val ) {
                        if ( in_array( $key, self::$globalSettings ) ) {
-                               $this->storeToArray( "wg$key", $val, $this->globals );
+                               $this->storeToArray( $path, "wg$key", $val, $this->globals );
                        // Ignore anything that starts with a @
                        } elseif ( $key[0] !== '@' && !in_array( $key, self::$notAttributes )
                                && !in_array( $key, self::$creditsAttributes )
                        ) {
-                               $this->storeToArray( $key, $val, $this->attributes );
+                               $this->storeToArray( $path, $key, $val, $this->attributes );
                        }
                }
        }
@@ -367,14 +367,15 @@ class ExtensionProcessor implements Processor {
        }
 
        /**
+        * @param string $path
         * @param string $name
         * @param array $value
         * @param array &$array
         * @throws InvalidArgumentException
         */
-       protected function storeToArray( $name, $value, &$array ) {
+       protected function storeToArray( $path, $name, $value, &$array ) {
                if ( !is_array( $value ) ) {
-                       throw new InvalidArgumentException( "The value for '$name' should be an array" );
+                       throw new InvalidArgumentException( "The value for '$name' should be an array (from $path)" );
                }
                if ( isset( $array[$name] ) ) {
                        $array[$name] = array_merge_recursive( $array[$name], $value );
index c689979..0aa08be 100644 (file)
@@ -88,7 +88,7 @@ class ResourceLoader implements LoggerAwareInterface {
        private $logger;
 
        /** @var string JavaScript / CSS pragma to disable minification. **/
-       const FILTER_NOMIN = ' /* @nomin */ ';
+       const FILTER_NOMIN = '/*@nomin*/';
 
        /**
         * Load information stored in the database about modules.
@@ -1362,8 +1362,8 @@ MESSAGE;
         * @return string
         */
        public static function makeLoaderConditionalScript( $script ) {
-               return "(window.RLQ = window.RLQ || []).push(function () {\n" .
-                       trim( $script ) . "\n} );";
+               return '(window.RLQ=window.RLQ||[]).push(function(){' .
+                       trim( $script ) . '});';
        }
 
        /**
@@ -1379,8 +1379,8 @@ MESSAGE;
                $js = self::makeLoaderConditionalScript( $script );
                return new WrappedString(
                        Html::inlineScript( $js ),
-                       "<script>(window.RLQ = window.RLQ || []).push(function () {\n",
-                       "\n} );</script>"
+                       '<script>(window.RLQ=window.RLQ||[]).push(function(){',
+                       '});</script>'
                );
        }
 
@@ -1396,7 +1396,7 @@ MESSAGE;
                        'mw.config.set',
                        [ $configuration ],
                        ResourceLoader::inDebugMode()
-               ) . ResourceLoader::FILTER_NOMIN;
+               );
        }
 
        /**
index bf5ae4b..8e0239a 100644 (file)
@@ -211,6 +211,18 @@ class ResourceLoaderContext {
                return $this->user;
        }
 
+       /**
+        * Get a Message object with context set.  See wfMessage for parameters.
+        *
+        * @since 1.27
+        * @param mixed ...
+        * @return Message
+        */
+       public function msg() {
+               return call_user_func_array( 'wfMessage', func_get_args() )
+                       ->inLanguage( $this->getLanguage() );
+       }
+
        /**
         * Get the possibly-cached User object for the specified username
         *
@@ -221,13 +233,7 @@ class ResourceLoaderContext {
                if ( $this->userObj === null ) {
                        $username = $this->getUser();
                        if ( $username ) {
-                               // Optimize: Avoid loading a new User object if possible
-                               global $wgUser;
-                               if ( is_object( $wgUser ) && $wgUser->getName() === $username ) {
-                                       $this->userObj = $wgUser;
-                               } else {
-                                       $this->userObj = User::newFromName( $username );
-                               }
+                               $this->userObj = User::newFromName( $username );
                        } else {
                                $this->userObj = new User; // Anonymous user
                        }
index b31e8dc..1e7329a 100644 (file)
@@ -341,10 +341,6 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                        $remoteBasePath = (string)$options['remoteBasePath'];
                }
 
-               // Make sure the remote base path is a complete valid URL,
-               // but possibly protocol-relative to avoid cache pollution
-               $remoteBasePath = wfExpandUrl( $remoteBasePath, PROTO_RELATIVE );
-
                return [ $localBasePath, $remoteBasePath ];
        }
 
@@ -366,7 +362,10 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        public function getScriptURLsForDebug( ResourceLoaderContext $context ) {
                $urls = [];
                foreach ( $this->getScriptFiles( $context ) as $file ) {
-                       $urls[] = $this->getRemotePath( $file );
+                       $urls[] = OutputPage::transformResourcePath(
+                               $this->getConfig(),
+                               $this->getRemotePath( $file )
+                       );
                }
                return $urls;
        }
@@ -412,7 +411,10 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                foreach ( $this->getStyleFiles( $context ) as $mediaType => $list ) {
                        $urls[$mediaType] = [];
                        foreach ( $list as $file ) {
-                               $urls[$mediaType][] = $this->getRemotePath( $file );
+                               $urls[$mediaType][] = OutputPage::transformResourcePath(
+                                       $this->getConfig(),
+                                       $this->getRemotePath( $file )
+                               );
                        }
                }
                return $urls;
@@ -889,7 +891,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                $localDir = dirname( $localPath );
                $remoteDir = dirname( $remotePath );
                // Get and register local file references
-               $localFileRefs = CSSMin::getAllLocalFileReferences( $style, $localDir );
+               $localFileRefs = CSSMin::getLocalFileReferences( $style, $localDir );
                foreach ( $localFileRefs as $file ) {
                        if ( file_exists( $file ) ) {
                                $this->localFileRefs[] = $file;
@@ -897,8 +899,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                                $this->missingLocalFileRefs[] = $file;
                        }
                }
-               return MemoizedCallable::call( 'CSSMin::remap',
-                       [ $style, $localDir, $remoteDir, true ] );
+               // Don't cache this call. remap() ensures data URIs embeds are up to date,
+               // and urls contain correct content hashes in their query string. (T128668)
+               return CSSMin::remap( $style, $localDir, $remoteDir, true );
        }
 
        /**
index 43fd2db..f784d03 100644 (file)
@@ -272,7 +272,7 @@ class ResourceLoaderImage {
         */
        protected function variantize( $variantConf, ResourceLoaderContext $context ) {
                $dom = new DomDocument;
-               $dom->loadXml( file_get_contents( $this->getPath( $context ) ) );
+               $dom->loadXML( file_get_contents( $this->getPath( $context ) ) );
                $root = $dom->documentElement;
                $wrapper = $dom->createElement( 'g' );
                while ( $root->firstChild ) {
@@ -280,7 +280,7 @@ class ResourceLoaderImage {
                }
                $root->appendChild( $wrapper );
                $wrapper->setAttribute( 'fill', $variantConf['color'] );
-               return $dom->saveXml();
+               return $dom->saveXML();
        }
 
        /**
@@ -295,7 +295,7 @@ class ResourceLoaderImage {
         */
        protected function massageSvgPathdata( $svg ) {
                $dom = new DomDocument;
-               $dom->loadXml( $svg );
+               $dom->loadXML( $svg );
                foreach ( $dom->getElementsByTagName( 'path' ) as $node ) {
                        $pathData = $node->getAttribute( 'd' );
                        // Make sure there is at least one space between numbers, and that leading zero is not omitted.
@@ -305,7 +305,7 @@ class ResourceLoaderImage {
                        $pathData = preg_replace( '/([ -])0(\d)/', '$1$2', $pathData );
                        $node->setAttribute( 'd', $pathData );
                }
-               return $dom->saveXml();
+               return $dom->saveXML();
        }
 
        /**
index d9005fa..beab53e 100644 (file)
@@ -31,7 +31,7 @@ class ResourceLoaderRawFileModule extends ResourceLoaderFileModule {
        /**
         * Enable raw mode to omit mw.loader.state() call as mw.loader
         * does not yet exist when these modules execute.
-        * @var boolean
+        * @var bool
         */
        protected $raw = true;
 
index 6a40e27..d765137 100644 (file)
@@ -279,15 +279,12 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
        }
 
        public static function getLegacyModules() {
-               global $wgIncludeLegacyJavaScript, $wgPreloadJavaScriptMwUtil;
+               global $wgIncludeLegacyJavaScript;
 
                $legacyModules = [];
                if ( $wgIncludeLegacyJavaScript ) {
                        $legacyModules[] = 'mediawiki.legacy.wikibits';
                }
-               if ( $wgPreloadJavaScriptMwUtil ) {
-                       $legacyModules[] = 'mediawiki.util';
-               }
 
                return $legacyModules;
        }
index bf4e8a7..cea1f39 100644 (file)
@@ -54,8 +54,7 @@ class ResourceLoaderUserTokensModule extends ResourceLoaderModule {
        /**
         * Generate the JavaScript content of this module.
         *
-        * Add '@nomin' annotation to prevent the module's contents from getting
-        * cached (T84960).
+        * Add FILTER_NOMIN annotation to prevent needless minification and caching (T84960).
         *
         * @param ResourceLoaderContext $context
         * @return string
index 65b0309..1ea7271 100644 (file)
@@ -55,11 +55,11 @@ class RevDelLogItem extends RevDelItem {
                $dbw = wfGetDB( DB_MASTER );
 
                $dbw->update( 'logging',
-                       array( 'log_deleted' => $bits ),
-                       array(
+                       [ 'log_deleted' => $bits ],
+                       [
                                'log_id' => $this->row->log_id,
                                'log_deleted' => $this->getBits() // cas
-                       ),
+                       ],
                        __METHOD__
                );
 
@@ -69,14 +69,14 @@ class RevDelLogItem extends RevDelItem {
                }
 
                $dbw->update( 'recentchanges',
-                       array(
+                       [
                                'rc_deleted' => $bits,
                                'rc_patrolled' => 1
-                       ),
-                       array(
+                       ],
+                       [
                                'rc_logid' => $this->row->log_id,
                                'rc_timestamp' => $this->row->log_timestamp // index
-                       ),
+                       ],
                        __METHOD__
                );
 
@@ -95,8 +95,8 @@ class RevDelLogItem extends RevDelItem {
                $loglink = Linker::link(
                        SpecialPage::getTitleFor( 'Log' ),
                        $this->list->msg( 'log' )->escaped(),
-                       array(),
-                       array( 'page' => $title->getPrefixedText() )
+                       [],
+                       [ 'page' => $title->getPrefixedText() ]
                );
                $loglink = $this->list->msg( 'parentheses' )->rawParams( $loglink )->escaped();
                // User links and action text
@@ -115,34 +115,34 @@ class RevDelLogItem extends RevDelItem {
        public function getApiData( ApiResult $result ) {
                $logEntry = DatabaseLogEntry::newFromRow( $this->row );
                $user = $this->list->getUser();
-               $ret = array(
+               $ret = [
                        'id' => $logEntry->getId(),
                        'type' => $logEntry->getType(),
                        'action' => $logEntry->getSubtype(),
-               );
+               ];
                $ret += $logEntry->isDeleted( LogPage::DELETED_USER )
-                       ? array( 'userhidden' => '' )
-                       : array();
+                       ? [ 'userhidden' => '' ]
+                       : [];
                $ret += $logEntry->isDeleted( LogPage::DELETED_COMMENT )
-                       ? array( 'commenthidden' => '' )
-                       : array();
+                       ? [ 'commenthidden' => '' ]
+                       : [];
                $ret += $logEntry->isDeleted( LogPage::DELETED_ACTION )
-                       ? array( 'actionhidden' => '' )
-                       : array();
+                       ? [ 'actionhidden' => '' ]
+                       : [];
 
                if ( LogEventsList::userCan( $this->row, LogPage::DELETED_ACTION, $user ) ) {
                        $ret['params'] = LogFormatter::newFromEntry( $logEntry )->formatParametersForApi();
                }
                if ( LogEventsList::userCan( $this->row, LogPage::DELETED_USER, $user ) ) {
-                       $ret += array(
+                       $ret += [
                                'userid' => $this->row->log_user,
                                'user' => $this->row->log_user_text,
-                       );
+                       ];
                }
                if ( LogEventsList::userCan( $this->row, LogPage::DELETED_COMMENT, $user ) ) {
-                       $ret += array(
+                       $ret += [
                                'comment' => $this->row->log_comment,
-                       );
+                       ];
                }
 
                return $ret;
index 10e56bf..b263fb3 100644 (file)
@@ -54,7 +54,7 @@ class SearchEngine {
 
        /**
         * Perform a full text search query and return a result set.
-        * If title searches are not supported or disabled, return null.
+        * If full text searches are not supported or disabled, return null.
         * STUB
         *
         * @param string $term Raw search term
@@ -708,10 +708,6 @@ class SearchEngine {
         * @return SearchSuggestionSet
         */
        protected function processCompletionResults( $search, SearchSuggestionSet $suggestions ) {
-               if ( $suggestions->getSize() == 0 ) {
-                       // If we don't have anything, don't bother
-                       return $suggestions;
-               }
                $search = trim( $search );
                // preload the titles with LinkBatch
                $titles = $suggestions->map( function( SearchSuggestion $sugg ) {
@@ -726,6 +722,10 @@ class SearchEngine {
                } );
 
                // Rescore results with an exact title match
+               // NOTE: in some cases like cross-namespace redirects
+               // (frequently used as shortcuts e.g. WP:WP on huwiki) some
+               // backends like Cirrus will return no results. We should still
+               // try an exact title match to workaround this limitation
                $rescorer = new SearchExactMatchRescorer();
                $rescoredResults = $rescorer->rescore( $search, $this->namespaces, $results, $this->limit );
 
index 598702d..5e8fb04 100644 (file)
@@ -160,7 +160,7 @@ class SearchMssql extends SearchDatabase {
                        }
                }
 
-               $searchon = $this->db->addQuotes( join( ',', $q ) );
+               $searchon = $this->db->addQuotes( implode( ',', $q ) );
                $field = $this->getIndexField( $fulltext );
                return "$field, $searchon";
        }
index 8da39db..8ba49b6 100644 (file)
@@ -136,8 +136,7 @@ class SearchPostgres extends SearchDatabase {
                        # # TODO: Better output (example to catch: one 'two)
                        die( "Sorry, that was not a valid search string. Please go back and try again" );
                }
-               $top = $res->fetchRow();
-               $top = $top[0];
+               $top = $res->fetchRow()[0];
 
                $this->searchTerms = [];
                if ( $top === "" ) { # # e.g. if only stopwords are used XXX return something better
index 44199bd..5831b09 100644 (file)
@@ -120,7 +120,7 @@ class BotPasswordSessionProvider extends ImmutableSessionProviderWithCookie {
                if ( $missingKeys ) {
                        $this->logger->info( 'Session "{session}": Missing metadata: {missing}', [
                                'session' => $info,
-                               'missing' => join( ', ', $missingKeys ),
+                               'missing' => implode( ', ', $missingKeys ),
                        ] );
                        return false;
                }
@@ -147,7 +147,7 @@ class BotPasswordSessionProvider extends ImmutableSessionProviderWithCookie {
                }
 
                $status = $bp->getRestrictions()->check( $request );
-               if ( !$status->isOk() ) {
+               if ( !$status->isOK() ) {
                        $this->logger->info(
                                'Session "{session}": Restrictions check failed',
                                [
@@ -165,16 +165,19 @@ class BotPasswordSessionProvider extends ImmutableSessionProviderWithCookie {
                return true;
        }
 
+       /**
+        * @codeCoverageIgnore
+        */
        public function preventSessionsForUser( $username ) {
                BotPassword::removeAllPasswordsForUser( $username );
        }
 
        public function getAllowedUserRights( SessionBackend $backend ) {
                if ( $backend->getProvider() !== $this ) {
-                       throw new InvalidArgumentException( 'Backend\'s provider isn\'t $this' );
+                       throw new \InvalidArgumentException( 'Backend\'s provider isn\'t $this' );
                }
                $data = $backend->getProviderMetadata();
-               if ( $data ) {
+               if ( $data && isset( $data['rights'] ) && is_array( $data['rights'] ) ) {
                        return $data['rights'];
                }
 
index 9f42c27..882084d 100644 (file)
@@ -22,6 +22,7 @@
 
 namespace MediaWiki\Session;
 
+use Exception;
 use UnexpectedValueException;
 
 /**
index 93b0b36..695ce5a 100644 (file)
@@ -111,6 +111,12 @@ class PHPSessionHandler implements \SessionHandlerInterface {
                        return;
                }
 
+               // @codeCoverageIgnoreStart
+               if ( defined( 'MW_NO_SESSION_HANDLER' ) ) {
+                       throw new \BadMethodCallException( 'MW_NO_SESSION_HANDLER is defined' );
+               }
+               // @codeCoverageIgnoreEnd
+
                self::$instance = new self( $manager );
 
                // Close any auto-started session, before we replace it
index 96e8d50..0fd8fa8 100644 (file)
@@ -124,6 +124,13 @@ final class Session implements \Countable, \Iterator, \ArrayAccess {
                $this->backend->persist();
        }
 
+       /**
+        * Make this session not be persisted across requests
+        */
+       public function unpersist() {
+               $this->backend->unpersist();
+       }
+
        /**
         * Indicate whether the user should be remembered independently of the
         * session ID.
@@ -345,7 +352,7 @@ final class Session implements \Countable, \Iterator, \ArrayAccess {
                        $new = true;
                }
                if ( is_array( $salt ) ) {
-                       $salt = join( '|', $salt );
+                       $salt = implode( '|', $salt );
                }
                return new Token( $secret, (string)$salt, $new );
        }
index 0a9191b..1e2b476 100644 (file)
@@ -283,6 +283,35 @@ final class SessionBackend {
                }
        }
 
+       /**
+        * Make this session not persisted across requests
+        */
+       public function unpersist() {
+               if ( $this->persist ) {
+                       // Close the PHP session, if we're the one that's open
+                       if ( $this->usePhpSessionHandling && PHPSessionHandler::isEnabled() &&
+                               session_id() === (string)$this->id
+                       ) {
+                               $this->logger->debug(
+                                       'SessionBackend "{session}" Closing PHP session for unpersist',
+                                       [ 'session' => $this->id ]
+                               );
+                               session_write_close();
+                               session_id( '' );
+                       }
+
+                       $this->persist = false;
+                       $this->forcePersist = true;
+                       $this->metaDirty = true;
+
+                       // Delete the session data, so the local cache-only write in
+                       // self::save() doesn't get things out of sync with the backend.
+                       $this->store->delete( wfMemcKey( 'MWSession', (string)$this->id ) );
+
+                       $this->autosave();
+               }
+       }
+
        /**
         * Indicate whether the user should be remembered independently of the
         * session ID.
@@ -572,7 +601,9 @@ final class SessionBackend {
         * @param bool $closing Whether the session is being closed
         */
        public function save( $closing = false ) {
-               if ( $this->provider->getManager()->isUserSessionPrevented( $this->user->getName() ) ) {
+               $anon = $this->user->isAnon();
+
+               if ( !$anon && $this->provider->getManager()->isUserSessionPrevented( $this->user->getName() ) ) {
                        $this->logger->debug(
                                'SessionBackend "{session}" not saving, user {user} was ' .
                                'passed to SessionManager::preventSessionsForUser',
@@ -585,7 +616,6 @@ final class SessionBackend {
 
                // Ensure the user has a token
                // @codeCoverageIgnoreStart
-               $anon = $this->user->isAnon();
                if ( !$anon && !$this->user->getToken( false ) ) {
                        $this->logger->debug(
                                'SessionBackend "{session}" creating token for user {user} on save',
@@ -628,14 +658,22 @@ final class SessionBackend {
                                'forcePersist' => (int)$this->forcePersist,
                ] );
 
-               // Persist to the provider, if flagged
-               if ( $this->persist && ( $this->metaDirty || $this->forcePersist ) ) {
-                       foreach ( $this->requests as $request ) {
-                               $request->setSessionId( $this->getSessionId() );
-                               $this->provider->persistSession( $this, $request );
-                       }
-                       if ( !$closing ) {
-                               $this->checkPHPSession();
+               // Persist or unpersist to the provider, if necessary
+               if ( $this->metaDirty || $this->forcePersist ) {
+                       if ( $this->persist ) {
+                               foreach ( $this->requests as $request ) {
+                                       $request->setSessionId( $this->getSessionId() );
+                                       $this->provider->persistSession( $this, $request );
+                               }
+                               if ( !$closing ) {
+                                       $this->checkPHPSession();
+                               }
+                       } else {
+                               foreach ( $this->requests as $request ) {
+                                       if ( $request->getSessionId() === $this->id ) {
+                                               $this->provider->unpersistSession( $request );
+                                       }
+                               }
                        }
                }
 
index 0abec1b..da7bc57 100644 (file)
@@ -24,7 +24,6 @@
 namespace MediaWiki\Session;
 
 use Psr\Log\LoggerInterface;
-use Psr\Log\LogLevel;
 use BagOStuff;
 use CachedBagOStuff;
 use Config;
@@ -168,7 +167,6 @@ final class SessionManager implements SessionManagerInterface {
                        $store = $options['store'];
                } else {
                        $store = \ObjectCache::getInstance( $this->config->get( 'SessionCacheType' ) );
-                       $store->setLogger( $this->logger );
                }
                $this->store = $store instanceof CachedBagOStuff ? $store : new CachedBagOStuff( $store );
 
@@ -199,12 +197,17 @@ final class SessionManager implements SessionManagerInterface {
                }
 
                $session = null;
+               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, [ 'id' => $id, 'idIsSafe' => true ] );
 
-               // Test this here to provide a better log message for the common case
-               // of "no such ID"
+               // If we already have the backend loaded, use it directly
+               if ( isset( $this->allSessionBackends[$id] ) ) {
+                       return $this->getSessionFromInfo( $info, $request );
+               }
+
+               // Test if the session is in storage, and if so try to load it.
                $key = wfMemcKey( 'MWSession', $id );
                if ( is_array( $this->store->get( $key ) ) ) {
-                       $info = new SessionInfo( SessionInfo::MIN_PRIORITY, [ 'id' => $id, 'idIsSafe' => true ] );
+                       $create = false; // If loading fails, don't bother creating because it probably will fail too.
                        if ( $this->loadSessionInfoFromStore( $info, $request ) ) {
                                $session = $this->getSessionFromInfo( $info, $request );
                        }
@@ -288,7 +291,7 @@ final class SessionManager implements SessionManagerInterface {
                // Make sure there's exactly one
                if ( count( $infos ) > 1 ) {
                        throw new \UnexpectedValueException(
-                               'Multiple empty sessions tied for top priority: ' . join( ', ', $infos )
+                               'Multiple empty sessions tied for top priority: ' . implode( ', ', $infos )
                        );
                } elseif ( count( $infos ) < 1 ) {
                        throw new \UnexpectedValueException( 'No provider could provide an empty session!' );
@@ -298,6 +301,11 @@ final class SessionManager implements SessionManagerInterface {
        }
 
        public function getVaryHeaders() {
+               // @codeCoverageIgnoreStart
+               if ( defined( 'MW_NO_SESSION' ) && MW_NO_SESSION !== 'warn' ) {
+                       return [];
+               }
+               // @codeCoverageIgnoreEnd
                if ( $this->varyHeaders === null ) {
                        $headers = [];
                        foreach ( $this->getProviders() as $provider ) {
@@ -316,6 +324,11 @@ final class SessionManager implements SessionManagerInterface {
        }
 
        public function getVaryCookies() {
+               // @codeCoverageIgnoreStart
+               if ( defined( 'MW_NO_SESSION' ) && MW_NO_SESSION !== 'warn' ) {
+                       return [];
+               }
+               // @codeCoverageIgnoreEnd
                if ( $this->varyCookies === null ) {
                        $cookies = [];
                        foreach ( $this->getProviders() as $provider ) {
@@ -509,12 +522,14 @@ final class SessionManager implements SessionManagerInterface {
                }
 
                # Notify AuthPlugin
+               // @codeCoverageIgnoreStart
                $tmpUser = $user;
                $wgAuth->initUser( $tmpUser, true );
                if ( $tmpUser !== $user ) {
                        $logger->warning( __METHOD__ . ': ' .
                                get_class( $wgAuth ) . '::initUser() replaced the user object' );
                }
+               // @codeCoverageIgnoreEnd
 
                # Notify hooks (e.g. Newuserlog)
                \Hooks::run( 'AuthPluginAutoCreate', [ $user ] );
@@ -526,7 +541,7 @@ final class SessionManager implements SessionManagerInterface {
                \DeferredUpdates::addUpdate( new \SiteStatsUpdate( 0, 0, 0, 0, 1 ) );
 
                # Watch user's userpage and talk page
-               $user->addWatch( $user->getUserPage(), \WatchedItem::IGNORE_USER_RIGHTS );
+               $user->addWatch( $user->getUserPage(), User::IGNORE_USER_RIGHTS );
 
                return true;
        }
@@ -653,14 +668,20 @@ final class SessionManager implements SessionManagerInterface {
                                                // This is going to error out below, but we want to
                                                // provide a complete list.
                                                $retInfos[] = $info;
+                                       } else {
+                                               // Session load failed, so unpersist it from this request
+                                               $info->getProvider()->unpersistSession( $request );
                                        }
                                }
+                       } else {
+                               // Session load failed, so unpersist it from this request
+                               $info->getProvider()->unpersistSession( $request );
                        }
                }
 
                if ( count( $retInfos ) > 1 ) {
                        $ex = new \OverflowException(
-                               'Multiple sessions for this request tied for top priority: ' . join( ', ', $retInfos )
+                               'Multiple sessions for this request tied for top priority: ' . implode( ', ', $retInfos )
                        );
                        $ex->sessionInfos = $retInfos;
                        throw $ex;
@@ -953,6 +974,19 @@ final class SessionManager implements SessionManagerInterface {
         * @return Session
         */
        public function getSessionFromInfo( SessionInfo $info, WebRequest $request ) {
+               // @codeCoverageIgnoreStart
+               if ( defined( 'MW_NO_SESSION' ) ) {
+                       if ( MW_NO_SESSION === 'warn' ) {
+                               // Undocumented safety case for converting existing entry points
+                               $this->logger->error( 'Sessions are supposed to be disabled for this entry point', [
+                                       'exception' => new \BadMethodCallException( 'Sessions are disabled for this entry point' ),
+                               ] );
+                       } else {
+                               throw new \BadMethodCallException( 'Sessions are disabled for this entry point' );
+                       }
+               }
+               // @codeCoverageIgnoreEnd
+
                $id = $info->getId();
 
                if ( !isset( $this->allSessionBackends[$id] ) ) {
@@ -1066,96 +1100,6 @@ final class SessionManager implements SessionManagerInterface {
                self::$globalSessionRequest = null;
        }
 
-       /**
-        * Do a sanity check to make sure the session is not used from many different IP addresses
-        * and store some data for later sanity checks.
-        * FIXME remove this once SessionManager is considered stable
-        * @private For use in Setup.php only
-        * @param Session $session Defaults to the global session.
-        */
-       public function checkIpLimits( Session $session = null ) {
-               $session = $session ?: self::getGlobalSession();
-
-               try {
-                       $ip = $session->getRequest()->getIP();
-               } catch ( \MWException $e ) {
-                       return;
-               }
-               if ( $ip === '127.0.0.1' || \IP::isConfiguredProxy( $ip ) ) {
-                       return;
-               }
-               $now = time();
-
-               // Record (and possibly log) that the IP is using the current session.
-               // Don't touch the stored data unless we are adding a new IP or re-adding an expired one.
-               // This is slightly inaccurate (when an existing IP is seen again, the expiry is not
-               // extended) but that shouldn't make much difference and limits the session write frequency
-               // to # of IPs / $wgSuspiciousIpExpiry.
-               $data = $session->get( 'SessionManager-ip', [] );
-               if (
-                       !isset( $data[$ip] )
-                       || $data[$ip] < $now
-               ) {
-                       $data[$ip] = time() + $this->config->get( 'SuspiciousIpExpiry' );
-                       foreach ( $data as $key => $expires ) {
-                               if ( $expires < $now ) {
-                                       unset( $data[$key] );
-                               }
-                       }
-                       $session->set( 'SessionManager-ip', $data );
-
-                       $logger = \MediaWiki\Logger\LoggerFactory::getInstance( 'session-ip' );
-                       $logLevel = count( $data ) >= $this->config->get( 'SuspiciousIpPerSessionLimit' )
-                               ? LogLevel::WARNING : ( count( $data ) === 1 ? LogLevel::DEBUG : LogLevel::INFO );
-                       $logger->log(
-                               $logLevel,
-                               'Same session used from {count} IPs',
-                               [
-                                       'count' => count( $data ),
-                                       'ips' => $data,
-                                       'session' => $session->getId(),
-                                       'user' => $session->getUser()->getName(),
-                                       'persistent' => $session->isPersistent(),
-                               ]
-                       );
-               }
-
-               // Now do the same thing globally for the current user.
-               // We are using the object cache and assume it is shared between all wikis of a farm,
-               // and further assume that the same name belongs to the same user on all wikis. (It's either
-               // that or a central ID lookup which would mean an extra SQL query on every request.)
-               if ( $session->getUser()->isLoggedIn() ) {
-                       $userKey = 'SessionManager-ip:' . md5( $session->getUser()->getName() );
-                       $data = $this->store->get( $userKey ) ?: [];
-                       if (
-                               !isset( $data[$ip] )
-                               || $data[$ip] < $now
-                       ) {
-                               $data[$ip] = time() + $this->config->get( 'SuspiciousIpExpiry' );
-                               foreach ( $data as $key => $expires ) {
-                                       if ( $expires < $now ) {
-                                               unset( $data[$key] );
-                                       }
-                               }
-                               $this->store->set( $userKey, $data, $this->config->get( 'SuspiciousIpExpiry' ) );
-                               $logger = \MediaWiki\Logger\LoggerFactory::getInstance( 'session-ip' );
-                               $logLevel = count( $data ) >= $this->config->get( 'SuspiciousIpPerUserLimit' )
-                                       ? LogLevel::WARNING : ( count( $data ) === 1 ? LogLevel::DEBUG : LogLevel::INFO );
-                               $logger->log(
-                                       $logLevel,
-                                       'Same user had sessions from {count} IPs',
-                                       [
-                                               'count' => count( $data ),
-                                               'ips' => $data,
-                                               'session' => $session->getId(),
-                                               'user' => $session->getUser()->getName(),
-                                               'persistent' => $session->isPersistent(),
-                                       ]
-                               );
-                       }
-               }
-       }
-
        /**@}*/
 
 }
index 0d0e448..198d331 100644 (file)
@@ -50,7 +50,7 @@ class HashSiteStore implements SiteStore {
         *
         * @param Site $site
         *
-        * @return boolean Success indicator
+        * @return bool Success indicator
         */
        public function saveSite( Site $site ) {
                $this->sites[$site->getGlobalId()] = $site;
@@ -65,7 +65,7 @@ class HashSiteStore implements SiteStore {
         *
         * @param Site[] $sites
         *
-        * @return boolean Success indicator
+        * @return bool Success indicator
         */
        public function saveSites( array $sites ) {
                foreach ( $sites as $site ) {
index 85b17f9..3408db3 100644 (file)
@@ -56,7 +56,7 @@ abstract class BaseTemplate extends QuickTemplate {
         */
        function getToolbox() {
 
-               $toolbox = array();
+               $toolbox = [];
                if ( isset( $this->data['nav_urls']['whatlinkshere'] )
                        && $this->data['nav_urls']['whatlinkshere']
                ) {
@@ -72,7 +72,7 @@ abstract class BaseTemplate extends QuickTemplate {
                }
                if ( isset( $this->data['feeds'] ) && $this->data['feeds'] ) {
                        $toolbox['feeds']['id'] = 'feedlinks';
-                       $toolbox['feeds']['links'] = array();
+                       $toolbox['feeds']['links'] = [];
                        foreach ( $this->data['feeds'] as $key => $feed ) {
                                $toolbox['feeds']['links'][$key] = $feed;
                                $toolbox['feeds']['links'][$key]['id'] = "feed-$key";
@@ -81,8 +81,8 @@ abstract class BaseTemplate extends QuickTemplate {
                                $toolbox['feeds']['links'][$key]['class'] = 'feedlink';
                        }
                }
-               foreach ( array( 'contributions', 'log', 'blockip', 'emailuser',
-                       'userrights', 'upload', 'specialpages' ) as $special
+               foreach ( [ 'contributions', 'log', 'blockip', 'emailuser',
+                       'userrights', 'upload', 'specialpages' ] as $special
                ) {
                        if ( isset( $this->data['nav_urls'][$special] ) && $this->data['nav_urls'][$special] ) {
                                $toolbox[$special] = $this->data['nav_urls'][$special];
@@ -111,7 +111,7 @@ abstract class BaseTemplate extends QuickTemplate {
                        $toolbox['info']['id'] = 't-info';
                }
 
-               Hooks::run( 'BaseTemplateToolbox', array( &$this, &$toolbox ) );
+               Hooks::run( 'BaseTemplateToolbox', [ &$this, &$toolbox ] );
                return $toolbox;
        }
 
@@ -126,21 +126,21 @@ abstract class BaseTemplate extends QuickTemplate {
         * @return array
         */
        function getPersonalTools() {
-               $personal_tools = array();
+               $personal_tools = [];
                foreach ( $this->get( 'personal_urls' ) as $key => $plink ) {
                        # The class on a personal_urls item is meant to go on the <a> instead
                        # of the <li> so we have to use a single item "links" array instead
                        # of using most of the personal_url's keys directly.
-                       $ptool = array(
-                               'links' => array(
-                                       array( 'single-id' => "pt-$key" ),
-                               ),
+                       $ptool = [
+                               'links' => [
+                                       [ 'single-id' => "pt-$key" ],
+                               ],
                                'id' => "pt-$key",
-                       );
+                       ];
                        if ( isset( $plink['active'] ) ) {
                                $ptool['active'] = $plink['active'];
                        }
-                       foreach ( array( 'href', 'class', 'text', 'dir' ) as $k ) {
+                       foreach ( [ 'href', 'class', 'text', 'dir' ] as $k ) {
                                if ( isset( $plink[$k] ) ) {
                                        $ptool['links'][0][$k] = $plink[$k];
                                }
@@ -150,7 +150,7 @@ abstract class BaseTemplate extends QuickTemplate {
                return $personal_tools;
        }
 
-       function getSidebar( $options = array() ) {
+       function getSidebar( $options = [] ) {
                // Force the rendering of the following portals
                $sidebar = $this->data['sidebar'];
                if ( !isset( $sidebar['SEARCH'] ) ) {
@@ -173,7 +173,7 @@ abstract class BaseTemplate extends QuickTemplate {
                        unset( $sidebar['LANGUAGES'] );
                }
 
-               $boxes = array();
+               $boxes = [];
                foreach ( $sidebar as $boxName => $content ) {
                        if ( $content === false ) {
                                continue;
@@ -181,41 +181,41 @@ abstract class BaseTemplate extends QuickTemplate {
                        switch ( $boxName ) {
                        case 'SEARCH':
                                // Search is a special case, skins should custom implement this
-                               $boxes[$boxName] = array(
+                               $boxes[$boxName] = [
                                        'id' => 'p-search',
                                        'header' => $this->getMsg( 'search' )->text(),
                                        'generated' => false,
                                        'content' => true,
-                               );
+                               ];
                                break;
                        case 'TOOLBOX':
                                $msgObj = $this->getMsg( 'toolbox' );
-                               $boxes[$boxName] = array(
+                               $boxes[$boxName] = [
                                        'id' => 'p-tb',
                                        'header' => $msgObj->exists() ? $msgObj->text() : 'toolbox',
                                        'generated' => false,
                                        'content' => $this->getToolbox(),
-                               );
+                               ];
                                break;
                        case 'LANGUAGES':
                                if ( $this->data['language_urls'] ) {
                                        $msgObj = $this->getMsg( 'otherlanguages' );
-                                       $boxes[$boxName] = array(
+                                       $boxes[$boxName] = [
                                                'id' => 'p-lang',
                                                'header' => $msgObj->exists() ? $msgObj->text() : 'otherlanguages',
                                                'generated' => false,
                                                'content' => $this->data['language_urls'],
-                                       );
+                                       ];
                                }
                                break;
                        default:
                                $msgObj = $this->getMsg( $boxName );
-                               $boxes[$boxName] = array(
+                               $boxes[$boxName] = [
                                        'id' => "p-$boxName",
                                        'header' => $msgObj->exists() ? $msgObj->text() : $boxName,
                                        'generated' => true,
                                        'content' => $content,
-                               );
+                               ];
                                break;
                        }
                }
@@ -226,7 +226,7 @@ abstract class BaseTemplate extends QuickTemplate {
                        ob_start();
                        // We pass an extra 'true' at the end so extensions using BaseTemplateToolbox
                        // can abort and avoid outputting double toolbox links
-                       Hooks::run( 'SkinTemplateToolboxEnd', array( &$this, true ) );
+                       Hooks::run( 'SkinTemplateToolboxEnd', [ &$this, true ] );
                        $hookContents = ob_get_contents();
                        ob_end_clean();
                        if ( !trim( $hookContents ) ) {
@@ -253,14 +253,14 @@ abstract class BaseTemplate extends QuickTemplate {
                        }
                } else {
                        if ( $hookContents ) {
-                               $boxes['TOOLBOXEND'] = array(
+                               $boxes['TOOLBOXEND'] = [
                                        'id' => 'p-toolboxend',
                                        'header' => $boxes['TOOLBOX']['header'],
                                        'generated' => false,
                                        'content' => "<ul>{$hookContents}</ul>",
-                               );
+                               ];
                                // HACK: Make sure that TOOLBOXEND is sorted next to TOOLBOX
-                               $boxes2 = array();
+                               $boxes2 = [];
                                foreach ( $boxes as $key => $box ) {
                                        if ( $key === 'TOOLBOXEND' ) {
                                                continue;
@@ -283,7 +283,7 @@ abstract class BaseTemplate extends QuickTemplate {
         */
        protected function renderAfterPortlet( $name ) {
                $content = '';
-               Hooks::run( 'BaseTemplateAfterPortlet', array( $this, $name, &$content ) );
+               Hooks::run( 'BaseTemplateAfterPortlet', [ $this, $name, &$content ] );
 
                if ( $content !== '' ) {
                        echo "<div class='after-portlet after-portlet-$name'>$content</div>";
@@ -334,7 +334,7 @@ abstract class BaseTemplate extends QuickTemplate {
         *
         * @return string
         */
-       function makeLink( $key, $item, $options = array() ) {
+       function makeLink( $key, $item, $options = [] ) {
                if ( isset( $item['text'] ) ) {
                        $text = $item['text'];
                } else {
@@ -346,7 +346,7 @@ abstract class BaseTemplate extends QuickTemplate {
                if ( isset( $options['text-wrapper'] ) ) {
                        $wrapper = $options['text-wrapper'];
                        if ( isset( $wrapper['tag'] ) ) {
-                               $wrapper = array( $wrapper );
+                               $wrapper = [ $wrapper ];
                        }
                        while ( count( $wrapper ) > 0 ) {
                                $element = array_pop( $wrapper );
@@ -358,8 +358,8 @@ abstract class BaseTemplate extends QuickTemplate {
 
                if ( isset( $item['href'] ) || isset( $options['link-fallback'] ) ) {
                        $attrs = $item;
-                       foreach ( array( 'single-id', 'text', 'msg', 'tooltiponly', 'context', 'primary',
-                               'tooltip-params' ) as $k ) {
+                       foreach ( [ 'single-id', 'text', 'msg', 'tooltiponly', 'context', 'primary',
+                               'tooltip-params' ] as $k ) {
                                unset( $attrs[$k] );
                        }
 
@@ -367,7 +367,7 @@ abstract class BaseTemplate extends QuickTemplate {
                                $item['single-id'] = $item['id'];
                        }
 
-                       $tooltipParams = array();
+                       $tooltipParams = [];
                        if ( isset( $item['tooltip-params'] ) ) {
                                $tooltipParams = $item['tooltip-params'];
                        }
@@ -431,9 +431,9 @@ abstract class BaseTemplate extends QuickTemplate {
         *
         * @return string
         */
-       function makeListItem( $key, $item, $options = array() ) {
+       function makeListItem( $key, $item, $options = [] ) {
                if ( isset( $item['links'] ) ) {
-                       $links = array();
+                       $links = [];
                        foreach ( $item['links'] as $linkKey => $link ) {
                                $links[] = $this->makeLink( $linkKey, $link, $options );
                        }
@@ -441,7 +441,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', 'itemtitle' ) as $k ) {
+                       foreach ( [ 'id', 'class', 'active', 'tag', 'itemtitle' ] as $k ) {
                                unset( $link[$k] );
                        }
                        if ( isset( $item['id'] ) && !isset( $item['single-id'] ) ) {
@@ -453,8 +453,8 @@ abstract class BaseTemplate extends QuickTemplate {
                        $html = $this->makeLink( $key, $link, $options );
                }
 
-               $attrs = array();
-               foreach ( array( 'id', 'class' ) as $attr ) {
+               $attrs = [];
+               foreach ( [ 'id', 'class' ] as $attr ) {
                        if ( isset( $item[$attr] ) ) {
                                $attrs[$attr] = $item[$attr];
                        }
@@ -472,27 +472,27 @@ abstract class BaseTemplate extends QuickTemplate {
                return Html::rawElement( isset( $options['tag'] ) ? $options['tag'] : 'li', $attrs, $html );
        }
 
-       function makeSearchInput( $attrs = array() ) {
-               $realAttrs = array(
+       function makeSearchInput( $attrs = [] ) {
+               $realAttrs = [
                        'type' => 'search',
                        'name' => 'search',
                        'placeholder' => wfMessage( 'searchsuggest-search' )->text(),
                        'value' => $this->get( 'search', '' ),
-               );
+               ];
                $realAttrs = array_merge( $realAttrs, Linker::tooltipAndAccesskeyAttribs( 'search' ), $attrs );
                return Html::element( 'input', $realAttrs );
        }
 
-       function makeSearchButton( $mode, $attrs = array() ) {
+       function makeSearchButton( $mode, $attrs = [] ) {
                switch ( $mode ) {
                        case 'go':
                        case 'fulltext':
-                               $realAttrs = array(
+                               $realAttrs = [
                                        'type' => 'submit',
                                        'name' => $mode,
                                        'value' => $this->translator->translate(
                                                $mode == 'go' ? 'searcharticle' : 'searchbutton' ),
-                               );
+                               ];
                                $realAttrs = array_merge(
                                        $realAttrs,
                                        Linker::tooltipAndAccesskeyAttribs( "search-$mode" ),
@@ -500,10 +500,10 @@ abstract class BaseTemplate extends QuickTemplate {
                                );
                                return Html::element( 'input', $realAttrs );
                        case 'image':
-                               $buttonAttrs = array(
+                               $buttonAttrs = [
                                        'type' => 'submit',
                                        'name' => 'button',
-                               );
+                               ];
                                $buttonAttrs = array_merge(
                                        $buttonAttrs,
                                        Linker::tooltipAndAccesskeyAttribs( 'search-fulltext' ),
@@ -513,14 +513,14 @@ abstract class BaseTemplate extends QuickTemplate {
                                unset( $buttonAttrs['alt'] );
                                unset( $buttonAttrs['width'] );
                                unset( $buttonAttrs['height'] );
-                               $imgAttrs = array(
+                               $imgAttrs = [
                                        'src' => $attrs['src'],
                                        'alt' => isset( $attrs['alt'] )
                                                ? $attrs['alt']
                                                : $this->translator->translate( 'searchbutton' ),
                                        'width' => isset( $attrs['width'] ) ? $attrs['width'] : null,
                                        'height' => isset( $attrs['height'] ) ? $attrs['height'] : null,
-                               );
+                               ];
                                return Html::rawElement( 'button', $buttonAttrs, Html::element( 'img', $imgAttrs ) );
                        default:
                                throw new MWException( 'Unknown mode passed to BaseTemplate::makeSearchButton' );
@@ -540,9 +540,9 @@ abstract class BaseTemplate extends QuickTemplate {
                $footerlinks = $this->get( 'footerlinks' );
 
                // Reduce footer links down to only those which are being used
-               $validFooterLinks = array();
+               $validFooterLinks = [];
                foreach ( $footerlinks as $category => $links ) {
-                       $validFooterLinks[$category] = array();
+                       $validFooterLinks[$category] = [];
                        foreach ( $links as $link ) {
                                if ( isset( $this->data[$link] ) && $this->data[$link] ) {
                                        $validFooterLinks[$category][] = $link;
@@ -625,10 +625,10 @@ abstract class BaseTemplate extends QuickTemplate {
                foreach ( $this->data['indicators'] as $id => $content ) {
                        $out .= Html::rawElement(
                                'div',
-                               array(
+                               [
                                        'id' => Sanitizer::escapeId( "mw-indicator-$id" ),
                                        'class' => 'mw-indicator',
-                               ),
+                               ],
                                $content
                        ) . "\n";
                }
index 20cceda..02e8391 100644 (file)
@@ -26,7 +26,7 @@
  * @ingroup Skins
  */
 class MediaWikiI18N {
-       private $context = array();
+       private $context = [];
 
        function set( $varName, $value ) {
                $this->context[$varName] = $value;
@@ -39,7 +39,7 @@ class MediaWikiI18N {
 
                $value = wfMessage( $value )->text();
                // interpolate variables
-               $m = array();
+               $m = [];
                while ( preg_match( '/\$([0-9]*?)/sm', $value, $m ) ) {
                        list( $src, $var ) = $m;
                        MediaWiki\suppressWarnings();
index 905e537..af2d5da 100644 (file)
@@ -32,7 +32,7 @@ abstract class QuickTemplate {
         * @param Config $config
         */
        function __construct( Config $config = null ) {
-               $this->data = array();
+               $this->data = [];
                $this->translator = new MediaWikiI18N();
                if ( $config === null ) {
                        wfDebug( __METHOD__ . ' was called with no Config instance passed to it' );
index 83f119d..3cc1d8f 100644 (file)
@@ -55,7 +55,7 @@ abstract class Skin extends ContextSource {
         * @return string[]
         */
        static function getSkinNameMessages() {
-               $messages = array();
+               $messages = [];
                foreach ( self::getSkinNames() as $skinKey => $skinName ) {
                        $messages[] = "skinname-$skinKey";
                }
@@ -122,10 +122,10 @@ abstract class Skin extends ContextSource {
 
                // Older versions of the software used a numeric setting
                // in the user preferences.
-               $fallback = array(
+               $fallback = [
                        0 => $defaultSkin,
                        2 => 'cologneblue'
-               );
+               ];
 
                if ( isset( $fallback[$key] ) ) {
                        $key = $fallback[$key];
@@ -184,20 +184,20 @@ abstract class Skin extends ContextSource {
 
                $out = $this->getOutput();
                $user = $out->getUser();
-               $modules = array(
+               $modules = [
                        // modules that enhance the page content in some way
-                       'content' => array(
+                       'content' => [
                                'mediawiki.page.ready',
-                       ),
+                       ],
                        // modules that exist for legacy reasons
                        'legacy' => ResourceLoaderStartUpModule::getLegacyModules(),
                        // modules relating to search functionality
-                       'search' => array(),
+                       'search' => [],
                        // modules relating to functionality relating to watching an article
-                       'watch' => array(),
+                       'watch' => [],
                        // modules which relate to the current users preferences
-                       'user' => array(),
-               );
+                       'user' => [],
+               ];
 
                // Add various resources if required
                if ( $wgUseAjax && $wgEnableAPI ) {
@@ -226,7 +226,7 @@ abstract class Skin extends ContextSource {
         * Preload the existence of three commonly-requested pages in a single query
         */
        function preloadExistence() {
-               $titles = array();
+               $titles = [];
 
                $user = $this->getUser();
                $title = $this->getRelevantTitle();
@@ -246,7 +246,7 @@ abstract class Skin extends ContextSource {
                        $titles[] = $title->getTalkPage();
                }
 
-               Hooks::run( 'SkinPreloadExistence', array( &$titles, $this ) );
+               Hooks::run( 'SkinPreloadExistence', [ &$titles, $this ] );
 
                if ( count( $titles ) ) {
                        $lb = new LinkBatch( $titles );
@@ -370,13 +370,13 @@ abstract class Skin extends ContextSource {
        public static function getDynamicStylesheetQuery() {
                global $wgSquidMaxage;
 
-               return array(
+               return [
                                'action' => 'raw',
                                'maxage' => $wgSquidMaxage,
                                'usemsgcache' => 'yes',
                                'ctype' => 'text/css',
                                'smaxage' => $wgSquidMaxage,
-                       );
+                       ];
        }
 
        /**
@@ -423,11 +423,11 @@ abstract class Skin extends ContextSource {
         */
        public function getHtmlElementAttributes() {
                $lang = $this->getLanguage();
-               return array(
+               return [
                        'lang' => $lang->getHtmlCode(),
                        'dir' => $lang->getDir(),
                        'class' => 'client-nojs',
-               );
+               ];
        }
 
        /**
@@ -451,7 +451,7 @@ abstract class Skin extends ContextSource {
        }
 
        /**
-        * @return string
+        * @return string HTML
         */
        function getCategoryLinks() {
                global $wgUseCategoryBrowser;
@@ -542,25 +542,27 @@ abstract class Skin extends ContextSource {
        }
 
        /**
-        * @return string
+        * @return string HTML
         */
        function getCategories() {
                $out = $this->getOutput();
-
                $catlinks = $this->getCategoryLinks();
 
-               $classes = 'catlinks';
-
                // Check what we're showing
                $allCats = $out->getCategoryLinks();
                $showHidden = $this->getUser()->getBoolOption( 'showhiddencats' ) ||
                                                $this->getTitle()->getNamespace() == NS_CATEGORY;
 
+               $classes = [ 'catlinks' ];
                if ( empty( $allCats['normal'] ) && !( !empty( $allCats['hidden'] ) && $showHidden ) ) {
-                       $classes .= ' catlinks-allhidden';
+                       $classes[] = 'catlinks-allhidden';
                }
 
-               return "<div id='catlinks' class='$classes' data-mw='interface'>{$catlinks}</div>";
+               return Html::rawElement(
+                       'div',
+                       [ 'id' => 'catlinks', 'class' => $classes, 'data-mw' => 'interface' ],
+                       $catlinks
+               );
        }
 
        /**
@@ -580,7 +582,7 @@ abstract class Skin extends ContextSource {
        protected function afterContentHook() {
                $data = '';
 
-               if ( Hooks::run( 'SkinAfterContent', array( &$data, $this ) ) ) {
+               if ( Hooks::run( 'SkinAfterContent', [ &$data, $this ] ) ) {
                        // adding just some spaces shouldn't toggle the output
                        // of the whole <div/>, so we use trim() here
                        if ( trim( $data ) != '' ) {
@@ -617,7 +619,7 @@ abstract class Skin extends ContextSource {
                // OutputPage::getBottomScripts() which takes a Skin param. This should be cleaned
                // up at some point
                $bottomScriptText = $this->getOutput()->getBottomScripts();
-               Hooks::run( 'SkinAfterBottomScripts', array( $this, &$bottomScriptText ) );
+               Hooks::run( 'SkinAfterBottomScripts', [ $this, &$bottomScriptText ] );
 
                return $bottomScriptText;
        }
@@ -678,7 +680,7 @@ abstract class Skin extends ContextSource {
                $out = $this->getOutput();
                $subpages = '';
 
-               if ( !Hooks::run( 'SkinSubPageSubtitle', array( &$subpages, $this, $out ) ) ) {
+               if ( !Hooks::run( 'SkinSubPageSubtitle', [ &$subpages, $this, $out ] ) ) {
                        return $subpages;
                }
 
@@ -789,7 +791,7 @@ abstract class Skin extends ContextSource {
 
                Hooks::run(
                        'SkinCopyrightFooter',
-                       array( $this->getTitle(), $type, &$msg, &$link, &$forContent )
+                       [ $this->getTitle(), $type, &$msg, &$link, &$forContent ]
                );
 
                return $this->msg( $msg )->rawParams( $link )->text();
@@ -843,7 +845,7 @@ abstract class Skin extends ContextSource {
                $text = '<a href="//www.mediawiki.org/"><img src="' . $url1
                        . '" srcset="' . $url1_5 . ' 1.5x, ' . $url2 . ' 2x" '
                        . 'height="31" width="88" alt="Powered by MediaWiki" /></a>';
-               Hooks::run( 'SkinGetPoweredBy', array( &$text, $this ) );
+               Hooks::run( 'SkinGetPoweredBy', [ &$text, $this ] );
                return $text;
        }
 
@@ -917,7 +919,7 @@ abstract class Skin extends ContextSource {
                                $html = htmlspecialchars( $icon["alt"] );
                        }
                        if ( $url ) {
-                               $html = Html::rawElement( 'a', array( "href" => $url ), $html );
+                               $html = Html::rawElement( 'a', [ "href" => $url ], $html );
                        }
                }
                return $html;
@@ -996,7 +998,7 @@ abstract class Skin extends ContextSource {
         * @private
         */
        function editUrlOptions() {
-               $options = array( 'action' => 'edit' );
+               $options = [ 'action' => 'edit' ];
 
                if ( !$this->isRevisionCurrent() ) {
                        $options['oldid'] = intval( $this->getRevisionId() );
@@ -1164,10 +1166,10 @@ abstract class Skin extends ContextSource {
                $title = Title::newFromText( $name );
                self::checkTitle( $title, $name );
 
-               return array(
+               return [
                        'href' => $title->getLocalURL( $urlaction ),
                        'exists' => $title->isKnown(),
-               );
+               ];
        }
 
        /**
@@ -1180,10 +1182,10 @@ abstract class Skin extends ContextSource {
                $title = Title::newFromText( $name );
                self::checkTitle( $title, $name );
 
-               return array(
+               return [
                        'href' => $title->getLocalURL( $urlaction ),
                        'exists' => true
-               );
+               ];
        }
 
        /**
@@ -1227,9 +1229,9 @@ abstract class Skin extends ContextSource {
 
                $that = $this;
                $callback = function () use ( $that ) {
-                       $bar = array();
+                       $bar = [];
                        $that->addToSidebar( $bar, 'sidebar' );
-                       Hooks::run( 'SkinBuildSidebar', array( $that, &$bar ) );
+                       Hooks::run( 'SkinBuildSidebar', [ $that, &$bar ] );
 
                        return $bar;
                };
@@ -1240,14 +1242,14 @@ abstract class Skin extends ContextSource {
                                $cache->makeKey( 'sidebar', $this->getLanguage()->getCode() ),
                                $wgSidebarCacheExpiry,
                                $callback,
-                               array( 'lockTSE' => 30 )
+                               [ 'lockTSE' => 30 ]
                        );
                } else {
                        $sidebar = $callback();
                }
 
                // Apply post-processing to the cached value
-               Hooks::run( 'SidebarBeforeOutput', array( $this, &$sidebar ) );
+               Hooks::run( 'SidebarBeforeOutput', [ $this, &$sidebar ] );
 
                return $sidebar;
        }
@@ -1286,7 +1288,7 @@ abstract class Skin extends ContextSource {
                        if ( strpos( $line, '**' ) !== 0 ) {
                                $heading = trim( $line, '* ' );
                                if ( !array_key_exists( $heading, $bar ) ) {
-                                       $bar[$heading] = array();
+                                       $bar[$heading] = [];
                                }
                        } else {
                                $line = trim( $line, '* ' );
@@ -1300,7 +1302,7 @@ abstract class Skin extends ContextSource {
                                                continue;
                                        }
 
-                                       $extraAttribs = array();
+                                       $extraAttribs = [];
 
                                        $msgLink = $this->msg( $line[0] )->inContentLanguage();
                                        if ( $msgLink->exists() ) {
@@ -1342,12 +1344,12 @@ abstract class Skin extends ContextSource {
                                                }
                                        }
 
-                                       $bar[$heading][] = array_merge( array(
+                                       $bar[$heading][] = array_merge( [
                                                'text' => $text,
                                                'href' => $href,
                                                'id' => 'n-' . Sanitizer::escapeId( strtr( $line[1], ' ', '-' ), 'noninitial' ),
                                                'active' => false
-                                       ), $extraAttribs );
+                                       ], $extraAttribs );
                                } else {
                                        continue;
                                }
@@ -1386,7 +1388,7 @@ abstract class Skin extends ContextSource {
                $out = $this->getOutput();
 
                // Allow extensions to disable or modify the new messages alert
-               if ( !Hooks::run( 'GetNewMessagesAlert', array( &$newMessagesAlert, $newtalks, $user, $out ) ) ) {
+               if ( !Hooks::run( 'GetNewMessagesAlert', [ &$newMessagesAlert, $newtalks, $user, $out ] ) ) {
                        return '';
                }
                if ( $newMessagesAlert ) {
@@ -1417,17 +1419,17 @@ abstract class Skin extends ContextSource {
                        $newMessagesLink = Linker::linkKnown(
                                $uTalkTitle,
                                $this->msg( 'newmessageslinkplural' )->params( $plural )->escaped(),
-                               array(),
-                               array( 'redirect' => 'no' )
+                               [],
+                               [ 'redirect' => 'no' ]
                        );
 
                        $newMessagesDiffLink = Linker::linkKnown(
                                $uTalkTitle,
                                $this->msg( 'newmessagesdifflinkplural' )->params( $plural )->escaped(),
-                               array(),
+                               [],
                                $lastSeenRev !== null
-                                       ? array( 'oldid' => $lastSeenRev->getId(), 'diff' => 'cur' )
-                                       : array( 'diff' => 'cur' )
+                                       ? [ 'oldid' => $lastSeenRev->getId(), 'diff' => 'cur' ]
+                                       : [ 'diff' => 'cur' ]
                        );
 
                        if ( $nofAuthors >= 1 && $nofAuthors <= 10 ) {
@@ -1449,12 +1451,12 @@ abstract class Skin extends ContextSource {
                        $out->setCdnMaxage( 0 );
                } elseif ( count( $newtalks ) ) {
                        $sep = $this->msg( 'newtalkseparator' )->escaped();
-                       $msgs = array();
+                       $msgs = [];
 
                        foreach ( $newtalks as $newtalk ) {
                                $msgs[] = Xml::element(
                                        'a',
-                                       array( 'href' => $newtalk['link'] ), $newtalk['wiki']
+                                       [ 'href' => $newtalk['link'] ], $newtalk['wiki']
                                );
                        }
                        $parts = implode( $sep, $msgs );
@@ -1509,12 +1511,12 @@ abstract class Skin extends ContextSource {
 
                if ( $needParse ) {
                        $parsed = $this->getOutput()->parse( $notice );
-                       $parserMemc->set( $key, array( 'html' => $parsed, 'hash' => md5( $notice ) ), 600 );
+                       $parserMemc->set( $key, [ 'html' => $parsed, 'hash' => md5( $notice ) ], 600 );
                        $notice = $parsed;
                }
 
-               $notice = Html::rawElement( 'div', array( 'id' => 'localNotice',
-                       'lang' => $wgContLang->getHtmlCode(), 'dir' => $wgContLang->getDir() ), $notice );
+               $notice = Html::rawElement( 'div', [ 'id' => 'localNotice',
+                       'lang' => $wgContLang->getHtmlCode(), 'dir' => $wgContLang->getDir() ], $notice );
                return $notice;
        }
 
@@ -1526,7 +1528,7 @@ abstract class Skin extends ContextSource {
        function getSiteNotice() {
                $siteNotice = '';
 
-               if ( Hooks::run( 'SiteNoticeBefore', array( &$siteNotice, $this ) ) ) {
+               if ( Hooks::run( 'SiteNoticeBefore', [ &$siteNotice, $this ] ) ) {
                        if ( is_object( $this->getUser() ) && $this->getUser()->isLoggedIn() ) {
                                $siteNotice = $this->getCachedNotice( 'sitenotice' );
                        } else {
@@ -1542,7 +1544,7 @@ abstract class Skin extends ContextSource {
                        }
                }
 
-               Hooks::run( 'SiteNoticeAfter', array( &$siteNotice, $this ) );
+               Hooks::run( 'SiteNoticeAfter', [ &$siteNotice, $this ] );
                return $siteNotice;
        }
 
@@ -1565,7 +1567,7 @@ abstract class Skin extends ContextSource {
 
                $lang = wfGetLangObj( $lang );
 
-               $attribs = array();
+               $attribs = [];
                if ( !is_null( $tooltip ) ) {
                        # Bug 25462: undo double-escaping.
                        $tooltip = Sanitizer::decodeCharReferences( $tooltip );
@@ -1573,21 +1575,21 @@ abstract class Skin extends ContextSource {
                                ->inLanguage( $lang )->text();
                }
 
-               $links = array(
-                       'editsection' => array(
+               $links = [
+                       'editsection' => [
                                'text' => wfMessage( 'editsection' )->inLanguage( $lang )->escaped(),
                                'targetTitle' => $nt,
                                'attribs' => $attribs,
-                               'query' => array( 'action' => 'edit', 'section' => $section ),
-                               'options' => array( 'noclasses', 'known' )
-                       )
-               );
+                               'query' => [ 'action' => 'edit', 'section' => $section ],
+                               'options' => [ 'noclasses', 'known' ]
+                       ]
+               ];
 
-               Hooks::run( 'SkinEditSectionLinks', array( $this, $nt, $section, $tooltip, &$links, $lang ) );
+               Hooks::run( 'SkinEditSectionLinks', [ $this, $nt, $section, $tooltip, &$links, $lang ] );
 
                $result = '<span class="mw-editsection"><span class="mw-editsection-bracket">[</span>';
 
-               $linksHtml = array();
+               $linksHtml = [];
                foreach ( $links as $k => $linkDetails ) {
                        $linksHtml[] = Linker::link(
                                $linkDetails['targetTitle'],
@@ -1609,7 +1611,7 @@ abstract class Skin extends ContextSource {
                // Deprecated, use SkinEditSectionLinks hook instead
                Hooks::run(
                        'DoEditSectionLink',
-                       array( $this, $nt, $section, $tooltip, &$result, $lang ),
+                       [ $this, $nt, $section, $tooltip, &$result, $lang ],
                        '1.25'
                );
                return $result;
@@ -1625,7 +1627,7 @@ abstract class Skin extends ContextSource {
         * @return mixed
         */
        function __call( $fname, $args ) {
-               $realFunction = array( 'Linker', $fname );
+               $realFunction = [ 'Linker', $fname ];
                if ( is_callable( $realFunction ) ) {
                        wfDeprecated( get_class( $this ) . '::' . $fname, '1.21' );
                        return call_user_func_array( $realFunction, $args );
index 2fef220..1145efd 100644 (file)
@@ -42,7 +42,7 @@ class SkinApi extends SkinTemplate {
        // Skip work and hooks for stuff we don't use
 
        function buildSidebar() {
-               return array();
+               return [];
        }
 
        function getNewtalks() {
@@ -54,18 +54,18 @@ class SkinApi extends SkinTemplate {
        }
 
        public function getLanguages() {
-               return array();
+               return [];
        }
 
        protected function buildPersonalUrls() {
-               return array();
+               return [];
        }
 
        protected function buildContentNavigationUrls() {
-               return array();
+               return [];
        }
 
        protected function buildNavUrls() {
-               return array();
+               return [];
        }
 }
index 97b7038..f7d7cb2 100644 (file)
@@ -50,14 +50,14 @@ class SkinApiTemplate extends BaseTemplate {
        // Skip work and hooks for stuff we don't use
 
        function getToolbox() {
-               return array();
+               return [];
        }
 
        function getPersonalTools() {
-               return array();
+               return [];
        }
 
-       function getSidebar( $options = array() ) {
-               return array();
+       function getSidebar( $options = [] ) {
+               return [];
        }
 }
index ffbe629..366862d 100644 (file)
@@ -32,14 +32,14 @@ class SkinFactory {
         * Map of name => callback
         * @var array
         */
-       private $factoryFunctions = array();
+       private $factoryFunctions = [];
        /**
         * Map of name => fallback human-readable name, used when the 'skinname-<skin>' message is not
         * available
         *
         * @var array
         */
-       private $displayNames = array();
+       private $displayNames = [];
 
        /**
         * @var SkinFactory
index cd5e43c..ee8d841 100644 (file)
@@ -46,8 +46,8 @@ class SkinFallbackTemplate extends BaseTemplate {
                $enabledSkins = array_change_key_case( $enabledSkins, CASE_LOWER );
 
                if ( $installedSkins ) {
-                       $skinsInstalledText = array();
-                       $skinsInstalledSnippet = array();
+                       $skinsInstalledText = [];
+                       $skinsInstalledSnippet = [];
 
                        foreach ( $installedSkins as $skin ) {
                                $normalizedKey = strtolower( $skin );
@@ -105,7 +105,7 @@ class SkinFallbackTemplate extends BaseTemplate {
                <form action="<?php $this->text( 'wgScript' ) ?>">
                        <input type="hidden" name="title" value="<?php $this->text( 'searchtitle' ) ?>" />
                        <h3><label for="searchInput"><?php $this->msg( 'search' ) ?></label></h3>
-                       <?php echo $this->makeSearchInput( array( "id" => "searchInput" ) ) ?>
+                       <?php echo $this->makeSearchInput( [ "id" => "searchInput" ] ) ?>
                        <?php echo $this->makeSearchButton( 'go' ) ?>
                </form>
 
index 1328870..92311b5 100644 (file)
@@ -51,11 +51,11 @@ class SkinTemplate extends Skin {
         * @param OutputPage $out
         */
        function setupSkinUserCss( OutputPage $out ) {
-               $moduleStyles = array(
+               $moduleStyles = [
                        'mediawiki.legacy.shared',
                        'mediawiki.legacy.commonPrint',
                        'mediawiki.sectionAnchor'
-               );
+               ];
                if ( $out->isSyndicated() ) {
                        $moduleStyles[] = 'mediawiki.feedlink';
                }
@@ -92,16 +92,14 @@ class SkinTemplate extends Skin {
        public function getLanguages() {
                global $wgHideInterlanguageLinks;
                if ( $wgHideInterlanguageLinks ) {
-                       return array();
+                       return [];
                }
 
                $userLang = $this->getLanguage();
-               $languageLinks = array();
+               $languageLinks = [];
 
                foreach ( $this->getOutput()->getLanguageLinks() as $languageLinkText ) {
-                       $languageLinkParts = explode( ':', $languageLinkText, 2 );
-                       $class = 'interlanguage-link interwiki-' . $languageLinkParts[0];
-                       unset( $languageLinkParts );
+                       $class = 'interlanguage-link interwiki-' . explode( ':', $languageLinkText, 2 )[0];
 
                        $languageLinkTitle = Title::newFromText( $languageLinkText );
                        if ( $languageLinkTitle ) {
@@ -166,17 +164,17 @@ class SkinTemplate extends Skin {
                                }
 
                                $ilInterwikiCodeBCP47 = wfBCP47( $ilInterwikiCode );
-                               $languageLink = array(
+                               $languageLink = [
                                        'href' => $languageLinkTitle->getFullURL(),
                                        'text' => $ilLangName,
                                        'title' => $ilTitle,
                                        'class' => $class,
                                        'lang' => $ilInterwikiCodeBCP47,
                                        'hreflang' => $ilInterwikiCodeBCP47,
-                               );
+                               ];
                                Hooks::run(
                                        'SkinTemplateGetLanguageLink',
-                                       array( &$languageLink, $languageLinkTitle, $this->getTitle(), $this->getOutput() )
+                                       [ &$languageLink, $languageLinkTitle, $this->getTitle(), $this->getOutput() ]
                                );
                                $languageLinks[] = $languageLink;
                        }
@@ -196,7 +194,7 @@ class SkinTemplate extends Skin {
                $this->thispage = $title->getPrefixedDBkey();
                $this->titletxt = $title->getPrefixedText();
                $this->userpage = $user->getUserPage()->getPrefixedText();
-               $query = array();
+               $query = [];
                if ( !$request->wasPosted() ) {
                        $query = $request->getValues();
                        unset( $query['title'] );
@@ -250,6 +248,30 @@ class SkinTemplate extends Skin {
 
        }
 
+       /**
+        * Wrap the body text with language information and identifiable element
+        *
+        * @param Title $title
+        * @return string html
+        */
+       protected function wrapHTML( $title, $html ) {
+               # An ID that includes the actual body text; without categories, contentSub, ...
+               $realBodyAttribs = [ 'id' => 'mw-content-text' ];
+
+               # Add a mw-content-ltr/rtl class to be able to style based on text direction
+               # when the content is different from the UI language, i.e.:
+               # not for special pages or file pages AND only when viewing
+               if ( !in_array( $title->getNamespace(), [ NS_SPECIAL, NS_FILE ] ) &&
+                       Action::getActionName( $this ) === 'view' ) {
+                       $pageLang = $title->getPageViewLanguage();
+                       $realBodyAttribs['lang'] = $pageLang->getHtmlCode();
+                       $realBodyAttribs['dir'] = $pageLang->getDir();
+                       $realBodyAttribs['class'] = 'mw-content-' . $pageLang->getDir();
+               }
+
+               return Html::rawElement( 'div', $realBodyAttribs, $html );
+       }
+
        /**
         * initialize various variables and generate the template
         *
@@ -293,13 +315,13 @@ class SkinTemplate extends Skin {
 
                $tpl->set( 'catlinks', $this->getCategories() );
                if ( $out->isSyndicated() ) {
-                       $feeds = array();
+                       $feeds = [];
                        foreach ( $out->getSyndicationLinks() as $format => $link ) {
-                               $feeds[$format] = array(
+                               $feeds[$format] = [
                                        // Messages: feed-atom, feed-rss
                                        'text' => $this->msg( "feed-$format" )->text(),
                                        'href' => $link
-                               );
+                               ];
                        }
                        $tpl->setRef( 'feeds', $feeds );
                } else {
@@ -388,19 +410,19 @@ class SkinTemplate extends Skin {
                $tpl->set( 'privacy', $this->privacyLink() );
                $tpl->set( 'about', $this->aboutLink() );
 
-               $tpl->set( 'footerlinks', array(
-                       'info' => array(
+               $tpl->set( 'footerlinks', [
+                       'info' => [
                                'lastmod',
                                'numberofwatchingusers',
                                'credits',
                                'copyright',
-                       ),
-                       'places' => array(
+                       ],
+                       'places' => [
                                'privacy',
                                'about',
                                'disclaimer',
-                       ),
-               ) );
+                       ],
+               ] );
 
                global $wgFooterIcons;
                $tpl->set( 'footericons', $wgFooterIcons );
@@ -426,22 +448,8 @@ class SkinTemplate extends Skin {
                $tpl->set( 'sitenotice', $this->getSiteNotice() );
                $tpl->set( 'bottomscripts', $this->bottomScripts() );
                $tpl->set( 'printfooter', $this->printSource() );
-
-               # An ID that includes the actual body text; without categories, contentSub, ...
-               $realBodyAttribs = array( 'id' => 'mw-content-text' );
-
-               # Add a mw-content-ltr/rtl class to be able to style based on text direction
-               # when the content is different from the UI language, i.e.:
-               # not for special pages or file pages AND only when viewing
-               if ( !in_array( $title->getNamespace(), array( NS_SPECIAL, NS_FILE ) ) &&
-                       Action::getActionName( $this ) === 'view' ) {
-                       $pageLang = $title->getPageViewLanguage();
-                       $realBodyAttribs['lang'] = $pageLang->getHtmlCode();
-                       $realBodyAttribs['dir'] = $pageLang->getDir();
-                       $realBodyAttribs['class'] = 'mw-content-' . $pageLang->getDir();
-               }
-
-               $out->mBodytext = Html::rawElement( 'div', $realBodyAttribs, $out->mBodytext );
+               // Wrap the bodyText with #mw-content-text element
+               $out->mBodytext = $this->wrapHTML( $title, $out->mBodytext );
                $tpl->setRef( 'bodytext', $out->mBodytext );
 
                $language_urls = $this->getLanguages();
@@ -469,7 +477,7 @@ class SkinTemplate extends Skin {
                $tpl->set( 'reporttime', wfReportTime() );
 
                // original version by hansm
-               if ( !Hooks::run( 'SkinTemplateOutputPageBeforeExec', array( &$this, &$tpl ) ) ) {
+               if ( !Hooks::run( 'SkinTemplateOutputPageBeforeExec', [ &$this, &$tpl ] ) ) {
                        wfDebug( __METHOD__ . ": Hook SkinTemplateOutputPageBeforeExec broke outputPage execution!\n" );
                }
 
@@ -482,7 +490,7 @@ class SkinTemplate extends Skin {
                // start not outputting information.
                $tpl->data['bodytext'] .= Html::rawElement(
                        'div',
-                       array( 'class' => 'printfooter' ),
+                       [ 'class' => 'printfooter' ],
                        "\n{$tpl->data['printfooter']}"
                ) . "\n";
                $tpl->data['bodytext'] .= $tpl->data['debughtml'];
@@ -556,7 +564,7 @@ class SkinTemplate extends Skin {
                $pageurl = $title->getLocalURL();
 
                /* set up the default links for the personal toolbar */
-               $personal_urls = array();
+               $personal_urls = [];
 
                # Due to bug 32276, if a user does not have read permissions,
                # $this->getTitle() will just give Special:Badtitle, which is
@@ -568,7 +576,7 @@ class SkinTemplate extends Skin {
                        $page = Title::newFromText( $request->getVal( 'title', '' ) );
                }
                $page = $request->getVal( 'returnto', $page );
-               $a = array();
+               $a = [];
                if ( strval( $page ) !== '' ) {
                        $a['returnto'] = $page;
                        $query = $request->getVal( 'returntoquery', $this->thisquery );
@@ -579,34 +587,34 @@ class SkinTemplate extends Skin {
 
                $returnto = wfArrayToCgi( $a );
                if ( $this->loggedin ) {
-                       $personal_urls['userpage'] = array(
+                       $personal_urls['userpage'] = [
                                'text' => $this->username,
                                'href' => &$this->userpageUrlDetails['href'],
                                'class' => $this->userpageUrlDetails['exists'] ? false : 'new',
                                'active' => ( $this->userpageUrlDetails['href'] == $pageurl ),
                                'dir' => 'auto'
-                       );
+                       ];
                        $usertalkUrlDetails = $this->makeTalkUrlDetails( $this->userpage );
-                       $personal_urls['mytalk'] = array(
+                       $personal_urls['mytalk'] = [
                                'text' => $this->msg( 'mytalk' )->text(),
                                'href' => &$usertalkUrlDetails['href'],
                                'class' => $usertalkUrlDetails['exists'] ? false : 'new',
                                'active' => ( $usertalkUrlDetails['href'] == $pageurl )
-                       );
+                       ];
                        $href = self::makeSpecialUrl( 'Preferences' );
-                       $personal_urls['preferences'] = array(
+                       $personal_urls['preferences'] = [
                                'text' => $this->msg( 'mypreferences' )->text(),
                                'href' => $href,
                                'active' => ( $href == $pageurl )
-                       );
+                       ];
 
                        if ( $this->getUser()->isAllowed( 'viewmywatchlist' ) ) {
                                $href = self::makeSpecialUrl( 'Watchlist' );
-                               $personal_urls['watchlist'] = array(
+                               $personal_urls['watchlist'] = [
                                        'text' => $this->msg( 'mywatchlist' )->text(),
                                        'href' => $href,
                                        'active' => ( $href == $pageurl )
-                               );
+                               ];
                        }
 
                        # We need to do an explicit check for Special:Contributions, as we
@@ -627,12 +635,12 @@ class SkinTemplate extends Skin {
                        }
 
                        $href = self::makeSpecialUrlSubpage( 'Contributions', $this->username );
-                       $personal_urls['mycontris'] = array(
+                       $personal_urls['mycontris'] = [
                                'text' => $this->msg( 'mycontris' )->text(),
                                'href' => $href,
                                'active' => $active
-                       );
-                       $personal_urls['logout'] = array(
+                       ];
+                       $personal_urls['logout'] = [
                                'text' => $this->msg( 'pt-userlogout' )->text(),
                                'href' => self::makeSpecialUrl( 'Userlogout',
                                        // userlogout link must always contain an & character, otherwise we might not be able
@@ -640,7 +648,7 @@ class SkinTemplate extends Skin {
                                        $title->isSpecial( 'Preferences' ) ? 'noreturnto' : $returnto
                                ),
                                'active' => false
-                       );
+                       ];
                } else {
                        $useCombinedLoginLink = $this->useCombinedLoginLink();
                        $loginlink = $this->getUser()->isAllowed( 'createaccount' ) && $useCombinedLoginLink
@@ -648,24 +656,24 @@ class SkinTemplate extends Skin {
                                : 'pt-login';
                        $is_signup = $request->getText( 'type' ) == 'signup';
 
-                       $login_url = array(
+                       $login_url = [
                                'text' => $this->msg( $loginlink )->text(),
                                'href' => self::makeSpecialUrl( 'Userlogin', $returnto ),
                                'active' => $title->isSpecial( 'Userlogin' )
                                        && ( $loginlink == 'nav-login-createaccount' || !$is_signup ),
-                       );
-                       $createaccount_url = array(
+                       ];
+                       $createaccount_url = [
                                'text' => $this->msg( 'pt-createaccount' )->text(),
                                'href' => self::makeSpecialUrl( 'Userlogin', "$returnto&type=signup" ),
                                'active' => $title->isSpecial( 'Userlogin' ) && $is_signup,
-                       );
+                       ];
 
                        // No need to show Talk and Contributions to anons if they can't contribute!
                        if ( User::groupHasPermission( '*', 'edit' ) ) {
                                // Show the text "Not logged in"
-                               $personal_urls['anonuserpage'] = array(
+                               $personal_urls['anonuserpage'] = [
                                        'text' => $this->msg( 'notloggedin' )->text()
-                               );
+                               ];
 
                                // Because of caching, we can't link directly to the IP talk and
                                // contributions pages. Instead we use the special page shortcuts
@@ -673,16 +681,16 @@ class SkinTemplate extends Skin {
                                // determine whether these links are active or not, but since major
                                // skins (MonoBook, Vector) don't use this information, it's not a
                                // huge loss.
-                               $personal_urls['anontalk'] = array(
+                               $personal_urls['anontalk'] = [
                                        'text' => $this->msg( 'anontalk' )->text(),
                                        'href' => self::makeSpecialUrlSubpage( 'Mytalk', false ),
                                        'active' => false
-                               );
-                               $personal_urls['anoncontribs'] = array(
+                               ];
+                               $personal_urls['anoncontribs'] = [
                                        'text' => $this->msg( 'anoncontribs' )->text(),
                                        'href' => self::makeSpecialUrlSubpage( 'Mycontributions', false ),
                                        'active' => false
-                               );
+                               ];
                        }
 
                        if ( $this->getUser()->isAllowed( 'createaccount' ) && !$useCombinedLoginLink ) {
@@ -692,7 +700,7 @@ class SkinTemplate extends Skin {
                        $personal_urls['login'] = $login_url;
                }
 
-               Hooks::run( 'PersonalUrls', array( &$personal_urls, &$title, $this ) );
+               Hooks::run( 'PersonalUrls', [ &$personal_urls, &$title, $this ] );
                return $personal_urls;
        }
 
@@ -708,7 +716,7 @@ class SkinTemplate extends Skin {
         * @return array
         */
        function tabAction( $title, $message, $selected, $query = '', $checkEdit = false ) {
-               $classes = array();
+               $classes = [];
                if ( $selected ) {
                        $classes[] = 'selected';
                }
@@ -736,18 +744,18 @@ class SkinTemplate extends Skin {
                                MWNamespace::getSubject( $title->getNamespace() ) );
                }
 
-               $result = array();
-               if ( !Hooks::run( 'SkinTemplateTabAction', array( &$this,
+               $result = [];
+               if ( !Hooks::run( 'SkinTemplateTabAction', [ &$this,
                                $title, $message, $selected, $checkEdit,
-                               &$classes, &$query, &$text, &$result ) ) ) {
+                               &$classes, &$query, &$text, &$result ] ) ) {
                        return $result;
                }
 
-               return array(
+               return [
                        'class' => implode( ' ', $classes ),
                        'text' => $text,
                        'href' => $title->getLocalURL( $query ),
-                       'primary' => true );
+                       'primary' => true ];
        }
 
        function makeTalkUrlDetails( $name, $urlaction = '' ) {
@@ -757,10 +765,10 @@ class SkinTemplate extends Skin {
                }
                $title = $title->getTalkPage();
                self::checkTitle( $title, $name );
-               return array(
+               return [
                        'href' => $title->getLocalURL( $urlaction ),
                        'exists' => $title->isKnown(),
-               );
+               ];
        }
 
        /**
@@ -770,10 +778,10 @@ class SkinTemplate extends Skin {
                $title = Title::newFromText( $name );
                $title = $title->getSubjectPage();
                self::checkTitle( $title, $name );
-               return array(
+               return [
                        'href' => $title->getLocalURL( $urlaction ),
                        'exists' => $title->exists(),
-               );
+               ];
        }
 
        /**
@@ -821,12 +829,12 @@ class SkinTemplate extends Skin {
                $request = $this->getRequest();
                $user = $this->getUser();
 
-               $content_navigation = array(
-                       'namespaces' => array(),
-                       'views' => array(),
-                       'actions' => array(),
-                       'variants' => array()
-               );
+               $content_navigation = [
+                       'namespaces' => [],
+                       'views' => [],
+                       'actions' => [],
+                       'variants' => []
+               ];
 
                // parameters
                $action = $request->getVal( 'action', 'view' );
@@ -834,7 +842,7 @@ class SkinTemplate extends Skin {
                $userCanRead = $title->quickUserCan( 'read', $user );
 
                $preventActiveTabs = false;
-               Hooks::run( 'SkinTemplatePreventOtherActiveTabs', array( &$this, &$preventActiveTabs ) );
+               Hooks::run( 'SkinTemplatePreventOtherActiveTabs', [ &$this, &$preventActiveTabs ] );
 
                // Checks if page is some kind of content
                if ( $title->canExist() ) {
@@ -857,7 +865,7 @@ class SkinTemplate extends Skin {
                        $skname = $this->skinname;
 
                        // Adds namespace links
-                       $subjectMsg = array( "nstab-$subjectId" );
+                       $subjectMsg = [ "nstab-$subjectId" ];
                        if ( $subjectPage->isMainPage() ) {
                                array_unshift( $subjectMsg, 'mainpage-nstab' );
                        }
@@ -866,7 +874,7 @@ class SkinTemplate extends Skin {
                        );
                        $content_navigation['namespaces'][$subjectId]['context'] = 'subject';
                        $content_navigation['namespaces'][$talkId] = $this->tabAction(
-                               $talkPage, array( "nstab-$talkId", 'talk' ), $isTalk && !$preventActiveTabs, '', $userCanRead
+                               $talkPage, [ "nstab-$talkId", 'talk' ], $isTalk && !$preventActiveTabs, '', $userCanRead
                        );
                        $content_navigation['namespaces'][$talkId]['context'] = 'talk';
 
@@ -878,7 +886,7 @@ class SkinTemplate extends Skin {
                                if ( $title->exists() || $isForeignFile ) {
                                        $content_navigation['views']['view'] = $this->tabAction(
                                                $isTalk ? $talkPage : $subjectPage,
-                                               array( "$skname-view-view", 'view' ),
+                                               [ "$skname-view-view", 'view' ],
                                                ( $onPage && ( $action == 'view' || $action == 'purge' ) ), '', true
                                        );
                                        // signal to hide this from simple content_actions
@@ -888,14 +896,14 @@ class SkinTemplate extends Skin {
                                // If it is a non-local file, show a link to the file in its own repository
                                if ( $isForeignFile ) {
                                        $file = $this->getWikiPage()->getFile();
-                                       $content_navigation['views']['view-foreign'] = array(
+                                       $content_navigation['views']['view-foreign'] = [
                                                'class' => '',
                                                'text' => wfMessageFallback( "$skname-view-foreign", 'view-foreign' )->
                                                        setContext( $this->getContext() )->
                                                        params( $file->getRepo()->getDisplayName() )->text(),
                                                'href' => $file->getDescriptionUrl(),
                                                'primary' => false,
-                                       );
+                                       ];
                                }
 
                                // Checks if user can edit the current page if it exists or create it otherwise
@@ -921,7 +929,7 @@ class SkinTemplate extends Skin {
                                        } else {
                                                $msgKey = $isForeignFile ? 'create-local' : 'create';
                                        }
-                                       $content_navigation['views']['edit'] = array(
+                                       $content_navigation['views']['edit'] = [
                                                'class' => ( $isEditing && ( $section !== 'new' || !$showNewSection )
                                                        ? 'selected'
                                                        : ''
@@ -930,58 +938,58 @@ class SkinTemplate extends Skin {
                                                        ->setContext( $this->getContext() )->text(),
                                                'href' => $title->getLocalURL( $this->editUrlOptions() ),
                                                'primary' => !$isForeignFile, // don't collapse this in vector
-                                       );
+                                       ];
 
                                        // section link
                                        if ( $showNewSection ) {
                                                // Adds new section link
                                                // $content_navigation['actions']['addsection']
-                                               $content_navigation['views']['addsection'] = array(
+                                               $content_navigation['views']['addsection'] = [
                                                        'class' => ( $isEditing && $section == 'new' ) ? 'selected' : false,
                                                        'text' => wfMessageFallback( "$skname-action-addsection", 'addsection' )
                                                                ->setContext( $this->getContext() )->text(),
                                                        'href' => $title->getLocalURL( 'action=edit&section=new' )
-                                               );
+                                               ];
                                        }
                                // Checks if the page has some kind of viewable content
                                } elseif ( $title->hasSourceText() ) {
                                        // Adds view source view link
-                                       $content_navigation['views']['viewsource'] = array(
+                                       $content_navigation['views']['viewsource'] = [
                                                'class' => ( $onPage && $action == 'edit' ) ? 'selected' : false,
                                                'text' => wfMessageFallback( "$skname-action-viewsource", 'viewsource' )
                                                        ->setContext( $this->getContext() )->text(),
                                                'href' => $title->getLocalURL( $this->editUrlOptions() ),
                                                'primary' => true, // don't collapse this in vector
-                                       );
+                                       ];
                                }
 
                                // Checks if the page exists
                                if ( $title->exists() ) {
                                        // Adds history view link
-                                       $content_navigation['views']['history'] = array(
+                                       $content_navigation['views']['history'] = [
                                                'class' => ( $onPage && $action == 'history' ) ? 'selected' : false,
                                                'text' => wfMessageFallback( "$skname-view-history", 'history_short' )
                                                        ->setContext( $this->getContext() )->text(),
                                                'href' => $title->getLocalURL( 'action=history' ),
-                                       );
+                                       ];
 
                                        if ( $title->quickUserCan( 'delete', $user ) ) {
-                                               $content_navigation['actions']['delete'] = array(
+                                               $content_navigation['actions']['delete'] = [
                                                        'class' => ( $onPage && $action == 'delete' ) ? 'selected' : false,
                                                        'text' => wfMessageFallback( "$skname-action-delete", 'delete' )
                                                                ->setContext( $this->getContext() )->text(),
                                                        'href' => $title->getLocalURL( 'action=delete' )
-                                               );
+                                               ];
                                        }
 
                                        if ( $title->quickUserCan( 'move', $user ) ) {
                                                $moveTitle = SpecialPage::getTitleFor( 'Movepage', $title->getPrefixedDBkey() );
-                                               $content_navigation['actions']['move'] = array(
+                                               $content_navigation['actions']['move'] = [
                                                        'class' => $this->getTitle()->isSpecial( 'Movepage' ) ? 'selected' : false,
                                                        'text' => wfMessageFallback( "$skname-action-move", 'move' )
                                                                ->setContext( $this->getContext() )->text(),
                                                        'href' => $moveTitle->getLocalURL()
-                                               );
+                                               ];
                                        }
                                } else {
                                        // article doesn't exist or is deleted
@@ -992,26 +1000,26 @@ class SkinTemplate extends Skin {
                                                        // If the user can't undelete but can view deleted
                                                        // history show them a "View .. deleted" tab instead.
                                                        $msgKey = $user->isAllowed( 'undelete' ) ? 'undelete' : 'viewdeleted';
-                                                       $content_navigation['actions']['undelete'] = array(
+                                                       $content_navigation['actions']['undelete'] = [
                                                                'class' => $this->getTitle()->isSpecial( 'Undelete' ) ? 'selected' : false,
                                                                'text' => wfMessageFallback( "$skname-action-$msgKey", "{$msgKey}_short" )
                                                                        ->setContext( $this->getContext() )->numParams( $n )->text(),
                                                                'href' => $undelTitle->getLocalURL()
-                                                       );
+                                                       ];
                                                }
                                        }
                                }
 
                                if ( $title->quickUserCan( 'protect', $user ) && $title->getRestrictionTypes() &&
-                                       MWNamespace::getRestrictionLevels( $title->getNamespace(), $user ) !== array( '' )
+                                       MWNamespace::getRestrictionLevels( $title->getNamespace(), $user ) !== [ '' ]
                                ) {
                                        $mode = $title->isProtected() ? 'unprotect' : 'protect';
-                                       $content_navigation['actions'][$mode] = array(
+                                       $content_navigation['actions'][$mode] = [
                                                'class' => ( $onPage && $action == $mode ) ? 'selected' : false,
                                                'text' => wfMessageFallback( "$skname-action-$mode", $mode )
                                                        ->setContext( $this->getContext() )->text(),
                                                'href' => $title->getLocalURL( "action=$mode" )
-                                       );
+                                       ];
                                }
 
                                // Checks if the user is logged in
@@ -1026,18 +1034,18 @@ class SkinTemplate extends Skin {
                                         * the global versions.
                                         */
                                        $mode = $user->isWatched( $title ) ? 'unwatch' : 'watch';
-                                       $content_navigation['actions'][$mode] = array(
+                                       $content_navigation['actions'][$mode] = [
                                                'class' => 'mw-watchlink ' . (
                                                        $onPage && ( $action == 'watch' || $action == 'unwatch' ) ? 'selected' : ''
                                                ),
                                                // uses 'watch' or 'unwatch' message
                                                'text' => $this->msg( $mode )->text(),
-                                               'href' => $title->getLocalURL( array( 'action' => $mode ) )
-                                       );
+                                               'href' => $title->getLocalURL( [ 'action' => $mode ] )
+                                       ];
                                }
                        }
 
-                       Hooks::run( 'SkinTemplateNavigation', array( &$this, &$content_navigation ) );
+                       Hooks::run( 'SkinTemplateNavigation', [ &$this, &$content_navigation ] );
 
                        if ( $userCanRead && !$wgDisableLangConversion ) {
                                $pageLang = $title->getPageLanguage();
@@ -1053,38 +1061,38 @@ class SkinTemplate extends Skin {
                                                $params = $request->getQueryValues();
                                                unset( $params['title'] );
                                        } else {
-                                               $params = array();
+                                               $params = [];
                                        }
                                        // Loops over each variant
                                        foreach ( $variants as $code ) {
                                                // Gets variant name from language code
                                                $varname = $pageLang->getVariantname( $code );
                                                // Appends variant link
-                                               $content_navigation['variants'][] = array(
+                                               $content_navigation['variants'][] = [
                                                        'class' => ( $code == $preferred ) ? 'selected' : false,
                                                        'text' => $varname,
-                                                       'href' => $title->getLocalURL( array( 'variant' => $code ) + $params ),
+                                                       'href' => $title->getLocalURL( [ 'variant' => $code ] + $params ),
                                                        'lang' => wfBCP47( $code ),
                                                        'hreflang' => wfBCP47( $code ),
-                                               );
+                                               ];
                                        }
                                }
                        }
                } else {
                        // If it's not content, it's got to be a special page
-                       $content_navigation['namespaces']['special'] = array(
+                       $content_navigation['namespaces']['special'] = [
                                'class' => 'selected',
                                'text' => $this->msg( 'nstab-special' )->text(),
                                'href' => $request->getRequestURL(), // @see: bug 2457, bug 2510
                                'context' => 'subject'
-                       );
+                       ];
 
                        Hooks::run( 'SkinTemplateNavigation::SpecialPage',
-                               array( &$this, &$content_navigation ) );
+                               [ &$this, &$content_navigation ] );
                }
 
                // Equiv to SkinTemplateContentActions
-               Hooks::run( 'SkinTemplateNavigation::Universal', array( &$this, &$content_navigation ) );
+               Hooks::run( 'SkinTemplateNavigation::Universal', [ &$this, &$content_navigation ] );
 
                // Setup xml ids and tooltip info
                foreach ( $content_navigation as $section => &$links ) {
@@ -1110,7 +1118,7 @@ class SkinTemplate extends Skin {
                # give the edit tab an accesskey, because that's fairly
                # superfluous and conflicts with an accesskey (Ctrl-E) often
                # used for editing in Safari.
-               if ( in_array( $action, array( 'edit', 'submit' ) ) ) {
+               if ( in_array( $action, [ 'edit', 'submit' ] ) ) {
                        if ( isset( $content_navigation['views']['edit'] ) ) {
                                $content_navigation['views']['edit']['tooltiponly'] = true;
                        }
@@ -1136,7 +1144,7 @@ class SkinTemplate extends Skin {
                // compatibility and also for skins that just want simple tabs content_actions
                // is now built by flattening the content_navigation arrays into one
 
-               $content_actions = array();
+               $content_actions = [];
 
                foreach ( $content_navigation as $links ) {
                        foreach ( $links as $key => $value ) {
@@ -1176,16 +1184,16 @@ class SkinTemplate extends Skin {
                $out = $this->getOutput();
                $request = $this->getRequest();
 
-               $nav_urls = array();
-               $nav_urls['mainpage'] = array( 'href' => self::makeMainPageUrl() );
+               $nav_urls = [];
+               $nav_urls['mainpage'] = [ 'href' => self::makeMainPageUrl() ];
                if ( $wgUploadNavigationUrl ) {
-                       $nav_urls['upload'] = array( 'href' => $wgUploadNavigationUrl );
+                       $nav_urls['upload'] = [ 'href' => $wgUploadNavigationUrl ];
                } elseif ( UploadBase::isEnabled() && UploadBase::isAllowed( $this->getUser() ) === true ) {
-                       $nav_urls['upload'] = array( 'href' => self::makeSpecialUrl( 'Upload' ) );
+                       $nav_urls['upload'] = [ 'href' => self::makeSpecialUrl( 'Upload' ) ];
                } else {
                        $nav_urls['upload'] = false;
                }
-               $nav_urls['specialpages'] = array( 'href' => self::makeSpecialUrl( 'Specialpages' ) );
+               $nav_urls['specialpages'] = [ 'href' => self::makeSpecialUrl( 'Specialpages' ) ];
 
                $nav_urls['print'] = false;
                $nav_urls['permalink'] = false;
@@ -1201,42 +1209,42 @@ class SkinTemplate extends Skin {
                // A print stylesheet is attached to all pages, but nobody ever
                // figures that out. :)  Add a link...
                if ( !$out->isPrintable() && ( $out->isArticle() || $this->getTitle()->isSpecialPage() ) ) {
-                       $nav_urls['print'] = array(
+                       $nav_urls['print'] = [
                                'text' => $this->msg( 'printableversion' )->text(),
                                'href' => $this->getTitle()->getLocalURL(
                                        $request->appendQueryValue( 'printable', 'yes' ) )
-                       );
+                       ];
                }
 
                if ( $out->isArticle() ) {
                        // Also add a "permalink" while we're at it
                        $revid = $this->getRevisionId();
                        if ( $revid ) {
-                               $nav_urls['permalink'] = array(
+                               $nav_urls['permalink'] = [
                                        'text' => $this->msg( 'permalink' )->text(),
                                        'href' => $this->getTitle()->getLocalURL( "oldid=$revid" )
-                               );
+                               ];
                        }
 
                        // Use the copy of revision ID in case this undocumented, shady hook tries to mess with internals
                        Hooks::run( 'SkinTemplateBuildNavUrlsNav_urlsAfterPermalink',
-                               array( &$this, &$nav_urls, &$revid, &$revid ) );
+                               [ &$this, &$nav_urls, &$revid, &$revid ] );
                }
 
                if ( $out->isArticleRelated() ) {
-                       $nav_urls['whatlinkshere'] = array(
+                       $nav_urls['whatlinkshere'] = [
                                'href' => SpecialPage::getTitleFor( 'Whatlinkshere', $this->thispage )->getLocalURL()
-                       );
+                       ];
 
-                       $nav_urls['info'] = array(
+                       $nav_urls['info'] = [
                                'text' => $this->msg( 'pageinfo-toolboxlink' )->text(),
                                'href' => $this->getTitle()->getLocalURL( "action=info" )
-                       );
+                       ];
 
                        if ( $this->getTitle()->exists() ) {
-                               $nav_urls['recentchangeslinked'] = array(
+                               $nav_urls['recentchangeslinked'] = [
                                        'href' => SpecialPage::getTitleFor( 'Recentchangeslinked', $this->thispage )->getLocalURL()
-                               );
+                               ];
                        }
                }
 
@@ -1244,37 +1252,37 @@ class SkinTemplate extends Skin {
                if ( $user ) {
                        $rootUser = $user->getName();
 
-                       $nav_urls['contributions'] = array(
+                       $nav_urls['contributions'] = [
                                'text' => $this->msg( 'contributions', $rootUser )->text(),
                                'href' => self::makeSpecialUrlSubpage( 'Contributions', $rootUser ),
-                               'tooltip-params' => array( $rootUser ),
-                       );
+                               'tooltip-params' => [ $rootUser ],
+                       ];
 
-                       $nav_urls['log'] = array(
+                       $nav_urls['log'] = [
                                'href' => self::makeSpecialUrlSubpage( 'Log', $rootUser )
-                       );
+                       ];
 
                        if ( $this->getUser()->isAllowed( 'block' ) ) {
-                               $nav_urls['blockip'] = array(
+                               $nav_urls['blockip'] = [
                                        'text' => $this->msg( 'blockip', $rootUser )->text(),
                                        'href' => self::makeSpecialUrlSubpage( 'Block', $rootUser )
-                               );
+                               ];
                        }
 
                        if ( $this->showEmailUser( $user ) ) {
-                               $nav_urls['emailuser'] = array(
+                               $nav_urls['emailuser'] = [
                                        'href' => self::makeSpecialUrlSubpage( 'Emailuser', $rootUser ),
-                                       'tooltip-params' => array( $rootUser ),
-                               );
+                                       'tooltip-params' => [ $rootUser ],
+                               ];
                        }
 
                        if ( !$user->isAnon() ) {
                                $sur = new UserrightsPage;
                                $sur->setContext( $this->getContext() );
                                if ( $sur->userCanExecute( $this->getUser() ) ) {
-                                       $nav_urls['userrights'] = array(
+                                       $nav_urls['userrights'] = [
                                                'href' => self::makeSpecialUrlSubpage( 'Userrights', $rootUser )
-                                       );
+                                       ];
                                }
                        }
                }
index 83e6db3..2523810 100644 (file)
@@ -490,24 +490,43 @@ abstract class QueryPage extends SpecialPage {
         * Subclasses may override this to further restrict or modify limit and offset.
         *
         * @note Restricts the offset parameter, as most query pages have inefficient paging
-        * @since 1.26
         *
+        * Its generally expected that the returned limit will not be 0, and the returned
+        * offset will be less than the max results.
+        *
+        * @since 1.26
         * @return int[] list( $limit, $offset )
         */
        protected function getLimitOffset() {
                list( $limit, $offset ) = $this->getRequest()->getLimitOffset();
-               if ( !$this->getConfig()->get( 'MiserMode' ) ) {
+               if ( $this->getConfig()->get( 'MiserMode' ) ) {
                        $maxResults = $this->getMaxResults();
                        // Can't display more than max results on a page
                        $limit = min( $limit, $maxResults );
-                       // Can't skip over more than $maxResults
-                       $offset = min( $offset, $maxResults );
-                       // Can't let $offset + $limit > $maxResults
-                       $limit = min( $limit, $maxResults - $offset );
+                       // Can't skip over more than the end of $maxResults
+                       $offset = min( $offset, $maxResults + 1 );
                }
                return [ $limit, $offset ];
        }
 
+       /**
+        * What is limit to fetch from DB
+        *
+        * Used to make it appear the DB stores less results then it actually does
+        * @param $uiLimit int Limit from UI
+        * @param $uiOffset int Offset from UI
+        * @return int Limit to use for DB (not including extra row to see if at end)
+        */
+       protected function getDBLimit( $uiLimit, $uiOffset ) {
+               $maxResults = $this->getMaxResults();
+               if ( $this->getConfig()->get( 'MiserMode' ) ) {
+                       $limit = min( $uiLimit + 1, $maxResults - $uiOffset );
+                       return max( $limit, 0 );
+               } else {
+                       return $uiLimit + 1;
+               }
+       }
+
        /**
         * Get max number of results we can return in miser mode.
         *
@@ -518,7 +537,7 @@ abstract class QueryPage extends SpecialPage {
         * @return int
         */
        protected function getMaxResults() {
-               // Max of 10000, unless we store more than 5000 in query cache.
+               // Max of 10000, unless we store more than 10000 in query cache.
                return max( $this->getConfig()->get( 'QueryCacheLimit' ), 10000 );
        }
 
@@ -549,14 +568,14 @@ abstract class QueryPage extends SpecialPage {
                if ( $this->limit == 0 && $this->offset == 0 ) {
                        list( $this->limit, $this->offset ) = $this->getLimitOffset();
                }
-
+               $dbLimit = $this->getDBLimit( $this->limit, $this->offset );
                // @todo Use doQuery()
                if ( !$this->isCached() ) {
                        # select one extra row for navigation
-                       $res = $this->reallyDoQuery( $this->limit + 1, $this->offset );
+                       $res = $this->reallyDoQuery( $dbLimit, $this->offset );
                } else {
                        # Get the cached result, select one extra row for navigation
-                       $res = $this->fetchFromCache( $this->limit + 1, $this->offset );
+                       $res = $this->fetchFromCache( $dbLimit, $this->offset );
                        if ( !$this->listoutput ) {
 
                                # Fetch the timestamp of this update
@@ -603,8 +622,9 @@ abstract class QueryPage extends SpecialPage {
                                        min( $this->numRows, $this->limit ), # do not show the one extra row, if exist
                                        $this->offset + 1, ( min( $this->numRows, $this->limit ) + $this->offset ) )->parseAsBlock() );
                                # Disable the "next" link when we reach the end
-                               $atEnd = ( $this->numRows <= $this->limit )
-                                       || ( $this->offset + $this-> limit  >= $this->getMaxResults() );
+                               $miserMaxResults = $this->getConfig()->get( 'MiserMode' )
+                                       && ( $this->offset + $this->limit >= $this->getMaxResults() );
+                               $atEnd = ( $this->numRows <= $this->limit ) || $miserMaxResults;
                                $paging = $this->getLanguage()->viewPrevNext( $this->getPageTitle( $par ), $this->offset,
                                        $this->limit, $this->linkParameters(), $atEnd );
                                $out->addHTML( '<p>' . $paging . '</p>' );
index bc2bb31..8ce480e 100644 (file)
@@ -582,31 +582,51 @@ class SpecialPageFactory {
         * @return string HTML fragment
         */
        public static function capturePath( Title $title, IContextSource $context ) {
-               global $wgOut, $wgTitle, $wgRequest, $wgUser, $wgLang;
-
-               // Save current globals
-               $oldTitle = $wgTitle;
-               $oldOut = $wgOut;
-               $oldRequest = $wgRequest;
-               $oldUser = $wgUser;
-               $oldLang = $wgLang;
-
-               // Set the globals to the current context
+               global $wgTitle, $wgOut, $wgRequest, $wgUser, $wgLang;
+               $main = RequestContext::getMain();
+
+               // Save current globals and main context
+               $glob = [
+                       'title' => $wgTitle,
+                       'output' => $wgOut,
+                       'request' => $wgRequest,
+                       'user' => $wgUser,
+                       'language' => $wgLang,
+               ];
+               $ctx = [
+                       'title' => $main->getTitle(),
+                       'output' => $main->getOutput(),
+                       'request' => $main->getRequest(),
+                       'user' => $main->getUser(),
+                       'language' => $main->getLanguage(),
+               ];
+
+               // Override
                $wgTitle = $title;
                $wgOut = $context->getOutput();
                $wgRequest = $context->getRequest();
                $wgUser = $context->getUser();
                $wgLang = $context->getLanguage();
+               $main->setTitle( $title );
+               $main->setOutput( $context->getOutput() );
+               $main->setRequest( $context->getRequest() );
+               $main->setUser( $context->getUser() );
+               $main->setLanguage( $context->getLanguage() );
 
                // The useful part
                $ret = self::executePath( $title, $context, true );
 
-               // And restore the old globals
-               $wgTitle = $oldTitle;
-               $wgOut = $oldOut;
-               $wgRequest = $oldRequest;
-               $wgUser = $oldUser;
-               $wgLang = $oldLang;
+               // Restore old globals and context
+               $wgTitle = $glob['title'];
+               $wgOut = $glob['output'];
+               $wgRequest = $glob['request'];
+               $wgUser = $glob['user'];
+               $wgLang = $glob['language'];
+               $main->setTitle( $ctx['title'] );
+               $main->setOutput( $ctx['output'] );
+               $main->setRequest( $ctx['request'] );
+               $main->setUser( $ctx['user'] );
+               $main->setLanguage( $ctx['language'] );
 
                return $ret;
        }
index c06db01..9c5fc2f 100644 (file)
@@ -223,8 +223,10 @@ class ActiveUsersPager extends UsersPager {
                        [
                                'class' => 'mw-ui-input-inline mw-autocomplete-user',
                                'tabindex' => 1,
-                               'autofocus' => $this->requestedUser === '',
-                       ]
+                       ] + (
+                               // Set autofocus on blank input
+                               $this->requestedUser === '' ? [ 'autofocus' => '' ] : []
+                       )
                ) . '<br />';
 
                $out .= Xml::checkLabel( $this->msg( 'activeusers-hidebots' )->text(),
index 9930655..625e4aa 100644 (file)
@@ -794,7 +794,7 @@ class SpecialBlock extends FormSpecialPage {
                        WatchAction::doWatch(
                                Title::makeTitle( NS_USER, $target ),
                                $performer,
-                               WatchedItem::IGNORE_USER_RIGHTS
+                               User::IGNORE_USER_RIGHTS
                        );
                }
 
index 37f769e..bcba190 100644 (file)
@@ -192,6 +192,7 @@ class SpecialBotPasswords extends FormSpecialPage {
                                'type' => 'textwithbutton',
                                'label-message' => 'botpasswords-label-appid',
                                'buttondefault' => $this->msg( 'botpasswords-label-create' )->text(),
+                               'buttonflags' => [ 'progressive', 'primary' ],
                                'required' => true,
                                'size' => BotPassword::APPID_MAXLENGTH,
                                'maxlength' => BotPassword::APPID_MAXLENGTH,
@@ -315,20 +316,21 @@ class SpecialBotPasswords extends FormSpecialPage {
        public function onSuccess() {
                $out = $this->getOutput();
 
+               $username = $this->getUser()->getName();
                switch ( $this->operation ) {
                        case 'insert':
                                $out->setPageTitle( $this->msg( 'botpasswords-created-title' )->text() );
-                               $out->addWikiMsg( 'botpasswords-created-body', $this->par );
+                               $out->addWikiMsg( 'botpasswords-created-body', $this->par, $username );
                                break;
 
                        case 'update':
                                $out->setPageTitle( $this->msg( 'botpasswords-updated-title' )->text() );
-                               $out->addWikiMsg( 'botpasswords-updated-body', $this->par );
+                               $out->addWikiMsg( 'botpasswords-updated-body', $this->par, $username );
                                break;
 
                        case 'delete':
                                $out->setPageTitle( $this->msg( 'botpasswords-deleted-title' )->text() );
-                               $out->addWikiMsg( 'botpasswords-deleted-body', $this->par );
+                               $out->addWikiMsg( 'botpasswords-deleted-body', $this->par, $username );
                                $this->password = null;
                                break;
                }
@@ -337,7 +339,7 @@ class SpecialBotPasswords extends FormSpecialPage {
                        $sep = BotPassword::getSeparator();
                        $out->addWikiMsg(
                                'botpasswords-newpassword',
-                               htmlspecialchars( $this->getUser()->getName() . $sep . $this->par ),
+                               htmlspecialchars( $username . $sep . $this->par ),
                                htmlspecialchars( $this->password )
                        );
                        $this->password = null;
@@ -346,24 +348,6 @@ class SpecialBotPasswords extends FormSpecialPage {
                $out->addReturnTo( $this->getPageTitle() );
        }
 
-       /**
-        * Return an array of subpages beginning with $search that this special page will accept.
-        *
-        * @param string $search Prefix to search for
-        * @param int $limit Maximum number of results to return (usually 10)
-        * @param int $offset Number of results to skip (usually 0)
-        * @return string[] Matching subpages
-        */
-       public function prefixSearchSubpages( $search, $limit, $offset ) {
-               $user = User::newFromName( $search );
-               if ( !$user ) {
-                       // No prefix suggestion for invalid user
-                       return [];
-               }
-               // Autocomplete subpage as user list - public to allow caching
-               return UserNamePrefixSearch::search( 'public', $search, $limit, $offset );
-       }
-
        protected function getGroupName() {
                return 'users';
        }
index bf44b42..ee9f665 100644 (file)
@@ -41,6 +41,11 @@ class SpecialChangeContentModel extends FormSpecialPage {
                if ( !$this->title ) {
                        $form->setMethod( 'GET' );
                }
+
+               $this->addHelpLink( 'Help:ChangeContentModel' );
+
+               // T120576
+               $form->setSubmitTextMsg( 'changecontentmodel-submit' );
        }
 
        public function validateTitle( $title ) {
@@ -183,7 +188,7 @@ class SpecialChangeContentModel extends FormSpecialPage {
                        $flags |= EDIT_FORCE_BOT;
                }
 
-               $log = new ManualLogEntry( 'contentmodel', 'change' );
+               $log = new ManualLogEntry( 'contentmodel', $this->oldRevision ? 'change' : 'new' );
                $log->setPerformer( $user );
                $log->setTarget( $this->title );
                $log->setComment( $data['reason'] );
index 4c3fc0e..b35446d 100644 (file)
@@ -173,13 +173,12 @@ class SpecialChangeEmail extends FormSpecialPage {
                        return Status::newFatal( 'changeemail-nochange' );
                }
 
-               $throttleCount = LoginForm::incLoginThrottle( $user->getName() );
-               if ( $throttleCount === true ) {
+               $throttleInfo = LoginForm::incrementLoginThrottle( $user->getName() );
+               if ( $throttleInfo ) {
                        $lang = $this->getLanguage();
-                       $throttleInfo = $this->getConfig()->get( 'PasswordAttemptThrottle' );
                        return Status::newFatal(
                                'changeemail-throttled',
-                               $lang->formatDuration( $throttleInfo['seconds'] )
+                               $lang->formatDuration( $throttleInfo['wait'] )
                        );
                }
 
@@ -190,9 +189,7 @@ class SpecialChangeEmail extends FormSpecialPage {
                        return Status::newFatal( 'wrongpassword' );
                }
 
-               if ( $throttleCount ) {
-                       LoginForm::clearLoginThrottle( $user->getName() );
-               }
+               LoginForm::clearLoginThrottle( $user->getName() );
 
                $oldaddr = $user->getEmail();
                $status = $user->setEmailWithConfirmation( $newaddr );
index 4f7ba25..5adc315 100644 (file)
@@ -257,12 +257,10 @@ class SpecialChangePassword extends FormSpecialPage {
                        return Status::newFatal( $this->msg( 'badretype' ) );
                }
 
-               $throttleCount = LoginForm::incLoginThrottle( $this->mUserName );
-               if ( $throttleCount === true ) {
-                       $lang = $this->getLanguage();
-                       $throttleInfo = $this->getConfig()->get( 'PasswordAttemptThrottle' );
+               $throttleInfo = LoginForm::incrementLoginThrottle( $this->mUserName );
+               if ( $throttleInfo ) {
                        return Status::newFatal( $this->msg( 'changepassword-throttled' )
-                               ->params( $lang->formatDuration( $throttleInfo['seconds'] ) )
+                               ->durationParams( $throttleInfo['wait'] )
                        );
                }
 
@@ -286,9 +284,7 @@ class SpecialChangePassword extends FormSpecialPage {
                }
 
                // Please reset throttle for successful logins, thanks!
-               if ( $throttleCount ) {
-                       LoginForm::clearLoginThrottle( $this->mUserName );
-               }
+               LoginForm::clearLoginThrottle( $this->mUserName );
 
                try {
                        $user->setPassword( $newpass );
@@ -336,7 +332,7 @@ class SpecialChangePassword extends FormSpecialPage {
                $dbw->update(
                        'user',
                        [ 'user_password_expires' => $dbw->timestampOrNull( $newExpire ) ],
-                       [ 'user_id' => $user->getID() ],
+                       [ 'user_id' => $user->getId() ],
                        __METHOD__
                );
        }
index 254d9e2..7b8aa4c 100644 (file)
@@ -85,7 +85,7 @@ class SpecialContributions extends IncludableSpecialPage {
 
                        return;
                }
-               $id = $userObj->getID();
+               $id = $userObj->getId();
 
                if ( $this->opts['contribs'] != 'newbie' ) {
                        $target = $nt->getText();
@@ -934,14 +934,16 @@ class ContribsPager extends ReverseChronologicalPager {
        function doBatchLookups() {
                # Do a link batch query
                $this->mResult->seek( 0 );
-               $revIds = [];
+               $parentRevIds = [];
+               $this->mParentLens = [];
                $batch = new LinkBatch();
                # Give some pointers to make (last) links
                foreach ( $this->mResult as $row ) {
                        if ( isset( $row->rev_parent_id ) && $row->rev_parent_id ) {
-                               $revIds[] = $row->rev_parent_id;
+                               $parentRevIds[] = $row->rev_parent_id;
                        }
                        if ( isset( $row->rev_id ) ) {
+                               $this->mParentLens[$row->rev_id] = $row->rev_len;
                                if ( $this->contribs === 'newbie' ) { // multiple users
                                        $batch->add( NS_USER, $row->user_name );
                                        $batch->add( NS_USER_TALK, $row->user_name );
@@ -949,7 +951,11 @@ class ContribsPager extends ReverseChronologicalPager {
                                $batch->add( $row->page_namespace, $row->page_title );
                        }
                }
-               $this->mParentLens = Revision::getParentLengths( $this->mDbSecondary, $revIds );
+               # Fetch rev_len for revisions not already scanned above
+               $this->mParentLens += Revision::getParentLengths(
+                       $this->mDbSecondary,
+                       array_diff( $parentRevIds, array_keys( $this->mParentLens ) )
+               );
                $batch->execute();
                $this->mResult->seek( 0 );
        }
index b790fdf..6256bbf 100644 (file)
@@ -470,7 +470,7 @@ class DeletedContributionsPage extends SpecialPage {
                }
                $links = '';
                $nt = $userObj->getUserPage();
-               $id = $userObj->getID();
+               $id = $userObj->getId();
                $talk = $nt->getTalkPage();
                if ( $talk ) {
                        # Talk page link
index 1a9d096..a9753ae 100644 (file)
@@ -307,32 +307,25 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
        private function getWatchlist() {
                $list = [];
 
-               $index = $this->getRequest()->wasPosted() ? DB_MASTER : DB_SLAVE;
-               $dbr = wfGetDB( $index );
-
-               $res = $dbr->select(
-                       'watchlist',
-                       [
-                               'wl_namespace', 'wl_title'
-                       ], [
-                               'wl_user' => $this->getUser()->getId(),
-                       ],
-                       __METHOD__
+               $watchedItems = WatchedItemStore::getDefaultInstance()->getWatchedItemsForUser(
+                       $this->getUser(),
+                       [ 'forWrite' => $this->getRequest()->wasPosted() ]
                );
 
-               if ( $res->numRows() > 0 ) {
+               if ( $watchedItems ) {
                        /** @var Title[] $titles */
                        $titles = [];
-                       foreach ( $res as $row ) {
-                               $title = Title::makeTitleSafe( $row->wl_namespace, $row->wl_title );
+                       foreach ( $watchedItems as $watchedItem ) {
+                               $namespace = $watchedItem->getLinkTarget()->getNamespace();
+                               $dbKey = $watchedItem->getLinkTarget()->getDBkey();
+                               $title = Title::makeTitleSafe( $namespace, $dbKey );
 
-                               if ( $this->checkTitle( $title, $row->wl_namespace, $row->wl_title )
+                               if ( $this->checkTitle( $title, $namespace, $dbKey )
                                        && !$title->isTalkPage()
                                ) {
                                        $titles[] = $title;
                                }
                        }
-                       $res->free();
 
                        GenderCache::singleton()->doTitlesArray( $titles );
 
@@ -354,22 +347,18 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
         */
        protected function getWatchlistInfo() {
                $titles = [];
-               $dbr = wfGetDB( DB_SLAVE );
 
-               $res = $dbr->select(
-                       [ 'watchlist' ],
-                       [ 'wl_namespace', 'wl_title' ],
-                       [ 'wl_user' => $this->getUser()->getId() ],
-                       __METHOD__,
-                       [ 'ORDER BY' => [ 'wl_namespace', 'wl_title' ] ]
-               );
+               $watchedItems = WatchedItemStore::getDefaultInstance()
+                       ->getWatchedItemsForUser( $this->getUser(), [ 'sort' => WatchedItemStore::SORT_ASC ] );
 
                $lb = new LinkBatch();
 
-               foreach ( $res as $row ) {
-                       $lb->add( $row->wl_namespace, $row->wl_title );
-                       if ( !MWNamespace::isTalk( $row->wl_namespace ) ) {
-                               $titles[$row->wl_namespace][$row->wl_title] = 1;
+               foreach ( $watchedItems as $watchedItem ) {
+                       $namespace = $watchedItem->getLinkTarget()->getNamespace();
+                       $dbKey = $watchedItem->getLinkTarget()->getDBkey();
+                       $lb->add( $namespace, $dbKey );
+                       if ( !MWNamespace::isTalk( $namespace ) ) {
+                               $titles[$namespace][$dbKey] = 1;
                        }
                }
 
@@ -413,22 +402,15 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                        return; // nothing to do
                }
 
-               $dbw = wfGetDB( DB_MASTER );
                $user = $this->getUser();
+               $store = WatchedItemStore::getDefaultInstance();
 
                foreach ( $this->badItems as $row ) {
                        list( $title, $namespace, $dbKey ) = $row;
                        $action = $title ? 'cleaning up' : 'deleting';
                        wfDebug( "User {$user->getName()} has broken watchlist item ns($namespace):$dbKey, $action.\n" );
 
-                       $dbw->delete( 'watchlist',
-                               [
-                                       'wl_user' => $user->getId(),
-                                       'wl_namespace' => $namespace,
-                                       'wl_title' => $dbKey,
-                               ],
-                               __METHOD__
-                       );
+                       $store->removeWatch( $user, new TitleValue( (int)$namespace, $dbKey ) );
 
                        // Can't just do an UPDATE instead of DELETE/INSERT due to unique index
                        if ( $title ) {
@@ -494,7 +476,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
         * @param array $titles Array of strings, or Title objects
         */
        private function unwatchTitles( $titles ) {
-               $dbw = wfGetDB( DB_MASTER );
+               $store = WatchedItemStore::getDefaultInstance();
 
                foreach ( $titles as $title ) {
                        if ( !$title instanceof Title ) {
@@ -502,25 +484,8 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                        }
 
                        if ( $title instanceof Title ) {
-                               $dbw->delete(
-                                       'watchlist',
-                                       [
-                                               'wl_user' => $this->getUser()->getId(),
-                                               'wl_namespace' => MWNamespace::getSubject( $title->getNamespace() ),
-                                               'wl_title' => $title->getDBkey(),
-                                       ],
-                                       __METHOD__
-                               );
-
-                               $dbw->delete(
-                                       'watchlist',
-                                       [
-                                               'wl_user' => $this->getUser()->getId(),
-                                               'wl_namespace' => MWNamespace::getTalk( $title->getNamespace() ),
-                                               'wl_title' => $title->getDBkey(),
-                                       ],
-                                       __METHOD__
-                               );
+                               $store->removeWatch( $this->getUser(), $title->getSubjectPage() );
+                               $store->removeWatch( $this->getUser(), $title->getTalkPage() );
 
                                $page = WikiPage::factory( $title );
                                Hooks::run( 'UnwatchArticleComplete', [ $this->getUser(), &$page ] );
index cdf350d..fb1943f 100644 (file)
@@ -154,6 +154,10 @@ class SpecialEmailUser extends UnlistedSpecialPage {
 
                $this->mTargetObj = $ret;
 
+               // Set the 'relevant user' in the skin, so it displays links like Contributions,
+               // User logs, UserRights, etc.
+               $this->getSkin()->setRelevantUser( $this->mTargetObj );
+
                $context = new DerivativeContext( $this->getContext() );
                $context->setTitle( $this->getPageTitle() ); // Remove subpage
                $form = new HTMLForm( $this->getFormFields(), $context );
@@ -265,28 +269,32 @@ class SpecialEmailUser extends UnlistedSpecialPage {
         */
        protected function userForm( $name ) {
                $this->getOutput()->addModules( 'mediawiki.userSuggest' );
-               $string = Xml::openElement(
-                       'form',
-                       [ 'method' => 'get', 'action' => wfScript(), 'id' => 'askusername' ]
-               ) .
+               $string = Html::openElement(
+                               'form',
+                               [ 'method' => 'get', 'action' => wfScript(), 'id' => 'askusername' ]
+                       ) .
                        Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() ) .
-                       Xml::openElement( 'fieldset' ) .
+                       Html::openElement( 'fieldset' ) .
                        Html::rawElement( 'legend', null, $this->msg( 'emailtarget' )->parse() ) .
-                       Xml::inputLabel(
+                       Html::label(
                                $this->msg( 'emailusername' )->text(),
+                               'emailusertarget'
+                       ) . '&#160;' .
+                       Html::input(
                                'target',
-                               'emailusertarget',
-                               30,
                                $name,
+                               'text',
                                [
+                                       'id' => 'emailusertarget',
                                        'class' => 'mw-autocomplete-user',  // used by mediawiki.userSuggest
                                        'autofocus' => true,
+                                       'size' => 30,
                                ]
                        ) .
                        ' ' .
-                       Xml::submitButton( $this->msg( 'emailusernamesubmit' )->text() ) .
-                       Xml::closeElement( 'fieldset' ) .
-                       Xml::closeElement( 'form' ) . "\n";
+                       Html::submitButton( $this->msg( 'emailusernamesubmit' )->text(), [] ) .
+                       Html::closeElement( 'fieldset' ) .
+                       Html::closeElement( 'form' ) . "\n";
 
                return $string;
        }
index 35861e3..68960d3 100644 (file)
@@ -79,7 +79,7 @@ class FileDuplicateSearchPage extends QueryPage {
                }
                $html[] = $this->closeList();
 
-               $this->getOutput()->addHtml( implode( "\n", $html ) );
+               $this->getOutput()->addHTML( implode( "\n", $html ) );
        }
 
        public function getQueryInfo() {
@@ -122,7 +122,7 @@ class FileDuplicateSearchPage extends QueryPage {
                        ],
                ];
                $hiddenFields = [
-                       'title' => $this->getPageTitle()->getPrefixedDBKey(),
+                       'title' => $this->getPageTitle()->getPrefixedDBkey(),
                ];
                $htmlForm = HTMLForm::factory( 'inline', $formFields, $this->getContext() );
                $htmlForm->addHiddenFields( $hiddenFields );
index 72f8cca..fe1dd98 100644 (file)
@@ -581,7 +581,7 @@ class ImportReporter extends ContextSource {
         * @param array $pageInfo
         * @return void
         */
-       function reportPage( $title, $foreignTitle, $revisionCount,
+       public function reportPage( $title, $foreignTitle, $revisionCount,
                        $successCount, $pageInfo ) {
                $args = func_get_args();
                call_user_func_array( $this->mOriginalPageOutCallback, $args );
index e20382c..37dba53 100644 (file)
@@ -168,12 +168,12 @@ class SpecialJavaScriptTest extends SpecialPage {
 </div>
 HTML;
 
-               $out->addHtml( $this->getSummaryHtml() . $baseHtml );
+               $out->addHTML( $this->getSummaryHtml() . $baseHtml );
 
                // The testrunner configures QUnit and essentially depends on it. However, test suites
                // are reusable in environments that preload QUnit (or a compatibility interface to
                // another framework). Therefore we have to load it ourselves.
-               $out->addHtml( ResourceLoader::makeInlineScript(
+               $out->addHTML( ResourceLoader::makeInlineScript(
                        Xml::encodeJsCall( 'mw.loader.using', [
                                [ 'jquery.qunit', 'jquery.qunit.completenessTest' ],
                                new XmlJsCode(
index bc33b8e..2a7046e 100644 (file)
@@ -158,7 +158,7 @@ class LinkSearchPage extends QueryPage {
 
                if ( $target != '' ) {
                        $this->setParams( [
-                               'query' => $target2,
+                               'query' => Parser::normalizeLinkUrl( $target2 ),
                                'namespace' => $namespace,
                                'protocol' => $protocol ] );
                        parent::execute( $par );
index ed7e954..49fa417 100644 (file)
@@ -96,12 +96,12 @@ class ListDuplicatedFilesPage extends QueryPage {
                // Future version might include a list of the first 5 duplicates
                // perhaps separated by an "↔".
                $image1 = Title::makeTitle( $result->namespace, $result->title );
-               $dupeSearch = SpecialPage::getTitleFor( 'FileDuplicateSearch', $image1->getDBKey() );
+               $dupeSearch = SpecialPage::getTitleFor( 'FileDuplicateSearch', $image1->getDBkey() );
 
                $msg = $this->msg( 'listduplicatedfiles-entry' )
                        ->params( $image1->getText() )
                        ->numParams( $result->value - 1 )
-                       ->params( $dupeSearch->getPrefixedDBKey() );
+                       ->params( $dupeSearch->getPrefixedDBkey() );
 
                return $msg->parse();
        }
index 16471fe..6c856e9 100644 (file)
@@ -52,6 +52,8 @@ class SpecialListFiles extends IncludableSpecialPage {
                if ( $this->including() ) {
                        $out->addParserOutputContent( $pager->getBodyOutput() );
                } else {
+                       $user = $pager->getRelevantUser();
+                       $this->getSkin()->setRelevantUser( $user );
                        $pager->getForm();
                        $out->addParserOutputContent( $pager->getFullOutput() );
                }
@@ -91,6 +93,13 @@ class ImageListPager extends TablePager {
 
        protected $mUserName = null;
 
+       /**
+        * The relevant user
+        *
+        * @var User|null
+        */
+       protected $mUser = null;
+
        protected $mSearch = '';
 
        protected $mIncluding = false;
@@ -108,20 +117,18 @@ class ImageListPager extends TablePager {
 
                if ( $userName !== null && $userName !== '' ) {
                        $nt = Title::newFromText( $userName, NS_USER );
-                       $user = User::newFromName( $userName, false );
-                       if ( !is_null( $nt ) ) {
+                       if ( is_null( $nt ) ) {
+                               $this->outputUserDoesNotExist( $userName );
+                       } else {
                                $this->mUserName = $nt->getText();
+                               $user = User::newFromName( $this->mUserName, false );
+                               if ( $user ) {
+                                       $this->mUser = $user;
+                               }
+                               if ( !$user || ( $user->isAnon() && !User::isIP( $user->getName() ) ) ) {
+                                       $this->outputUserDoesNotExist( $userName );
+                               }
                        }
-                       if ( !$user || ( $user->isAnon() && !User::isIP( $user->getName() ) ) ) {
-                               $this->getOutput()->wrapWikiMsg(
-                                       "<div class=\"mw-userpage-userdoesnotexist error\">\n$1\n</div>",
-                                       [
-                                               'listfiles-userdoesnotexist',
-                                               wfEscapeWikiText( $userName ),
-                                       ]
-                               );
-                       }
-
                }
 
                if ( $search !== '' && !$this->getConfig()->get( 'MiserMode' ) ) {
@@ -149,6 +156,30 @@ class ImageListPager extends TablePager {
                parent::__construct( $context );
        }
 
+       /**
+        * Get the user relevant to the ImageList
+        *
+        * @return User|null
+        */
+       function getRelevantUser() {
+               return $this->mUser;
+       }
+
+       /**
+        * Add a message to the output stating that the user doesn't exist
+        *
+        * @param string $userName Unescaped user name
+        */
+       protected function outputUserDoesNotExist( $userName ) {
+               $this->getOutput()->wrapWikiMsg(
+                       "<div class=\"mw-userpage-userdoesnotexist error\">\n$1\n</div>",
+                       [
+                               'listfiles-userdoesnotexist',
+                               wfEscapeWikiText( $userName ),
+                       ]
+               );
+       }
+
        /**
         * Build the where clause of the query.
         *
@@ -482,7 +513,7 @@ class ImageListPager extends TablePager {
                                                htmlspecialchars( $filePage->getText() )
                                        );
                                        $download = Xml::element( 'a',
-                                               [ 'href' => wfLocalFile( $filePage )->getURL() ],
+                                               [ 'href' => wfLocalFile( $filePage )->getUrl() ],
                                                $imgfile
                                        );
                                        $download = $this->msg( 'parentheses' )->rawParams( $download )->escaped();
index da31f00..7eb3757 100644 (file)
@@ -388,7 +388,7 @@ class UsersPager extends AlphabeticPager {
         * @return string
         */
        protected static function buildGroupLink( $group, $username ) {
-               return User::makeGroupLinkHtml(
+               return User::makeGroupLinkHTML(
                        $group,
                        User::getGroupMember( $group, $username )
                );
index bec871b..d4c7c6a 100644 (file)
@@ -259,31 +259,7 @@ class SpecialLog extends SpecialPage {
                        ) . "\n";
                }
 
-               // Select: All, None, Invert
-               $links = [];
-               $links[] = Html::element(
-                       'a', [ 'href' => '#', 'class' => 'mw-checkbox-all' ],
-                       $this->msg( 'checkbox-all' )->text()
-               );
-               $links[] = Html::element(
-                       'a', [ 'href' => '#', 'class' => 'mw-checkbox-none' ],
-                       $this->msg( 'checkbox-none' )->text()
-               );
-               $links[] = Html::element(
-                       'a', [ 'href' => '#', 'class' => 'mw-checkbox-invert' ],
-                       $this->msg( 'checkbox-invert' )->text()
-               );
-
-               $buttons .= Html::rawElement( 'p',
-                       [
-                               'class' => "mw-checkbox-toggle-controls"
-                       ],
-                       $this->msg( 'checkbox-select' )
-                               ->rawParams( $this->getLanguage()->commaList( $links ) )->escaped()
-               );
-
-               $this->getOutput()->addModules( 'mediawiki.checkboxtoggle' );
-               $this->getOutput()->addModuleStyles( 'mediawiki.checkboxtoggle.styles' );
+               $buttons .= ( new ListToggle( $this->getOutput() ) )->getHTML();
 
                $s .= $buttons . $formcontents . $buttons;
                $s .= Html::closeElement( 'form' );
index ed12e04..8ba90a6 100644 (file)
@@ -154,7 +154,7 @@ class MediaStatisticsPage extends QueryPage {
         * Output closing </table>
         */
        protected function outputTableEnd() {
-               $this->getOutput()->addHtml( Html::closeElement( 'table' ) );
+               $this->getOutput()->addHTML( Html::closeElement( 'table' ) );
                $this->getOutput()->addWikiText(
                                $this->msg( 'mediastatistics-bytespertype' )
                                        ->numParams( $this->totalPerType )
index ec8c128..629a508 100644 (file)
@@ -105,6 +105,8 @@ class NewFilesPager extends ReverseChronologicalPager {
        function getQueryInfo() {
                $conds = $jconds = [];
                $tables = [ 'image' ];
+               $fields = [ 'img_name', 'img_user', 'img_timestamp' ];
+               $options = [];
 
                if ( !$this->showBots ) {
                        $groupsWithBotPermission = User::getGroupsWithPermission( 'bot' );
@@ -127,6 +129,7 @@ class NewFilesPager extends ReverseChronologicalPager {
                        $conds['rc_type'] = RC_LOG;
                        $conds['rc_log_type'] = 'upload';
                        $conds['rc_patrolled'] = 0;
+                       $conds['rc_namespace'] = NS_FILE;
                        $jconds['recentchanges'] = [
                                'INNER JOIN',
                                [
@@ -135,6 +138,10 @@ class NewFilesPager extends ReverseChronologicalPager {
                                        'rc_timestamp = img_timestamp'
                                ]
                        ];
+                       // We're ordering by img_timestamp, so we have to make sure MariaDB queries `image` first.
+                       // It sometimes decides to query `recentchanges` first and filesort the result set later
+                       // to get the right ordering. T124205 / https://mariadb.atlassian.net/browse/MDEV-8880
+                       $options[] = 'STRAIGHT_JOIN';
                }
 
                if ( !$this->getConfig()->get( 'MiserMode' ) && $this->like !== null ) {
@@ -152,9 +159,10 @@ class NewFilesPager extends ReverseChronologicalPager {
 
                $query = [
                        'tables' => $tables,
-                       'fields' => '*',
+                       'fields' => $fields,
                        'join_conds' => $jconds,
-                       'conds' => $conds
+                       'conds' => $conds,
+                       'options' => $options,
                ];
 
                return $query;
@@ -188,7 +196,7 @@ class NewFilesPager extends ReverseChronologicalPager {
                $user = User::newFromId( $row->img_user );
 
                $title = Title::makeTitle( NS_FILE, $name );
-               $ul = Linker::link( $user->getUserpage(), $user->getName() );
+               $ul = Linker::link( $user->getUserPage(), $user->getName() );
                $time = $this->getLanguage()->userTimeAndDate( $row->img_timestamp, $this->getUser() );
 
                $this->gallery->add(
index f1b231d..ab29d13 100644 (file)
@@ -265,11 +265,11 @@ class SpecialNewpages extends IncludableSpecialPage {
                );
                $htmlForm->setMethod( 'get' );
 
-               $out->addHtml( Xml::fieldset( $this->msg( 'newpages' )->text() ) );
+               $out->addHTML( Xml::fieldset( $this->msg( 'newpages' )->text() ) );
 
                $htmlForm->show();
 
-               $out->addHtml(
+               $out->addHTML(
                        Html::rawElement(
                                'div',
                                null,
index 44f31a5..c3ed91f 100644 (file)
@@ -218,7 +218,7 @@ class SpecialPasswordReset extends FormSpecialPage {
 
                $firstUser = $users[0];
 
-               if ( !$firstUser instanceof User || !$firstUser->getID() ) {
+               if ( !$firstUser instanceof User || !$firstUser->getId() ) {
                        // Don't parse username as wikitext (bug 65501)
                        return [ [ 'nosuchuser', wfEscapeWikiText( $data['Username'] ) ] ];
                }
index d4c1004..efb1748 100644 (file)
@@ -206,7 +206,7 @@ class SpecialRandomInCategory extends FormSpecialPage {
                        'tables' => [ 'categorylinks', 'page' ],
                        'fields' => [ 'page_title', 'page_namespace' ],
                        'conds' => array_merge( [
-                               'cl_to' => $this->category->getDBKey(),
+                               'cl_to' => $this->category->getDBkey(),
                        ], $this->extra ),
                        'options' => [
                                'ORDER BY' => 'cl_timestamp ' . $dir,
index 7719505..de77380 100644 (file)
@@ -72,7 +72,6 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
        public function getDefaultOptions() {
                $opts = parent::getDefaultOptions();
                $user = $this->getUser();
-               $config = $this->getConfig();
 
                $opts->add( 'days', $user->getIntOption( 'rcdays' ) );
                $opts->add( 'limit', $user->getIntOption( 'rclimit' ) );
@@ -367,7 +366,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                $rclistOutput .= $list->endRecentChangesList();
 
                if ( $rows->numRows() === 0 ) {
-                       $this->getOutput()->addHtml(
+                       $this->getOutput()->addHTML(
                                '<div class="mw-changeslist-empty">' .
                                $this->msg( 'recentchanges-noresult' )->parse() .
                                '</div>'
@@ -400,7 +399,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                $extraOpts = $this->getExtraOptions( $opts );
                $extraOptsCount = count( $extraOpts );
                $count = 0;
-               $submit = ' ' . Xml::submitbutton( $this->msg( 'recentchanges-submit' )->text() );
+               $submit = ' ' . Xml::submitButton( $this->msg( 'recentchanges-submit' )->text() );
 
                $out = Xml::openElement( 'table', [ 'class' => 'mw-recentchanges-table' ] );
                foreach ( $extraOpts as $name => $optionRow ) {
index a259ac2..57a3d92 100644 (file)
@@ -57,7 +57,7 @@ class SpecialRecentChangesLinked extends SpecialRecentChanges {
                $outputPage = $this->getOutput();
                $title = Title::newFromText( $target );
                if ( !$title || $title->isExternal() ) {
-                       $outputPage->addHtml( '<div class="errorbox">' . $this->msg( 'allpagesbadtitle' )
+                       $outputPage->addHTML( '<div class="errorbox">' . $this->msg( 'allpagesbadtitle' )
                                        ->parse() . '</div>' );
 
                        return false;
index 206e400..c0ed4c9 100644 (file)
@@ -99,7 +99,7 @@ class SpecialRedirect extends FormSpecialPage {
                        return null;
                }
                // Default behavior: Use the direct link to the file.
-               $url = $file->getURL();
+               $url = $file->getUrl();
                $request = $this->getRequest();
                $width = $request->getInt( 'width', -1 );
                $height = $request->getInt( 'height', -1 );
@@ -110,7 +110,7 @@ class SpecialRedirect extends FormSpecialPage {
                        // ... and we can
                        if ( $mto && !$mto->isError() ) {
                                // ... change the URL to point to a thumbnail.
-                               $url = $mto->getURL();
+                               $url = $mto->getUrl();
                        }
                }
 
index 5b9778c..dfab8d4 100644 (file)
@@ -204,8 +204,13 @@ class SpecialSearch extends SpecialPage {
                # If there's an exact or very near match, jump right there.
                $title = SearchEngine::getNearMatch( $term );
 
-               if ( !is_null( $title ) ) {
-                       $this->getOutput()->redirect( $title->getFullURL() );
+               if ( !is_null( $title ) &&
+                       Hooks::run( 'SpecialSearchGoResult', [ $term, $title, &$url ] )
+               ) {
+                       if ( $url === null ) {
+                               $url = $title->getFullURL();
+                       }
+                       $this->getOutput()->redirect( $url );
 
                        return;
                }
@@ -294,7 +299,7 @@ class SpecialSearch extends SpecialPage {
                }
 
                // start rendering the page
-               $out->addHtml(
+               $out->addHTML(
                        Xml::openElement(
                                'form',
                                [
@@ -318,7 +323,7 @@ class SpecialSearch extends SpecialPage {
                $num = $titleMatchesNum + $textMatchesNum;
                $totalRes = $numTitleMatches + $numTextMatches;
 
-               $out->addHtml(
+               $out->addHTML(
                        # This is an awful awful ID name. It's not a table, but we
                        # named it poorly from when this was a table so now we're
                        # stuck with it
@@ -337,7 +342,7 @@ class SpecialSearch extends SpecialPage {
                        return;
                }
 
-               $out->addHtml( "<div class='searchresults'>" );
+               $out->addHTML( "<div class='searchresults'>" );
 
                // prev/next links
                $prevnext = null;
@@ -424,7 +429,7 @@ class SpecialSearch extends SpecialPage {
                        $out->addHTML( "<p class='mw-search-pager-bottom'>{$prevnext}</p>\n" );
                }
 
-               $out->addHtml( "</div>" );
+               $out->addHTML( "</div>" );
 
                Hooks::run( 'SpecialSearchResultsAppend', [ $this, $out, $term ] );
 
@@ -546,7 +551,7 @@ class SpecialSearch extends SpecialPage {
                ) {
                        // invalid title
                        // preserve the paragraph for margins etc...
-                       $this->getOutput()->addHtml( '<p></p>' );
+                       $this->getOutput()->addHTML( '<p></p>' );
 
                        return;
                }
@@ -575,7 +580,7 @@ class SpecialSearch extends SpecialPage {
                        $this->getOutput()->wrapWikiMsg( "<p class=\"$linkClass\">\n$1</p>", $params );
                } else {
                        // preserve the paragraph for margins etc...
-                       $this->getOutput()->addHtml( '<p></p>' );
+                       $this->getOutput()->addHTML( '<p></p>' );
                }
        }
 
@@ -1221,6 +1226,8 @@ class SpecialSearch extends SpecialPage {
                        'size' => '50',
                        'autofocus' => trim( $term ) === '',
                        'class' => 'mw-ui-input mw-ui-input-inline',
+                       // identifies the location of the search bar for tracking purposes
+                       'data-search-loc' => 'content',
                ] ) . "\n";
                $out .= Html::hidden( 'fulltext', 'Search' ) . "\n";
                $out .= Html::submitButton(
index 2ff2122..e79fd6e 100644 (file)
@@ -297,7 +297,7 @@ class SpecialTags extends SpecialPage {
 
                        $headerText = $this->msg( 'tags-create-warnings-above', $tag,
                                count( $status->getWarningsArray() ) )->parseAsBlock() .
-                               $out->parse( $status->getWikitext() ) .
+                               $out->parse( $status->getWikiText() ) .
                                $this->msg( 'tags-create-warnings-below' )->parseAsBlock();
 
                        $subform = new HTMLForm( $fields, $this->getContext() );
@@ -311,7 +311,7 @@ class SpecialTags extends SpecialPage {
                        $out->addBacklinkSubtitle( $this->getPageTitle() );
                        return true;
                } else {
-                       $out->addWikiText( "<div class=\"error\">\n" . $status->getWikitext() .
+                       $out->addWikiText( "<div class=\"error\">\n" . $status->getWikiText() .
                                "\n</div>" );
                        return false;
                }
index 4a5dd55..cc7a091 100644 (file)
@@ -169,6 +169,9 @@ class SpecialUnblock extends SpecialPage {
        /**
         * Process the form
         *
+        * Change tags can be provided via $data['Tags'], but the calling function
+        * must check if the tags can be added by the user prior to this function.
+        *
         * @param array $data
         * @param IContextSource $context
         * @throws ErrorPageError
@@ -215,7 +218,7 @@ class SpecialUnblock extends SpecialPage {
                if ( $block->mHideName ) {
                        # Something is deeply FUBAR if this is not a User object, but who knows?
                        $id = $block->getTarget() instanceof User
-                               ? $block->getTarget()->getID()
+                               ? $block->getTarget()->getId()
                                : User::idFromName( $block->getTarget() );
 
                        RevisionDeleteUser::unsuppressUserName( $block->getTarget(), $id );
@@ -226,7 +229,7 @@ class SpecialUnblock extends SpecialPage {
                        $page = Title::makeTitle( NS_USER, '#' . $block->getId() );
                } else {
                        $page = $block->getTarget() instanceof User
-                               ? $block->getTarget()->getUserpage()
+                               ? $block->getTarget()->getUserPage()
                                : Title::makeTitle( NS_USER, $block->getTarget() );
                }
 
@@ -235,6 +238,7 @@ class SpecialUnblock extends SpecialPage {
                $logEntry->setTarget( $page );
                $logEntry->setComment( $data['Reason'] );
                $logEntry->setPerformer( $performer );
+               $logEntry->setTags( $data['Tags'] );
                $logId = $logEntry->insert();
                $logEntry->publish( $logId );
 
index 36f6b4c..52a3d17 100644 (file)
@@ -360,11 +360,13 @@ class PageArchive {
         * @param array $fileVersions
         * @param bool $unsuppress
         * @param User $user User performing the action, or null to use $wgUser
+        * @param string|string[] $tags Change tags to add to log entry
+        *   ($user should be able to add the specified tags before this is called)
         * @return array(number of file revisions restored, number of image revisions
         *   restored, log message) on success, false on failure.
         */
        function undelete( $timestamps, $comment = '', $fileVersions = [],
-               $unsuppress = false, User $user = null
+               $unsuppress = false, User $user = null, $tags = null
        ) {
                // If both the set of text revisions and file revisions are empty,
                // restore everything. Otherwise, just restore the requested items.
@@ -426,6 +428,7 @@ class PageArchive {
                $logEntry->setPerformer( $user );
                $logEntry->setTarget( $this->title );
                $logEntry->setComment( $reason );
+               $logEntry->setTags( $tags );
 
                Hooks::run( 'ArticleUndeleteLogEntry', [ $this, &$logEntry, $user ] );
 
@@ -863,7 +866,7 @@ class SpecialUndelete extends SpecialPage {
                $query = [
                        "type" => "revision",
                        "ids" => $revisions,
-                       "target" => wfUrlencode( $this->mTargetObj->getPrefixedText() )
+                       "target" => $this->mTargetObj->getPrefixedText()
                ];
                $url = SpecialPage::getTitleFor( "RevisionDelete" )->getFullURL( $query );
                $this->getOutput()->redirect( $url );
index f2da81f..555fe5c 100644 (file)
@@ -306,6 +306,8 @@ class SpecialUploadStash extends UnlistedSpecialPage {
                if ( $size > self::MAX_SERVE_BYTES ) {
                        throw new SpecialUploadStashTooLargeException();
                }
+               // Cancel output buffering and gzipping if set
+               wfResetOutputBuffers();
                self::outputFileHeaders( $contentType, $size );
                print $content;
 
@@ -367,13 +369,14 @@ class SpecialUploadStash extends UnlistedSpecialPage {
 
                $context = new DerivativeContext( $this->getContext() );
                $context->setTitle( $this->getPageTitle() ); // Remove subpage
-               $form = new HTMLForm( [
+               $form = HTMLForm::factory( 'ooui', [
                        'Clear' => [
                                'type' => 'hidden',
                                'default' => true,
                                'name' => 'clear',
                        ]
                ], $context, 'clearStashedUploads' );
+               $form->setSubmitDestructive();
                $form->setSubmitCallback( [ __CLASS__, 'tryClearStashedUploads' ] );
                $form->setSubmitTextMsg( 'uploadstash-clear' );
 
@@ -389,17 +392,27 @@ class SpecialUploadStash extends UnlistedSpecialPage {
                        sort( $files );
                        $fileListItemsHtml = '';
                        foreach ( $files as $file ) {
-                               // TODO: Use Linker::link or even construct the list in plain wikitext
-                               $fileListItemsHtml .= Html::rawElement( 'li', [],
-                                       Html::element( 'a', [ 'href' =>
-                                               $this->getPageTitle( "file/$file" )->getLocalURL() ], $file )
-                               );
+                               $itemHtml = Linker::linkKnown( $this->getPageTitle( "file/$file" ), htmlspecialchars( $file ) );
+                               try {
+                                       $fileObj = $this->stash->getFile( $file );
+                                       $thumb = $fileObj->generateThumbName( $file, [ 'width' => 220 ] );
+                                       $itemHtml .=
+                                               $this->msg( 'word-separator' )->escaped() .
+                                               $this->msg( 'parentheses' )->rawParams(
+                                                       Linker::linkKnown(
+                                                               $this->getPageTitle( "thumb/$file/$thumb" ),
+                                                               $this->msg( 'uploadstash-thumbnail' )->escaped()
+                                                       )
+                                               )->escaped();
+                               } catch ( Exception $e ) {
+                               }
+                               $fileListItemsHtml .= Html::rawElement( 'li', [], $itemHtml );
                        }
-                       $this->getOutput()->addHtml( Html::rawElement( 'ul', [], $fileListItemsHtml ) );
+                       $this->getOutput()->addHTML( Html::rawElement( 'ul', [], $fileListItemsHtml ) );
                        $form->displayForm( $formResult );
-                       $this->getOutput()->addHtml( Html::rawElement( 'p', [], $refreshHtml ) );
+                       $this->getOutput()->addHTML( Html::rawElement( 'p', [], $refreshHtml ) );
                } else {
-                       $this->getOutput()->addHtml( Html::rawElement( 'p', [],
+                       $this->getOutput()->addHTML( Html::rawElement( 'p', [],
                                Html::element( 'span', [], $this->msg( 'uploadstash-nofiles' )->text() )
                                . ' '
                                . $refreshHtml
index 442eee4..49d3345 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup SpecialPage
  */
 use MediaWiki\Logger\LoggerFactory;
+use Psr\Log\LogLevel;
 use MediaWiki\Session\SessionManager;
 
 /**
@@ -86,6 +87,11 @@ class LoginForm extends SpecialPage {
        ];
 
        public $mAbortLoginErrorMsg = null;
+       /**
+        * @var int How many seconds user is throttled for
+        * @since 1.27
+        */
+       public $mThrottleWait = '?';
 
        protected $mUsername;
        protected $mPassword;
@@ -269,7 +275,7 @@ class LoginForm extends SpecialPage {
         */
        public function execute( $subPage ) {
                // Make sure session is persisted
-               $session = MediaWiki\Session\SessionManager::getGlobalSession();
+               $session = SessionManager::getGlobalSession();
                $session->persist();
 
                $this->load();
@@ -708,7 +714,7 @@ class LoginForm extends SpecialPage {
                DeferredUpdates::addUpdate( new SiteStatsUpdate( 0, 0, 0, 0, 1 ) );
 
                // Watch user's userpage and talk page
-               $u->addWatch( $u->getUserPage(), WatchedItem::IGNORE_USER_RIGHTS );
+               $u->addWatch( $u->getUserPage(), User::IGNORE_USER_RIGHTS );
 
                return Status::newGood( $u );
        }
@@ -745,8 +751,9 @@ class LoginForm extends SpecialPage {
                        return self::NEED_TOKEN;
                }
 
-               $throttleCount = self::incLoginThrottle( $this->mUsername );
-               if ( $throttleCount === true ) {
+               $throttleCount = self::incrementLoginThrottle( $this->mUsername );
+               if ( $throttleCount ) {
+                       $this->mThrottleWait = $throttleCount['wait'];
                        return self::THROTTLED;
                }
 
@@ -785,7 +792,7 @@ class LoginForm extends SpecialPage {
                }
 
                $isAutoCreated = false;
-               if ( $u->getID() == 0 ) {
+               if ( $u->getId() == 0 ) {
                        $status = $this->attemptAutoCreate( $u );
                        if ( $status !== self::SUCCESS ) {
                                return $status;
@@ -862,9 +869,7 @@ class LoginForm extends SpecialPage {
                        $this->getContext()->setUser( $u );
 
                        // Please reset throttle for successful logins, thanks!
-                       if ( $throttleCount ) {
-                               self::clearLoginThrottle( $this->mUsername );
-                       }
+                       self::clearLoginThrottle( $this->mUsername );
 
                        if ( $isAutoCreated ) {
                                // Must be run after $wgUser is set, for correct new user log
@@ -881,31 +886,90 @@ class LoginForm extends SpecialPage {
        /**
         * Increment the login attempt throttle hit count for the (username,current IP)
         * tuple unless the throttle was already reached.
+        *
+        * @since 1.27 Return value changed.
         * @param string $username The user name
-        * @return bool|int The integer hit count or True if it is already at the limit
+        * @return bool|array false if below limit or an array if above limit
+        *   Array contains keys wait, count, and throttleIndex
         */
-       public static function incLoginThrottle( $username ) {
+       public static function incrementLoginThrottle( $username ) {
                global $wgPasswordAttemptThrottle, $wgRequest;
-               $username = trim( $username ); // sanity
+               $username = User::getCanonicalName( $username, 'usable' ) ?: $username;
 
                $throttleCount = 0;
                if ( is_array( $wgPasswordAttemptThrottle ) ) {
-                       $throttleKey = wfGlobalCacheKey( 'password-throttle', $wgRequest->getIP(), md5( $username ) );
-                       $count = $wgPasswordAttemptThrottle['count'];
-                       $period = $wgPasswordAttemptThrottle['seconds'];
-
-                       $cache = ObjectCache::getLocalClusterInstance();
-                       $throttleCount = $cache->get( $throttleKey );
-                       if ( !$throttleCount ) {
-                               $cache->add( $throttleKey, 1, $period ); // start counter
-                       } elseif ( $throttleCount < $count ) {
-                               $cache->incr( $throttleKey );
-                       } elseif ( $throttleCount >= $count ) {
-                               return true;
+                       $throttleConfig = $wgPasswordAttemptThrottle;
+                       if ( isset( $wgPasswordAttemptThrottle['count'] ) ) {
+                               // old style. Convert for backwards compat.
+                               $throttleConfig = [ $wgPasswordAttemptThrottle ];
+                       }
+                       foreach ( $throttleConfig as $index => $specificThrottle ) {
+                               if ( isset( $specificThrottle['allIPs'] ) ) {
+                                       $ip = 'All';
+                               } else {
+                                       $ip = $wgRequest->getIP();
+                               }
+                               $throttleKey = wfGlobalCacheKey( 'password-throttle',
+                                       $index, $ip, md5( $username )
+                               );
+                               $count = $specificThrottle['count'];
+                               $period = $specificThrottle['seconds'];
+
+                               $cache = ObjectCache::getLocalClusterInstance();
+                               $throttleCount = $cache->get( $throttleKey );
+                               if ( !$throttleCount ) {
+                                       $cache->add( $throttleKey, 1, $period ); // start counter
+                               } elseif ( $throttleCount < $count ) {
+                                       $cache->incr( $throttleKey );
+                               } elseif ( $throttleCount >= $count ) {
+                                       $logMsg = 'Login attempt rejected because logins to '
+                                               . '{acct} from IP {ip} have been throttled for '
+                                               . '{period} seconds due to {count} failed attempts';
+                                       // If we are hitting a throttle for >= 50 attempts,
+                                       // it is much more likely to be an attack than someone
+                                       // simply forgetting their password, so log it at a
+                                       // higher level.
+                                       $level = $count >= 50 ? LogLevel::WARNING : LogLevel::INFO;
+                                       // It should be noted that once the throttle is hit,
+                                       // every attempt to login will generate the log message
+                                       // until the throttle expires, not just the attempt that
+                                       // puts the throttle over the top.
+                                       LoggerFactory::getInstance( 'password-throttle' )->log(
+                                               $level,
+                                               $logMsg,
+                                               [
+                                                       'ip' => $ip,
+                                                       'period' => $period,
+                                                       'acct' => $username,
+                                                       'count' => $count,
+                                                       'throttleIdentifier' => $index,
+                                                       'method' => __METHOD__
+                                               ]
+                                       );
+
+                                       return [
+                                               'throttleIndex' => $index,
+                                               'wait' => $period,
+                                               'count' => $count
+                                       ];
+                               }
                        }
                }
+               return false;
+       }
 
-               return $throttleCount;
+       /**
+        * Increment the login attempt throttle hit count for the (username,current IP)
+        * tuple unless the throttle was already reached.
+        *
+        * @deprecated Use LoginForm::incrementLoginThrottle instead
+        * @param string $username The user name
+        * @return bool|int true if above throttle, or 0 (prior to 1.27, returned current count)
+        */
+       public static function incLoginThrottle( $username ) {
+               wfDeprecated( __METHOD__, "1.27" );
+               $res = self::incrementLoginThrottle( $username );
+               return is_array( $res ) ? true : 0;
        }
 
        /**
@@ -914,11 +978,27 @@ class LoginForm extends SpecialPage {
         * @return void
         */
        public static function clearLoginThrottle( $username ) {
-               global $wgRequest;
-               $username = trim( $username ); // sanity
+               global $wgRequest, $wgPasswordAttemptThrottle;
+               $username = User::getCanonicalName( $username, 'usable' ) ?: $username;
 
-               $throttleKey = wfGlobalCacheKey( 'password-throttle', $wgRequest->getIP(), md5( $username ) );
-               ObjectCache::getLocalClusterInstance()->delete( $throttleKey );
+               if ( is_array( $wgPasswordAttemptThrottle ) ) {
+                       $throttleConfig = $wgPasswordAttemptThrottle;
+                       if ( isset( $wgPasswordAttemptThrottle['count'] ) ) {
+                               // old style. Convert for backwards compat.
+                               $throttleConfig = [ $wgPasswordAttemptThrottle ];
+                       }
+                       foreach ( $throttleConfig as $index => $specificThrottle ) {
+                               if ( isset( $specificThrottle['allIPs'] ) ) {
+                                       $ip = 'All';
+                               } else {
+                                       $ip = $wgRequest->getIP();
+                               }
+                               $throttleKey = wfGlobalCacheKey( 'password-throttle', $index,
+                                       $ip, md5( $username )
+                               );
+                               ObjectCache::getLocalClusterInstance()->delete( $throttleKey );
+                       }
+               }
        }
 
        /**
@@ -977,7 +1057,7 @@ class LoginForm extends SpecialPage {
        }
 
        function processLogin() {
-               global $wgLang, $wgSecureLogin, $wgPasswordAttemptThrottle, $wgInvalidPasswordReset;
+               global $wgLang, $wgSecureLogin, $wgInvalidPasswordReset;
 
                $cache = ObjectCache::getLocalClusterInstance();
                $authRes = $this->authenticateUserData();
@@ -999,10 +1079,9 @@ class LoginForm extends SpecialPage {
                                self::clearLoginToken();
 
                                // Reset the throttle
-                               $request = $this->getRequest();
-                               $key = wfGlobalCacheKey( 'password-throttle', $request->getIP(), md5( $this->mUsername ) );
-                               $cache->delete( $key );
+                               self::clearLoginThrottle( $this->mUsername );
 
+                               $request = $this->getRequest();
                                if ( $this->hasSessionCookie() || $this->mSkipCookieCheck ) {
                                        /* Replace the language object to provide user interface in
                                         * correct language immediately on this first page load.
@@ -1010,6 +1089,7 @@ class LoginForm extends SpecialPage {
                                        $code = $request->getVal( 'uselang', $user->getOption( 'language' ) );
                                        $userLang = Language::factory( $code );
                                        $wgLang = $userLang;
+                                       RequestContext::getMain()->setLanguage( $userLang );
                                        $this->getContext()->setLanguage( $userLang );
                                        // Reset SessionID on Successful login (bug 40995)
                                        $this->renewSessionId();
@@ -1079,8 +1159,7 @@ class LoginForm extends SpecialPage {
                        case self::THROTTLED:
                                $error = $this->mAbortLoginErrorMsg ?: 'login-throttled';
                                $this->mainLoginForm( $this->msg( $error )
-                                       ->params( $this->getLanguage()->formatDuration( $wgPasswordAttemptThrottle['seconds'] ) )
-                                       ->text()
+                                       ->durationParams( $this->mThrottleWait )->text()
                                );
                                break;
                        case self::USER_BLOCKED:
@@ -1637,7 +1716,7 @@ class LoginForm extends SpecialPage {
                        $wgCookieSecure = false;
                }
 
-               MediaWiki\Session\SessionManager::getGlobalSession()->resetId();
+               SessionManager::getGlobalSession()->resetId();
        }
 
        /**
index 29261f3..740f2f7 100644 (file)
@@ -119,7 +119,7 @@ class UserrightsPage extends SpecialPage {
                }
 
                $fetchedStatus = $this->fetchUser( $this->mTarget );
-               if ( $fetchedStatus->isOk() ) {
+               if ( $fetchedStatus->isOK() ) {
                        $this->mFetchedUser = $fetchedStatus->value;
                        if ( $this->mFetchedUser instanceof User ) {
                                // Set the 'relevant user' in the skin, so it displays links like Contributions,
@@ -627,7 +627,7 @@ class UserrightsPage extends SpecialPage {
         * @return string
         */
        private static function buildGroupLink( $group ) {
-               return User::makeGroupLinkHtml( $group, User::getGroupName( $group ) );
+               return User::makeGroupLinkHTML( $group, User::getGroupName( $group ) );
        }
 
        /**
@@ -637,7 +637,7 @@ class UserrightsPage extends SpecialPage {
         * @return string
         */
        private static function buildGroupMemberLink( $group ) {
-               return User::makeGroupLinkHtml( $group, User::getGroupMember( $group ) );
+               return User::makeGroupLinkHTML( $group, User::getGroupMember( $group ) );
        }
 
        /**
index d706786..ce5cbeb 100644 (file)
@@ -132,7 +132,7 @@ class SpecialVersion extends SpecialPage {
                                        $this->softwareInformation() .
                                        $this->getEntryPointInfo()
                                );
-                               $out->addHtml(
+                               $out->addHTML(
                                        $this->getSkinCredits() .
                                        $this->getExtensionCredits() .
                                        $this->getExternalLibraries() .
@@ -177,7 +177,7 @@ class SpecialVersion extends SpecialPage {
                global $wgLang;
 
                if ( defined( 'MEDIAWIKI_INSTALL' ) ) {
-                       $othersLink = '[//www.mediawiki.org/wiki/Special:Version/Credits ' .
+                       $othersLink = '[https://www.mediawiki.org/wiki/Special:Version/Credits ' .
                                wfMessage( 'version-poweredby-others' )->text() . ']';
                } else {
                        $othersLink = '[[Special:Version/Credits|' .
@@ -255,9 +255,10 @@ class SpecialVersion extends SpecialPage {
         * Return a string of the MediaWiki version with Git revision if available.
         *
         * @param string $flags
+        * @param Language|string|null $lang
         * @return mixed
         */
-       public static function getVersion( $flags = '' ) {
+       public static function getVersion( $flags = '', $lang = null ) {
                global $wgVersion, $IP;
 
                $gitInfo = self::getGitHeadSha1( $IP );
@@ -268,7 +269,11 @@ class SpecialVersion extends SpecialPage {
                        $version = "$wgVersion ($shortSha1)";
                } else {
                        $shortSha1 = substr( $gitInfo, 0, 7 );
-                       $shortSha1 = wfMessage( 'parentheses' )->params( $shortSha1 )->escaped();
+                       $msg = wfMessage( 'parentheses' );
+                       if ( $lang !== null ) {
+                               $msg->inLanguage( $lang );
+                       }
+                       $shortSha1 = $msg->params( $shortSha1 )->escaped();
                        $version = "$wgVersion $shortSha1";
                }
 
@@ -550,7 +555,7 @@ class SpecialVersion extends SpecialPage {
                                        'id' => 'mw-version-parser-extensiontags',
                                ],
                                Linker::makeExternalLink(
-                                       '//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Tag_extensions',
+                                       'https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Tag_extensions',
                                        $this->msg( 'version-parser-extensiontags' )->parse(),
                                        false /* msg()->parse() already escapes */
                                )
@@ -593,7 +598,7 @@ class SpecialVersion extends SpecialPage {
                                        'id' => 'mw-version-parser-function-hooks',
                                ],
                                Linker::makeExternalLink(
-                                       '//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Parser_functions',
+                                       'https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Parser_functions',
                                        $this->msg( 'version-parser-function-hooks' )->parse(),
                                        false /* msg()->parse() already escapes */
                                )
index dffc9d9..27e5829 100644 (file)
@@ -362,6 +362,12 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                $list->initChangesListRows( $rows );
                $dbr->dataSeek( $rows, 0 );
 
+               if ( $this->getConfig()->get( 'RCShowWatchingUsers' )
+                       && $user->getOption( 'shownumberswatching' )
+               ) {
+                       $watchedItemStore = WatchedItemStore::getDefaultInstance();
+               }
+
                $s = $list->beginRecentChangesList();
                $counter = 1;
                foreach ( $rows as $obj ) {
@@ -375,16 +381,9 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                                $updated = false;
                        }
 
-                       if ( $this->getConfig()->get( 'RCShowWatchingUsers' )
-                               && $user->getOption( 'shownumberswatching' )
-                       ) {
-                               $rc->numberofWatchingusers = $dbr->selectField( 'watchlist',
-                                       'COUNT(*)',
-                                       [
-                                               'wl_namespace' => $obj->rc_namespace,
-                                               'wl_title' => $obj->rc_title,
-                                       ],
-                                       __METHOD__ );
+                       if ( isset( $watchedItemStore ) ) {
+                               $rcTitleValue = new TitleValue( (int)$obj->rc_namespace, $obj->rc_title );
+                               $rc->numberofWatchingusers = $watchedItemStore->countWatchers( $rcTitleValue );
                        } else {
                                $rc->numberofWatchingusers = 0;
                        }
@@ -569,8 +568,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                $form = "";
                $user = $this->getUser();
 
-               $dbr = $this->getDB();
-               $numItems = $this->countItems( $dbr );
+               $numItems = $this->countItems();
                $showUpdatedMarker = $this->getConfig()->get( 'ShowUpdatedMarker' );
 
                // Show watchlist header
@@ -630,18 +628,14 @@ class SpecialWatchlist extends ChangesListSpecialPage {
        }
 
        /**
-        * Count the number of items on a user's watchlist
+        * Count the number of paired items on a user's watchlist.
+        * The assumption made here is that when a subject page is watched a talk page is also watched.
+        * Hence the number of individual items is halved.
         *
-        * @param IDatabase $dbr A database connection
         * @return int
         */
-       protected function countItems( $dbr ) {
-               # Fetch the raw count
-               $rows = $dbr->select( 'watchlist', [ 'count' => 'COUNT(*)' ],
-                       [ 'wl_user' => $this->getUser()->getId() ], __METHOD__ );
-               $row = $dbr->fetchObject( $rows );
-               $count = $row->count;
-
+       protected function countItems() {
+               $count = WatchedItemStore::getDefaultInstance()->countWatchedItems( $this->getUser() );
                return floor( $count / 2 );
        }
 }
index b1c3f16..baa55f0 100644 (file)
@@ -160,7 +160,7 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
                        ];
                        $on['rd_namespace'] = $target->getNamespace();
                        // Inner LIMIT is 2X in case of stale backlinks with wrong namespaces
-                       $subQuery = $dbr->selectSqlText(
+                       $subQuery = $dbr->selectSQLText(
                                [ $table, 'redirect', 'page' ],
                                [ $fromCol, 'rd_from' ],
                                $conds[$table],
index a39690a..3824be1 100644 (file)
@@ -28,13 +28,13 @@ class UsercreateTemplate extends BaseTemplate {
         * UserCreateForm hook to add checkboxes to the create account form.
         */
        function addInputItem( $name, $value, $type, $msg, $helptext = false ) {
-               $this->data['extraInput'][] = array(
+               $this->data['extraInput'][] = [
                        'name' => $name,
                        'value' => $value,
                        'type' => $type,
                        'msg' => $msg,
                        'helptext' => $helptext,
-               );
+               ];
        }
 
        function execute() {
@@ -84,7 +84,7 @@ class UsercreateTemplate extends BaseTemplate {
                                        <span class="mw-ui-flush-right"><?php echo $this->getMsg( 'createacct-helpusername' )->parse(); ?></span>
                                </label>
                                <?php
-                               echo Html::input( 'wpName', $this->data['name'], 'text', array(
+                               echo Html::input( 'wpName', $this->data['name'], 'text', [
                                        'class' => 'mw-ui-input loginText',
                                        'id' => 'wpName2',
                                        'tabindex' => '1',
@@ -92,7 +92,7 @@ class UsercreateTemplate extends BaseTemplate {
                                        'required',
                                        'placeholder' => $this->getMsg( $this->data['loggedin'] ?
                                                'createacct-another-username-ph' : 'userlogin-yourname-ph' )->text(),
-                               ) );
+                               ] );
                                ?>
                        </div>
 
@@ -113,14 +113,14 @@ class UsercreateTemplate extends BaseTemplate {
                        <div class="mw-ui-vform-field mw-row-password">
                                <label for='wpPassword2'><?php $this->msg( 'userlogin-yourpassword' ); ?></label>
                                <?php
-                               echo Html::input( 'wpPassword', null, 'password', array(
+                               echo Html::input( 'wpPassword', null, 'password', [
                                        'class' => 'mw-ui-input loginPassword',
                                        'id' => 'wpPassword2',
                                        'tabindex' => '3',
                                        'size' => '20',
                                        'required',
                                        'placeholder' => $this->getMsg( 'createacct-yourpassword-ph' )->text()
-                               ) + User::passwordChangeInputAttribs() );
+                               ] + User::passwordChangeInputAttribs() );
                                ?>
                        </div>
 
@@ -143,14 +143,14 @@ class UsercreateTemplate extends BaseTemplate {
                        <div class="mw-ui-vform-field mw-row-password">
                                <label for='wpRetype'><?php $this->msg( 'createacct-yourpasswordagain' ); ?></label>
                                <?php
-                               echo Html::input( 'wpRetype', null, 'password', array(
+                               echo Html::input( 'wpRetype', null, 'password', [
                                        'class' => 'mw-ui-input loginPassword',
                                        'id' => 'wpRetype',
                                        'tabindex' => '5',
                                        'size' => '20',
                                        'required',
                                        'placeholder' => $this->getMsg( 'createacct-yourpasswordagain-ph' )->text()
-                                       ) + User::passwordChangeInputAttribs() );
+                               ] + User::passwordChangeInputAttribs() );
                                ?>
                        </div>
 
@@ -165,7 +165,7 @@ class UsercreateTemplate extends BaseTemplate {
                                                ?>
                                        </label>
                                        <?php
-                                               echo Html::input( 'wpEmail', $this->data['email'], 'email', array(
+                                               echo Html::input( 'wpEmail', $this->data['email'], 'email', [
                                                        'class' => 'mw-ui-input loginText',
                                                        'id' => 'wpEmail',
                                                        'tabindex' => '6',
@@ -173,7 +173,7 @@ class UsercreateTemplate extends BaseTemplate {
                                                        'required' => $this->data['emailrequired'],
                                                        'placeholder' => $this->getMsg( $this->data['loggedin'] ?
                                                                'createacct-another-email-ph' : 'createacct-email-ph' )->text()
-                                               ) );
+                                               ] );
                                        ?>
                                <?php } ?>
                        </div>
@@ -193,13 +193,13 @@ class UsercreateTemplate extends BaseTemplate {
                        <?php if ( $this->data['usereason'] ) { ?>
                                <div class="mw-ui-vform-field">
                                        <label for='wpReason'><?php $this->msg( 'createacct-reason' ); ?></label>
-                                       <?php echo Html::input( 'wpReason', $this->data['reason'], 'text', array(
+                                       <?php echo Html::input( 'wpReason', $this->data['reason'], 'text', [
                                                'class' => 'mw-ui-input loginText',
                                                'id' => 'wpReason',
                                                'tabindex' => '8',
                                                'size' => '20',
                                                'placeholder' => $this->getMsg( 'createacct-reason-ph' )->text()
-                                       ) ); ?>
+                                       ] ); ?>
                                </div>
                        <?php } ?>
 
@@ -265,15 +265,15 @@ class UsercreateTemplate extends BaseTemplate {
                                <?php
                                echo Html::submitButton(
                                        $this->getMsg( $this->data['loggedin'] ? 'createacct-another-submit' : 'createacct-submit' ),
-                                       array(
+                                       [
                                                'id' => 'wpCreateaccount',
                                                'name' => 'wpCreateaccount',
                                                'tabindex' => $tabIndex++
-                                       ),
-                                       array(
+                                       ],
+                                       [
                                                'mw-ui-block',
                                                'mw-ui-constructive',
-                                       )
+                                       ]
                                );
                                ?>
                        </div>
index 4a0b413..c2b2df6 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 // @codingStandardsIgnoreFile
 /**
- * Html form for user login (since 1.22 with VForm appearance).
+ * HTML form for user login (since 1.22 with VForm appearance).
  *
  * 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
@@ -58,24 +58,24 @@ class UserloginTemplate extends BaseTemplate {
 
                        <?php if ( $this->data['formheader'] ) { ?>
                                <div class="mw-form-formheader">
-                                       <?php $this->html( 'formheader' ); /* extensions such as MobileFrontend add html here */ ?>
+                                       <?php $this->html( 'formheader' ); /* extensions such as MobileFrontend add HTML here */ ?>
                                </div>
                        <?php } ?>
                        <div class="mw-ui-vform-field">
-                               <label for='wpName1'>
+                               <label for="wpName1">
                                        <?php
                                        $this->msg( 'userlogin-yourname' );
 
                                        if ( $this->data['secureLoginUrl'] ) {
-                                               echo Html::element( 'a', array(
+                                               echo Html::element( 'a', [
                                                        'href' => $this->data['secureLoginUrl'],
                                                        'class' => 'mw-ui-flush-right mw-secure',
-                                               ), $this->getMsg( 'userlogin-signwithsecure' )->text() );
+                                               ], $this->getMsg( 'userlogin-signwithsecure' )->text() );
                                        }
                                        ?>
                                </label>
                                <?php
-                               echo Html::input( 'wpName', $this->data['name'], 'text', array(
+                               echo Html::input( 'wpName', $this->data['name'], 'text', [
                                        'class' => 'loginText mw-ui-input',
                                        'id' => 'wpName1',
                                        'tabindex' => '1',
@@ -85,25 +85,25 @@ class UserloginTemplate extends BaseTemplate {
                                        // Set focus to this field if it's blank.
                                        'autofocus' => !$this->data['name'],
                                        'placeholder' => $this->getMsg( 'userlogin-yourname-ph' )->text()
-                               ) );
+                               ] );
                                ?>
                        </div>
 
                        <div class="mw-ui-vform-field">
-                               <label for='wpPassword1'>
+                               <label for="wpPassword1">
                                        <?php
                                        $this->msg( 'userlogin-yourpassword' );
                                        ?>
                                </label>
                                <?php
-                               echo Html::input( 'wpPassword', null, 'password', array(
+                               echo Html::input( 'wpPassword', null, 'password', [
                                        'class' => 'loginPassword mw-ui-input',
                                        'id' => 'wpPassword1',
                                        'tabindex' => '2',
                                        // Set focus to this field if username is filled in.
                                        'autofocus' => (bool)$this->data['name'],
                                        'placeholder' => $this->getMsg( 'userlogin-yourpassword-ph' )->text()
-                               ) );
+                               ] );
                                ?>
                        </div>
 
@@ -116,7 +116,7 @@ class UserloginTemplate extends BaseTemplate {
                                }
                        ?>
                                <div class="mw-ui-vform-field" id="mw-user-domain-section">
-                                       <label for='wpDomain'><?php $this->msg( 'yourdomainname' ); ?></label>
+                                       <label for="wpDomain"><?php $this->msg( 'yourdomainname' ); ?></label>
                                        <?php echo $select->getHTML(); ?>
                                </div>
                        <?php } ?>
@@ -142,14 +142,14 @@ class UserloginTemplate extends BaseTemplate {
 
                        <div class="mw-ui-vform-field">
                                <?php
-                               $attrs = array(
+                               $attrs = [
                                        'id' => 'wpLoginAttempt',
                                        'name' => 'wpLoginAttempt',
                                        'tabindex' => '6',
-                               );
-                               $modifiers = array(
-                                       'mw-ui-constructive',
-                               );
+                               ];
+                               $modifiers = [
+                                       'mw-ui-progressive',
+                               ];
                                echo Html::submitButton( $this->getMsg( 'pt-login-button' )->text(), $attrs, $modifiers );
                                ?>
                        </div>
@@ -158,11 +158,11 @@ class UserloginTemplate extends BaseTemplate {
                                <?php
                                echo Html::element(
                                        'a',
-                                       array(
+                                       [
                                                'href' => Skin::makeInternalOrExternalUrl(
                                                        wfMessage( 'helplogin-url' )->inContentLanguage()->text()
                                                ),
-                                       ),
+                                       ],
                                        $this->getMsg( 'userlogin-helplink2' )->text()
                                );
                                ?>
@@ -172,9 +172,9 @@ class UserloginTemplate extends BaseTemplate {
                        if ( $this->data['useemail'] && $this->data['canreset'] && $this->data['resetlink'] === true ) {
                                echo Html::rawElement(
                                        'div',
-                                       array(
+                                       [
                                                'class' => 'mw-ui-vform-field mw-form-related-link-container',
-                                       ),
+                                       ],
                                        Linker::link(
                                                SpecialPage::getTitleFor( 'PasswordReset' ),
                                                $this->getMsg( 'userlogin-resetpassword-link' )->escaped()
@@ -188,8 +188,8 @@ class UserloginTemplate extends BaseTemplate {
                                                <a href="<?php $this->text( 'createOrLoginHref' ); ?>" id="mw-createaccount-join" tabindex="7"><?php $this->msg( 'userlogin-createanother' ); ?></a>
                                        </div>
                                <?php } else { ?>
-                                       <div id="mw-createaccount-cta" class="mw-form-related-link-container mw-ui-vform-field">
-                                               <?php $this->msg( 'userlogin-noaccount' ); ?><a href="<?php $this->text( 'createOrLoginHref' ); ?>" id="mw-createaccount-join" tabindex="7" class="mw-ui-button mw-ui-progressive"><?php $this->msg( 'userlogin-joinproject' ); ?></a>
+                                       <div id="mw-createaccount-cta" class="mw-ui-vform-field">
+                                               <?php $this->msg( 'userlogin-noaccount' ); ?><a href="<?php $this->text( 'createOrLoginHref' ); ?>" id="mw-createaccount-join" tabindex="7" class="mw-ui-button"><?php $this->msg( 'userlogin-joinproject' ); ?></a>
                                        </div>
                                <?php
                                }
index 4c4daed..d93ce22 100644 (file)
@@ -18,5 +18,5 @@ fix-backslash: no
 fix-uri: no
 # Don't strip html5 elements we support
 # html-{meta,link} is a hack we use to prevent Tidy from stripping <meta> and <link> used in the body for Microdata
-new-empty-tags: html-meta, html-link, wbr
-new-inline-tags: video, audio, source, track, bdi, data, time, mark
+new-empty-tags: html-meta, html-link, wbr, source, track
+new-inline-tags: video, audio, bdi, data, time, mark
index c1e538a..9d7b294 100644 (file)
  * @author Michael Dale
  */
 abstract class UploadBase {
+       /** @var string Local file system path to the file to upload (or a local copy) */
        protected $mTempPath;
+       /** @var TempFSFile|null Wrapper to handle deleting the temp file */
+       protected $tempFileObj;
+
        protected $mDesiredDestName, $mDestName, $mRemoveTempFile, $mSourceType;
        protected $mTitle = false, $mTitleError = 0;
        protected $mFilteredName, $mFinalExtension;
@@ -219,8 +223,8 @@ abstract class UploadBase {
                if ( FileBackend::isStoragePath( $tempPath ) ) {
                        throw new MWException( __METHOD__ . " given storage path `$tempPath`." );
                }
-               $this->mTempPath = $tempPath;
-               $this->mFileSize = $fileSize;
+
+               $this->setTempFile( $tempPath, $fileSize );
                $this->mRemoveTempFile = $removeTempFile;
        }
 
@@ -231,6 +235,23 @@ abstract class UploadBase {
         */
        abstract public function initializeFromRequest( &$request );
 
+       /**
+        * @param string $tempPath File system path to temporary file containing the upload
+        * @param integer $fileSize
+        */
+       protected function setTempFile( $tempPath, $fileSize = null ) {
+               $this->mTempPath = $tempPath;
+               $this->mFileSize = $fileSize ?: null;
+               if ( strlen( $this->mTempPath ) && file_exists( $this->mTempPath ) ) {
+                       $this->tempFileObj = new TempFSFile( $this->mTempPath );
+                       if ( !$fileSize ) {
+                               $this->mFileSize = filesize( $this->mTempPath );
+                       }
+               } else {
+                       $this->tempFileObj = null;
+               }
+       }
+
        /**
         * Fetch the file. Usually a no-op
         * @return Status
@@ -716,7 +737,7 @@ abstract class UploadBase {
                                WatchAction::doWatch(
                                        $this->getLocalFile()->getTitle(),
                                        $user,
-                                       WatchedItem::IGNORE_USER_RIGHTS
+                                       User::IGNORE_USER_RIGHTS
                                );
                        }
                        Hooks::run( 'UploadComplete', [ &$this ] );
@@ -952,9 +973,10 @@ abstract class UploadBase {
         * on exit to clean up.
         */
        public function cleanupTempFile() {
-               if ( $this->mRemoveTempFile && $this->mTempPath && file_exists( $this->mTempPath ) ) {
-                       wfDebug( __METHOD__ . ": Removing temporary file {$this->mTempPath}\n" );
-                       unlink( $this->mTempPath );
+               if ( $this->mRemoveTempFile && $this->tempFileObj ) {
+                       // Delete when all relevant TempFSFile handles go out of scope
+                       wfDebug( __METHOD__ . ": Marked temporary file '{$this->mTempPath}' for removal\n" );
+                       $this->tempFileObj->autocollect();
                }
        }
 
index d82a9e6..0323b68 100644 (file)
@@ -142,15 +142,15 @@ class UploadFromChunks extends UploadFromFile {
                $tStart = microtime( true );
                $status = $this->repo->concatenate( $fileList, $tmpPath, FileRepo::DELETE_SOURCE );
                $tAmount = microtime( true ) - $tStart;
-               if ( !$status->isOk() ) {
+               if ( !$status->isOK() ) {
                        return $status;
                }
+
                wfDebugLog( 'fileconcatenate', "Combined $i chunks in $tAmount seconds." );
 
-               // File system path
-               $this->mTempPath = $tmpPath;
-               // Since this was set for the last chunk previously
-               $this->mFileSize = filesize( $this->mTempPath );
+               // File system path of the actual full temp file
+               $this->setTempFile( $tmpPath );
+
                $ret = $this->verifyUpload();
                if ( $ret['status'] !== UploadBase::OK ) {
                        wfDebugLog( 'fileconcatenate', "Verification failed for chunked upload" );
@@ -234,7 +234,7 @@ class UploadFromChunks extends UploadFromFile {
                wfDebug( __METHOD__ . " update chunk status for {$this->mFileKey} offset:" .
                        $this->getOffset() . ' inx:' . $this->getChunkIndex() . "\n" );
 
-               $dbw = $this->repo->getMasterDb();
+               $dbw = $this->repo->getMasterDB();
                // Use a quick transaction since we will upload the full temp file into shared
                // storage, which takes time for large files. We don't want to hold locks then.
                $dbw->update(
@@ -256,7 +256,7 @@ class UploadFromChunks extends UploadFromFile {
        private function getChunkStatus() {
                // get Master db to avoid race conditions.
                // Otherwise, if chunk upload time < replag there will be spurious errors
-               $dbw = $this->repo->getMasterDb();
+               $dbw = $this->repo->getMasterDB();
                $row = $dbw->selectRow(
                        'uploadstash',
                        [
index 342bd79..6639c34 100644 (file)
@@ -286,7 +286,7 @@ class UploadFromUrl extends UploadBase {
                }
 
                wfDebugLog( 'fileupload', $status );
-               if ( $status->isOk() ) {
+               if ( $status->isOK() ) {
                        wfDebugLog( 'fileupload', 'Download by URL completed successfuly.' );
                } else {
                        wfDebugLog(
index d5e573b..c171ded 100644 (file)
@@ -276,7 +276,7 @@ class UploadStash {
 
                // insert the file metadata into the db.
                wfDebug( __METHOD__ . " inserting $stashPath under $key\n" );
-               $dbw = $this->repo->getMasterDb();
+               $dbw = $this->repo->getMasterDB();
 
                $serializedFileProps = serialize( $fileProps );
                if ( strlen( $serializedFileProps ) > self::MAX_US_PROPS_SIZE ) {
@@ -336,7 +336,7 @@ class UploadStash {
                }
 
                wfDebug( __METHOD__ . ' clearing all rows for user ' . $this->userId . "\n" );
-               $dbw = $this->repo->getMasterDb();
+               $dbw = $this->repo->getMasterDB();
                $dbw->delete(
                        'uploadstash',
                        [ 'us_user' => $this->userId ],
@@ -364,7 +364,7 @@ class UploadStash {
                                . ' No user is logged in, files must belong to users' );
                }
 
-               $dbw = $this->repo->getMasterDb();
+               $dbw = $this->repo->getMasterDB();
 
                // this is a cheap query. it runs on the master so that this function
                // still works when there's lag. It won't be called all that often.
@@ -399,7 +399,7 @@ class UploadStash {
                // Ensure we have the UploadStashFile loaded for this key
                $this->getFile( $key, true );
 
-               $dbw = $this->repo->getMasterDb();
+               $dbw = $this->repo->getMasterDB();
 
                $dbw->delete(
                        'uploadstash',
@@ -430,7 +430,7 @@ class UploadStash {
                                . ' No user is logged in, files must belong to users' );
                }
 
-               $dbr = $this->repo->getSlaveDb();
+               $dbr = $this->repo->getSlaveDB();
                $res = $dbr->select(
                        'uploadstash',
                        'us_key',
@@ -507,9 +507,9 @@ class UploadStash {
                $dbr = null;
                if ( $readFromDB === DB_MASTER ) {
                        // sometimes reading from the master is necessary, if there's replication lag.
-                       $dbr = $this->repo->getMasterDb();
+                       $dbr = $this->repo->getMasterDB();
                } else {
-                       $dbr = $this->repo->getSlaveDb();
+                       $dbr = $this->repo->getSlaveDB();
                }
 
                $row = $dbr->selectRow(
index c758f26..7346a90 100644 (file)
@@ -429,7 +429,7 @@ class BotPassword implements IDBAccessObject {
 
                // Check restrictions
                $status = $bp->getRestrictions()->check( $request );
-               if ( !$status->isOk() ) {
+               if ( !$status->isOK() ) {
                        return Status::newFatal( 'botpasswords-restriction-failed' );
                }
 
index 14548f4..7a70773 100644 (file)
@@ -32,7 +32,7 @@ use MediaWiki\Session\Token;
  *
  * @since 1.27
  */
-class LoggedOutEditToken extends MediaWiki\Session\Token {
+class LoggedOutEditToken extends Token {
        public function __construct() {
                parent::__construct( '', '', false );
        }
index 31f6807..027edf9 100644 (file)
@@ -62,17 +62,22 @@ class User implements IDBAccessObject {
         */
        const VERSION = 10;
 
-       /**
-        * Maximum items in $mWatchedItems
-        */
-       const MAX_WATCHED_ITEMS_CACHE = 100;
-
        /**
         * Exclude user options that are set to their default value.
         * @since 1.25
         */
        const GETOPTIONS_EXCLUDE_DEFAULTS = 1;
 
+       /**
+        * @since 1.27
+        */
+       const CHECK_USER_RIGHTS = true;
+
+       /**
+        * @since 1.27
+        */
+       const IGNORE_USER_RIGHTS = false;
+
        /**
         * Array of Strings List of member variables which are saved to the
         * shared cache (memcached). Any operation which changes the
@@ -187,8 +192,15 @@ class User implements IDBAccessObject {
         */
        protected static $mAllRights = false;
 
+       /**
+        * An in-process cache for user data lookup
+        * @var HashBagOStuff
+        */
+       protected static $inProcessCache;
+
        /** Cache variables */
        // @{
+       /** @var int */
        public $mId;
        /** @var string */
        public $mName;
@@ -285,9 +297,6 @@ class User implements IDBAccessObject {
        /** @var Block */
        private $mBlockedFromCreateAccount = false;
 
-       /** @var array */
-       private $mWatchedItems = [];
-
        /** @var integer User::READ_* constant bitfield used to load data */
        protected $queryFlagsUsed = self::READ_NORMAL;
 
@@ -315,9 +324,12 @@ class User implements IDBAccessObject {
        }
 
        /**
-        * Test if it's safe to load this User object. You should typically check this before using
-        * $wgUser or RequestContext::getUser in a method that might be called before the system has
-        * been fully initialized. If the object is unsafe, you should use an anonymous user:
+        * Test if it's safe to load this User object.
+        *
+        * You should typically check this before using $wgUser or
+        * RequestContext::getUser in a method that might be called before the
+        * system has been fully initialized. If the object is unsafe, you should
+        * use an anonymous user:
         * \code
         * $user = $wgUser->isSafeToLoad() ? $wgUser : new User;
         * \endcode
@@ -327,7 +339,14 @@ class User implements IDBAccessObject {
         */
        public function isSafeToLoad() {
                global $wgFullyInitialised;
-               return $wgFullyInitialised || $this->mLoadedItems === true || $this->mFrom !== 'session';
+
+               // The user is safe to load if:
+               // * MW_NO_SESSION is undefined AND $wgFullyInitialised is true (safe to use session data)
+               // * mLoadedItems === true (already loaded)
+               // * mFrom !== 'session' (sessions not involved at all)
+
+               return ( !defined( 'MW_NO_SESSION' ) && $wgFullyInitialised ) ||
+                       $this->mLoadedItems === true || $this->mFrom !== 'session';
        }
 
        /**
@@ -433,7 +452,10 @@ class User implements IDBAccessObject {
         */
        public static function purge( $wikiId, $userId ) {
                $cache = ObjectCache::getMainWANInstance();
-               $cache->delete( $cache->makeGlobalKey( 'user', 'id', $wikiId, $userId ) );
+               $processCache = self::getInProcessCache();
+               $key = $cache->makeGlobalKey( 'user', 'id', $wikiId, $userId );
+               $cache->delete( $key );
+               $processCache->delete( $key );
        }
 
        /**
@@ -445,6 +467,17 @@ class User implements IDBAccessObject {
                return $cache->makeGlobalKey( 'user', 'id', wfWikiID(), $this->mId );
        }
 
+       /**
+        * @since 1.27
+        * @return HashBagOStuff
+        */
+       protected static function getInProcessCache() {
+               if ( !self::$inProcessCache ) {
+                       self::$inProcessCache = new HashBagOStuff( ['maxKeys' => 10] );
+               }
+               return self::$inProcessCache;
+       }
+
        /**
         * Load user data from shared cache, given mId has already been set.
         *
@@ -458,12 +491,17 @@ class User implements IDBAccessObject {
                }
 
                $cache = ObjectCache::getMainWANInstance();
-               $data = $cache->get( $this->getCacheKey( $cache ) );
-               if ( !is_array( $data ) || $data['mVersion'] < self::VERSION ) {
-                       // Object is expired
-                       return false;
+               $processCache = self::getInProcessCache();
+               $key = $this->getCacheKey( $cache );
+               $data = $processCache->get( $key );
+               if ( !is_array( $data ) ) {
+                       $data = $cache->get( $key );
+                       if ( !is_array( $data ) || $data['mVersion'] < self::VERSION ) {
+                               // Object is expired
+                               return false;
+                       }
+                       $processCache->set( $key, $data );
                }
-
                wfDebug( "User: got user {$this->mId} from cache\n" );
 
                // Restore from cache
@@ -497,8 +535,10 @@ class User implements IDBAccessObject {
                $opts = Database::getCacheSetOptions( wfGetDB( DB_SLAVE ) );
 
                $cache = ObjectCache::getMainWANInstance();
+               $processCache = self::getInProcessCache();
                $key = $this->getCacheKey( $cache );
                $cache->set( $key, $data, $cache::TTL_HOUR, $opts );
+               $processCache->set( $key, $data );
        }
 
        /** @name newFrom*() static factory methods */
@@ -819,8 +859,6 @@ class User implements IDBAccessObject {
                        || strlen( $name ) > $wgMaxNameChars
                        || $name != $wgContLang->ucfirst( $name )
                ) {
-                       wfDebugLog( 'username', __METHOD__ .
-                               ": '$name' invalid due to empty, IP, slash, length, or lowercase" );
                        return false;
                }
 
@@ -830,8 +868,6 @@ class User implements IDBAccessObject {
                if ( is_null( $parsed )
                        || $parsed->getNamespace()
                        || strcmp( $name, $parsed->getPrefixedText() ) ) {
-                       wfDebugLog( 'username', __METHOD__ .
-                               ": '$name' invalid due to ambiguous prefixes" );
                        return false;
                }
 
@@ -846,8 +882,6 @@ class User implements IDBAccessObject {
                        '\x{e000}-\x{f8ff}' . # private use
                        ']/u';
                if ( preg_match( $unicodeBlacklist, $name ) ) {
-                       wfDebugLog( 'username', __METHOD__ .
-                               ": '$name' invalid due to blacklisted characters" );
                        return false;
                }
 
@@ -1111,7 +1145,8 @@ class User implements IDBAccessObject {
                $this->mOptionOverrides = null;
                $this->mOptionsLoaded = false;
 
-               $loggedOut = $this->mRequest ? $this->mRequest->getSession()->getLoggedOutTimestamp() : 0;
+               $loggedOut = $this->mRequest && !defined( 'MW_NO_SESSION' )
+                       ? $this->mRequest->getSession()->getLoggedOutTimestamp() : 0;
                if ( $loggedOut !== 0 ) {
                        $this->mTouched = wfTimestamp( TS_MW, $loggedOut );
                } else {
@@ -2018,7 +2053,8 @@ class User implements IDBAccessObject {
                        // Don't load if this was initialized from an ID
                        $this->load();
                }
-               return $this->mId;
+
+               return (int)$this->mId;
        }
 
        /**
@@ -2128,7 +2164,7 @@ class User implements IDBAccessObject {
                // Get the "last viewed rev" timestamp from the oldest message notification
                $timestamp = $dbr->selectField( 'user_newtalk',
                        'MIN(user_last_timestamp)',
-                       $this->isAnon() ? [ 'user_ip' => $this->getName() ] : [ 'user_id' => $this->getID() ],
+                       $this->isAnon() ? [ 'user_ip' => $this->getName() ] : [ 'user_id' => $this->getId() ],
                        __METHOD__ );
                $rev = $timestamp ? Revision::loadFromTimestamp( $dbr, $utp, $timestamp ) : null;
                return [ [ 'wiki' => wfWikiID(), 'link' => $utp->getLocalURL(), 'rev' => $rev ] ];
@@ -2285,13 +2321,18 @@ class User implements IDBAccessObject {
                }
 
                $cache = ObjectCache::getMainWANInstance();
+               $processCache = self::getInProcessCache();
                $key = $this->getCacheKey( $cache );
                if ( $mode === 'refresh' ) {
                        $cache->delete( $key, 1 );
+                       $processCache->delete( $key );
                } else {
-                       wfGetDB( DB_MASTER )->onTransactionPreCommitOrIdle( function() use ( $cache, $key ) {
-                               $cache->delete( $key );
-                       } );
+                       wfGetDB( DB_MASTER )->onTransactionPreCommitOrIdle(
+                               function() use ( $cache, $processCache, $key ) {
+                                       $cache->delete( $key );
+                                       $processCache->delete( $key );
+                               }
+                       );
                }
        }
 
@@ -3080,9 +3121,13 @@ class User implements IDBAccessObject {
                if ( is_null( $this->mRights ) ) {
                        $this->mRights = self::getGroupPermissions( $this->getEffectiveGroups() );
 
-                       $allowedRights = $this->getRequest()->getSession()->getAllowedUserRights();
-                       if ( $allowedRights !== null ) {
-                               $this->mRights = array_intersect( $this->mRights, $allowedRights );
+                       // Deny any rights denied by the user's session, unless this
+                       // endpoint has no sessions.
+                       if ( !defined( 'MW_NO_SESSION' ) ) {
+                               $allowedRights = $this->getRequest()->getSession()->getAllowedUserRights();
+                               if ( $allowedRights !== null ) {
+                                       $this->mRights = array_intersect( $this->mRights, $allowedRights );
+                               }
                        }
 
                        Hooks::run( 'UserGetRights', [ $this, &$this->mRights ] );
@@ -3225,7 +3270,7 @@ class User implements IDBAccessObject {
                if ( $this->getId() ) {
                        $dbw->insert( 'user_groups',
                                [
-                                       'ug_user' => $this->getID(),
+                                       'ug_user' => $this->getId(),
                                        'ug_group' => $group,
                                ],
                                __METHOD__,
@@ -3263,14 +3308,14 @@ class User implements IDBAccessObject {
                $dbw = wfGetDB( DB_MASTER );
                $dbw->delete( 'user_groups',
                        [
-                               'ug_user' => $this->getID(),
+                               'ug_user' => $this->getId(),
                                'ug_group' => $group,
                        ], __METHOD__
                );
                // Remember that the user was in this group
                $dbw->insert( 'user_former_groups',
                        [
-                               'ufg_user' => $this->getID(),
+                               'ufg_user' => $this->getId(),
                                'ufg_group' => $group,
                        ],
                        __METHOD__,
@@ -3295,7 +3340,7 @@ class User implements IDBAccessObject {
         * @return bool
         */
        public function isLoggedIn() {
-               return $this->getID() != 0;
+               return $this->getId() != 0;
        }
 
        /**
@@ -3398,51 +3443,36 @@ class User implements IDBAccessObject {
                }
        }
 
-       /**
-        * Get a WatchedItem for this user and $title.
-        *
-        * @since 1.22 $checkRights parameter added
-        * @param Title $title
-        * @param int $checkRights Whether to check 'viewmywatchlist'/'editmywatchlist' rights.
-        *     Pass WatchedItem::CHECK_USER_RIGHTS or WatchedItem::IGNORE_USER_RIGHTS.
-        * @return WatchedItem
-        */
-       public function getWatchedItem( $title, $checkRights = WatchedItem::CHECK_USER_RIGHTS ) {
-               $key = $checkRights . ':' . $title->getNamespace() . ':' . $title->getDBkey();
-
-               if ( isset( $this->mWatchedItems[$key] ) ) {
-                       return $this->mWatchedItems[$key];
-               }
-
-               if ( count( $this->mWatchedItems ) >= self::MAX_WATCHED_ITEMS_CACHE ) {
-                       $this->mWatchedItems = [];
-               }
-
-               $this->mWatchedItems[$key] = WatchedItem::fromUserTitle( $this, $title, $checkRights );
-               return $this->mWatchedItems[$key];
-       }
-
        /**
         * Check the watched status of an article.
         * @since 1.22 $checkRights parameter added
         * @param Title $title Title of the article to look at
-        * @param int $checkRights Whether to check 'viewmywatchlist'/'editmywatchlist' rights.
-        *     Pass WatchedItem::CHECK_USER_RIGHTS or WatchedItem::IGNORE_USER_RIGHTS.
+        * @param bool $checkRights Whether to check 'viewmywatchlist'/'editmywatchlist' rights.
+        *     Pass User::CHECK_USER_RIGHTS or User::IGNORE_USER_RIGHTS.
         * @return bool
         */
-       public function isWatched( $title, $checkRights = WatchedItem::CHECK_USER_RIGHTS ) {
-               return $this->getWatchedItem( $title, $checkRights )->isWatched();
+       public function isWatched( $title, $checkRights = self::CHECK_USER_RIGHTS ) {
+               if ( $title->isWatchable() && ( !$checkRights || $this->isAllowed( 'viewmywatchlist' ) ) ) {
+                       return WatchedItemStore::getDefaultInstance()->isWatched( $this, $title );
+               }
+               return false;
        }
 
        /**
         * Watch an article.
         * @since 1.22 $checkRights parameter added
         * @param Title $title Title of the article to look at
-        * @param int $checkRights Whether to check 'viewmywatchlist'/'editmywatchlist' rights.
-        *     Pass WatchedItem::CHECK_USER_RIGHTS or WatchedItem::IGNORE_USER_RIGHTS.
-        */
-       public function addWatch( $title, $checkRights = WatchedItem::CHECK_USER_RIGHTS ) {
-               $this->getWatchedItem( $title, $checkRights )->addWatch();
+        * @param bool $checkRights Whether to check 'viewmywatchlist'/'editmywatchlist' rights.
+        *     Pass User::CHECK_USER_RIGHTS or User::IGNORE_USER_RIGHTS.
+        */
+       public function addWatch( $title, $checkRights = self::CHECK_USER_RIGHTS ) {
+               if ( !$checkRights || $this->isAllowed( 'editmywatchlist' ) ) {
+                       WatchedItemStore::getDefaultInstance()->addWatchBatch( [
+                               [ $this, $title->getSubjectPage() ],
+                               [ $this, $title->getTalkPage() ],
+                       ]
+                       );
+               }
                $this->invalidateCache();
        }
 
@@ -3450,11 +3480,14 @@ class User implements IDBAccessObject {
         * Stop watching an article.
         * @since 1.22 $checkRights parameter added
         * @param Title $title Title of the article to look at
-        * @param int $checkRights Whether to check 'viewmywatchlist'/'editmywatchlist' rights.
-        *     Pass WatchedItem::CHECK_USER_RIGHTS or WatchedItem::IGNORE_USER_RIGHTS.
+        * @param bool $checkRights Whether to check 'viewmywatchlist'/'editmywatchlist' rights.
+        *     Pass User::CHECK_USER_RIGHTS or User::IGNORE_USER_RIGHTS.
         */
-       public function removeWatch( $title, $checkRights = WatchedItem::CHECK_USER_RIGHTS ) {
-               $this->getWatchedItem( $title, $checkRights )->removeWatch();
+       public function removeWatch( $title, $checkRights = self::CHECK_USER_RIGHTS ) {
+               if ( !$checkRights || $this->isAllowed( 'editmywatchlist' ) ) {
+                       WatchedItemStore::getDefaultInstance()->removeWatch( $this, $title->getSubjectPage() );
+                       WatchedItemStore::getDefaultInstance()->removeWatch( $this, $title->getTalkPage() );
+               }
                $this->invalidateCache();
        }
 
@@ -3522,9 +3555,8 @@ class User implements IDBAccessObject {
                        $force = 'force';
                }
 
-               $this->getWatchedItem( $title )->resetNotificationTimestamp(
-                       $force, $oldid
-               );
+               WatchedItemStore::getDefaultInstance()
+                       ->resetNotificationTimestamp( $this, $title, $force, $oldid );
        }
 
        /**
@@ -3700,6 +3732,7 @@ class User implements IDBAccessObject {
                } else {
                        $this->clearInstanceCache( 'defaults' );
                        $delay = $session->delaySave();
+                       $session->unpersist(); // Clear cookies (T127436)
                        $session->setLoggedOutTimestamp( time() );
                        $session->setUser( new User );
                        $session->set( 'wsUserID', 0 ); // Other code expects this
@@ -3958,6 +3991,7 @@ class User implements IDBAccessObject {
                if ( $this->isLoggedIn() && $this->isBlocked() ) {
                        return $this->spreadBlock();
                }
+
                return false;
        }
 
@@ -4605,11 +4639,14 @@ class User implements IDBAccessObject {
                        }
                }
 
-               // Remove any rights that aren't allowed to the global-session user
-               $allowedRights = SessionManager::getGlobalSession()->getAllowedUserRights();
-               if ( $allowedRights !== null && !in_array( $right, $allowedRights, true ) ) {
-                       $cache[$right] = false;
-                       return false;
+               // Remove any rights that aren't allowed to the global-session user,
+               // unless there are no sessions for this endpoint.
+               if ( !defined( 'MW_NO_SESSION' ) ) {
+                       $allowedRights = SessionManager::getGlobalSession()->getAllowedUserRights();
+                       if ( $allowedRights !== null && !in_array( $right, $allowedRights, true ) ) {
+                               $cache[$right] = false;
+                               return false;
+                       }
                }
 
                // Allow extensions to say false
index 254e4e7..916e2f8 100644 (file)
@@ -311,6 +311,7 @@ class ClassCollector {
                case T_CLASS:
                case T_INTERFACE:
                case T_TRAIT:
+               case T_DOUBLE_COLON:
                        $this->startToken = $token;
                }
        }
@@ -322,6 +323,11 @@ class ClassCollector {
         */
        protected function tryEndExpect( $token ) {
                switch ( $this->startToken[0] ) {
+               case T_DOUBLE_COLON:
+                       // Skip over T_CLASS after T_DOUBLE_COLON because this is something like
+                       // "self::static" which accesses the class name. It doens't define a new class.
+                       $this->startToken = null;
+                       break;
                case T_NAMESPACE:
                        if ( $token === ';' || $token === '{' ) {
                                $this->namespace = $this->implodeTokens() . '\\';
index 002fd06..3bd3a4c 100644 (file)
@@ -166,14 +166,14 @@ class BatchRowIterator implements RecursiveIterator {
        }
 
        /**
-        * @return boolean True when the iterator is in a valid state
+        * @return bool True when the iterator is in a valid state
         */
        public function valid() {
                return (bool)$this->current;
        }
 
        /**
-        * @return boolean True when this result set has rows
+        * @return bool True when this result set has rows
         */
        public function hasChildren() {
                return $this->current && count( $this->current );
index 75eaede..72c620e 100644 (file)
@@ -70,7 +70,7 @@ class MWCryptHash {
         * Return the byte-length output of the hash algorithm we are
         * using in self::hash and self::hmac.
         *
-        * @param boolean $raw True to return the length for binary data, false to
+        * @param bool $raw True to return the length for binary data, false to
         *   return for hex-encoded
         * @return int Number of bytes the hash outputs
         */
@@ -88,7 +88,7 @@ class MWCryptHash {
         * making use of the best hash algorithm that we have available.
         *
         * @param string $data
-        * @param boolean $raw True to return binary data, false to return it hex-encoded
+        * @param bool $raw True to return binary data, false to return it hex-encoded
         * @return string A hash of the data
         */
        public static function hash( $data, $raw = true ) {
@@ -101,7 +101,7 @@ class MWCryptHash {
         *
         * @param string $data
         * @param string $key
-        * @param boolean $raw True to return binary data, false to return it hex-encoded
+        * @param bool $raw True to return binary data, false to return it hex-encoded
         * @return string An hmac hash of the data + key
         */
        public static function hmac( $data, $key, $raw = true ) {
index 521e345..617e8f5 100644 (file)
@@ -69,13 +69,13 @@ class MWRestrictions {
                $invalidKeys = array_diff( $keys, $validKeys );
                if ( $invalidKeys ) {
                        throw new InvalidArgumentException(
-                               'Array contains invalid keys: ' . join( ', ', $invalidKeys )
+                               'Array contains invalid keys: ' . implode( ', ', $invalidKeys )
                        );
                }
                $missingKeys = array_diff( $neededKeys, $keys );
                if ( $missingKeys ) {
                        throw new InvalidArgumentException(
-                               'Array is missing required keys: ' . join( ', ', $missingKeys )
+                               'Array is missing required keys: ' . implode( ', ', $missingKeys )
                        );
                }
 
index 44815b4..516e9ae 100644 (file)
@@ -215,6 +215,10 @@ class ZipDirectoryReader {
                        $startPos = 0;
                }
 
+               if ( $this->getFileLength() === 0 ) {
+                       $this->error( 'zip-wrong-format', "The file is empty." );
+               }
+
                $block = $this->getBlock( $startPos );
                $sigPos = strrpos( $block, "PK\x05\x06" );
                if ( $sigPos === false ) {
diff --git a/includes/widget/SearchInputWidget.php b/includes/widget/SearchInputWidget.php
new file mode 100644 (file)
index 0000000..7b3de4a
--- /dev/null
@@ -0,0 +1,52 @@
+<?php
+/**
+ * MediaWiki Widgets – SearchInputWidget class.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+namespace MediaWiki\Widget;
+
+/**
+ * Search input widget.
+ */
+class SearchInputWidget extends TitleInputWidget {
+
+       protected $pushPending = false;
+       protected $validateTitle = false;
+       protected $highlightFirst = false;
+
+       /**
+        * @param array $config Configuration options
+        * @param int|null $config['pushPending'] Whether the input should be visually marked as
+        *  "pending", while requesting suggestions (default: true)
+        */
+       public function __construct( array $config = [] ) {
+               // Parent constructor
+               parent::__construct(
+                       array_merge( [
+                               'infusable' => true,
+                               'maxLength' => null,
+                               'type' => 'search',
+                               'icon' => 'search'
+                       ], $config )
+               );
+
+               // Properties, which are ignored in PHP and just shipped back to JS
+               if ( isset( $config['pushPending'] ) ) {
+                       $this->pushPending = $config['pushPending'];
+               }
+
+               // Initialization
+               $this->addClasses( [ 'mw-widget-searchInputWidget' ] );
+       }
+
+       protected function getJavaScriptClassName() {
+               return 'mw.widgets.SearchInputWidget';
+       }
+
+       public function getConfig( &$config ) {
+               $config['pushPending'] = $this->pushPending;
+               return parent::getConfig( $config );
+       }
+}
index d66a86a..0d0d90d 100644 (file)
@@ -228,18 +228,14 @@ class ConverterRule {
                        }
                        // or display current variant in unidirectional array
                        if ( $disp === false && array_key_exists( $variant, $unidtable ) ) {
-                               $disp = array_values( $unidtable[$variant] );
-                               $disp = $disp[0];
+                               $disp = array_values( $unidtable[$variant] )[0];
                        }
                        // or display frist text under disable manual convert
                        if ( $disp === false && $this->mConverter->mManualLevel[$variant] == 'disable' ) {
                                if ( count( $bidtable ) > 0 ) {
-                                       $disp = array_values( $bidtable );
-                                       $disp = $disp[0];
+                                       $disp = array_values( $bidtable )[0];
                                } else {
-                                       $disp = array_values( $unidtable );
-                                       $disp = array_values( $disp[0] );
-                                       $disp = $disp[0];
+                                       $disp = array_values( array_values( $unidtable )[0] )[0];
                                }
                        }
                        return $disp;
@@ -267,8 +263,7 @@ class ConverterRule {
                                return $disp;
                        }
                        if ( array_key_exists( $variant, $this->mUnidtable ) ) {
-                               $disp = array_values( $this->mUnidtable[$variant] );
-                               $disp = $disp[0];
+                               $disp = array_values( $this->mUnidtable[$variant] )[0];
                        }
                        // Assigned above or still false.
                        return $disp;
index 5068777..93ce8eb 100644 (file)
@@ -723,20 +723,6 @@ class Language {
                }
        }
 
-       /**
-        * @deprecated since 1.24, doesn't handle conflicting aliases. Use
-        *   SpecialPageFactory::getLocalNameFor instead.
-        * @param string $name
-        * @return string
-        */
-       function specialPage( $name ) {
-               $aliases = $this->getSpecialPageAliases();
-               if ( isset( $aliases[$name][0] ) ) {
-                       $name = $aliases[$name][0];
-               }
-               return $this->getNsText( NS_SPECIAL ) . ':' . $name;
-       }
-
        /**
         * @return array
         */
@@ -802,33 +788,6 @@ class Language {
                return $this->getMessageFromDB( "tog-$tog" );
        }
 
-       /**
-        * Get native language names, indexed by code.
-        * Only those defined in MediaWiki, no other data like CLDR.
-        * If $customisedOnly is true, only returns codes with a messages file
-        *
-        * @param bool $customisedOnly
-        *
-        * @return array
-        * @deprecated since 1.20, use fetchLanguageNames()
-        */
-       public static function getLanguageNames( $customisedOnly = false ) {
-               return self::fetchLanguageNames( null, $customisedOnly ? 'mwfile' : 'mw' );
-       }
-
-       /**
-        * Get translated language names. This is done on best effort and
-        * by default this is exactly the same as Language::getLanguageNames.
-        * The CLDR extension provides translated names.
-        * @param string $code Language code.
-        * @return array Language code => language name
-        * @since 1.18.0
-        * @deprecated since 1.20, use fetchLanguageNames()
-        */
-       public static function getTranslatedLanguageNames( $code ) {
-               return self::fetchLanguageNames( $code, 'all' );
-       }
-
        /**
         * Get an array of language names, indexed by code.
         * @param null|string $inLanguage Code of language in which to return the names
@@ -954,17 +913,6 @@ class Language {
                return wfMessage( $msg )->inLanguage( $this );
        }
 
-       /**
-        * Get the native language name of $code.
-        * Only if defined in MediaWiki, no other data like CLDR.
-        * @param string $code
-        * @return string
-        * @deprecated since 1.20, use fetchLanguageName()
-        */
-       function getLanguageName( $code ) {
-               return self::fetchLanguageName( $code );
-       }
-
        /**
         * @param string $key
         * @return string
@@ -2896,6 +2844,7 @@ class Language {
        /**
         * @param string $s
         * @return string
+        * @throws MWException
         */
        function checkTitleEncoding( $s ) {
                if ( is_array( $s ) ) {
@@ -3350,7 +3299,7 @@ class Language {
         * Normally we output all numbers in plain en_US style, that is
         * 293,291.235 for twohundredninetythreethousand-twohundredninetyone
         * point twohundredthirtyfive. However this is not suitable for all
-        * languages, some such as Punjabi want à©¨à©¯à©©,੨੯੫.੨੩੫ and others such as
+        * languages, some such as Bengali (bn) want à§¨,৯৩,২৯১.২৩৫ and others such as
         * Icelandic just want to use commas instead of dots, and dots instead
         * of commas like "293.291,235".
         *
@@ -4235,7 +4184,7 @@ class Language {
         * Refresh the cache of conversion tables when
         * MediaWiki:Conversiontable* is updated.
         *
-        * @param Title $titleobj The Title of the page being updated
+        * @param Title $title The Title of the page being updated
         */
        public function updateConversionTable( Title $title ) {
                $this->mConverter->updateConversionTable( $title );
@@ -4282,15 +4231,6 @@ class Language {
                return self::$dataCache->getItem( $this->mCode, 'linkPrefixCharset' );
        }
 
-       /**
-        * @deprecated since 1.24, will be removed in 1.25
-        * @return Language
-        */
-       function getLangObj() {
-               wfDeprecated( __METHOD__, '1.24' );
-               return $this;
-       }
-
        /**
         * Get the "parent" language which has a converter to convert a "compatible" language
         * (in another variant) to this language (eg. zh for zh-cn, but not en for en-gb).
@@ -4303,8 +4243,7 @@ class Language {
                        return $this->mParentLanguage;
                }
 
-               $pieces = explode( '-', $this->getCode() );
-               $code = $pieces[0];
+               $code = explode( '-', $this->getCode() )[0];
                if ( !in_array( $code, LanguageConverter::$languagesWithVariants ) ) {
                        $this->mParentLanguage = null;
                        return null;
@@ -4417,6 +4356,7 @@ class Language {
        /**
         * @param string $code
         * @return string
+        * @throws MWException
         * @since 1.23
         */
        public static function getJsonMessagesFileName( $code ) {
@@ -4524,7 +4464,7 @@ class Language {
         * @return array Array of message keys (strings)
         */
        public static function getMessageKeysFor( $code ) {
-               return self::getLocalisationCache()->getSubItemList( $code, 'messages' );
+               return self::getLocalisationCache()->getSubitemList( $code, 'messages' );
        }
 
        /**
@@ -4582,7 +4522,7 @@ class Language {
         * @param string $expiry Database expiry String
         * @param bool|int $format True to process using language functions, or TS_ constant
         *     to return the expiry in a given timestamp
-        * @param string $inifinity If $format is not true, use this string for infinite expiry
+        * @param string $infinity If $format is not true, use this string for infinite expiry
         * @return string
         * @since 1.18
         */
index 0be3784..b31b10f 100644 (file)
@@ -160,7 +160,7 @@ class LanguageConverter {
 
                $req = $this->getURLVariant();
 
-               if ( $wgUser->isLoggedIn() && !$req ) {
+               if ( $wgUser->isSafeToLoad() && $wgUser->isLoggedIn() && !$req ) {
                        $req = $this->getUserVariant();
                } elseif ( !$req ) {
                        $req = $this->getHeaderVariant();
@@ -257,6 +257,9 @@ class LanguageConverter {
                // Get language variant preference from logged in users
                // Don't call this on stub objects because that causes infinite
                // recursion during initialisation
+               if ( !$wgUser->isSafeToLoad() ) {
+                       return false;
+               }
                if ( $wgUser->isLoggedIn() ) {
                        if ( $this->mMainLanguageCode == $wgContLang->getCode() ) {
                                $ret = $wgUser->getOption( 'variant' );
@@ -992,8 +995,8 @@ class LanguageConverter {
                                $first = false;
                                continue;
                        }
-                       $mappings = explode( '}-', $block, 2 );
-                       $stripped = str_replace( [ "'", '"', '*', '#' ], '', $mappings[0] );
+                       $mappings = explode( '}-', $block, 2 )[0];
+                       $stripped = str_replace( [ "'", '"', '*', '#' ], '', $mappings );
                        $table = StringUtils::explode( ';', $stripped );
                        foreach ( $table as $t ) {
                                $m = explode( '=>', $t, 3 );
index b36f080..89625c0 100644 (file)
@@ -52,11 +52,11 @@ class LanguageCu extends Language {
                if ( !preg_match( "/[a-zA-Z_]/us", $word ) ) {
                        switch ( $case ) {
                                case 'genitive': # родительный падеж
-                                       if ( ( join( '', array_slice( $ar[0], -4 ) ) == 'вики' )
-                                               || ( join( '', array_slice( $ar[0], -4 ) ) == 'Вики' )
+                                       if ( ( implode( '', array_slice( $ar[0], -4 ) ) == 'вики' )
+                                               || ( implode( '', array_slice( $ar[0], -4 ) ) == 'Вики' )
                                        ) {
-                                       } elseif ( join( '', array_slice( $ar[0], -2 ) ) == 'ї' ) {
-                                               $word = join( '', array_slice( $ar[0], 0, -2 ) ) . 'їѩ';
+                                       } elseif ( implode( '', array_slice( $ar[0], -2 ) ) == 'ї' ) {
+                                               $word = implode( '', array_slice( $ar[0], 0, -2 ) ) . 'їѩ';
                                        }
                                        break;
                                case 'accusative': # винительный падеж
index f6d5270..05b0ebe 100644 (file)
@@ -52,12 +52,12 @@ class LanguageHy extends Language {
                if ( !preg_match( "/[a-zA-Z_]/us", $word ) ) {
                        switch ( $case ) {
                                case 'genitive': # սեռական հոլով
-                                       if ( join( '', array_slice( $ar[0], -1 ) ) == 'ա' ) {
-                                               $word = join( '', array_slice( $ar[0], 0, -1 ) ) . 'այի';
-                                       } elseif ( join( '', array_slice( $ar[0], -1 ) ) == 'ո' ) {
-                                               $word = join( '', array_slice( $ar[0], 0, -1 ) ) . 'ոյի';
-                                       } elseif ( join( '', array_slice( $ar[0], -4 ) ) == 'գիրք' ) {
-                                               $word = join( '', array_slice( $ar[0], 0, -4 ) ) . 'գրքի';
+                                       if ( implode( '', array_slice( $ar[0], -1 ) ) == 'ա' ) {
+                                               $word = implode( '', array_slice( $ar[0], 0, -1 ) ) . 'այի';
+                                       } elseif ( implode( '', array_slice( $ar[0], -1 ) ) == 'ո' ) {
+                                               $word = implode( '', array_slice( $ar[0], 0, -1 ) ) . 'ոյի';
+                                       } elseif ( implode( '', array_slice( $ar[0], -4 ) ) == 'գիրք' ) {
+                                               $word = implode( '', array_slice( $ar[0], 0, -4 ) ) . 'գրքի';
                                        } else {
                                                $word .= 'ի';
                                        }
index 6cc23e3..72bde40 100644 (file)
@@ -51,19 +51,19 @@ class LanguageUk extends Language {
                if ( !preg_match( "/[a-zA-Z_]/us", $word ) ) {
                        switch ( $case ) {
                                case 'genitive': # родовий відмінок
-                                       if ( join( '', array_slice( $ar[0], -2 ) ) === 'ія' ) {
-                                               $word = join( '', array_slice( $ar[0], 0, -2 ) ) . 'ії';
-                                       } elseif ( join( '', array_slice( $ar[0], -2 ) ) === 'ти' ) {
-                                               $word = join( '', array_slice( $ar[0], 0, -2 ) ) . 'т';
-                                       } elseif ( join( '', array_slice( $ar[0], -2 ) ) === 'ди' ) {
-                                               $word = join( '', array_slice( $ar[0], 0, -2 ) ) . 'дів';
-                                       } elseif ( join( '', array_slice( $ar[0], -3 ) ) === 'ник' ) {
-                                               $word = join( '', array_slice( $ar[0], 0, -3 ) ) . 'ника';
+                                       if ( implode( '', array_slice( $ar[0], -2 ) ) === 'ія' ) {
+                                               $word = implode( '', array_slice( $ar[0], 0, -2 ) ) . 'ії';
+                                       } elseif ( implode( '', array_slice( $ar[0], -2 ) ) === 'ти' ) {
+                                               $word = implode( '', array_slice( $ar[0], 0, -2 ) ) . 'т';
+                                       } elseif ( implode( '', array_slice( $ar[0], -2 ) ) === 'ди' ) {
+                                               $word = implode( '', array_slice( $ar[0], 0, -2 ) ) . 'дів';
+                                       } elseif ( implode( '', array_slice( $ar[0], -3 ) ) === 'ник' ) {
+                                               $word = implode( '', array_slice( $ar[0], 0, -3 ) ) . 'ника';
                                        }
                                        break;
                                case 'accusative': # знахідний відмінок
-                                       if ( join( '', array_slice( $ar[0], -2 ) ) === 'ія' ) {
-                                               $word = join( '', array_slice( $ar[0], 0, -2 ) ) . 'ію';
+                                       if ( implode( '', array_slice( $ar[0], -2 ) ) === 'ія' ) {
+                                               $word = implode( '', array_slice( $ar[0], 0, -2 ) ) . 'ію';
                                        }
                                        break;
                        }
index 7a46aac..6c49aa4 100644 (file)
@@ -180,7 +180,7 @@ class Names {
                'gv' => 'Gaelg',                # Manx
                'ha' => 'Hausa',        # Hausa
                'hak' => '客家語/Hak-kâ-ngî',      # Hakka
-               'haw' => 'Hawai`i',             # Hawaiian
+               'haw' => 'Hawaiʻi',            # Hawaiian
                'he' => 'עברית',   # Hebrew
                'hi' => 'हिन्दी',   # Hindi
                'hif' => 'Fiji Hindi',  # Fijian Hindi (multiple scripts - defaults to Latin)
index d273085..08a40b8 100644 (file)
@@ -3237,6 +3237,7 @@ public static $zh2Hant = [
 '世纪钟' => '世紀鐘',
 '世纪钟表' => '世紀鐘錶',
 '丢丑' => '丟醜',
+'并吞下' => '並吞下',
 '并曰入淀' => '並曰入澱',
 '并发动' => '並發動',
 '并发展' => '並發展',
@@ -3709,7 +3710,6 @@ public static $zh2Hant = [
 '井干' => '井幹',
 '井里' => '井裡',
 '亚于' => '亞於',
-'亚美尼亚历' => '亞美尼亞曆',
 '交托' => '交託',
 '交游' => '交遊',
 '交哄' => '交鬨',
@@ -3730,7 +3730,6 @@ public static $zh2Hant = [
 '仁贵' => '仁貴',
 '介胄' => '介冑',
 '他干的' => '他幹的',
-'他钟' => '他鐘',
 '付托' => '付託',
 '仙后' => '仙后',
 '仙后座' => '仙后座',
@@ -3802,7 +3801,7 @@ public static $zh2Hant = [
 '并到' => '併到',
 '并合' => '併合',
 '并名' => '併名',
-'并吞下' => '併吞下',
+'并吞' => '併吞',
 '并拢' => '併攏',
 '并案' => '併案',
 '并流' => '併流',
@@ -3823,7 +3822,6 @@ public static $zh2Hant = [
 '使其斗' => '使其鬥',
 '来于' => '來於',
 '侍仆' => '侍僕',
-'供制' => '供製',
 '依依不舍' => '依依不捨',
 '依托' => '依託',
 '侵并' => '侵併',
@@ -4374,6 +4372,8 @@ public static $zh2Hant = [
 '后稷' => '后稷',
 '后綜' => '后綜',
 '后羿' => '后羿',
+'后苍' => '后蒼',
+'后蒼' => '后蒼',
 '后街' => '后街',
 '后角' => '后角',
 '后丰' => '后豐',
@@ -4404,6 +4404,7 @@ public static $zh2Hant = [
 '呆致致' => '呆緻緻',
 '呆里呆气' => '呆裡呆氣',
 '告札' => '告劄',
+'告里' => '告裡',
 '呦喂' => '呦喂',
 '周后' => '周后',
 '周惠后' => '周惠后',
@@ -4662,12 +4663,10 @@ public static $zh2Hant = [
 '大明历史' => '大明歷史',
 '大历' => '大曆',
 '大本钟' => '大本鐘',
-'大本钟敲' => '大本鐘敲',
 '大历史' => '大歷史',
 '大病初愈' => '大病初癒',
 '大目干连' => '大目乾連',
 '大笨钟' => '大笨鐘',
-'大笨钟敲' => '大笨鐘敲',
 '大蜡' => '大蜡',
 '大衍历' => '大衍曆',
 '大衍历史' => '大衍歷史',
@@ -4973,7 +4972,6 @@ public static $zh2Hant = [
 '年里' => '年裡',
 '年鉴' => '年鑑',
 '并力' => '并力',
-'并吞' => '并吞',
 '并州' => '并州',
 '并日而食' => '并日而食',
 '并迭' => '并迭',
@@ -5090,7 +5088,6 @@ public static $zh2Hant = [
 '吊慰' => '弔慰',
 '吊扣' => '弔扣',
 '吊拷' => '弔拷',
-'吊挂' => '弔掛',
 '吊撒' => '弔撒',
 '吊文' => '弔文',
 '吊旗' => '弔旗',
@@ -5118,7 +5115,9 @@ public static $zh2Hant = [
 '张勋' => '張勳',
 '张杰' => '張杰',
 '張杰' => '張杰',
+'张柏芝' => '張栢芝',
 '张乐于张徐' => '張樂于張徐',
+'强制' => '強制',
 '强制作用' => '強制作用',
 '强奸' => '強姦',
 '强干' => '強幹',
@@ -5171,7 +5170,6 @@ public static $zh2Hant = [
 '复始' => '復始',
 '复活节历表' => '復活節曆表',
 '复苏' => '復甦',
-'征人' => '徵人',
 '征令' => '徵令',
 '征信' => '徵信',
 '征候' => '徵候',
@@ -5399,6 +5397,8 @@ public static $zh2Hant = [
 '恶斗' => '惡鬥',
 '惴栗' => '惴慄',
 '意大利面' => '意大利麵',
+'愛河里花子' => '愛河里花子',
+'爱河里花子' => '愛河里花子',
 '爱困' => '愛睏',
 '感于' => '感於',
 '愿朴' => '愿樸',
@@ -5513,7 +5513,7 @@ public static $zh2Hant = [
 '扛大梁' => '扛大樑',
 '扯面' => '扯麵',
 '扶余' => '扶餘',
-'批准的' => '批准的',
+'批准' => '批准',
 '批准确定' => '批准確定',
 '批复' => '批覆',
 '批注' => '批註',
@@ -5577,16 +5577,8 @@ public static $zh2Hant = [
 '拳局' => '拳跼',
 '拼死拼活' => '拼死拼活',
 '拾沈' => '拾瀋',
-'拿下表' => '拿下錶',
-'拿下钟' => '拿下鐘',
 '拿准' => '拿準',
 '拿破仑' => '拿破崙',
-'挂图' => '挂圖',
-'挂帅' => '挂帥',
-'挂彩' => '挂彩',
-'挂念' => '挂念',
-'挂号' => '挂號',
-'挂车' => '挂車',
 '挌斗' => '挌鬥',
 '挑大梁' => '挑大樑',
 '挑斗' => '挑鬥',
@@ -5663,10 +5655,8 @@ public static $zh2Hant = [
 '掌柜' => '掌柜',
 '排骨面' => '排骨麵',
 '挂名' => '掛名',
-'挂帘' => '掛帘',
 '挂历' => '掛曆',
 '挂钩' => '掛鈎',
-'挂钟' => '掛鐘',
 '挂面' => '掛麵',
 '采下' => '採下',
 '采伐' => '採伐',
@@ -6086,7 +6076,7 @@ public static $zh2Hant = [
 '栗栖溪' => '栗栖溪',
 '校准' => '校準',
 '校舍' => '校舍',
-'核准的' => '核准的',
+'核准' => '核准',
 '格于' => '格於',
 '格范' => '格範',
 '格里历' => '格里曆',
@@ -6599,7 +6589,7 @@ public static $zh2Hant = [
 '争斗' => '爭鬥',
 '爰定祥历' => '爰定祥厤',
 '爽荡' => '爽蕩',
-'尔冬' => '爾冬陞',
+'尔冬' => '爾冬陞',
 '墙里' => '牆裡',
 '片里' => '片裡',
 '片言只语' => '片言隻語',
@@ -6665,7 +6655,9 @@ public static $zh2Hant = [
 '甄后' => '甄后',
 '瓮安' => '甕安',
 '甚于' => '甚於',
+'甜、咸' => '甜、鹹',
 '甜水面' => '甜水麵',
+'甜咸' => '甜鹹',
 '甜面酱' => '甜麵醬',
 '生力面' => '生力麵',
 '生于' => '生於',
@@ -6692,6 +6684,9 @@ public static $zh2Hant = [
 '男仆' => '男僕',
 '界里' => '界裡',
 '畏于' => '畏於',
+'留发展' => '留發展',
+'留发生' => '留發生',
+'留发行' => '留發行',
 '留长发' => '留長髮',
 '留发' => '留髮',
 '毕于' => '畢於',
@@ -6805,8 +6800,6 @@ public static $zh2Hant = [
 '相于' => '相於',
 '相冲' => '相衝',
 '相斗' => '相鬥',
-'看下表' => '看下錶',
-'看下钟' => '看下鐘',
 '看法里' => '看法裡',
 '看准' => '看準',
 '看表面' => '看表面',
@@ -6827,8 +6820,6 @@ public static $zh2Hant = [
 '困觉' => '睏覺',
 '睡游病' => '睡遊病',
 '瞄准' => '瞄準',
-'瞅下表' => '瞅下錶',
-'瞅下钟' => '瞅下鐘',
 '瞎蒙' => '瞎矇',
 '了望' => '瞭望',
 '了然' => '瞭然',
@@ -6864,6 +6855,7 @@ public static $zh2Hant = [
 '确瘠' => '确瘠',
 '碑志' => '碑誌',
 '碗里' => '碗裡',
+'碧河里' => '碧河里',
 '碰钟' => '碰鐘',
 '确系' => '確係',
 '码表' => '碼錶',
@@ -6921,6 +6913,7 @@ public static $zh2Hant = [
 '秦沈客运' => '秦瀋客運',
 '移祸于' => '移禍於',
 '稀松' => '稀鬆',
+'程十发' => '程十髮',
 '棱台' => '稜台',
 '棱子' => '稜子',
 '棱层' => '稜層',
@@ -6998,24 +6991,6 @@ public static $zh2Hant = [
 '竹制' => '竹製',
 '竹溪县' => '竹谿縣',
 '笑里藏刀' => '笑裡藏刀',
-'第一出现' => '第一出現',
-'第一出現' => '第一出現',
-'第一出線' => '第一出線',
-'第一出线' => '第一出線',
-'第一出' => '第一齣',
-'第七出' => '第七齣',
-'第三出局' => '第三出局',
-'第三出' => '第三齣',
-'第九出' => '第九齣',
-'第二出線' => '第二出線',
-'第二出线' => '第二出線',
-'第二出' => '第二齣',
-'第五出局' => '第五出局',
-'第五出' => '第五齣',
-'第八出' => '第八齣',
-'第六出' => '第六齣',
-'第四出局' => '第四出局',
-'第四出' => '第四齣',
 '笔杆' => '筆桿',
 '笔秃墨干' => '筆禿墨乾',
 '等于' => '等於',
@@ -7596,6 +7571,7 @@ public static $zh2Hant = [
 '虫部' => '虫部',
 '蚊动牛斗' => '蚊動牛鬥',
 '蛇发女妖' => '蛇髮女妖',
+'蛋白发' => '蛋白發',
 '蜂后' => '蜂后',
 '蜂涌' => '蜂湧',
 '蜂准' => '蜂準',
@@ -7769,6 +7745,7 @@ public static $zh2Hant = [
 '复目' => '複目',
 '复眼' => '複眼',
 '复种' => '複種',
+'复穗' => '複穗',
 '复线' => '複線',
 '复习' => '複習',
 '复色' => '複色',
@@ -8215,6 +8192,7 @@ public static $zh2Hant = [
 '游客' => '遊客',
 '游宦' => '遊宦',
 '游山玩水' => '遊山玩水',
+'游廊' => '遊廊',
 '游必有方' => '遊必有方',
 '游憩' => '遊憩',
 '游戏' => '遊戲',
@@ -8222,6 +8200,7 @@ public static $zh2Hant = [
 '游手好闲' => '遊手好閒',
 '游方' => '遊方',
 '游星' => '遊星',
+'游春' => '遊春',
 '游乐' => '遊樂',
 '游标卡尺' => '遊標卡尺',
 '游历' => '遊歷',
@@ -8629,7 +8608,6 @@ public static $zh2Hant = [
 '陈杰' => '陳杰',
 '陳杰' => '陳杰',
 '陈炼' => '陳鍊',
-'陆游' => '陸遊',
 '阳春面' => '陽春麵',
 '阳历' => '陽曆',
 '阳历史' => '陽歷史',
@@ -8648,6 +8626,7 @@ public static $zh2Hant = [
 '只身' => '隻身',
 '雄斗斗' => '雄斗斗',
 '雅范' => '雅範',
+'集团' => '集團',
 '集数里' => '集數裡',
 '集于' => '集於',
 '集里' => '集裡',
@@ -8764,6 +8743,7 @@ public static $zh2Hant = [
 '预报不准' => '預報不準',
 '预制' => '預製',
 '领袖欲' => '領袖慾',
+'头发现' => '頭發現',
 '头里' => '頭裡',
 '头长发' => '頭長髮',
 '头发' => '頭髮',
@@ -9016,10 +8996,11 @@ public static $zh2Hant = [
 '发短心长' => '髮短心長',
 '发禁' => '髮禁',
 '发笺' => '髮箋',
+'发簪' => '髮簪',
 '发纱' => '髮紗',
 '发结' => '髮結',
 '发丝' => '髮絲',
-'发网' => '髮網',
+'发网菌' => '髮網菌',
 '发脚' => '髮腳',
 '发肤' => '髮膚',
 '发胶' => '髮膠',
@@ -9027,7 +9008,6 @@ public static $zh2Hant = [
 '发蜡' => '髮蠟',
 '发踊冲冠' => '髮踴沖冠',
 '发辫' => '髮辮',
-'发针' => '髮針',
 '发钗' => '髮釵',
 '发长' => '髮長',
 '发际' => '髮際',
@@ -9241,6 +9221,7 @@ public static $zh2Hant = [
 '鹤发' => '鶴髮',
 '鸾鉴' => '鸞鑑',
 '鹰雕' => '鹰鵰',
+'咸、甜' => '鹹、甜',
 '咸味' => '鹹味',
 '咸嘴淡舌' => '鹹嘴淡舌',
 '咸土' => '鹹土',
@@ -9255,6 +9236,7 @@ public static $zh2Hant = [
 '咸汤' => '鹹湯',
 '咸潟' => '鹹潟',
 '咸湿' => '鹹濕',
+'咸甜' => '鹹甜',
 '咸的' => '鹹的',
 '咸粥' => '鹹粥',
 '咸肉' => '鹹肉',
@@ -10521,6 +10503,7 @@ public static $zh2Hans = [
 '潄' => '漱',
 '潑' => '泼',
 '潔' => '洁',
+'潕' => '𣲘',
 '潙' => '沩',
 '潛' => '潜',
 '潤' => '润',
@@ -11842,6 +11825,7 @@ public static $zh2Hans = [
 '躒' => '跞',
 '躓' => '踬',
 '躕' => '蹰',
+'躘' => '𨀁',
 '躚' => '跹',
 '躝' => '𨅬',
 '躡' => '蹑',
@@ -13874,7 +13858,6 @@ public static $zh2TW = [
 '行人路' => '人行道',
 '石勒苏益格' => '什勒斯維希',
 '石勒蘇益格' => '什勒斯維希',
-'界面' => '介面',
 '伊利诺伊州' => '伊利諾州',
 '伊斯坦布尔' => '伊斯坦堡',
 '伊斯坦布爾' => '伊斯坦堡',
@@ -14010,6 +13993,8 @@ public static $zh2TW = [
 '航天器' => '太空飛行器',
 '尼日利亚' => '奈及利亞',
 '尼日利亞' => '奈及利亞',
+'內羅畢' => '奈洛比',
+'内罗毕' => '奈洛比',
 '忌廉' => '奶油',
 '荷里活' => '好萊塢',
 '威廉姆斯' => '威廉士',
@@ -14028,7 +14013,6 @@ public static $zh2TW = [
 '安提瓜和巴布達' => '安地卡及巴布達',
 '洪都拉斯' => '宏都拉斯',
 '密歇根' => '密西根',
-'宽带' => '寬頻',
 '老挝人民民主共和国' => '寮人民民主共和國',
 '老撾人民民主共和國' => '寮人民民主共和國',
 '老挝' => '寮國',
@@ -14422,7 +14406,6 @@ public static $zh2TW = [
 '格莱美奖' => '葛萊美獎',
 '黑山共和国' => '蒙特內哥羅共和國',
 '黑山共和國' => '蒙特內哥羅共和國',
-'滿地可' => '蒙特婁',
 '蒙特利尔' => '蒙特婁',
 '蒙特利爾' => '蒙特婁',
 '普密蓬' => '蒲美蓬',
@@ -14704,7 +14687,6 @@ public static $zh2HK = [
 '布控' => '佈控',
 '布于' => '佈於',
 '布於' => '佈於',
-'布施' => '佈施',
 '布景' => '佈景',
 '布满' => '佈滿',
 '布滿' => '佈滿',
@@ -15032,6 +15014,7 @@ public static $zh2HK = [
 '光著錄' => '光著錄',
 '柯林頓' => '克林頓',
 '克羅埃西亞' => '克羅地亞',
+'奈洛比' => '內羅畢',
 '公布' => '公佈',
 '冒著' => '冒着',
 '冒著作' => '冒著作',
@@ -15194,6 +15177,7 @@ public static $zh2HK = [
 '吹著錄' => '吹著錄',
 '呆著' => '呆着',
 '呆里呆气' => '呆裏呆氣',
+'告里' => '告裏',
 '味著' => '味着',
 '味著作' => '味著作',
 '味著名' => '味著名',
@@ -15869,6 +15853,8 @@ public static $zh2HK = [
 '撼著者' => '撼著者',
 '撼著述' => '撼著述',
 '撼著錄' => '撼著錄',
+'择日占星' => '擇日占星',
+'擇日占星' => '擇日占星',
 '擋著' => '擋着',
 '擋著作' => '擋著作',
 '擋著名' => '擋著名',
@@ -15895,6 +15881,7 @@ public static $zh2HK = [
 '擺著者' => '擺著者',
 '擺著述' => '擺著述',
 '擺著錄' => '擺著錄',
+'收錄著' => '收錄着',
 '攻占' => '攻佔',
 '放著' => '放着',
 '放著作' => '放著作',
@@ -16637,6 +16624,7 @@ public static $zh2HK = [
 '系列里' => '系列裏',
 '係數' => '系數',
 '系里' => '系裏',
+'紀錄著' => '紀錄着',
 '約占' => '約佔',
 '约占' => '約佔',
 '紐賓士域' => '紐賓士域',
@@ -16859,7 +16847,6 @@ public static $zh2HK = [
 '葉爾欽' => '葉利欽',
 '葡占' => '葡佔',
 '葫芦里卖甚么药' => '葫蘆裏賣甚麼藥',
-'滿地可' => '蒙特利爾',
 '蒙特婁' => '蒙特利爾',
 '蒙著' => '蒙着',
 '蒙著作' => '蒙著作',
@@ -16992,6 +16979,7 @@ public static $zh2HK = [
 '記著者' => '記著者',
 '記著述' => '記著述',
 '記著錄' => '記著錄',
+'記錄著' => '記錄着',
 '試著' => '試着',
 '試著作' => '試著作',
 '試著名' => '試著名',
@@ -17925,6 +17913,7 @@ public static $zh2CN = [
 '關著述' => '关著述',
 '關帳' => '关账',
 '記憶體' => '内存',
+'奈洛比' => '内罗毕',
 '甘比亞' => '冈比亚',
 '冒著' => '冒着',
 '冒著書' => '冒著书',
@@ -18253,6 +18242,8 @@ public static $zh2CN = [
 '坐著稱' => '坐著称',
 '坐著者' => '坐著者',
 '坐著述' => '坐著述',
+'坚杜拜' => '坚杜拜',
+'堅杜拜' => '坚杜拜',
 '堅貞著' => '坚贞着',
 '坦尚尼亞' => '坦桑尼亚',
 '伊波拉' => '埃博拉',
@@ -18346,7 +18337,6 @@ public static $zh2CN = [
 '定著者' => '定著者',
 '定著述' => '定著述',
 '波里活' => '宝莱坞',
-'寬頻' => '宽带',
 '密执安' => '密歇根',
 '密西根' => '密歇根',
 '對著' => '对着',
@@ -18575,6 +18565,7 @@ public static $zh2CN = [
 '想著述' => '想著述',
 '義大利' => '意大利',
 '戈巴契夫' => '戈尔巴乔夫',
+'成份股' => '成份股',
 '成份' => '成分',
 '戰著' => '战着',
 '戰著書' => '战著书',
@@ -18818,6 +18809,7 @@ public static $zh2CN = [
 '撼著者' => '撼著者',
 '撼著述' => '撼著述',
 '作業系統' => '操作系统',
+'收錄著' => '收录着',
 '收帳' => '收账',
 '放著' => '放着',
 '放著作' => '放著作',
@@ -19550,6 +19542,7 @@ public static $zh2CN = [
 '索馬利蘭' => '索马里兰',
 '正體中文' => '繁体中文',
 '強斯頓環礁' => '约翰斯顿岛',
+'紀錄著' => '纪录着',
 '縱著' => '纵着',
 '組份' => '组分',
 '經常帳' => '经常账',
@@ -19686,7 +19679,6 @@ public static $zh2CN = [
 '落著稱' => '落著称',
 '落著者' => '落著者',
 '落著述' => '落著述',
-'滿地可' => '蒙特利尔',
 '蒙特婁' => '蒙特利尔',
 '蒙著' => '蒙着',
 '蒙著書' => '蒙著书',
@@ -19770,6 +19762,7 @@ public static $zh2CN = [
 '計畫' => '计划',
 '電腦程式' => '计算机程序',
 '認帳' => '认账',
+'記錄著' => '记录着',
 '記著' => '记着',
 '記著書' => '记著书',
 '記著作' => '记著作',
index 1191cf6..20047c4 100644 (file)
@@ -10,7 +10,8 @@
                        "Rachmat.Wahidi",
                        "Sayed Muddasir",
                        "Si Gam Acèh",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Bôh garéh yup peunawôt:",
        "mycustomjsprotected": "Droëneuh hana idin neuandam halaman JavaScript nyoe.",
        "mypreferencesprotected": "Droeneuh hana izin keu neuandam geunalak droeneuh.",
        "ns-specialprotected": "Laman khusuih bèk neuandam",
-       "titleprotected": "Nan nyoe ka geupeulindông nibak neuandam lé [[User:$1|$1]].\nDalèhjih nakeuh \"''$2''\".",
+       "titleprotected": "Nan nyoe ka geupeulindông nibak neuandam lé [[User:$1|$1]].\nDalèhjih nakeuh <em>$2</em>.",
        "invalidtitle-knownnamespace": "Nan nyang hana sah ngön ruweueng nan \"$2\" ngön \"$3\"",
        "exception-nologin": "Hana tamöng lom",
        "exception-nologin-text": "Droëneuh suwah [[Special:Userlogin|neutamöng]] mangat jeuët neupeuhah laman nyoë",
        "createaccountreason": "Choë:",
        "createacct-reason": "Choë:",
        "createacct-reason-ph": "Pakön droëneuh neupeugöt nan ureuëng ngui la’én",
-       "createacct-captcha": "Paréksa aman",
-       "createacct-imgcaptcha-ph": "Pasoë seunurat nyang neu'eu di ateuëh",
        "createacct-submit": "Peudapeuta nan barô",
        "createacct-another-submit": "Peugöt nan ureuëng ngui la’én",
        "createacct-benefit-heading": "{{SITENAME}} geupeugöt lé ureuëng lagèë droëneuh.",
        "prefs-preview": "Eu dilèe",
        "prefs-diffs": "Bida",
        "prefs-help-prefershttps": "Geunalak nyoe geupeudeuh watèe neutamöng lom.",
-       "email-address-validity-valid": "Alamat surat-e sah",
-       "email-address-validity-invalid": "Pasoe alamat surat-e nyang sah",
        "userrights-user-editname": "Pasoe nan ureueng ngui:",
        "editusergroup": "Ubah kawan ureueng ngui",
        "editinguser": "Gantoe khut ureueng ngui '''[[User:$1|$1]]''' $2",
        "recentchanges-label-minor": "Nyoe neuandam ubeut",
        "recentchanges-label-bot": "Neuandam nyoe geupubuet le bot",
        "recentchanges-label-unpatrolled": "Neuandam nyoe goh lom geukalon",
-       "recentchanges-legend-heading": "'''Hareutoë:'''",
+       "recentchanges-legend-heading": "<strong>Hareutoë:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (eu cit [[Special:NewPages|dapeuta laman barô]])",
        "rcnotefrom": "Di yup nyoë nakeuh neuubah yôh <strong>$2</strong> (geupeudeuh trôh ‘an <strong>$1</strong> neuubah).",
        "rclistfrom": "Peudeuih neuubah barô yôh $3 $2 kön",
        "upload-maxfilesize": "Paléng rayek beureukaih: $1",
        "upload-description": "Teuneurang beureukaih",
        "watchthisupload": "Kalön beureukaih nyoe",
-       "upload-success-subj": "Ka meupeutamöng",
        "img-auth-nofile": "Hana beureukaih \"$1\".",
        "license": "Jeunèh lisensi:",
        "license-header": "Jeunèh lisensi",
index f27094d..05e0c7c 100644 (file)
        "passwordreset-email": "Емэйл адрес:",
        "passwordreset-emailtitle": "Аккаунт и гъэпсыкIэхэр, мий щыI {{SITENAME}}",
        "passwordreset-emailelement": "НэбгырацIэ: \n$1\n\nTemporary password: \n$2",
-       "passwordreset-emailsent": "Мыр регистрыгъэ емэйлэу щытмэ уи аккаунтым пае, шъэфгущыIэм и зэтедз емэйл къыпфагъэхьыщт.",
+       "passwordreset-emailsentemail": "Мыр регистрыгъэ емэйлэу щытмэ уи аккаунтым пае, шъэфгущыIэм и зэтедз емэйл къыпфагъэхьыщт.",
        "passwordreset-emailsent-capture": "ШъэфгущыIэм изэтедз фэгъэхьыгъэ емэйлыр гъахьыгъэ, ычIэгъкIэ ар олъэгъу.",
        "changeemail": "Зэблэхъу е тегъэкI емэйл адресыр",
        "changeemail-no-info": "Мы нэкIубгъом занкIэу укIонэу уфаемэ, системэм ухэхьэгъэн фае.",
        "prefs-displayrc": "ГъэпсыкIэхэр къэгъэлъагъу",
        "prefs-displaywatchlist": "ГъэпсыкIэхэр къэгъэлъагъу",
        "prefs-tokenwatchlist": "Токен",
-       "email-address-validity-valid": "Емэйл адресыр тэрэзым фэд",
-       "email-address-validity-invalid": "Емэйл адрес тэрэз итх",
        "userrights-lookup-user": "Нэбгырэмэ якупхэр гъэпс",
        "userrights-user-editname": "Итх уи нэбгырацӀэр:",
        "editusergroup": "Нэбгырэмэ я купмэ яIаз",
        "recentchanges-label-bot": "Мы хэӀэзэныгъэр ботым ышӀыгъ",
        "recentchanges-label-unpatrolled": "Мы хэӀэзэныгъэм джыри патрулэу ауплъэкӀугъэп",
        "recentchanges-label-plusminus": "НэкIубгъом ионтэгъугъэ мыщ фэдиз байт пчъагъэкIэ зэхъокIыгъэ",
-       "recentchanges-legend-heading": "'''Тхыдэ:'''",
+       "recentchanges-legend-heading": "<strong>Тхыдэ:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (нэмыкӀэу еплъ [[Special:NewPages|нэкӀубгъуакӀэ куп]])",
        "rclistfrom": "ХэIэзэныкIэхэр къэгъэлъагъу мыщ щегъэжьагъэу $2, $3",
        "rcshowhideminor": "$1 зэхъокӀыныгъэ цӀыкӀу",
        "upload-description": "Файлым и къэбар",
        "upload-options": "Илъхьан гъэпсыкIэхэр",
        "watchthisupload": "Мы файлым лъыплъ",
-       "upload-success-subj": "ШIоу илъхьагъ",
        "upload-proto-error": "Протокол фыкъуагъэ",
        "upload-file-error": "ЫкIоцI фыкъуагъэ",
        "upload-misc-error": "ЗэхэмышIыкIыгъэ илъхьан фыкъуагъэ",
        "upload-dialog-button-done": "ЗэшIуэкIыгъэ",
        "upload-dialog-button-save": "Итх",
        "upload-dialog-button-upload": "Илъхь",
-       "upload-form-label-select-file": "Къыхэх файл",
        "upload-form-label-infoform-title": "Къэбар",
        "upload-form-label-infoform-name": "ЦIэ",
        "upload-form-label-infoform-description": "АгурыбгъэIон",
index 59c868c..0c51902 100644 (file)
        "myprivateinfoprotected": "U het nie regte om u persoonlike inligting te wysig nie.",
        "mypreferencesprotected": "U het nie regte om u voorkeure te wysig nie.",
        "ns-specialprotected": "Spesiale bladsye kan nie geredigeer word nie.",
-       "titleprotected": "Hierdie titel is beskerm teen skepping deur [[User:$1|$1]].\nDie rede gegee is ''$2''.",
+       "titleprotected": "Hierdie titel is beskerm teen skepping deur [[User:$1|$1]].\nDie rede gegee is <em>$2</em>.",
        "filereadonlyerror": "Dit was nie moontlik om die lêer \"$1\" te wysig nie omdat die lêerstoor \"$2\" tans lees-alleen is.\n\nDie rede hiervoor is \"''$3''\".",
        "invalidtitle-knownnamespace": "Ongeldige titel met naamruimte \"$2\" en teks \"$3\"",
        "invalidtitle-unknownnamespace": "Ongeldige titel met onbekende naamruimtenummer $1 en teks \"$2\"",
        "recentchanges-label-bot": "Hierdie wysiging is deur 'n bot gemaak",
        "recentchanges-label-unpatrolled": "Die wysiging is nog nie gekontroleer nie",
        "recentchanges-label-plusminus": "Bladsy is met die aantal grepe gewysig",
-       "recentchanges-legend-heading": "'''Sleutel:'''",
+       "recentchanges-legend-heading": "<strong>Sleutel:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sien ook die [[Special:NewPages|lys van nuwe bladsye]])",
        "rcnotefrom": "Wysigings sedert <strong>$2</strong> (maksimum van <strong>$1</strong> word gewys).",
        "rclistfrom": "Vertoon wysigings vanaf $3 $2",
        "upload-dialog-button-done": "Gedoen",
        "upload-dialog-button-save": "Stoor",
        "upload-dialog-button-upload": "Oplaai",
-       "upload-form-label-select-file": "Kies lêer",
        "upload-form-label-infoform-title": "Details",
        "upload-form-label-infoform-name": "Naam",
        "upload-form-label-infoform-description": "Beskrywing",
        "suppress": "Toesig",
        "querypage-disabled": "Hierdie spesiale bladsy is afgeskakel om werkverrigting te verbeter (bediener is oorlaai).",
        "apihelp-no-such-module": "Module \"$1\" nie gevind nie.",
+       "apisandbox": "API-sandput",
+       "apisandbox-api-disabled": "API is afgeskakel op hierdie webwerf.",
+       "apisandbox-intro": "Gebruik hierdie bladsy om te eksperimenteer met die '''MediaWiki-API'''.\nSien die [//www.mediawiki.org/wiki/API:Main_page API-dokumentasie] vir verdere details oor die gebruik van die API. Voorbeeld: [//www.mediawiki.org/wiki/API#A_simple_example hoe die inhoud van 'n Tuisblad te laai]. Kies 'n handeling om meer voorbeelde te sien.",
+       "apisandbox-submit": "Maak versoek",
+       "apisandbox-reset": "Vee uit",
+       "apisandbox-examples": "Voorbeeld",
+       "apisandbox-results": "Resultaat",
+       "apisandbox-request-url-label": "Versoek-URL:",
+       "apisandbox-request-time": "Versoektyd: $1",
        "booksources": "Boekbronne",
        "booksources-search-legend": "Soek vir boekbronne",
        "booksources-search": "Soek",
        "rollbackfailed": "Terugrol onsuksesvol",
        "cantrollback": "Kan nie na verandering terug keer nie; die laaste bydraer is die enigste outer van hierdie bladsy.",
        "alreadyrolled": "Dit is nie moontlik om die laaste wysiging van die bladsy [[:$1]] deur [[User:$2|$2]] ([[User talk:$2|bespreking]]{{int:pipe-separator}}[[Special:Contributions/$2|bydraes]]) ongedaan te maak nie.\nIemand anders het reeds hierdie bladsy gewysig of teruggerol na 'n vroeëre weergawe.\n\nDie mees onlangse wysiging is gemaak deur [[User:$3|$3]] ([[User talk:$3|bespreking]]{{int:pipe-separator}}[[Special:Contributions/$3|bydraes]]).",
-       "editcomment": "Die wysigsopsomming was: \"''$1''\".",
+       "editcomment": "Die wysigsopsomming was: <em>$1</em>.",
        "revertpage": "Wysigings deur [[Special:Contributions/$2|$2]] teruggerol na laaste weergawe deur [[User:$1|$1]]",
        "revertpage-nouser": "Rol wysigings deur versteekte gebruiker terug na die laaste weergawe deur [[User:$1|$1]]",
        "rollback-success": "Wysigings deur $1 is teruggerol.\nDie laaste weergawe van $2 is teruggeplaas.",
index 2dcf85b..9818253 100644 (file)
@@ -8,7 +8,8 @@
                        "아라",
                        "Ammartivari",
                        "Olsi",
-                       "Kosovastar"
+                       "Kosovastar",
+                       "Macofe"
                ]
        },
        "tog-underline": "Nënvizoji vegzat",
        "cascadeprotected": "Kjo faqe âsht e mbrojtun prej redaktimit, për shkak se âsht e përfshime në {{PLURAL:$1|faqen, e cila âsht e mbrojtun|faqet, të cilat janë të mbrojtuna}} me opcionin \"zinxhir\" të zgjedhun:\n$2",
        "namespaceprotected": "Nuk keni tagër me redaktue faqe në hapësinën '''$1'''.",
        "ns-specialprotected": "Faqet speciale nuk mujnë me u redaktue.",
-       "titleprotected": "Ky titull âsht i mbrojtun për krijim prej përdoruesit [[User:$1|$1]].\nArsyeja e dhânë âsht \"''$2''\".",
+       "titleprotected": "Ky titull âsht i mbrojtun për krijim prej përdoruesit [[User:$1|$1]].\nArsyeja e dhânë âsht <em>$2</em>.",
        "virus-badscanner": "Konfigurim i keq: scanner i panjoftun virusash: ''$1''",
        "virus-scanfailed": "scanimi dështoi (code $1)",
        "virus-unknownscanner": "antivirus i panjoftun:",
index 720a77c..4971ff7 100644 (file)
@@ -9,7 +9,8 @@
                        "Solomon",
                        "Teferra",
                        "아라",
-                       "Matma Rex"
+                       "Matma Rex",
+                       "Macofe"
                ]
        },
        "tog-underline": "በመያያዣ ስር አስምር",
        "cascadeprotected": "'''ማስጠንቀቂያ፦''' ይህ አርእስት ሊፈጠር ወይም ሊቀየር አይቻልም። ምክንያቱም ወደ {{PLURAL:$1|ተከታተለው አርዕስት|ተከታተሉት አርእስቶች}} ተጨምሯል።\n$2",
        "namespaceprotected": "በ'''$1''' ክፍለ-ዊኪ ያሉትን ገጾች ለማዘጋጀት ፈቃድ የለዎም።",
        "ns-specialprotected": "ልዩ ገጾችን ማረም አይፈቀድም።",
-       "titleprotected": "ይህ አርዕስት እንዳይፈጠር በ[[User:$1|$1]] ተጠብቋል። የተሰጠው ምክንያት ''$2'' ነው።",
+       "titleprotected": "ይህ አርዕስት እንዳይፈጠር በ[[User:$1|$1]] ተጠብቋል። የተሰጠው ምክንያት <em>$2</em> ነው።",
        "exception-nologin": "ገና አልገቡም",
        "exception-nologin-text": "ለዚሁ ገጽ ወይም አድራጎት፣ ወደ ዊኪው በአባልነት ስም አስቀድሞ መግባት ግዴታ ነው።",
        "virus-unknownscanner": "ያልታወቀ antivirus:",
        "createaccountreason": "ምክንያት:",
        "createacct-reason": "ምክንያት",
        "createacct-reason-ph": "ለምን ሌላ የብዕር ስም ሊያወጡ እንደሆነ",
-       "createacct-imgcaptcha-ph": "ከላይ የሚታየውን ጽሁፍ ያስገቡ",
        "createacct-submit": "የብዕር ስም ለማውጣት",
        "createacct-another-submit": "ሌላ የብዕር ስም ለማውጣት",
        "createacct-benefit-heading": "{{SITENAME}} እንደ እርስዎ ባሉ ሰዎች ነው የሚጻፈው።",
        "passwordreset-username": "የብዕር ስም:",
        "passwordreset-email": "የኢ-ሜል አድራሻ:",
        "passwordreset-emailelement": "የአባል ስም፦ \n$1\n\nጊዜያዊ መግቢያ ቃል፦ \n$2",
-       "passwordreset-emailsent": "የማስታወሻ ኢ-ሜል ተልኳል።",
+       "passwordreset-emailsentemail": "የማስታወሻ ኢ-ሜል ተልኳል።",
        "passwordreset-emailsent-capture": "የማስታወሻ ኢ-ሜል ተልኳል፤ ከዚህም ታች ይታያል።",
        "passwordreset-emailerror-capture": "የማስታወሻ ኢ-ሜል ተልኳል፤ ከዚህም ታች ይታያል፤ ነገር ግን ወደ ተጠቃሚው ለመላክ ስንል አልተከናወነም፡",
        "changeemail": "ኢ-ሜል አድራሻዎን ለመቀይር",
-       "changeemail-text": "ኢ-ሜል አድራሻዎን ለመቀይር ይህን ማመልከቻ ጨርስ። ለውጡን ለማረጋገጥ፣ መግቢያ ቃልዎን ማስገባት አስፈላጊ ነው።",
+       "changeemail-header": "የአባልነትዎን ኢ-ሜል አድራሻ ለመቀይር",
        "changeemail-no-info": "ይህንን ገጽ በቀጥታ ለማግኘት አስቀድሞ መግባት ያስፈልጋል።",
        "changeemail-oldemail": "የቆየው ኢ-ሜል አድራሻዎ፦",
        "changeemail-newemail": "አዲስ ኢ-ሜል አድራሻ፦",
        "prefs-advancedwatchlist": "የተደረጁ ምርጫዎች",
        "prefs-displayrc": "የማሳያ አማራጮች",
        "prefs-diffs": "ልዩነቶች",
-       "email-address-validity-valid": "ኢ-ሜል አድራሻ ትክክለኛ ይመስላል።",
-       "email-address-validity-invalid": "ትክክለኛ ኢ-ሜል ማቅረብ ያስፈልጋል።",
        "userrights": "የአባል መብቶች ለማስተዳደር",
        "userrights-lookup-user": "የ1 አባል ማዕረግ ለማስተዳደር",
        "userrights-user-editname": "ለዚሁ ብዕር ስም፦",
        "watchthisupload": "ይህንን ገጽ ለመከታተል",
        "filewasdeleted": "በዚሁ ስም ያለው ፋይል ከዚህ በፊት ተልኮ እንደገና ጠፍቷል።  ዳግመኛ ሳይልኩት $1 ማመልከት ያሻላል።",
        "filename-bad-prefix": "የሚልኩት ፋይል ስም በ'''«$1»''' ይጀመራል፤ ይህ ብዙ ጊዜ በቁጥራዊ ካሜራ የተወሰነ ገላጭ ያልሆነ ስም ይሆናል። እባክዎ ለፋይልዎ ገላጭ የሆነ ስም ይምረጡ።",
-       "upload-success-subj": "መላኩ ተከናወነ",
-       "upload-failure-subj": "የመላክ ችግር",
-       "upload-failure-msg": "ከ [$2] ለመላክ ስትል አንድ ችግር ደረሰ፤\n\n$1",
-       "upload-warning-subj": "የመላክ ማስጠንቀቂያ ምልክት",
        "upload-proto-error": "ትክክለኛ ያልሆነ ወግ (protocol)",
        "upload-proto-error-text": "የሩቅ መላክ እንዲቻል URL በ<code>http://</code> ወይም በ<code>ftp://</code> መጀመር አለበት።",
        "upload-file-error": "የውስጥ ስህተት",
        "nopagetext": "የወሰኑት መድረሻ አርእስት ሊገኝ አይችልም።",
        "pager-newer-n": "{{PLURAL:$1|ኋለኛ 1|ኋለኛ $1}}",
        "pager-older-n": "{{PLURAL:$1|ፊተኛ 1|ፊተኛ $1}}",
+       "apisandbox-examples": "ምሳሌ",
+       "apisandbox-results": "ውጤት",
        "booksources": "የመጻሕፍት ቤቶችና ሸጪዎች",
        "booksources-search-legend": "የመጽሐፍ ቦታ ፍለጋ",
        "booksources-isbn": "የመጽሐፉ ISBN #:",
        "rollbackfailed": "መገልበጡ አልተከናወነም",
        "cantrollback": "ለውጡን መገልበጥ አይቻልም፦ አቅራቢው ብቻ ስላዘጋጁት ነው።",
        "alreadyrolled": "የ[[:$1]] መጨረሻ ለውጥ በ[[User:$2|$2]] ([[User talk:$2|ውይይት]]) መገልበት አይቻልም፤ ሌላ ሰው አሁን ገጹን መልሶታል።\n\nመጨረሻው ለውጥ በ[[User:$3|$3]] ([[User talk:$3|ውይይት]]) ነበረ።",
-       "editcomment": "ማጠቃለያው፦ «''$1''» ነበረ።",
+       "editcomment": "ማጠቃለያው፦ <em>$1</em> ነበረ።",
        "revertpage": "የ$2ን ለውጦች ወደ $1 እትም መለሰ።",
        "rollback-success": "የ$1 ለውጦች ተገለበጡ፣ ወደ $2 ዕትም ተመልሷል።",
        "protectlogpage": "የማቆለፍ መዝገብ",
        "movenosubpage": "ይህ ገጽ ምንም ንዑስ ገጽ የለውም።",
        "movereason": "ምክንያት:",
        "revertmove": "ይመለስ",
-       "delete_and_move": "ማጥፋትና ማዛወር",
        "delete_and_move_text": "==ማጥፋት ያስፈልጋል==\n\nመድረሻው ገጽ ሥፍራ «[[:$1]]» የሚለው ገጽ አሁን ይኖራል። ሌላው ገጽ ወደዚያ እንዲዛወር እሱን ለማጥፋት ይወድዳሉ?",
        "delete_and_move_confirm": "አዎን፣ ገጹ ይጥፋ",
        "delete_and_move_reason": "ለመዛወሩ ሥፍራ እንዲገኝ ጠፋ",
index 53d2471..a7d5d44 100644 (file)
        "customcssprotected": "No tiene permisos ta editar a pachina CSS porque contién parametros personal de belatro usuario.",
        "customjsprotected": "No tien permisos ta editar a pachina JavaScript porque contién os parametros personas de belatro usuario.",
        "ns-specialprotected": "No ye posible editar as pachinas d'o espacio de nombres {{ns:special}}.",
-       "titleprotected": "Iste títol no puede creyar-se porque ye estato protechito por [[User:$1|$1]].\nA razón data ye ''$2''.",
+       "titleprotected": "Iste títol no puede creyar-se porque ye estato protechito por [[User:$1|$1]].\nA razón data ye <em>$2</em>.",
        "virus-badscanner": "Confeguración incorrecta: rastriador de virus esconoixito: ''$1''",
        "virus-scanfailed": "o rastreyo ha fallato (codigo $1)",
        "virus-unknownscanner": "antivirus esconoixito:",
        "createacct-another-email-ph": "Establir una adreza de correu-e",
        "createaccountmail": "por correu electronico",
        "createaccountreason": "Razón:",
-       "createacct-imgcaptcha-ph": "Escribe o texto d'alto",
        "createacct-submit": "Creya a tuya cuenta",
        "createacct-another-submit": "Creya unatra cuenta",
        "createacct-benefit-body3": "{{PLURAL:$1|colaborador recient|colaboradors recients}}",
        "passwordreset-emailtext-ip": "Belún (probablement vusté, dende l'adreza IP $1) ha demandau un recordatorio d'a información d'a suya cuenta en  {{SITENAME}} ($4). {{PLURAL:$3|A cuenta d'usuario siguient ye asociata|As cuentas d'usuario siguients son asociatas}} a ista adreza de correu-e:\n\n$2\n\n{{PLURAL:$3|Ista clau temporal circumducirá|Istas claus temporals circumducirán}} en {{PLURAL:$5|un día|$5 días}}. Habría de connectar-se agora y trigar una nueva clau. Si ista demanda no dimana de vusté, u ya se'n ha acordau d'a suya clau inicial y ya no deseya modificar-la, puet ignorar iste mensache y continar emplegando a suya viella clau.",
        "passwordreset-emailtext-user": "L'usuario $1 en {{SITENAME}} ha demandau un recordatorio d'a información d'a suya cuenta en {{SITENAME}} ($4). {{PLURAL:$3|A cuenta d'usuario siguient ye asociata|As cuentas d'usuario siguients son asociatas}} a ista adreza de correu-e:\n\n$2\n\n{{PLURAL:$3|Ista clau d'acceso temporal circumducirá|Istas claus d'acceso temporals circumducirán}} en {{PLURAL:$5|un día|$5 días}}. Habría de connectar-se agora y trigar una nueva clau. Si ista demanda no dimana de vusté, u ya se'n ha acordau d'a suya clau inicial y ya no deseya modificar-la, puet ignorar iste mensache y continar emplegando a suya viella clau.",
        "passwordreset-emailelement": "Nombre de usuario: \n$1\n\nClau d'acceso temporal: \n$2",
-       "passwordreset-emailsent": "S'ha ninviau un recordatorio por correu-e.",
+       "passwordreset-emailsentemail": "S'ha ninviau un recordatorio por correu-e.",
        "passwordreset-emailsent-capture": "Se le ha ninviau un recordatorio por correu electronico, que s'amuestra contino.",
        "passwordreset-emailerror-capture": "S'ha chenerau un recordatorio por correu electronico, que s'amuestra contino, pero o ninvío ta l'usuario ha fallau: $1",
        "changeemail": "Cambiar l'adreza de correu-e",
        "prefs-displayrc": "Opcions de visualización",
        "prefs-displaywatchlist": "Opcions de visualización",
        "prefs-diffs": "Diferencias",
-       "email-address-validity-valid": "L'adreza de correu electronico pareix valida",
-       "email-address-validity-invalid": "Escriba una adreza valida de correu electronico",
        "userrights": "Confeguración d'os dreitos d'os usuarios",
        "userrights-lookup-user": "Confegurar collas d'usuarios",
        "userrights-user-editname": "Escriba un nombre d'usuario:",
        "right-blockemail": "Bloqueyar a un usuario ta privar-le de ninviar correus",
        "right-hideuser": "Bloqueyar un nombre d'usuario, amagando-lo d'o publico",
        "right-ipblock-exempt": "Ignorar os bloqueyos d'adrezas IP, os autobloqueyos y os bloqueyos de rangos de IPs.",
-       "right-proxyunbannable": "Ignorar os bloqueyos automaticos de proxies",
        "right-unblockself": "Desbloqueyar-se ells mesmos",
        "right-protect": "Cambiar os livels de protección y editar pachinas protechitas",
        "right-editprotected": "Editar pachinas protechitas (sin de protección en cascada)",
        "filewasdeleted": "Una fichero con iste mesmo nombre ya se cargó denantes y estió borrato dimpués. Habría de comprebar $1 antes de tornar a cargar-lo una atra vegada.",
        "filename-bad-prefix": "O nombre d'o fichero que ye cargando prencipia por '''\"$1\"''', que ye un nombre no descriptivo que gosa clabar automaticament as camaras dichitals. Por favor, trigue un nombre más descriptivo ta iste fichero.",
        "filename-prefix-blacklist": " #<!-- dixe ista linia esautament igual como ye --> <pre>\n# A sintacsis ye asinas:\n#   * Tot o que prenzipia por un caráuter \"#\" dica la fin d'a linia ye un comentario\n#   * As atras linias tienen os prefixos que claban automaticament as camaras dichitals\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # bels telefonos móbils\nIMG # chenerica\nJD # Jenoptik\nMGP # Pentax\nPICT # misz.\n #</pre> <!-- dixe ista linia esautament igual como ye -->",
-       "upload-success-subj": "Cargata correctament",
-       "upload-success-msg": "A carga de [$2] ha surtiu con exito. Ye disponible aquí: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Problema en a carga",
-       "upload-failure-msg": "I ha habiu un problema con o a suya carga dende [$2]:\n\n$1",
-       "upload-warning-subj": "Alvertencia de carga",
-       "upload-warning-msg": "I habió un problea con a carga de [$2]. Puede tornar ta [[Special:Upload/stash/$1|upload form]] pa correchir iste problema.",
        "upload-proto-error": "Protocolo incorrecto",
        "upload-proto-error-text": "Si quiere cargar fichers dende atra pachina, a URL ha de prencipiar por <code>http://</code> u <code>ftp://</code>.",
        "upload-file-error": "Error interna",
        "rollbackfailed": "No s'ha puesto revertir",
        "cantrollback": "No se pueden revertir as edicions; o zaguer colaborador ye o solo autor d'iste articlo.",
        "alreadyrolled": "No se puet desfer a zaguer edición de [[:$1]] feita por [[User:$2|$2]] ([[User talk:$2|descusión]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); belatro usuario ya ha editato u desfeito edicions en ixa pachina.\n\nA zaguer edición d'a pachina la fació [[User:$3|$3]] ([[User talk:$3|descusión]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "O resumen d'a edición ye: \"''$1''\".",
+       "editcomment": "O resumen d'a edición ye: <em>$1</em>.",
        "revertpage": "S'han revertito as edicions de [[Special:Contributions/$2|$2]] ([[User talk:$2|Descusión]]); tornando t'a zaguera versión editada por [[User:$1|$1]]",
        "revertpage-nouser": "S'han revertito as edicions feitas por (nombre d'usuario eliminato) a la zaguera versión feita por [[User:$1|$1]]",
        "rollback-success": "Revertidas as edicions de $1; s'ha retornato t'a zaguer versión de $2.",
        "movenosubpage": "Ista pachina no tien subpachinas",
        "movereason": "Razón:",
        "revertmove": "revertir",
-       "delete_and_move": "Borrar y tresladar",
        "delete_and_move_text": "==S'amenista borrar a pachina==\n\nA pachina de destino (\"[[:$1]]\") ya existe. Quiere borrar-la ta premitir o treslau?",
        "delete_and_move_confirm": "Sí, borrar a pachina",
        "delete_and_move_reason": "Borrata ta permitir o treslau de \"[[$1]]\"",
index f5b8df0..016af24 100644 (file)
@@ -12,7 +12,8 @@
                        "Tsepelcory",
                        "Wōdenhelm",
                        "아라",
-                       "Dpk"
+                       "Dpk",
+                       "Macofe"
                ]
        },
        "tog-underline": "Mearc under hlencan:",
        "createaccountreason": "Racu:",
        "createacct-reason": "Racu",
        "createacct-reason-ph": "For hwȳ wyrcest þū ōðerne grīman",
-       "createacct-imgcaptcha-ph": "Besettan þone traht þe þū sīhst būfan",
        "createacct-submit": "Scieppan þīnne grīman",
        "createacct-another-submit": "Scieppan ōðerne grīman",
        "createacct-benefit-heading": "{{SITENAME}} is geworht fram hādum swilce þū.",
        "deletereasonotherlist": "Ōðru racu",
        "rollbacklink": "settan on bæc",
        "rollbackfailed": "Bæcsettung tōsǣlde",
-       "editcomment": "Þǣre adihtunge se cwide wæs: \"''$1''\".",
+       "editcomment": "Þǣre adihtunge se cwide wæs: <em>$1</em>.",
        "revertpage": "Onhwearf adihtunga fram [[Special:Contributions/$2|$2]] ([[User talk:$2|mōtung]]); wendede on bæc tō ǣrran fadunge fram [[User:$1|$1]]",
        "protectlogpage": "Beorges ealdhord",
        "protectedarticle": "bearg \"[[$1]]\"",
        "contribslink": "forðunga",
        "unblocklogentry": "unfortȳnde $1",
        "block-log-flags-nocreate": "Forbēad tō scieppenne reccinge",
-       "movearticle": "Wegan tramet:",
        "newtitle": "Tō nīwum naman:",
        "move-watch": "Behealdan frumtramet and endetramet",
        "movepagebtn": "Wegan tramet",
index f160e65..2621af9 100644 (file)
@@ -4,7 +4,8 @@
                        "Angpradesh",
                        "Vinitutpal",
                        "아라",
-                       "Samyo"
+                       "Samyo",
+                       "Macofe"
                ]
        },
        "tog-underline": " कड़ी अधोरेखित करना:",
        "userlogin-helplink2": "लॉग-इन सथें सहायता",
        "createacct-emailoptional": "ई-मेल पता (वैकल्पिक)",
        "createacct-email-ph": "अपनऽ ई-मेल पता लिखऽ",
-       "createacct-captcha": "सुरक्षा जाँच",
-       "createacct-imgcaptcha-ph": "उपरोक्त पाठ लिखऽ",
        "createacct-submit": "आपनऽ खाता बनाबऽ",
        "createacct-benefit-heading": "आपने ऐन्हऽ लोगऽ द्वारा बनैलऽ गेलऽ {{SITENAME}} छै .",
        "createacct-benefit-body1": "{{PLURAL:$1|सम्पादन}}",
        "recentchanges-label-bot": "इ संपादन बॉट न॑ करलकै",
        "recentchanges-label-unpatrolled": "इ संपादन अखनी जाँचलऽ नै गेलऽ छै.",
        "recentchanges-label-plusminus": "पृष्ठ आकार इ बाइट संख्या सं॑ बदललै",
-       "recentchanges-legend-heading": "'''विवरण:'''",
+       "recentchanges-legend-heading": "<strong>विवरण:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नया पन्ना के सूची]] क॑ भी देखऽ)",
        "rclistfrom": "$3 $2 सं॑ नया बदलाव देखलाबऽ",
        "rcshowhideminor": "छोटऽ बदलाव $1",
        "rollbackfailed": "पूर्ववत स्थिति निष्फल",
        "cantrollback": "पुराना अवतरण पूर्ववत नै करॆ सकॆ छियै;\nइ पन्ना के आखिरी योगदानकर्ता इ लेख के एकमात्र लेखक छेकै.",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|वार्ता]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) द्वारा करलॊ गेलॊ  [[:$1]] के पिछला संपादन कॆ वापस पुरानॊ स्थिति पर नै लानलॊ जाबॆ सकॆ छै;\nकोय आरू इ बीच या तॆ इ पन्ना कॆ फिर सॆं संपादित करी देनॆ छै या पहले ही पन्ना पुरानॊ स्थिति पर लानलॊ जाय चुकलॊ छै.\n\nइ पन्ना के ताज़ातरीन संपादन [[User:$3|$3]] ([[User talk:$3|वार्ता]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) नॆ करनॆ छै.",
-       "editcomment": "संपादन टिप्पणी छेलै: \"''$1''\".",
+       "editcomment": "संपादन टिप्पणी छेलै: <em>$1</em>.",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) केरॊ संपादनॊ कॆ हटायकॆ [[User:$1|$1]] के आखिरी अवतरण कॆ पूर्ववत करलॊ गेलै.",
        "revertpage-nouser": "(प्रयोक्ता नाम हटैलॊ गेलॊ छै) द्वारा करलॊ संपादन कॆ वापस पुरानॊ स्थिति मॆं लाना कॆ ऐकरॊ पहले केरॊ [[User:$1|$1]] द्वारा बनैलॊ संस्करण कॆ फिर सॆं ताज़ा संस्करण बनाबॊ.",
        "rollback-success": "$1 केरॊ संपादन हटाबॊ;\n$2 द्वारा संपादित आखिरी अवतरण कॆ पुनर्स्थापित करलॊ गेलै.",
index 7036989..1370b5a 100644 (file)
                        "Shbib Al-Subaie",
                        "Matma Rex",
                        "Haytham morsy",
-                       "BAB ZAA"
+                       "BAB ZAA",
+                       "ASammour",
+                       "Maroen1990",
+                       "Sonic N800"
                ]
        },
        "tog-underline": "سطر تحت الوصلات:",
@@ -91,6 +94,7 @@
        "tog-watchlisthidebots": "أخف تعديلات البوتات من قائمة المراقبة",
        "tog-watchlisthideminor": "أخف التعديلات الطفيفة في قائمة المراقبة",
        "tog-watchlisthideliu": "أخف تعديلات المستخدمين المسجلين في قائمة المراقبة",
+       "tog-watchlistreloadautomatically": "أعد تحميل قائمة المراقبة بصفة آلية حينما يتغير مرشح ما (يتطلب جافاسكربت)",
        "tog-watchlisthideanons": "أخف تعديلات المستخدمين المجهولين في قائمة المراقبة",
        "tog-watchlisthidepatrolled": " أخف التعديلات المراجعة في قائمة المراقبة",
        "tog-watchlisthidecategorization": "أخف تصنيف الصفحات",
        "myprivateinfoprotected": "ليس لديك صلاحية تعديل معلوماتك الخاصة.",
        "mypreferencesprotected": "ليس لديك صلاحية تعديل تفضيلاتك.",
        "ns-specialprotected": "الصفحات الخاصة لا يمكن تعديلها.",
-       "titleprotected": "{{GENDER:$1|حمى|حمت}} [[User:$1|$1]] هذا العنوان من الإنشاء.\nالسبب المعطى هو ''$2''.",
+       "titleprotected": "{{GENDER:$1|حمى|حمت}} [[User:$1|$1]] هذا العنوان من الإنشاء.\nالسبب المعطى هو <em>$2</em>.",
        "filereadonlyerror": "تعذر تعديل الملف \"$1\" لأن مستودع الملف \"$2\" في وضع القراءة فقط. \n\nإداري النظام الذي قام بغلقه قدم التفسير التالي: \"$3\".",
        "invalidtitle-knownnamespace": "عنوان غير صالح في النطاق «$2» مع نص «$3»",
        "invalidtitle-unknownnamespace": "عنوان غير صالح ذو نطاق غير معروف رقم $1 ونص «$2»",
        "nocookieslogin": "يستخدم {{SITENAME}} الكوكيز لتسجيل الدخول.\nالكوكيز معطلة لديك.\nمن فضلك فعلها ثم حاول مرة أخرى.",
        "nocookiesfornew": "لم يتم إنشاء حساب المستخدم، لأننا لم نستطع تأكيد مصدره. \nتأكد من أن ملفات تعريف الارتباط (الكوكيز) مفعلة عندك، ثم أعد تحميل الصفحة وحاول مرة أخرى.",
        "noname": "لم تحدد اسم مستخدم صحيح.",
-       "loginsuccesstitle": "تم الدخول بشكل صحيح",
+       "loginsuccesstitle": "تم الدخول",
        "loginsuccess": "'''لقد سجلت الدخول ل{{SITENAME}} باسم \"$1\".'''",
        "nosuchuser": "لا يوجد مستخدم بالاسم \"$1\".\nأسماء المستخدمين حساسة لحالة الحروف.\nتأكد من إملاء الاسم، أو [[Special:UserLogin/signup|قم بإنشاء حساب جديد]].",
        "nosuchusershort": "لا يوجد مستخدم باسم $1\".\nتأكد من إملاء الاسم.",
        "wrongpasswordempty": "كلمة السر المدخلة كانت فارغة.\nمن فضلك حاول مرة أخرى.",
        "passwordtooshort": "يجب أن تتكون كلمة السر على الأقل من {{PLURAL:$1|حرف واحد|حرفين|$1 حروف|$1 حرفا|$1 حرف}}.",
        "passwordtoolong": "كلمات السر لا يجب أن تكون أطول من  {{PLURAL:$1|1 حرف|$1 حروف}}.",
+       "passwordtoopopular": "كلمات المرور الشائعة لا يمكن استخدامها. برجاء اختيار كلمة مرور أكثر فرادة.",
        "password-name-match": "يجب أن تكون كلمة المرور مختلفة عن اسم المستخدم.",
        "password-login-forbidden": "تم منع استخدام اسم المستخدم هذا وكلمة السر.",
        "mailmypassword": "أعد تعيين كلمة السر",
        "createaccount-title": "إنشاء حساب في {{SITENAME}}",
        "createaccount-text": "شخص ما أنشأ حسابا لعنوان بريدك الإلكتروني في {{SITENAME}} ($4) بالاسم \"$2\"، كلمة السر \"$3\".\nينبغي عليك تسجيل الدخول وتغيير كلمة السر الخاصة بك الآن.\n\nيمكنك تجاهل هذه الرسالة، لو تم إنشاء هذا الحساب بالخطأ.",
        "login-throttled": "لقد قمت بمحاولات دخول كثيرة جدا مؤخرا.\nمن فضلك انتظر $1 قبل المحاولة مرة أخرى.",
-       "login-abort-generic": "Ù\84Ù\85 Ù\8aÙ\86جح Ù\88Ù\84Ù\88جك - تم إجهاضه",
+       "login-abort-generic": "Ù\81Ø´Ù\84 Ø¯Ø®Ù\88Ù\84ك - تم إجهاضه",
        "login-migrated-generic": "تم تهجير حسابك، ولم يعد اسم المستخدم الخاص بك موجوداً على هذه الويكي",
        "loginlanguagelabel": "اللغة: $1",
        "suspicious-userlogout": "رفض طلب خروجك لأنه يبدو كأنه أرسل عن طريق متصفح معطوب أو وسيط تخزين.",
        "newpassword": "كلمة السر الجديدة:",
        "retypenew": "أعد كتابة كلمة السر الجديدة:",
        "resetpass_submit": "ضبط كلمة السر والدخول",
-       "changepassword-success": "تم تغيير كلمة السر بنجاح!",
+       "changepassword-success": "تم تغيير كلمة السر !",
        "changepassword-throttled": "لديك محاولات تسجيل دخول كثيرة حديثة. من فضلك انتظر $1 قبل المحاولة ثانية.",
+       "botpasswords": "كلمات مرور البوت",
+       "botpasswords-disabled": "كلمات السر الخاصة بالبوت معطلة.",
+       "botpasswords-no-central-id": "لاستخدام كلمة السر الخاصة بالبوت، يجب أن تقوم بتسجيل الدخول من خلال حساب موحد.",
+       "botpasswords-existing": "كلمات مرور البوت الموجودة",
+       "botpasswords-createnew": "إنشاء كلمة مرور جديدة للبوت",
+       "botpasswords-editexisting": "تعديل كلمة مرور موجودة للبوت",
        "botpasswords-label-appid": "اسم البوت:",
        "botpasswords-label-create": "أنشأ",
        "botpasswords-label-update": "حدث",
        "botpasswords-label-cancel": "ألغ",
        "botpasswords-label-delete": "احذف",
        "botpasswords-label-resetpassword": "أعد ضبط كلمة السر",
+       "botpasswords-label-grants": "المنح التي يمكن تطبيقها:",
        "botpasswords-label-restrictions": "قيود الاستخدام:",
+       "botpasswords-label-grants-column": "الممنوح",
+       "botpasswords-bad-appid": "اسم البوت \"$1\" غير صحيح.",
+       "botpasswords-insert-failed": "فشل في اضافة  اسم البوت \"$1\".هل اضيف بالفعل؟",
+       "botpasswords-update-failed": "فشل في تحديث اسم بوت \"$1\". هل تم حذفه؟",
+       "botpasswords-created-title": "صناعة كلمة سر ألية",
+       "botpasswords-created-body": "تم إنشاء كلمة مرور بوت \"$1\".",
+       "botpasswords-updated-title": "تحديث كلمة السر الألية",
+       "botpasswords-updated-body": "كلمة سر البوت\"$1\" قد حذفت.",
+       "botpasswords-deleted-title": "كلمة سر البوت حذفت",
+       "botpasswords-deleted-body": "كلمة سر البوت\"$1\" قد حذفت.",
+       "botpasswords-no-provider": "BotPasswordsSessionProvider غير متاح.",
        "resetpass_forbidden": "كلمات السر لا يمكن تغييرها",
        "resetpass-no-info": "يجب أن تكون مسجل الدخول للوصول إلى هذه الصفحة مباشرة.",
        "resetpass-submit-loggedin": "تغيير كلمة السر",
        "passwordreset-emailsent-capture": "أُرسل بريد إلكتروني لإعادة ضبط كلمة السر، وهو معروض بالأسفل.",
        "passwordreset-emailerror-capture": "تم توليد رسالة بريد إلكتروني لتصفير كلمة السر نصّه التالي، إلا أنه تعذّر إرسال الرّسالة إلى {{GENDER:$2|المستخدم|المستخدمة}}: $1",
        "changeemail": "تغيير أو إزالة عنوان البريد الإلكتروني",
-       "changeemail-header": "تغÙ\8aÙ\8aر Ø¹Ù\86Ù\88اÙ\86 Ø§Ù\84برÙ\8aد Ø§Ù\84Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8a Ù\84Ù\84حساب",
+       "changeemail-header": "Ø¥Ù\83Ù\85اÙ\84 Ù\87ذا Ø§Ù\84Ù\86Ù\85Ù\88ذج Ù\84تغÙ\8aÙ\8aر Ø¹Ù\86Ù\88اÙ\86 Ø§Ù\84برÙ\8aد Ø§Ù\84Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8a Ø§Ù\84خاص Ø¨Ù\83. Ø¥Ø°Ø§ Ù\83Ù\86ت ØªØ±ØºØ¨ Ù\81Ù\8a Ø¥Ø²Ø§Ù\84Ø© Ø¬Ù\85عÙ\8aØ© Ø£Ù\8a Ø¹Ù\86Ù\88اÙ\86 Ø§Ù\84برÙ\8aد Ø§Ù\84Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8a Ù\85Ù\86 Ø­Ø³Ø§Ø¨Ù\83Ø\8c Ù\88ترÙ\83 Ø§Ù\84Ù\81راغ Ø¹Ù\86Ù\88اÙ\86 Ø§Ù\84برÙ\8aد Ø§Ù\84Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8a Ø§Ù\84جدÙ\8aد Ø¹Ù\86د ØªÙ\82دÙ\8aÙ\85 Ø§Ù\84Ù\86Ù\85Ù\88ذج",
        "changeemail-passwordrequired": "تحتاج إلى إدخال كلمة السر الخاصة بك لتأكيد هذا التغيير.",
        "changeemail-no-info": "يجب تسجيل الدخول للوصول إلى هذه الصفحة مباشرة.",
        "changeemail-oldemail": "عنوان البريد الإلكتروني الحالي:",
        "previewnote": "'''تذكر أن هذه مجرد معاينة أولية.'''\nلم تحفظ تغييراتك إلى الآن!",
        "continue-editing": "اذهب لصندوق التحرير",
        "previewconflict": "هذا العرض يوضح النص الموجود في صندوق التحرير العلوي والذي سيظهر إذا اخترت الحفظ.",
-       "session_fail_preview": "'''عذرا! لم نتمكن من حفظ التعديلات التي قمت بها نتيجة لضياع بيانات هذه الجلسة.\nمن فضلك حاول مرة أخرى.\nفي حال استمرار المشكلة حاول أن تقوم [[Special:UserLogout|بالخروج]] ومن ثم الولوج مرة أخرى.'''",
-       "session_fail_preview_html": "'''عذرا! لم نستطع معالجة تعديلك بسبب فقدان بيانات الجلسة.'''\n\n''لأن {{SITENAME}} بها HTML الخام مفعلة، العرض المسبق مخفي كاحتياط ضد هجمات الجافا سكريبت.''\n\n'''إذا كانت هذه محاولة تعديل صادقة، من فضلك حاول مرة أخرى.\nإذا كانت مازالت لا تعمل، حاول [[Special:UserLogout|تسجيل الخروج]] ثم تسجيل الدخول مجددا.'''",
+       "session_fail_preview": "'''عذرا! لم نتمكن من حفظ التعديلات التي قمت بها نتيجة لضياع بيانات هذه الجلسة.\nمن فضلك حاول مرة أخرى.\nفي حال استمرار المشكلة حاول أن تقوم [[Special:UserLogout|بالخروج]] ومن ثم الولوج مرة أخرى.''' و تاكد في  متصفحك من الكوكيز  الخاصة  بهذا الموقع.",
+       "session_fail_preview_html": "'''عذرا! لم نستطع معالجة تعديلك بسبب فقدان بيانات الجلسة.'''\n\n''لأن {{SITENAME}} بها HTML الخام مفعلة، العرض المسبق مخفي كاحتياط ضد هجمات الجافا سكريبت.''\n\n'''إذا كانت هذه محاولة تعديل صادقة، من فضلك حاول مرة أخرى.\nإذا كانت مازالت لا تعمل، حاول [[Special:UserLogout|تسجيل الخروج]] ثم تسجيل الدخول مجددا.'''و تاكد في  متصفحك من الكوكيز  الخاصة  بهذا الموقع.",
        "token_suffix_mismatch": "'''تعديلك تم رفضه لأن عميلك أخطأ في علامات الترقيم\nفي نص التعديل. تم رفض التعديل لمنع فساد نص المقالة.\nهذا يحدث أحيانا عندما تستخدم خدمة بروكسي مجهول معيبة مبنية على الوب.'''",
        "edit_form_incomplete": "'''بعض أجزاء من نموذج التعديل لم تصل إلى الخادم؛ تأكد من أن تعديلاتك لم تمس وحاول مجددا.'''",
        "editing": "تعديل $1",
        "undo-summary-username-hidden": "الرجوع عن المراجعة $1 التي أجراها مستخدمي مخفي",
        "cantcreateaccounttitle": "لا يمكن إنشاء حساب",
        "cantcreateaccount-text": "إنشاء الحسابات من عنوان الأيبي هذا ('''$1''') تم منعه بواسطة [[User:$3|$3]].\n\nالسبب المعطى بواسطة $3 هو ''$2''",
-       "cantcreateaccount-range-text": "إنشاء الحسابات من عناوين الآيبي في النطاق '''$1'''، التي تحتوي على الآيبي الخاص بك ('''$4''')، قد منعها [[User:$3|$3]].\n\nالسبب المعطى بواسطة $3 هو ''$2''",
+       "cantcreateaccount-range-text": "إنشاء الحسابات من عناوين الآيبي في النطاق <strong>$1</strong>، التي تحتوي على الآيبي الخاص بك (<strong>$4</strong>)، قد منعها [[User:$3|$3]].\n\nالسبب المعطى بواسطة $3 هو <em>$2</em>",
        "viewpagelogs": "اعرض سجلات هذه الصفحة",
        "nohistory": "لا يوجد تاريخ للتعديلات لهذه الصفحة.",
        "currentrev": "المراجعة الحالية",
        "revdelete-unsuppress": "إزالة الضوابط من المراجعات المسترجعة",
        "revdelete-log": "السبب:",
        "revdelete-submit": "طبق على {{PLURAL:$1||المراجعة المختارة|المراجعتين المختارتين|المراجعات المختارة}}",
-       "revdelete-success": "'''تم تحديث رؤية المراجعات بنجاح.'''",
+       "revdelete-success": "تم تحديث رؤية المراجعات بنجاح.",
        "revdelete-failure": "'''تعذر تحديث رؤية المراجعة:'''\n$1",
-       "logdelete-success": "'''تم ضبط رؤية السجلات بنجاح.'''",
+       "logdelete-success": "تم ضبط رؤية السجلات بنجاح.",
        "logdelete-failure": "'''تعذر ضبط رؤية السجل:'''\n$1",
        "revdel-restore": "تغيير الرؤية",
        "pagehist": "تاريخ الصفحة",
        "mergehistory-go": "عرض التعديلات القابلة للدمج",
        "mergehistory-submit": "دمج المراجعات",
        "mergehistory-empty": "لا مراجعات يمكن دمجها.",
-       "mergehistory-done": "$3 {{PLURAL:$3|مراجعة|مراجعة}} من $1 تم دمجها بنجاح في [[:$2]].",
+       "mergehistory-done": "$3 {{PLURAL:$3|مراجعة|مراجعة}} من $1{{PLURAL:$3|كان|اين}} تم دمجها بنجاح في [[:$2]].",
        "mergehistory-fail": "غير قادر على عمل دمج التاريخ، من فضلك أعد التحقق من محددات الصفحة والزمن.",
+       "mergehistory-fail-bad-timestamp": "الختم الزمني غير صالح.",
+       "mergehistory-fail-invalid-source": "الصفحة المصدر غير صالحة.",
+       "mergehistory-fail-invalid-dest": "الصفحة الوجهة غير صالحة.",
+       "mergehistory-fail-no-change": "دمج التاريخ لم يدمج أية مراجعات. برجاء التحقق من معاملات الصفحة والزمن.",
+       "mergehistory-fail-permission": "سماحيات غير كافية لدمج التاريخ.",
+       "mergehistory-fail-self-merge": "الصفحتان المصدر والوجهة هما نفس الصفحة.",
+       "mergehistory-fail-timestamps-overlap": "مراجعات المصدر تتداخل أو تأتي بعد مراجعات الوجهة.",
        "mergehistory-fail-toobig": "لا يمكن إجراء دمج التاريخ بسبب تجاوز حدود عدد المراجعات المنقولة {{PLURAL:$1|المراجعة الواحدة|المراجعتين|$1 مراجعات|$1 مراجعة}}.",
        "mergehistory-no-source": "الصفحة المصدر $1 غير موجودة.",
        "mergehistory-no-destination": "الصفحة الهدف $1 غير موجودة.",
        "right-createpage": "إنشاء الصفحات (التي ليست صفحات نقاش)",
        "right-createtalk": "إنشاء صفحات النقاش",
        "right-createaccount": "إنشاء حسابات مستخدم جديدة",
+       "right-autocreateaccount": "تسجيل الدخول باستخدام حساب مستخدم خارجي",
        "right-minoredit": "التعليم على التعديلات كطفيفة",
        "right-move": "نقل الصفحات",
        "right-move-subpages": "نقل الصفحات مع صفحاتها الفرعية",
        "right-managechangetags": "إنشاء وحذف [[Special:Tags|الوسوم]] من قاعدة البيانات",
        "right-applychangetags": "تطبيق [[Special:Tags|الوسوم]]  مع التغييرات التي أجريتها.",
        "grant-generic": "\"$1\" حزمة الصلاحيات",
+       "grant-group-page-interaction": "التفاعل مع الصفحات",
+       "grant-group-file-interaction": "التفاعل مع الوسائط",
+       "grant-group-watchlist-interaction": "التفاعل مع قائمة المراقبة",
+       "grant-group-email": "إرسال بريد إلكتروني",
+       "grant-group-high-volume": "أداء نشاط كبير الحجم",
+       "grant-group-customization": "التخصيص والتفضيلات",
+       "grant-group-administration": "أداء عمليات إدارية",
+       "grant-group-other": "نشاطات متفرقة",
+       "grant-blockusers": "منع ورفع المنع عن المستخدمين",
+       "grant-createaccount": "إنشاء حسابات",
+       "grant-createeditmovepage": "إنشاء وتعديل ونقل الصفحات",
+       "grant-delete": "حذف الصفحات والمراجعات ومدخلات السجلات",
+       "grant-editmyoptions": "تعديل تفضيلاتك",
+       "grant-editmywatchlist": "تعديل قائمة مراقبتك",
+       "grant-editpage": "تعديل صفحات موجودة",
+       "grant-editprotected": "تعديل صفحات محمية",
+       "grant-highvolume": "تعديل كبير الحجم",
+       "grant-patrol": "تغييرات دورية للصفحات",
+       "grant-protect": "حماية وإزالة حماية الصفحات",
+       "grant-rollback": "استرجاع التغييرات في الصفحات",
+       "grant-sendemail": "إرسال بريد إلكتروني للمستخدمين الآخرين",
+       "grant-uploadeditmovefile": "رفع وإزاحة ونقل الملفات",
        "grant-uploadfile": "ارفع ملفات جديدة",
+       "grant-basic": "الصلاحيات الأساسية",
+       "grant-viewdeleted": "عرض الملفات والصفحات المحذوفة",
+       "grant-viewmywatchlist": "عرض قائمة مراقبتك",
        "newuserlogpage": "سجل إنشاء المستخدمين",
        "newuserlogpagetext": "هذا سجل بعمليات إنشاء المستخدمين.",
        "rightslog": "سجل صلاحيات المستخدمين",
        "action-createpage": "إنشاء الصفحات",
        "action-createtalk": "إنشاء صفحات النقاش",
        "action-createaccount": "إنشاء حساب المستخدم هذا",
+       "action-autocreateaccount": "تلقائيا إنشاء هذا الحساب مستخدم خارجي",
        "action-history": "اعرض تاريخ هذه الصفحة",
        "action-minoredit": "التعليم على هذا التعديل كطفيف",
        "action-move": "نقل هذه الصفحة",
        "recentchanges-label-bot": "تعديل أجراه بوت",
        "recentchanges-label-unpatrolled": "لم يراجع هذا التعديل إلى الآن",
        "recentchanges-label-plusminus": "حجم الصفحة تغير بهذا العدد من وحدات البايت",
-       "recentchanges-legend-heading": "شرح",
+       "recentchanges-legend-heading": "<strong>شرح:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (راجع أيضا [[Special:NewPages|قائمة الصفحات الجديدة]])",
        "recentchanges-submit": "أظهر",
        "rcnotefrom": "بالأسفل التغييرات منذ <strong>$2</strong> (إلى <strong>$1</strong> معروضة).",
        "recentchangeslinked-to": "أظهر التغييرات للصفحات الموصولة للصفحة المعطاة عوضا عن ذلك",
        "recentchanges-page-added-to-category": "[[:$1]] أضيفت إلى التصنيف",
        "recentchanges-page-added-to-category-bundled": "أضيفت [[:$1]] و{{PLURAL:$2|صفحة واحدة|صفحتان|$2 صفحات}} إلى التصنيف",
+       "recentchanges-page-removed-from-category": "أزيلت [[:$1]] من التصنيف",
        "recentchanges-page-removed-from-category-bundled": "أزيلت [[:$1]] و{{PLURAL:$2|صفحة واحدة|صفحتان|$2 صفحات}} من التصنيف",
+       "autochange-username": "تغيير آلي لميدياويكي",
        "upload": "ارفع ملفا",
        "uploadbtn": "ارفع الملف",
        "reuploaddesc": "إلغاء الرفع والرجوع إلى استمارة الرفع",
        "uploadstash-clear": "مسح الملفات المخبأة",
        "uploadstash-nofiles": "ليس لديك أي ملفات مخبأة.",
        "uploadstash-badtoken": "لم ينجح أداء ذلك العمل، ربما لأن وثائق تفويض التحرير الخاصة بك منتهية الصلاحية. حاول مرة أخرى.",
-       "uploadstash-errclear": "Ù\84Ù\85 ØªÙ\86جح عملية مسح الملفات.",
+       "uploadstash-errclear": "Ù\81Ø´Ù\84ت عملية مسح الملفات.",
        "uploadstash-refresh": "تحديث قائمة الملفات",
        "invalid-chunk-offset": "قطعة أوفست غير صالحة",
        "img-auth-accessdenied": "رفض الوصول",
        "apihelp": "مساعدة API",
        "apihelp-no-such-module": "الوحدة \"$1\" غير موجودة.",
        "apisandbox": "ملعب API",
+       "apisandbox-jsonly": "الجافا سكريبت مطلوبة لاستخدام ملعب API",
        "apisandbox-fullscreen": "وسع اللوحة",
        "apisandbox-unfullscreen": "أظهر الصفحة",
        "apisandbox-submit": "عمل الطلب",
        "apisandbox-reset": "إفراغ",
        "apisandbox-retry": "أعد المحاولة",
+       "apisandbox-no-parameters": "وحدة API هذه ليس بها معاملات.",
+       "apisandbox-helpurls": "وصلات المساعدة",
        "apisandbox-examples": "أمثلة",
+       "apisandbox-dynamic-parameters": "معاملات إضافية",
+       "apisandbox-dynamic-parameters-add-label": "اضافة أليات:",
+       "apisandbox-dynamic-parameters-add-placeholder": "اسم المعامل",
+       "apisandbox-dynamic-error-exists": "يوجد بالفعل معامل باسم \"$1\".",
+       "apisandbox-deprecated-parameters": "معاملات مهملة",
+       "apisandbox-submit-invalid-fields-title": "بعض الحقول غير صالحة",
+       "apisandbox-submit-invalid-fields-message": "برجاء تصحيح الحقل المعلم والمحاولة مرة أخرى.",
        "apisandbox-results": "النتائج",
+       "apisandbox-sending-request": "إرسال طلب API ...",
+       "apisandbox-loading-results": "استقبال طلبات API ...",
        "apisandbox-request-url-label": "مسار الطلب:",
-       "apisandbox-request-time": "وقت الطلب: $1",
+       "apisandbox-request-time": "وقت الطلب: {{PLURAL:$1|$1 ms}}",
+       "apisandbox-results-fixtoken": "رمز الصحيح وإعادة الموافقة",
+       "apisandbox-alert-page": "هناك حقول غير صالحة في هذه الصفحة.",
+       "apisandbox-alert-field": "قيمة هذا الحقل غير صالحة.",
        "booksources": "مصادر كتاب",
        "booksources-search-legend": "البحث عن مصادر الكتب",
        "booksources-isbn": "ردمك:",
        "listgrouprights-namespaceprotection-header": "قيود النطاق",
        "listgrouprights-namespaceprotection-namespace": "النطاق",
        "listgrouprights-namespaceprotection-restrictedto": "الصلاحيات التي تسمح للمستخدم بالتعديل",
+       "listgrants": "المنح",
+       "listgrants-grant": "المنحة",
+       "listgrants-rights": "الصلاحيات",
        "trackingcategories": "تصانيف التتبع",
        "trackingcategories-summary": "تسرد هذه الصفحة تصانيف التتبع التي ينشئها برنامج ميدياويكي. يمكن تغيير أسمائها بتغيير رسائل النظام في نطاق {{ns:8}}.",
        "trackingcategories-msg": "تصانيف التتبع",
        "wlshowhidebots": "البوتات",
        "wlshowhideliu": "المسجلين",
        "wlshowhideanons": "المجهولين",
+       "wlshowhidepatr": "التعديلات المراجعة",
        "wlshowhidemine": "تعديلاتي",
        "wlshowhidecategorization": "تصنيف الصفحات",
        "watchlist-options": "خيارات قائمة المراقبة",
        "rollbackfailed": "لم ينجح الاسترجاع",
        "cantrollback": "لم يمكن استرجاع التعديل؛\nآخر مساهم هو المؤلف الوحيد لهذه الصفحة.",
        "alreadyrolled": "لم يمكن استرجاع آخر تعديل ل[[$1]] بواسطة [[User:$2|$2]] ([[User talk:$2|نقاش]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])؛\nشخص آخر عدل أو استرجع الصفحة بالفعل.\n\nآخر تعديل كان بواسطة [[User:$3|$3]] ([[User talk:$3|نقاش]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "ملخص التعديل كان: \"''$1''\".",
+       "editcomment": "ملخص التعديل كان:<em>$1</em>.",
        "revertpage": "استرجع تعديلات [[Special:Contributions/$2|$2]] ([[User talk:$2|نقاش]]) حتى آخر مراجعة ل[[User:$1|$1]]",
        "revertpage-nouser": "استرجع تعديلات مستخدم مخفيّ حتى آخر مراجعة ل{{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "استرجع تعديلات $1؛\nاسترجع حتى آخر نسخة بواسطة $2.",
        "changecontentmodel-title-label": "عنوان الصفحة",
        "changecontentmodel-model-label": "نموذج محتوى جديد",
        "changecontentmodel-reason-label": "السبب:",
+       "changecontentmodel-submit": "تغيير",
        "changecontentmodel-success-title": "نموذج المحتوى تم تغييره",
        "changecontentmodel-success-text": "نوع المحتوى ل[[:$1]] تم تغييره.",
        "changecontentmodel-cannot-convert": "المحتوى على [[:$1]] لا يمكن تحويله لنوع من $2.",
        "block-log-flags-hiddenname": "اسم المستخدم مخفي",
        "range_block_disabled": "إمكانية مدير النظام لمنع نطاق معطلة.",
        "ipb_expiry_invalid": "تاريخ الانتهاء غير صحيح.",
+       "ipb_expiry_old": "توقيت انتهاء المنع واقع في الماضي.",
        "ipb_expiry_temp": "عمليات منع أسماء المستخدمين المخفية يجب أن تكون دائمة.",
        "ipb_hide_invalid": "غير قادر على منع الحساب؛ لديه أكثر من {{PLURAL:$1|تعديل واحد|$1 تعديل}}.",
        "ipb_already_blocked": "\"$1\" ممنوع حالياً",
        "export-download": "احفظ كملف",
        "export-templates": "ضمن القوالب",
        "export-pagelinks": "ضمن الصفحات الموصولة إلى عمق:",
+       "export-manual": "اضافة صفحة يدوي:",
        "allmessages": "رسائل النظام",
        "allmessagesname": "الاسم",
        "allmessagesdefault": "النص الافتراضي",
        "javascripttest-pagetext-frameworks": "الرجاء اختيار أحد أطر الاختبارات التالية: $1",
        "javascripttest-pagetext-skins": "قم باختيار الواجهة لإجراء الإحتبارات بها:",
        "javascripttest-qunit-intro": "راجع [$1 وثيقة الاختبار] على mediawiki.org.",
-       "tooltip-pt-userpage": "صفحة المستخدم الخاصة بك",
+       "tooltip-pt-userpage": "{{GENDER:|صفحة المستخدم}} الخاصة بك",
        "tooltip-pt-anonuserpage": "صفحة المستخدم للأيبي الذي تقوم بالتحرير من خلاله",
-       "tooltip-pt-mytalk": "صفحة نقاشك",
+       "tooltip-pt-mytalk": "صفحة {{GENDER:|نقاشك}}",
        "tooltip-pt-anontalk": "نقاش حول التعديلات من عنوان الأيبي هذا",
-       "tooltip-pt-preferences": "تفضيلاتي",
+       "tooltip-pt-preferences": "{{GENDER:|Your}} تفضيلاتي",
        "tooltip-pt-watchlist": "قائمة الصفحات التي تراقب التغييرات التي تحدث بها",
-       "tooltip-pt-mycontris": "قائمة مساهماتك",
+       "tooltip-pt-mycontris": "قائمة{{GENDER:|your}}  مساهماتك",
+       "tooltip-pt-anoncontribs": "قائمة بتعديلات قام بها عنوان الآي بي",
        "tooltip-pt-login": "يفضل أن تسجل الدخول، لكنه ليس إلزاميا.",
        "tooltip-pt-logout": "تسجيل الخروج",
        "tooltip-pt-createaccount": "نشجعك على عمل حساب وتسجيل دخولك; لكنه غير ضروري على اي حال",
        "tooltip-t-recentchangeslinked": "أحدث التغييرات في الصفحات الموصولة من هذه الصفحة",
        "tooltip-feed-rss": "تلقيم أر إس إس لهذه الصفحة",
        "tooltip-feed-atom": "تلقيم أتوم لهذه الصفحة",
-       "tooltip-t-contributions": "رؤية قائمة مساهمات هذا المستخدم",
-       "tooltip-t-emailuser": "أرسل رسالة لهذا المستخدم",
+       "tooltip-t-contributions": "رؤية قائمة مساهمات {{GENDER:$1|this user}}",
+       "tooltip-t-emailuser": "أرسل رسالة {{GENDER:$1|لهذا المستخدم|لهذه المستخدمة}}",
        "tooltip-t-info": "المزيد من المعلومات عن هذه الصفحة",
        "tooltip-t-upload": "ارفع ملفات",
        "tooltip-t-specialpages": "قائمة بكل الصفحات الخاصة",
        "pageinfo-language": "لغة محتوى الصفحة",
        "pageinfo-content-model": "نموذج محتوى الصفحة",
        "pageinfo-robot-policy": "فهرسة الروبوتات",
-       "pageinfo-robot-index": "مسموحة",
-       "pageinfo-robot-noindex": "غير مسموحة",
+       "pageinfo-robot-index": "مسموح بها",
+       "pageinfo-robot-noindex": "غير مسموح بها",
        "pageinfo-watchers": "عدد المراقبين",
        "pageinfo-visiting-watchers": "عدد مراقبي الصفحة الذين زاروا التعديلات الأخيرة",
        "pageinfo-few-watchers": "أقل من {{PLURAL:$1||مراقب واحد|مراقبين اثنين|$1 مراقبين|$1 مراقباً|$1 مراقب}}",
+       "pageinfo-few-visiting-watchers": "قد يكون أو لا يكون هناك مستخدم  يزور ويشاهد اخر تعديلات",
        "pageinfo-redirects-name": "عدد التحويلات إلى هذه الصفحة",
        "pageinfo-subpages-name": "الصفحات الفرعية لهذه الصفحة",
        "pageinfo-subpages-value": "$1 ({{PLURAL:$2|لا تحويلات|تحويلة واحدة|تحويلتان|$2 تحويلات|$2 تحويلة}}؛ $3 {{PLURAL:$3|من غير  التحويلات}})",
        "pageinfo-category-files": "عدد الملفات",
        "markaspatrolleddiff": "علم بعلامة المراجعة",
        "markaspatrolledtext": "علم هذه الصفحة بعلامة المراجعة",
+       "markaspatrolledtext-file": "علم نسخة الملف هذه بعلامة المراجعة",
        "markedaspatrolled": "علمت بعلامة المراجعة",
        "markedaspatrolledtext": "المراجعة المختارة من [[:$1]] علمت بعلامة المراجعة.",
        "rcpatroldisabled": "مراجعة أحدث التغييرات معطلة",
        "svg-long-error": "ملف SVG غير صالح: $1",
        "show-big-image": "الملف الأصلي",
        "show-big-image-preview": "حجم هذه المعاينة: $1.",
+       "show-big-image-preview-differ": "حجم معاينة $3 لذلك الملف ذي الامتداد $2: $1.",
        "show-big-image-other": "{{PLURAL:$2||البعد الآخر|البعدان الآخران|الأبعاد الأخرى}}: $1.",
        "show-big-image-size": "$1 × $2 بكسل",
        "file-info-gif-looped": "ملفوف",
        "exif-compression-34712": "جيه بي إي جي2000",
        "exif-copyrighted-true": "محفوظ الحقوق",
        "exif-copyrighted-false": "حالة حقوق النشر غير مُعرّفة",
+       "exif-photometricinterpretation-1": "أسود وأبيض (الأسود 0)",
        "exif-photometricinterpretation-2": "آر جي بي",
        "exif-photometricinterpretation-6": "واي سب سر",
        "exif-unknowndate": "تاريخ غير معروف",
        "hebrew-calendar-m12-gen": "أيلول",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|نقاش]])",
        "timezone-utc": "ت ع م",
+       "timezone-local": "محلي",
        "duplicate-defaultsort": "'''تحذير:''' مفتاح الترتيب الافتراضي \"$2\" يتجاوز مفتاح الترتيب الافتراضي السابق \"$1\".",
        "duplicate-displaytitle": "<strong>تحذير:</strong> أعرض عنوان \"$2\" تجاهل العنوان المعروض سابقا \"$1\".",
        "invalid-indicator-name": "<strong>خطأ:</strong> لا يجوز أن تبقى خاصية <code>name</code> لمؤشرات وضع الصفحة فارغةً.",
        "version-libraries-license": "الترخيص",
        "version-libraries-description": "الوصف",
        "version-libraries-authors": "المؤلفون",
-       "redirect": "تحويل حسب رقم الملف أو رقم المستخدم أو رقم الصفحة أو رقم مراجعة",
+       "redirect": "تحويل حسب  الملف , المستخدم ,الصفحة , معرف الدخول",
        "redirect-legend": "تحويل إلى ملف أو صفحة",
        "redirect-summary": "هذه الصفحة الخاصة تحوّل إلى ملف (باسمه) أو صفحة (برقم إحدى مراجعاتها) أو إلى صفحة مستخدم (برقمه التعريفي). الاستخدام [[{{#Special:Redirect}}/file/Example.jpg]] أو [[{{#Special:Redirect}}/revision/328429]] أو [[{{#Special:Redirect}}/user/101]].",
        "redirect-submit": "حوّل",
        "tags-deactivate": "تعطيل",
        "tags-hitcount": "{{PLURAL:$1|لا تغييرات|تغيير واحد|تغييران|$1 تغييرات|$1 تغييرا|$1 تغيير}}",
        "tags-manage-no-permission": "ليس لديك صلاحية إدارة وسوم التغيير.",
+       "tags-manage-blocked": "لا يمكنك إدارة علامات التغيير في حين منعت.",
        "tags-create-heading": "إنشاء وسم جديد",
        "tags-create-explanation": "في الوضع الافتراضي، الوسوم الجديدة المنشأة سيتاح استخدامها للبوتات والمستخدمين.",
        "tags-create-tag-name": "اسم الوسم:",
        "tags-create-reason": "السبب:",
        "tags-create-submit": "أنشئ",
        "tags-create-no-name": "عليك أن تحدد اسم الوسم.",
+       "tags-create-invalid-title-chars": "يجب أن لا تحتوي أسماء العلامات الأحرف التي لا يمكن استخدامها في عناوين الصفحات.",
        "tags-create-already-exists": "الوسم \"$1\" موجود بالفعل.",
        "tags-create-warnings-below": "هل تود متابعة إنشاء الوسم؟",
        "tags-delete-title": "احذف الوسم",
        "tags-deactivate-reason": "سبب",
        "tags-deactivate-not-allowed": "من غير الممكن تعطيل الوسم \"$1\".",
        "tags-deactivate-submit": "عطل",
+       "tags-apply-no-permission": "ليس لديك إذن لتطبيق علامات التغيير جنبا إلى جنب مع التغييرات.",
+       "tags-apply-blocked": "لا يمكنك تطبيق علامات التغيير جنبا إلى جنب مع التغييرات في حين منعت.",
        "tags-apply-not-allowed-one": "السوم \"$1\" غير مسموح أن يتم تطبيقه يدويا.",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|الوسم|الوسوم}} التالية غير مسموح أن يتم تطبيقها يدويا: $1",
        "tags-update-no-permission": "أنت لا تمتلك السماح لإضافة أو إزالة وسوم التغيير من المراجعات أو مدخلات السجل الفردية.",
+       "tags-update-blocked": "لا يمكنك إضافة أو إزالة العلامات التغيير بينماهي محظورة.",
        "tags-update-add-not-allowed-one": "الوسم \"$1\" غير مسموح أن تتم إضافته يدويا.",
        "tags-update-add-not-allowed-multi": "The following {{PLURAL:$2|الوسم|الوسوم}} التالية غير مسموح أن تتم إضافتها يدويا: $1",
        "tags-update-remove-not-allowed-one": "من غير المسموح بإزالة وسم \"$1\".",
        "tags-edit-logentry-selected": "{{PLURAL:$1|حدث سجل مختار|أحداث سجل مختارة}}:",
        "tags-edit-revision-legend": "أضف أو أزل الوسوم من {{PLURAL:$1|هذه المراجعة|كل $1 المراجعات}}",
        "tags-edit-existing-tags": "الوسوم الموجودة:",
-       "tags-edit-existing-tags-none": "\"لا وسوم\"",
+       "tags-edit-existing-tags-none": "</em>لا وسوم</em>",
        "tags-edit-new-tags": "وسوم جديدة:",
        "tags-edit-add": "أضف هذه الوسوم:",
        "tags-edit-remove": "أزل هذه الوسوم:",
        "tags-edit-reason": "السبب:",
        "tags-edit-revision-submit": "طبق التغييرات ل{{PLURAL:$1|هذه المراجعة|$1 مراجعات}}",
        "tags-edit-logentry-submit": "طبق التغييرات ل{{PLURAL:$1|مدخلة السجل هذه|$1 مدخلات السجل}}",
-       "tags-edit-success": "طبقت التغييرات بنجاح.",
+       "tags-edit-success": "طبقت التغييرات.",
        "tags-edit-failure": "التغييرات لم تطبق: $1",
        "tags-edit-nooldid-title": "مراجعة هدف غير صالحة",
        "tags-edit-none-selected": "من فضلك اختر على الأقل وسما واحدا للإضافة أو الإزالة.",
        "feedback-error1": "خطأ: لا يمكن التعرف عليها من API",
        "feedback-error2": "خطأ: فشل في تحرير",
        "feedback-error3": "خطأ : لا توجد استجابة من API",
+       "feedback-error4": "خطأ: غير قادر على نشر الى ان تعطي عنوان",
        "feedback-message": "الرسالة:",
        "feedback-subject": "الموضوع:",
        "feedback-submit": "إرسال",
        "api-error-publishfailed": "خطأ داخلي: لم ينجح الخادوم في نشر ملف مؤقت",
        "api-error-stasherror": "حدث خطأ أثناء رفع الملف لتخزينه.",
        "api-error-stashedfilenotfound": "لم يعثر على الملف المحجوب عند محاولة رفعه من الحجب.",
+       "api-error-stashpathinvalid": "وكان الطريق الذي يجب أن يتم العثور على ملف مخبئ غير صالح.",
        "api-error-stashfilestorage": "حدث خطأ أثناء رفع الملف لتخزينه.",
+       "api-error-stashzerolength": "لا يمكن أن خادم تخبئة الملف، لأنه يحتوي على طول صفري.",
        "api-error-stashnotloggedin": "يجب عليك تسجيل الدخول لحفظ الملفات في مرفوعاتك.",
        "api-error-stashwrongowner": "الملف الذي كنت تحاول الوصول اليه في مخبوائتك ليس لك.",
        "api-error-stashnosuchfilekey": "الملف الذي كنت تحاول الوصول اليه في مخبوائتك غير موجود.",
        "expand_templates_generate_xml": "اعرض شجرة XML parse",
        "expand_templates_generate_rawhtml": "أظهر خام HTML",
        "expand_templates_preview": "عرض مسبق",
-       "pagelanguage": "اختيار لغة الصفحة",
+       "expand_templates_preview_fail_html": "<em>عذرا! لم نستطع معالجة تعديلك بسبب فقدان بيانات الجلسة.\n\nلأن {{SITENAME}} بها HTML الخام مفعلة، العرض المسبق مخفي كاحتياط ضد هجمات الجافا سكريبت.</em>\n\n<strong>إذا كانت هذه محاولة تعديل صادقة، من فضلك حاول مرة أخرى.</strong>\nإذا كانت مازالت لا تعمل، حاول [[Special:UserLogout|تسجيل الخروج]] ثم تسجيل الدخول مجددا.و تاكد في  متصفحك من الكوكيز  الخاصة  بهذا الموقع.",
+       "expand_templates_input_missing": "يجب تقديم بعض المدخلات النصية على الأقل.",
+       "pagelanguage": "تغيير لغة الصفحة",
        "pagelang-name": "صفحة",
        "pagelang-language": "اللغة",
        "pagelang-use-default": "استخدام اللغة الافتراضية",
        "log-description-pagelang": "هذا سجل تغيرات في صفحة اللغات.",
        "logentry-pagelang-pagelang": " {{GENDER:$2|غيَّر|غيَّرت}} $1 لغة الصفحة «$3» من $4 إلى $5.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (مفعل)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''معطل''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>ملغاة</strong>)",
        "mediastatistics": "إحصاءات الميديا",
        "mediastatistics-summary": "إحصاءات عن أنماط الملفات المرفوعة، وتشمل أحدث نسخة من الملف فقط، حيث تستبعد النسخ القديمة أو المحذوفة من الملفات.",
        "mediastatistics-nbytes": "{{PLURAL:$1|بايت واحد|بايتان اثنان|$1 بايتات|$1 بايتاً|$1 بايت}} ($2; $3%)",
+       "mediastatistics-bytespertype": "الحجم الكلي لكل الملفات: {{PLURAL:$1|بايت$1|$1 بايت}}($2; $3%).",
+       "mediastatistics-allbytes": "الحجم الكلي لكل الملفات: {{PLURAL:$1|$1 بايت}} ($2).",
        "mediastatistics-table-mimetype": "نوع MIME",
        "mediastatistics-table-extensions": "الامتدادات الممكنة",
        "mediastatistics-table-count": "عدد الملفات",
        "mw-widgets-titleinput-description-new-page": "الصفحة غير موجودة بعد",
        "mw-widgets-titleinput-description-redirect": "تحويل إلى $1",
        "api-error-blacklisted": "اختر عنوانا مختلفا ومفهوما.",
+       "sessionmanager-tie": "لا يمكن جمع أنواع استيثاق متعددة: $1.",
        "sessionprovider-generic": "جلسات $1",
+       "sessionprovider-mediawiki-session-cookiesessionprovider": "جلسات قائمة على ملفات تعريف الارتباط (كوكيز)",
+       "sessionprovider-nocookies": "قد يتم تعطيل الكوكيز. تأكد من تمكين ملفات تعريف الأرتباط وأبد مرةأخرى.",
        "randomrootpage": "صفحة جذر عشوائية"
 }
index 85f2f53..9c7ef37 100644 (file)
@@ -8,7 +8,8 @@
                        "Man2fly2002",
                        "Michaelovic",
                        "The Thadman",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "ܪܫܘܡ ܣܪܛܐ ܬܚܝܬ ܐܣܪܐ:",
        "resetpass-submit-cancel": "ܒܛܘܠ",
        "resetpass-temp-password": "ܡܠܬܐ ܕܥܠܠܐ ܙܒܢܢܝܬܐ:",
        "passwordreset": "ܣܘܡ ܡܠܬܐ ܕܥܠܠܐ ܙܒܢ ܐܚܪܝܢ",
-       "passwordreset-legend": "ܣܘܡ ܡܠܬܐ ܕܥܠܠܐ ܙܒܢ ܐܚܪܝܢ",
        "passwordreset-username": "ܫܡܐ ܕܡܦܠܚܢܐ:",
        "passwordreset-domain": "ܪܘܚܬܐ:",
        "passwordreset-email": "ܡܘܢܥܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ:",
-       "passwordreset-emailsent": "ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ ܐܫܬܕܪ ܠܣܘܝܡ ܡܠܬܐ ܕܥܠܠܐ ܙܒܢ ܐܚܪܝܢ",
+       "passwordreset-emailsentemail": "ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ ܐܫܬܕܪ ܠܣܘܝܡ ܡܠܬܐ ܕܥܠܠܐ ܙܒܢ ܐܚܪܝܢ",
        "changeemail": "ܫܚܠܦ ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ",
        "bold_sample": "ܟܬܒܬܐ ܥܒܝܬܐ",
        "bold_tip": "ܟܬܒܬܐ ܥܒܝܬܐ",
        "recentchanges-label-bot": "ܒܘܬ (bot) ܥܒܕ ܗܢܐ ܫܘܚܠܦܐ",
        "recentchanges-label-unpatrolled": "ܫܘܚܠܦܐ ܗܢܐ ܠܐ ܗܘ ܟܪܝܟܐ ܠܗܫܐ",
        "recentchanges-label-plusminus": "ܥܓܪܐ ܕܦܐܬܐ ܐܫܬܚܠܦ ܒܗܢܐ ܡܢܝܢܐ ܡܢ ܒܝܛ̈",
-       "recentchanges-legend-heading": "'''ܦܘܫܩܐ:'''",
+       "recentchanges-legend-heading": "<strong>ܦܘܫܩܐ:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ܐܦ ܚܙܝ [[Special:NewPages|ܡܟܬܒܘܬܐ ܕܦܐܬܬ̈ܐ ܚܕ̈ܬܬܐ]])",
        "rcnotefrom": "ܠܬܚܬ ܫܘܚܠܦ̈ܐ ܕܡܢ '''$2''' (ܥܕ '''$1''' ܡܬܚܙܝܢ̈ܐ).",
        "rclistfrom": "ܚܘܝ ܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ ܡܢ $3 $2",
        "upload-description": "ܫܘܡܗܐ ܕܠܦܦܐ",
        "upload-options": "ܓܒܝܬ̈ܐ ܕܐܣܩܬܐ ܕܠܦܦܐ",
        "watchthisupload": "ܪܗܝ ܗܢܐ ܠܦܦܐ",
-       "upload-success-subj": "ܠܦܦܐ ܐܣܩܬ ܢܨܝܚܐܝܬ",
-       "upload-failure-subj": "ܩܛܪܐ ܒܐܣܩܬܐ ܕܠܦܦܐ",
-       "upload-failure-msg": "ܐܝܬ ܗܘܐ ܩܛܪܐ ܒܠܦܦܐ ܕܐܣܩܬ ܡܢ [$2]:\n\n$1",
-       "upload-warning-subj": "ܙܘܗܪܐ ܥܠ ܐܣܩܬܐ ܕܠܦܦܐ",
        "upload-proto-error": "ܦܪܘܛܘܩܘܠ ܠܐ ܬܪܝܨܐ",
        "upload-file-error": "ܦܘܕܐ ܓܘܝܐ",
        "upload-misc-error": "ܦܘܕܐ ܠܐ ܝܕܝܥܐ ܒܐܣܩܬܐ ܕܠܦܦܐ",
        "unusedtemplateswlh": "ܐܣܘܪ̈ܐ ܐܚܪ̈ܢܐ",
        "randompage": "ܡܓܠܬܐ ܚܘܝܚܬܐ",
        "randompage-nopages": "ܠܝܬ ܦܐܬܬ̈ܐ ܒ{{PLURAL:$2|ܚܩܠܐ ܕ|ܚܩܠܬ̈ܐ ܕ}}: $1.",
+       "randomincategory-submit": "ܙܠ",
        "randomredirect": "ܨܘܝܒ̈ܐ ܚܘܝܚ̈ܐ",
        "randomredirect-nopages": "ܠܝܬ ܨܘܝܒ̈ܐ ܒܚܩܠܐ ܕ\"$1\".",
        "statistics": "ܚܒܝܫܘܬ ܡܢܝܢܐ",
        "nlinks": "$1 {{PLURAL:$1|ܐܣܘܪܐ|ܐܣܘܪ̈ܐ}}",
        "nmembers": "$1 {{PLURAL:$1|ܗܕܡܐ|ܗܕ̈ܡܐ}}",
        "nrevisions": "$1 {{PLURAL:$1|ܬܢܝܬܐ|ܬܢܝܬ̈ܐ }}",
-       "nviews": "$1 {{PLURAL:$1|ܚܘܘܝܐ|ܚܘܘܝ̈ܐ}}",
        "specialpage-empty": "ܠܝܬ ܦܠܛ̈ܐ ܒܬܫܪܪܐ ܗܢܐ.",
        "lonelypages": "ܦܐܬܬ̈ܐ ܝܬܡܬ̈ܐ",
        "uncategorizedpages": "ܦܐܬܬ̈ܐ ܠܐ ܣܕܝܪ̈ܬܐ",
        "pager-newer-n": "{{PLURAL:$1|1 1 ܚܕܬܐ|$1 ܚܕ̈ܬܐ}}",
        "pager-older-n": "{{PLURAL:$1|1 ܥܬܝܩܐ|$1 ܥܬܝܩ̈ܐ}}",
        "suppress": "ܚܝܘܪܐ",
+       "apisandbox": "ܣܢܕܘܩܐ ܕܚܠܐ ܕܚܙܝܐ ܕܚܘܪܙܐ ܕܬܓܡܪܬܐ (API)",
+       "apisandbox-reset": "ܐܣܦܩ",
+       "apisandbox-examples": "ܛܘܦܣܐ",
+       "apisandbox-results": "ܦܠܛܐ",
        "booksources": "ܙܠ",
        "booksources-search-legend": "ܒܨܝ ܥܠ ܡܒܘܥ̈ܐ ܕܟܬܒ̈ܐ",
        "specialloguserlabel": "ܡܦܩܢܐ:",
        "listgrouprights-removegroup-self-all": "ܠܚܝ ܟܠ ܟܢܘܫܬ̈ܐ ܡܢ ܚܘܫܒܢܗ ܕܝܠܢܝܐ",
        "mailnologin": "ܠܝܬ ܡܘܢܥܐ ܠܫܘܕܪܐ",
        "emailuser": "ܫܕܪ ܐܓܪܬܐ ܠܗܢܐ ܡܦܠܚܢܐ",
-       "emailpage": "ܫܕܪ ܐܓܪܬܐ ܒܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ ܠܡܦܠܚܢܐ",
        "defemailsubject": "ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ  ܡܢ ܡܦܠܚܢܐ \"$1\"",
        "noemailtitle": "ܠܝܬ ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ",
        "emailusername": "ܫܡܐ ܕܡܦܠܚܢܐ:",
        "deletereasonotherlist": "ܥܠܬܐ ܐܚܪܬܐ",
        "delete-edit-reasonlist": "ܫܚܠܦ ܥܠܠܬ̈ܐ ܕܫܝܦܐ",
        "rollbacklink": "ܐܦܢܝ",
-       "editcomment": "ܦܣܝܩܬ̈ܐ ܕܫܘܚܠܦܐ ܗܘܐ: \"''$1''\".",
+       "editcomment": "ܦܣܝܩܬ̈ܐ ܕܫܘܚܠܦܐ ܗܘܐ: <em>$1</em>.",
        "revertpage": "ܐܗܦܟ ܫܘܚܠܦ̈ܐ ܒܝܕ [[Special:Contributions/$2|$2]] ([[User talk:$2|ܡܡܠܠܐ]]) ܠܬܢܝܬܐ ܐܚܪܝܬܐ ܒܝܕ [[User:$1|$1]]",
        "sessionfailure-title": "ܡܘܬܒܐ ܠܐ ܢܨܚܬ",
        "protectlogpage": "ܣܓܠܐ ܕܢܛܪܐ",
        "ipb-needreblock": "\"$1\" ܡܚܪܡܐ ܗܘ ܡܢ ܟܕܘ\nDo you want to change the settings?",
        "move-page": "ܫܢܝ $1",
        "move-page-legend": "ܫܢܝ ܦܐܬܐ",
-       "movearticle": "ܫܢܝ ܦܐܬܐ:",
        "newtitle": "ܠܫܡܐ ܚܕܬܐ:",
        "move-watch": "ܪܗܝ ܦܐܬܐ ܗܕܐ",
        "movepagebtn": "ܫܢܝ ܦܐܬܐ",
        "movelogpage": "ܣܓܠܐ ܕܫܘܢܝܐ",
        "movereason": "ܥܠܬܐ:",
        "revertmove": "ܐܦܢܝ",
-       "delete_and_move": "ܫܘܦ ܘܫܢܝ",
        "delete_and_move_confirm": "ܐܝܢ, ܫܘܦ ܦܐܬܐ",
        "move-leave-redirect": "ܫܒܘܩ ܨܘܝܒܐ ܒܬܪܟ",
        "export": "ܐܦܩ ܦܐܬܬ̈ܐ",
index 72c1e12..354c74b 100644 (file)
@@ -5,13 +5,15 @@
                        "Oldstoneage",
                        "아라",
                        "Amire80",
-                       "GeekEmad"
+                       "GeekEmad",
+                       "Macofe"
                ]
        },
        "tog-underline": "تسطار الوصيلات:",
        "tog-hideminor": "خبي الكتيبات الصغيرة في التبديلات التوالا",
        "tog-hidepatrolled": "خبي الكتيبات المعسوسه في التبديلات التوالا",
        "tog-newpageshidepatrolled": "خبي الباجات المعسوسه اللي في ليستت الباجات الجدد",
+       "tog-hidecategorization": "خبّي التصناف تاع الصفحات",
        "tog-extendwatchlist": "دلّي الليستة تاع التتباع باش تورّي كامل التبديلات، ماشي برك غير التوالا",
        "tog-usenewrc": "جمّع الـتبدالات بل صفحة فل تبدالات الـجديدة و الـليستة تاع الـعسّة",
        "tog-numberheadings": "رقّم العلاون تاع القسيمات",
        "tog-watchlisthidebots": "خبّي الـتبدالات تاع الـروبويات فل ليستة تاع التتباع تاعي",
        "tog-watchlisthideminor": "خبّي الـتبدالات الـصغيرة من الـليستة تاعي تاع التتباع",
        "tog-watchlisthideliu": "خبّي فل قايمة تاع التتباع تاعي الـتبدالات الـمديورة من عند الـمستعمليين الـمتماركيين",
+       "tog-watchlistreloadautomatically": "عاود شارجي الليستة تاع التتباع كي تبدّل الفيلتراج (يستحق جافاسكريبت)",
        "tog-watchlisthideanons": "خبّي فل قايمة تاع التتباع تاعي الـتبدالات الـمديورة من عند الـمستعمليين الـماشي متماركيين",
        "tog-watchlisthidepatrolled": "خبّي الـتبدالات تاع الـمتبّعة فل ليستة تاع التتباع تاعي",
+       "tog-watchlisthidecategorization": "خبّي التصناف تاع الصفحات",
        "tog-ccmeonemails": "ابعت لي نسخة تاع الـإيمالات الّي نبعتهم لل مستعمليين لخرين",
        "tog-diffonly": "ما تورّيش الـمضمون تاع الـصفحات تحت الـفروقات",
        "tog-showhiddencats": "ورّي الـفصلات الـمخبّيين",
@@ -57,7 +61,7 @@
        "editfont-serif": "حروف بل زوايد",
        "sunday": "الحد",
        "monday": "لثنين",
-       "tuesday": "اÙ\84تÙ\84اتÙ\87",
+       "tuesday": "اÙ\84Ø«Ù\84اث",
        "wednesday": "لاربعه",
        "thursday": "الخميس",
        "friday": "الجمعه",
        "january": "جانفي",
        "february": "فيفري",
        "march": "مارس",
-       "april": "Ø£فريل",
+       "april": "افريل",
        "may_long": "ماي",
        "june": "جوان",
-       "july": "جÙ\88Ù\8aÙ\84Ù\8aا",
-       "august": "Ø£وت",
+       "july": "جÙ\88Ù\8aÙ\84Ù\8aØ©",
+       "august": "اوت",
        "september": "سبتمبر",
-       "october": "Ø£Ù\88كتوبر",
+       "october": "اكتوبر",
        "november": "نوفمبر",
        "december": "ديسمبر",
        "january-gen": "جانفي",
        "jan": "جانفي",
        "feb": "فيفري",
        "mar": "مارس",
-       "apr": "Ø£فريل",
+       "apr": "افريل",
        "may": "ماي",
        "jun": "جوان",
-       "jul": "جÙ\88Ù\8aÙ\84Ù\8aا",
-       "aug": "Ø£وت",
+       "jul": "جÙ\88Ù\8aÙ\84Ù\8aØ©",
+       "aug": "اوت",
        "sep": "سبتمبر",
-       "oct": "Ø£Ù\88كتوبر",
+       "oct": "اكتوبر",
        "nov": "نوفمبر",
        "dec": "ديسمبر",
        "january-date": "جانفيي $1",
        "october-date": "اكتوبر $1",
        "november-date": "نوفامبر $1",
        "december-date": "ديسمبر $1",
-       "pagecategories": "{{PLURAL:$1|فصيلة|فصيلات}}",
+       "period-am": "تاع الصباح",
+       "period-pm": "تاع العشيّة",
+       "pagecategories": "{{PLURAL:$1|كاتيڭوري|كاتيڭوريات}}",
        "category_header": "الباجه في التصنيف \"$1\"",
        "subcategories": "تصنيفات تحتيه",
        "category-media-header": "فيشيي ميلتيميديا فالكاتيكورى  \"$1\"",
        "morenotlisted": "هاد الليستة ما راهيش مكمولة",
        "mypage": "باجه",
        "mytalk": "تقرعيج",
-       "anontalk": "تÙ\86اÙ\82Ø´ Ø¹Ù\84Ù\89 Ø§Ù\84Ù\80 ip Ù\87ادÙ\8a",
-       "navigation": "تبحار",
+       "anontalk": "تÙ\82رعÙ\8aج",
+       "navigation": "ناڥيڭاسيون",
        "and": "&#32;و",
        "qbfind": "فتش",
        "qbbrowse": "اتجوّل فل مضمون",
        "faq": "المسقسية المتعاوده",
        "faqpage": "Project:سؤالات متكرره",
        "actions": "أفعال",
-       "namespaces": "بلاصه تع أسموات",
+       "namespaces": "بلاصة تاع الاسامي",
        "variants": "تنويعات",
-       "navigation-heading": "اÙ\84Ù\82اÙ\8aÙ\85Ø© ØªØ§Ø¹ Ø§Ù\84Ù\80تبحار",
+       "navigation-heading": "اÙ\84Ù\84Ù\8aستة ØªØ§Ø¹ Ø§Ù\84Ù\86اڥÙ\8aڭاسÙ\8aÙ\88Ù\86",
        "errorpagetitle": "غلطه",
        "returnto": "ولي إلى $1.",
-       "tagline": "من{{SITENAME}}",
+       "tagline": "من {{SITENAME}}",
        "help": "معاونة",
        "search": "فتّش",
-       "searchbutton": "فتش",
+       "searchbutton": "فتّش",
        "go": "شايع",
        "searcharticle": "روح",
        "history": "تاريخ الملف",
        "history_short": "تاريخ",
        "updatedmarker": "مبدّل منلي الزيارة تاعي الـتالية",
-       "printableversion": "نسخة تاع طبيع",
-       "permalink": "Ù\88صÙ\8aÙ\84 دايم",
+       "printableversion": "ڥرسيون تقدر تطبعها",
+       "permalink": "Ù\84Ù\8aاÙ\86 دايم",
        "print": "امبريمي",
        "view": "اقرا",
        "view-foreign": "شوف على $1",
-       "edit": "بدل",
+       "edit": "بدÙ\91Ù\84",
        "edit-local": "عدّل التوصاف المبلّد",
        "create": "أصنع",
        "create-local": "زيد توصاف مبلّد",
        "unprotectthispage": "بدّل الحضية تاع هاد الباجة",
        "newpage": "باجه جديده",
        "talkpage": "قرعَج على هاد الباجة",
-       "talkpagelinktext": "ناقش",
+       "talkpagelinktext": "تناقش",
        "specialpage": "باجة خوصوصيّة",
-       "personaltools": "دوزان شخصيه",
+       "personaltools": "دوزان مواليهم",
        "articlepage": "شوف الباجة تاع المحتاوا",
-       "talk": "مهادرة",
-       "views": "استبÙ\8aاÙ\86",
-       "toolbox": "دÙ\88زاÙ\86",
+       "talk": "تناقش",
+       "views": "Ø¢Ù\81Ù\8aشاج",
+       "toolbox": "ادÙ\8eÙ\88ات",
        "userpage": "شوف الباجة تاع المستعملي",
        "projectpage": "شوف الباجة تاع البروجي",
        "imagepage": "شوف الباجة تاع الفيشي",
        "viewhelppage": "شوف الباجة تاع المعاونة",
        "categorypage": "شوف الباجة تاع الصنيف",
        "viewtalkpage": "شوف التقرعيج",
-       "otherlanguages": "ب لوغات وحدُخرة",
+       "otherlanguages": "ب لوغات اخرين",
        "redirectedfrom": "(محول من $1)",
        "redirectpagesub": "باجة تاع التحوال",
        "redirectto": "حوّل لـ:",
-       "lastmodifiedat": "Ù\87اد Ø§Ù\84باجÙ\87 Ø±Ø§Ù\87Ù\8a ØªØ¨Ø¯Ù\91Ù\84ت Ù\86Ù\87ار Ø§Ù\84Ù\80 $1, Ø¹Ù\84Ù\89 Ø§Ù\84Ù\80ساعة $2.",
+       "lastmodifiedat": "Ù\87اذ Ø§Ù\84صÙ\81حة Ø±Ø§Ù\87Ù\8a ØªØ¨Ø¯Ù\91Ù\84ت Ø§Ø®Ù\91ر Ù\85رÙ\91Ø© Ù\86Ù\87ار $1Ø\8c Ù\85عا $2.",
        "viewcount": "هاد الباجة نشافت {{PLURAL:$1|خطرة وحدة|$1 خطرة}}.",
        "protectedpage": "باجة محضيّة",
-       "jumpto": "اÙ\82Ù\81ز ل:",
-       "jumptonavigation": "تبحار",
+       "jumpto": "سÙ\8aر ل:",
+       "jumptonavigation": "ناڥيڭاسيون",
        "jumptosearch": "فتّش",
        "view-pool-error": "اعدرونا، السربايات راهم مغبّنين ف هاد الوقيتة.\nبزّاف المستعمليّين راهم باغيين يشوفو هاد الباجة.\nاصبرو شي وقيتة قبل ما تحاولو تلحقو لها عاود.\n\n$1",
        "generic-pool-error": "اعدرونا، السربايات راهم مغبّنين ف هاد الوقيتة.\nبزّاف المستعمليّين راهم باغيين يشوفو هاد الباجة.\nاصبرو شي وقيتة قبل ما تحاولو تلحقو لها عاود.",
        "pool-errorunknown": "خلطة ماشي معروفة",
        "pool-servererror": "السربيس تاع العدّان راه حابس ( $1 ).",
        "poolcounter-usage-error": "غلطة تاع ستُعمال: $1",
-       "aboutsite": "على{{SITENAME}}",
-       "aboutpage": "Project:على",
+       "aboutsite": "كلّ شي على {{SITENAME}}",
+       "aboutpage": "Project:معلومات",
        "copyright": "المحتاوا راه تحت النسخة $1 تاع الليسانس، غير يلا كان مكتوب حاجاخرة.",
        "copyrightpage": "{{ns:project}}:حقوق النسخ",
        "currentevents": "الختيّارات",
        "currentevents-url": "Project:خبورات",
        "disclaimers": "تنبيهات",
-       "disclaimerpage": "Project:التحذيرات العامه",
+       "disclaimerpage": "Project:التنبيهات العامّة",
        "edithelp": "معونة",
        "helppage-top-gethelp": "معاونة",
-       "mainpage": "الپاجة اللولانيّة",
-       "mainpage-description": "اÙ\84پاجة Ø§Ù\84Ù\84Ù\88Ù\84اÙ\86Ù\8aÙ\91Ø©",
+       "mainpage": "الپاجة الاولانيّة",
+       "mainpage-description": "صÙ\81حة Ø§Ù\84استÙ\82باÙ\84",
        "policy-url": "Project:المقاون",
-       "portal": "بÙ\88رطاÙ\8a المجتمع",
-       "portal-url": "Project:بÙ\88رطاÙ\8a المجتمع",
-       "privacy": "السياسة تاع الخصوصيات (الدين الضيّق)",
-       "privacypage": "Project:خصÙ\88صÙ\8aÙ\87",
+       "portal": "بÙ\88ابة المجتمع",
+       "portal-url": "Project:بÙ\88ابة المجتمع",
+       "privacy": "السياسة تاع الخصوصيّة",
+       "privacypage": "Project:اÙ\84سÙ\8aاسة ØªØ§Ø¹ Ø§Ù\84خصÙ\88صÙ\8aÙ\91Ø©",
        "badaccess": "مشكل فل مسموحات",
        "badaccess-group0": "ماشي مقبول ليك تدير الشي الّي راك تسيّي تديرهُ.",
        "badaccess-groups": "الفعلة الّي راك سيّيت تديرها مسموحة برك لل مستعملّين {{PLURAL:$2||الّي هوما منل جماعة|الّي هوما من وحدة من هاد الجمايع}}: $1.",
        "versionrequired": "النسخة $1 تاع ميدياويكي ملزومة",
        "versionrequiredtext": "النسخة $1 تاع ميدياويكي راهي ملزومة باش تنجم تستعمل هاد الباجة.\nشوف [[Special:Version|الباجة تاع النسخات باش تفهم كتَر على هاد الشي]]",
        "ok": "قابل",
-       "retrievedfrom": "جاÙ\8aبÙ\8aÙ\86Ù\87 من \"$1\"",
+       "retrievedfrom": "جاÙ\8aبÙ\8aÙ\86Ù\88 من \"$1\"",
        "youhavenewmessages": "عندك $1 ($2).",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|عندك}} $1 من عند {PLURAL:$3|مستعملي واحد|زوج تاع المستعمليّين|$3 مستعملي}} ($2).",
        "youhavenewmessagesmanyusers": "عندك $1 من عند شحال من مستعملي ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|بريّة جديدة وحدة|999=بريّة جديدة}}",
        "newmessagesdifflinkplural": "{{PLURAL:$1التبديلة التالية|التبديلات التاليين}}",
        "youhavenewmessagesmulti": "عندك بريّة جديدة في $1.",
-       "editsection": "بدل",
+       "editsection": "بدÙ\91Ù\84",
        "editold": "بدل",
        "viewsourceold": "شوف الاصل",
        "editlink": "تبديل",
        "viewsourcelink": "شوف العين",
-       "editsectionhint": "Ø¥Ù\8aدÙ\8aتÙ\8a Ø§Ù\84صÙ\86Ù\81:$1",
+       "editsectionhint": "بدÙ\91Ù\84 Ù\81 Ø§Ù\84سÙ\83سÙ\8aÙ\88Ù\86$1",
        "toc": "محتويات",
        "showtoc": "ورّي",
        "hidetoc": "خبّي",
        "feed-invalid": "النوع تاع التلقيمة ماشي مصلاح.",
        "feed-unavailable": "التلقيمات ما راهمش موجودين.",
        "site-rss-feed": "تيار آر‌إس‌إس $1",
-       "site-atom-feed": "$1 تيار آتوم",
+       "site-atom-feed": "سينيال آتوم تاع $1",
        "page-rss-feed": "تلقيمة RSS تاع \"$1\"",
        "page-atom-feed": "$1 تيار آتوم",
-       "red-link-title": "$1 (الباجه ما كاينش)",
+       "red-link-title": "$1 (الباجة ما كاينة شي)",
        "sort-descending": "رتّب بل نازولي",
        "sort-ascending": "رتّب بل طالوعي",
-       "nstab-main": "اÙ\84باجة",
+       "nstab-main": "صÙ\81Ø­ة",
        "nstab-user": "باجة{{GENDER:{{BASEPAGENAME}}|المستخدم|المستخدمة}}",
        "nstab-media": "باجة تاع ميديا",
        "nstab-special": "باجه خوصوصيّة",
        "nstab-template": "مودال",
        "nstab-help": "باجة تاع معاونة",
        "nstab-category": "تصنيف",
-       "mainpage-nstab": "الپاجة اللولانيّة",
+       "mainpage-nstab": "الپاجة الاولانيّة",
        "nosuchaction": "الشي الّي طلبتهُ ما كاينش",
        "nosuchactiontext": "الفعلة الّي مطلوبة فل URL ماشي مقبولة.\nبالاك ما دخّلتوش الـ URL كيما لازم ولا تاني تبّعتو كاش وصيل مغلوط.\nينجم تاني يكون كاين عُلّة فل لوجيسيال الّي مستعمل فـ {{SITENAME}}.",
        "nosuchspecialpage": "هاد الباجة الخوصوصيّة ما كاينش منها",
        "databaseerror-query": "مسقسية : $1",
        "databaseerror-function": "دالّة: $1",
        "databaseerror-error": "غلطة: $1",
+       "transaction-duration-limit-exceeded": "باش تخطا مزيدة كبيرة تاع الوقت تاع المطابقة، هاد الخدمة راهي حبست خاطر الوقت تاع الكتبة ($1) راه فات الحدّ تاع $2 {{PLURAL:$2|تانية}}.\nيلا راك تبدّل شحال من حاجة، سيّي تبدّل بل حاجات الصغيرة فل وقت الواحد.",
        "laggedslavemode": "<strong>ردّ بالك:</strong> هاد الباجة تنجم تكون ما حاوياش التبدالات التاليين الّي ندارو.",
        "readonly": "الدخيرة تاع الخبيرات راهي مغلوقة",
        "enterlockreason": "حطّ السبّة تاع القفيل و المدّة تاعهُ بل ميز.",
-       "readonlytext": "الدخيرة تاع الخبيرات راهي مغلوقة على الدخلات الجديدة ولا التبدالات، بالاك علاجال كاش صيانة عاديّة، مور ماش غادي تعاود ترجع لل طبَع.\n\nالإيداري الّي دار هاد الشي راه يعطي التفسيرات هادي: $1",
+       "readonlytext": "الدخيرة تاع الخبارات راهي مغلوقة على الدخلات الجديدة ولا التبدالات، بالاك علاجال كاش صيانة عاديّة، مور ماش غادي تعاود ترجع لل طبَع.\n\nالإيداري الّي دار هاد الشي راه يعطي التفسيرات هادي: $1",
        "missing-article": "الداتاباز ما صابتش باجه كان لازم تنصاب، الباجه هي \"$1\" $2.\n\nنورمالمو يصرا هذا مين اتبع فرق بيريمي والا وصيل تأريخ باجة ممحيه.\n\nإذا ما كانش هذا هو الحال همالا راك طحت في علة تاع البرمجية.\nمن فضلك سينياليها لواحد من[[Special:ListUsers/sysop|الإداريين]]، و أعطه مسار هذه الباجه.",
        "missingarticle-rev": "(رقم الفرسيون: $1)",
        "missingarticle-diff": "(فرق بين: $1، $2)",
        "myprivateinfoprotected": "ما عندكش السراح باش تبدّل المعلومات الشخصيّة ديالك.",
        "mypreferencesprotected": "ما عندكش السراح باش تبدّل الإختيّارات ديالك.",
        "ns-specialprotected": "الپاجات الخصيصة ما تنجمش تتبدّل.",
-       "titleprotected": "هاد العلوان راه محضي من` التبدال من عند [[User:$1|$1]].\nالسبّة الّي مدّها هيّا \"<em>$2</em>\".",
+       "titleprotected": "[[User:$1|$1]] {{GENDER:$1|حمى|حمات}} هاذ العنوان م الخلقان.\nالسبّة تاعو هيّ <em>$2</em>.",
        "filereadonlyerror": "ماشي ممكن تبدال الفيشي \"$1\" خاطرش الزمّام \"$2\" راه مشغّلة فيه الخاصيّة \"اقرا برك\".\n\nالموسيّر الّي غلقهُ راه ماد التفسير هادا: \"$3\".",
        "invalidtitle-knownnamespace": "علوان ماشي مقبول ب وسَع تاع تسميّة \"$2\" معا الكتيبة \"$3\".",
        "invalidtitle-unknownnamespace": "علوان ماشي مقبول ب نمرو ماشي معروف تاع الوسَع تاع تسميّة \"$1\" معا الكتيبة \"$2\".",
        "loginlanguagelabel": "اللوغه: $1",
        "suspicious-userlogout": "المطلب تاعك باش تسجّل خارج ما تسجّلش خاطر راه يبان مرسول من عند بحّار معطّل ولا  خزّان تاع وسّاط (proxy cache).",
        "createacct-another-realname-tip": "السميّة الحقّانيّة ماشي ملزومة.\nيلا تستعملها غادي تصلاح باش تنسّب ليك الخدمة الّي غادي تديرها.",
-       "pt-login": "دخÙ\84Ù\87",
+       "pt-login": "ادخÙ\84",
        "pt-login-button": "دخول",
        "pt-createaccount": "اصنع حساب",
        "pt-userlogout": "الخروج",
        "newarticle": "(جديد)",
        "newarticletext": "راك تبعت وصيلة لباجه لم ما تخدمتش بعد.\nباش تصنع هاذ الباجه ابدا الكتبه فالصندوق التحت (شوف في [$1  زياده باجه المساعده] لمعلومات).\nإذا كانت زيارتك لهاذ الباجه غلطه، ادرك على بوطون''ولى'' في نافيقاتور الإنترنت نتاعك.",
        "anontalkpagetext": "----''هاذ الباجة نقاش لمستخدم مجهول ما قامش بإنشاء حساب بعد و الا ما يستعملش ذاك الحساب.\nلذا لازم علينا استعمال رقم الأيبي باش نتعرفو عليه/عليها.\nمثل هذا العنوان يمكنلو يشترك فيه مستخدمين بزاف.\nإذا كنت مستخدم مجهول وتشعر بلي التعليقات ما تخصكش وصلتلك ، من فضلك [[Special:UserLogin/signup|أصنع حساب]] ولا [[Special:UserLogin|سجل الدخول]] باش تتجنب الارتباك فالمستقبل مع مستخدمين مجهولين آخرين.''",
-       "noarticletext": "حتا لضركا، ما كاين حتا نصّ ف هاذ الپاجه.\nتقدرو [[Special:Search/{{PAGENAME}}ترميو تفتيشه على هاذ العلوان]] فل پاجات لخرين,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} فتش فل عمليات المربوطة]\n ولا[{{fullurl:{{FULLPAGENAME}}|action=edit}} اصنع هاذ الپاجه]</span>.",
+       "noarticletext": "حتا لضركا، ما كاين حتا نصّ ف هاذ الپاجة.\nتقدرو [[Special:Search/{{PAGENAME}}ترميو تفتيشة على هاذ العلوان]] فل پاجات لخرين,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} فتش فل عمليات المربوطة]\n ولا[{{fullurl:{{FULLPAGENAME}}|action=edit}} اصنع هاذ الپاجة]</span>.",
        "noarticletext-nopermission": "لحد الساعه ما كانش حتى نص في هاذ الباجه.\nتقدرو [[Special:Search/{{PAGENAME}}|ترميو تفتيشه على هاذ العنوان]] فالباجات لخرين,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} فتش فالعمليات المربوطه]\nو إلا[{{fullurl:{{FULLPAGENAME}}|action=edit}} أصنع هاذ الباجه]</span>.",
        "missing-revision": "المراجعة #$1 من الباجة اللي سموها \"{{FULLPAGENAME}}\" ما هيش كاينة.\n\nهذا يصرا فالعادة منين نتبعو وصيلة تاريخها قديم لباجة تنحات.\nالتفاصيل يمكن نصيبوها في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل المسح].",
        "userpage-userdoesnotexist": "حساب المستخدم \"<nowiki>$1</nowiki>\" ماهوش مسجل.\nمن فضلك تأكد بلي راك باغي تصنع/تعدل هاذ الباجة.",
        "revertmerge": "فرق",
        "history-title": " «$1»: تاريخ المراجعات",
        "difference-title": "فروقات بين التبدالات تاع \"$1\"",
-       "lineno": "سطر$1:",
+       "lineno": "سطر $1:",
        "compareselectedversions": "كومباري بين نسختين مخيرين",
        "editundo": "نحي",
        "diff-multi-sameuser": "({{PLURAL:$1|تبديلة متوسّطة وحدة|$1 تبديلات متوسّطين}} ماشي {{PLURAL:$1|مورّية|$1 مورّيين}} من عند نفس المستعملي)",
        "action-edit": "عدل هاذ الباجه",
        "nchanges": "$1 تبديله{{PLURAL:$1||s}}",
        "enhancedrc-history": "تاريخ",
-       "recentchanges": "اÙ\84تبداÙ\84ات Ø§Ù\84تÙ\88اÙ\84ا",
+       "recentchanges": "اÙ\84تبداÙ\84ات Ø§Ù\84اخÙ\91رة",
        "recentchanges-legend": "واش تختار ف`التبدالات التوالا",
        "recentchanges-summary": "اجبر التبدالات اللواخر الّي صراو ف هاد الصفحة.",
        "recentchanges-feed-description": "تبع التبديلات الجدد للويكي في هاذ التيار .",
        "recentchanges-label-bot": "هاذ التبديل ندار بروبو",
        "recentchanges-label-unpatrolled": "ما تراجعتش هاذ التبديله للآن",
        "recentchanges-label-plusminus": "الحجَم تاع الصفحة راه تبدّل ب هاد العدّة تاع البايتات",
-       "recentchanges-legend-heading": "'''تفسار:'''",
+       "recentchanges-legend-heading": "<strong>تفسار:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (شوف تاني [[Special:NewPages|ليستة تاع صفحات جديدة]])",
        "rcnotefrom": "التحت التبديلات من <strong>$2</strong> (إلى <strong>$1</strong> معروضة).",
        "rclistfrom": "بين التبديلات البديه من $3 $2",
        "minoreditletter": "ط",
        "newpageletter": "ج‌",
        "boteditletter": "ب",
-       "rc-change-size-new": "$1 {{PLURAL:$1|octet|octets}} مورا التبدال",
+       "rc-change-size-new": "$1 {{PLURAL:$1|اوكتاتة|اوكتاتات}} بعد التبدال",
        "rc-enhanced-expand": "شوف التفاصيل",
        "rc-enhanced-hide": "خبي التفاصيل",
        "recentchangeslinked": "تبديلات مربوطه",
        "recentchangeslinked-summary": "هاذي ليستة تع التبديلات اللي تمت هاذ الخطرة للباجات الموصولة من باجة معينة (ولا للأعضاء الداخلين في تصنيف معين).\nالصفحات في [[Special:Watchlist|ليستت مراقبة نتاعك]] '''مغلظه'''",
        "recentchangeslinked-page": "اسم الباجه:",
        "recentchangeslinked-to": "بين التبديلات للباجات الموصولة للباجه المعطية عوضا العكس",
-       "upload": "طلع فيشي",
+       "upload": "طلّع فيشيي",
        "uploadlogpage": "ريجيستر رفع الفيشيات",
        "filedesc": "ملخص",
        "license": "ترخيص:",
        "nolinkstoimage": "ما كانش باجات موصوله لهاذ الفيشي.",
        "sharedupload-desc-here": "هاذ الملف جاي من $1. يمكن يكون مستعمل من بروجيات وحد أخرين.\nالتوصيف نتاعو في [$2 باجت الصفات] محطوطه هنا لتحت.",
        "upload-disallowed-here": "ما تنحمش تعدّل هاد التصويرة",
-       "randompage": "باجة Ø¹Ù\84Ù\89 الزهر",
+       "randompage": "صÙ\81حة Ø¹ الزهر",
        "statistics": "إحصائيّات",
        "nbytes": "{{PLURAL:$1|بايت 1|$1 بايت}}",
        "nmembers": "$1 اعضاء{{PLURAL:$1||s}}",
        "tooltip-invert": "علّم هاد المقّبسة باش تخبّي التبدالات تاع الصفحات الّي فيها وسَع` التسمية (و وسَع التسمية المربوط يلا كاين)",
        "namespace_association": "وسَع التسمية المربوط",
        "tooltip-namespace_association": "علّم على هاد المقيبسة باش تدخّل تاني المهادرة ولا وسَع التسمية تاع الموضوع المربوط معا وسَع التسمية المسيليكسيوني",
-       "blanknamespace": "أساسي",
+       "blanknamespace": "رئÙ\8aسي",
        "contributions": "مساهمات {{GENDER:$1|المستخدم|المستخدمه}}",
        "contributions-title": "مساهمات {{GENDER:$1|المستخدم|المستخدمه}} $1",
        "mycontris": "المساهمات تاعي",
        "sp-contributions-username": "عنوان أيبي والال اسم مستخدم:",
        "sp-contributions-toponly": "ما تورّي غير المشاركات التوالا تاع المقالات",
        "sp-contributions-submit": "تفتاش",
-       "whatlinkshere": "واش واصل هنا",
+       "whatlinkshere": "شنوّ يوصّل ل هنا",
        "whatlinkshere-title": "الباجات اللي تقين في \"$1\"",
        "whatlinkshere-page": "الباجه:",
        "linkshere": "هاذ الباجات يوصلو إلى '''[[:$1]]''':",
        "tooltip-pt-preferences": "الختيّارات {{GENDER:|تاعك}}",
        "tooltip-pt-watchlist": "ليستت الباجات الي راك أتبع تبديلاتهم",
        "tooltip-pt-mycontris": "الليستة تاع المساهمات {{GENDER:|تاعك}}",
-       "tooltip-pt-login": "Ù\85ادابÙ\8aÙ\83 ØªØ³Ø¬Ù\84 Ø¯Ø®Ù\84تÙ\83 Ø\8c Ù\84Ù\83Ù\86 Ù\85اشÙ\8a Ù\84ازÙ\85",
+       "tooltip-pt-login": "Ù\85اذا Ø¨Ù\8aÙ\83 ØªØ¯Ø®Ù\84 Ù\81 Ø§Ù\84Ù\83Ù\88Ù\86ت ØªØ§Ø¹Ù\83Ø\9b Ù\84اÙ\83Ù\86 Ù\87اذا Ù\85ا Ø´Ù\8a Ù\85Ù\84زÙ\88Ù\85 Ø¹Ù\84Ù\8aÙ\83",
        "tooltip-pt-logout": "سجل خروج",
-       "tooltip-pt-createaccount": "Ù\86Ù\86صح Ø¨Ø§Ø´ ØªØµÙ\86ع Ø­Ø³Ø§Ø¨ Ù\88 ØªØ³Ø¬Ù\84 Ø¯Ø®Ù\84تÙ\83 ; Ø¹Ù\84Ù\89 Ù\83Ù\84 Ø­Ø§Ù\84 Ù\85اÙ\87Ù\88Ø´ ضروري",
-       "tooltip-ca-talk": "مناقشه على هاد باجت المحتوا",
-       "tooltip-ca-edit": "بدÙ\91Ù\84 Ù\87اد Ø§Ù\84Ù\80صÙ\81Ø­Ù\87",
+       "tooltip-pt-createaccount": "Ù\85اذا Ø¨Ù\8aÙ\86ا Ù\84Ù\88 Ù\83اÙ\86 ØªØ¹Ù\85Ù\84 Ø­Ø³Ø§Ø¨ Ù\88تدخÙ\84 Ø¨Ù\8aÙ\87Ø\9b Ù\88 Ù\84اÙ\83Ù\86 Ù\87اذا Ù\85ا Ø´Ù\8a ضروري",
+       "tooltip-ca-talk": "مناقشة على هاذ الصفحة تاع المحتوى",
+       "tooltip-ca-edit": "بدÙ\91Ù\84 Ù\81 Ù\87اذ Ø§Ù\84Ù\80صÙ\81حة",
        "tooltip-ca-addsection": "ابدأ طرف جديد",
        "tooltip-ca-viewsource": "هاذ الباجه محميه. و شنو تقدرو تشوفو الأصلي نتاعها",
-       "tooltip-ca-history": "المراجعات التوالا تاع الباجة (معا المساهمين تاوعها)",
+       "tooltip-ca-history": "الڥرسيونات القدام ديال هاذ الصفحة",
        "tooltip-ca-protect": "بروتيجي هاذالباجه",
        "tooltip-ca-delete": "امحي هاذ الباجه",
        "tooltip-ca-move": "بدل أسم هذ الباجه",
        "tooltip-ca-watch": "زيد هذ الباجة لل ليستة تاعك تاع التتباع",
        "tooltip-ca-unwatch": "اقلع هاد الباجة منل ليستة تاعك تاع التتباع",
        "tooltip-search": " فتّش في {{SITENAME}}",
-       "tooltip-search-go": "رÙ\88Ø­ Ù\84 Ø¨Ø§Ø¬Ø© Ø¹Ù\86دÙ\87ا Ø°Ø§Ù\83 Ø§Ù\84آسÙ\85 Ø¨Ø¯Ù\91ات Ù\8aÙ\84ا Ù\83اÙ\86ت Ù\83اÙ\8aÙ\86Ø©",
-       "tooltip-search-fulltext": "فتّش على باجه بهاد الكتبة",
-       "tooltip-p-logo": "زÙ\88ر Ø§Ù\84پاجة Ø§Ù\84Ù\84Ù\88Ù\84اÙ\86Ù\8aÙ\91Ø©",
+       "tooltip-search-go": "رÙ\88Ø­ Ù\84 ØµÙ\81حة Ø¹Ù\86دÙ\87ا Ù\86Ù\81س Ù\87اذ Ø§Ù\84اسÙ\85 Ø§Ù\8aذا ØªÙ\88جÙ\92دت",
+       "tooltip-search-fulltext": "فتّش ع الپاجات الّي فيها هاذ النصّ",
+       "tooltip-p-logo": "زÙ\88ر ØµÙ\81حة Ø§Ù\84استÙ\82باÙ\84",
        "tooltip-n-mainpage": "زور الپاجة اللولانيّة",
-       "tooltip-n-mainpage-description": "زÙ\88ر Ø§Ù\84پاجة Ø§Ù\84Ù\84Ù\88Ù\84اÙ\86Ù\8aÙ\91Ø©",
-       "tooltip-n-portal": "على الپروجي،واش تقدر تدير، وين تصيب واش تحتاج",
-       "tooltip-n-currentevents": "صÙ\8aب Ø®Ø¨Ø§Ø±Ø§Øª Ù\85ستÙ\91رÙ\8aÙ\86 Ø¹Ù\84Ù\89 Ø§Ù\84صÙ\88اÙ\84Ø­ Ø§Ù\84Ù\91Ù\8a Ø±Ø§Ù\87Ù\85 Ù\8aصراÙ\88 Ø¶Ø±Ù\83ا",
-       "tooltip-n-recentchanges": "الليستة تاع التبديلات الجديدة فل ويكي",
-       "tooltip-n-randompage": "Ø·Ù\84Ù\91ع Ø¨Ø§Ø¬Ù\87 Ø¹Ù\84Ù\89 الزهر",
-       "tooltip-n-help": "بلاصة المعونة",
-       "tooltip-t-whatlinkshere": "Ù\84Ù\8aستة ØªØ§Ø¹ Ù\83اÙ\85Ù\84 Ø¨Ø§Ø¬Ø§Øª Ø§Ù\84Ù\85حتاÙ\88ا Ø§Ù\84Ù\88اصÙ\84Ù\87 هنا",
+       "tooltip-n-mainpage-description": "زÙ\88ر ØµÙ\81حة Ø§Ù\84استÙ\82باÙ\84",
+       "tooltip-n-portal": "ع المشروع، شنوّ تقدر تدير، فين تلقى الحاجات الّي حاجتك بيها",
+       "tooltip-n-currentevents": "Ø´Ù\88Ù\81 Ø§Ø´ Ù\82اعد Ù\8aصÙ\8aر",
+       "tooltip-n-recentchanges": "ليستة تاع التبدالات الاخّرين ف الويكي",
+       "tooltip-n-randompage": "شرجÙ\8a ØµÙ\81حة Ø¹ الزهر",
+       "tooltip-n-help": "بلاصة المعاونة",
+       "tooltip-t-whatlinkshere": "Ù\84Ù\8aستة Ø¯Ù\8aاÙ\84 ØµÙ\81حات Ø§Ù\84Ù\88Ù\8aÙ\83Ù\8a Ø§Ù\84Ù\83Ù\84Ù\91 Ø§Ù\84Ù\91Ù\8a ØªÙ\88صÙ\91Ù\84 Ù\84 هنا",
        "tooltip-t-recentchangeslinked": "ليستة تاع التبديلات التوالا تاع الباجات الّي عندهم رباط معا هادي",
        "tooltip-feed-atom": "سيلان آتوم تاع هاد الباجة",
        "tooltip-t-contributions": "شوف ليستة تاع المساهمات تاع {{GENDER:$1|هاد المستعملي|هاد المستعمليّة}}",
        "tooltip-t-emailuser": "أرسل بريه لهاذ المستخدم",
-       "tooltip-t-upload": "أرسÙ\84 ØªØµÙ\88Ù\8aرة Ù\88 Ø¥Ù\84ا Ø£Ù\8a Ù\85Ù\84Ù\81 Ù\85Ù\8aدÙ\8aا Ù\84Ù\84سرÙ\81ر",
-       "tooltip-t-specialpages": "ليستة تاع كامل الباجات الخصوصيّة",
-       "tooltip-t-print": "نسخه لهاذ الباجه قابله للطبيع",
+       "tooltip-t-upload": "Ø·Ù\84Ù\91ع Ù\81Ù\8aØ´Ù\8aÙ\8aات",
+       "tooltip-t-specialpages": "ليستة تاع الباجات الخاصّين كلّهم",
+       "tooltip-t-print": "ڥرسيون تقدر تطبعها",
        "tooltip-t-permalink": "وصيل دايم رايح ل هاد النسخة تاع الباجة",
        "tooltip-ca-nstab-main": "شوف باجه المحتوى",
        "tooltip-ca-nstab-user": "شوف باجت المستعمل",
        "tooltip-undo": "\"نحّي\" فاصي هاد الـمعاودة و حلّ تاقة تاع تبدال بشوفه قبلانيّه. تخلّي باش ترجع لل معاوده التاليه و تزيد الـسبّة علاش فل قابسه تاع الـحويصله.",
        "tooltip-summary": "دخل تلخيص صغير",
        "simpleantispam-label": "مسيّة ضدّ السبام.\nما تعمّرش هادا!",
-       "pageinfo-toolboxlink": "Ù\85عÙ\84Ù\88Ù\85ات Ø¹Ù\84Ù\89 Ù\87اد Ø§Ù\84باجة",
+       "pageinfo-toolboxlink": "Ù\85عÙ\84Ù\88Ù\85ات Ø¹Ù\84Ù\89 Ù\87اد Ø§Ù\84صÙ\81Ø­ة",
        "previousdiff": "→ التعديل الي قبل",
        "nextdiff": "التبديل الجاي ←",
        "file-info-size": "$1 × $2 بكسل حجم الملف: $3، نوع MIME: $4",
        "watchlisttools-raw": "موديفي ليستت التبيعه الخام",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|تقرعيج]])",
        "duplicate-defaultsort": "'''توليه:''' مفتاح التستيف الافتراضي \"$2\" ديباسا مفتاح التستيف الافتراضي التالي\"$1\".",
-       "specialpages": "الباجات الخصوصيه",
+       "specialpages": "الپاجات الخاصّين",
        "external_image_whitelist": " #<pre>خلى هاذ السطر كيما راه\n#حط منثورات التعبيرات المنتظمة (برك الجزء الي يروح بين //) بالتحت\n#هاذ يكون مطابقتها مع مسارات التصاوير البرانيه (الموصولة بصفه مباشره)\n#هاذي الي تشبهغادي تنعرض  كتصاور، خلاف هذا برك وصيلة للتصويرة غادي تنعرض\n#السطور اللي تبدأا ب# تعتبر تعليقات\n#هذا لا يتأثر بحالة الحروف\n\n#حط كامل منثورات التعبيرات المنتظمة فوق هذا السطر. خلي هاذ السطر سواسوا كيما هو</pre>",
        "tag-filter": "صفاية[[Special:Tags|الوشام]]:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1||وسم|وسمان|وسوم}}]]: $2)",
        "logentry-move-move": "{{GENDER:$2|نقّل|نقّلت}} $1 الصفحة $3 لـ $4",
        "logentry-newusers-create": "راه تفتح حساب {{GENDER:$2|المستخدم|المستخدمه}} $1",
        "logentry-upload-upload": " {{GENDER:$2|نزّل|نزّلت}} $1 $3",
-       "searchsuggest-search": "تفتاش"
+       "searchsuggest-search": "فتّش"
 }
index e3c175d..0f69f6a 100644 (file)
@@ -7,7 +7,8 @@
                        "MassNssen",
                        "Zanatos",
                        "زكريا",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Ṣetter l-lyanaṫ:",
        "customcssprotected": "ma msmoh-likċ baċ ṫĝddl had ṣfḫa d-CSS, ḫqaċ fiha iĝdadaṫ ċĥṣiyya dial ċi mosṫĥdim aĥoṛ.",
        "customjsprotected": "ma msmoh-likċ baċ ṫĝddl had ṣfḫa d-JavaScript, ḫqaċ fiha iĝdadaṫ ċĥṣiyya dial ċi mosṫĥdim aĥoṛ.",
        "ns-specialprotected": "sfahi lkhassa maymknch taadlha",
-       "titleprotected": "had l-ĝonwan mnĝo [[User:$1|$1]] mn l-inċa'.\nossabab lli ĝtah hwwa \"''$2''\".",
+       "titleprotected": "had l-ĝonwan mnĝo [[User:$1|$1]] mn l-inċa'.\nossabab lli ĝtah hwwa <em>$2</em>.",
        "virus-badscanner": "ḍabt ĥayb: scanneur de virus ma mĝrofċ: ''$1''.",
        "virus-scanfailed": "s-skan fċel (kod $1)",
        "virus-unknownscanner": "antivirus mjhol :",
        "passwordreset-emailtext-ip": "ċi waḫd (ġaliban nṫa, mn ĝonwan l-IP $1) tlḅ ṫdkir\nb-ṫṫafaṣil dial l-ḫisab ṫaĝk f-{{SITENAME}} ($4). {{PLURAL:$3|l-ḫisab lli mrṫabt|l-ḫisabat lli mrṫabta}}\nb-had l-ĝonwan dl-email {{PLURAL:$3|howa|hiya}}:\n\n$2\n\nhad {{PLURAL:$3|klmṫ|klmaṫ}} s-srr l-mo'qaṫa ġadi ṫṫḫyyad mn bĝd {{PLURAL:$5|nhar waḫd|$5 yyam/yom}}.\nĥaṣṣk ṫdĥol o-ṫbddal klmṫ s-srr. ila kan ċi waḫd aĥor hwwa lli dar had\ntalab, wlla ila ṫfkkarṫi klmṫ s-srr l-qdima, o-ma bqiti-ċ baġi ṫbddalha, ġir bqa ĥddam biha o-nsa ĝlik had l-mesaj.",
        "passwordreset-emailtext-user": "l_mosṫĥdim $1 f-{{SITENAME}} tlḅ ṫdkir b-ṫṫafaṣil dial l-ḫisab ṫaĝk f-{{SITENAME}} ($4). {{PLURAL:$3|l-ḫisab lli mrṫabt|l-ḫisabat lli mrṫabta}} b-had l-ĝonwan dl-email {{PLURAL:$3|howa|hiya}}:\n\n$2\n\nhad {{PLURAL:$3|klmṫ|klmaṫ}} s-srr l-mo'qaṫa ġadi ṫṫḫyyad mn bĝd {{PLURAL:$5|nhar waḫd|$5 yyam/yom}}.\nĥaṣṣk ṫdĥol o-ṫbddal klmṫ s-srr. ila kan ċi waḫd aĥor hwwa lli dar had\ntalab, wlla ila ṫfkkarṫi klmṫ s-srr l-qdima, o-ma bqiti-ċ baġi ṫbddalha, ġir bqa ĥddam biha o-nsa ĝlik had l-mesaj.",
        "passwordreset-emailelement": "smiṫ l-mosṫĥdim: \n$1\n\nklmṫ s-srr l-mo'qaṫa: \n$2",
-       "passwordreset-emailsent": "ṫsift email liṫ-ṫdkir.",
+       "passwordreset-emailsentemail": "ṫsift email liṫ-ṫdkir.",
        "changeemail": "bddel ĝonwan l-email",
+       "changeemail-header": "bddel ĝonwan l-email dl-ḫisab",
        "changeemail-no-info": "ĥaṣṣ tkon daĥol baĥ tqdr twṣl l-had ṣfḫa niċan.",
        "changeemail-oldemail": "ĝonwan l-email l-ḫali:",
        "changeemail-newemail": "ĝonwan dial l-email jdid:",
        "prefs-displayrc": "khiyarat laard",
        "prefs-displaywatchlist": "khiyarat laard",
        "prefs-diffs": "foroqat",
-       "email-address-validity-valid": "tayban billa l-email rah ṣalḫ",
-       "email-address-validity-invalid": "kṫb ĝonwan email ṣḫiḫ",
        "userrights": "ṫdbir ṣalaḫiyyaṫ l-mosṫĥdim",
        "userrights-lookup-user": "idarat mjmoat lmostkhdim",
        "userrights-user-editname": "dkhl ism mostakhdim :",
        "right-blockemail": "bloki ċi mosṫĥdim baċ ma ysift-ċ email",
        "right-hideuser": "bloki ċi mosṫĥdim, bla ma yċofo l-jmhoṛ",
        "right-ipblock-exempt": "ṫjnneb l-blokaṫ dl-IP ol-otoblokaṫ or-''range''blokaṫ",
-       "right-proxyunbannable": "ṫjnneb l-otoblokaṫ dl-proksiaṫ",
        "right-unblockself": "ihiydo lblokage ala ryoshom",
        "right-protect": "taghyir mostawayat lhimaya wtadil sfahi li mhmiyin",
        "right-editprotected": "ṣfaḫi mḫmyya mn ṫĝdil (bla ḫimaya mṫslsla)",
        "upload-options": "khiyarat rafa",
        "watchthisupload": "Watch this file",
        "filename-prefix-blacklist": " #<!-- khlli had str kima hwa --> <pre>\n# sigha bhal hakka:\n#   * aych haja mn  \"#\" tal akhir nass rah taaliq\n#   * Every non-blank line is a prefix for typical file names assigned automatically by digital cameras\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # some mobile phones\nIMG # generic\nJD # Jenoptik\nMGP # Pentax\nPICT # misc.\n #</pre> <!-- khlli had str kima hwa -->",
-       "upload-success-subj": "ṫḫmil najḫ",
-       "upload-failure-subj": "mochila f sift dyal lfichier",
-       "upload-failure-msg": "kan ċi moċkil f-ṫḫmil ṫaĝk mn [$2]:\n\n$1",
-       "upload-warning-subj": "tahdir rafaa",
        "upload-proto-error": "protocol machi hwa hadak",
        "upload-file-error": "khataaa dakhili",
        "upload-too-many-redirects": "l-URL fih bẓẓaf d-ṫḫwilaṫ",
        "rollback": "tjjea taadilat",
        "rollbacklink": "Rjeĝ l-lor",
        "rollbackfailed": "rjoaa mankhch",
-       "editcomment": "molĥĥaṣ ṫ-ṫĝdil kan: \"''$1''\".",
+       "editcomment": "molĥĥaṣ ṫ-ṫĝdil kan: <em>$1</em>.",
        "protectlogpage": "Ṫariĥ l-ḫimaya",
        "protectedarticle": "ḫma \"[[$1]]\"",
        "modifiedarticleprotection": "beddel l-mosṫawa de l-ḫimaya dyal « [[$1]] »",
        "movenosubpage": "Had ṣ-ṣefḫa ma fiha ḫṫa ċi ṣefḫa ferĝiyya.",
        "movereason": "S-Sbab:",
        "revertmove": "Rejjeĝ",
-       "delete_and_move": "Mḫi o neqqel",
        "delete_and_move_confirm": "Ah, mḫi ṣ-ṣefḫa",
        "immobile-source-namespace": "ma ymkn-ċ ṫnql ṣ-ṣfḫi l-nitaq \"$1\"",
        "immobile-source-page": "had ṣ-ṣfḫa maċi d-nnaql.",
index e5320cc..91089cc 100644 (file)
        "confirmable-no": "لا",
        "thisisdeleted": "عرض او استرجاع $1؟",
        "viewdeleted": "عرض $1؟",
-       "restorelink": "{{PLURAL:$1|تعدÙ\8aÙ\84 Ù\88احد Ù\85Ù\84غÙ\8a|تعدÙ\8aÙ\84Ù\8aÙ\86 Ù\85Ù\84غÙ\8aÙ\8aÙ\86|$1 ØªØ¹Ø¯Ù\8aÙ\84ات Ù\85Ù\84غÙ\8aØ©|$1 ØªØ¹Ø¯Ù\8aÙ\84 Ù\85Ù\84غÙ\8a|$1 ØªØ¹Ø¯Ù\8aÙ\84 Ù\85Ù\84غÙ\8a}}",
+       "restorelink": "{{PLURAL:$1|تعدÙ\8aÙ\84 Ù\88احد Ù\85Ù\84غÙ\89|$1 ØªØ¹Ø¯Ù\8aÙ\84ات Ù\85Ù\84غÙ\8aÙ\87}}",
        "feedlinks": "تلقيم:",
        "feed-invalid": "نوع اشتراك التغذية مش صح.",
        "feed-unavailable": "التغذية مش متوفرة",
        "cascadeprotected": "الصفحة دى محمية من التعديل، بسبب انها مدمجة فى {{PLURAL:$1|الصفحة|الصفحتين|الصفحات}} دي، اللى مستعمل فيها خاصية \"حماية الصفحات المدمجة\" :\n$2",
        "namespaceprotected": "ما عندكش صلاحية تعديل الصفحات  اللى فى نطاق '''$1'''.",
        "ns-specialprotected": "الصفحات المخصوصة مش ممكن تعديلها.",
-       "titleprotected": "العنوان دا محمى من الإنشاء بـ[[User:$1|$1]]. السبب هو ''$2''.",
+       "titleprotected": "العنوان دا محمى من الإنشاء بـ[[User:$1|$1]]. السبب هو <em>$2</em>.",
        "virus-badscanner": "غلطه : ماسح فيروسات مش معروف: ''$1''",
        "virus-scanfailed": "المسح فشل(كود $1)",
        "virus-unknownscanner": "انتى فيروس مش معروف:",
        "recentchanges-label-minor": "ده تعديل صغير",
        "recentchanges-label-bot": "التعديل ده عمله بوت",
        "recentchanges-label-unpatrolled": "التعديل ده مإتراجعش لسه",
-       "recentchanges-legend-heading": "شرح",
+       "recentchanges-legend-heading": "<strong>شرح</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (بص كمان على [[Special:NewPages|قايمه الصفحات الجديده]])",
        "rcnotefrom": "دى التعديلات من '''$2''' (ل '''$1''' معروضه).",
        "rclistfrom": "اظهر التعديلات بدايه من $3 $2",
index acfcd1d..e702f32 100644 (file)
        "history": "পৃষ্ঠা ইতিহাস",
        "history_short": "ইতিহাস",
        "updatedmarker": "মোৰ শেহতীয়া পৰিদৰ্শনৰ পাছৰ সালসলনিবোৰ",
-       "printableversion": "পà§\8dৰà¦\95াশযোগ্য সংস্কৰণ",
+       "printableversion": "মà§\81দà§\8dৰণযোগ্য সংস্কৰণ",
        "permalink": "স্থায়ী সূত্ৰ (লিংক)",
        "print": "প্ৰিণ্ট কৰিবলৈ",
        "view": "দেখুৱাওক",
        "myprivateinfoprotected": "ব্যক্তিগত তথ্য সম্পাদনা কৰিবলৈ আপোনাৰ অনুমতি নাই।",
        "mypreferencesprotected": "পছন্দসমূহ সম্পাদনা কৰিবলৈ আপোনাৰ অনুমতি  নাই।",
        "ns-specialprotected": "বিশেষ পৃষ্ঠা সম্পাদিত কৰিব নোৱাৰি।",
-       "titleprotected": "[[User:$1|$1]] সদস্যজনে এই শিৰোনাণমাৰ লিখনী লিখা ৰোধ কৰিছে ।\nইয়াৰ কাৰণ হৈছে ''$2'' ।",
+       "titleprotected": "[[User:$1|$1]] সদস্যজনে এই শিৰোনাণমাৰ লিখনী লিখা ৰোধ কৰিছে ।\nইয়াৰ কাৰণ হৈছে <em>$2</em> ।",
        "filereadonlyerror": "\"$1\" ফাইলটোক পৰিৱৰ্তন কৰিব পৰা নগ'ল কাৰণ ফাইল ভঁৰাল \"$2\" কেৱল পঢ়িব পৰা অৱস্থাত আছে।\nযিজন প্ৰশাসকে এইটো বন্ধ কৰিছে তেওঁ দৰ্শোৱা কাৰণ হৈছে: ''$3''।",
        "invalidtitle-knownnamespace": "নামস্থান \"$2\" আৰু পাঠ্য \"$3\" থকা অবৈধ শিৰোনাম",
        "invalidtitle-unknownnamespace": "অজ্ঞাত নামস্থান সংখ্যা $1 আৰু পাঠ্য \"$2\" থকা অবৈধ শিৰোনাম",
        "passwordreset-emailtext-ip": "কোনোবাই (IP ঠিকনা $1 ৰ পৰা সম্ভৱতঃ আপুনিয়েই) {{SITENAME}} ($4) ৰ বাবে আপোনাৰ গুপ্তশব্দ ন-কৈ বহুৱাবলৈ অনুৰোধ জনাইছিল। ইমেইল ঠিকনাটোৰ লগত এই সদস্যৰ {{PLURAL:$3|একাউণ্ট|একাউণ্টবোৰ}} জড়িত হৈ আছে ।\n\n$2\n \n{{PLURAL:$3|এই অস্থায়ী গুপ্তশব্দ|এই অস্থায়ী গুপ্তশব্দবোৰ}} {{PLURAL:$5|এদিনত|$5 দিনত }} নাইকীয়া হ’ব । আপুনি লগ-ইন কৰি এটা নতুন গুপ্তশব্দ দিয়া উচিত । যদি আন কোনোবাই এই অনুৰোধ কৰিছিল, বা আপুনি নিজৰ পূৰ্বৰ গুপ্তশব্দ মনত পেলাইছে আৰু ইয়াক সলাব খোজা নাই, তেন্তে আপুনি এই বাৰ্তাক অগ্ৰাহ্য কৰি নিজৰ পূৰ্বৰ গুপ্তশব্দ ব্যৱহাৰ কৰি থাকিব পাৰে ।",
        "passwordreset-emailtext-user": "{{SITENAME}}ত $1 ব্যৱহাৰকাৰীয়ে {{SITENAME}} ($4)ৰ বাবে আপোনাৰ গুপ্তশব্দ ন-কৈ বহুৱাবলৈ অনুৰোধ জনাইছিল। ই-পত্ৰ ঠিকনাটোৰ লগত এই সদস্যৰ {{PLURAL:$3|একাউণ্ট|একাউণ্টসমূহ}} জড়িত হৈ আছে।\n \n$2\n \n{{PLURAL:$3|এই অস্থায়ী গুপ্তশব্দ|এই অস্থায়ী গুপ্তশব্দবোৰ}} {{PLURAL:$5|এদিনত|$5 দিনত }} নাইকীয়া হ’ব । আপুনি লগ-ইন কৰি এটা নতুন গুপ্তশব্দ দিয়া উচিত। যদি আন কোনোবাই এই অনুৰোধ কৰিছিল, বা আপুনি নিজৰ পূৰ্বৰ গুপ্তশব্দ মনত পেলাইছে আৰু ইয়াক সলাব খোজা নাই, তেন্তে আপুনি এই বাৰ্তাক অগ্ৰাহ্য কৰি নিজৰ পূৰ্বৰ গুপ্তশব্দ ব্যৱহাৰ কৰি থাকিব পাৰে।",
        "passwordreset-emailelement": "সদস্যনাম: \n$1\n\nঅস্থায়ী গুপ্তশব্দ: \n$2",
-       "passwordreset-emailsent": "এইটো আপোনাৰ একাউণ্টৰ পঞ্জীকৃত ই-মেইল ঠিকনা হয়নে, হয় যদি এটা গুপ্তশব্দ উদ্ধাৰ ই-মেইল পঠিওৱা হ'ব।",
+       "passwordreset-emailsentemail": "এইটো আপোনাৰ একাউণ্টৰ পঞ্জীকৃত ই-মেইল ঠিকনা হয়নে, হয় যদি এটা গুপ্তশব্দ উদ্ধাৰ ই-মেইল পঠিওৱা হ'ব।",
        "passwordreset-emailsent-capture": "এখন গুপ্তশব্দ উদ্ধাৰ ইমেইল পঠিওৱা হৈছে, এইখন তলত দেখা পাব।",
        "passwordreset-emailerror-capture": "এখন গুপ্তশব্দ উদ্ধাৰ ইমেইল সৃষ্টি কৰা হ'ল, কিন্তু {{GENDER:$2|সদস্যজনলৈ}} পঠিয়াব পৰা নগ'ল। সেইখন তলত দেখুওৱা হৈছে: $1",
        "changeemail": "ই-মেইল ঠিকনা সলনি নাইবা বিলোপ কৰক",
        "undo-summary-username-hidden": "এজন গোপন ব্যৱহাৰকাৰীয়ে কৰা $1 সংশোধন বাতিল কৰক",
        "cantcreateaccounttitle": "একাউণ্ট সৃষ্টি কৰিব নোৱাৰি",
        "cantcreateaccount-text": "আই পি ঠিকনা ('''$1''')ৰ পৰা একাউণ্ট সৃষ্টিত [[User:$3|$3]]’য়ে বাধা প্ৰদান কৰিছে ।\n\n$3 য়ে আগবঢ়োৱা ইয়াৰ কাৰণ হৈছে ''$2''",
-       "cantcreateaccount-range-text": "[[User:$3|$3]]য়ে '''$1''' পৰিসীমাৰ আই পি ঠিকনাৰ পৰা একাউণ্ট সৃষ্টি বাৰণ কৰিছে যাৰ ভিতৰত আপোনাৰ আই ই ঠিকনাও ('''$4''') আছে।\n\n $3য়ে ''$2'' বুলি কাৰণ দৰ্শাইছে",
+       "cantcreateaccount-range-text": "[[User:$3|$3]]য়ে <strong>$1</strong> পৰিসীমাৰ আই পি ঠিকনাৰ পৰা একাউণ্ট সৃষ্টি বাৰণ কৰিছে যাৰ ভিতৰত আপোনাৰ আই ই ঠিকনাও (<strong>$4</strong>) আছে।\n\n $3য়ে <em>$2</em> বুলি কাৰণ দৰ্শাইছে",
        "viewpagelogs": "এই পৃষ্ঠাৰ অভিলেখ চাওক ।",
        "nohistory": "এই পৃষ্ঠাৰ কোনো সম্পাদনাৰ ইতিহাস নাই।",
        "currentrev": "শেহতীয়া সংস্কৰণ",
        "prefs-diffs": "পাৰ্থক্য",
        "prefs-help-prefershttps": "আপোনাৰ পৰৱৰ্তী প্ৰৱেশত এই পছন্দ কাৰ্যকৰী হ'ব।",
        "prefs-tabs-navigation-hint": "কিটিপ: টেব্‌ তালিকাত থকা টেবসমূহৰ মাজত বিচৰণ কৰিবলৈ সোঁ আৰু বাঁও কাঁড়চিনৰ কী টিপিব পাৰে।",
-       "email-address-validity-valid": "ই-মেইল ঠিকনাটো সঠিক",
-       "email-address-validity-invalid": "সঠিক ই-মেইল ঠিকনা প্ৰদান কৰক",
        "userrights": "সদস্যৰ অধিকাৰ ব্যৱস্থাপনা",
        "userrights-lookup-user": "সদস্য গোটবোৰ ব্যৱস্থাপনা কৰক",
        "userrights-user-editname": "সদস্যনাম দিয়ক:",
        "right-blockemail": "ই-মেইল পঠোৱাৰ পৰা সদস্যক বাৰণ কৰক",
        "right-hideuser": "ৰাইজৰ পৰা আঁৰ দি সদস্যক বাৰণ কৰক",
        "right-ipblock-exempt": "আই.পি. প্ৰতিবন্ধক, অট’-প্ৰতিবন্ধক আৰু ৰে’ঞ্জ-প্ৰতিবন্ধক এৰাই চলক",
-       "right-proxyunbannable": "প্ৰক্সীৰ স্বয়ংক্ৰিয় প্ৰতিবন্ধক এৰাই চলক",
        "right-unblockself": "আপোনা-আপুনি খোলা",
        "right-protect": "সুৰক্ষাৰ স্তৰ পৰিৱৰ্তন কৰক আৰু প্ৰপাতাকাৰ-সুৰক্ষিত পৃষ্ঠাসমূহ সম্পাদনা কৰক",
        "right-editprotected": "\"{{int:protect-level-sysop}}\" হিচাপে সুৰক্ষিত পৃষ্ঠা সম্পাদনা কৰক",
        "recentchanges-label-bot": "এই সম্পাদনাটো ব'টে কৰিছে",
        "recentchanges-label-unpatrolled": "এই সম্পাদনাটো এতিয়াও পৰীক্ষা কৰা হোৱা নাই",
        "recentchanges-label-plusminus": "পৃষ্ঠাৰ আকাৰ এই পৰিমাণৰ বাইট পৰিৱৰ্তন হৈছে",
-       "recentchanges-legend-heading": "'''ব্যাখ্যা:'''",
+       "recentchanges-legend-heading": "<strong>ব্যাখ্যা:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (লগতে [[Special:NewPages|নতুন পৃষ্ঠাসমূহৰ তালিকা]] চাওক)",
        "recentchanges-legend-plusminus": "(''±১২৩'')",
        "rcnotefrom": "তলত '''$2''' ৰ পৰা হোৱা ('''$1''' লৈকে) পৰিৱৰ্তন দেখুৱা হৈছে ।",
        "watchthisupload": "এই ফাইল লক্ষ্য কৰক",
        "filewasdeleted": "এই নামৰ এটা ফাইল পূৰ্বতে আপল’ড কৰি বিলোপ কৰা হৈছে ।\nইয়াক পুনৰ আপল’ড কৰাৰ আগেয়ে আপুনি $1 পৰীক্ষা কৰা উচিত ।",
        "filename-bad-prefix": "আপুনি আপলোড কৰা ফাইলৰ নামটো '''\"$1\"''' দি আৰম্ভ হৈছে, যিটো ডিজিটেল কেমেৰাই স্বয়ংক্ৰিয়ভাৱে দিয়ে আৰু সি ব্যাখ্যামূলক নহয় ।\nঅনুগ্ৰহ কৰি আপোনাৰ ফাইলটোৰ বাবে এটা ব্যাখ্যামূলক নাম বাছি লওক ।",
-       "upload-success-subj": "আপলোড সফল হ'ল",
-       "upload-success-msg": "[$2] ৰ পৰা আপোনাৰ আপলোড সফল হৈছে । এইটো ইয়াত উপলদ্ধ: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "আপল’ডত সমস্যা হৈছে",
-       "upload-failure-msg": "[$2] ৰ পৰা আপুনি কৰা আপল’ডত এটা সমস্যাই দেখা দিছে:\n\n$1",
-       "upload-warning-subj": "আপল’ড সতৰ্কীকৰণ",
-       "upload-warning-msg": "[$2] ৰ পৰা আপুনি কৰা আপল’ডত এটা সমস্যাই দেখা দিছে । আপুনি ইয়াক সমাধান কৰিবৰ বাবে [[Special:Upload/stash/$1|আপল’ড প্ৰপত্ৰ]] লৈ ঘূৰি যাব পাৰে ।",
        "upload-proto-error": "ভুল প্ৰ’ট’ক’ল",
        "upload-proto-error-text": "দূৰৱৰ্তী আপল’ডৰ বাবে <code>http://</code> or <code>ftp://</code> দি আৰম্ভ হোৱা URLসমূহ আৱশ্যক ।",
        "upload-file-error": "আভ্যন্তৰীণ ত্ৰুটি",
        "upload-dialog-button-done": "কৰা হ’ল",
        "upload-dialog-button-save": "সাঁচি থওক",
        "upload-dialog-button-upload": "আপল'ড",
-       "upload-form-label-select-file": "ফাইল নিৰ্বাচন কৰক",
        "upload-form-label-infoform-title": "বিস্তাৰিত",
        "upload-form-label-infoform-name": "নাম",
        "upload-form-label-infoform-description": "বিৱৰণ",
        "pager-older-n": "{{PLURAL:$1|পুৰণতৰ ১|পুৰণতৰ $1}}",
        "suppress": "অমনোযোগ",
        "querypage-disabled": "কাৰ্য্যগত কাৰণত এই বিশেষ পৃষ্ঠাটো নিষ্ক্ৰিয় কৰা হৈছে।",
+       "apisandbox-results": "ফলাফল",
        "booksources": "গ্ৰন্থৰ উৎস সমূহ",
        "booksources-search-legend": "গ্ৰন্থ উৎস সন্ধান",
        "booksources-search": "সন্ধান",
        "wlheader-showupdated": "আপোনাৰ শেষ পৰিদৰ্শনৰ পিছত সলনি হোৱা পৃষ্ঠাসমূহ '''গাঢ়''' আখৰত দেখুওৱা হৈছে।",
        "wlnote": "তলত {{PLURAL:$1| হ'ল সৰ্বশেষ পৰিৱৰ্তন|হ'ল সৰ্বশেষ '''$1''' পৰিৱৰ্তনসমূহ}} সৰ্বশেষ {{PLURAL:$2|ঘন্টা|'''$2''' ঘন্টা}}, $3, $4 -ৰ হিচাপে।",
        "wlshowlast": "যোৱা $1 ঘণ্টা $2 দিন  চাওক",
-       "watchlistall2": "সকলো",
        "watchlist-options": "লক্ষ্য-তালিকা পছন্দসমূহ",
        "watching": "চকু দিয়া হৈছে.....",
        "unwatching": "আঁতৰোৱা হৈ আছে.....",
        "rollbackfailed": "পূৰ্ববৎ ব্যৰ্থ",
        "cantrollback": "পূৰ্বৰ অৱস্থালৈ ঘূৰাই নিব নোৱাৰি;\nশেষৰ সম্পাদকজন এই পৃষ্ঠাৰ একমাত্ৰ লেখক ।",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|আলোচনা]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])এ কৰা [[:$1]]ৰ শেষ সম্পাদনা পূৰ্বাৱস্থালৈ ঘূৰাই নিব নোৱাৰি; কোনোবাই ইতিমধ্যে পৃষ্ঠাটো সম্পাদনা বা ৰ'লবেক কৰিছে ।\n\n[[User:$3|$3]] ([[User talk:$3|আলোচনা]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])ই এই পৃষ্ঠাৰ শেষ সম্পাদনা কৰিছিল ।",
-       "editcomment": "সম্পাদনাৰ সাৰাংশ আছিল: \"''$1''\"।",
+       "editcomment": "সম্পাদনাৰ সাৰাংশ আছিল: <em>$1</em>।",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|কথা-বতৰা]])ৰ সম্পাদনাসমূহ [[User:$1|$1]]য়ে কৰা শেষ সংশোধনলৈ ঘূৰাই নিয়া হৈছে ।",
        "revertpage-nouser": "এজন গোপন ব্যৱহাৰকাৰীয়ে কৰা সম্পাদনা {{GENDER:$1|[[User:$1|$1]]}}-য়ে কৰা শেষ সংশোধনীলৈ ঘূৰাই নিয়া হৈছে।",
        "rollback-success": "$1 ৰ সম্পাদনাসমূহ পূৰ্বৰ অৱস্থালৈ ঘূৰাই নিয়া হৈছে;\nপৃষ্ঠাটো $2 য়ে কৰা শেষ সংশোধনীলৈ ঘূৰাই নিয়া হৈছে ।",
index 23f388c..f547a60 100644 (file)
        "myprivateinfoprotected": "Nun tien permisu pa editar la so información privada.",
        "mypreferencesprotected": "Nun tien permisu pa editar les sos preferencies.",
        "ns-specialprotected": "Les páxines especiales nun se puen editar.",
-       "titleprotected": "Esti títulu ta protexíu escontra creación por [[User:$1|$1]].\nEl motivu conseñáu ye «''$2''».",
+       "titleprotected": "Esti títulu ta protexíu escontra creación por [[User:$1|$1]].\nEl motivu conseñáu ye <em>$2</em>.",
        "filereadonlyerror": "Nun pudo camudase'l ficheru «$1» porque l'estoyu de ficheros «$2» ta en mou de sólo llectura.\n\nL'alministrador del sistema que lu bloquió dio esti motivu: «$3».",
        "invalidtitle-knownnamespace": "Títulu inválidu col espaciu de nomes «$2» ya'l testu «$3»",
        "invalidtitle-unknownnamespace": "Títulu inválidu col númberu $1 d'espaciu de nomes desconocíu ya'l testu «$2»",
        "nocookieslogin": "{{SITENAME}} usa «cookies» pa identificar a los usuarios.\nTien les «cookies» desactivaes.\nPor favor activeles y vuelva a intentalo.",
        "nocookiesfornew": "La cuenta nun se creó porque nun pudimos confirmar l'orixe.\nComprueba que tienes activaes les «cookies», recarga esta páxina y vuelvi a intentalo.",
        "noname": "Nun conseñasti un nome d'usuariu válidu.",
-       "loginsuccesstitle": "Aniciu de sesión correutu",
+       "loginsuccesstitle": "Identificáu",
        "loginsuccess": "'''Aniciasti sesión en {{SITENAME}} como «$1».'''",
        "nosuchuser": "Nun hai nengún usuariu col nome «$1».\nLos nomes d'usuariu distinguen mayúscules y minúscules.\nMira que tea bien escritu o [[Special:UserLogin/signup|crea una cuenta nueva]].",
        "nosuchusershort": "Nun hai nengún usuariu col nome «$1».\nMira que tea bien escritu.",
        "createaccount-title": "Creación de cuenta pa {{SITENAME}}",
        "createaccount-text": "Daquién creó una cuenta cola to direición de corréu electrónicu en {{SITENAME}} ($4) col nome «$2», y cola contraseña «$3».\nAgora tendríes d'aniciar sesión y camudar la contraseña.\n\nPues escaecer esti mensaxe si esta cuenta creóse por error.",
        "login-throttled": "Ficisti demasiaos intentos d'aniciu de sesión recientes.\nPor favor espera $1 enantes d'intentalo otra vuelta.",
-       "login-abort-generic": "Falló la identificación - Encaboxao",
+       "login-abort-generic": "Falló l'aniciu de sesión - Encaboxao",
        "login-migrated-generic": "La to cuenta migróse ya'l to nome d'usuariu yá nun esiste nesta wiki.",
        "loginlanguagelabel": "Llingua: $1",
        "suspicious-userlogout": "La to solicitú de zarrar sesión refugose porque paez qu'unvióla un restolador frañíu o un proxy de caché.",
        "newpassword": "Contraseña nueva:",
        "retypenew": "Vuelvi a escribir la contraseña nueva:",
        "resetpass_submit": "Configurar la contraseña y aniciar sesión",
-       "changepassword-success": "¡Camudóse la contraseña correutamente!",
+       "changepassword-success": "Camudóse la contraseña.",
        "changepassword-throttled": "Ficisti demasiaos intentos d'aniciu de sesión recientes.\nPor favor espera $1 enantes d'intentalo otra vuelta.",
        "botpasswords": "Contraseñes de bots",
        "botpasswords-summary": "Les <em>contraseñes de bot</em> permiten l'accesu a una cuenta d'usuariu por aciu de la API sin usar les credenciales d'accesu de la cuenta principal. Los permisos d'usuariu disponibles al aniciar sesión con una contraseña de bot puen tar torgaos.\n\nSi nun sabes pa qué val esto, probablemente nun tendríes d'usalo. Naide tendría de pidite nunca que xeneres una d'estes y que-y la deas.",
        "botpasswords-insert-failed": "Nun pudo amestase'l nome de bot «$1». ¿Taba añadíu yá?",
        "botpasswords-update-failed": "Nun pudo anovase'l nome de bot «$1». ¿Desaniciaríase?",
        "botpasswords-created-title": "Creóse la contraseña de bot",
-       "botpasswords-created-body": "La contraseña de bot «$1» creóse correchamente.",
+       "botpasswords-created-body": "Creóse la contraseña del bot llamáu «$1» del usuariu «$2».",
        "botpasswords-updated-title": "Anovóse la contraseña de bot",
-       "botpasswords-updated-body": "La contraseña de bot «$1» anovóse correchamente.",
+       "botpasswords-updated-body": "Anovóse la contraseña del bot llamáu «$1» del usuariu «$2».",
        "botpasswords-deleted-title": "Desanicióse la contraseña de bot",
-       "botpasswords-deleted-body": "La contraseña de bot «$1» desanicióse.",
+       "botpasswords-deleted-body": "Desanicióse la contraseña del bot llamáu «$1» del usuariu «$2».",
        "botpasswords-newpassword": "La nueva contraseña p'aniciar sesión con strong>$1</strong> ye <strong>$2</strong>. <em>Por favor, rexistra esto pa referencies futures.</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider nun ta disponible.",
        "botpasswords-restriction-failed": "Hai torgues de contraseña de bot que torgaron esti aniciu de sesión.",
        "resetpass-no-info": "Tienes d'aniciar sesión pa entrar direutamente a esta páxina.",
        "resetpass-submit-loggedin": "Camudar la contraseña",
        "resetpass-submit-cancel": "Encaboxar",
-       "resetpass-wrong-oldpass": "Contraseña temporal o actual inválida.\nSeique yá camudaras correutamente la contraseña o que pidieras una nueva contraseña temporal.",
+       "resetpass-wrong-oldpass": "Contraseña temporal o actual inválida.\nSeique yá camudaras 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.\nPa completar l'aniciu de sesión, tien de definir una nueva contraseña equí:",
        "resetpass-temp-password": "Contraseña temporal:",
        "newarticle": "(Nuevu)",
        "newarticletext": "Siguisti un enllaz a un artículu qu'inda nun esiste.\nPa crear la páxina, empecipia a escribir nel cuadru d'embaxo (mira la [$1 páxina d'ayuda] pa más información).\nSi llegasti equí por enquivocu, calca nel botón <strong>atrás</strong> del to restolador.",
        "anontalkpagetext": "----\n''Esta ye la páxina d'alderique pa un usuariu anónimu qu'inda nun creó una cuenta o que nun la usa.''\nPola mor d'ello ha usase la direición numbérica IP pa identificalu/la.\nTala IP pue compartise por varios usuarios.\nSi yes un usuariu anónimu y notes qu'hai comentarios irrelevantes empobinaos pa ti, por favor [[Special:UserLogin/signup|crea una cuenta]] o [[Special:UserLogin/signup|identifícate]] pa torgar futures confusiones con otros usuarios anónimos.",
-       "noarticletext": "Nestos momentos nun hai testu nesta páxina.\nPues [[Special:Search/{{PAGENAME}}|buscar esti títulu de páxina]] n'otres páxines,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar los rexistros rellacionaos],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} editar esta páxina]</span>.",
+       "noarticletext": "Nestos momentos nun hai testu nesta páxina.\nPuedes [[Special:Search/{{PAGENAME}}|buscar esti títulu de páxina]] n'otres páxines,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar los rexistros rellacionaos],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} crear esta páxina]</span>.",
        "noarticletext-nopermission": "Nestos momentos nun hai testu nesta páxina.\nPue [[Special:Search/{{PAGENAME}}|buscar esti títulu de páxina]] n'otres páxines o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar los rexistros rellacionaos]</span>, pero nun tiene permisu pa crear esta páxina.",
        "missing-revision": "La revisión #$1 de la páxina llamada \"{{FULLPAGENAME}}\" nun esiste.\n\nDe vezu la causa d'esto ye siguir un enllaz antiguu del historial a una páxina que se desanició.\nSe puen alcontrar más detalles nel [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rexistru de desanicios].",
        "userpage-userdoesnotexist": "La cuenta d'usuariu «$1» nun ta rexistrada.\nPor favor comprueba si quies crear/editar esta páxina.",
        "previewnote": "'''Alcuerdate de qu'esto ye sólo una vista previa.'''\n¡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 porque hebo una perda de datos de la sesión.'''\nPor favor, vuelvi a intentalo.\nSi inda nun funciona, intenta [[Special:UserLogout|colar]] y volver a aniciar sesión.",
+       "session_fail_preview": "¡Sentímoslo muncho! Nun pudimos procesar la edición porque hebo una perda de datos de la sesión.\n\nSeique zarróse la sesión. <strong>Comprueba si tienes abierta la sesión y vuelve a intentalo</strong>.\nSi inda nun funcionara, tenta [[Special:UserLogout|colar]] y volver a aniciar sesión y comprueba que'l restolador permite les cookies d'esti sitiu.",
        "session_fail_preview_html": "¡Sentímoslo! Nun pudo procesase la to edición por aciu d'una perda de datos de la sesión.\n\n<em>Como {{SITENAME}} tien el HTML puru activáu, la vista previa ta tapecida como precaución escontra ataques en JavaScript.</em>\n\n<strong>Si esti ye un intentu llexítimu d'edición, por favor vuelvi a intentalo.</strong>\nSi inda nun funciona, intenta [[Special:UserLogout|colar]] y volver a aniciar sesión, y comprueba que'l to restolador permite les cookies d'esti sitiu.",
        "token_suffix_mismatch": "'''La to edición nun s'aceutó porque'l to navegador mutiló los caráuteres de puntuación nel editor.'''\nLa edición nun foi aceutada pa prevenir corrupciones na páxina de testu.\nDacuando esto pasa por usar un serviciu proxy anónimu basáu en web que tenga fallos.",
        "edit_form_incomplete": "'''Delles partes del formulariu d'edición nun llegaron al sirvidor; comprueba que les ediciones tean intactes y vuelvi a tentalo.'''",
        "undo-summary-username-hidden": "Desfacer la revisión $1 d'un usuariu tapecíu",
        "cantcreateaccounttitle": "Nun pue crease la cuenta",
        "cantcreateaccount-text": "[[User:$3|$3]] bloquió la creación de cuentes dende esta direición IP (<strong>$1</strong>).\n\nEl motivu dau por $3 ye <em>$2</em>",
-       "cantcreateaccount-range-text": "La creación de cuentes dende direiciones IP del rangu '''$1''', qu'incluye la so direición IP ('''$4'''), ta bloquiada pol usuariu [[User:$3|$3]].\n\nLa razón dada por $3 ye ''$2''.",
+       "cantcreateaccount-range-text": "La creación de cuentes dende direiciones IP del rangu <strong>$1</strong>, qu'incluye la so direición IP (<strong>$4</strong>), ta bloquiada pol usuariu [[User:$3|$3]].\n\nLa razón dada por $3 ye <em>$2</em>.",
        "viewpagelogs": "Ver los rexistros d'esta páxina",
        "nohistory": "Nun hay historial d'ediciones pa esta páxina.",
        "currentrev": "Revisión actual",
        "revdelete-unsuppress": "Desaniciar les torgues nes revisiones restauraes",
        "revdelete-log": "Motivu:",
        "revdelete-submit": "Aplicar a {{PLURAL:$1|la revisión seleicionada|les revisiones seleicionaes}}",
-       "revdelete-success": "'''Visibilidá de revisiones anovada correutamente.'''",
+       "revdelete-success": "Cambiada la visibilidá de revisiones.",
        "revdelete-failure": "'''La visibilida de revisiones nun se pudo anovar:'''\n$1",
-       "logdelete-success": "Configuróse correutamente la visibilidá del rexistru.",
+       "logdelete-success": "Configuróse la visibilidá del rexistru.",
        "logdelete-failure": "'''Nun se pudo configurar la visibilidá del rexistru:'''\n$1",
        "revdel-restore": "camudar visibilidá",
        "pagehist": "Historial de la páxina",
        "mergehistory-done": "$3 {{PLURAL:$3|revisión|revisiones}} de $1 {{PLURAL:$3|fusionóse|fusionáronse}} en [[:$2]].",
        "mergehistory-fail": "Nun pudo facese la fusión d'historiales, por favor comprueba los parámetros de páxina y hora.",
        "mergehistory-fail-bad-timestamp": "La marca de tiempu ye inválida.",
+       "mergehistory-fail-invalid-source": "La páxina d'orixe ye inválida.",
+       "mergehistory-fail-invalid-dest": "La páxina de destín ye inválida.",
+       "mergehistory-fail-no-change": "La fusión d'historiales nun fusionó nenguna revisión. Por favor, comprueba los parámetros de páxina y tiempu.",
+       "mergehistory-fail-permission": "Permisos insuficientes pa fusionar los historiales.",
+       "mergehistory-fail-self-merge": "Les páxines d'orixe y destín son la mesma.",
+       "mergehistory-fail-timestamps-overlap": "Les revisiones de la fonte se sobreponen o vienen después de les revisiones del destín.",
        "mergehistory-fail-toobig": "Nun pudo fusionase l'historial porque moveríense más del máximu de $1 {{PLURAL:$1|revisión|revisiones}}.",
        "mergehistory-no-source": "La páxina d'orixe $1 nun esiste.",
        "mergehistory-no-destination": "La páxina de destín $1 nun esiste.",
        "userrights-changeable-col": "Grupos que pues camudar",
        "userrights-unchangeable-col": "Grupos que nun pues camudar",
        "userrights-conflict": "¡Conflictu de cambiu de permisos d'usuariu! Por favor, revise y confirme los cambios.",
-       "userrights-removed-self": "Retiró correutamente los sos propios drechos. Poro, yá nun tendrá accesu a esta páxina.",
+       "userrights-removed-self": "Desaniciasti los tos propios permisos. Poro, yá nun tienes accesu a esta páxina.",
        "group": "Grupu:",
        "group-user": "Usuarios",
        "group-autoconfirmed": "Usuarios autoconfirmaos",
        "recentchanges-label-bot": "Esta edición ta fecha por un bot",
        "recentchanges-label-unpatrolled": "Esta edición ta ensin patrullar entá",
        "recentchanges-label-plusminus": "El tamañu d'esta páxina cambió nesti númberu de bytes",
-       "recentchanges-legend-heading": "'''Lleenda:'''",
+       "recentchanges-legend-heading": "<strong>Lleenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ver tamién la  [[Special:NewPages|llista de páxines nueves]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Amosar",
        "recentchangeslinked-page": "Nome de la páxina:",
        "recentchangeslinked-to": "Amosar los cambios de les páxines qu'enllacen en cuenta de los de la páxina dada",
        "recentchanges-page-added-to-category": "[[:$1]] amestóse a la categoría",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] y {{PLURAL:$2|otra páxina|otres $2 páxines}} amestaes a la categoría",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] y [[Special:WhatLinksHere/$1|{{PLURAL:$2|otra páxina|otres $2 páxines}}]] amestaes a la categoría",
        "recentchanges-page-removed-from-category": "[[:$1]] desanicióse de la categoría",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] y {{PLURAL:$2|otra páxina|otres $2 páxines}} desaniciaes de la categoría",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] y [[Special:WhatLinksHere/$1|{{PLURAL:$2|otra páxina|otres $2 páxines}}]] desaniciaes de la categoría",
        "autochange-username": "Cambiu automáticu de MediaWiki",
        "upload": "Xubir ficheru",
        "uploadbtn": "Xubir ficheru",
        "backend-fail-read": "Nun se pudo lleer el ficheru $1.",
        "backend-fail-create": "Nun se pudo escribir el ficheru $1.",
        "backend-fail-maxsize": "Nun se pudo escribir el ficheru  $1  porque ye mayor de {{PLURAL:$2|un byte|$2 bytes}}.",
-       "backend-fail-readonly": "Nesti momentu el motor d'almacenamientu \"$1\" ta en mou de sólo llectura. El motivu dau foi: \"$2\"",
+       "backend-fail-readonly": "Nesti momentu el motor d'almacenamientu \"$1\" ta en mou de sólo llectura. El motivu dau ye: <em>$2</em>",
        "backend-fail-synced": "El ficheru \"$1\" ta nún estáu inconsistente colos motores d'almacenamientu internos",
        "backend-fail-connect": "Nun se pudo coneutar col motor d'almacenamientu \"$1\".",
        "backend-fail-internal": "Hebo un fallu desconocíu nel motor d'almacenamientu \"$1\".",
        "uploadstash-summary": "Esta páxina ufre accesu a ficheros que tan xubíos (o en procesu de xubía), pero qu'entá nun s'espublizaron na wiki. Estos ficheros nun son visibles pa naide, sacante l'usuariu que los xubió.",
        "uploadstash-clear": "Desaniciar los ficheros de la reserva",
        "uploadstash-nofiles": "Nun tienes ficheros na reserva.",
-       "uploadstash-badtoken": "Nun se pudo facer esa operación, seique porque caducó la identificación pa editar. Vuelvi a intentalo.",
-       "uploadstash-errclear": "Nun se pudieron desaniciar los ficheros.",
+       "uploadstash-badtoken": "Nun pudo facese esa operación. Seique caducó la identificación pa editar. Vuelve a tentalo.",
+       "uploadstash-errclear": "Falló'l desaniciu de los ficheros.",
        "uploadstash-refresh": "Anovar la llista de ficheros",
        "invalid-chunk-offset": "Allugamientu inválidu del fragmentu",
        "img-auth-accessdenied": "Accesu denegáu",
        "apihelp": "Ayuda de la API",
        "apihelp-no-such-module": "Nun s'alcuentra'l módulu «$1».",
        "apisandbox": "Zona de pruebes API",
+       "apisandbox-jsonly": "Necesítase JavaScript pa usar la zona de pruebes de la API.",
        "apisandbox-api-disabled": "La API ta desactivada nesti sitiu.",
        "apisandbox-intro": "Usa esta páxina pa esperimentar cola <strong>API de serviciu web de MediaWiki</strong>.\nConsulta [[mw:API:Main page|la documentación de la API]] pa más detalles tocante al so usu. Exemplu: [//www.mediawiki.org/wiki/API#A_simple_example llamar al conteníu d'una Páxina principal]. Seleiciona una aición pa ver más exemplos.\n\nTen presente que, anque esto ye una zona de pruebes, les aiciones que faigas nesta páxina puen camudar la wiki.",
        "apisandbox-fullscreen": "Espander el panel",
+       "apisandbox-fullscreen-tooltip": "Espander el panel de la zona de pruebes pa llenar la pantalla del navegador.",
+       "apisandbox-unfullscreen": "Amosar la páxina",
+       "apisandbox-unfullscreen-tooltip": "Amenorgar el panel de la zona de pruebes pa que tean disponibles los enllaces de navegación de MediaWiki.",
        "apisandbox-submit": "Facer solicitú",
        "apisandbox-reset": "Llimpiar",
+       "apisandbox-retry": "Reintentar",
+       "apisandbox-loading": "Cargando la información pal módulu de la API «$1»...",
+       "apisandbox-load-error": "Asocedió un error al cargar la información del módulu de la API «$1»: $2",
+       "apisandbox-no-parameters": "Esti módulu de la API nun tien parámetros.",
+       "apisandbox-helpurls": "Enllaces d'ayuda",
        "apisandbox-examples": "Exemplos",
+       "apisandbox-dynamic-parameters": "Más parámetros",
+       "apisandbox-dynamic-parameters-add-label": "Amestar parámetru:",
+       "apisandbox-dynamic-parameters-add-placeholder": "Nome del parámetru",
+       "apisandbox-dynamic-error-exists": "Yá existe un parámetru llamáu «$1».",
+       "apisandbox-deprecated-parameters": "Parámetros anticuaos",
+       "apisandbox-fetch-token": "Rellenu automáticu del pase",
+       "apisandbox-submit-invalid-fields-title": "Dalgunos campos son inválidos",
+       "apisandbox-submit-invalid-fields-message": "Por favor, igua los campos señalaos y téntalo nuevamente.",
        "apisandbox-results": "Resultaos",
+       "apisandbox-sending-request": "Unviando solicitú a la API...",
+       "apisandbox-loading-results": "Recibiendo los resultaos de la API...",
+       "apisandbox-results-error": "Asocedió un error al cargar la respuesta de la consulta API: $1.",
        "apisandbox-request-url-label": "URL de la solicitú:",
        "apisandbox-request-time": "Duración de la solicitú: {{PLURAL:$1|$1 ms}}",
+       "apisandbox-results-fixtoken": "Igua'l token y vuelve a unviar",
+       "apisandbox-results-fixtoken-fail": "Nun pudo recuperase'l token «$1».",
+       "apisandbox-alert-page": "Los campos d'esta páxina nun son válidos.",
+       "apisandbox-alert-field": "El valor d'esti campu nun ye válidu.",
        "booksources": "Fontes de llibros",
        "booksources-search-legend": "Busca de fontes de llibros",
        "booksources-search": "Buscar",
        "delete-toobig": "Esta páxina tien un historial d'ediciones grande, más de $1 {{PLURAL:$1|revisión|revisiones}}.\nRestrinxóse l'esborráu d'estes páxines pa evitar perturbaciones accidentales de {{SITENAME}}.",
        "delete-warning-toobig": "Esta páxina tien un historial d'ediciones grande, más de $1 {{PLURAL:$1|revisión|revisiones}}.\nEsborralu pue perturbar les operaciones de la base de datos de {{SITENAME}};\nobra con precaución.",
        "deleteprotected": "Nun pues desaniciar esta páxina porque ta protexida.",
-       "deleting-backlinks-warning": "'''Avisu:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Otres páxines]] enllacen a, o trescluyen de, la páxina que ta a piques de desaniciar.",
+       "deleting-backlinks-warning": "<strong>Avisu:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|Otres páxines]] enllacen a, o trescluyen de, la páxina que tas a piques de desaniciar.",
        "rollback": "Revertir ediciones",
        "rollbacklink": "revertir",
        "rollbacklinkcount": "revertir $1 {{PLURAL:$1|edición|ediciones}}",
        "rollbackfailed": "Falló la reversión",
        "cantrollback": "Nun se pue revertir la edición; el postrer collaborador ye l'únicu autor d'esta páxina.",
        "alreadyrolled": "Nun se pue revertir la postrer edición de [[:$1]] fecha por [[User:$2|$2]] ([[User talk:$2|alderique]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\ndaquién más yá editó o revirtió la páxina.\n\nLa postrer edición foi fecha por [[User:$3|$3]] ([[User talk:$3|alderique]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "El resume de la edición yera: \"''$1''\".",
+       "editcomment": "El resume de la edición yera: <em>$1</em>.",
        "revertpage": "Revertíes les ediciones de [[Special:Contributions/$2|$2]] ([[User talk:$2|alderique]]) hasta la cabera versión de [[User:$1|$1]]",
        "revertpage-nouser": "Revertíes les ediciones de (usuariu desaniciáu) a la cabera revisión de {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Revertíes les ediciones de $1; camudáu a la última versión de $2.",
        "changecontentmodel-title-label": "Títulu de la páxina",
        "changecontentmodel-model-label": "Nuevu modelu de conteníu",
        "changecontentmodel-reason-label": "Motivu:",
+       "changecontentmodel-submit": "Camudar",
        "changecontentmodel-success-title": "Cambióse'l modelu de conteníu",
        "changecontentmodel-success-text": "Cambióse'l tipu de conteníu de [[:$1]].",
        "changecontentmodel-cannot-convert": "El conteníu de [[:$1]] nun puede convertise a un tipu de $2.",
        "changecontentmodel-nodirectediting": "El modelu de conteníu $1 nun tien encontu pa edición direuta",
        "log-name-contentmodel": "Rexistru de cambios del modelu de conteníu",
        "log-description-contentmodel": "Socesos rellacionaos colos modelos de conteníu d'una páxina",
+       "logentry-contentmodel-new": "$1 {{GENDER:$2|creó}} la páxina $3 usando un modelu de conteníu non predetermináu «$5»",
        "logentry-contentmodel-change": "$1 {{GENDER:$2|cambió}}'l modelu de conteníu de la páxina $3 dende «$4» a «$5»",
        "logentry-contentmodel-change-revertlink": "revertir",
        "logentry-contentmodel-change-revert": "revertir",
        "import-nonewrevisions": "Nun s'importó denguna revision (o yá taben toes presentes, o se saltaron por errores).",
        "xml-error-string": "$1 na llinia $2, col $3 (byte $4): $5",
        "import-upload": "Xubir datos XML",
-       "import-token-mismatch": "Perdiéronse los datos de la sesión. Intentalo otra vuelta.",
+       "import-token-mismatch": "Perda de datos de la sesión.\n\nSeique zarróse la sesión. <strong>Comprueba si tienes abierta la sesión y vuelve a intentalo</strong>.\nSi inda nun funcionara, tenta [[Special:UserLogout|colar]] y volver a aniciar sesión y comprueba que'l restolador permite les cookies d'esti sitiu.",
        "import-invalid-interwiki": "Nun se puede importar d'esi wiki.",
        "import-error-edit": "La páxina «$1» nun s'importó porque nun tienes permisu pa editala.",
        "import-error-create": "La páxina «$1» nun s'importó porque nun tienes permisu pa creala.",
        "tags-delete-not-allowed": "Les etiquetes definíes por una estensión nun puen desaniciase mentanto la estensión nun lo permita específicamente.",
        "tags-delete-not-found": "La etiqueta «$1» nun esiste.",
        "tags-delete-too-many-uses": "La etiqueta «$1» aplícase a más {{PLURAL:$2|d'una revisión|de $2 revisiones}}, lo que quier dicir que nun pue desaniciase.",
-       "tags-delete-warnings-after-delete": "La etiqueta «$1» desanicióse correutamente, pero {{PLURAL:$2|alcontróse'l siguiente avisu|alcontráronse los siguientes avisos}}:",
+       "tags-delete-warnings-after-delete": "Desanicióse la etiqueta «$1», pero {{PLURAL:$2|alcontróse'l siguiente avisu|alcontráronse los siguientes avisos}}:",
        "tags-activate-title": "Activar etiqueta",
        "tags-activate-question": "Tas a piques d'activar la etiqueta «$1».",
        "tags-activate-reason": "Motivu:",
        "tags-edit-revision-legend": "Amestar o desaniciar etiquetes {{PLURAL:$1|d'esta revisión|de toles $1 revisiones}}",
        "tags-edit-logentry-legend": "Amestar o desaniciar etiquetes {{PLURAL:$1|d'esta entrada del rexistru|de les $1 entraes del rexistru}}",
        "tags-edit-existing-tags": "Etiquetes esistentes:",
-       "tags-edit-existing-tags-none": "''Nenguna''",
+       "tags-edit-existing-tags-none": "<em>Nenguna</em>",
        "tags-edit-new-tags": "Etiquetes nueves:",
        "tags-edit-add": "Amestar estes etiquetes:",
        "tags-edit-remove": "Desaniciar estes etiquetes:",
        "tags-edit-reason": "Motivu:",
        "tags-edit-revision-submit": "Aplicar los cambios a {{PLURAL:$1|esta revisión|$1 revisiones}}",
        "tags-edit-logentry-submit": "Aplicar los cambios a {{PLURAL:$1|esta entrada del rexistru|$1 entraes del rexistru}}",
-       "tags-edit-success": "Los cambios aplicáronse correutamente.",
+       "tags-edit-success": "Aplicáronse los cambios.",
        "tags-edit-failure": "Nun pudieron aplicase los cambios:\n$1",
        "tags-edit-nooldid-title": "Revisión de destín inválida",
        "tags-edit-nooldid-text": "O nun conseñasti una revisión sobre la qu'aplicar esta función, o la revisión conseñada nun esiste.",
        "expand_templates_generate_xml": "Amosar l'árbole d'análisis sintáuticu XML",
        "expand_templates_generate_rawhtml": "Ver el HTML en bruto",
        "expand_templates_preview": "Vista previa",
-       "expand_templates_preview_fail_html": "<em>Como {{SITENAME}} tien activáu el códigu HTML puru y hebo una perda de datos de la sesión, la vista previa ta tapecida como precaución escontra ataques de JavaScript.</em>\n\n<strong>Si esti ye un intentu llexítimu d'accesu a la vista previa, vuelvi a intentalo.</strong>\nSi inda nun funciona, intenta [[Special:UserLogout|salir]] y volver a entrar na to cuenta.",
+       "expand_templates_preview_fail_html": "<em>Como {{SITENAME}} tien activáu el códigu HTML puru y hebo una perda de datos de la sesión, la vista previa ta tapecida como precaución escontra ataques de JavaScript.</em>\n\n<strong>Si esti ye un intentu llexítimu d'accesu a la vista previa, vuelve a tentalo.</strong>\nSi inda nun funciona, tenta [[Special:UserLogout|salir]] y volver a entrar na to cuenta, y comprueba que'l to restolador permite les cookies d'esti sitiu.",
        "expand_templates_preview_fail_html_anon": "<em>Como {{SITENAME}} tien activáu el códigu HTML puru y nun aniciasti sesión, la vista previa ta tapecida como precaución escontra ataques de JavaScript.</em>\n\n<strong>Si esti ye un intentu llexítimu d'accesu a la vista previa, intenta [[Special:UserLogin|entrar]] y vuelvi a intentalo.</strong>",
        "expand_templates_input_missing": "Fai falta dar daqué de testu d'entrada.",
        "pagelanguage": "Cambiar la llingua de la páxina",
        "default-skin-not-found": "¡Vaya! L'aspeutu predetermináu pa la to wiki, definíu en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code> nun ta disponible.\n\nLa instalación paez qu'incluye {{PLURAL:$4|el siguiente aspeutu|los siguientes aspeutos}}. Llei [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pa más información sobro cómo {{PLURAL:$4|activalu|activalos y escoyer el predetermináu}}.\n\n$2\n\n; Si acabes d'instalar MediaWiki:\n: Probablemente instalasti dende git, o direutamente'l códigu fonte usando algún otru métodu. Esto ye d'esperar. Intenta instalar dellos aspeutos dende'l [https://www.mediawiki.org/wiki/Category:All_skins direutoriu d'aspeutos de mediawiki.org's], asina:\n:* Descargando [https://www.mediawiki.org/wiki/Download l'instalador tarball], que vien con dellos aspeutos y estensiones. Pues copiar y apegar el direutoriu <code>skins/</code> d'ehí.\n:* Descargando paquetes tar d'aspeutu individuales de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Usando Git pa descargar aspeutos].\n: Facer esto nun tendría d'interferir col to repositoriu git si yes un desendolcador de MediaWiki.\n\n; Si acabes d'anovar MediaWiki:\n: MediaWiki 1.24 y más nuevu yá nun activa automáticamente los aspeutos instalaos (llei [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Pues apegar {{PLURAL:$5|la llinia siguiente|les llinies siguientes}} en <code>LocalSettings.php</code> p'activar {{PLURAL:$5|l'aspeutu instaláu|tolos aspeutos instalaos}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si acabes d'editar <code>LocalSettings.php</code>:\n: Vuelvi a comprobar los nomes de los aspeutos por si hai errores d'escritura.",
        "default-skin-not-found-no-skins": "L'aspeutu predetermináu pa la to wiki, definíu en <code>$wgDefaultSkin</code> como <code>$1</code> nun ta disponible.\n\nNun tienes aspeutos instalaos.\n\n; Si acabes d'instalar MediaWiki:\n: Probablemente instalasti dende git, o'l códigu fonte direutamente usando algún otru métodu. Esto ye d'esperar. MediaWiki 1.24 y más nuevu nun incluye nengún aspeutu nel repositoriu principal. Intenta instalar dellos aspeutos dende'l [https://www.mediawiki.org/wiki/Category:All_skins direutoriu d'aspeutos de mediawiki.org], asina:\n:* Descargando [https://www.mediawiki.org/wiki/Download l'instalador tarball], que vien con dellos aspeutos y estensiones. Pues copiar y apegar el direutoriu <code>skins/</code> d'ehí.\n:* Descargando paquetes tar d'aspeutu individuales de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:*  [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Usando Git pa descargar aspeutos].\n: Facer esto nun tendría d'interferir col to repositoriu git si yes un desendolcador de MediaWiki. Llei [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pa más información sobro cómo activar los aspeutos y escoyer el predetermináu.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activáu)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desactiváu''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>desactiváu</strong>)",
        "mediastatistics": "Estadístiques de multimedia",
        "mediastatistics-summary": "Estadístiques sobro los tipos de ficheros xubíos. Esto sólo incluye la versión más nueva d'un ficheru. Escluyense les versiones antigües o desaniciaes de los ficheros.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
index 2878724..f4d4d28 100644 (file)
        "cascadeprotected": "Batu bu icde betara zo nendar, kire va vlevefu {{PLURAL:$1|bu|bu}} pasur, danu kan tegisa \"stoyakorafa\" rotisaca zo nendad : $2",
        "namespaceprotected": "Va bu koe '''$1''' yoltxo me robetal !",
        "ns-specialprotected": "Aptafu bu tir merobetanu.",
-       "titleprotected": "Bat vergumvelt gan [[User:$1|$1]] zo reduranendar.\nBatdume : ''$2''.",
+       "titleprotected": "Bat vergumvelt gan [[User:$1|$1]] zo reduranendar.\nBatdume : <em>$2</em>.",
        "virus-scanfailed": "rodjeyena drunara ($1 beksa)",
        "virus-unknownscanner": "megrupena kevkioxeka :",
        "logouttext": "Rin daletoe til solgluyanaf.\nRin va {{SITENAME}} yoltiskon ware rofavel oke, bifoton kan ar yolt, va int toldogluyal.",
        "prefs-help-email": "E-mail mane tir rotikatcune vox adrafe gu betara va remravlem todon gu vulkura va bat.",
        "prefs-help-email-others": "Dere ronaral da rictal da artan va rin kan e-mail is gluyasiki moe rinafu favesikbu oku prilarabu rotuzerar.\nRinafe e-mail mane me zo razdar viele ar webesik uzerar.",
        "prefs-help-email-required": "E-mail mane zo kucilar.",
-       "email-address-validity-invalid": "Va enafe e-mail mane bazel",
        "userrights": "Pofera va favesikrokeem",
        "userrights-lookup-user": "Pofera va favesikeem",
        "userrights-user-editname": "Va favesikyolt bazel",
        "destfilename": "Warzaf iyeltakyolt:",
        "upload-maxfilesize": "Cugafo iyeltakaldo : $1",
        "watchthisupload": "Suzdara va batu bu",
-       "upload-success-subj": "Ksudanhara",
        "upload-proto-error": "Kitsendaj",
        "upload-file-error": "Koefa rokla",
        "upload-file-error-text": "Yawason va ugaloraf iyeltak mo zanisiko, koefa rokla sokir. Va [[Special:ListUsers/sysop|bolkristusik]] vay uzeral !",
        "rollbackfailed": "Rodjeyesa nabildara",
        "cantrollback": "Impossible de révoquer : dernier auteur est le seul à avoir modifié cet article",
        "alreadyrolled": "Dimplekura va ironokafa betara va \"$1\" teliz gan [[User:$2|$2]] ([[User talk:$2|Prilara]]) me zo roskur; artan va teliz ixam al betar oke al dimplekur.\n\nIronokafa betara gan [[User:$3|$3]] ([[User talk:$3|Prilara]]) zo skuyur.",
-       "editcomment": "Betaravildeks tiyir : ''« $1 »''.",
+       "editcomment": "Betaravildeks tiyir : <em>$1</em>.",
        "revertpage": "Dimplekuyun betakseem ke [[Special:Contributions/$2|$2]] ([[User talk:$2|Prilara]]); dim ironokaf siatos ke [[User:$1|$1]]",
        "rollback-success": "Dimplekun betaks yo gan $1; dimpira ko ironokaf siatos ke $2.",
        "protectlogpage": "Izvot va nendareem",
        "movelogpagetext": "Vleveon vexala dem arrundayanu bu se.",
        "movereason": "Lazava :",
        "revertmove": "dimplekura",
-       "delete_and_move": "Sulara is arplekura",
        "delete_and_move_text": "==Sulara eruna==\n\"[[:$1]]\" kalefu bu ixam krulder.\nKas ta askira va darka ta arrundara va in djusulal ?",
        "delete_and_move_confirm": "En, va bu sulal !",
        "delete_and_move_reason": "Sulayan ta dark ta arrundara",
index 633281d..6cb75d2 100644 (file)
        "myprivateinfoprotected": "आप कय लगे आपन व्यक्तिगत जानकारी बदलेक अनुमति नाई है।",
        "mypreferencesprotected": "आप कय लगे आपन वरीयता बदलेक  अनुमति नाई है।",
        "ns-specialprotected": "विशेष पन्ना सम्पादित नाई होइहैं।",
-       "titleprotected": "सदस्य [[User:$1|$1]] इ शीर्षक कय पन्ना बनावे से सुरक्षित करे हँय।\nएकरे लिये कारण होय: \"''$2''\"",
+       "titleprotected": "सदस्य [[User:$1|$1]] इ शीर्षक कय पन्ना बनावे से सुरक्षित करे हँय।\nएकरे लिये कारण होय: <em>$2</em>",
        "filereadonlyerror": "\"$1\" फ़ाइल को बदलने में असक्षम क्योंकि भण्डार \"$2\" इस समय 'केवल पाठन हेतु' (रीड ओनली) है।\n\nजिस प्रबंधक ने ये प्रबंध लगाया है उन्होंने निम्न विवरण प्रदान किया है: \"$3\"।",
        "invalidtitle-knownnamespace": "\"$2\" नामस्थान अउर \"$3\" नाँव वाला गलत शीर्षक",
        "invalidtitle-unknownnamespace": "अज्ञात नामस्थान संख्या $1 अउर नाँव \"$2\" वाला गलत शीर्षक",
        "createaccountreason": "कारण:",
        "createacct-reason": "कारण",
        "createacct-reason-ph": "आप दुसर खाता काहे बनावा जात है",
-       "createacct-captcha": "सुरक्षा जाँच",
-       "createacct-imgcaptcha-ph": "उपरा वाला पाठ लिखा जाय",
        "createacct-submit": "आपन खाता बनावा जाय",
        "createacct-another-submit": "एकठु अउर खाता खोला जाय",
        "createacct-benefit-heading": "{{SITENAME}} आपय जैसन मनईन बनाए हँय।",
        "passwordreset-emailtext-ip": "केहु (शायद आप कय, $1 आइ॰पी ठहर से) {{SITENAME}} ($4) पे अपने {{PLURAL:$3|गुप्त कुंजी}} कय रीसेट करेक अनुरोध करे है। इ ई-मेल ठहर से निचे  कय{{PLURAL:$3|खाता जोड़ान् है}}:\n\n$2\n\n{{PLURAL:$3|इ}} अस्थायी गुप्त कुंजी {{PLURAL:$5|दिन}} कय बाद काम नाइ करि। आप लॉग इन कई कय एकठु नँवा गुप्त कुंजी अभीनै चुन लुहा जाए। यदि इ अनुरोध केहु अउर करे है, या फिर आप कय आपन गुप्त कुंजी याद आइ गा है, औ आप {{PLURAL:$3|आपन}} गुप्त कुंजी नाइ बदलेक चाहा जात है तव आप इ संदेश कय अनदेखा कई कय आपन पुरान गुप्तकुंजी कय प्रयोग कै सका जात है।",
        "passwordreset-emailtext-user": "{{SITENAME}} ($4) पे सदस्य $1 आपकय {{PLURAL:$3|खाता}} कय गुप्तकुंजी कय रीसेट करेक अनुरोध करे हैं। इ ई-मेल ठहर से इ {{PLURAL:$3|खाता जोडान है}}:\n\n$2\n\n{{PLURAL:$3|ई}} अस्थायी गुप्तकुंजी {{PLURAL:$5|दिन}} कय बाद काम नाइ करि।\nआप लॉग इन कइकै एकठु नँवा गुप्त कुंजी अभीन लै लेक चाहि। यदि इ अनुरोध केहु दुसर करे है, या फिर आप कय आपन गुप्त कुंजी याद आई गा है, अव आप {{PLURAL:$3|आपन}} गुप्तकुंजी नाई बदलेक चाहा जात है, आप इ संदेश कय अनदेखा कई कय आपन पुरान गुप्तकुंजी कय प्रयोग कइ सका जात है।",
        "passwordreset-emailelement": "सदस्यनाँव: \n$1\n\nअस्थायी गुप्तकुंजी: \n$2",
-       "passwordreset-emailsent": "एक गुप्तकुंजी रीसेट ई-मेल भेज दिहा गा है।",
+       "passwordreset-emailsentemail": "एक गुप्तकुंजी रीसेट ई-मेल भेज दिहा गा है।",
        "passwordreset-emailsent-capture": "नीचे जवन देखावा है ओकर गुप्तकुंजी रीसेट ई-मेल भेज दिहा गा है।",
        "passwordreset-emailerror-capture": "नीचे दिहा गुप्त कुंजी रीसेट ई-मेल पैदा भा रहा, लेकिन ओका {{GENDER:$2|सदस्य}} कय भेजब असफल रहा।\nत्रुटि: $1",
        "changeemail": "ईमेल ठाँव बदला जाय",
-       "changeemail-text": "अपना ई-मेल पता परिवर्तित करने के लिए इस फ़ॉर्म को पूरा करें। इस बदलाव की पुष्टि करने के लिये आपको अपना कूटशब्द पुनः लिखना पड़ेगा।",
+       "changeemail-header": "अपना ई-मेल पता परिवर्तित करने के लिए इस फ़ॉर्म को पूरा करें। इस बदलाव की पुष्टि करने के लिये आपको अपना कूटशब्द पुनः लिखना पड़ेगा।",
        "changeemail-no-info": "इ पन्ना कय सीधय प्रयोग करेक लिए आप कय लॉग इन करेक परि।",
        "changeemail-oldemail": "अबहिन कय ई-मेल ठहर:",
        "changeemail-newemail": "नँवा ई-मेल ठहर:",
        "undo-summary-username-hidden": "लुकुआवल सदस्यन् कय करल बदलाव $1 कय पहिले जईसन कई गय",
        "cantcreateaccounttitle": "खाता नाई खोली सका जात है",
        "cantcreateaccount-text": "इ आइ॰पी ठहर ('''$1''') कय खाता बनावे कय [[User:$3|$3]] रोक लगाए हैँ।\n\nएकरे लिये $3 ''$2'' कारण दिहे हैं।",
-       "cantcreateaccount-range-text": "'''$1''' कय श्रेणी में आवे वाला आई॰पी ठहर से, जवनेमें आप कय आई॰पी ठहर ('''$4''') शामिल है, नँवा खाता बनावे कय लिए [[User:$3|$3]] अवरोधित कई गा है। \n\n$3 द्वारा दिया गया कारण है: \"$2\"",
+       "cantcreateaccount-range-text": "<strong>$1</strong> कय श्रेणी में आवे वाला आई॰पी ठहर से, जवनेमें आप कय आई॰पी ठहर (<strong>$4</strong>) शामिल है, नँवा खाता बनावे कय लिए [[User:$3|$3]] अवरोधित कई गा है। \n\n$3 द्वारा दिया गया कारण है: \"$2\"",
        "viewpagelogs": "इस पन्ना कय लॉग देखा जाय",
        "nohistory": "इ पन्ना कय कवनो इतिहास नाई है।",
        "currentrev": "अभिनै कय अवतरण",
        "prefs-help-prefershttps": "ई प्राथमिकता आप कय अगला लॉगिन मे प्रभावी होई।",
        "prefswarning-warning": "आप अपने पसंद मा परिवर्तन करा गा है जवन अभिन अतक नाइ सहेजि गा है ।अगर आप \"$1\" कय किल्क किहे बिना इ पन्ना छोडा जाइ तव आप कय पसंद नाइ सहेजी जाइ।",
        "prefs-tabs-navigation-hint": "सुझाव: आप टैब्स सूची में टैब्स कय बीचे आवे-जाय खत्तीर बाँवा औ दहिना तीर कुंजिन् कय उपयोग कै सका जात है।",
-       "email-address-validity-valid": "ई-मेल ठहर वैध नाइ लागत है",
-       "email-address-validity-invalid": "एकठु वैध ई-मेल ठहर दिहा जाय",
        "userrights": "सदस्य अधिकार व्यवस्थापन",
        "userrights-lookup-user": "सदस्य समूहन् कय व्यवस्थापन करा जाय",
        "userrights-user-editname": "सदस्यनावँ दिहा जाय:",
        "right-blockemail": "अउर सदस्यन् कय ईमेल करै से रोका जाय",
        "right-hideuser": "सदस्यनाँव ब्लॉक करा जाय औ ओका मनईन से लुकुआवा जाय",
        "right-ipblock-exempt": "आइ॰पी ब्लॉक्स, ऑटो-ब्लॉक्स अव रेंज ब्लॉक्स कय अनदेखा करा जाय",
-       "right-proxyunbannable": "स्वचालित प्रौक्सी ब्लॉक्स कय अनदेखा करा जाय",
        "right-unblockself": "अपने आप कय अनावरुद्ध करा जाय",
        "right-protect": "सुरक्षा स्तर बदला जाय अव सीढ़ी-सुरक्षित पन्ना सम्पादन करा जाय",
        "right-editprotected": "अइसन सुरक्षित पन्नन कय सम्पादन करा जाय जवने कय सम्पादन कय \"{{int:protect-level-sysop}}\"",
        "recentchanges-label-bot": "ई सम्पादन एक्ठु ब़ा़ट करे है",
        "recentchanges-label-unpatrolled": "ई संपादन अभीन नाइ जाँचि गा है",
        "recentchanges-label-plusminus": "पन्ना कय आकार इ बाइट संख्या से बदला",
-       "recentchanges-legend-heading": "'''कुंजी:'''",
+       "recentchanges-legend-heading": "<strong>कुंजी:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नवा पन्नन् कय सूची]] कय भी देखा जाय)",
        "rcnotefrom": "नीचे <strong>$2</strong> के बाद से (<strong>$1</strong> तक) {{PLURAL:$5|हुआ बदलाव दर्शाया गया है|हुए बदलाव दर्शाए गये हैं}}।",
        "rclistfrom": "$3 $2 से नँवा बदलाव देखावा जाय",
        "watchthisupload": "इ फ़ाइल पे ध्यान रक्खा जाय",
        "filewasdeleted": "इस नाम की एक फ़ाइल पहले भी अपलोड होने के बाद हटाई जा चुकी है।\nफिरसे अपलोड करने से पहले आप $1 को अच्छी तरह से जाँचे।",
        "filename-bad-prefix": "आप जो फ़ाइल अपलोड कर रहे हैं उसका नाम '''\"$1\"''' से शुरू होता है, जो डिजिटल कैमेरे द्वारा दिया गया नाम है।\nकृपया इस फ़ाइल के लिये कोई दूसरा अधिक जानकारीयुक्त नाम चुनें।",
-       "upload-success-subj": "अपलोड होइ गय",
-       "upload-success-msg": "आप कय [$2] से अपलोड असफल रहा। ई [[:{{ns:file}}:$1]] पे उपलब्ध है",
-       "upload-failure-subj": "अपलोड समस्या",
-       "upload-failure-msg": "[$2] से आप कय अपलोड में एकठु समस्या रहा:\n\n$1",
-       "upload-warning-subj": "अपलोड चेतावनी",
-       "upload-warning-msg": "आप कय [$2] से अपलोड कय साथे एकठु समस्या रहा। आप इ समस्या कय ठीक करेक लिए [[Special:Upload/stash/$1|अपलोड फ़ॉर्म]] पे लौट सका जात है।",
        "upload-proto-error": "गलत प्रोटोकॉल",
        "upload-proto-error-text": "रिमोट अपलोड कय लिये यू॰आर॰एल कय नाँव <code>http://</code> या <code>ftp://</code> से शुरू होब आवश्यक है।",
        "upload-file-error": "आन्तरिक त्रुटि",
        "querypage-disabled": "प्रदर्शन कारणन् से इ विशेष पन्ना अक्षम कै गा है।",
        "apihelp": "API सहयोग",
        "apihelp-no-such-module": "मोड्युल \"$1\" नाइ मिला ।",
+       "apisandbox": "ए॰पी॰आइ प्रयोगस्थल",
+       "apisandbox-api-disabled": "इ साइट पे ए.पी.आइ अक्षम है ।",
+       "apisandbox-submit": "अनुरोध करा जाय",
+       "apisandbox-reset": "स्पष्ट",
+       "apisandbox-examples": "उदाहरण",
+       "apisandbox-results": "परिणाम",
+       "apisandbox-request-url-label": "अनुरोध URL:",
+       "apisandbox-request-time": "अनुरोध समय: $1",
        "booksources": "किताबीन कय स्रोत",
        "booksources-search-legend": "किताबीन कय स्रोत खोजा जाय",
        "booksources-search": "खोजा जाय",
        "rollbackfailed": "वापिस लेब असफल रहा",
        "cantrollback": "पुरान अवतरण कय पहिले जैसन नाइ कै सका जात है ; इ पन्ना कय आखिरी योगदानकर्ता खालि इ लेख कय लिखे हैं ।",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|बातचीत]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) द्वारा किए गए  [[:$1]] के पिछले संपादन को वापिस पुरानी स्थिति पर नहीं लाया जा सकता है;\nकिसी और ने इस बीच या तो इस पृष्ठ को फिर से संपादित कर दिया है या पहले ही पृष्ठ पुरानी स्थिति पर लाया जा चुका है।\n\nइस पृष्ठ का अन्तिम संपादन [[User:$3|$3]] ([[User talk:$3|बातचीत]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) ने किया है।",
-       "editcomment": "संपादन सारांश रहा: \"''$1''\"।",
+       "editcomment": "संपादन सारांश रहा: <em>$1</em>।",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|बातचीत]])से [[User:$1|$1]] कय करल पिछला संशोधन उल्टाई कय पहिले जैसन कै गय",
        "revertpage-nouser": "(सदस्य नाँव हटाइ गा है) कय संपादन कय हटाइकए {{GENDER:$1|[[User:$1|$1]]}} कय अन्तिम अवतरण कय पहिले जैसन कै गय।",
        "rollback-success": "$1 कय संपादन हटाइ गय;\n$2 कय संपादित अन्तिम अवतरण कय पुनर्स्थापित कै गय।",
        "movenosubpage": "इ पन्ना कय कवनो उप-पन्ना नाइ है ।",
        "movereason": "कारण:",
        "revertmove": "पहिले जैसन करा जाय",
-       "delete_and_move": "मिटावा जाय अव घुस्कावा जाय",
        "delete_and_move_text": "==हटावै कय ज़रूरत==\nलक्ष्य पन्ना \"[[:$1]]\" पहिलवे से मौजूद है।\nनाव बदलय खत्तीर का आप एका हटावै चाहा जात है?",
        "delete_and_move_confirm": "हाँ,पन्ना कय मिटावा जाय",
        "delete_and_move_reason": "\"[[$1]]\" से घुस्कावै खत्तीर जगह बनाई गा है",
        "log-name-pagelang": "भाषा लाग बदला जाय",
        "log-description-pagelang": "यह पृष्ठ भाषाओं में परिवर्तन का लॉग है।",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (सक्षम)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''अक्षम''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>अक्षम</strong>)",
        "mediastatistics": "मीडिया कय आँकड़ा",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 बाईट}} ($2; $3%)",
        "mediastatistics-table-mimetype": "MIME प्रकार",
index b530c19..5a68e59 100644 (file)
@@ -27,7 +27,8 @@
                        "Dağlı95",
                        "Sayginer",
                        "Şeyx Şamil",
-                       "Serkanland"
+                       "Serkanland",
+                       "Macofe"
                ]
        },
        "tog-underline": "Keçidlərin altını xətlə:",
        "myprivateinfoprotected": "Sizin şəxsi məlumatlarınızı redaktə etmək səlahiyyətiniz yoxdur.",
        "mypreferencesprotected": "Seçimlərinizi redaktə etmək üçün izniniz yoxdur.",
        "ns-specialprotected": "Xüsusi səhifələr redaktə oluna bilməz.",
-       "titleprotected": "Bu adda səhifənin yaradılması istifadəçi [[User:$1|$1]] tərəfindən qadağan edilmişdir.\nGöstərilən səbəb: \"''$2''\".",
+       "titleprotected": "Bu adda səhifənin yaradılması istifadəçi [[User:$1|$1]] tərəfindən qadağan edilmişdir.\nGöstərilən səbəb: <em>$2</em>.",
        "filereadonlyerror": "\"$2\" fayl deposundakı \"$1\" faylı ancaq oxunula bilən rejimdə olduğuna görə dəyişdirmək üçün açıla bimir.\n\nRejimi qoyan nəzarətçinin izahı: \"$3\".",
        "invalidtitle-knownnamespace": "\"$2\" sahə adı üçün \"$3\" mətni keçərsiz bir başlıq",
        "invalidtitle-unknownnamespace": "Naməlum $1 ad sahəsi miqdarı və keçərsiz \"$2\" başlıq",
        "recentchanges-label-bot": "Bu redaktə bot tərəfindən edilmişdir",
        "recentchanges-label-unpatrolled": "Bu redaktə hələ patrullanmayıb",
        "recentchanges-label-plusminus": "Səhifənin ölçüsündəki dəyişiklik (baytlarla)",
-       "recentchanges-legend-heading": "'''Legenda:'''",
+       "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (həmçinin bax: [[Special:NewPages|yeni səhifələrin siyahısı]])",
        "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": "$3 $2 vaxtından başlayaraq yeni dəyişiklikləri göstər",
        "upload-dialog-button-done": "Oldu",
        "upload-dialog-button-save": "Qeyd et",
        "upload-dialog-button-upload": "Yüklə",
-       "upload-form-label-select-file": "Fayl seç",
        "upload-form-label-infoform-title": "Detallar",
        "upload-form-label-infoform-name": "Ad",
        "upload-form-label-infoform-description": "İzah",
index dab924e..f8cc340 100644 (file)
        "myprivateinfoprotected": "اؤز گیزلی بیلگیلرینیزی دَییشدیرمگه ایجازه‌نیز یوخدور.",
        "mypreferencesprotected": "اؤز ترجیحلرینیزی دَییشدیرمگه ایجازه‌نیز یوخدور.",
        "ns-specialprotected": "اؤزل یارپاقلاری دَییشمک اولماز.",
-       "titleprotected": "بو آددا یارپاغین یارادیلماسی [[User:$1|$1]] ایشلدن طرفیندن باغلانیب‌دیر.\nاونون نَدَن‌لیگی بودور: \"''$2''\"",
+       "titleprotected": "بو آددا یارپاغین یارادیلماسی [[User:$1|$1]] ایشلدن طرفیندن باغلانیب‌دیر.\nاونون نَدَن‌لیگی بودور: <em>$2</em>.",
        "filereadonlyerror": "«$2» آنباری‌نین تکجه-اوخومالی دوروموندا اولدوغونا گؤره، «$1»-ی دَییشمک اولماز.\n\nاونو باغلایان ایداره‌چی بو ایضاحی وئریب‌دیر: $3",
        "invalidtitle-knownnamespace": "«$2» آدآلان‌لی و «$3» یازی‌لی یانلیش باشلیق",
        "invalidtitle-unknownnamespace": "تانینمامیش $1 نومره‌لی آدآلان و «$2» یازی‌لی یانلیش باشلیق",
        "undo-summary-username-hidden": "گیزلی ایستیفاده‌چی ایله ائدیلمیش $1 نوسخه‌سینی قایتارماق",
        "cantcreateaccounttitle": "حساب یارادماق اولمور",
        "cantcreateaccount-text": "بو ای پی عنوانین‌دان ('$1) ایستیفاده‌چی حسابی یارادیلماسی [[User:$3|$3]] طرفین‌دن انگللنمیش‌دیر.\n\n$3 طرفین‌دن وئریلن سبب '$2",
-       "cantcreateaccount-range-text": "'''$1''' آی‌پی آدرس آرالیغیندان حساب یارانماق، [[User:$3|$3]] ایشلدنی طرفیندن یاساقلانیب‌دیر. سیزین‌ده آی‌پی آدرسیز ('''$4''') بو آرادادیر.\n\n$3 طرفین‌دن وئریلن سبب بودور: «$2»",
+       "cantcreateaccount-range-text": "<strong>$1</strong> آی‌پی آدرس آرالیغیندان حساب یارانماق، [[User:$3|$3]] ایشلدنی طرفیندن یاساقلانیب‌دیر. سیزین‌ده آی‌پی آدرسیز (<strong>$4</strong>) بو آرادادیر.\n\n$3 طرفین‌دن وئریلن سبب بودور: «$2»",
        "viewpagelogs": "بۇ صفحه‌نین قئیدلرینه باخ",
        "nohistory": "بو صحیفه اوچون دَییشدیرمه گئچمیشی یوخدور.",
        "currentrev": "سون نوسخه",
        "recentchanges-label-bot": "بو دییشیک بیر بوت طرفیندن ائدیلیب‌دیر",
        "recentchanges-label-unpatrolled": "بو دییشیکلیک هله گؤزدن گئچیریلمه‌ییب‌دیر",
        "recentchanges-label-plusminus": "صفحه‌نین اؤلچوسو بایت میقداری ایله تعیین ائدیلیر",
-       "recentchanges-legend-heading": "'''قیسالتمالار:'''",
+       "recentchanges-legend-heading": "<strong>قیسالتمالار:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (بیرده [[Special:NewPages|یئنی صفحه‌لرین لیستینه]] باخین)",
        "rcnotefrom": "آشاغی داکی دَییشیک لرده <strong>$3, $4</strong> (دن <strong>$1</strong> {{PLURAL:$5|چان گوستریلیب|چان گوستریلیب دیر}}).",
        "rclistfrom": "$3 $2 واختیندان باشلایاراق یئنی دییشیکلری گؤستر",
index 637418e..58851fd 100644 (file)
                        "ҒатаУлла",
                        "Ҡамыр Батыр",
                        "아라",
-                       "Ләйсән"
+                       "Ләйсән",
+                       "Macofe",
+                       "Азат Хәлилов",
+                       "Айбикә",
+                       "З. ӘЙЛЕ",
+                       "Янмурза Баки",
+                       "Айсар",
+                       "Lizalizaufa"
                ]
        },
        "tog-underline": "Һылтанмалар аҫтына һыҙыу:",
-       "tog-hideminor": "Әһәмиәте ҙур булмаған төҙәтеүҙәрҙе һуңғы үҙгәртеүҙәр исемлегендә күрһәтмәҫкә",
+       "tog-hideminor": "Һуңғы үҙгәртеүҙәрҙең бәләкәй төҙәтеүҙәрен күрһәтмәҫкә",
        "tog-hidepatrolled": "Һуңғы үҙгәртеүҙәр исемлегендә тикшерелгән үҙгәртеүҙәрҙе йәшер",
-       "tog-newpageshidepatrolled": "ЯңÑ\8b Ð±Ð¸Ñ\82Ñ\82Ó\99Ñ\80 Ð¸Ñ\81емлегендÓ\99 Ñ\82икÑ\88еÑ\80елгÓ\99н Ò¯Ò\99гÓ\99Ñ\80Ñ\82еүÒ\99Ó\99Ñ\80Ò\99е Ð¹Ó\99Ñ\88еÑ\80",
-       "tog-hidecategorization": "Биттәр категоризацияһын йәшереү",
+       "tog-newpageshidepatrolled": "ТикÑ\88еÑ\80елгÓ\99н Ð±Ð¸Ñ\82Ñ\82Ó\99Ñ\80Ò\99е Ñ\8fÒ£Ñ\8b Ð±Ð¸Ñ\82Ñ\82Ó\99Ñ\80 Ñ\82еÒ\99мÓ\99һендÓ\99 ÐºÒ¯Ñ\80Ò»Ó\99Ñ\82мÓ\99ҫкÓ\99",
+       "tog-hidecategorization": "Биттәрҙең категоризацияһын йәшерергә",
        "tog-extendwatchlist": "Барлыҡ үҙгәртеүҙәрҙе үҙ эсенә алған, киңәйтелгән күҙәтеү исемлеге",
        "tog-usenewrc": "Һуңғы төҙәтеүҙәр һәм күҙәтеү исемлегендәге үҙгәрештәрҙе төркөмдәргә бүлергә",
-       "tog-numberheadings": "Ð\91аÑ\88иÑ\81емдÓ\99Ñ\80Ò\99е автоматик рәүештә номерланһын",
+       "tog-numberheadings": "Ð\90Ñ\82амалаÑ\80 автоматик рәүештә номерланһын",
        "tog-showtoolbar": "Мөхәррирләгән ваҡытта өҫкө ҡоралдар панелен күрһәтергә (JavaScript кәрәк)",
        "tog-editondblclick": "Биттәрҙе ике сиртеү менән мөхәррирләргә",
-       "tog-editsectiononrightclick": "Бүлектәрҙе исемдәренә төрткөнөң уң яғына сиртеп үҙгәртергә",
+       "tog-editsectiononrightclick": "Бүлектәрҙе исемдәрен төрткөнөң уң яғына баҫып үҙгәртергә",
        "tog-watchcreations": "Мин төҙөгән биттәрҙе һәм күсергән файлдарҙы күҙәтеү исемлегенә өҫтәргә",
        "tog-watchdefault": "Мин үҙгәрткән биттәр һәм файлдар аңлатмаһын күҙәтеү исемлегенә өҫтәргә",
        "tog-watchmoves": "Мин исемен үҙгәрткән биттәрҙе һәм файлдарҙы күҙәтеү исемлегенә өҫтәргә",
        "pagetitle": "{{SITENAME}} проектынан",
        "retrievedfrom": "Сығанағы — «$1»",
        "youhavenewmessages": "Яңы $1 бар ($2).",
-       "youhavenewmessagesfromusers": "{{PLURAL:$4|Һеҙгә}} {{PLURAL:$3|$3 ҡатнашыусыһана}} $1 килде ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Һеҙгә}} {{PLURAL:$3|$3 ҡатнашыусыһынан}} $1 килде ($2).",
        "youhavenewmessagesmanyusers": "Һеҙгә күп ҡатнашыусынан $1 бар ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|1=яңы хәбәр|яңы хәбәр}}",
        "newmessagesdifflinkplural": "һуңғы {{PLURAL:$1|үҙгәртеү|999=үҙгәртеүҙәр}}",
        "databaseerror-query": "Һоратыу: $1",
        "databaseerror-function": "Функция:$1",
        "databaseerror-error": "Хата: $1",
+       "transaction-duration-limit-exceeded": "$1 яҙмаһы оҙонлоғо мөмкин булған $2 сикләүен {{PLURAL:$2|секундҡа}}уҙып китте. Ҙур булмаған операциялар эшләп ҡарағыҙ.",
        "laggedslavemode": "'''Иғтибар:''' биттә һуңғы үҙгәртеүҙәр күрһәтелмәгән булырға мөмкин.",
        "readonly": "Мәғлүмәттәр базаһы бикләнгән",
        "enterlockreason": "Ябылыу сәбәбен һәм ваҡытын белдерегеҙ.",
        "missingarticle-rev": "(версия № $1)",
        "missingarticle-diff": "(айырма: $1, $2)",
        "readonly_lag": "Өҫтәмә сервер төп сервер менән синхронлашҡанға тиклем мәғлүмәттәр базаһы автоматик рәүештә үҙгәрештәргә ҡаршы ябылған.",
+       "nonwrite-api-promise-error": " 'Promise-Non-Write-API-Action' HTTP исеменә ғариза ебәрелде, тик API модюленә китте.",
        "internalerror": "Эске хата",
        "internalerror_info": "Эске хата: $1",
        "internalerror-fatal-exception": "$1 тибындағы төҙәтә алмаҫлыҡ ҡағиҙәнән ситкә тайпылыш",
        "badtitle": "Ярамаған исем",
        "badtitletext": "Биттең һоратылған исеме дөрөҫ түгел, буш йәки телдәр араһы йәки интервики исеме яңылыш күрһәтелгән. Исемдә тыйылған символдар булыуы ла мөмкин.",
        "title-invalid-empty": "Һоратылған бит башлығы буш йәки исемдәр арауығы була.",
-       "title-invalid-utf8": "Һеҙ эҙләгән биттә  UTF-8 дөрөҫ булмаған символдар теҙмәһе бар.",
+       "title-invalid-utf8": "Һеҙ эҙләгән биттә дөрөҫ булмаған UTF-8 символдар теҙмәһе бар.",
+       "title-invalid-interwiki": "Һеҙ һораған биттә интервики-һылтанма бар, был исемдәрҙә ҡулланыла алмай.",
+       "title-invalid-talk-namespace": "Һеҙ һораған бит исеме булмаған фекер алышыу битенә һылтана.",
+       "title-invalid-characters": "Һеҙ һораған биттә ярамаған $1 символы бар.",
+       "title-invalid-relative": " (/,../) юлы булған исем ғәмәлдә түгел, ҡулланыусы браузер менән ҡулланған ваҡытта улар йыш ҡына асылмай.",
+       "title-invalid-magic-tilde": "Һоралған исемдә ярамаған исем бар (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "Һоралған бит исеме бик оҙон. $1 {{PLURAL:$1|байттан}} артмаҫҡа тейеш.",
+       "title-invalid-leading-colon": "Һораған бит башында ярамаған ике нөктә бар.",
        "perfcached": "Был мәғлүмәттәр кэштан алынған, уларҙа һуңғы үҙгәртеүҙәр булмаҫҡа мөмкин. Кэшта иң күбе {{PLURAL:$1|язма}} һаҡлана.",
        "perfcachedts": "Был мәғлүмәттәр кэштан алынған, ул һуңғы тапҡыр $1 яңыртылды.  Кэшта иң күбе  {{PLURAL:$4|язма}} һаҡлана",
        "querypage-no-updates": "Был битте яңыртыу хәҙер тыйылған.\nБында күрһәтелгән мәғлүмәттәр яңыртылмаясаҡ.",
        "viewyourtext": "Был биттәге '''үҙгәртеүҙәрегеҙҙең''' сығанаҡ текстын ҡарай һәм күсермәһен ала алаһығыҙ:",
        "protectedinterface": "Был биттә программаның интерфейс хәбәре бар. Вандализм осраҡтарын булдырмау өсөн, был битте үҙгәртеү тыйыла.\nБыл хәбәрҙең тәржемәһен өҫтәү йәки үҙгәртеү өсөн, зинһар, MediaWiki проектының [//translatewiki.net/ translatewiki.net] локалләштереү сайтын ҡулланығыҙ.",
        "editinginterface": "'''Иғтибар.''' Һеҙ программаның арайөҙ тексты булған битте мөхәррирләйһегеҙ.\nУны үҙгәртеү, башҡа ҡулланыусыларҙын арайөҙ күренешен үҙгәртәсәктер.\nТәржемә өсөн [//translatewiki.net/wiki/Main_Page?setlang=ba translatewiki.net] адресын, MediaWiki-ны локалләштереү проектын ҡулланыу яҡшыраҡ буласаҡтыр.",
+       "translateinterface": "Был хәбәрҙе тәржәмә итү өсөн [//translatewiki.net/ translatewiki.net]сайтын ҡулланығыҙ.",
        "cascadeprotected": "Был бит үҙгәртеүҙәрҙән һаҡланған, сөнки ул эҙмә-эҙлекле һаҡлау ҡуйылған {{PLURAL:$1|1=биткә|биттәргә}} керә:\n$2",
        "namespaceprotected": "«$1» исем арауығындағы биттәрҙе мөхәррирләү өсөн хоҡуҡтарығыҙ юҡ.",
        "customcssprotected": "Был CSS-битте үҙгәртеү хоҡуғығыҙ юҡ, сөнки унда башҡа ҡулланыусының шәхси көйләүҙәре бар.",
        "myprivateinfoprotected": "Һеҙгә шәхси мәғлүмәттәрегеҙҙе үҙгәртергә рөхсәт юҡ",
        "mypreferencesprotected": "Һеҙҙең көйләүҙәрегеҙҙе мөхәррирләргә хоҡуғығыҙ юҡ.",
        "ns-specialprotected": "«{{ns:special}}» исем арауығындағы биттәрҙе үҙгәртеп булмай.",
-       "titleprotected": "Был исем менән бит яһау [[User:$1|$1]] тарафынан тыйылған.\nБелдерелгән сәбәп: ''$2''.",
+       "titleprotected": "Был исем менән бит яһау [[User:$1|$1]] тарафынан тыйылған.\nБелдерелгән сәбәп: <em>$2</em>.",
        "filereadonlyerror": "«$1» файлын үҙгәртеп булмай, сөнки «$2» һаҡлағысы «уҡыу өсөн генә» тәртибендә.\n\nБыл сикләүҙе индергән хаким биргән аңлатма:«''$3''».",
        "invalidtitle-knownnamespace": "\"$2\" исем арауығы һәм \"$3\"  тексты исем өсөн ярамай",
        "invalidtitle-unknownnamespace": "\"$2\" тексты һәм \"$1\" арауыҡ өсөн билдәһеҙ номерлы исем ярамай",
        "exception-nologin": "Танылмағанһығыҙ",
-       "exception-nologin-text": "Был битте ҡарау йәки һоратылған ғәмәлде башҡарыу өсөн системала [[Special:Userlogin|танылыр]] кәрәк.",
+       "exception-nologin-text": "Был битте ҡарау йәки һоратылған ғәмәлде башҡарыу өсөн системала танылырға кәрәк.",
+       "exception-nologin-text-manual": "Был биткә кереү өсөн $1 булырға тейеш",
        "virus-badscanner": "Көйләү хатаһы: Билдәһеҙ вирустар сканеры: ''$1''",
        "virus-scanfailed": "сканлау хатаһы ($1 коды)",
        "virus-unknownscanner": "беленмәгән антивирус:",
        "logouttext": "'''Һеҙ эш сеансын тамамланығыҙ.'''\n\nҠайһы бер биттәр һеҙ системаға танылмаған кеүек күренеүен дауам итер. Быны бөтөрөү өсөн браузер кэшын таҙартығыҙ.",
        "cannotlogoutnow-title": "Хәҙер үк сығып булмай",
+       "cannotlogoutnow-text": "$1 файҙалланған ваҡытта инергә ярамай",
        "welcomeuser": "Рәхим итегеҙ $1!",
        "welcomecreation-msg": "Иҫәп яҙыуығыҙ яһалды.\nШәхси [[Special:Preferences|{{SITENAME}} көйләүҙәрен]] үҙегеҙгә уңайлы итеп үҙгәртергә онотмағыҙ.",
        "yourname": "Ҡатнашыусы исеме",
        "userlogin-remembermypassword": "Системала ҡалырға",
        "userlogin-signwithsecure": "Һаҡланыулы тоташыу",
        "cannotloginnow-title": "Хәҙер үк инеп булмай",
+       "cannotloginnow-text": "$1 файҙалланған ваҡытта инергә ярамай",
        "yourdomainname": "Һеҙҙең домен",
        "password-change-forbidden": "Был викила серһүҙегеҙҙе үҙгәртә алмайһығыҙ.",
        "externaldberror": "Тышҡы мәғлүмәт базаһы менән танылғанда хата барлыҡҡа килде йәки тышҡы үҙ көйләүҙәрегеҙҙе үҙгәртер өсөн хоҡуҡтарығыҙ етәрле түгел.",
        "wrongpassword": "Һеҙ ҡулланған серһүҙ ҡабул ителмәй. Яңынан яҙып ҡарағыҙ.",
        "wrongpasswordempty": "Зинһар, буш булмаған серһүҙ керетегеҙ.",
        "passwordtooshort": "Серһүҙ кәмендә $1 {{PLURAL:$1|символдан}} торорға тейеш.",
+       "passwordtoolong": "Серһүҙ {{PLURAL:$1|1 символдан}} артмаҫҡа тейеш.",
+       "passwordtoopopular": "Йыш ҡулланыдған серһүҙ ҡабул ителмәй, Башҡа серһүҙ һайлағыҙ.",
        "password-name-match": "Керетелгән серһүҙ ҡулланыусы исеменән айырылырға тейеш.",
        "password-login-forbidden": "Был ҡатнашыусы исемен һәм серһүҙҙе ҡулланыу тыйылған",
        "mailmypassword": "Серһүҙҙе ташлатыу",
        "createaccount-text": "Кемдер, электрон почта адресығыҙҙы күрһәтеп, {{SITENAME}} ($4) проектында «$3» пароле менән «$2» исемле иҫәп яҙыуы теркәне. Һеҙҙең кереүегеҙ һәм серһүҙегеҙҙе алмаштырыуығыҙ кәрәк.\n\nИҫәп яҙыуы яңылыш яһалһа, был хатҡа иғтибар итмәгеҙ.",
        "login-throttled": "Һеҙ системаға ҡат-ҡат танылырға тырыштығыҙ.\nТағы бер танылырҙан алда, зинһар, $1 көтөгөҙ.",
        "login-abort-generic": "Танылыу уңышһыҙ тамамланды",
+       "login-migrated-generic": "Һеҙҙең иҫәп яҙмаһы күсерелде, викила һеҙҙең иҫәп яҙмаһы башҡа юҡ.",
        "loginlanguagelabel": "Тел: $1",
        "suspicious-userlogout": "Һеҙҙең сеансты тамамлау тураһында һорауығыҙ кире ҡағылды, сөнки ул төҙөк булмаған браузер йәки кэшлаусы прокси тарафынан ебәрелгән һорауға оҡшаған.",
        "createacct-another-realname-tip": "Ысын исемегеҙ (мотлаҡ түгел).\nУны яҙып ҡуйһағыҙ, ул биткә кем төҙәтеү индергәнен күрһәтеү өсөн ҡулланыласаҡ.",
        "user-mail-no-addy": "Электрон почта адресы булмайынса электрон хәбәр ебәреп ҡараны",
        "user-mail-no-body": "Буш йә мәғәнәһеҙ йөкмәткеле ҡыҫҡа электрон хат ебәрергә тырышҡан.",
        "changepassword": "Серһүҙҙе үҙгәртергә",
-       "resetpass_announce": "Һеҙ системала электрон почта аша алынған ваҡытлыса серһүҙ менән танылдығыҙ. Системаға кереүҙә тамалау өсөн яңы серһүҙ булдырығыҙ.",
+       "resetpass_announce": "Системаға кереүҙә тамалау өсөн яңы серһүҙ булдырығыҙ.",
        "resetpass_header": "Иҫәп яҙыуы серһүҙен үҙгәртеү",
        "oldpassword": "Иҫке серһүҙ:",
        "newpassword": "Яңы серһүҙ:",
        "retypenew": "Серһүҙҙе яңынан керетегеҙ:",
        "resetpass_submit": "Серһүҙ ҡуйырға һәм танышырға",
        "changepassword-success": "Серһүҙегеҙ уңышлы үҙгәртелде!",
+       "changepassword-throttled": "Һеҙ системаға ҡат-ҡат танылырға тырыштығыҙ.\nТағы бер танылырҙан алда, зинһар, $1 көтөгөҙ.",
+       "botpasswords": "Роботтар серһүҙе.",
+       "botpasswords-summary": "<em>ПРобот пароле</em> API иҫәп яҙмаһына логин һәм паролһыҙ инергә мөмкинлек бирә. Робот пароле менән ингәндә ҡулланыусы хоҡуғы сикләнгән булыуы мөмкин.\n\nНи өсөн икәнен белмәһәгеҙ, быны эшләмәүегеҙ яҡшыраҡ.",
+       "botpasswords-disabled": "Роботтар серһүҙе һүндерелгән.",
+       "botpasswords-no-central-id": "Робот серһүҙен ҡулланыу өсөн үҙәк иҫәп яҙмаһына инергә кәрәк.",
+       "botpasswords-existing": "Робот серһүҙҙәре.",
+       "botpasswords-createnew": "Робот өсөн яңы серһүҙ булдырырға.",
+       "botpasswords-editexisting": "Робот серһүҙен мөхәррирләргә.",
        "botpasswords-label-appid": "Бот исеме:",
        "botpasswords-label-create": "Төҙөргә",
        "botpasswords-label-update": "Яңыртырға",
        "botpasswords-label-delete": "Юйырға",
        "botpasswords-label-resetpassword": "Серһүҙҙе ташлатыу",
        "botpasswords-label-grants": "Ҡулланылған рөхсәттәр:",
+       "botpasswords-help-grants": "Һәр рөхсәт иҫәп яҙмаһы булған ҡулланыусы хоҡуҡтарын ҡулланырға рөхсәт бирә. Тулыраҡ мәғлүмәт өсөн [[Special:ListGrants|рөхсәт таблицаһын]] ҡарағыҙ.",
+       "botpasswords-label-restrictions": "Ҡулланыуҙы сикләү:",
+       "botpasswords-label-grants-column": "Рөхсәт",
+       "botpasswords-bad-appid": "$1 исемле робот ярамай.",
+       "botpasswords-insert-failed": "$1 исемле роботты өҫтәп булманы. Бәлки өҫтәлгән булғандыр?",
+       "botpasswords-update-failed": "$1 исемле роботты яңыртып булманы. Бәлки ул юйылғандыр?",
+       "botpasswords-created-title": "Робот серһүҙе булдырылды.",
+       "botpasswords-created-body": "$1 роботы өсөн $2 ҡулланыусыһы серһүҙе эшләнде.",
+       "botpasswords-updated-title": "Робот серһүҙе булдырылды.",
+       "botpasswords-updated-body": "$1 роботы өсөн $2 ҡулланыусыһы серһүҙе яңыртылды.",
+       "botpasswords-deleted-title": "Робот серһүҙе юйылды.",
+       "botpasswords-deleted-body": "$1 роботы өсөн $2 ҡулланыусыһы серһүҙе юйылды.",
+       "botpasswords-newpassword": "Инеү өсөн яңы серһүҙ <strong>$1</strong> — <strong>$2</strong>. <em>Артабан ҡулланыу өсөн яһып алығыҙ.</em>",
+       "botpasswords-no-provider": "BotPasswordsSessionProvider ғәмәлдә түгел.",
+       "botpasswords-restriction-failed": "Робот серһүҙе менән бәйле сәбәптәр булғанға инеү башҡарылманы.",
+       "botpasswords-invalid-name": "Күрһәтелгән ҡулланыусы исемендә робот $1 серһүҙен бүлеүсе тамға юҡ.",
+       "botpasswords-not-exist": "$1 ҡулланыусыһының $2 роботы өсөн серһеҙе юҡ.",
        "resetpass_forbidden": "Серһүҙҙе үҙгәртеп булмай",
        "resetpass-no-info": "Был битте туранан ҡарау өсөн һеҙгә системала танылырға кәрәк.",
        "resetpass-submit-loggedin": "Серһүҙҙе үҙгәртергә",
        "resetpass-submit-cancel": "Бөтөрөргә",
        "resetpass-wrong-oldpass": "Хаталы ваҡытлыса йәки ағымдағы серһүҙ.\nҺеҙ, бәлки, серһүҙегеҙҙе алмаштырғанһығыҙ йәки яңы серһүҙ һоратҡанһығыҙ.",
+       "resetpass-recycled": "Зинһар өсөн үҙегеҙҙекенән айырмалы серһүҙ һайлағыҙ.",
+       "resetpass-temp-emailed": "Һеҙ электорон почта аша ебәрелгән ваҡытлыса серһүҙ менән индегеҙ. Инеүҙе башҡарыу өсөн яңы серһүҙ яҙығыҙ.",
        "resetpass-temp-password": "Ваҡытлыса серһүҙ",
        "resetpass-abort-generic": "Серһүҙҙе үҙгәртеү киңәйеү тарафынан өҙөлдө.",
        "resetpass-expired": "Һеҙҙең серһүҙҙең ғәмәл ваҡыты үткән. Зинһар, системала танылыу өсөн яңы серҙһүҙ ҡуйығыҙ.",
+       "resetpass-expired-soft": "Һеҙҙең серһүҙ ваҡыты сыҡты, хәҙер ул үҙгәртелергә тейеш. Яңы серһүҙ һайлағыҙ, йәки уны үҙгәртеү өсөн «{{int:resetpass-submit-cancel}}» баҫығыҙ.",
+       "resetpass-validity-soft": "Ярамаған серһүҙ һайланған $1",
        "passwordreset": "Серһүҙҙе ташлатыу",
        "passwordreset-text-one": "Серһүҙегеҙҙе ташлар өсөн ош ҡалыпты тултырығыҙ.",
        "passwordreset-text-many": "{{PLURAL:$1|Серһүҙҙе ташлар өсөн яландарҙың береһен тултырығыҙ.}}",
        "passwordreset-emailtext-user": "{{SITENAME}} проектындағы $1 ҡулланыусыһы {{SITENAME}} ($4) проектындағы иҫәп яҙыуығыҙҙы хәтерләтеүҙе һоратты. Киләһе ҡулланыусы {{PLURAL:$3|1=иҫәп яҙыуы|иҫәп яҙыуҙары}} был электрон почта адресы менән бәйле:\n\n$2\n\nБыл ваҡытлыса {{PLURAL:$3|1=серһүҙ|серһүҙҙәр}} {{PLURAL:$5|$5 көн}} ғәмәлдә буласаҡ.\nҺеҙ системала танылырға һәм яңы серһүҙ һайларға тейешһегеҙ.\nӘгәр, һеҙ быны һоратмаған булһағыҙ йәки элекке серһүҙегеҙҙе киренән иҫләһәгеҙ һәм уны үҙгәртергә теләмәһәгеҙ, был хатҡа иғтибар итмәгеҙ һәм элекке серһүҙеҙҙе ҡулланыуҙы дауам итегеҙ.",
        "passwordreset-emailelement": "Ҡулланыусы исеме: \n$1\n\nВаҡытлыса серһүҙ: \n$2",
        "passwordreset-emailsentemail": "Серһүҙҙе ташлау тураһындағы мәғлүмәт менән электрон почта аша хат ебәрелде.",
+       "passwordreset-emailsentusername": "Әгәр был ҡатнашыусының исеменә бәйле  электрон почтаһының адресы булһа, ул саҡта  серһүҙҙе тергеҙеү өсөн  хат ебәреләсәк.",
        "passwordreset-emailsent-capture": "Серһүҙҙе ташлау тураһындағы мәғлүмәт менән электрон хат ебәрелде, уның тексы түбәндә бирелә:",
        "passwordreset-emailerror-capture": "Серһүҙҙе ташлау тураһында хәбәр итеүсе электрон хат булдырылғайны, ләкин уны  {{GENDER:$2|kullanıcıya}} түбәндәге сәбәп арҡаһында ебәреп булманы: $1",
        "changeemail": "Электрон почта адресын үҙгәртергә",
        "changeemail-header": "Электрон почта адресын үҙгәртеү",
+       "changeemail-passwordrequired": "Әлеге үҙгәрештәрҙе раҫлау өсөн, Һеҙгә ҡулланыусының серһүҙен яҙырға кәрәк",
        "changeemail-no-info": "Был биткә туранан ирешеү өсөн һеҙгә системала танылыу кәрәк.",
        "changeemail-oldemail": "Хәҙерге электрон почта адресы:",
        "changeemail-newemail": "Яңы электрон почта адресы:",
+       "changeemail-newemail-help": "Әгәр һеҙ үҙегеҙҙең электрон почтағыҙҙы юйҙыртырға теләһәгеҙ, был ялан буш ҡалдырылырға тейеш. Тик уны юйғандан һуң һеҙ онотолған серһүҙҙе ырғыта алмайһығыҙ һәм был  вики проекттан хат алмаясаҡһығыҙ.",
        "changeemail-none": "(юҡ)",
        "changeemail-password": "{{SITENAME}} прокты өсөн серһүҙегеҙ:",
        "changeemail-submit": "Адресты үҙгәртергә",
+       "changeemail-throttled": "Һеҙ системаға ҡат-ҡат танылырға тырыштығыҙ.\nТағы бер танылырҙан алда, зинһар, $1 көтөгөҙ.",
+       "changeemail-nochange": "Зинһар,башҡа яңы электрон почтағыҙ адресын яҙығыҙ.",
        "resettokens": "Токендарҙы ташларға",
        "resettokens-text": "Иҫәп яҙмағыҙ менән бәйләнгән ҡайһы бер шәхси мәғлүмәттәрегеҙгә инеүгә юл асыусы токендарҙы ташлай алаһығыҙ.\n\nЯңылыштан уларҙы берәйһе менән уртаҡлашҡан  йәки аккаунтығыҙ ваттырылған осраҡта быны эшләү мотлаҡ.",
        "resettokens-no-tokens": "Ташлар өсөн токендар юҡ.",
        "preview": "Ҡарап сығыу",
        "showpreview": "Ҡарап сығырға",
        "showdiff": "Индерелгән үҙгәрештәр",
-       "anoneditwarning": "'''Иғтибар''': Һеҙ танылмағанһығыҙ. IP-адресығыҙ был биттең үҙгәртеүҙәр тарихына яҙыласаҡ.",
+       "blankarticle": "<strong>Иҫкәртеү:</strong> Һеҙ булдырасаҡ бит буш.\nӘгәр тағы ла «{{int:savearticle}}» кнопкаға баҫһағыҙ, шул уҡ йөкмәткеле бит  яңынан барлыҡҡа киләсәк.",
+       "anoneditwarning": "<strong>Иғтибар!</strong> Һеҙ сайтта теркәлмәнегеҙ. Әгәр ҙә һеҙ ниндәй ҙә булһа төҙәтмәләр  йәки үҙгәртүҙәр индерһәгеҙ, һеҙҙең IP-адрес башҡаларға ла күрһәтеләсәк. Сайтҡа <strong>[$1 керһәгеҙ]</strong> йәки <strong>[$2 ҡуллануысы яҙмаһын төҙөһәгеҙ]</strong>, һеҙ индергән үҙгәртеүҙәр һеҙҙең ҡулланыусы яҙмағыҙға бәйләнгән була, шулай уҡ башҡа мөмкинлектәр ҙә тыуасаҡ.",
        "anonpreviewwarning": "''Һеҙ танылмағанһығыҙ. Яҙҙырыу ваҡытында IP-адресығыҙ был биттең үҙгәртеүҙәр тарихына яҙыласаҡ.''",
        "missingsummary": "'''Иҫкәртеү.''' Һеҙ үҙгәртеүҙергә ҡыҫҡа тасуирлама яҙманығыҙ. Ҡабаттан «Битте һаҡларға» төймәһенә баҫһағыҙ, үҙгәртеүҙәрегеҙ тасуирламаһыҙ һаҡланасаҡ.",
+       "selfredirect": "<strong>Иғтибар:</strong> Һеҙ шул уҡ мәҡәләгә йүнәлтеү эшләйһегеҙ.\n «{{int:savearticle}}» төәмәһенә баҫһағыҙ тағы шул биткә йүнәлтеләсәк.",
        "missingcommenttext": "Зинһар, аҫҡа үҙ тасуирламағыҙҙы керетегеҙ.",
        "missingcommentheader": "'''Иҫкәртеү:''' Һеҙ был комментарий өсөн тема/исем яҙманығыҙ.\n«{{int:savearticle}}» төймәһенә ҡабат баҫыу менән үҙгәртеүҙерегеҙ исемһеҙ яҙыласаҡ.",
        "summary-preview": "Буласаҡ тасуирлама:",
        "subject-preview": "Тема/башлыҡты алдан ҡарау:",
+       "previewerrortext": "Алдан ҡарау ваҡытында хата китте.",
        "blockedtitle": "Ҡулланыусы блокланған",
        "blockedtext": "'''Иҫәп яҙыуығыҙ йәки IP-адресығыҙ блокланған.'''\n\nБлоклаусы хаким: $1.\nБелдерелгән сәбәп: ''$2''.\n\n* Блоклау башланған ваҡыт: $8\n* Блоклау  аҙағы: $6\n* Блоклауҙар һаны: $7\n\nҺеҙ $1 йәки башҡа [[{{MediaWiki:Grouppage-sysop}}|хакимгә]] блоклау буйынса һорауҙарығыҙҙы ебәрә алаһығыҙ.\nИҫегеҙҙе тотоғоҙ: әгәр һеҙ теркәлмәгән һәм электрон почта адресығыҙҙы раҫламаған булһағыҙ ([[Special:Preferences|көйләүҙәрем битендә]]), хакимгә хат ебәрә алмайһығыҙ. Шулай ук блоклау ваҡытында һеҙҙең хат ебәреү мөмкинлегегеҙ сикләгән булырға ла мөмкин.\nҺеҙҙең IP-адрес — $3, блоклау идентификаторы — #$5.\nХаттарҙа был мәғлүмәттәрҙе күрһәтергә онотмағыҙ.",
        "autoblockedtext": "Һеҙҙең IP-адресығыҙ автоматик рәүештә блокланған. Сәбәбе, был адрес элек блокланған ҡулланыусыларҙың береһе тарафынан ҡулланылған. Блоклаусы хаким ($1) киләһе сәбәпте белдергән:\n\n:«$2»\n\nБлоклаусы хаким: $1.\nБелдерелгән сәбәп: ''$2''.\n\n* Блоклау башланған ваҡыт: $8\n* Блоклау  аҙағы: $6\n* Блоклауҙар һаны: $7\n\nҺеҙ $1 йәки башҡа [[{{MediaWiki:Grouppage-sysop}}|хакимгә]] блоклау буйынса һорауҙарығыҙҙы ебәрә алаһығыҙ.\nИҫегеҙҙе тотоғоҙ: әгәр һеҙ теркәлмәгән һәм электрон почта адресығыҙҙы раҫламаған булһағыҙ ([[Special:Preferences|көйләүҙәрем битендә]]), хакимгә хат ебәрә алмайһығыҙ. Шулай ук блоклау ваҡытында һеҙҙең хат ебәреү мөмкинлегегеҙ сикләгән булырға ла мөмкин.\nҺеҙҙең IP-адрес — $3, блоклау идентификаторы — #$5.\nХаттарҙа был мәғлүмәттәрҙе күрһәтергә онотмағыҙ.",
        "yourdiff": "Айырмалыҡтар",
        "copyrightwarning": "Иғтибар, {{SITENAME}} сайтындағы бөтә өҫтәмәләр һәм үҙгәртеүҙәр $2 (ҡарағыҙ: $1) лицензияһы шарттары менән сығарылған тип иҫәпләнә. Әгәр текстарығыҙҙың ирекле рәүештә таратылыуын һәм төҙәтелеүен теләмәһәгеҙ, уларҙы бында өҫтәмәүегеҙ һорала.<br />\nШулай уҡ, керетелгән үҙгәртеүҙәрҙең авторы булыуығыҙҙы йәки уларҙы эстәлеге ирекле рәүештә таратылырға һәм үҙгәртелергә рөхсәт ителгән сығанаҡтан алыуығыҙҙы раҫлайһығыҙ.<br />\n'''РӨХСӘТ АЛМАЙЫНСА АВТОРЛЫҠ ХОҠУҠТАРЫ МЕНӘН ҺАҠЛАНҒАН МАТЕРИАЛДАР ҠУЙМАҒЫҘ!!!'''",
        "copyrightwarning2": "Иғтибар, һеҙ кереткән өҫтәмәләр башҡа ҡатнашыусылар тарафынан үҙгәртелергә йәки юйылырға мөмкин.\nӘгәр кемдең дә булһа текстарығыҙҙы үҙгәртеүен теләмәһәгеҙ, уларҙы бында ҡуймағыҙ.<br />\nШулай уҡ, кереткән өҫтәмәләрҙең авторы булыуығыҙҙы йәки уларҙы, эстәлеге ирекле рәүештә таратылырға һәм үҙгәртелергә рөхсәт ителгән сығанаҡтан алыуығыҙҙы раҫлайһығыҙ (ҡарағыҙ: $1).\n'''РӨХСӘТҺЕҘ, АВТОРЛЫҠ ХОҠУҠТАРЫ МЕНӘН ҺАҠЛАНҒАН МАТЕРИАЛДАР ҠУЙМАҒЫҘ!'''",
+       "editpage-cannot-use-custom-model": "Был бит моделе эстәлеген үҙгәртергә ярамай.",
        "longpageerror": "'''ХАТА: һаҡланасаҡ текст күләме $1 килобайт, был иһә рөхсәт ителгән {{PLURAL:$1|1=$1 килобайттан|$2 килобайттан}} күп. Битте һаҡлап булмай.'''",
-       "readonlywarning": "'''КИҪӘТЕҮ: Техник хеҙмәтләндереү сәбәпле мәғлүмәттәр базаһы блокланған, шунлыҡтан үҙгәртеүҙәрегеҙҙе хәҙер һаҡлай алмайһығыҙ.'''\nТексты аҙаҡтан ҡулланыу өсөн файлда һаҡлап тора алаһығыҙ.\n\nХаким белдергән сәбәп: $1",
+       "readonlywarning": "<strong>КИҪӘТЕҮ: Техник хеҙмәтләндереү сәбәпле мәғлүмәттәр базаһы блокланған, шунлыҡтан үҙгәртеүҙәрегеҙҙе хәҙер һаҡлай алмайһығыҙ.<strong>\nТексты аҙаҡтан ҡулланыу өсөн башҡа файлда һаҡлап тора алаһығыҙ.\n\nХаким белдергән сәбәп: $1",
        "protectedpagewarning": "'''КИҪӘТЕҮ: Һеҙ был битте үҙгәртә алмайһығыҙ, был хоҡуҡҡа хакимдәр генә эйә.'''\nБелешмә өсөн түбәндә һуңғы үҙгәртеү тураһында мәғлүмәт бирелә:",
        "semiprotectedpagewarning": "'''Киҫәтеү:''' был бит һаҡланған. Уны теркәлгән ҡулланыусылар ғына үҙгәртә ала.\nБелешмә өсөн түбәндә һуңғы үҙгәртеү тураһында мәғлүмәт бирелә:",
-       "cascadeprotectedwarning": "'''КИҪӘТЕҮ:''' Был битте тик хакимдәр генә үҙгәртә ала, сөнки ул эҙмә-эҙлекле һаҡлау ҡуйылған {{PLURAL:$1|1=киләһе биткә|киләһе биттәргә}} керә:",
+       "cascadeprotectedwarning": "<strong>Киҫәтеү:</strong> Был битте тик хакимдәр генә үҙгәртә ала.  Сөнки бит {{PLURAL:$1|каскадлы яҡлау исемлегенә индерелгән}}:",
        "titleprotectedwarning": "'''Киҫәтеү: Бындый исемле бит һаҡланған, уны үҙгәртеү өсөн [[Special:ListGroupRights|тейешле хоҡуҡҡа]] эйә булыу кәрәк.'''\nБелешмә өсөн түбәндә һуңғы үҙгәртеү тураһында мәғлүмәт бирелә:",
        "templatesused": "Был биттә ҡулланылған {{PLURAL:$1|1=ҡалып|ҡалыптар}}:",
        "templatesusedpreview": "Алдан ҡаралған биттә ҡулланылған {{PLURAL:$1|1=ҡалып|ҡалыптар}}:",
        "permissionserrors": "Инеү хоҡуғы хатаһы",
        "permissionserrorstext": "Түбәндәге {{PLURAL:$1|1=сәбәп|сәбәптәр}} буйынса һеҙҙең был ғәмәлде үтәү хоҡуғығыҙ юҡ:",
        "permissionserrorstext-withaction": "«'''$2'''» ғәмәлен башҡара алмайһығыҙ. {{PLURAL:$1|1=Сәбәбе|Сәбәптәре}}:",
+       "contentmodelediterror": "Был версияны мөхәррирләй алмайһығыҙ — <code>$1</code>, моделе ғәмәлдәге — <code>$2</code> моделенан айырыла.",
        "recreate-moveddeleted-warn": "'''Иғтибар: Һеҙ, элек юйылған битте яңынан яһарға теләйһегеҙ.'''\n\nҺеҙгә был битте яңынан яһау кәрәклеген яңынан уйлап ҡарағыҙ.\nТүбәндә биттең юйыу һәм исем үҙгәртеү яҙмалары килтерелә:",
        "moveddeleted-notice": "Был бит юйылған.\nБелешмә өсөн киләһе юйыу һәм исем үҙгәртеү яҙмалары килтерелә.",
+       "moveddeleted-notice-recent": "Үкенескә ҡаршы бит бит юйылған (һуүғы 24 сәғәт эсендә). Түбәндә юйыуҙар журналы һәм был журналға күсереүҙәр бирелгән.",
        "log-fulllog": "Бар яҙмаларҙы ҡарарға",
        "edit-hook-aborted": "Үҙгәртеүҙе ҡармаҡ-процедура кире ҡаҡты.\nӨҫтәмә аңлатма килтерелмәй.",
        "edit-gone-missing": "Битте яңыртып булмай.\nБәлки ул юйылғандыр.",
        "edit-already-exists": "Яңы бит яһап булмай.\nУл былай ҙа бар.",
        "defaultmessagetext": "Алдан билдәләнгән яҙма",
        "content-failed-to-parse": "$2 эстәлеге $1 төрөнә тура килмәй: $3.",
-       "invalid-content-data": "ЯÑ\80амаған мәғлүмәт",
+       "invalid-content-data": "ТÑ\8bйÑ\8bлған мәғлүмәт",
        "content-not-allowed-here": "\"$1\" эстәлеге [[$2]] бит өсөн ярамай",
        "editwarning-warning": "Икенсе биткә күсеү һеҙ индергән үҙгәрештәрҙең юғалыуына килтереүе мөмкин.\nӘгәр системала танылыу үтһәгеҙ, көйләүҙәрегеҙ битенең \"Мөхәррирләү\" бүлегендә был киҫәтеүҙе һүндерә алаһығыҙ.",
-       "content-model-wikitext": "викияҙма",
+       "editpage-notsupportedcontentformat-title": "Йөкмәтке форматы асылмай",
+       "editpage-notsupportedcontentformat-text": "$1 эстәлеге форматы $2 моделе форматы менән тап килмәй.",
+       "content-model-wikitext": "викитекст",
        "content-model-text": "ғәҙәти яҙма",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
-       "content-json-empty-object": "Ð\91Ñ\83Ñ\88 Ð½Ó\99мÓ\99",
+       "content-json-empty-object": "Ð\91Ñ\83Ñ\88 Ð¾Ð±Ñ\8aекÑ\82",
        "content-json-empty-array": "Буш массив",
+       "duplicate-args-warning": "<strong>Иғтибар:</strong> [[:$1]] берәүҙән артыҡ [[:$2]]  параметры  «$3» менән саҡыра. Һуңғы дәүмәл ҡулланыласаҡ.",
        "duplicate-args-category": "Ҡалыпты сығарғанда ҡабатланған аргументтарҙы ҡулланған биттәр",
        "duplicate-args-category-desc": "Түбәндәге ҡабатланған аргументтары <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> или <code><nowiki>{{foo|bar|1=bar}}</nowiki></code> булған ҡалыпты сығарыу эстәлекле биттәр.",
-       "expensive-parserfunction-warning": "'''Иғтибар:''' был биттә хәтерҙе күп ҡулланыусы функциялар ныҡ күп.\n\nҠуйылған сикләү: $2 {{PLURAL:$2|ҡулланыу}}, был осраҡта {{PLURAL:$1|$1 тапҡыр}} башҡарырға рөхсәт ителә.",
+       "expensive-parserfunction-warning": "<strong>Иғтибар:</strong>  был биттә хәтерҙе күп ҡулланыусы функциялар ныҡ күп.\n\nҠуйылған сикләү: $2 {{PLURAL:$2|ҡулланыу}}, был осраҡта {{PLURAL:$1|$1 тапҡыр}} башҡарырға рөхсәт ителә.",
        "expensive-parserfunction-category": "Хәтерҙе күп ҡулланыусы функциялары күп булған биттәр",
        "post-expand-template-inclusion-warning": "'''Иғтибар:''' Өҫтәлгән ҡалыптар күләме бик ҙур.\nҠайһы бер ҡалыптар өҫтәлмәйәсәк.",
        "post-expand-template-inclusion-category": "Рөхсәт ителгән күләмдән күп ҡалып ҡушылған биттәр",
        "parser-template-recursion-depth-warning": "($1) ҡалыбын рекурсия итеп ҡулланыу тәрәнлеге рөхсәт ителгәндән артып киткән",
        "language-converter-depth-warning": "Телдәрҙе үҙгәртеү тәрәнлегенең сиге үткән ($1)",
        "node-count-exceeded-category": "Төйөндәр һаны артҡан биттәр",
+       "node-count-exceeded-category-desc": "Биттә рөхсәт ителгән төйөндәр һаны артып киткән.",
        "node-count-exceeded-warning": "Биттә төйөндәр һаны артып киткән",
        "expansion-depth-exceeded-category": "Асылыу тәрәнлеге артып киткән биттәр",
        "expansion-depth-exceeded-category-desc": "Биттең асылыу тәрәнлеге мөмкин булған юғары сикте уҙған.",
        "undo-success": "Был үҙгәртеүҙе кире алып була. Зинһар, улар һеҙҙе ҡыҙыҡһындырған үҙгәртеүҙәр булыуынан шикләнмәҫ өсөн версияларҙы сағыштырыуҙы ҡарағыҙ һәм үҙгәртеүҙәрҙе ғәмәлғә керетер өсөн «Битте һаҡларға» төймәһенә баҫығыҙ.",
        "undo-failure": "Ара үҙгәртеүҙәр тура килмәү сәбәпле төҙәтеүҙе кире алып булмай.",
        "undo-norev": "Үҙгәртеүҙе кире алып булмай, сөнки юҡ йәки юйылған.",
+       "undo-nochange": "Төҙәтеү кире ҡайтарылған.",
        "undo-summary": "[[Special:Contributions/$2|$2]] ҡулланыусыһының ([[User talk:$2|фекер алышыу]]) $1 үҙгәртеүенән баш тартыу",
        "undo-summary-username-hidden": "Исеме йәшерелгән ҡатнашыусының төҙәтеүен  $1 кире ҡағыу",
        "cantcreateaccounttitle": "Иҫәп яҙыуын яһап булмай",
        "cantcreateaccount-text": "Был IP-адрестан (<b>$1</b>) иҫәп яҙыуҙары булдырыу [[User:$3|$3]] тарафынан тыйылған.\n\n$3 белдергән сәбәп: ''$2''",
+       "cantcreateaccount-range-text": "{{GENDER:$3|Ҡатнашыусы}} [[User:$3|$3]] һеҙҙең IP-адрес ингән (<strong>$4</strong>) <strong>$1</strong> диапозонында иҫәп яҙмаһын булдырмаҫҡа {{GENDER:$3|тыйыу}} ҡуйҙы.\n\nОшо сәбәп күһәтелгән: $2.",
        "viewpagelogs": "Был биттең яҙмаларын ҡарарға",
        "nohistory": "Был биттең үҙгәртеүҙәр тарихы юҡ.",
        "currentrev": "Ағымдағы версия",
        "history-feed-description": "Викилағы был биттең үҙгәртеүҙәр тарихы",
        "history-feed-item-nocomment": "$1, $2",
        "history-feed-empty": "Һоратылған бит юҡ.\nУл бит юйылған йәки исеме үҙгәртелгән булыуы мөмкин.\nВикила оҡшаш биттәрҙе [[Special:Search|эҙләп ҡарағыҙ]].",
+       "history-edit-tags": "Һайланған версияның тегын үҙгәртергә.",
        "rev-deleted-comment": "(мөхәррирләү тасуирламаһы юйылған)",
        "rev-deleted-user": "(автор исеме юйылған)",
        "rev-deleted-event": "(яҙма юйылған)",
        "rev-deleted-user-contribs": "[ҡулланыусы исеме йәки IP-адрес юйылған — төҙәтеү өлөш битенән йәшерелде]",
        "rev-deleted-text-permission": "Биттең был өлгөһө '''юйылған'''.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Юйыу яҙмалары журналында] аңлатмалар ҡалдырылыуы мөмкин.",
+       "rev-suppressed-text-permission": "Биттең был версияһы '''йәшерелгән'''.\nҺеҙ уны [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} йәшереү яҙмаларында] ҡарай алаһығыҙ .",
        "rev-deleted-text-unhide": "Биттең был версияһы '''юйылған'''.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Юйыу яҙмаларында] аңлатмалар ҡалдырылыуы мөмкин.\nТеләгегеҙ булһа [был версияны $1] ҡарай алаһығыҙ.",
        "rev-suppressed-text-unhide": "Биттең был версияһы '''Йәшерелгән'''.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Йәшереү яҙмаларында] аңлатмалар ҡалдырылыуы мөмкин.\nТеләгегеҙ булһа [был версияны $1] ҡарай алаһығыҙ.",
        "rev-deleted-text-view": "Биттең был версияһы '''юйылған'''.\nҺеҙ уны [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Юйыу яҙмаларында] ҡарай алаһығыҙ .",
        "rev-showdeleted": "күрһәтергә",
        "revisiondelete": "Бит версияларын юйырға/тергеҙергә",
        "revdelete-nooldid-title": "Маҡсат версия билдәләнмәгән",
-       "revdelete-nooldid-text": "Был функцияны үтәү өсөн һеҙ маҡсат версияны (йәки версияларҙы) билдәләмәнегеҙ. Билдәләнгән версия юҡ йәки версияны йәшерергә тырышаһығыҙ.",
+       "revdelete-nooldid-text": "Был функцияны үтәү өсөн һеҙ һуңғы версияны (йәки версияларҙы) билдәләмәнегеҙ. Билдәләнгән версия юҡ йәки версияны йәшерергә тырышаһығыҙ.",
        "revdelete-no-file": "Күрһәтелгән файл юҡ.",
        "revdelete-show-file-confirm": "$2, $3 ваҡытлы «<nowiki>$1</nowiki> файлының юйылған версияһын ҡарарға теләүегеҙҙе раҫлайһығыҙмы?",
        "revdelete-show-file-submit": "Эйе",
+       "revdelete-selected-text": "{{PLURAL:$1|Һайланған версия|Һайланған версиялар}} [[:$2]]:",
+       "revdelete-selected-file": "{{PLURAL:$1|Һайланған файл версияһы|Һайланған файл версиялары}} [[:$2]]:",
        "logdelete-selected": "Яҙманың {{PLURAL:$1|1=һайланған яҙыуы|һайланған яҙыуҙары}}:",
+       "revdelete-text-text": "Тарих битендә юйылған версиялар күренәсәк, ҡайһы бер өлөштәре ҡатнышыусылар өсөн асыҡ буласаҡ.",
+       "revdelete-text-file": "Тарих битендә юйылған файл версиялары күренәсәк, ҡайһы бер өлөштәре ҡатнышыусылар өсөн асыҡ буласаҡ",
+       "logdelete-text": "Тарих битендә юйылған версиялар күренәсәк, ҡайһы бер өлөштәре ҡатнышыусылар өсөн асыҡ буласаҡ.",
+       "revdelete-text-others": "Башҡа админситраторҙарың йәшәрелгән эстәлеккә инергә мөмкинлеге бар, өҫтәмә сикләүҙәр булмаған осраҡта, улар уны кире ҡайтара ала.",
        "revdelete-confirm": "Зинһар, был ғәмәлде үтәргә теләүегеҙҙе, буласаҡ һөҙөмтәләрҙә аңлауығыҙҙы, [[{{MediaWiki:Policy-url}}|ҡағиҙәләр]] буйынса эшләүегеҙҙе раҫлағыҙ.",
        "revdelete-suppress-text": "Йәшереү '''тик''' киләһе осраҡтарҙа ғына башҡарыла:\n\n* Уңай булмаған шәхси мәғлүмәт\n* ''өй адресы, телефон номерҙары, паспорт номеры һ.б.''",
        "revdelete-legend": "Күренеш сикләүҙәрен көйләргә:",
        "revdelete-hide-text": "Биттең был версияһының текстын йәшерергә",
        "revdelete-hide-image": "Файл эстәлеген йәшерергә",
-       "revdelete-hide-name": "Ò\92Ó\99мÓ\99лде Ò»Ó\99м Ð¼Ð°Ò¡Ñ\81аÑ\82Ñ\8bн йәшерергә",
+       "revdelete-hide-name": "Ò\92Ó\99мÓ\99лде Ò»Ó\99м ÐºÓ©Ð¹Ð»Ó\99Ò¯Ò\99е йәшерергә",
        "revdelete-hide-comment": "Үҙгәртеүҙәр тасуирламаһы",
        "revdelete-hide-user": "Мөхәррирләүсенең исеме/IP-адресы",
        "revdelete-hide-restricted": "Мәғлүмәттәрҙе хакимдәрҙән дә йәшерергә",
        "mergehistory-empty": "Һис бер версияны берләштереп булмай.",
        "mergehistory-done": "$1 битенең $3 {{PLURAL:$3|үҙгәртеүе}} уңышлы [[:$2]] менән берләштерелде.",
        "mergehistory-fail": "Бит тарихтарын берләштереп булманы, зирһар, бит һәм ваҡыт параметрҙарын яңынан тикшерегеҙ.",
+       "mergehistory-fail-bad-timestamp": "Ваҡыт тамғаһы дөрөҫ түгел.",
+       "mergehistory-fail-invalid-source": "Сығанаҡ бит дөрөҫ түгел.",
+       "mergehistory-fail-invalid-dest": "Маҡсат бите дөрөҫ түгел.",
+       "mergehistory-fail-no-change": "Бит таризы версиялары ҡушылманы. Зинһар өсөн, бит һәм ваҡыт параметрҙарын тикшерегеҙ.",
+       "mergehistory-fail-permission": "Бит тарихын ҡушыу өсөн хоҡуҡтар етәрлек түгел.",
+       "mergehistory-fail-self-merge": "Сығанаҡ һәм маҡсат бит бер төрлө.",
+       "mergehistory-fail-timestamps-overlap": "Сығанаҡ версия ҡаплана йәки тәғәйенләнгән версиянан һуң килә.",
+       "mergehistory-fail-toobig": "Бит тарихын ҡушып булмай, сәнки $1 лимитын күберәк {{PLURAL:$1|версияһына}} күсерергә кәрәк.",
        "mergehistory-no-source": "Сығанаҡ бит «$1» юҡ.",
        "mergehistory-no-destination": "Маҡсат бит «$1» юҡ.",
        "mergehistory-invalid-source": "Сығанаҡ биттең исеме дөрөҫ булырға тейеш.",
        "showhideselectedversions": "Һайланған версияларҙы күрһәтергә/йәшерергә",
        "editundo": "кире алыу",
        "diff-empty": "(айырмалар юҡ)",
+       "diff-multi-sameuser": "(был ҡулланыусының {{PLURAL:$1|аралағы версия $1|аралағы версиялары $1}} күрһәтелмәгән)",
+       "diff-multi-otherusers": "({{PLURAL:$1|$1 ваҡытлы версия| $1 ваҡытлы версия}} күрһәтелмәгән {{PLURAL:$2|$2 ҡатнашыусы|$2 ҡатнашыусылар}})",
        "diff-multi-manyusers": "(Кәмендә {{PLURAL:$2|$2 ҡатнашыусының}} {{PLURAL:$1|ваҡытлы версияһы}} күрһәтелмәгән)",
        "difference-missing-revision": "$1 айырмаһының {{PLURAL:$2|1=бер өлгөһө|$2 өлгөһө}} табылманы.\n\nБыл хәл, ғәҙәттә, юйылған биткә яһалған айырма һылтанмаһының ваҡыты үтеүенән барлыҡҡа килә.\nТулыраҡ мәғлүмәт өсөн ҡарағыҙ: [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} юйыу яҙмалары].",
        "searchresults": "Эҙләү һөҙөмтәләре",
        "shown-title": "Бер биттә $1 {{PLURAL:$1|1=һөҙөмтә|һөҙөмтә}} күрһәтергә",
        "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) ҡарарға",
        "searchmenu-exists": "'''Был вики-проектта «[[:$1]]» бите бар'''",
-       "searchmenu-new": "'''Был википроектта \"[[:$1]]\" бите булдырырға.'''",
+       "searchmenu-new": "{{PLURAL:$2|}}<strong>Был википроектта \"[[:$1]]\" бите булдырырға.</strong>",
        "searchprofile-articles": "Эстәлек биттәре",
        "searchprofile-images": "Мультимедиа",
        "searchprofile-everything": "Барыһы",
        "search-result-category-size": "{{PLURAL:$1|1=$1 ағза}} ({{PLURAL:$2|$2 эске категория}}, {{PLURAL:$3|$3 файл}})",
        "search-redirect": "(йүнәлтеү $1)",
        "search-section": "($1 бүлеге)",
+       "search-category": "(категория $1)",
        "search-file-match": "(файл эстәлеге менән тура килә)",
        "search-suggest": "Бәлки, ошоно эҙләйһегеҙҙер: $1",
+       "search-rewritten": "$1 нәтижәһе күрһәтелгән. $2 урынына эҙләргә.",
        "search-interwiki-caption": "Туғандаш проекттар",
        "search-interwiki-default": "$1 һөҙөмтәһе:",
        "search-interwiki-more": "(тағы)",
        "searchrelated": "ҡағылышлы",
        "searchall": "барыһы",
        "showingresults": "Түбәндә №&nbsp;<strong>$2</strong> һөҙөмтәнән башлап <strong>$1</strong> {{PLURAL:$1|һөҙөмтә}} күрһәтелгән.",
+       "showingresultsinrange": "Түбәндә №&nbsp;<strong>$2</strong> һөҙөмтәнән башлап <strong>$1</strong> {{PLURAL:$1|һөҙөмтә}} күрһәтелгән.<strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> нәтижәнән <strong>$1</strong>| <strong>$3</strong> нәтижәләрҙән <strong>$1 — $2</strong>}}",
        "search-nonefound": "Был һорауға яуап биреүсе һөҙөмтәләр табылманы.",
+       "search-nonefound-thiswiki": "Был һорауға яуап биреүсе һөҙөмтәләр табылманы.",
        "powersearch-legend": "Киңәйтелгән эҙләү",
        "powersearch-ns": "Исем аралыҡтарында эҙләү:",
        "powersearch-togglelabel": "Һайла:",
        "rows": "Юлдар:",
        "columns": "Бағаналар:",
        "searchresultshead": "Эҙләү",
-       "stub-threshold": "<a href=\"#\" class=\"stub\">Материалдарға һылтанмалар </a> форматлау сиге (байттарҙа)",
+       "stub-threshold": "Яһалма һылтамаларҙың биҙәлеше буйынса сикләүҙәр ($1):",
        "stub-threshold-sample-link": "миҫал",
        "stub-threshold-disabled": "Һүндерелгән",
        "recentchangesdays": "Күҙәтеү исемлегендә күренгән көндәр һаны:",
        "right-sendemail": "Башҡа ҡатнашыусыларға электрон почта аша хат ебәреү",
        "right-passwordreset": "Серһүҙҙе яңыртыу осраҡтарын ҡарау",
        "right-managechangetags": "[[Special:Tags|билдәләр]] мәғлүмәттәр базаһында төҙөү һәм юйыу",
+       "right-applychangetags": " [[Special:Tags|тамғаһын]] үҙегеҙҙең төҙөтеү менән ҡулланырға",
+       "right-changetags": "Айырым үҙгәртеүҙәрҙә һәм журнал яҙмаланыда[[Special:Tags|тамғаһын]] өҫтәү һәм юйыу",
+       "grant-generic": "Хоҡуҡтар йыйынтығы «$1»",
+       "grant-group-page-interaction": "Башҡа биттәр менән бәйләнеш",
+       "grant-group-file-interaction": "Медиафайлдар менән бәйләнеш",
+       "grant-group-watchlist-interaction": "Күҙәтеүҙәр исемлеге менән бәйленеш",
        "grant-group-email": "Электрон хат ебәреү",
+       "grant-group-high-volume": "Юғары әүҙемлекле алым эшләргә",
+       "grant-group-customization": "Көйләүҙәр һәм өҫтөнлөк биргән көйләүҙәр",
+       "grant-group-administration": "Административ алымдар ҡулланыу",
+       "grant-group-other": "Әүҙемлек төрлө",
+       "grant-blockusers": "Иҫәп яҙмаларын блоклау һәм блоклауҙы асыу",
+       "grant-createaccount": "Иҫәп яҙмаһын булдырырға",
+       "grant-createeditmovepage": "Биттәрҙе булдырыу,мөхәррирләү һәм исемен үҙгәртеү",
+       "grant-delete": "Журналдағы биттәрҙе юйыу,төҙәтеү",
+       "grant-editinterface": "MediaWiki исеме арауығында төҙәтеү һәм ҡулланыусы CSS/JavaScript",
+       "grant-editmycssjs": "CSS/JavaScript ҡулланыусы кодын төҙәтеү",
        "grant-editmyoptions": "Һеҙҙең ҡулланыусы көйләүҙәрен мөхәррирләү",
+       "grant-editmywatchlist": "һеҙҙең күҙәтеүҙәр исемлеген мөхәррирләү",
+       "grant-editpage": "Ғәмәлдәге битте төҙәтеү",
+       "grant-editprotected": "Һаҡланған битте төҙәтеү",
+       "grant-highvolume": " Юғары әүҙемлектә мөхәррирләү",
+       "grant-oversight": "Башҡа ҡатнашыусылар тәҙәтеүенән бит версияһын йәшерергә",
+       "grant-patrol": "Бит үҙгәрештәрен күҙәтеү",
+       "grant-protect": "Битте һаҡлау һәм һаҡты сисеү",
+       "grant-rollback": "Биттеге үҙгәрештәрҙе кире ҡайтарыу",
+       "grant-sendemail": "Башҡа ҡатнашыусыларға электрон почта аша хат ебәреү",
+       "grant-uploadeditmovefile": "Файлдарҙы тейәү, алмаштырыу һәм исемен үҙгәртеү",
+       "grant-uploadfile": "Тағы файлдар тейәргә",
+       "grant-basic": "Төп хоҡуҡтар",
+       "grant-viewdeleted": "Юйылған файлдарҙы һәм биттерҙе тейәү",
+       "grant-viewmywatchlist": "һеҙҙең күҙәтеүҙәр исемлеген байҡау",
        "newuserlogpage": "Яңы ҡулланыусы яҙмалары",
        "newuserlogpagetext": "Яңы теркәлгән ҡатнашыусылар яҙмалары журналы.",
        "rightslog": "Ҡулланыусының хоҡуҡтары көндәлеге",
        "action-createpage": "Яңы бит яһау",
        "action-createtalk": "Фекер алышыу битен яһау",
        "action-createaccount": "Был ҡулланыусы иҫәп яҙыуын яһау",
+       "action-autocreateaccount": "Ҡатнашыусының тышҡы иҫәп яҙмаһы менән инергә",
+       "action-history": "Был биттең тарихын ҡарарға",
        "action-minoredit": "Был төҙәтеүҙе әҙ үҙгәреш тип билдәләү",
        "action-move": "Был биттең исемен үҙгәртеү",
        "action-move-subpages": "Был биттең һәм эске биттәренең исемен үҙгәртеү",
        "action-move-rootuserpages": "Ҡулланыусыларҙың төп биттәренең исемен үҙгәртеү",
+       "action-move-categorypages": "Категория биттәренең исемен үҙгәртеү",
        "action-movefile": "Был файлдың исемен үҙгәртеү",
        "action-upload": "Был файлды тейәү",
        "action-reupload": "Булған файлдың өҫтөнә яҙыу",
        "action-viewmywatchlist": "һеҙҙең күҙәтеүҙәр исемлеген байҡау",
        "action-viewmyprivateinfo": "һеҙҙең шәхси мәғлүмәтте байҡау",
        "action-editmyprivateinfo": "һеҙҙең шәхси мәғлүмәтте мөхәррирләү",
-       "nchanges": "$1 {{PLURAL:$1|1=үҙгәртеү|үҙгәртеү}}",
+       "action-editcontentmodel": "Биттең контент моделен мөхәррирләү",
+       "action-managechangetags": "Мәғлүмәт базаһында тамға булдырыу һәм юйыу",
+       "action-applychangetags": "Һеҙҙең үҙгәрештәр ТЕГын булдырырға",
+       "action-changetags": "Айырым үҙгәртеүҙәрҙә һәм журнал яҙмаланыда тег өҫтәү һәм юйыу",
+       "nchanges": "$1 {{PLURAL:$1|үҙгәртәү|үҙгәртеүҙәр}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|һеҙҙең һуңғы визит}}",
        "enhancedrc-history": "тарих",
        "recentchanges": "Һуңғы үҙгәртеүҙәр",
        "recentchanges-label-bot": "Был төҙәтеү бот тарафынан башҡарылды",
        "recentchanges-label-unpatrolled": "Был төҙәтеү ҡаралмаған әле",
        "recentchanges-label-plusminus": "Бит шул тиклем байтҡа үҙгәрҙе",
-       "recentchanges-legend-heading": "'''Легенда:'''",
+       "recentchanges-legend-heading": "<strong>Легенда:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|Яңы биттәр исемлеген]] ҡарағыҙ)",
-       "rcnotefrom": "Түбәндә '''$2''' башлап ('''$1''' тиклем) үҙгәртеүҙәр күрһәтелгән.",
+       "recentchanges-submit": "Күрһәтергә",
+       "rcnotefrom": "Аҫтарак <strong>$3, $4</strong> өсөн {{PLURAL:$5|үҙгәртеүҙәр күрһәтелгән}} (<strong>$1</strong> артыҡ түгел).",
        "rclistfrom": "$3 $2 башлап яңы үҙгәртеүҙәрҙе күрһәт.",
        "rcshowhideminor": "бәләкәй төҙәтеүҙәрҙе $1",
        "rcshowhideminor-show": "Күрһәтергә",
        "rcshowhidemine": "минең үҙгәртеүҙәремде $1",
        "rcshowhidemine-show": "Күрһәтергә",
        "rcshowhidemine-hide": "Йәшерергә",
+       "rcshowhidecategorization": "$1 биттәрҙе категориялаштырыу",
+       "rcshowhidecategorization-show": "Күрһәтергә",
+       "rcshowhidecategorization-hide": "Йәшерелгән",
        "rclinks": "Һуңғы $2 көн эсендәге һуңғы $1 үҙгәртеүҙе күрһәтергә<br />$3",
        "diff": "айыр.",
        "hist": "тарих",
        "newpageletter": "Я",
        "boteditletter": "б",
        "number_of_watching_users_pageview": "[$1 күҙәткән {{PLURAL:$1|ҡатнашыусы}}]",
-       "rc_categories": "Ð\9eÑ\88о ÐºÐ°Ñ\82егоÑ\80иÑ\8fлаÑ\80Ò\99ан Ò\93Ñ\8bна («|» Ð¼ÐµÐ½Ó\99н Ð°Ð¹Ñ\8bÑ\80Ñ\8bÑ\80Ò\93а)",
-       "rc_categories_any": "Һәр",
+       "rc_categories": "Тик ÐºÐ°Ñ\82егоÑ\80иÑ\8fлаÑ\80Ò\99ан Ò\93Ñ\8bна (бүлеүÑ\81е Â«|»):",
+       "rc_categories_any": "Һайланғандың теләһә ҡайһыһы",
        "rc-change-size-new": "Үҙгәртештән һуң күләм: $1 {{PLURAL:$1|1=байт|байт}}",
        "newsectionsummary": "/* $1 */ яңы бүлек",
        "rc-enhanced-expand": "Ваҡ-төйәгенә тиклем күрһәтергә",
        "recentchangeslinked-summary": "Был күрһәтелгән бит һылтанма яһаған (йәки күрһәтелгән категорияға кергән) һуңғы үҙгәртеүҙәр исемлеге.\n[[Special:Watchlist|Күҙәтеү исемлегегеҙгә]] керә торған биттәр '''ҡалын''' итеп күрһәтелгән.",
        "recentchangeslinked-page": "Бит исеме:",
        "recentchangeslinked-to": "Киреһенсә, был биткә һылтанма яһаған биттәрҙәге үҙгәртеүҙәрҙе күрһәтергә",
+       "recentchanges-page-added-to-category": "[[:$1]] категорияға өҫтәлгән",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] һәм [[Special:WhatLinksHere/$1|{{PLURAL:$2|one page|$2 pages}}]]  категорияға өҫтәлгән",
+       "recentchanges-page-removed-from-category": "[[:$1]] категориянан алынған",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] һәм [[Special:WhatLinksHere/$1|{{PLURAL:$2|one page|$2 pages}}]]  категориянан алынған",
+       "autochange-username": "Автоматик рәүештә MediaWiki үҙгәртелә",
        "upload": "Файл тейәү",
        "uploadbtn": "Файлды тейәргә",
        "reuploaddesc": "Тейәү формаһына кире ҡайтырға",
        "upload-recreate-warning": "'''Иғтибар. Бындай исемле файл юйылған йәки күсерелгән. '''\nБыл биттең юйыуҙары һәм күсереүҙәре яҙмалары журналы түбәндә килтерелгән:",
        "uploadtext": "Файл тейәү өсөн түбәндәге форманы ҡулланығыҙ.\nЭлек тейәлгән файлдарҙы байҡар өсөн [[Special:FileList|тейәлгән файлдар исемлеген]] ҡарағыҙ. Файл тейәүҙәр шулай уҡ [[Special:Log/upload|тейәү яҙмаларына]], юйыуҙар иһә [[Special:Log/delete|юйыу яҙмаларына]] яҙылып баралар.\n\nФайлды мәҡәләгә өҫтәү өсөн киләһе юлдарҙы ҡуллана алаһығыҙ:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' — файлдың тулы өлгөһөн ҡуйыр өсөн;\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|тасуирлама]]</nowiki></code>''' — файлдың киңлек буйынса 200 нөктәгә тиклем бәләкәсәйтелгән, һулға тигеҙләнгән һәм аҫтында тасуирламаһы булған өлгөһөн ҡуйыр өсөн;\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' — эстәлеген биттә күрһәтмәйенсә файлға һылтанма ҡуйыу өсөн.",
        "upload-permitted": "{{PLURAL:$2|Рөхсәт ителгән файл төрө|Рөхсәт ителгән файл төрҙөре}}: $1.",
-       "upload-preferred": "Уңайлы файл типтары: $1.",
+       "upload-preferred": "Уңайлы файл типтары: {{PLURAL:$2|type|types}}: $1.",
        "upload-prohibited": "{{PLURAL:$2|Тыйылған файл төрө|Тыйылған файл төрҙәре}}: $1.",
        "uploadlogpage": "Тейәү яҙмалары",
        "uploadlogpagetext": "Түбәндә, һуңғы файл тейәүҙәр исемлеге күрһәтелгән.\nШулай уҡ [[Special:NewFiles|яңы файлдар галереяһын]] ҡарағыҙ; һуңғы тейәүҙәр ентекле рәүештә күрһәтелгән.",
        "windows-nonascii-filename": "Был вики махсус символ булған файл исемдәрен терәкләмәй.",
        "fileexists": "Бындай исемле файл бар инде, зинһар, уны алыштырырға теләүегеҙҙә шикләнһәгеҙ,  <strong>[[:$1]]</strong>тикшерегеҙ.\n[[$1|thumb]]",
        "filepageexists": "Был файлдың тасуирламаһы бите булдырылған инде: <strong>[[:$1]]</strong>, әммә бындай исемле файл юҡ.\nКеретелгән тасуирлама файлдың тасуирламаһы битендә сыҡмаясаҡ.\nЯңы тасуирлама өҫтәр өсөн, һеҙгә уны ҡул менән үҙгәртергә тура киләсәк.\n[[$1|thumb]]",
-       "fileexists-extension": "Ð\9eÒ¡Ñ\88аÑ\88 Ð¸Ñ\81емле Ñ\84айл Ð±Ð°Ñ\80: [[$2|thumb]]\n* Ð¢ÐµÐ¹Ó\99лгÓ\99н Ñ\84айлдÑ\8bÒ£ Ð¸Ñ\81еме: <strong>[[:$1]]</strong>\n* Ð\91Ñ\83лÒ\93ан Ñ\84айлдÑ\8bÒ£ Ð¸Ñ\81еме: <strong>[[:$2]]</strong>\nÐ\97инһаÑ\80, Ð±Ð°Ñ\88ҡа Ð¸Ñ\81ем Ò»Ð°Ð¹Ð»Ð°Ò\93Ñ\8bÒ\99.",
+       "fileexists-extension": "Ð\9eÒ¡Ñ\88аÑ\88 Ð¸Ñ\81емле Ñ\84айл Ð±Ð°Ñ\80: [[$2|thumb]]\n* Ð¢ÐµÐ¹Ó\99лгÓ\99н Ñ\84айлдÑ\8bÒ£ Ð¸Ñ\81еме: <strong>[[:$1]]</strong>\n* Ð\91Ñ\83лÒ\93ан Ñ\84айлдÑ\8bÒ£ Ð¸Ñ\81еме: <strong>[[:$2]]</strong>\nÐ\91аÑ\88ҡа Ñ\82Ó©Ñ\80лө Ð¸Ñ\81ем Ò»Ð°Ð¹Ð»Ð¿Ñ\80Ò\93а Ñ\82елÓ\99йһегеÒ\99ме?",
        "fileexists-thumbnail-yes": "Файл бәләкәйтелгән өлгө ''(шартлы рәсем)'' булырға тейеш.\n[[$1|thumb]]\nЗинһар, <strong>[[:$1]]</strong> файлын тикшерегеҙ.\nӘгәр ул ошо уҡ файлдың төп өлгөһө булһа, уның бәләкәйтелгән өлгөһөн айырым тейәүҙең кәрәге юҡ.",
        "file-thumbnail-no": "Файлдың исеме <strong>$1</strong> менән башлана.\nБәлки, ул рәсемдең бәләкәйтелгән өлгөһөлөр ''(шартлы рәсем)''.\nӘгәр һеҙҙә был рәсемдең ҙур өлгөһө булһа, зинһар, уны керетегеҙ йәки файлдың исемен үҙгәртегеҙ.",
        "fileexists-forbidden": "Бындай исемле файл бар инде һәм ул үҙгәртелә алмай.\nӘгәр һеҙ шулай ҙа был файлды тейәргә теләһәгеҙ, зинһар, кире ҡайтығыҙ һәм уны икенсе исем аҫтында тейәгеҙ.\n[[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "Бындай исемле файл дөйөм файл һаҡлағыста бар инде.\nӘгәр һеҙ шулай ҙа был файлды тейәргә теләһәгеҙ, зинһар, кире ҡайтығыҙ һәм яңы исем һайлағыҙ.\n[[File:$1|thumb|center|$1]]",
        "file-exists-duplicate": "Был файл түбәндәге {{PLURAL:$1|1=файл|файлдар}} менән тап килә:",
        "file-deleted-duplicate": "Оҡшаш файл ([[:$1]]) юйылғайны инде. Уны ҡайтанан тейәр алдынан, зинһар, файлды юйыу тарихын ҡарағыҙ.",
+       "file-deleted-duplicate-notitle": "Ошоға оҡшаған файл юйылған,ә исеме тыйылған булған. Яңынан тейәү алдынан администратор хоҡуғы булған кешенән тыйылған файлдарҙы ҡарап сығыуын һорарға кәрәк.",
        "uploadwarning": "Киҫәтеү",
        "uploadwarning-text": "Зинһар, түбәндәге файл тасуирламаһын үҙгәртегеҙ һәм яңынан ҡабатлап ҡарағыҙ.",
        "savefile": "Һөҙгөстө яҙҙырып ҡуйырға",
        "uploaddisabledtext": "Файлдар тейәү рөхсәт ителмәй.",
        "php-uploaddisabledtext": "Файлдар тейәү PHP көйләүҙәрендә рөхсәт ителмәй. Зинһар, file_uploads көйләүен тикшерегеҙ.",
        "uploadscripted": "Файлда булған HTML-кодты йәки скриптты браузер дөрөҫ эшкәртмәүе мөмкин.",
+       "upload-scripted-pi-callback": "XML стилендәге таблицаны эшкәртеү инструкцияһы булған файлды тейеп булмай.",
+       "uploaded-script-svg": "Тейәлгән SVG-файлында хәүефле  «$1» элементы табылды.",
+       "uploaded-hostile-svg": "Тейәлгән SVG-файлда хәүефле CSS-код табылды.",
+       "uploaded-event-handler-on-svg": "SVG-файлдары өсөн  <code>$1=\"$2\"</code> атрибуты ҡуйыу рөхсәт ителмәй.",
+       "uploaded-href-attribute-svg": "SVG-файлында href-атрибуты  <code><$1 $2=\"$3\"></code> тик http:// йәки https:// башланған маҡсатҡа рөхсәт ителә.",
+       "uploaded-href-unsafe-target-svg": "Тейәлгән SVG-файлда хәүефле мәғлүмәт табылды: URI <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-animate-svg": "Тейәлгән SVG-файлында тег «animate»  табылды,  «from»-атрибут <code>&lt;$1 $2=\"$3\"&gt;</code> ярҙамында һылтанманы үҙгәртә ала.",
+       "uploaded-setting-event-handler-svg": "Тейәлгән SVG-файлда  <code>&lt;$1 $2=\"$3\"&gt;</code> коды табылды, атрибуттар ҡуйыу блокланды.",
+       "uploaded-setting-href-svg": "«href» атрибутына  «set» тегын ҡуйыу блокланды.",
+       "uploaded-wrong-setting-svg": "«set» тегын файҙаланыу  блокланды. Тейәлгән SVG-файлында  <code>&lt;set to=\"$1\"&gt;</code> конструкцияһы табылды.",
+       "uploaded-setting-handler-svg": "SVG«handler» атрибутын өҫтәүсе SVG блокланды.Тейәлгән SVG-файлда  <code>$1=\"$2\"</code> конструкцияһы табылды.",
+       "uploaded-remote-url-svg": "SVG«handler» атрибутын өҫтәүсе SVG блокланды.Тейәлгән SVG-файлда  <code>$1=\"$2\"</code> конструкцияһы табылды.",
+       "uploaded-image-filter-svg": "Тейәлгән SVG-файлда рәсемдәр фильтры табылды URL-адресом <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploadscriptednamespace": " SVG-файлында ярамаған исем бар '$1'",
+       "uploadinvalidxml": "Тейәлгән файлда анализлап булмай XML .",
        "uploadvirus": "Файлда вирус бар!\nТулыраҡ мәғлүмәт: $1",
        "uploadjava": "Был, эсендә Java .class файлы булған ZIP-архив.\nИменлек өсөн Java-файлдарын тейәү тыйылған.",
        "upload-source": "Сығанаҡ файл",
        "upload-options": "Тейәү көйләүҙәре",
        "watchthisupload": "Файлды күҙәтергә",
        "filewasdeleted": "Бындай исемле файл бығаса булған һәм юйылған. Зинһар, ҡабаттан тейәр алдынан $1 битен ҡарағыҙ.",
+       "filename-thumb-name": "Файл исеме рәсемдең бәләкәйләтелгән исеменә оҡшаған. Зинһар, бындай миниатюраларҙы вики-проектҡа тейәмәгеҙ. Әгәр һеҙгә был файл бик кәрәк булһа, исемен эстәлегенә ярашлы үҙгәртегеҙ.",
        "filename-bad-prefix": "Тейәлә торған файлдың исеме ''«$1»''' менән башлана һәм ул цифрлы камераларҙа файлдарға уҙенән-үҙе бирелә торған исемгә оҡшаған.\nЗинһар, файлды яҡшыраҡ тасуирлаған исем һайлағыҙ.",
        "upload-proto-error": "Протокол дөрөҫ түгел",
        "upload-proto-error-text": "Алыҫтан тейәү өсөн <code>http://</code> йәки <code>ftp://</code> менән башланған адрес кәрәк.",
        "upload-too-many-redirects": "URL бигерәк күп йүнәлтмәләр яһай.",
        "upload-http-error": "HTTP хата килеп сыҡты: $1",
        "upload-copy-upload-invalid-domain": "Был доменға ҡараған сайттарҙан файл күсереү асыҡ түгел",
+       "upload-foreign-cant-upload": "Вики ситтәге репозиторийға файл тейәргә көйләнмәгән.",
+       "upload-dialog-title": "Файлды тейәргә",
+       "upload-dialog-button-cancel": "Кире алырға",
+       "upload-dialog-button-done": "Әҙер",
+       "upload-dialog-button-save": "Һаҡларға",
+       "upload-dialog-button-upload": "Тейәргә",
+       "upload-form-label-infoform-title": "Ентеклерәк",
+       "upload-form-label-infoform-name": "Исем",
+       "upload-form-label-infoform-name-tooltip": "Башлыҡтың үҙенсәләкле исеме һаҡланасаҡ. Ябай телдә яҙылған исем һәм пробелдар ҡулланырға була. Киңәйтеүҙәр ҡулланмағыҙ.",
+       "upload-form-label-infoform-description": "Тасуирлау",
+       "upload-form-label-infoform-description-tooltip": "Был әҫәр тураһында ҡыҫҡаса тасуирлама бирегеҙ. Фото өсөн - фотола нимә иң мөһиме, төшөрөлгән урынды яҙығыҙ.",
+       "upload-form-label-usage-title": "Ҡулланыу",
+       "upload-form-label-usage-filename": "Файл исеме",
+       "foreign-structured-upload-form-label-own-work": "Был минең эш",
+       "foreign-structured-upload-form-label-infoform-categories": "Категориялар",
+       "foreign-structured-upload-form-label-infoform-date": "Дата",
+       "foreign-structured-upload-form-label-own-work-message-local": "Тейәлгән файл  {{SITENAME}} лицензия сәйәсәтенә ярашлы икәнен раҫлайым.",
+       "foreign-structured-upload-form-label-not-own-work-message-local": "{{SITENAME}} ҡағиҙәләренә ярашлы файлды тейәй алмаһағыҙ, диалог теҙерәһен ябығыҙ ҙа тейәү !с!н башҡа ысулды һайлағыҙ.",
+       "foreign-structured-upload-form-label-not-own-work-local-local": "Ошонда эшләп ҡарағыҙ[[Special:Upload|килешеү буйынса тейәү бите]].",
+       "foreign-structured-upload-form-label-own-work-message-default": "Был файлды дөйөм репозиторийға күсереүемде аңлайым. Быны ҡулланыусы килешеүе һәм лицензия сәйәсәтенә ярашлы эшләүемде раҫлайым.",
+       "foreign-structured-upload-form-label-not-own-work-message-default": "{{SITENAME}} ҡағиҙәләренә ярашлы файлды тейәй алмаһағыҙ, диалог теҙерәһен ябығыҙ ҙа тейәү өсөн башҡа ысулды һайлағыҙ.",
+       "foreign-structured-upload-form-label-not-own-work-local-default": "{{SITENAME}} талаптарына ярашлы файлы тейәп булһа,  [[Special:Upload|тейәү битен]] ҡарағыҙ.",
+       "foreign-structured-upload-form-label-own-work-message-shared": "Мин ошо файлдың авторы икәнемде раҫлайым һәм был файлды   Викискладта [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Attribution-ShareAlike 4.0] лицензияһы аҫтынан кире алмаҫҡа урынлаштырырға ризалы! бирәм, шулай уҡ  [https://wikimediafoundation.org/wiki/ҡулланыу шарттары] менән килешәм.",
+       "foreign-structured-upload-form-label-not-own-work-message-shared": "Әгәр ошо файлдың авторы түгелһегеҙ һәм уны икенсе лицензия аҫтында сығарырға теләйһегеҙ икән,  [https://commons.wikimedia.org/wiki/Special:UploadWizard Викискладҡа күсереү оҫталары] мөмкинлеген файҙаланығыҙ.",
+       "foreign-structured-upload-form-label-not-own-work-local-shared": "{{SITENAME}} талаптарына ярашлы файлы тейәп булһа,  [[Special:Upload|тейәү битен]] ҡарағыҙ.",
        "backend-fail-stream": "$1 файлын трансляциялап булмай.",
        "backend-fail-backup": "$1 файлының резерв күсермәһен эшләп булмай.",
        "backend-fail-notexists": "$1 файлы юҡ.",
        "backend-fail-closetemp": "Ваҡытлы файлды ябып булмай.",
        "backend-fail-read": "«$1» файлын уҡып булмай.",
        "backend-fail-create": "«$1» файлын яҙып булмай.",
-       "backend-fail-maxsize": "$1 Ñ\84айлÑ\8bн Ñ\8fÒ\99Ñ\8bп Ð±Ñ\83лманÑ\8b, Ñ\81өнки Ñ\83нÑ\8bÒ£ ÐºÒ¯Ð»Ó\99ме {{PLURAL:$2|1=$2 Ð±Ð°Ð¹Ñ\82Ñ\82ан|$2 Ð±Ð°Ð¹Ñ\82Ñ\82ан}} ÐºÒ¯Ð¿.",
+       "backend-fail-maxsize": "$1 Ñ\84айлÑ\8bн Ñ\8fÒ\99Ñ\8bп Ð±Ñ\83лманÑ\8b, Ñ\81өнки Ñ\83нÑ\8bÒ£ ÐºÒ¯Ð»Ó\99ме {{PLURAL:$2|1=$2 Ð±Ð°Ð¹Ñ\82Ñ\82ан|$2 Ð±Ð°Ð¹Ñ\82Ñ\82ан}} Ð°Ñ\80Ñ\82Ñ\8bÒ¡.",
        "backend-fail-readonly": "$1 һаҡлағысы әлегә уҡыу өсөн генә асыҡ. Сәбәбе: $2",
        "backend-fail-synced": "$1 файлы эске һаҡлағыста ярашһыҙ хәлдә тора.",
        "backend-fail-connect": "\"$1\" һаҡлағысы менән бәйләнеш яһап булманы.",
        "licenses-edit": "Лицензия параметрҙарын үҙгәртергә",
        "license-nopreview": "(Ҡарап сығыу мөмкин түгел)",
        "upload_source_url": "(Дөрөҫ, дөйөм ҡулланыу өсөн асыҡ URL-адрес)",
-       "upload_source_file": "(һеҙҙең компьютерҙағы файл)",
+       "upload_source_file": "(һеҙ компьютерҙағы файлды һайланығыҙ)",
+       "listfiles-delete": "юйырға",
        "listfiles-summary": "Был ярҙамсы бит бөтә тейәлгән файлдарҙы күрһәтә.",
        "listfiles_search_for": "Файл исеме буйынса эҙләү:",
        "listfiles-userdoesnotexist": "\"$1\" иҫәп яҙмаһы теркәлмәгән.",
        "filerevert-legend": "Файлдың элекке өлгөһөнә ҡайтыу",
        "filerevert-intro": "Һеҙ '''[[Media:$1|$1]]''' файлын [$2 $3 булдырылған $4 өлгөһөнә] ҡайтараһығыҙ.",
        "filerevert-comment": "Сәбәп:",
-       "filerevert-defaultcomment": "$1 $2 өлгөһөнә ҡайтыу",
+       "filerevert-defaultcomment": "$1 $2 ($3) өлгөһөнә ҡайтыу",
        "filerevert-submit": "Кире алырға",
        "filerevert-success": "'''[[Media:$1|$1]]''' [$2 $3 булдырылған $4 өлгөһөнә] ҡайтарылды.",
        "filerevert-badversion": "Файлдың күрһәтелгән ваҡыт билдәһе менән алдағы урындағы өлгөһө юҡ.",
        "unwatchedpages": "Бер кем дә күҙәтмәгән биттәр",
        "listredirects": "Йүнәлтеүҙәр исемлеге",
        "listduplicatedfiles": "Күсермәләр менән файлдар исемлеге",
+       "listduplicatedfiles-summary": "Был файлдар исемлеге, һуңғы файл башҡа ҡайһы бер файлдарҙың дубликаты һанала. Тик локаль файрдар иҫәпләнә.",
+       "listduplicatedfiles-entry": " [[:File:$1|$1]] файлының — [[$3|{{PLURAL:$2|$2 дубликаты}}]] бар.",
        "unusedtemplates": "Ҡулланылмаған ҡалыптар",
        "unusedtemplatestext": "Был биттә {{ns:template}} исемдәр арауығының бөтә башҡа биттәргә индерелмәгән биттәре исемлеге килтерелгән.\nҠалыпты юйыр алдынан, уға башҡа һылтанмалар юҡлығын тикшерергә онотмағыҙ.",
        "unusedtemplateswlh": "Башҡа һылтанмалар",
        "randomincategory-nopages": "[[:Category:$1|$1]] категорияһында биттәр юҡ.",
        "randomincategory-category": "Категория:",
        "randomincategory-legend": "Категорияла осраҡлы файл",
+       "randomincategory-submit": "Күсергә",
        "randomredirect": "Осраҡлы биткә күсеү",
        "randomredirect-nopages": "\"$1\" исемдәр арауығында йүнәлтеүҙәр юҡ.",
        "statistics": "Статистика",
        "unusedimages": "Ҡулланылмаған файлдар",
        "wantedcategories": "Кәрәкле категориялар",
        "wantedpages": "Кәрәкле биттәр",
+       "wantedpages-summary": "Иң күп һылтанмалары булған ғәмәлдәге биттәр, булмаған биттәргә һылтанмаһы булған биттәр күрһәтермәгән. Ғәмәлдә булмаған биттәргә һылтанмаларҙы ҡарау өсөн [[{{#special:BrokenRedirects}}|ғәмәлдә булмаған йүнәлтеүҙәр]].",
        "wantedpages-badtitle": "Һорау һөҙөмтәләрендә дөрөҫ булмаған исем: $1",
        "wantedfiles": "Кәрәкле файлдар",
        "wantedfiletext-cat": "Киләһе файлдарҙы улар булмаған хәлдә ҡулланырға тырышыла. Тыш һаҡлағыстарҙа булған файлдар был исемлеккә яңылыш эләгеүе мөмкин. Бындай хаталы белдереүҙәр <del>һыҙыҡ</del> менән күрһәтеләсәк. Шулай уҡ, булмаған файлдарҙы алған биттәр киләһе исемлектә күрһәтелгән: [[:$1]]",
+       "wantedfiletext-cat-noforeign": "Түбәндәге файлдар ҡулланыла, әммә ғәмәлдә юҡ. Бынан тыш был файлға һылтаныусы биттәр ғәмәлдә юҡ һәм [[:$1]] битендә иҫәпләнә.",
        "wantedfiletext-nocat": "Киләһе файлдарҙы улар булмаған хәлдә ҡулланырға тырышыла. Тыш һаҡлағыстарҙа булған файлдар был исемлеккә яңылыш эләгеүе мөмкин. Бындай хаталы белдереүҙәр <del>һыҙыҡ</del> менән күрһәтеләсәк.",
+       "wantedfiletext-nocat-noforeign": "Түбәндәге файл ҡулланыла, әммә ул юҡ.",
        "wantedtemplates": "Кәрәкле ҡалыптар",
        "mostlinked": "Иң күп һылтанма яһалған биттәр",
        "mostlinkedcategories": "Иң күп һылтанма яһалған категориялар",
-       "mostlinkedtemplates": "Ð\98Ò£ ÐºÒ¯Ð¿ Ò»Ñ\8bлÑ\82анма Ñ\8fһалÒ\93ан Ò¡Ð°Ð»Ñ\8bпÑ\82ар",
+       "mostlinkedtemplates": "Ð\98Ò£ ÐºÒ¯Ð¿ Ò¡Ñ\83лланÑ\8bлÒ\93ан Ð±Ð¸Ñ\82Ñ\82Ó\99р",
        "mostcategories": "Күп категорияларға кертелгән биттәр",
        "mostimages": "Иң күп һылтанма яһалған рәсемдәр",
        "mostinterwikis": "Иң күп интервики-һылтанмалы биттәр",
        "mostrevisions": "Иң күп үҙгәртеү яһалған биттәр",
        "prefixindex": "Исемдәре башында ҡушымта торған биттәр",
        "prefixindex-namespace": "Префикслы бар биттәр ( $1 исемдәр арауығы)",
+       "prefixindex-submit": "Күрһәтергә",
        "prefixindex-strip": "Һөҙөмтәләр исемлегендә префиксты йәшерергә",
        "shortpages": "Ҡыҫҡа биттәр",
        "longpages": "Оҙон биттәр",
        "deadendpagestext": "Түбәндәге биттәр {{SITENAME}} проектының башҡа биттәренә һылтанма яһамай.",
        "protectedpages": "Һаҡланған биттәр",
        "protectedpages-indef": "Сикләнмәгән һаҡлауҙар ғына",
+       "protectedpages-summary": "Бында әлегә мәлдә булған һәм һаҡланыулы биттәр килтерелгән. Исемлекте ҡарау өсөн [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Эҙмә-эҙлекле һаҡлауҙар ғына",
        "protectedpages-noredirect": "Йүнәлтеүҙәрҙе йәшерергә",
        "protectedpagesempty": "Әлеге ваҡытта күрһәтелгән шарттар менән һаҡланған биттәр юҡ.",
        "protectedpages-performer": "Ҡатнашыусыны һаҡлау",
        "protectedpages-params": "Һаҡ параметрҙары",
        "protectedpages-reason": "Сәбәп",
+       "protectedpages-submit": "Биттәрҙе күрһәтеү",
        "protectedpages-unknown-timestamp": "Билдәһеҙ",
        "protectedpages-unknown-performer": "Билдәһеҙ ҡатнашыусы",
        "protectedtitles": "Тыйылған исемдәр",
+       "protectedtitles-summary": "Бында яңынан булдырыуҙан һаҡланған атамалар килтерелгән. Исмелекте ҡарау өсөн: [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
        "protectedtitlesempty": "Әлеге ваҡытта күрһәтелгән шарттар менән һаҡланған исемдәр юҡ.",
+       "protectedtitles-submit": "Күренгән исем",
        "listusers": "Ҡатнашыусылар исемлеге",
        "listusers-editsonly": "Кәмендә бер үҙгәртеү индергән ҡатнашыусыларҙы ғына күрһәтергә",
        "listusers-creationsort": "Булдырыу көнө буйынса тәртипкә килтерергә",
        "listusers-desc": "Кәмеү буйынса айырырға",
-       "usereditcount": "$1 {{PLURAL:$1|үҙгәртеү}}",
+       "usereditcount": "{{PLURAL:$1|үҙгәртеү}}",
        "usercreated": "$3 ҡулланыусыһының теркәлеү ваҡыты: $1 $2",
        "newpages": "Яңы биттәр",
+       "newpages-submit": "Күрһәтергә",
        "newpages-username": "Ҡатнашыусы:",
        "ancientpages": "Иң иҫке мәҡәләләр",
        "move": "Яңы исем биреү",
        "notargettext": "Һеҙ был ғәмәл өсөн кәрәкле битте йәки ҡатнашыусыны күрһәтмәгәнһегеҙ.",
        "nopagetitle": "Бындай бит юҡ",
        "nopagetext": "Һеҙ күрһәткән бит юҡ.",
-       "pager-newer-n": "{{PLURAL:$1|1=1 яңыраҡ|$1 яңыраҡ}}",
+       "pager-newer-n": "$1{{PLURAL:$1|1=1 яңыраҡ|$1 яңыраҡ}}",
        "pager-older-n": "{{PLURAL:$1|1=1 иҫкерәк|$1 иҫкерәк}}",
        "suppress": "Йәшереү",
        "querypage-disabled": "Был махсус бит һөҙөмтәлелекте арттырыу өсөн ябылған.",
        "apihelp": "API белешмәһе",
        "apihelp-no-such-module": "«$1» модуле табылмаған.",
        "apisandbox": "API һынау урыны",
+       "apisandbox-jsonly": " API-һынап ҡарау урыны өсөн  JavaScript талап ителә.",
        "apisandbox-api-disabled": "Был сайтта API һүндерелгән.",
-       "apisandbox-intro": "''MediaWiki API''' өйрәнеү бите.  API ҡулланыу тураһында белешмә алыу өсөн [//www.mediawiki.org/wiki/API:Main_page API документацияһы]на мөрәжәғәт итегеҙ. Мәҫәләң, [//www.mediawiki.org/wiki/API#A_simple_example Башбит эстәлеген нисек алырға]. Башҡа миҫалдарҙы күреү өсөн ғәмәлде ҡулланығыҙ.",
+       "apisandbox-intro": "Был битте <strong>MediaWiki API</strong> менән тәжрибәләр өсөн ҡулланығыҙ. API ҡулланыуҙа тулыраҡ мәғлүмәт өсөн    [[mw:API:Main page| API документацияһы]] мөрәжәғәт итегеҙ. Мәҫәлән, [//www.mediawiki.org/wiki/API#A_simple_example Баш биттең йөкмәткеһен нисек алырға]. Башҡа миҫалдарҙы ҡарау өсөн ғәмәл һайлағыҙ. Иғтибар, тәжрибәләр өсөн ҡулланылһа ла, был биттә башҡарылған ғәмәлдәр викиға үҙгәрештәр индерә ала.",
+       "apisandbox-fullscreen": "Панелды асырға",
+       "apisandbox-fullscreen-tooltip": "Браузер тәҙрәһен тултырыу өсөн һынап ҡарау панелен асырға.",
+       "apisandbox-unfullscreen": "Битте күрһәтергә",
+       "apisandbox-unfullscreen-tooltip": "MediaWiki навигация һылтанмалары күренһен өсөн һынап ҡарау панелен бәләкәйләтергә.",
        "apisandbox-submit": "Һоратыу яһарға",
        "apisandbox-reset": "Таҙарт",
-       "apisandbox-examples": "Миҫал",
+       "apisandbox-retry": "Ҡабатлау",
+       "apisandbox-loading": " API-модуле өсөн мәғлүмәт тейәү «$1»…",
+       "apisandbox-load-error": "API-модуле өсөн мәғлүмәт тейәгәндә хата китте «$1»: $2",
+       "apisandbox-no-parameters": "API-модуленең параметрҙары юҡ.",
+       "apisandbox-helpurls": "Белешмәгә һылтанма",
+       "apisandbox-examples": "Миҫалдар",
+       "apisandbox-dynamic-parameters": "Өҫтәмә параметрҙар",
+       "apisandbox-dynamic-parameters-add-label": "Параметр өҫтәргә",
+       "apisandbox-dynamic-parameters-add-placeholder": "Параметр исеме",
+       "apisandbox-dynamic-error-exists": " «$1» исемле параметр бар.",
+       "apisandbox-deprecated-parameters": "Иҫкергән параметрҙар",
+       "apisandbox-fetch-token": "Торенды автоматик тултырыу",
+       "apisandbox-submit-invalid-fields-title": "Ҡайһы бер ҡырҙар дөрөҫ түгел",
+       "apisandbox-submit-invalid-fields-message": "Билдәләнгән ҡырҙырҙы тәҙәтегеҙ һәм яңынан эшләр ҡарағыҙ.",
        "apisandbox-results": "Һөҙөмтә",
+       "apisandbox-sending-request": "API-ғариза ебәреү",
+       "apisandbox-loading-results": "API-яуап алыу",
+       "apisandbox-results-error": " API-яуап алғанда хата китте: $1.",
        "apisandbox-request-url-label": "Һоратыуҙың URL-адресы:",
-       "apisandbox-request-time": "Мөрәжәғәт ваҡыты:$1",
+       "apisandbox-request-time": "Мөрәжәғәт ваҡыты:{{PLURAL:$1|$1 мс}}",
+       "apisandbox-results-fixtoken": "Токенды төҙөтегеҙ, ебәреүҙе ҡабатлағыҙ",
+       "apisandbox-results-fixtoken-fail": " «$1» токенына инеп булманы",
+       "apisandbox-alert-page": "Был биттә ҡайһы бер ҡырҙар дөрөҫ түгел.",
+       "apisandbox-alert-field": "Был ҡыр дәүмәле ярамай.",
        "booksources": "Китап сығанаҡтары",
        "booksources-search-legend": "Китап сығанаҡтарын эҙлә",
        "booksources-search": "Эҙләү",
        "booksources-text": "Түбәндәге исемлектә — китаптар һатыу менән шөғөлләнеүсе сайттарға һәм китапханаларҙың эҙләү системаларына һылтанмалар, һәм уларҙа һеҙ эҙләгән китаптар тураһында өҫтәмә мәғлүмәт булыуы мөмкин.",
        "booksources-invalid-isbn": "Күрһәтелгән ISBN номерҙа хата булырға тейеш. Зинһар, номерҙы сығанаҡтан дөрөҫ күсереүегеҙҙе тикшерегеҙ.",
        "specialloguserlabel": "Башҡарыусы:",
-       "speciallogtitlelabel": "Маҡсат (исем йәки ҡулланыусы):",
+       "speciallogtitlelabel": "Маҡсат (исем йәки ҡулланыусы {{ns:user}}):",
        "log": "Журналдар",
+       "logeventslist-submit": "Күрһәтергә",
        "all-logs-page": "Барлыҡ асыҡ журналдар",
        "alllogstext": "{{SITENAME}} проектының дөйөм яҙмалар журналы исемлеге. Һеҙ һөҙөмтәләрҙе журнал төрө буйынса, ҡатаншыусы исеме буйынса (ҙур/бәләкәй хәрефкә һиҙгер) йәки ҡағылған бит исеме буйынса (шулай уҡ ҙур/бәләкәй хәрефкә һиҙгер) һайлап ала алаһығыҙ.",
        "logempty": "Журнал яҙмаларында һайланған юлдар юҡ.",
        "log-title-wildcard": "Керетелгән хәрефтәр менән башланған исемдәрҙе табырға",
        "showhideselectedlogentries": "Журналдың һайланған яҙмаларын күрһәтергә/йәшерергә.",
+       "log-edit-tags": "Журналдағы яҙмала тэгты мөхәррирләргә",
+       "checkbox-select": "Һайланған: $1",
+       "checkbox-all": "Барыһы",
+       "checkbox-none": "Юҡ",
+       "checkbox-invert": "Әйләндерү",
        "allpages": "Бөтә биттәр",
        "nextpage": "Киләһе бит ($1)",
        "prevpage": "Алдағы бит ($1)",
        "cachedspecial-viewing-cached-ts": "Һеҙ биттең кэшланған өлгөһөн ҡарайһығыҙ. Уның хәҙерге өлгөнән бик ныҡ айырылыуы мөмкин.",
        "cachedspecial-refresh-now": "Һуңғы версияны ҡарарға",
        "categories": "Категориялар",
-       "categoriespagetext": "Түбәндәге {{PLURAL:$1|1=категорияла|категорияларҙа}} биттәр йәки файлдар бар.\n[[Special:UnusedCategories|Ҡулланылмаған категориялар]] бында күрһәтелмәгән.\nШулай уҡ [[Special:WantedCategories|кәрәкле категориялар исемлеген]] ҡарағыҙ.",
+       "categories-submit": "Күрһәтергә",
+       "categoriespagetext": "{{PLURAL:$1|1=Был категория}}ла биттәр һәм    медиа-файллардар бар.\nАҫта [[Special:UnusedCategories|ҡулланылмаған категориялар]] күһәтелмәгән.\nШулай уҡ  [[Special:WantedCategories|талап ителгән категориялар]] күһәтелгән.",
        "categoriesfrom": "Ошондай хәрефтәрҙән башланған категорияларҙы күрһәтергә:",
        "special-categories-sort-count": "күләме буйынса тәртипкә килтерергә",
        "special-categories-sort-abc": "алфавит буйынса тәртипкә килтерергә",
        "activeusers-hidebots": "Боттарҙы йәшерергә",
        "activeusers-hidesysops": "Хакимдәрҙе йәшерергә",
        "activeusers-noresult": "Ҡатнашыусылар табылманы",
+       "activeusers-submit": "Әүҙем ҡулланыусыларҙы күрһәтергә",
        "listgrouprights": "Ҡатнашыусылар төркөмө хоҡуҡтары",
        "listgrouprights-summary": "Түбәндә был вики-проектта билдәләнгән ҡатнашыусы төркөмдәре килтерелгән һәм уларҙың хоҡуҡтары күрһәтелгән.\nШәхси хоҡуҡтар тураһында [[{{MediaWiki:Listgrouprights-helppage}}|өҫтәмә мәғлүмәт]] булыуы мөмкин.",
        "listgrouprights-key": "Легенда:\n* <span class=\"listgrouprights-granted\">Бирелгән хоҡуҡтар</span>\n* <span class=\"listgrouprights-revoked\">Алынған хоҡуҡтар</span>",
        "listgrouprights-removegroup-self-all": "Үҙенең иҫәп яҙмаһынан бөтә төркөмдәрҙе юйыу",
        "listgrouprights-namespaceprotection-header": "Исемдәр арауығы сикләүҙәре",
        "listgrouprights-namespaceprotection-namespace": "Исемдәр арауығы",
+       "listgrouprights-namespaceprotection-restrictedto": "Ҡулланыусыға мәхәррирләү мөкинлеген биргән хоҡуҡтар",
+       "listgrants": "Рөхсәттәр",
+       "listgrants-summary": "Түбәндә ҡайһы ҡулланыусы хоҡуҡтарына бәйләнгәнлеген дә күрһәткән рөхсәт итеүҙәр исемлеге килтерелә. Ҡатнашыусылар ҡатнашыусы ҡушымталарға биргән сикле хоҡуҡтар менән ҡушымталарға үҙҙәренең иҫәп яҙмаларын ҡулланырға рөхсәт итә ала. Әммә ҡатнашыусы исеменән ғәмәлдә булған ҡушымта, иҫәп яҙмаһында булмаған хоҡуҡтар менән ҡуллана ала. Айырым хоҡуҡтар тураһында [[{{MediaWiki:Listgrouprights-helppage}}|өҫтәмә мөғлүмәт]] алырға була.",
+       "listgrants-grant": "Рөхсәт",
+       "listgrants-rights": "Хоҡуҡтар",
+       "trackingcategories": "Категорияларҙы күҙәтеү",
+       "trackingcategories-summary": "Был биттә MediaWiki программа тәьминиәте тарафынан автоматик рәүештә тултырылған күҙәтеүсе категориялар күрһәтелгән. Уларҙың исемен {{ns:8}} исемдәр киңлегендәге тейешле система хәбәрҙәрен үҙгәртеп алыштырырға була.",
+       "trackingcategories-msg": "Күҙәтеүсе категория",
        "trackingcategories-name": "Хәбәр исеме",
+       "trackingcategories-desc": "Категорияға индереү критерийҙары",
+       "noindex-category-desc": "Бит эҙләүсе роботтар тарафынан индексацияланмай, сөнки унда \"тылсымлы һүҙ\" <code><nowiki>__NOINDEX__</nowiki></code> бар һәм ул был флаг рөхсәт ителгән исемдәр киңлегендә урынлашҡан.",
+       "index-category-desc": "Биттә «тылсымлы һүҙ» бар<nowiki>__INDEX__</nowiki> (бит рөхсәт ителгән исемдәр арауығында ята), шуға күрә эҙләү системаһында индекслана.",
+       "post-expand-template-inclusion-category-desc": "Барлыҡ ҡалыптарҙы ла күрһәткәндән һуң биттең күләме арта<code>$wgMaxArticleSize</code>, шуға күрә ҡайһы берҙәре тулыһынса күрһәтелмәне.",
+       "post-expand-template-argument-category-desc": "Бит <code>$wgMaxArticleSize</code> ҡалып дәлиле асылғандан һуң ҙурыраҡ була(фигуралы өс йәйә, мәҫәлән<code>({{{Foo}}})</code>).",
+       "expensive-parserfunction-category-desc": "Биттә ресурс һыйҙырышлығы ҙур булған (<code>#ifexist</code> кеүек) функциялар күп ҡулланыла.Тулыраҡ -[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit] битендә.",
+       "broken-file-category-desc": "Был бит булмаған файлға һылтана",
+       "hidden-category-category-desc": "Был категорияла <code><nowiki>__HIDDENCAT__</nowiki></code> тамғаһы бар, был категория бүлегендә битте күрһәтмәй.",
+       "trackingcategories-nodesc": "Тасуирлама юҡ.",
+       "trackingcategories-disabled": "Категория һүндерелгән.",
        "mailnologin": "Хат ебәреү өсөн адрес юҡ",
        "mailnologintext": "Башҡа ҡатнашыусыларға хат ебәреү өсөн, һеҙ [[Special:UserLogin|танылырға]] һәм [[Special:Preferences|көйләүҙәрегеҙҙә]] ысын электрон адрес почтаһы кереткән булырға тейешһегеҙ.",
        "emailuser": "Ҡатнашыусыға хат",
        "mywatchlist": "Күҙәтеү исемлеге",
        "watchlistfor2": "$1 $2 өсөн",
        "nowatchlist": "Һеҙҙең күҙәтеү исемлегегеҙ буш.",
-       "watchlistanontext": "Күҙәтеү исемлеген ҡарау йәки мөхәррирләү өсөн $1 кәрәк.",
+       "watchlistanontext": "Күҙәтеү исемлеген ҡарау йәки мөхәррирләү өсөн  кәрәк.",
        "watchnologin": "Үҙегеҙҙе танытырға кәрәк",
        "addwatch": "Күҙәтеү исемлегенә өҫтәргә",
        "addedwatchtext": "\"[[:$1]]\" бите [[Special:Watchlist|күҙәтеү исемлегегеҙгә]] өҫтәлде.\nБыл биттә һәм уның фекер алышыу битендә буласаҡ бар үҙгәртеүҙәр ундағы исемлектә күрһәтеләсәк.",
+       "addedwatchtext-short": "\"$1\" бите Һеҙҙең күҙәтеү исемлегенә өҫтәлгән",
        "removewatch": "Күҙәтеү исемлегенән сығарырға",
-       "removedwatchtext": "«[[:$1]]» бите [[Special:Watchlist|күҙәтеү исемлегегеҙҙән]] сығарылды.",
+       "removedwatchtext": "«[[:$1]]» мәҡәләһе һәм уның фекер алышыу бите һеҙҙең [[Special:Watchlist|күҙәтеү исемлегенән]] сығарылды.",
+       "removedwatchtext-short": "\"$1\" бите һеҙҙең күҙәтеү исемлегенән алып ташланды.",
        "watch": "Күҙәтергә",
        "watchthispage": "Был битте күҙәтергә",
        "unwatch": "Күҙәтмәҫкә",
        "wlheader-enotif": "Электрон почта аша белдереү индерелгән.",
        "wlheader-showupdated": "Һеҙҙең аҙаҡҡы кереүегеҙҙән һуң үҙгәргән биттәр '''ҡалын''' шрифт менән күрһәтелгән.",
        "wlnote": "Түбәндә $3 $4 ваҡытына тиклем аҙаҡҡы {{PLURAL:$2|1=сәғәт|'''$2''' сәғәт}} эсендә эшләнгән {{PLURAL:$1|1=үҙгәртеү|'''$1''' үҙгәртеү}} күрһәтелгән.",
-       "wlshowlast": "Һуңғы $1 сәғәт $2 көн өсөн күрһәт",
+       "wlshowlast": "Һуңғы $1 сәғәт $2 көн эсендәгеһен күрһәтеү",
+       "watchlist-hide": "Йәшереү",
+       "watchlist-submit": "Күрһәтергә",
+       "wlshowtime": "Күрһәтеү өсөн ваҡыт арауығы",
+       "wlshowhideminor": "Әҙ генә үҙгәрештәр",
+       "wlshowhidebots": "Бот",
+       "wlshowhideliu": "танылған ҡулланыусылар",
+       "wlshowhideanons": "Аноним ҡулланыусылар",
+       "wlshowhidepatr": "Тикшерелгән төҙәтеүҙәр",
+       "wlshowhidemine": "Минең үҙгәртеүҙәр",
+       "wlshowhidecategorization": "Биттәрҙе категориялаштырыу",
        "watchlist-options": "Күҙәтеү исемлеге көйләүҙәре",
        "watching": "Күҙәтеү исемлегенә өҫтәү...",
        "unwatching": "Күҙәтеү исемлегенән сығарыу...",
        "deletepage": "Битте юйырға",
        "confirm": "Раҫларға",
        "excontent": "эстәлеге: \"$1\"",
-       "excontentauthor": "эстәлеге: \"$1\" (һәм берҙән-бер авторы \"[[Special:Contributions/$2|$2]]\" ине)",
+       "excontentauthor": "эстәлеге: \"$1\" (һәм берҙән-бер авторы \"[[Special:Contributions/$2|$2]] ([[User talk:$2|фекер алышыу]])\" ине)",
        "exbeforeblank": "юйыуға тиклемге эсләлеге: \"$1\"",
        "delete-confirm": "$1 — юйырға",
        "delete-legend": "Юйырға",
-       "historywarning": "'''Киҫәтеү:''' һеҙ юйырға йыйынған биттең тарихында яҡынса $1 {{PLURAL:$1|өлгө}} бар:",
+       "historywarning": "<strong>Иғтибар:</strong> һеҙ юйырға йыйынған биттең тарихында яҡынса $1 {{PLURAL:$1|өлгө}} бар:",
+       "historyaction-submit": "Күрһәтергә",
        "confirmdeletetext": "Һеҙ был биттең (йәки рәсемдең) һәм уның мәғлүмәттәр базаһындағы үҙгәртеүҙәр тарихының тулыһынса юйылыуын һоранығыҙ.\nЗинһар, быны эшләргә теләгәнегеҙҙе, үҙ хәрәкәттәрегеҙҙең һөҙөмтәләрен аңлағанығыҙҙы һәм [[{{MediaWiki:Policy-url}}]] бүлегендә белдереп кителгән ҡағиҙәләр буйынса эшләгәнегеҙҙе раҫлағыҙ.",
        "actioncomplete": "Ғәмәл үтәлде",
        "actionfailed": "Ғәмәл үтәлмәне",
        "delete-edit-reasonlist": "Сәбәптәр исемлеген мөхәррирләргә",
        "delete-toobig": "Был биттең үҙгәртеүҙәр тарихы бик оҙон, $1 {{PLURAL:$1|өлгөнән}} күберәк.\n{{SITENAME}} проектының эшмәкәрлеге боҙолмауы маҡсатында бындай биттәрҙе юйыу тыйылған.",
        "delete-warning-toobig": "Был биттең үҙгәртеүҙәр тарихы бик оҙон, $1 {{PLURAL:$1|өлгөнән}} күберәк.\nБитте юйыу {{SITENAME}} проектының эшмәкәрлеге боҙолоуына килтереүе мөмкин, һаҡлыҡ менән эш итегеҙ.",
+       "deleteprotected": "Был бит һаҡланған, уны юйҙыра алмайһығыҙ.",
+       "deleting-backlinks-warning": "<strong>Иҫкәртеү:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|Башҡа ҡатнашыусылар]] һеҙ юйырға теләгән биткә һылтана.",
        "rollback": "Үҙгәртеүҙәрҙе кире ҡайтарырға",
        "rollbacklink": "кире",
        "rollbacklinkcount": "$1 {{PLURAL:$1|1=төҙәтеүҙе|төҙәтеүҙе}} кире алырға",
        "rollbackfailed": "Кире ҡайтарырғанда барлыҡҡа килгән хата",
        "cantrollback": "Үҙгәртеүҙәрҙе кире алыу мөмкин түгел. Битте һуңғы үҙгәртеүсе ҡатнашыусы уның берҙән-бер авторы булып тора.",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|фекер алышыу]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])  кереткән [[:$1]] һуңғы үҙгәртеүҙәрҙе кире алыу мөмкин түгел; башҡа ҡатнашыусы был битте мөхәррирләгән йәки үҙгәртеүҙәрҙе кире алған инде.\n\nҺуңғы үҙгәртеүҙәрҙе [[User:$3|$3]] ([[User talk:$3| фекер алышыу]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) кереткән.",
-       "editcomment": "Үҙгәртеүҙең тасуирламаһы \"''$1''\" ине.",
+       "editcomment": "Үҙгәртеүҙең тасуирламаһы <em>$1</em> ине.",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|фекер алышыу]]) уҙгәртеүҙәре [[User:$1|$1]] өлгөһөнә ҡайтарылды",
        "revertpage-nouser": "(Ҡатнашыусының исеме йәшерелгән) үҙгәртеүҙәре {{GENDER:$1|[[User:$1|$1]]}}өлгөһөнә ҡайтарылды",
        "rollback-success": "$1 уҙгәртеүҙәре кире алдынды;\n$2 өлгөһөнә ҡайтыу.",
        "sessionfailure-title": "Сеанс хатаһы",
        "sessionfailure": "Хәҙерге сеанста хаталар килеп сыҡҡан, булырға тейеш;\n\"сеансты баҫып алыу\"ға юл ҡуймау өсөн был ғәмәл үтәлмәне.\nАлдағы биткә кире  ҡайтығыҙ, битте яңыртығыҙ һәм яңынан ҡабатлап ҡарағыҙ.",
+       "changecontentmodel": "Биттең контент моделен мөхәррирләү",
+       "changecontentmodel-legend": "Модель эстәлеген үҙгәртергә",
+       "changecontentmodel-title-label": "Бит исемдәре",
+       "changecontentmodel-model-label": "Эстәлектең яңы моделе",
+       "changecontentmodel-reason-label": "Сәбәп",
+       "changecontentmodel-submit": "Үҙгәртергә",
+       "changecontentmodel-success-title": "Эстәлек моделе үҙгәртелде",
+       "changecontentmodel-success-text": "[[:$1]] эстәлек моделе үҙгәртелде",
+       "changecontentmodel-cannot-convert": "[[:$1]]  эстәлеге $2 тибына үҙгәртелә алмай",
+       "changecontentmodel-nodirectediting": "$1 эстәлеге моделен тураға мөхәррирләп булмай",
+       "log-name-contentmodel": "Эстәлек моделен үҙгәртеүҙәр журналы",
+       "log-description-contentmodel": "Эстәлек моделен үҙгәртеүҙәр менән бәйле ваҡиғалар",
+       "logentry-contentmodel-new": "$1 $3 {{GENDER:$2|}} битен булдырҙы, стандарт булмаған «$5» моделе ҡулланылды.",
+       "logentry-contentmodel-change": "$3 битендәге $1 {{GENDER:$2||}} эстәлек моделен $3  «$4» -тән «$5»-кә үҙгәртте.",
+       "logentry-contentmodel-change-revertlink": "кире алырға",
+       "logentry-contentmodel-change-revert": "кирегә",
        "protectlogpage": "Һаҡлау яҙмалары",
        "protectlogtext": "Түбәндә битте һаҡлауҙы үҙгәртеү яҙмалары килтерелгән.\nҺеҙ шулай уҡ хәҙерге ваҡытта [[Special:ProtectedPages|һаҡланған биттәр исемлеген]] ҡарай алаһығыҙ.",
        "protectedarticle": "«[[$1]]» битен һаҡлаған",
        "protect-locked-blocked": "Һеҙҙең исәп яҙмағыҙ бикләнгән ваҡытта һеҙ биттең һаҡлау дәрәжәһен үҙгәртә алмайһығыҙ.\n'''$1''' битенең хәҙерге һаҡлау көйләүҙәре:",
        "protect-locked-dblock": "Һаҡлау дәрәжәһе үҙгәртелә алмай, сөнки төп мәғлүмәттәр базаһы ваҡытлыса бикле.\n'''$1''' битенең хәҙерге һаҡлау көйләүҙәре:",
        "protect-locked-access": "Биттең һаҡлау дәрәжеһен үҙгәртер өсөн иҫәп яҙыуығыҙҙың хоҡуҡтары етәрле түгел. '''$1''' битенең хәҙерге һаҡлау көйләүҙәре:",
-       "protect-cascadeon": "Был бит һаҡланған, сөнки ул эҙмә-эҙлекле һаҡлау ҡуйылған {{PLURAL:$1|1=биткә|биттәргә}} керә. Һеҙ был биттең һаҡлау дәрәжәһен үҙгәртә алаһығыҙ, ләкин был эҙмә-эҙлекле һаҡлауға йоғонто яһамаясаҡ.",
+       "protect-cascadeon": "Был бит һаҡланған, сөнки ул эҙмә-эҙлекле һаҡлау ҡуйылған {{PLURAL:$1|1=биткә|биттәргә}} керә. Һеҙ был биттең һаҡлауға дәрәжәһен үҙгәртә алаһығыҙ, ләкин был эҙмә-эҙлекле һаҡлауға йоғонто яһамаясаҡ.",
        "protect-default": "Бар ҡулланыусыларға рөхсәт бирергә",
        "protect-fallback": "«$1» хоҡуҡлы ҡатнашыусыларға ғына рөхсәте ителгән",
        "protect-level-autoconfirmed": "Үҙенән-үҙе раҫланған ҡатнашыусыларға ғына рөхсәт ителгән",
        "protect-othertime": "Башҡа ваҡыт:",
        "protect-othertime-op": "башҡа ваҡыт",
        "protect-existing-expiry": "Хәҙерге тамамланыу ваҡыты: $2 $3",
+       "protect-existing-expiry-infinity": "Тамамланыу ваҡыты: сикләнмәгән",
        "protect-otherreason": "Башҡа/өҫтәмә сәбәп:",
        "protect-otherreason-op": "Башҡа сәбәп",
        "protect-dropdown": "*Ғәҙәттәге һаҡлау сәбәптәре:\n** Үтә ныҡлы вандаллыҡ\n** Үтә ныҡлы спам\n** Файҙаһыҙ үҙгәртеүҙәр ярышы\n** Киң танылған бит",
        "namespace": "Исемдәр арауығы:",
        "invert": "Һайланғандарҙы әйләндерергә",
        "tooltip-invert": "Һайланған исемдәр арауығындағы (һәм бәйле исемдәр арауығындағы, әгәр күрһәтелһә) биттәрҙәге үҙгәртеүҙәрҙе йәшерер өсөн был билдәне ҡуйығыҙ.",
+       "tooltip-whatlinkshere-invert": "Был тамғаны һайланған исемдәр арауығындағы һылтанмаларҙы йәшереү өсөн ҡуйығыҙ.",
        "namespace_association": "Бәйле арауыҡ",
        "tooltip-namespace_association": "Һайланған исемдәр арауығы менән бәйле әңгәмә(йәки тема) исем арауыҡтарын ҡушыр өсөн был билдәне ҡуйығыҙ.",
        "blanknamespace": "(Төп)",
        "contributions": "{{GENDER:$1|Ҡатнашыусы}} башҡарған эш",
        "contributions-title": "$1 исемле ҡатнашыусы башҡарған эш",
        "mycontris": "Башҡарған эштәр",
-       "anoncontribs": "баÑ\88ҡаÑ\80Ò\93ан Ñ\8dÑ\88Ñ\82әр",
+       "anoncontribs": "Ð\98Ò\93Ó\99нÓ\99ләр",
        "contribsub2": "{{GENDER:$3|$1}} башҡарған эше ($2)",
+       "contributions-userdoesnotexist": "«$1» исемле иҫәп яҙыуы юҡ.",
        "nocontribs": "Күрһәтелгән шарттарға яуап биргән үҙгәртеүҙәр табылманы.",
        "uctop": "(ағымдағы)",
        "month": "Айҙан башлап (һәм элегерәк):",
        "sp-contributions-newbies-sub": "Яңы иҫәп яҙмалары өсөн",
        "sp-contributions-newbies-title": "Яңы теркәлгән ҡатнашыусылар башҡарған эш",
        "sp-contributions-blocklog": "блоклау яҙмалары",
+       "sp-contributions-suppresslog": "Ҡулланыусыларҙың юйылған өлөшө",
        "sp-contributions-deleted": "юйылған үҙгәртеүҙәр",
        "sp-contributions-uploads": "тейәүҙәр",
        "sp-contributions-logs": "журналдар",
        "sp-contributions-search": "Башҡарған эште эҙләү",
        "sp-contributions-username": "Ҡулланыусының IP-адресы йәки исеме:",
        "sp-contributions-toponly": "Һуңғы өлгөләрҙе генә күрһәтергә",
+       "sp-contributions-newonly": "Яңы бит яһаған төҙәтеүҙәрҙе генә күрһәтергә",
        "sp-contributions-submit": "Эҙлә",
        "whatlinkshere": "Бында һылтанмалар",
        "whatlinkshere-title": "«$1» битенә һылтанған биттәр",
        "whatlinkshere-hidelinks": "Һылтанмаларҙы $1",
        "whatlinkshere-hideimages": "файл һылтанмаларын $1",
        "whatlinkshere-filters": "Һайлау",
+       "whatlinkshere-submit": "Күсергә",
        "autoblockid": "Автобикләү #$1",
        "block": "Ҡатнашыусыны бикләү",
        "unblock": "Бикләнгән ҡатнашыусыны азат итеү",
-       "blockip": "Ҡатнашыусыны бикләү",
+       "blockip": "{{GENDER:$1|Ҡатнашыусыны}} бикләү",
        "blockip-legend": "Ҡатнашыусыны бикләү",
-       "blockiptext": "Билдәләнгән IP адрестан яҙыу мөмкинлеген бикләү өсөн, түбәндәге форманы ҡулланығыҙ.\nБыл бары тик вандаллыҡҡа юл ҡуймау өсөн генә һәм [[{{MediaWiki:Policy-url}}|ҡағиҙәләр]] буйынса ғына эшләнергә тейеш.\nТүбәндә бикләү сәбәбен күрһәтегеҙ (мәҫәлән, вандаллыҡ эҙҙәре булған бер нисә биттең цитатаһын килтерегеҙ).",
+       "blockiptext": "Билдәләнгән IP адрестан яҙыу мөмкинлеген бикләү өсөн, түбәндәге форманы ҡулланығыҙ.\nБыл бары тик вандаллыҡҡа юл ҡуймау өсөн генә һәм [[{{MediaWiki:Policy-url}}|ҡағиҙәләр]] буйынса ғына эшләнергә тейеш.\nТүбәндә бикләү сәбәбен күрһәтегеҙ (мәҫәлән, вандаллыҡ эҙҙәре булған бер нисә биттең цитатаһын килтерегеҙ).$1 $2",
        "ipaddressorusername": "Ҡатнашыусының IP-адресы йәки исеме:",
        "ipbexpiry": "Тамамлана:",
        "ipbreason": "Сәбәп:",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] бикләнде.<br />\nБиктәрҙе күреү өсөн [[Special:BlockList|бикләнгән IP адрестарҙы]] ҡарағыҙ.",
        "ipb-blockingself": "Һеҙ үҙегеҙҙе бикләргә теләйһегеҙ! Быны эшләүҙе раҫлайһығыҙмы?",
        "ipb-confirmhideuser": "\"Ҡулланыусыны йәшер\" ғәмәлдә саҡта ҡулланыусыны блокларға теләйһегеҙ. Уның исеме исемлектәрҙә һәм журналдарҙа күренмәйәсәк. Быны эшләргә теләүегеҙҙе раҫлайһығыҙмы?",
+       "ipb-confirmaction": "Быны башҡарырға теләһегеҙ түбәндә тамға ҡуйығыҙ «{{int:ipb-confirm}}».",
        "ipb-edit-dropdown": "Бикләү сәбәптәрен мөхәррирләргә",
        "ipb-unblock-addr": "$1 биген алырға",
        "ipb-unblock": "Ҡатнашыусының йәки IP адрестың биген алырға",
        "unblocked": "[[User:$1|$1]] бикләнгән",
        "unblocked-range": "$1 биге сиселде",
        "unblocked-id": "$1 биге алынған",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] блоктан азат ителде",
        "blocklist": "Тыйылған ҡатнашыусылар",
        "ipblocklist": "Тыйылған ҡатнашыусылар",
        "ipblocklist-legend": "Бикләнгән ҡатнашыусыны эҙләү",
        "block-log-flags-hiddenname": "ҡатнашыусы исеме йәшерелгән",
        "range_block_disabled": "Хакимдәргә бикләү арауыҡтарын булдырыу тыйылған.",
        "ipb_expiry_invalid": "Тамамланыу ваҡыты дөрөҫ түгел.",
+       "ipb_expiry_old": "Һаҡлауҙың тамамланыу ваҡыты үткән көнгә ҡуйылған.",
        "ipb_expiry_temp": "Бикләү ваҡытында ҡатнашыусы исеме йәшерелһә, бикләү ваҡыты сикһеҙ булырға тейеш.",
-       "ipb_hide_invalid": "Иҫәп яҙмаһын йәшереү мөмкин түгел, ул бигерәк күп үҙгәртеүҙәр яһаған, булырға тейеш.",
+       "ipb_hide_invalid": "Иҫәп яҙмаһын йәшереү мөмкин түгел,  {{PLURAL:$1|бер|$1 бер нисә}} төҙәтеү эшләнгән.",
        "ipb_already_blocked": "\"$1\" бикләнгән инде.",
        "ipb-needreblock": "$1 бикләнгән инде.\nБикләү көйләүҙәрен үҙгәртергә теләйһегеҙме?",
        "ipb-otherblocks-header": "Башҡа {{PLURAL:$1|1=бикләү|бикләүҙәр}}",
        "move-page": "$1 — исемен үҙгәртеү",
        "move-page-legend": "Биттең исемен үҙгәртеү",
        "movepagetext": "Аҫтағы ҡалыпты ҡулланып, биттең исемен үҙгәртә һәм уның үҙгәртеүҙәр журналын яңы урынға күсерә алаһығыҙ.\nБиттең элекке исеме яңы биткә йүнәлтеү булып ҡаласаҡ.\nҺеҙ элекке исемгә булған йүнәлтеүҙәрҙе автоматик рәүештә яңы исемгә күсерә алаһығыҙ.\nӘгәр быны эшләмәһәгеҙ, [[Special:DoubleRedirects|икеле]] һәм [[Special:BrokenRedirects|өҙөлгән йүнәлтеүҙәр]] барлығын тикшерегеҙ.\nҺылтанмаларҙың кәрәкле урынға күрһәтеүен дауам итеүе өсөн һеҙ яуаплы.\n\nИғтибар итегеҙ: әгәр яңы һайланған исемдәге тағы бер бит бар икән, биттең исеме '''үҙгәртелмәйәсәк'''; ул бит йүнәлтеүсе  йәки буш булһа һәм төҙәтеүҙәр тарихына эйә булмаһа ғына,  был мөмкин.\nТимәк, биттең исемен яңылыш үҙгәртһәгеҙ, битте элекке исеменә кире ҡайтара алаһығыҙ, ләкин булған битте юя алмайһығыҙ.\n\n'''Иҫкәртеү!'''\n\"Популяр\" биттәрҙең исемен үҙгәртеү күләмле һәм көтөлмәгән һөҙөмтәләргә килтерергә мөмкин.\nДауам итерҙән алда, ихтимал булған һөҙөмтәләрҙе аңлауығыҙға ышанығыҙ.",
-       "movepagetext-noredirectfixer": "Аҫтағы форманы ҡулланыу биттең исемен үҙгәртә һәм уның үҙгәртеүҙәр яҙмаһын яңы урынға күсерә.\nБиттең элекке исеме яңы биткә йүнәлтеү булып ҡаласаҡ.\nҺеҙ элекке исемгә булған йүнәлтеүҙәрҙе автоматик рәүештә яңы исемгә күсерә алаһығыз.\nӘгәр быны эшләмәһәгеҙ, [[Special:DoubleRedirects|икеле]] һәм [[Special:BrokenRedirects|өҙөлгән йүнәлтеүҙәрҙе]] тикшерегеҙ.\nҺылтанмаларҙың кәрәкле урынға күрһәтеүҙәренең дауам итеүе өсөн һеҙ яуаплы.\n\nИғтибар итегеҙ, әгәр яңы исемле бит бар икән, биттең исеме '''үҙгәртелмәйәсәк'''; элекке бит йүнәлтеү, буш һәм үҙгәртеү тарихына эйә булмаған осраҡтарҙан башҡа.\nБыл шуны аңлата: бит исемен яңылыш үҙгәртһәгеҙ, битте кире ҡайтара алаһығыҙ, ләкин булған битте юя алмайһығыҙ.\n\n'''Иғтибар!'''\nПопуляр биттәрҙең исемен үҙгәртеү көтмәгән һөҙөмтәләргә килтерүе мөмкин.\nДауам итерҙән алда, бөтә буласаҡ һөҙөмтәләрҙе аңлауығыҙҙы уйлағыҙ.",
+       "movepagetext-noredirectfixer": "Аҫтағы форманы ҡулланыу биттең исемен үҙгәртә һәм уның үҙгәртеүҙәр яҙмаһын яңы урынға күсерә.\nБиттең элекке исеме яңы биткә йүнәлтеү булып ҡаласаҡ.\nҺеҙ элекке исемгә булған йүнәлтеүҙәрҙе автоматик рәүештә яңы исемгә күсерә алаһығыз.\nӘгәр быны эшләмәһәгеҙ, [[Special:DoubleRedirects|икеле]] һәм [[Special:BrokenRedirects|өҙөлгән йүнәлтеүҙәрҙе]] тикшерегеҙ.\nҺылтанмаларҙың кәрәкле урынға күрһәтеүҙәренең дауам итеүе өсөн һеҙ яуаплы.\n\nИғтибар итегеҙ, әгәр яңы исемле бит бар икән, биттең исеме '''үҙгәртелмәйәсәк'''; элекке бит йүнәлтеү, буш һәм үҙгәртеү тарихына эйә булмаған осраҡтарҙан башҡа.\nБыл шуны аңлата: бит исемен яңылыш үҙгәртһәгеҙ, битте кире ҡайтара алаһығыҙ, ләкин булған битте юя алмайһығыҙ.\n\n<strong>Иғтибар:</strong>\nПопуляр биттәрҙең исемен үҙгәртеү көтмәгән һөҙөмтәләргә килтерүе мөмкин.\nДауам итерҙән алда, бөтә буласаҡ һөҙөмтәләрҙе аңлауығыҙҙы уйлағыҙ.",
        "movepagetalktext": "Фекер алышыу битенең исеме лә үҙгәртеләсәк, '''киләһе осраҡтарҙан тыш''':\n*Бындай исемле фекер алышыу бите бар, йәки\n*Аҫтағы юлды билдәләмәгәнһегеҙ.\n\nБындай осраҡтарҙа, кәрәкле булһа, биттәрҙе үҙегеҙҙең күсереүегеҙ йәки исемен үҙгәртеүегеҙ кәрәк буласаҡ.",
        "moveuserpage-warning": "'''Иғтибар:''' Һеҙ ҡатнашыусы битенең исемен үҙгәртергә йыйынаһығыҙ. Зинһар, биттең генә исеме үҙгәрәсәк, ҡатнашыусы исеме ''үҙгәрмәйәсәк'', икәнен күҙ үңында тотоғоҙ.",
+       "movecategorypage-warning": "<strong>Иҫкәрмә:</strong> Һеҙ категория битенең атамаһын үҙгәртергә теләйһегеҙ.Зинһар, ошо бит кенә үҙгәртелеүенә иғтибар итегеҙ, ә иҫке категориялағы башҡа биттәр<em>не</em> яңынан категорияланасаҡ.",
        "movenologintext": "Биттең исемен үҙгәртеү өсөн, һеҙ [[Special:UserLogin|танылырға]] тейешһегеҙ.",
        "movenotallowed": "Һеҙҙең бит исемен үҙгәртергә хоҡуғығыҙ юҡ",
        "movenotallowedfile": "Һеҙҙең файл исемен үҙгәртергә хоҡуғығыҙ юҡ",
        "cant-move-user-page": "Һеҙҙең ҡатнашыусы битенең исемен үҙгәртергә хоҡуғығыҙ юҡ",
        "cant-move-to-user-page": "Һеҙҙең битте ҡатнашыусы бите итеп үҙгәртергә хоҡуғығыҙ юҡ (ҡатнашыусы биттәренән тыш).",
-       "newtitle": "Яңы исем",
+       "cant-move-category-page": "Һеҙҙең категория исемен үҙгәртергә хоҡуғығыҙ юҡ",
+       "cant-move-to-category-page": "Һеҙҙең битте категория бите тип төҙәтергә хоҡуғығыҙ юҡ.",
+       "newtitle": "Яңы атама",
        "move-watch": "Был битте күҙәтеү исемлегенә өҫтәргә",
        "movepagebtn": "Биттең исемен үҙгәртергә",
        "pagemovedsub": "Бит исеме үҙгәртелде",
        "movepage-max-pages": "$1 {{PLURAL:$1|биттең}} исеме үҙгәртелде, бынан күберәк биттең исемен автоматик рәүештә үҙгәртеү мөмкин түгел.",
        "movelogpage": "Исем үҙгәртеү яҙмалары",
        "movelogpagetext": "Түбәндә — исемдәре үҙгәртелгән биттәр.",
-       "movesubpage": "{{PLURAL:$1|кергән бит}}",
-       "movesubpagetext": "Был биткә түбәндә килтерелгән $1 {{PLURAL:$1|бит}} кергән.",
+       "movesubpage": "{{PLURAL:$1|ярҙамсы бит}}",
+       "movesubpagetext": "Был биттә $1 {{PLURAL:$1|ярҙамсы бит}}.",
        "movenosubpage": "Был биткә бер бит тә кермәгән.",
        "movereason": "Сәбәп:",
        "revertmove": "кирегә",
-       "delete_and_move_text": "==Юйыу талап ителә==\n[[:$1|«$1»]] исемле бит бар инде. Исем үҙгәртеүҙе дауам итеү өсөн, уны юйырға теләйһегеҙме?",
+       "delete_and_move_text": "[[:$1|«$1»]] исемле бит бар инде. Исем үҙгәртеүҙе дауам итеү өсөн, уны юйырға теләйһегеҙме?",
        "delete_and_move_confirm": "Эйе, битте юйырға",
        "delete_and_move_reason": "Исем үҙгәртеүҙе дауам итеү өсөн юйылды «[[$1]]»",
        "selfmove": "Хәҙерге һәм яңы исемдәр тап килә. Исем үҙгәртеү мөмкин түгел.",
        "export-download": "Файлды һаҡларға",
        "export-templates": "Ҡалыптарҙы индерергә",
        "export-pagelinks": "Бәйле биттәрҙе ошо тәрәнлек менән индерергә:",
+       "export-manual": "Битте ҡулдан өҫтәргә",
        "allmessages": "Система хәбәрҙәре",
        "allmessagesname": "Хәбәр",
        "allmessagesdefault": "Ғәҙәттәге яҙма",
        "thumbnail-temp-create": "Эскиздың ваҡытлыса файлын яһап булмай",
        "thumbnail-dest-create": "Маҡсат урында эскизды һаҡлап булмай",
        "thumbnail_invalid_params": "Шартлы рәсем шарттары дөрөҫ түгел",
+       "thumbnail_toobigimagearea": "Күләме $1 ҙур булған файл",
        "thumbnail_dest_directory": "Кәрәкле директорияны булдырып булмай",
        "thumbnail_image-type": "Был рәсем төрө ҡулланылмай",
        "thumbnail_gd-library": "GD йыйынтығының төҙөлөшө тулы түгел, $1 функцияһы юҡ",
        "thumbnail_image-missing": "$1 файлы юҡ, булырға тейеш",
+       "thumbnail_image-failure-limit": "Был эскизды булдырыу өсөн иң күп маташыу $1 булды. Һуңынан ғабатлап ҡарағыҙ.",
        "import": "Биттәрҙе тейәү",
-       "importinterwiki": "Ð\92ики Ð¿Ñ\80оекÑ\82Ñ\82аÑ\80-аÑ\80а Ð¸Ð½Ð´ереү",
+       "importinterwiki": "баÑ\88ҡа Ð²Ð¸ÐºÐ¸-пÑ\80оекÑ\82Ñ\82ан Ð±Ð¸Ñ\82Ñ\82Ó\99Ñ\80Ò\99е ÐºÒ¯Ñ\81ереү",
        "import-interwiki-text": "Вики проектты һәм тейәлә торған биттең исемен күрһәтегеҙ.\nҮҙгәртеү ваҡыттары һәм автор исемдәре һаҡланасаҡ.\nБөтә вики проекттары-ара тейәүҙәр [[Special:Log/import|тейәү яҙмалары журналында]] теркәлә.",
+       "import-interwiki-sourcewiki": "Сығанаҡ вики-проект:",
        "import-interwiki-sourcepage": "Сығанаҡ бит:",
        "import-interwiki-history": "Был биттең бөтә үҙгәртеү тарихын яҙҙырырға",
        "import-interwiki-templates": "Бөтә ҡалыптарҙы индерергә",
        "import-interwiki-submit": "Тейәргә",
+       "import-mapping-default": "Килешеү буйынса урынлашҡан ергә импортлау",
+       "import-mapping-namespace": "Исемдәр арауығына импортлау",
+       "import-mapping-subpage": "Ярҙамсы бит итеп киләһе биткә импортлау",
        "import-upload-filename": "Файл исеме:",
        "import-comment": "Иҫкәрмә:",
        "importtext": "Зинһар, файлды сығанаҡ викинан [[Special:Export|махсус ҡорал]] ярҙамында сығарығыҙ. Артабан уны компьютерығыҙға һаҡлағыҙ һәм бында тейәгеҙ.",
        "importstart": "Биттәрҙе тейәү...",
        "import-revision-count": "$1 {{PLURAL:$1|1=өлгө|өлгө}}",
        "importnopages": "Тейәү өсөн биттәр юҡ.",
-       "imported-log-entries": "Журналдан $1 {{PLURAL:$1|яҙма}} тейәлде.",
+       "imported-log-entries": "Журналдың {{PLURAL:$1| $1 яҙмаһы импортланды}}",
        "importfailed": "Тейәү хатаһы: <nowiki>$1</nowiki>",
        "importunknownsource": "Сығанаҡ биттең төрө билдәһеҙ",
        "importcantopen": "Тейәлә торған битте асып булмай",
        "import-nonewrevisions": "Бөтә өлгөләр бығаса тейәлгән булған.",
        "xml-error-string": "$2 юлда, $3 урында ($4 байт) $1: $5",
        "import-upload": "XML-мәғлүмәт тейәргә",
-       "import-token-mismatch": "Сессия мәғлүмәттәре юғалған.\nЗинһар, тағы ҡабатлап ҡарағыҙ.",
+       "import-token-mismatch": "Сессия мәғлүмәттәре юғалған.\nЗинһар, тағы ҡабатлап ҡарағыҙ. [[Special:UserLogout|системанан сығырға]]",
        "import-invalid-interwiki": "Күрһәтелгән вики проекттан тейәү мөмкин түгел.",
        "import-error-edit": "«$1» битен импортлап булманы, сөнки һеҙгә ул битте мөхәррирләү тыйылған.",
        "import-error-create": "«$1» битен импортлап булманы, сөнки һеҙгә ул битте яһау тыйылған.",
        "import-error-special": " «$1» бите импортҡа сығарылманы, сөнки ул биттәр яһау мөмкин булмаған исемдәр арауығына ҡарай.",
        "import-error-invalid": "\"$1\" бите яраҡһыҙ исеме өсөн импортланманы.",
        "import-error-unserialize": "«$1» битенең $2 өлгөһөн структуралаштырып (десериаялап) булмай. $4 форматында серияланған $3 эстәлегенең моделеның был өлгөлә ҡулланылыуы тураһында хәбәр алынды.",
+       "import-error-bad-location": "$3 моделе эстәлегендәге $2 төҙәтеүен $1 был викила һаҡлап булмай.",
        "import-options-wrong": "Хаталы {{PLURAL:$2|1=опция|опциялар}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "Төп биттең күрһәтелгән исеме яңылыш.",
        "import-rootpage-nosubpage": "Төп биттең \"$1\" исемдәр арауығы эске биттәргә рөхсәт бирмәй.",
        "importlogpage": "Тейәү яҙмалары журналы",
        "importlogpagetext": "Хакимдәр тарафынан башҡа вики проекттарҙан биттәрҙе һәм уларҙың үҙгәртеүҙәр тарихын тейәү.",
-       "import-logentry-upload-detail": "$1 {{PLURAL:$1|1=өлгө|өлгө}}",
-       "import-logentry-interwiki-detail": "$2 өлгөнән $1 {{PLURAL:$1|1=өлгө|өлгө}}",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|версия күсерелгән|версиялар күсерелгән}}",
+       "import-logentry-interwiki-detail": "$2-нан $1 {{PLURAL:$1|өлгө импортланған}}",
        "javascripttest": "\nJavaScript тикшереү",
        "javascripttest-pagetext-noframework": "Был бит JavaScript тикшеренеүҙәре үткәреү өсөн  резервланған.",
        "javascripttest-pagetext-unknownframework": "Билдәһеҙ тикшеренеүҙәр мөхитнамәһе \"$1\".",
+       "javascripttest-pagetext-unknownaction": "$1 ғәмәле билдәһеҙ",
        "javascripttest-pagetext-frameworks": "Зинһар өсөн киләһе тикшеренеүҙәр мөхитнамәһенең береһен һайлап алығыҙ: $1",
        "javascripttest-pagetext-skins": "Һынауҙы башлау өсөн тышса һыйлағыҙ.",
        "javascripttest-qunit-intro": "mediawiki.org адресы буйынса ҡарағыҙ [$1 тест үткәреү документацияһы].",
-       "tooltip-pt-userpage": "Ҡулланыусы битегеҙ",
+       "tooltip-pt-userpage": "{{GENDER:|Һеҙҙең}} ҡатнашыусы бите",
        "tooltip-pt-anonuserpage": "IP адресығыҙ өсөн ҡатнашыусы бите",
-       "tooltip-pt-mytalk": "Фекерләшеү битегеҙ",
+       "tooltip-pt-mytalk": "{{GENDER:|Һеҙҙең}} фекерләшеү битегеҙ",
        "tooltip-pt-anontalk": "IP адресығыҙ өсөн фекер алышыу бите",
-       "tooltip-pt-preferences": "Көйләүҙәрегеҙ",
+       "tooltip-pt-preferences": "{{GENDER:|Һеҙҙең}} көйләүҙәрегеҙ",
        "tooltip-pt-watchlist": "Һеҙ күҙәткән биттәр исемлеге",
-       "tooltip-pt-mycontris": "Кереткән өлөшөгөҙ",
+       "tooltip-pt-mycontris": "{{GENDER:|Һеҙҙең}} төҙәтеүҙәр исемлеге",
+       "tooltip-pt-anoncontribs": "Был IP-адрестан яһалған төҙәтеүҙәр",
        "tooltip-pt-login": "Бында теркәлеү үтергә була, әммә был эш мәжбүри түгел.",
        "tooltip-pt-logout": "Сығырға",
        "tooltip-pt-createaccount": "Мотлаҡ булмаһа ла, Һеҙгә иҫәп яҙмаһы төҙөргө һәм системала танылырға тәҡдим итәбеҙ.",
        "tooltip-feed-rss": "Был бит өсөн RSS-таҫма",
        "tooltip-feed-atom": "Был бит өсөн Atom-таҫма",
        "tooltip-t-contributions": "{{GENDER:$1|Был ҡулланыусының}} кереткән өлөшөн ҡарарға",
-       "tooltip-t-emailuser": "Был ҡулланыусыға хат ебәрергә",
+       "tooltip-t-emailuser": "{{GENDER:$1|был ҡулланыусыға}} хат ебәреү",
+       "tooltip-t-info": "Был бит тураһында ентекләберәк",
        "tooltip-t-upload": "Рәсем йәки тауыш эстәлекле файлдарҙы тейәргә",
        "tooltip-t-specialpages": "Барлыҡ махсус биттәр исемлеге",
        "tooltip-t-print": "Был биттең ҡағыҙға баҫыу өлгөһө",
        "tooltip-undo": "\"Кире ал\" төҙәтеүҙе кире ала һәм төҙәтеү формаһын \"алдан байҡау\"ҙа күрһәтә. Һәм кире алыуҙың сәбәбен белдерергә була.",
        "tooltip-preferences-save": "Көйләүҙәрҙе һаҡларға",
        "tooltip-summary": "Ҡыҫҡаса тасуирлама керетегеҙ",
-       "anonymous": "{{SITENAME}} проектының танылмаған {{PLURAL:$1|1=ҡатнашыусыһы|ҡатнашыусылары}}",
+       "anonymous": "{{PLURAL:$1|1=Аноним ҡатнашыусы|Аноним ҡатнашыусылар}} {{grammar:genitive|{{SITENAME}}}}",
        "siteuser": "{{SITENAME}} проектының ҡатнашыусыһы $1",
        "anonuser": "{{SITENAME}} проектының танылмаған ҡатнашыусыһы $1",
        "lastmodifiedatby": "Был бит һуңғы тапҡыр $1 $2 $3 тарафынан үҙгәртелгән.",
        "othercontribs": "Мөхәррирләүҙә ҡатнаштылар: $1.",
        "others": "башҡалар",
-       "siteusers": "{{SITENAME}} {{PLURAL:$2|1=ҡатнашыусы|ҡатнашыусылары}} $1",
-       "anonusers": "{{SITENAME}} проектының танылмаған {{PLURAL:$2|1=ҡатнашыусыһы|ҡатнашыусылары}} $1",
+       "siteusers": "{{PLURAL:$2|1={{GENDER:$1|ҡатнашыусы}}|ҡатнашыусылар}} {{grammar:genitive|{{SITENAME}}}} $1",
+       "anonusers": "{{PLURAL:$2|1=аноним ҡатнашыусы|аноним ҡатнашыусылар}} {{grammar:genitive|{{SITENAME}}}} $1",
        "creditspage": "Рәхмәт белдереү",
        "nocredits": "Был мәҡәләне мөхәррирләүҙә ҡатнашыусылар исемлеге юҡ.",
        "spamprotectiontitle": "Спамдан һаҡлау",
        "pageinfo-length": "Бит оҙонлоғо (байттарҙа)",
        "pageinfo-article-id": "Бит идентификаторы",
        "pageinfo-language": "Бит эстәлегенең теле",
+       "pageinfo-content-model": "Бит эстәлегенең моделе",
        "pageinfo-robot-policy": "Эҙләү роботтары тарафынан индексацияланыу",
        "pageinfo-robot-index": "Рөхсәт ителгән",
        "pageinfo-robot-noindex": "Рөхсәт ителмәй",
        "pageinfo-watchers": "Битте күҙәтеүселәр һаны",
-       "pageinfo-few-watchers": "Күп тигәндә $1 {{PLURAL:$1|күҙәтеүсе}}",
+       "pageinfo-visiting-watchers": "Битте күҙәтеүсе һәм һуңғы үҙгәртеүҙәрҙе күреүсе ҡатнашыусылар һаны",
+       "pageinfo-few-watchers": "$1 әҙерәк {{PLURAL:$1|күҙәтеүсе}}",
+       "pageinfo-few-visiting-watchers": "Битте күҙәтеүсе һәм һуңғы үҙгәртеүҙәрҙе күреүсе ҡатнашыусылар булыуы ла, булмауы ла ихтимал",
        "pageinfo-redirects-name": "Был биткә йүнәлтеүҙәр һаны",
        "pageinfo-subpages-name": "Был биттең эске биттәре",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|йүнәлтеү}}; $3 {{PLURAL:$3|ябай}})",
        "pageinfo-authors": "Төрлө авторҙар һаны",
        "pageinfo-recent-edits": "Һуңғы ваҡыттағы төҙәтеүҙәр ($1 эсендә)",
        "pageinfo-recent-authors": "Төрлө авторҙарҙың һуңғы һаны",
-       "pageinfo-magic-words": "Тылсымлы {{PLURAL:$1|1=һүҙ|һүҙҙәр}} ($1)",
-       "pageinfo-hidden-categories": "Йәшерен {{PLURAL:$1|1=категория|категориялар}} ($1)",
-       "pageinfo-templates": "Ҡулланылған {{PLURAL:$1|1=ҡалып|ҡалыптар}} ($1)",
+       "pageinfo-magic-words": "{{PLURAL:$1|1=Тылсымлы һүҙ|Тылсымлы һүҙҙәр}} ($1)",
+       "pageinfo-hidden-categories": "{{PLURAL:$1|1=Йәшерен категория|Йәшерен категориялар}} ($1)",
+       "pageinfo-templates": "{{PLURAL:$1|1=Ҡалып|Ҡалыптар}} ($1)",
        "pageinfo-transclusions": "{{PLURAL:$1|Индерелгән биттәр}} ($1)",
        "pageinfo-toolboxlink": "Бит мәғлүмәттәре",
        "pageinfo-redirectsto": "Йүнәлтеү",
        "pageinfo-protect-cascading-yes": "Эйе",
        "pageinfo-protect-cascading-from": "Бынан башлап һикәлтәле һаҡлау",
        "pageinfo-category-info": "Категория тураһында мәғлүмәт",
+       "pageinfo-category-total": "Ағзаларҙың дөйөм һаны",
        "pageinfo-category-pages": "Биттәр һаны",
        "pageinfo-category-subcats": "Категория бүлемдәре һаны",
        "pageinfo-category-files": "Файлдар һаны",
        "markaspatrolleddiff": "Тикшерелгән, тип билдәләргә",
        "markaspatrolledtext": "Бил битте тикшерелгән, тип билдәләргә",
+       "markaspatrolledtext-file": "Был өлөгөнө патрулләнгән тип ҡуйырға",
        "markedaspatrolled": "Тикшерелгән тип билдәнгән",
        "markedaspatrolledtext": "[[:$1]] битенең һайланған өлгөһө тикшерелгән тип билдәләнгән.",
        "rcpatroldisabled": "Һуңғы үҙгәртеүҙәрҙе тикшереү рөхсәт ителмәй",
        "patrol-log-page": "Тикшереү яҙмалары журналы",
        "patrol-log-header": "Был — тикшерелгән өлгөләр яҙмалары журналы.",
        "log-show-hide-patrol": "тикшереү яҙмалары журналын $1",
+       "log-show-hide-tag": "$1 билдәләр журналы",
        "deletedrevision": "Иҫке $1 өлгөһө юйылды",
        "filedeleteerror-short": "Файлды юйыу хатаһы: $1",
        "filedeleteerror-long": "Файлды юйыу ваҡытында хаталар килеп сыҡты:\n\n$1",
        "mediawarning": "'''Иғтибар''': был төр файлда зыян килтереүсе программа коды булыуы мөмкин.\nУны башҡарған саҡта һеҙҙең системағыҙға хәүеф янауы мөмкин.",
        "imagemaxsize": "Рәсем дәүмәле өсөн сик: <br />''(файл тасуирламаһы биттәре өсөн)''",
        "thumbsize": "Шартлы рәсем дәүмәле:",
-       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|бит}}",
+       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3 бит}}",
        "file-info": "файлдың дәүмәле: $1, MIME төрө: $2",
        "file-info-size": "$1 × $2 нөктә, файлдың дәүмәле: $3, MIME төрө: $4",
-       "file-info-size-pages": "$1 × $2 пиксель, файл күләме: $3, MIME төр: $4, $5 {{PLURAL:$5|бит}}",
+       "file-info-size-pages": "$1 × $2 пиксель, файл күләме: $3, MIME-тибы: $4, $5 {{PLURAL:$5|бит|биттәр}}",
        "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-preview-differ": " $3-превью размеры  $2-файлы өсөн: $1.",
        "show-big-image-other": "{{PLURAL:$2|1=Башҡа сиселеш|Башҡа сиселештәр}}: $1.",
        "show-big-image-size": "$1 × $2 пиксель",
        "file-info-gif-looped": "әйләнешле",
-       "file-info-gif-frames": "$1 {{PLURAL:$1|фрейм}}",
+       "file-info-gif-frames": "$1 {{PLURAL:$1|фрейм|фреймдар}}",
        "file-info-png-looped": "әйләнешле",
        "file-info-png-repeat": "$1 {{PLURAL:$1|тапҡыр}} уйнала",
-       "file-info-png-frames": "$1 {{PLURAL:$1|фрейм}}",
+       "file-info-png-frames": "$1 {{PLURAL:$1|кадр}}",
        "file-no-thumb-animation": "\n'''Иғтибар: Техник сикләүҙәр арҡаһында, был файлдың бәләкәй рәсемдәре анимацияланмаясаҡ.'''",
        "file-no-thumb-animation-gif": "'''Иғтибар: Техник сикләүҙәр арҡаһында, бының һымаҡ юғары асыҡлыҡтағы GIF рәсемдәрҙең бәләкәй рәсемдәре анимацияланмаясаҡ.'''",
        "newimages": "Яңы файлдар йыйылмаһы",
        "newimages-summary": "Был махсус бит һуңғы тейәлгән файлдарҙы күрһәтә.",
        "newimages-legend": "Һайлау",
        "newimages-label": "Файл исеме (йәки өлөшө):",
+       "newimages-showbots": "Роботтан тейегәнде күрһәтергә",
+       "newimages-hidepatrolled": "Патрулләнгән күсереүҙәрҙе йәшерергә",
        "noimages": "Рәсемдәр юҡ.",
        "ilsubmit": "Эҙләү",
        "bydate": "булдырыу көнө буйынса",
        "sp-newimages-showfrom": "$1 $2 ваҡытынан башлап яңы файлдарҙы күрһәтергә",
-       "seconds": "{{PLURAL:$1|1=$1 секунд|$1 секунд}}",
-       "minutes": "{{PLURAL:$1|1=$1 минут|$1 минут}}",
-       "hours": "{{PLURAL:$1|1=$1 сәғәт|$1 сәғәт}}",
-       "days": "{{PLURAL:$1|1=$1 көн|$1 көн}}",
+       "seconds": "{{PLURAL:$1|$1 секунд|$1 секундтар|$1 секунд}}",
+       "minutes": "{{PLURAL:$1|$1 минут}}",
+       "hours": "{{PLURAL:$1|$1 сәғәт}}",
+       "days": "{{PLURAL:$1|1=$1 көн}}",
        "weeks": "{{PLURAL:$1|$1 аҙна}}",
        "months": "{{PLURAL:$1|$1 ай}}",
        "years": "{{PLURAL:$1|$1 йыл}}",
        "ago": "$1 элек",
        "just-now": "яңы ғына",
-       "hours-ago": "$1 {{PLURAL:$1|сәғәт}} элек",
-       "minutes-ago": "$1 {{PLURAL:$1|минут}} элек",
-       "seconds-ago": "$1 {{PLURAL:$1|секунд}} элек",
+       "hours-ago": "$1 {{PLURAL:$1сәғәт}} элек",
+       "minutes-ago": "$1 {{PLURAL:$1|минут}} алда",
+       "seconds-ago": "$1 {{PLURAL:$1|секунд}} алда",
        "monday-at": "дүшәмбе $1",
        "tuesday-at": "шишәмбе $1",
        "wednesday-at": "шаршамбы $1",
        "exif-compression-4": "CCITT Group 4, факслы кодлау",
        "exif-copyrighted-true": "Авторлыҡ хоҡуҡтары менән һаҡлана",
        "exif-copyrighted-false": "Авторлыҡ-хоҡуҡи статус индерелмәгән",
+       "exif-photometricinterpretation-1": "Ҡара һәм аҡ (ҡара — 0)",
        "exif-unknowndate": "Билдәһеҙ көн",
        "exif-orientation-1": "Ғәҙәти",
        "exif-orientation-2": "X күсәре буйынса сағылдырылған",
        "confirm-watch-top": "Был битте күҙәтеү исемлегенә өҫтәргәме?",
        "confirm-unwatch-button": "Тамам",
        "confirm-unwatch-top": "Был битте күҙәтеү исемлегенән сығарырғамы?",
+       "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← алдағы бит",
        "imgmultipagenext": "киләһе бит →",
        "imgmultigo": "Күсеү!",
        "imgmultigoto": "$1 биткә күсеү",
+       "img-lang-default": "(килешеү буйынса тел)",
+       "img-lang-info": "Был рәсемде $1 $2 телдәрендә күрһәтергә",
+       "img-lang-go": "Күсергә",
        "ascending_abbrev": "үҫеүгә табан",
        "descending_abbrev": "кәмеүгә табан",
        "table_pager_next": "Киләһе бит",
        "autosumm-replace": "Биттең эстәлеге \"$1\" менән алыштырылған",
        "autoredircomment": "[[$1]] битенә йүнәлтелгән",
        "autosumm-new": "\"$1\" исемле яңы бит булдырылған",
+       "autosumm-newblank": "Буш бит булдырылған",
        "lag-warn-normal": "$1 {{PLURAL:$1|секундтан}} кәмерәк ваҡыт элек эшләнгән үҙгәртеүҙәр был исемлектә күрһәтелә алмай.",
        "lag-warn-high": "Мәғлүмәттәр базаларын синхронлаштырыуҙың күпкә артта ҡалыуы сәбәпле, $1 {{PLURAL:$1|секундтан}} кәмерәк ваҡыт элек эшләнгән үҙгәртеүҙәр был исемлектә күрһәтелә алмай.",
        "watchlistedit-normal-title": "Күҙәтеү исемлеген мөхәррирләү",
        "watchlistedit-raw-done": "Һеҙҙең күҙәтеү исемлеге яңырҙы.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1=1 яҙма|$1 яҙма}} өҫтәлде:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1=1 яҙма|$1 яҙма}} юйылды:",
+       "watchlistedit-clear-title": "Күҙәтеүҙәр исемлеген таҙартыу",
+       "watchlistedit-clear-legend": "Күҙәтеүҙәр исемлеген таҙартыу",
+       "watchlistedit-clear-explain": "Күҙәтеү битендәге бөтә яҙмалар юйыласаҡ",
+       "watchlistedit-clear-titles": "Башлыҡ:",
+       "watchlistedit-clear-submit": "Күһәтеү исемлеген юйырға (кире ҡайтарып бумаясаҡ)",
+       "watchlistedit-clear-done": "Күҙәтеү исемлеге таҙартылған",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|юйылды}} $1 {{PLURAL:$1|яҙма}}:",
+       "watchlistedit-too-many": "Бында күрһәтеү өсөн биттәр бик күп",
+       "watchlisttools-clear": "Күҙәтеүҙәр исемлеген таҙартыу",
        "watchlisttools-view": "Исемлектәге биттәрҙәге үҙгәрештәр",
        "watchlisttools-edit": "Күҙәтеү исемлеген ҡарарға/төҙәтергә",
        "watchlisttools-raw": "Текст һымаҡ үҙгәртеү",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|әңгәмә]])",
+       "timezone-local": "Локаль",
        "duplicate-defaultsort": "'''Иҫкәртеү:''' \"$2\" ғәҙәттәге тәпртипкә килтереү асҡысы элекке \"$1\" ғәҙәттәге тәртипкә килтереү асҡысын үҙгәртә.",
+       "duplicate-displaytitle": "<strong>Иғтибар:</strong> Күрһәтелгән «$2» алдағы «$1» исемде ҡабатлай.",
+       "invalid-indicator-name": "<strong>Хата:</strong> Биттең торошон күрһәтеүсе атрибут индикаторы <code>name</code> буш була алмай.",
        "version": "MediaWiki өлгөһө",
        "version-extensions": "Ҡуйылған киңәйтеүҙәр",
        "version-skins": "Күренештәр",
        "version-hook-name": "Эләктереп алыусы исеме",
        "version-hook-subscribedby": "Яҙҙырылған",
        "version-version": "($1)",
-       "version-license": "Рөхсәтнамә",
+       "version-no-ext-name": "[исеме юҡ]",
+       "version-license": "MediaWiki лицензияһы",
+       "version-ext-license": "Лицензия",
+       "version-ext-colheader-name": "Киңәйтеү",
+       "version-skin-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]''' нигеҙендә эшләй, copyright © 2001-$1 $2.",
        "version-poweredby-others": "башҡалар",
        "version-poweredby-translators": "translatewiki.net тәржемәселәре",
        "version-entrypoints": "Инеш өсөн URL адрестар",
        "version-entrypoints-header-entrypoint": "Инеш урыны",
        "version-entrypoints-header-url": "URL",
+       "version-libraries": "Урынлаштырылған китапханалар",
+       "version-libraries-library": "Китапхана",
+       "version-libraries-version": "Версия",
+       "version-libraries-license": "Лицензия",
+       "version-libraries-description": "Тасуирлама",
+       "version-libraries-authors": "Авторҙар",
        "redirect": "Файлдан, файҙаланыусынан йә версияның тиңләштереүсеһенән артабан йүнәлтеү",
        "redirect-legend": "Файлға йәки биткә йүнәлтеү",
        "redirect-summary": "Был махсус бит файлға (файлдың исеменән), биткә (версияның тиңләштереүсеһенән) йәки ҡатнашыусының битенә (ҡатнашыусының һанлы тиңләштереүсеһенән) йүнәлтә.",
        "redirect-lookup": "Эҙләү",
        "redirect-value": "Мәғәнәһе:",
        "redirect-user": "Ҡатнашыусының тиңләштереүсеһе",
+       "redirect-page": "Бит идентификаторы",
        "redirect-revision": "Биттең версияһы",
        "redirect-file": "Файлдың исеме",
+       "redirect-logid": "ID журнал",
        "redirect-not-exists": "Мәғәнәһе табылманы",
        "fileduplicatesearch": "Бер иш файлдарҙы эҙләү",
        "fileduplicatesearch-summary": "Бер иш файлдарҙы хэш-кодтары буйынса эҙләү.",
        "fileduplicatesearch-result-n": "\"$1\" файлы менән $2 {{PLURAL:$2|файл}} тап килә.",
        "fileduplicatesearch-noresults": "\"$1\" исемле файл табылманы",
        "specialpages": "Махсус биттәр",
+       "specialpages-note-top": "Легенда",
        "specialpages-note": "* Ябай махсус биттәр.\n* <span class=\"mw-specialpagerestricted\">Сикле махсус биттәр.</span>\n* <span class=\"mw-specialpagecached\">Кешланған махсус биттәр (иҫкергән булыуы мөмкин).</span>",
        "specialpages-group-maintenance": "Техник хеҙмәтләндереү хисапламалары",
        "specialpages-group-other": "Башҡа махсус биттәр",
        "tags-tag": "Билдә исеме",
        "tags-display-header": "Үҙгәртеүҙәр исемлегендә күрһәтеү",
        "tags-description-header": "Мәғәнәһенең тулы тасуирламаһы",
+       "tags-source-header": "Сығанаҡ",
        "tags-active-header": "Әүҙемме?",
        "tags-hitcount-header": "Билдәләнгән үҙгәртеүҙәр",
+       "tags-actions-header": "Ғәмәлдәр",
        "tags-active-yes": "Эйе",
        "tags-active-no": "Юҡ",
+       "tags-source-extension": "Ҡушымта билдәләй",
+       "tags-source-manual": "Ҡатнашыусы йәки робот ҡулдан индерә",
+       "tags-source-none": "Башҡа ҡулланылмай",
        "tags-edit": "үҙгәртергә",
+       "tags-delete": "юйырға",
+       "tags-activate": "активлаштырырға",
+       "tags-deactivate": "һүндерергә",
        "tags-hitcount": "$1 {{PLURAL:$1|1=үҙгәртеү|үҙгәртеү}}",
+       "tags-manage-no-permission": "Тамға исемен үҙгәртергә хоҡуғығыҙ юҡ",
+       "tags-manage-blocked": "Һеҙгә блок ҡуйылған, тамғалар менән идара итә алмайһығыҙ.",
+       "tags-create-heading": "Яңы тамға булдырырға",
+       "tags-create-explanation": "яңы булдырылған билдәләр боттар һәм ҡатнашыусылар ҡуллана алырлыҡ итеп эшләнәсәк",
+       "tags-create-tag-name": "Тамға исеме",
+       "tags-create-reason": "Сәбәп:",
+       "tags-create-submit": "Яһау",
+       "tags-create-no-name": "Тамға исемен яҙығыҙ",
+       "tags-create-invalid-chars": "Тамға исемдәрендә өтөр (<code>,</code>) йәки һыҙыҡ  (<code>/</code>) булмаҫҡа тейеш.",
+       "tags-create-invalid-title-chars": "Билдә исемдәрендә бит атамаларында файҙаланып булмаған символдар булмаҫҡа тейеш",
+       "tags-create-already-exists": "$1 тамғаһы бар инде.",
+       "tags-create-warnings-above": "«$1» билдәһен яһарға тырышҡанда асыҡлана{{PLURAL:$2|о киләһе иҫкәрмә|ы киләһе иҫкәрмә}}:",
+       "tags-create-warnings-below": "Тамға булдырыуҙы дауам итергә теләйһегеҙме?",
+       "tags-delete-title": "Тамғаны юйырға",
+       "tags-delete-explanation-initial": " «$1» тамғаһын мәғлүмәттәр базаһынан юйырға теләйһегеҙме?",
+       "tags-delete-explanation-in-use": "Ул әлеге ваҡытта ҡулланылған {{PLURAL:$2|$2 версияһынан йәки журналдағы яҙманан|барлыҡ $2 версияһынан йәки журналдағы яҙмаларҙан}}  юйыласаҡ",
+       "tags-delete-explanation-warning": "Был ғәмәл <strong> кире ҡайтарылғыһыҙ</strong> һәм <strong>мәғлүмәттәр базаһы хакимдары тарафынан да үҙгәртелә алмай</strong>. Һеҙ ысынлап та был билдәне юйырға теләүегеҙгә инанырға тейешһегеҙ.",
+       "tags-delete-explanation-active": "<strong> «$1» билдәһе элеккесә актив һәм киләсәктә лә ҡулланыласаҡ.</strong> Шулай булыуын теләмәйһегеҙ икән, билдәне ҡулланыу урынына күсеп, уны һүндерегеҙ.",
+       "tags-delete-reason": "Сәбәп:",
+       "tags-delete-submit": "Тамғаны кире ҡайтарылмаҫлыҡ итеп юйырға.",
+       "tags-delete-not-allowed": "Ҡушымталағы тамғалар юйылмай, әгәр ҡушымта асыҡ рөхсәт бирмәһә.",
+       "tags-delete-not-found": "$1 тамғаһы юҡ.",
+       "tags-delete-too-many-uses": " «$1» тамғаһы $2 {{PLURAL:$2|өлгөлә}} артығыраҡ ҡулланыла, был юйылмаясаҡ тигәнде аңлата.",
+       "tags-delete-warnings-after-delete": " «$1» тамғаһы юйылды, әммә {{PLURAL:$2|түбәндәге киҫәтеүҙәр алында}}:",
+       "tags-activate-title": "Тамғаны активлаштырырға",
+       "tags-activate-question": "«$1» тамғаһын активлыштырырға теләйһегеҙме?",
+       "tags-activate-reason": "Сәбәп:",
+       "tags-activate-not-allowed": "«$1» тамғаһын активлаштырып булмай.",
+       "tags-activate-not-found": "$1 тамғаһы юҡ.",
+       "tags-activate-submit": "активлаштырырға",
+       "tags-deactivate-title": "Тамғаны активлаштырырға",
+       "tags-deactivate-question": "«$1» тамғаһын һүндерергә теләйһегеҙме?",
+       "tags-deactivate-reason": "Сәбәп:",
+       "tags-deactivate-not-allowed": "«$1» тамғаһын һүндереп булмай.",
+       "tags-deactivate-submit": "һүндерергә",
+       "tags-apply-no-permission": "Һеҙҙең үҙгәртеү тамғаһы ҡуйыу хоҡуғы юҡ.",
+       "tags-apply-blocked": "Үҙгәртеүҙәргә тамға ҡуфырға һеҙҙең хоҡуҡ юҡ, һеҙ бикләнгән.",
+       "tags-apply-not-allowed-one": " «$1» тамғаһын ҡулдан файҙаланып булмай",
+       "tags-apply-not-allowed-multi": "Ҡулдан {{PLURAL:$2|түбәндәге тамғаны өҫтәп булмай}}: $1",
+       "tags-update-no-permission": "Һеҙҙең айырым өлгөләрҙә һәм журнал яҙмаларында тамға йәки үҙгәртеү тамғаһы ҡуйырға хоҡуғығыҙ юҡ.",
+       "tags-update-blocked": "Һеҙгә блок ҡуйылған, үҙһәртеү тамғалары менән идара итә алмайһығыҙ.",
+       "tags-update-add-not-allowed-one": " «$1» тамғаһын ҡулдан файҙаланып булмай",
+       "tags-update-add-not-allowed-multi": "{{PLURAL:$2|түбәндәге тег}} ҡулдан өҫтәлмәй: $1",
+       "tags-update-remove-not-allowed-one": " «$1» тамғаһын юйып булмай",
+       "tags-update-remove-not-allowed-multi": "Ҡулдан {{PLURAL:$2|түбәндәге тамғаны юйып булмай}}: $1",
+       "tags-edit-title": "Тамғаны мөхәррирләү",
+       "tags-edit-manage-link": "Тамғаларҙы идаралау",
+       "tags-edit-revision-selected": "{{PLURAL:$1|Һайланған версия}} [[:$2]]:",
+       "tags-edit-logentry-selected": "Журналда {{PLURAL:$1|1=Һайланған яҙма}}:",
+       "tags-edit-revision-legend": "{{PLURAL:$1|1=Был өлгөлә}} өҫтәргә йәки юйырға",
+       "tags-edit-logentry-legend": "{{PLURAL:$1|this log entry|all $1 log entries}} тамғаны өҫтәргә йәки юйырға",
+       "tags-edit-existing-tags": "Булған тамға:",
+       "tags-edit-existing-tags-none": "<em>Юҡ</em>",
+       "tags-edit-new-tags": "Яңы тамғалар:",
+       "tags-edit-add": "Был тамғаларҙы өҫтәргә",
+       "tags-edit-remove": "Был билдәне юйырғамы?",
+       "tags-edit-remove-all-tags": "(бөтә тамғаны юйырға)",
+       "tags-edit-chosen-placeholder": "Бер йәки бер нисә тэг һайлағыҙ",
+       "tags-edit-chosen-no-results": "Тап килгән тамғалар табылманы",
+       "tags-edit-reason": "Сәбәп:",
+       "tags-edit-revision-submit": "Был {{PLURAL:$1|өлгөгә}} ҡулланырға",
+       "tags-edit-logentry-submit": "Үҙгәртеһгә {{PLURAL:$1|журналдағы яҙма}} ҡулланырға",
+       "tags-edit-success": "Үҙгәртеүҙәр ҡабул ителде",
+       "tags-edit-failure": "Үҙгәртеүҙәрҙе ҡабул итеп булманы $1",
+       "tags-edit-nooldid-title": "Маҡсат версия билдәләнмәгән",
+       "tags-edit-nooldid-text": "Һеҙ маҡсат версияһын күрһәтмәнегеҙ, йәки ул версия ғәмәлдә юҡ.",
+       "tags-edit-none-selected": "Бер йәки артығыраҡ тег һайлағыҙ.",
        "comparepages": "Биттәрҙе сағыштырыу",
        "compare-page1": "Беренсе бит",
        "compare-page2": "Икенсе бит",
        "htmlform-chosen-placeholder": "Вариант һайлағыҙ",
        "htmlform-cloner-create": "Тағы өҫтәргә",
        "htmlform-cloner-delete": "Юйырға",
+       "htmlform-cloner-required": "Кәм тигәндә бер дәүмәл кәрәк",
+       "htmlform-title-badnamespace": "[[:$1]] исемдәр арауығында түгел «{{ns:$2}}».",
+       "htmlform-title-not-creatable": "«$1» — бит исеме, быны булдырып булмай",
+       "htmlform-title-not-exists": "$1 юҡ",
+       "htmlform-user-not-exists": "<strong>$1</strong> ғәмәлдә юҡ",
+       "htmlform-user-not-valid": "<strong>$1</strong> — ярамаған иҫәп яҙмаһы",
        "sqlite-has-fts": "$1, тулы текст буйынса эҙләү мөмкинлеге менән",
        "sqlite-no-fts": "$1, тулы текст буйынса эҙләү мөмкинлекһеҙ",
        "logentry-delete-delete": "$1 $3 битен {{GENDER:$2|юйҙы}}",
        "revdelete-uname-unhid": "ҡатнашыусы исеме күрһәтелде",
        "revdelete-restricted": "хакимдәргә ҡаршы ҡулланылған сикләүҙәр",
        "revdelete-unrestricted": "хакимдәрҙән алынған сикләүҙәр",
+       "logentry-block-block": "$1 блокланы{{GENDER:$2||}} {{GENDER:$4|$3}}  $5 $6",
+       "logentry-block-unblock": "$1 блоктан азат итте{{GENDER:$2||а}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "Блоклау ваҡытын $1 {{GENDER:$2|үҙгәртте}}  {{GENDER:$4|$3}}  $5 $6",
+       "logentry-suppress-block": "$1 блокланы{{GENDER:$2||}} {{GENDER:$4|$3}}  $5 $6",
+       "logentry-suppress-reblock": "$1 бикләү ваҡытын {{GENDER:$2|үҙгәртте}}  {{GENDER:$4|$3}}  $5 $6",
+       "logentry-import-upload": "Файл тейәү ысулы менән $1 импортиртланы {{GENDER:$2||а}} $3",
+       "logentry-import-upload-details": "Файл тейәү ысулы менән $1 импортланы {{GENDER:$2||а}} $3 ($4 {{PLURAL:$4|версияһын}})",
+       "logentry-import-interwiki": "$1 башҡа викинан{{GENDER:$2||а}} $3 импортланы",
+       "logentry-import-interwiki-details": "$1 {{GENDER:$2||а}} $3  $5 импортланы ($4 {{PLURAL:$4|версиларын}})",
+       "logentry-merge-merge": "$1 берләштерҙе{{GENDER:$2||а}} $3  $4 ($5 версияһына тиклем)",
        "logentry-move-move": "$1  $3 битенең исемен {{GENDER:$2| үҙгәртте}}. Яңы исеме: $4",
        "logentry-move-move-noredirect": "$1 $3 битенең исемен йүнәлтеү ҡуймайынса {{GENDER:$2|үҙгәртте}}. Яңы исеме: $4",
        "logentry-move-move_redir": "$1 $3 битенең исемен йүнәлтеү өҫтөнән {{GENDER:$2|үҙгәртте}}. Яңы исеме: $4",
        "logentry-newusers-create2": "$1 {{GENDER:$2|ҡатнашыусы}} $3 иҫәп яҙмаһын булдырҙы",
        "logentry-newusers-byemail": "$1 {{GENDER:$2|}} $3 иҫәп яҙмаһын булдырҙы һәм серһүҙ электрон почта аша ебәрелде",
        "logentry-newusers-autocreate": "Автоматик рәүештә {{GENDER:$2| ҡатнашыусының}} $1 иҫәп яҙмаһы яһалды",
+       "logentry-protect-move_prot": "$1 һаҡлау көйәләүен $4 $3 {{GENDER:$2|күсерҙе}}",
+       "logentry-protect-unprotect": "$1 $3-нан һаҡлауҙы  {{GENDER:$2||алды}}",
+       "logentry-protect-protect": "$1 һаҡланы{{GENDER:$2||а}} $3 $4",
+       "logentry-protect-protect-cascade": "$1 һаҡланы{{GENDER:$2||}} $3 $4 [каскадлы]",
+       "logentry-protect-modify": "$1$ һаҡлау кимәлен {{GENDER:$2||үҙгәртте}} $3 $4",
+       "logentry-protect-modify-cascade": "$1 һаҡлау кимәлен{{GENDER:$2||үҙгәртте}}  $3 $4 [каскадлы]",
        "logentry-rights-rights": "$1  $3 файҙаланыусының төркөмдәрҙәге ағзалығын $4 урынына $5 тип {{GENDER:$2|үҙгәртте}}",
        "logentry-rights-rights-legacy": "$1  $3 өсөн төркөмдәрҙәге ағзалыҡты {{GENDER:$2|үҙгәртте}}",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|}} автоматик рәүештә {{GENDER:$2|}} $4 урынына $5 ителде.",
        "logentry-upload-upload": "$1 $3 {{GENDER:$2|күсерҙе}}",
+       "logentry-upload-overwrite": "$1 яңы өлгә{{GENDER:$2||тейәне}} $3",
+       "logentry-upload-revert": "$1 {{GENDER:$2||тейәне}} $3",
+       "log-name-managetags": "Тамғалар менән идара итеү журналы",
+       "log-description-managetags": "Был биттә  [[Special:Tags|метками]] идара итеү мәсьәләләре килтерелгән. Журналда администратор ҡулдан эшләгән ғәмәл генә бар. Тамғаларыҙа, журналға яҙмайынса ғына, вики-программалар ярҙамында ҡуйырға йәки юйырға мөмкин.",
+       "logentry-managetags-create": "$1 «$4» тамғаһын {{GENDER:$2||булдырҙы}}",
+       "logentry-managetags-delete": "$1 «$4» тамғаһын {{GENDER:$2||юйҙы}}  ($5 {{PLURAL:$5|журнал яҙмаһынан}} юйылды)",
+       "logentry-managetags-activate": "$1 «$4» тамғаһын{{GENDER:$2||активлаштырҙы}}, ҡатнашыусылар һәм роботтар ҡуллана торған тамға.",
+       "logentry-managetags-deactivate": "$1 «$4» тамғаһы өсөн{{GENDER:$2||һүндерҙе}} ҡатнашыусылар һәм роботтар ҡуллана торған тамғаны",
+       "log-name-tag": "Тамғалар журналы",
+       "log-description-tag": "Был биттә ҡасан ҡатнашыусылар айырым өлгөләрҙә һәм журналдарҙы  [[Special:Tags|тамғалар]] ҡуйғаны һәм юйғаны күренә. Үҙгәртеү, юйыу һәм шуға оҡшаған ғәмәлдәргә ҡуйылған тамға күренмәй.",
+       "logentry-tag-update-add-revision": "$1 {{GENDER:$2||}} {{PLURAL:$7|тамғаһын}} өҫтәне $6  $4 өлгөһөнә $3 битенә",
+       "logentry-tag-update-add-logentry": "$1 {{GENDER:$2||}} {{PLURAL:$7|тамғаһын}} өҫтәне$6  $5 журнал яҙмаһына $3 битендә",
+       "logentry-tag-update-remove-revision": "$1 {{GENDER:$2||}} {{PLURAL:$9|тамғаһын}} юйҙы $8  $4 өлгөһөнә $3 битенә",
+       "logentry-tag-update-remove-logentry": "$1 {{GENDER:$2||}} {{PLURAL:$9|тамғаһын}} юйҙы $8  $5 өлгөһөнә $3 битенә",
+       "logentry-tag-update-revision": "$1 {{GENDER:$2||яңыртты}}  $4 өлгөһөнөң тамғаларын $3 битендә ({{PLURAL:$7|өҫтәне}} $6; {{PLURAL:$9|юйылған}} $8)",
+       "logentry-tag-update-logentry": "$1 {{GENDER:$2||а}}журналда билдәләнгән яҙмаларҙы яңыртты $5 биттәр $3 (өҫтәлгән{{PLURAL:$7|а|ы}} $6; юйылған{{PLURAL:$9|а|ы}} $8)",
        "rightsnone": "(юҡ)",
        "revdelete-summary": "үҙгәртеүҙәр тасуирламаһы",
        "feedback-adding": "Биткә кире белдереү өҫтәлә",
+       "feedback-back": "Артҡа",
        "feedback-bugcheck": "Шәп! Тик [$1 билдәле хаталар] исемлегендә оҡшаш белдереүҙең булмауына иғтибар итегеҙ.",
        "feedback-bugnew": "Тикшерҙем. Яңы хата тураһында белдерергә",
        "feedback-bugornote": "Әгәр Һеҙ техник проблеманы ентекле рәүештә аңлатырға теләһәгеҙ, зинһар, [$1 хата тураһында белдерегеҙ].\nБашҡа осраҡта, ошо ябай форманы ҡуллана алаһығыҙ. Комментарийығыҙ «[$3 $2]» битенә ҡулланыусы исемегеҙ һәм браузер мәғлүмәте менән өҫтәләсәк.",
        "feedback-cancel": "Кире алырға",
        "feedback-close": "Әҙер",
+       "feedback-external-bug-report-button": "Техник эш еберергә",
+       "feedback-dialog-title": "Баһалама ебәрергә",
+       "feedback-dialog-intro": "Баһалама ебәреү өсөн түбәндәге форманы файҙаланығыҙ. Һеҙҙең исем менән комментарий «$1» битендә буласаҡ.",
        "feedback-error-title": "Хата",
        "feedback-error1": "Хата: API-нан беленмәгән хата",
        "feedback-error2": "Хата: Мөхәррирләү хатаһы",
        "feedback-error3": "Хата: API-нан яуап юҡ",
+       "feedback-error4": "Хата: Баһаламала был баш һүҙ аҫтындағы яҙманы урынлаштырап булмай.",
        "feedback-message": "Хәбәр:",
        "feedback-subject": "Тема:",
-       "feedback-submit": "Кире белдереү ебәрергә",
+       "feedback-submit": "Ебәрергә",
+       "feedback-terms": "Ҡатнашыусы агенты мәғлүмәтендә минең браузер һәм операцион система турыһанда мәғлүмәт булыуы миңә билдәле, минең баһаламала был мәғлүмәт асыҡ буласаҡ.",
+       "feedback-termsofuse": "Минең Ҡулланыу шарттары буйынса кире бәйленеш булдырырға риза.",
        "feedback-thanks": "Рәхмәт! Һеҙҙең фекерегеҙ «[$2 $1]» битенә өҫтәлде.",
+       "feedback-thanks-title": "Рәхмәт!",
+       "feedback-useragent": "Браузер:",
        "searchsuggest-search": "Эҙләү",
        "searchsuggest-containing": "эстәлегендә...",
        "api-error-badaccess-groups": "Һеҙгә был викиға файлдар күсереү рөхсәт ителмәй",
        "api-error-overwrite": "Булған файлды алыштырыу рөхсәт ителмәй.",
        "api-error-stashfailed": "Эске хата: сервер ваҡытлыса файлды һаҡлай алманы.",
        "api-error-publishfailed": "Эске хата: сервер ваҡытлыса файлды һаҡлай алманы.",
+       "api-error-stasherror": "Файлы һаҡлағысҡа тейәгән ваҡытта хата китте.",
+       "api-error-stashedfilenotfound": "Ваҡытлыса һаҡлағыстан файлы тейәгән ваҡытта сығанаҡ файл табылманы.",
+       "api-error-stashpathinvalid": "Ваҡытлыса һаҡлағыста урынлашҡан файл юлы дөрөҫ түгел.",
+       "api-error-stashfilestorage": "Файлды һаҡлағысҡа тейәгән ваҡытта хата китте.",
+       "api-error-stashzerolength": "Сервер файлды ваҡытлыса һаҡлағыста һаҡлау алмай, сөнкт оҙонлоғо 0.",
+       "api-error-stashnotloggedin": "Файлды ваҡытлыса һаҡлағысҡа урынлаштырыу өсөн һеҙ системаҡа инергә тейешһегеҙ.",
+       "api-error-stashwrongowner": "Ваҡытлыса һаҡлағыстағы файлда асырға теләнегеҙ, был файл һеҙҙеке түгел",
+       "api-error-stashnosuchfilekey": "Ваҡытлыса һаҡлағыста һеҙ асырға теләгән файлдың асҡысы юҡ.",
        "api-error-timeout": "Көтөлгән ваҡыт эсендә сервер яуып бирмәне.",
        "api-error-unclassified": "Билдәһеҙ хата барлыҡҡа килде.",
        "api-error-unknown-code": "Билдәһеҙ хата: «$1»",
        "duration-seconds": "$1 {{PLURAL:$1|1=секунд|секунд}}",
        "duration-minutes": "$1 {{PLURAL:$1|1=минут|минут}}",
        "duration-hours": "$1 {{PLURAL:$1|1=сәғәт|сәғәт}}",
-       "duration-days": "$1 {{PLURAL:$1|1=көн|көн}}",
-       "duration-weeks": "$1 {{PLURAL:$1|аҙна|аҙналар|аҙна}}",
-       "duration-years": "$1 {{PLURAL:$1|1=йыл|йылдар}}",
-       "duration-decades": "$1 {{PLURAL:$1|1=Ñ\83н ÐºÓ©Ð½Ð»Ó©Ðº|Ñ\83н ÐºÓ©Ð½Ð»Ó©ÐºÑ\82Ó\99р}}",
+       "duration-days": "$1 {{PLURAL:$1|көн}}",
+       "duration-weeks": "$1 {{PLURAL:$1|аҙна}}",
+       "duration-years": "$1 {{PLURAL:$1|йыл|йылдар}}",
+       "duration-decades": "$1 {{PLURAL:$1|1=Ñ\83н Ð¹Ñ\8bллÑ\8bÒ¡|Ñ\83н Ð¹Ñ\8bллÑ\8bÒ¡Ñ\82ар}}",
        "duration-centuries": "$1 {{PLURAL:$1|1=быуат|быуаттар}}",
        "duration-millennia": "$1 {{PLURAL:$1|1=меңйыллыҡ|меңйыллыҡтар}}",
        "rotate-comment": "Рәсем сәғәт йөрөшө буйынса $1{{PLURAL:$1|}} градусҡа боролдо",
        "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": "Ҡарап сығыу",
+       "expand_templates_preview_fail_html": "'''Ҡыҙғанысҡа ҡаршы, һеҙҙең ултырыш мәғлүмәттәрегеҙ юғалды. Һөҙөмтәлә, сервер үҙгәрештерегеҙҙе ҡабул итә алмай.'''\n\n''{{SITENAME}} тик таҙа HTML ҡулланыуҙы ғына рөхсәт итә; алдан ҡарау, JavaScript-атакаларҙан һаҡланыу маҡсаты менән ябылған.''\n\n'''Әгәр һеҙ үҙгәртеүҙе яҡшы ниәт менән башҡараһағыҙ икән, тағы бер тапҡыр ҡабатлап ҡарағыҙ. Хата ҡабатланһа, сайттан [[Special:UserLogout|сығығыҙ]] һәм яңынан керегеҙ.'''",
+       "expand_templates_preview_fail_html_anon": "<em>Сайт {{SITENAME}}  «һоро» HTML исемлегендә, һеҙ танылманығыҙ, шуға алдан ҡарау  JavaScript-атакаһынан һаҡланыу сараһы буларыҡ йәшерелгән</em>\n\n<strong>Зинһар өсөн, [[Special:UserLogin|танылығыҙ]] һәм тағы бер мәртәбә эшләп ҡарағыҙ.",
+       "expand_templates_input_missing": "Һеҙ ниндәй ҙә булһа һөйләм ҡуйырға тейешһегеҙ",
+       "pagelanguage": "Биттең телен үҙгәртеү",
+       "pagelang-name": "Бит",
+       "pagelang-language": "Тел",
+       "pagelang-use-default": "Ҡуйылған тел ҡулланырға",
+       "pagelang-select-lang": "Тел һайлау:",
+       "pagelang-submit": "Ебәрергә",
+       "right-pagelang": "Биттең телен үҙгәртеү",
+       "action-pagelang": "Биттең телен үҙгәртеү",
+       "log-name-pagelang": "Телде үҙгәртеү дәфтәре",
+       "log-description-pagelang": "Был бит телдәрендә үҙгәреүҙәр дәфтәре",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|үҙгәртте}} язык страницы $3 биттең телен $4-тән $5-кә.",
+       "default-skin-not-found": "Уп-па! Викиҙы биҙәү темаһы рөхсәт ителмәгән <code>$wgDefaultSkin</code>, <code>$1</code>.\n\nҺеҙең ҡоролмала {{PLURAL:$4|түбәндәге}} биҙәү темалары бар.  [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration]  {{PLURAL:$4|Килешеү буйынса тема һайларға}}.\n\n$2\n\n; Әгәр яңы ғына MediaWiki урынлаштарған булһығыҙ:\n:Һеҙ быны Git-тан йәки сығанаҡ кодтан башға ысул ҡулланып эшләгәнһегеҙ.  Ул ваҡытта был мөмкин. Ҡайһы бер темаларҙы урынлаштырып ҡарағыҙ[https://www.mediawiki.org/wiki/Category:All_skins сайт биҙәү өсөн каталог mediawiki.org]:\n:* [https://www.mediawiki.org/wiki/Download урынлаштырырға йүнәлеш биреүсе файлдар архивын] тейәп алып <code>skins/</code> папкаһының күсермәһен алығыҙ;\n:* биҙәү өсөн айырым темалар архивын [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org];\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins  Git-ты ҡулланып тейәргә].\n: Git, MediaWiki-ны эшләүсе булһағыҙ һеҙҙең репозиторға зыян килтерергә тейеш түгел.  [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] килешеү буйынса тема һайлау тарыһында мәғлүмәт.\n; MediaWiki-ны әле генә яңыртҡан булһағыҙ:\n: MediaWiki версиһында 1.24 автоматик яүыртыу булмаясаҡ. ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]).\n{{PLURAL:$5|Түбендәге юлды}} ҡуйығыҙ <code>LocalSettings.php</code>,  {{PLURAL:$5|урынлаштырылған темаларҙы}} биҙәү өсөн: \n\n<pre dir=\"ltr\">$3</pre>\n\n;Әгәр яңы ғына үҙгәрткән булһағыҙ <code>LocalSettings.php</code>:\n: Тема исемендә хата булмаһын, тикшерегеҙ.",
+       "default-skin-not-found-no-skins": "Уп-па! Викины биҙәү темаһы рөхсәт ителмәгән <code>$wgDefaultSkin</code>, <code>$1</code>.\n\nҺеҙең ҡоролмала түбәндәге биҙәү темалары бар.  [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration]  \n\n\n; Әгәр яңы ғына MediaWiki урынлаштарған булһығыҙ:\n:Һеҙ быны Git-тан йәки сығанаҡ кодтан башҡа ысул ҡулланып эшләгәнһегеҙ.  Ул ваҡытта был мөмкин. Ҡайһы бер темаларҙы урынлаштырып ҡарағыҙ[https://www.mediawiki.org/wiki/Category:All_skins сайт биҙәү өсөн каталог mediawiki.org]:\n:* [https://www.mediawiki.org/wiki/Download урынлаштырырға йүнәлеш биреүсе файлдар архивын] тейәп алып <code>skins/</code> папкаһының күсермәһен алығыҙ;\n:* биҙәү өсөн айырым темалар архивын [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org];\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins  Git-ты ҡулланып тейәргә].\n: Git, MediaWiki-ны эшләүсе булһағыҙ һеҙҙең репозиторға зыян килтерергә тейеш түгел.  [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] килешеү буйынса тема һайлау тарыһында мәғлүмәт.\n; MediaWiki-ны әле генә яңыртҡан булһағыҙ:\n: MediaWiki версиһында 1.24 автоматик яүыртыу булмаясаҡ. ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]).\n \n\n\n;Әгәр яңы ғына үҙгәрткән булһағыҙ <code>LocalSettings.php</code>:\n: Тема исемендә хата булмаһын, тикшерегеҙ.",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (рөхсәт ителгән)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>рөхсәт ителмәгән</strong>)",
+       "mediastatistics": "Медиа-статистика",
+       "mediastatistics-summary": "Тейәләгән файлдар тибы тураһында статистика. Файлдың һуңғы версия тураһында мәғлүмәт бар. Иҫке һәм юйылған файлдар иҫәпкә алынмай.",
+       "mediastatistics-nbytes": "$1 байт{{PLURAL:$1|}} ($2; $3%)",
+       "mediastatistics-bytespertype": "Был бүлек өсөн файлдың дөйөм күләме: $1 байт{{PLURAL:$1|}} ($2; $3%).",
+       "mediastatistics-allbytes": "Бөтә файлдар күләме: $1 байт{{PLURAL:$1|}} ($2).",
+       "mediastatistics-table-mimetype": "MIME-төрҙәре",
+       "mediastatistics-table-extensions": "Рөхсәт ителгән ҡушылмалар",
+       "mediastatistics-table-count": "Биттәр һаны",
+       "mediastatistics-table-totalbytes": "Дөйөм күләме",
+       "mediastatistics-header-unknown": "Билдәһеҙ",
+       "mediastatistics-header-bitmap": "Растр рәсем",
+       "mediastatistics-header-drawing": "Рәсемдәр (вектор рәсем)",
+       "mediastatistics-header-audio": "Аудио",
+       "mediastatistics-header-video": "Видео",
+       "mediastatistics-header-multimedia": "Мультимедиа",
+       "mediastatistics-header-office": "Офис",
+       "mediastatistics-header-text": "Текст",
+       "mediastatistics-header-executable": "Башҡарылыусы",
+       "mediastatistics-header-archive": "Ҡыҫылған формат",
+       "mediastatistics-header-total": "Барлыҡ файлдар",
+       "json-warn-trailing-comma": "$1 {{PLURAL:$1|һөйләм аҙаҡында артыҡ өтөр юйылды}} JSON",
+       "json-error-unknown": "JSON менән проблемалар бар. Хата: $1",
+       "json-error-depth": "Стек өсөн максималь тәрәнлек артып киткән.",
+       "json-error-state-mismatch": "Ярамаған йәки дөрөҫ төҙөлмәгән JSON",
+       "json-error-ctrl-char": "Идара символында хата, кодировка дөрөҫ төҙөлмәгән булыуы ихтимал.",
+       "json-error-syntax": "Синтаксик хата",
+       "json-error-utf8": "Хаталы UTF-8 символдары, кодировка дөрөҫ булмауы изтимал.",
+       "json-error-recursion": "Бер йәки бер нисә рекурсив һылтанма кодланҡан булырға тейеш.",
+       "json-error-inf-or-nan": "Бер йәки бер нисә NAN- йәки INF-дәүмәле код ҡуйылған булырға тейеш.",
+       "json-error-unsupported-type": "Код ҡуйып булмаҫлыҡ дәүмәл бирелгән.",
+       "headline-anchor-title": "Был бүлеккә һылтанма",
        "special-characters-group-latin": "Латин",
        "special-characters-group-latinextended": "Латин (киңәйтелгән)",
        "special-characters-group-ipa": "ХАФӘ (IPA)",
        "special-characters-group-khmer": "Кһмер",
        "special-characters-title-endash": "уртаса һыҙыҡ",
        "special-characters-title-emdash": "оҙон һыҙыҡ",
-       "special-characters-title-minus": "минус билдәһе"
+       "special-characters-title-minus": "минус билдәһе",
+       "mw-widgets-dateinput-no-date": "Дата һайланмаған",
+       "mw-widgets-titleinput-description-new-page": "Был бит юҡ",
+       "mw-widgets-titleinput-description-redirect": "$1 йүнәлтеү",
+       "api-error-blacklisted": "Зинһар өсөн, башҡа аңлайышлы төшәнсә һайлағыҙ.",
+       "sessionmanager-tie": "Бер юлы бер нисә ғаризаның төп нөсхәһен тикшереп булмай: $1.",
+       "sessionprovider-generic": "$1 сессия",
+       "sessionprovider-mediawiki-session-cookiesessionprovider": "куки нигеҙендә сессиялар",
+       "sessionprovider-nocookies": "Ярҙам кәрәкме?",
+       "randomrootpage": "Ярҙам кәрәкме?"
 }
index 9a66ee9..2799186 100644 (file)
        "customcssprotected": "Du host néd d' Berechtigung dé CSS enthoitende Seiten z' b'orweiden, weis d' persénlichen Eihstöungen vohram aundern Benutzer enthoitt.",
        "customjsprotected": "Du host néd d' Berechtigung dé JavaScript enthoitende Seiten z' b'orweiden, weis d' persénlichen Eihstöungen vohram aundern Benutzer enthoitt.",
        "ns-specialprotected": "Speziaalseiten kennern néd b'orweidt wern.",
-       "titleprotected": "A Seiten mid dém Nåm kå néd åglégd wern. Dé Sperrn is durch [[User:$1|$1]] mid da Begryndung ''„$2“'' eihgerichtt worn.",
+       "titleprotected": "A Seiten mid dém Nåm kå néd åglégd wern. Dé Sperrn is durch [[User:$1|$1]] mid da Begryndung <em>$2</em> eihgerichtt worn.",
        "virus-badscanner": "Feelerhofte Kónfigurazión: unbekaunnter Virnscanner: ''$1''",
        "virus-scanfailed": "Scan is föögschlong (code $1)",
        "virus-unknownscanner": "Néd bekaunnter Virnscanner:",
        "upload-options": "Ópziónen fyrs Aufféloon",
        "watchthisupload": "Dé Seiten beówochten",
        "filewasdeleted": "A Daatei mid dém Naum is schoh oamoi auffégloon und zwischenzeidlé wieder gléschd worn. Bittscheh schaug erscht 'n Eihtrog im $1 auh, bevur du dé Daatei wirklé speicherdst.",
-       "upload-success-subj": "Erfóigreich auffégloon",
-       "upload-failure-subj": "A Feeler beim Aufféloon",
-       "upload-warning-subj": "Auffélood-Warnung",
        "upload-file-error": "Interner Feeler",
        "img-auth-accessdenied": "Zuagrieff vaweigerd",
        "upload-curl-error6": "D' URL is néd dareichbor",
        "wlheader-showupdated": "Seiten mid noh néd gseengne Änderrungen wern '''fett''' dorgstöd.",
        "wlnote": "Es {{PLURAL:$1|fóigt d' létzde Änderrung|fóing d' létzden '''$1''' Änderrungen}} voh da/dé {{PLURAL:$2|Stund| '''$2''' Stunden}}. Staund: $3, $4 Uar.",
        "wlshowlast": "Zoag dé Änderrungen voh dé létzden $1 Stunden, $2 Dog óder  (in dé létzden 30 Dog).",
-       "watchlistall2": "olle",
        "watchlist-options": "Mei Beobochta: Optiona",
        "watching": "Beówochten ...",
        "unwatching": "Néd Beówochten",
index d7f234d..943b13f 100644 (file)
        "myprivateinfoprotected": "شما رء اجازت پر وتیگین اینفارمیشنء اصلاح کتنء نه انت.",
        "mypreferencesprotected": "شما رء اجازت پر وتی تنظیماتء اصلاح کتنء نه انت.",
        "ns-specialprotected": "حاصین صفحات اصلاح نه بنت",
-       "titleprotected": "ای عنوان محافظت بوتت چه سربیگ به وسیله  [[User:$1|$1]].\nای دلیل دییگ بیتت ''$2''.",
+       "titleprotected": "ای عنوان محافظت بوتت چه سربیگ به وسیله  [[User:$1|$1]].\nای دلیل دییگ بیتت <em>$2</em>.",
        "filereadonlyerror": "ائ فایل ٹگل «$1» بیت نکنت پرچا که ائ فایلء مهزن «$2» مان تهناوانتنیء حالت ایر انت.\n\nهما ماسٹر که آئرا کبل کتگ چوشین توضیحئ درشان کتگ:  «$3».",
        "invalidtitle-knownnamespace": "نامهتبرین عنوان گون نامء جاگاه «$2» ءُ تکست «$3»",
        "invalidtitle-unknownnamespace": "نامهتبرین نام گون ناشناسین نامء جاگاه نمبر $1 ءُ تکست «$2»",
        "createaccountreason": "دلیل:",
        "createacct-reason": "دلیل:",
        "createacct-reason-ph": "پرچا شما ادگر نوکین اکانتء اڈ کن ات",
-       "createacct-captcha": "سکیوریتی چک",
-       "createacct-imgcaptcha-ph": "برزین سیاهگء ادان بلک ات",
        "createacct-submit": "وتی اکانتء اڈ کن ات",
        "createacct-another-submit": "ادگر اکانتء اڈ بکن ات",
        "createacct-benefit-heading": "{{SITENAME}} شهسانی واسته هنچوش که شمئیء اڈ بیتگ",
        "passwordreset-emailtext-ip": "یک شهسء (بلکین شما، گون آی‌پیء نشانیگ $1) شمئی پسوردء واترء {{SITENAME}} ($4) لوٹتگ انت. {{PLURAL:$3|اکانت|اکانتان}} گون ائ ایمیل ادرسء همگرنچ انت:\n\n$2\n\n{{PLURAL:$3|ائ موکتین پسورد|ائ موکتین پسوردان}} رند چه {{PLURAL:$5|یک روچ|$5 روچ}} باطل بیت انت.\nشما پیکن انیگء لاگین کن ات ءُ نوکین پسوردء بزیر ات. اگان شمئی پگر انت که ادگر شهسء ائ لوٹء راهیگ کتگ یانکه وتی پیسریگین پسوردء هیال کت ات ءُ رندء نلوٹیت آئرا ٹگل دئیت، بیت که ائ پیگامء ناگند بزان ات ءُ وتی پیسریگین پسوردء کارمرز کن ات.",
        "passwordreset-emailtext-user": "کاربر $1 چه {{SITENAME}} شمئی پسوردء واترء لوٹ مان {{SITENAME}} ($4) کتگ انت. {{PLURAL:$3|اکانت|اکانتان}} چیریگین کاربر گون ائ ایمیل ادرس همگرنچ انت:\n\n$2\n\n{{PLURAL:$3|ائ موکتین پسورد|ائ موکتین پسوردان}} رند چه {{PLURAL:$5|یک روچ|$5 روچ}} باطل بیت انت.\nشما ضرور انت انیگء لاگین کن ات ءُ نوکین پسوردء بزیر ات. اگان ادگر شهسء ائ لوٹء راهیگ کتگ انت، یانکه وتی اصلیگین پسوردء هیال کت ات ءُ رندء نلوٹ ات آئرا ٹگل دئیت، بیت که ائ پیگامء نگند بزان ات ءُ وتی پیسریگین پسوردء کارمرز کن ات.",
        "passwordreset-emailelement": "یوزرنام: \n$1\n\nموکتین پسورد: \n$2",
-       "passwordreset-emailsent": "یک ایمیلء گون پسوردء واترء راهیگ بوت.",
+       "passwordreset-emailsentemail": "یک ایمیلء گون پسوردء واترء راهیگ بوت.",
        "passwordreset-emailsent-capture": "یک ایمیلء پر پسورد واترء واسته که جهلیگء پیش دارگ بیت، راهیگ بیتگ انت.",
        "passwordreset-emailerror-capture": "واترین ایمیل، که جهلیگء پیش دارگ بیت، اڈ بوت، بلئی آئی راهیگ پر {{GENDER:$2|کاربر}} پکا نبوت: $1",
        "changeemail": "ایمیل ادرسء ٹگل بدئ",
        "undo-summary-username-hidden": "بی اثر کتن نسخهٔ $1 گون یک نامالومین کاربرء واسته",
        "cantcreateaccounttitle": "نه نونیت حساب شرکنت",
        "cantcreateaccount-text": "شرکتن حساب چی ای آدرس آی پی ('''$1''') محدود بوتت توسط [[User:$3|$3]].\n\nدلیلی داتگین توسط $3  شی انت ''$2''",
-       "cantcreateaccount-range-text": "اکانتء اڈ کتن چه آی پی ادرسء مان ائ هوار '''$1'''، که شمئی آی پی ('''$4''') مان آئی توکاانت، گون [[User:$3|$3]] متوقف بیتگ انت.\nدرشان کتگین دلیل گون $3، $2 انت.",
+       "cantcreateaccount-range-text": "اکانتء اڈ کتن چه آی پی ادرسء مان ائ هوار <strong>$1</strong>، که شمئی آی پی (<strong>$4</strong>) مان آئی توکاانت، گون [[User:$3|$3]] متوقف بیتگ انت.\nدرشان کتگین دلیل گون $3، $2 انت.",
        "viewpagelogs": "آمار ای صفحه بچار",
        "nohistory": "په ای صفحه تاریح اصلاح نیست.",
        "currentrev": "هنوکین بازبینی",
        "prefs-help-prefershttps": "ائ ترجیحء تاثیر رند چه شمئی رندی لاگینء کارمرز بیت انت.",
        "prefswarning-warning": "شمی ٹگل داتینوکین ترجیئات تا انون زاپاس نه بوته انت .\nاگه ای دیم بدون شه کلیک کورتینا بی «$1» ایلا بیت شمی ترجیئات زاپاسا نه بیینت .",
        "prefs-tabs-navigation-hint": "بزان: شما توان ات چه چپی و راستی پیشداروکین بٹن ان  پر حرکت زبانگ انی توکا مان زبانگانی لیست کارمرز بکن ات.",
-       "email-address-validity-valid": "شمئی ایمیل ادرس پر درستی پیداگ انت",
-       "email-address-validity-invalid": "مهتبرین ایمیل ادرسء بلک ات",
        "userrights": "مدیریت حقوق کاربر",
        "userrights-lookup-user": "مدیریت گروه کاربر",
        "userrights-user-editname": "یک نام کاربری وارد کن",
        "right-blockemail": "یک کاربری چه ایمیل دیم دهگ منع کن",
        "right-hideuser": "یک نام کاربری منع کن، آیی چه عام پناه کنگنت",
        "right-ipblock-exempt": "منع جنبی آی پی، منع اتوماتیکی و منع بردی",
-       "right-proxyunbannable": "جنبی اتوماتیکی منع پروکسی",
        "right-unblockself": "وتی دزرسء پچ بکن",
        "right-protect": "تغییر میزان تاکانی پرتکشن ءُ ویرایش مهاپزت بیتگین آپشانکین پیج ان",
        "right-editprotected": "ویرایش مهاپزت بیتگین پیج گون ای حالت \"{{int:protect-level-sysop}}\"",
        "recentchanges-label-bot": "ائ ویرایش گون یک رباتء کتن بیتگ",
        "recentchanges-label-unpatrolled": "این ویرایش اناگتء گشت‌زنی نه بیتگ",
        "recentchanges-label-plusminus": "تاکء سایز همگرنچ گون ائ بایت انی انداجگ ٹگل وارتگ انت",
-       "recentchanges-legend-heading": "'''اختصاران:'''",
+       "recentchanges-legend-heading": "<strong>اختصاران:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (هنچوش پر [[Special:NewPages|نوکین تاکانء فهرست]] بچار ات)",
        "rcnotefrom": "بی جهلگا ٹگلان شه <strong>$3, $4</strong> (تا <strong>$1</strong> {{PLURAL:$5|نشان داته بوته انت|نشان داته بوته انت}}).",
        "rclistfrom": "پیش دار نوکین تغییراتآ چه $3 $2",
        "filewasdeleted": "یک فایلی گو ای نام پیشتر آپلود بوتت و رندا حذف بوت.\nشما بایدن کنترل کنیت  $1 پیش چه شی که دگه آپلود کنیت.",
        "filename-bad-prefix": "نام  فایلی که آپلود بیت شروع بیت گون '''\"$1\"''', که یک نام بی توضیحی هنچکا اتوماتیکی گون دوربین دیجیتال دهگ بوتت.\nلطفا یک تشریحی ترین نامی په وتی فایل بزرویت.",
        "filename-prefix-blacklist": "#<!-- leave this line exactly as it is --> <pre>\n# Syntax is as follows:\n#   * Everything from a \"#\" character to the end of the line is a comment\n#   * Every non-blank line is a prefix for typical file names assigned automatically by digital cameras\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # some mobil phones\nIMG # generic\nJD # Jenoptik\nMGP # Pentax\nPICT # misc.\n #</pre> <!-- leave this line exactly as it is -->",
-       "upload-success-subj": "آپلود موفق",
-       "upload-success-msg": "بارگذاری شما از [$2] موفق بود. این پرونده در اینجا قابل دسترسی است: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "مشکل در بارگذاری",
-       "upload-failure-msg": "مشکلی در بارگذاری شما از [$2] وجود داشت:\n\n$1",
-       "upload-warning-subj": "هشدار بارگذاری",
-       "upload-warning-msg": "فرم بارگذاری مشکلی داشت [$2]. شما می‌توانید به [[Special:Upload/stash/$1|فرم بارگذاری]] بازگردید تا این اشکال را رفع کنید.",
        "upload-proto-error": "اشتباه پروتوکل",
        "upload-proto-error-text": "آپلود دراین نیاز په URL آنی داریت که شروع بیت گون  <code>http://</code> یا <code>ftp://</code>.",
        "upload-file-error": "حطا درونی",
        "movenosubpage": "ای صفحه ءَ هچ چیر تاکی نیست",
        "movereason": "دلیل:",
        "revertmove": "برگردینگ",
-       "delete_and_move": "حذف وجاه په جاه کن",
        "delete_and_move_text": "== حذف نیاز داریت په ==\nصفحه مبدا \"[[:$1]]\"  که هنگت هستن.\nآیا شما لوٹیت آیء حذف کنیت دان په حذف‌ آیء راهی شر بیت؟",
        "delete_and_move_confirm": "بله، صفحه حذف کن",
        "delete_and_move_reason": "حذف بوت په شرکتن راه په جاه په جاه کتن",
index 6b50ef1..99c880f 100644 (file)
        "myprivateinfoprotected": "Ika daeng permiso na magliliwat kan pribado mong impormasyon.",
        "mypreferencesprotected": "Ika daeng permiso na magliliwat kan saimong mga kamuyahan.",
        "ns-specialprotected": "Mga espesyal na pahina dae makakapagliwat.",
-       "titleprotected": "Ining titulo pinagprotektaran poon pagkamukna ni [[User:$1|$1]].\nAn rason na pinagtao iyo na \"''$2''\".",
+       "titleprotected": "Ining titulo pinagprotektaran poon pagkamukna ni [[User:$1|$1]].\nAn rason na pinagtao iyo na <em>$2</em>.",
        "filereadonlyerror": "Dae kinayang baguhon an sagunson (file) \"$1$ nin huli ta an repositoryo kan sagunson \"$2\" yaon sa kamugtakan na basahon sana.\n\nAn administrador na iyo an nagkandado kaini nagpahayag kaining kapaliwanagan: \"$3\".",
        "invalidtitle-knownnamespace": "Imbalidong titulo na igwang espasyadong ngaran na \"$2\" asin teksto na \"$3\"",
        "invalidtitle-unknownnamespace": "Imbalidong titulo na igwang nin bakong bistado na bilang kan espasyadong ngaran na $1 asin teksto na \"$2\"",
        "passwordreset-emailtext-ip": "May sarong tawo (pwedeng ika gayod, gikan sa IP address na $1) naghahagad nin pagliliwat kan saimong sekretong panlaog para sa{{SITENAME}}($4). An minasunod na paragamit {{PLURAL:$3|panindog iyo an|mga panindog iyo an}} na asosyado kaining e-surat na adres:\n\n$2\n\n{{PLURAL:$3|Ining temporaryong sekretong panlaog|Ining mga temporaryong sekretong panlaog}} mapapaso sa laog nin {{PLURAL:$5|sarong aldaw|$5 mga aldaw}}.\nDapat kang maglaog asin magpili nin sarong baguhon na sekretong panlaog ngunyan. Kun ibang tawo an naghimo kaining kahagadan, o kun saimo nang nagiromdoman an saimong orihinal na sekretong panlaog, asin habo mo nang ribayan ini, ipasipara mo na sana ining mensahe asin ipagpadagos mo nang gamiton an luma mong sekretong panlaog.",
        "passwordreset-emailtext-user": "Paragamit $1 sa {{SITENAME}} naghahagad nin sarong pagiromdom kan detalye nin saimong panindog para sa {{SITENAME}}\n($4). An minasunod na paragamit {{PLURAL:$3|panindog iyo an|mga panindog iyo an}} na asosyado kaining e-koreong address:\n\n$2\n\n\n{{PLURAL:$3|Ining temporaryong sekretong panlaog|Ining mga temporaryong panlaog}} mapapaso sa {{PLURAL:$5|sarong aldaw|$5 mga aldaw}}.\nIka dapat na maglaog asin magpili nin sarong bagong sekretong panlaog ngunyan. Kun ibang tawo an naghimo kaining kahagadan, o kun saimo nang nagiromdoman an saimong orihinal na sekretong panlaog, asin habo mo nang ribayan ini, ipasapara mo na sana an mensaheng ini asin ipadagos mo nang gamiton an saimong lumang sekretong panlaog.",
        "passwordreset-emailelement": "Paragamit-ngaran: \n$1\n\nTemporaryong sekretong panlaog: \n$2",
-       "passwordreset-emailsent": "Sarong e-surat sa pagliliwat kan sekretong panlaog an ipinadara na.",
+       "passwordreset-emailsentemail": "Sarong e-surat sa pagliliwat kan sekretong panlaog an ipinadara na.",
        "passwordreset-emailsent-capture": "Sarong e-surat sa pagliliwat kan sekretong panlaog an ipinadara na, yaon ipinapahiling sa ibaba.",
        "passwordreset-emailerror-capture": "Sarong e-surat sa pagliliwat kan sekretong panlaog an pinagpuyos na, yaon ipinapahiling sa ibaba, alagad sa pagpapadara kaini sa {{GENDER:$2|paragamit}} nagpalya: $1",
        "changeemail": "Ribayan an e-koreong address",
        "prefs-diffs": "Diffs",
        "prefs-help-prefershttps": "Ining kamuyahan magkaka-epekto sa masunod mong paglaog.",
        "prefs-tabs-navigation-hint": "Pantama: Ika makakagamit nin wala asin too na pansusing pana tanganing magnabigar sa tahaw kan mga tanda na yaon sa listahan nin mga panandaan.",
-       "email-address-validity-valid": "An e-koreo nagpapahiling na balido",
-       "email-address-validity-invalid": "Magkaag nin sarong balidong e-koreong address",
        "userrights": "Pagmaneho kan mga derecho nin paragamit",
        "userrights-lookup-user": "Magmaného kan mga grupo nin parágamit",
        "userrights-user-editname": "Ilaog an pangaran kan parágamit:",
        "right-blockemail": "Kubkubon an paragamit na makapagpadara nin e-koreo",
        "right-hideuser": "Kubkubon an pangaran nin paragamit, itago ini sa publiko",
        "right-ipblock-exempt": "Sampawan an pangubkob kan IP, awtomatikong-kubkob asin panhalawig na kubkob",
-       "right-proxyunbannable": "Sampawan an awtomatikong mga kubkob kan mga proksi",
        "right-unblockself": "Dae pagkubkubon an sadire",
        "right-protect": "Baguhon an mga kad-at nin proteksyon asin liwaton an mga pahina nin protektadong surunsunan",
        "right-editprotected": "Liwaton an mga pahina na protektado bilang \"{{int:protect-level-sysop}}\"",
        "right-override-export-depth": "Eksportaron an mga pahina kabali na an pinagkilyawan na mga pahina sagkod sa rarom na 5",
        "right-sendemail": "Magpadara nin e-koreo sa ibang mga paragamit",
        "right-passwordreset": "Tanawon an e-koreo kan pagbabago nin sekretong panlaog",
+       "grant-editmycssjs": "Liwaton an saimong paragamit CSS/JavaScript",
+       "grant-editmyoptions": "Liwaton an saimong paragamit na mga kamuyahan",
+       "grant-viewdeleted": "Tanawon an pinagpurang mga sagunson asin pahina",
        "newuserlogpage": "Paragamit na talaan nin pagmukna",
        "newuserlogpagetext": "Ini an talaan kan mga pagmukna nin paragamit.",
        "rightslog": "Usip nin derechos nin paragamit",
        "recentchanges-label-bot": "Ining pagliwat pinaghimo bilang sarong bot",
        "recentchanges-label-unpatrolled": "Ining pagliwat dae pa tabi pinagpatrolyahan",
        "recentchanges-label-plusminus": "An kadakulaan nin pahina pinagliwat sa paagi kaining numero nin mga bayta",
-       "recentchanges-legend-heading": "'''Kabalaynan:'''",
+       "recentchanges-legend-heading": "<strong>Kabalaynan:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (hilngon man [[Special:NewPages|listahan kan mga baguhong pahina]])",
        "recentchanges-legend-plusminus": "(''±saro-duwa-tolo'')",
        "rcnotefrom": "Sa ibaba iyo an mga kaliwatan poon kan '''$2''' (sagkod sa '''$1''' na ipinapahiling).",
        "watchthisupload": "Bantayi ining sagunson",
        "filewasdeleted": "May sarong ''file'' na kapangaran kaini na dating pigkarga tapos pigparâ man sana. Sosogon muna tabî an $1 bago ikarga giraray ini.",
        "filename-bad-prefix": "An pangaran nin ''file'' na pigkakarga mo nagpopoon sa '''\"$1\"''', sarong pangaran na dai makapaladawan na normalmente enseguidang pigtatao kan mga kamerang digital. Magpili tabî nin pangaran nin ''file'' na mas makapaladawan.",
-       "upload-success-subj": "Nakarga na",
-       "upload-success-msg": "An saimong pagkukupkop na gikan sa [$2] matrayumpo. Ini makukua digde: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Problema sa pangupkop",
-       "upload-failure-msg": "Nagkaigwa nin problema sa saimong pagkukupkop gikan sa [$2]:\n\n$1",
-       "upload-warning-subj": "Patanid tabi sa pagkukupkop",
-       "upload-warning-msg": "Nagkaigwa nin problema sa saimong pagkukupkop gikan sa [$2]. Ika puwedeng magbalik sa [[Special:Upload/stash/$1|upload form]] tanganing korehiran ining problema.",
        "upload-proto-error": "Salang protocolo",
        "upload-proto-error-text": "An pagkargang panharayo kaipuhan nin mga URLs na nagpopoon sa  <code>http://</code> o <code>ftp://</code>.",
        "upload-file-error": "Panlaog na salâ",
        "pager-older-n": "{{PLURAL:$1|luma na nin 1|luma na nin $1}}",
        "suppress": "Tagapagmansay",
        "querypage-disabled": "Ining espesyal na pahina pinagpundo nin huli sa kaggibohang mga rason.",
+       "apisandbox": "Kahong-buhangin kan API",
+       "apisandbox-api-disabled": "An API dae pinagpagana sa sityong ini.",
+       "apisandbox-intro": "Gamitong ining pahina sa pag-eksperimento kan '''MediaWiki web service API'''.\nKonsultaron an  [//www.mediawiki.org/wiki/API:Main_page the API documentation] para sa iba pang mga detalye sa paggamit kan API. Ehemplo: [//www.mediawiki.org/wiki/API#A_simple_example kuahon an laman kan Pangenot na Pahina]. Magpili nin aksyon tanganing hilngon an mga kadagdagan na mga ehemplo.",
+       "apisandbox-submit": "Maghimo nin kahagadan",
+       "apisandbox-reset": "Klaro",
+       "apisandbox-examples": "Ehemplo",
+       "apisandbox-results": "Resulta",
+       "apisandbox-request-url-label": "Hagad URL:",
+       "apisandbox-request-time": "Hagad oras:$1",
        "booksources": "Mga Ginikanan kan libro",
        "booksources-search-legend": "Maghanap para sa mga ginikanang libro",
        "booksources-text": "Mahihiling sa babâ an lista kan mga takod sa ibang ''site'' na nagbenbenta nin mga bâgo asin nagamit nang libro, asin pwede ser na igwa pang mga ibang impormasyon manonongod sa mga librong pighahanap mo:",
        "wlheader-showupdated": "Mga pahina na pinagriliwat poon kaidtong huri kang nagbisita sainda ipinapatanaw na '''mahîbog'''",
        "wlnote": "Sa ibaba an {{PLURAL:$1|huring pagbabago|mga huring '''$1''' pagbabago}} sa nakaaging {{PLURAL:$2|oras|'''$2''' mga oras}}, magpoon pa kan $3, $4.",
        "wlshowlast": "Ipahilíng an nakaaging $1 na mga oras mga $2 na aldaw",
-       "watchlistall2": "gabos",
        "watchlist-options": "Bantay-listahan na mga pagpipilian",
        "watching": "Pigbabantayan...",
        "unwatching": "Dai pigbabantayan...",
        "rollbackfailed": "Prakaso an pagbalík",
        "cantrollback": "Dai pwedeng bawîon an hirá; an huring kontribuidor iyo an unikong parásurat kan páhina.",
        "alreadyrolled": "Dae maibalik an huring pagliwat kan [[:$1]] ni [[User:$2|$2]] ([[User talk:$2|olay]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nmay iba na tabing nagliwat o nagbalik kan pahina.\n\nAn huring pagliwat sa pahina ginibo ni [[User:$3|$3]] ([[User talk:$3|olay]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "An sumaryo kan pagliwat: \"''$1''\".",
+       "editcomment": "An sumaryo kan pagliwat: <em>$1</em>.",
        "revertpage": "Ibinalik na mga pagliwat ni [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]]) sagkod sa huring rebisyon ni [[User:$1|$1]]",
        "revertpage-nouser": "Binalikwat na mga pagliliwat kan sarong nakatagong paragamit sa huring rebisyon ni {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Binawî na mga paghirá ni $1; pigbalik sa dating bersyón ni $2.",
        "movenosubpage": "Ining pahina mayo nin mga sub-pahina.",
        "movereason": "Rason:",
        "revertmove": "balikon",
-       "delete_and_move": "Parâon asin ibalyó",
        "delete_and_move_text": "==Kaipuhan na parâon==\n\nIgwa nang páhina na \"[[:$1]]\". Gusto mong parâon ini tangarig maibalyó?",
        "delete_and_move_confirm": "Iyo, parâon an pahina",
        "delete_and_move_reason": "Pinagpura sa paghimo nin dalan para maibalyo gikan sa \"[[$1]]\"",
index d3f3186..bc80b86 100644 (file)
        "myprivateinfoprotected": "Вы ня маеце дазволу на зьмяненьне ўласных прыватных зьвестак.",
        "mypreferencesprotected": "Вы ня маеце дазволу на зьмяненьне сваіх наладаў.",
        "ns-specialprotected": "Немагчыма рэдагаваць спэцыяльныя старонкі.",
-       "titleprotected": "Стварэньне старонкі з такой назвай было забароненае {{GENDER:$1|ўдзельнікам|ўдзельніцай}} [[User:$1|$1]].\nПрычына забароны: «<em>$2</em>».",
+       "titleprotected": "Стварэньне старонкі з такой назвай было забароненае {{GENDER:$1|ўдзельнікам|ўдзельніцай}} [[User:$1|$1]].\nПрычына забароны: <em>$2</em>.",
        "filereadonlyerror": "Немагчыма зьмяніць файл «$1», бо файлавае сховішча «$2» знаходзіцца ў рэжыме толькі для чытаньня.\n\nСыстэмны адміністратар, які абмежаваў доступ, пазначыў прычыну: «$3».",
        "invalidtitle-knownnamespace": "Няслушны загаловак з прасторай назваў «$2» і тэкстам «$3»",
        "invalidtitle-unknownnamespace": "Няслушны загаловак зь невядомым нумарам прасторы назваў $1 і тэкстам «$2»",
        "nocookieslogin": "{{SITENAME}} выкарыстоўвае файлы-кукі для ўваходу ў сыстэму.\nУ Вашым браўзэры файлы-кукі адключаныя.\nКалі ласка, уключыце іх і паспрабуйце яшчэ раз.",
        "nocookiesfornew": "Рахунак удзельніка ня быў створаны, таму што мы не змаглі пацьвердзіць яго крыніцу. \nУпэўніцеся, што ў Вас уключаныя файлы-кукі, перазагрузіце гэтую старонку і паспрабуйце зноў.",
        "noname": "Вы пазначылі няслушнае імя ўдзельніка.",
-       "loginsuccesstitle": "Ð\9fаÑ\81Ñ\8cпÑ\8fÑ\85овÑ\8b Ñ\9eваÑ\85од Ñ\83 сыстэму",
+       "loginsuccesstitle": "УвайÑ\88лÑ\96 Ñ\9e сыстэму",
        "loginsuccess": "<strong>Цяпер Вы ўвайшлі ў {{GRAMMAR:вінавальны|{{SITENAME}}}} як «$1».</strong>",
        "nosuchuser": "Удзельніка «$1» не існуе.\nВялікія і малыя літары адрозьніваюцца ў імёнах удзельнікаў.\nПраверце напісаньне альбо [[Special:UserLogin/signup|стварыце новы рахунак]].",
        "nosuchusershort": "Удзельніка зь іменем «$1» не існуе. Праверце напісаньне.",
        "createaccount-title": "Стварэньне рахунку ў {{GRAMMAR:месны|{{SITENAME}}}}",
        "createaccount-text": "Нехта стварыў рахунак «$2» у {{GRAMMAR:месны|{{SITENAME}}}} ($4) для Вашага адрасу электроннай пошты. Пароль для гэтага рахунку — «$3». Вам трэба ўвайсьці і зьмяніць Ваш пароль зараз.\n\nВы можаце праігнараваць гэты ліст, калі гэты рахунак быў створаны памылкова.",
        "login-throttled": "Вы зрабілі надта шмат спробаў уваходу ў сыстэму.\nКалі ласка, пачакайце $1 перад тым як паспрабаваць ізноў.",
-       "login-abort-generic": "Не атрымалася ўвайсьці ў сыстэму, скасавана",
+       "login-abort-generic": "Не атрымалася ўвайсьці ў сыстэму — спынена",
        "login-migrated-generic": "Ваш рахунак быў перанесены і вашае імя ўдзельніка больш не існуе ў гэтай вікі.",
        "loginlanguagelabel": "Мова: $1",
        "suspicious-userlogout": "Ваш запыт на выхад з сыстэмы быў адхілены, таму што выглядае, што ён быў дасланы пашкоджаным браўзэрам альбо кэшаваным проксі-сэрвэрам.",
        "newpassword": "Новы пароль:",
        "retypenew": "Паўтарыце новы пароль:",
        "resetpass_submit": "Захаваць пароль і ўвайсьці",
-       "changepassword-success": "Ð\92аÑ\88 Ð¿Ð°Ñ\80олÑ\8c Ð±Ñ\8bÑ\9e Ð¿Ð°Ñ\81Ñ\8cпÑ\8fÑ\85ова Ð·Ñ\8cмененÑ\8b!",
+       "changepassword-success": "Ваш пароль быў зьменены!",
        "changepassword-throttled": "Вы зрабілі зашмат спробаў увайсьці ў сыстэму.\nКалі ласка, пачакайце $1 перад наступнай спробай.",
        "botpasswords": "Паролі робатаў",
        "botpasswords-summary": "<em>Паролі робатаў</em> дазваляюць доступ да рахунку ўдзельніка праз API без выкарыстаньня лагіну і паролю асноўнага рахунку. Правы ўдзельніка пры выкарыстаньні паролю робата могуць быць абмежаваныя.\n\nКалі вы ня ведаеце, навошта вам гэта, мабыць, не рабіце гэтага. Ніхто не павінен прасіць вас згенэраваць такі пароль і перадаць гэты пароль яму.",
        "botpasswords-insert-failed": "Не атрымалася дадаць робата зь імем «$1». Магчыма, ён ужо быў дададзены?",
        "botpasswords-update-failed": "Не атрымалася абнавіць робата зь імем «$1». Магчыма, ён быў выдалены?",
        "botpasswords-created-title": "Пароль робата створаны",
-       "botpasswords-created-body": "Пароль робата «$1» быў пасьпяхова створаны.",
+       "botpasswords-created-body": "Пароль робата для робата з назвай «$1» удзельніка «$2» быў створаны.",
        "botpasswords-updated-title": "Пароль робата абноўлены",
-       "botpasswords-updated-body": "Пароль робата «$1» быў пасьпяхова абноўлены.",
+       "botpasswords-updated-body": "Пароль робата для робата «$1» удзельніка «$2» быў абноўлены.",
        "botpasswords-deleted-title": "Пароль робата выдалены",
-       "botpasswords-deleted-body": "Пароль робата «$1» быў выдалены.",
+       "botpasswords-deleted-body": "Пароль робата для робата «$1» удзельніка «$2» быў выдалены.",
        "botpasswords-newpassword": "Новы пароль для ўваходу пад <strong>$1</strong> — <strong>$2</strong>. <em>Калі ласка, запішыце яго для далейшага выкарыстаньня.</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider недаступны.",
        "botpasswords-restriction-failed": "Уваход ня выкананы праз абмежаваньні на пароль робата",
        "resetpass-no-info": "Для непасрэднага доступу да гэтай старонкі Вам неабходна ўвайсьці ў сыстэму.",
        "resetpass-submit-loggedin": "Зьмяніць пароль",
        "resetpass-submit-cancel": "Скасаваць",
-       "resetpass-wrong-oldpass": "Няслушны часовы альбо цяперашні пароль.\nМагчыма Вы ўжо пасьпяхова зьмянілі Ваш пароль альбо запыталі новы часовы пароль.",
+       "resetpass-wrong-oldpass": "Няслушны часовы альбо цяперашні пароль.\nМагчыма, Вы ўжо пасьпяхова зьмянілі Ваш пароль альбо запыталі новы часовы пароль.",
        "resetpass-recycled": "Калі ласка, зьмяніце ваш пароль на нешта адрознае ад вашага цяперашняга паролю.",
        "resetpass-temp-emailed": "Вы ўвашлі з дапамогай часовага коду, які быў дасланы праз электронную пошту.\nКаб завершыць уваход, вы мусіце ўвесьці новы пароль:",
        "resetpass-temp-password": "Часовы пароль:",
        "accmailtitle": "Пароль адасланы.",
        "accmailtext": "Створаны адвольны пароль для [[User talk:$1|$1]] быў адасланы па адрасе $2. Яго можна зьмяніць на старонцы ''[[Special:ChangePassword|зьмены паролю]]'' пасьля ўваходу.",
        "newarticle": "(Новая)",
-       "newarticletext": "Вы прыйшлі па спасылцы на старонку, якая яшчэ не існуе.\nКаб стварыць яе, напішыце тэкст у полі ніжэй (глядзіце [$1 старонку дапамогі] для дадатковай інфармацыі).\nКалі Вы трапілі сюды памылкова, націсьніце '''назад''' у вашым браўзэры.",
+       "newarticletext": "Вы прыйшлі па спасылцы на старонку, якая яшчэ не існуе.\nКаб стварыць яе, напішыце тэкст у полі ніжэй (глядзіце [$1 старонку дапамогі] для дадатковай інфармацыі).\nКалі Вы трапілі сюды памылкова, націсьніце кнопку «<strong>назад</strong>» у вашым браўзэры.",
        "anontalkpagetext": "----''Гэта старонка гутарак ананімнага ўдзельніка, які яшчэ не стварыў сабе рахунак альбо не ўжывае яго. Таму мы вымушаныя ўжываць лічбавы IP-адрас дзеля ягонай ідэнтыфікацыі. Адзін IP-адрас можа выкарыстоўвацца некалькімі ўдзельнікамі. Калі Вы — ананімны ўдзельнік і лічыце, што атрымалі не прызначаныя Вам камэнтары, калі ласка, [[Special:UserLogin/signup|стварыце рахунак]] альбо [[Special:UserLogin|увайдзіце ў сыстэму]], каб у будучыні пазьбегнуць магчымай блытаніны зь іншымі ананімнымі ўдзельнікамі.''",
-       "noarticletext": "ЦÑ\8fпеÑ\80 Ñ\82Ñ\8dкÑ\81Ñ\82 Ð½Ð° Ð³Ñ\8dÑ\82ай Ñ\81Ñ\82аÑ\80онÑ\86Ñ\8b Ð°Ð´Ñ\81Ñ\83Ñ\82нÑ\96Ñ\87ае.\nÐ\92Ñ\8b Ð¼Ð¾Ð¶Ð°Ñ\86е [[Special:Search/{{PAGENAME}}|паÑ\88Ñ\83каÑ\86Ñ\8c Ð³Ñ\8dÑ\82Ñ\83Ñ\8e Ð½Ð°Ð·Ð²Ñ\83]] Ñ\9e Ñ\96нÑ\88Ñ\8bÑ\85 Ñ\81Ñ\82аÑ\80онкаÑ\85, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Ð¿Ð°Ñ\88Ñ\83каÑ\86Ñ\8c Ñ\83 Ð°Ð´Ð¿Ð°Ð²ÐµÐ´Ð½Ñ\8bÑ\85 Ð¶Ñ\83Ñ\80налаÑ\85 Ð¿Ð°Ð´Ð·ÐµÑ\8fÑ\9e]\nалÑ\8cбо [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} Ñ\80Ñ\8dдагаваць гэтую старонку]</span>.",
+       "noarticletext": "ЦÑ\8fпеÑ\80 Ñ\82Ñ\8dкÑ\81Ñ\82 Ð½Ð° Ð³Ñ\8dÑ\82ай Ñ\81Ñ\82аÑ\80онÑ\86Ñ\8b Ð°Ð´Ñ\81Ñ\83Ñ\82нÑ\96Ñ\87ае.\nÐ\92Ñ\8b Ð¼Ð¾Ð¶Ð°Ñ\86е [[Special:Search/{{PAGENAME}}|паÑ\88Ñ\83каÑ\86Ñ\8c Ð³Ñ\8dÑ\82Ñ\83Ñ\8e Ð½Ð°Ð·Ð²Ñ\83]] Ñ\81Ñ\8fÑ\80од Ñ\96нÑ\88Ñ\8bÑ\85 Ñ\81Ñ\82аÑ\80онак, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Ð¿Ð°Ñ\88Ñ\83каÑ\86Ñ\8c Ñ\83 Ð°Ð´Ð¿Ð°Ð²ÐµÐ´Ð½Ñ\8bÑ\85 Ð¶Ñ\83Ñ\80налаÑ\85 Ð¿Ð°Ð´Ð·ÐµÑ\8fÑ\9e]\nалÑ\8cбо [{{fullurl:{{FULLPAGENAME}}|action=edit}} Ñ\81Ñ\82ваÑ\80Ñ\8bць гэтую старонку]</span>.",
        "noarticletext-nopermission": "Цяпер на гэтай старонцы тэкст адсутнічае.\nВы можаце [[Special:Search/{{PAGENAME}}|пашукаць назву гэтай старонкі]] на іншых старонках, альбо <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} пашукаць зьвязаныя запісы ў журналах]</span>, але ў вас няма дазволу ствараць гэтую старонку.",
        "missing-revision": "Вэрсія старонкі №$1 з назвай «{{FULLPAGENAME}}» не існуе.\n\nЗвычайна гэта здараецца з-за перахода па састарэлай спасылцы на старонку, якая была выдаленая.\nПадрабязнасьці можна знайсьці ў [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале выдаленьняў].",
        "userpage-userdoesnotexist": "Рахунак удзельніка «<nowiki>$1</nowiki>» не зарэгістраваны. Калі ласка, удакладніце, ці жадаеце Вы стварыць/рэдагаваць гэтую старонку.",
        "edit_form_incomplete": "'''Некаторыя часткі формы рэдагаваньня не дасягнулі сэрвэра. Упэўніцеся, што Вашыя рэдагаваньні не пашкоджаныя і паспрабуйце зноў.'''",
        "editing": "Рэдагаваньне: $1",
        "creating": "Стварэньне «$1»",
-       "editingsection": "Рэдагаваньне: $1 (сэкцыя)",
+       "editingsection": "Рэдагаваньне $1 (разьдзел)",
        "editingcomment": "Рэдагаваньне: $1 (новая сэкцыя)",
        "editconflict": "Канфлікт рэдагаваньняў: $1",
        "explainconflict": "Нехта зьмяніў старонку падчас Вашага рэдагаваньня.\nУ верхнім тэкставым акне знаходзіцца цяперашні зьмест старонкі.\nВашыя зьмены паказаныя ў ніжнім акне.\nВам трэба перанесьці Вашыя зьмены ў цяперашні тэкст.\nКалі Вы націсьніце «{{int:savearticle}}», будзе захаваны '''толькі''' тэкст верхняга вакна.",
        "undo-summary-username-hidden": "Вэрсія $1 скасаваная схаваным удзельнікам",
        "cantcreateaccounttitle": "Немагчыма стварыць рахунак",
        "cantcreateaccount-text": "Стварэньне рахункаў з гэтага IP-адрасу ('''$1''') было заблякаванае [[User:$3|$3]].\n\nПрычына блякаваньня пададзеная $3: ''$2''",
-       "cantcreateaccount-range-text": "Стварэньне рахункаў з IP-адрасоў у дыяпазоне '''$1''', у які ўваходзіць ваш IP-адрас ('''$4'''), было забароненае {{GENDER:$3|ўдзельнікам|ўдзельніцай}} [[User:$3|$3]].\n\n{{GENDER:$3|Удзельнікам|Удзельніцай}} $3 была пададзеная наступная прычына: ''$2''.",
+       "cantcreateaccount-range-text": "Стварэньне рахункаў з IP-адрасоў у дыяпазоне <strong>$1</strong>, у які ўваходзіць ваш IP-адрас (<strong>$4</strong>), было забароненае {{GENDER:$3|ўдзельнікам|ўдзельніцай}} [[User:$3|$3]].\n\n{{GENDER:$3|Удзельнікам|Удзельніцай}} $3 была пададзеная наступная прычына: <em>$2</em>.",
        "viewpagelogs": "Паказаць журналы падзеяў для гэтай старонкі",
        "nohistory": "Гісторыя зьменаў для гэтай старонкі адсутнічае.",
        "currentrev": "Цяперашняя вэрсія",
        "revdelete-unsuppress": "Зьняць абмежаваньні з адноўленых вэрсіяў",
        "revdelete-log": "Прычына:",
        "revdelete-submit": "Ужыць для {{PLURAL:$1|1=выбранай вэрсіі|выбраных вэрсіяў}}",
-       "revdelete-success": "'''Бачнасьць вэрсіі пасьпяхова абноўленая.'''",
+       "revdelete-success": "Бачнасьць вэрсіі абноўленая.",
        "revdelete-failure": "'''Немагчыма абнавіць бачнасьць вэрсіі:'''\n$1",
-       "logdelete-success": "'''Бачнасьць падзеі пасьпяхова зьмененая.'''",
+       "logdelete-success": "Бачнасьць падзеі ўсталяваная.",
        "logdelete-failure": "'''Немагчыма ўстанавіць бачнасьць у журнале:'''\n$1",
        "revdel-restore": "Зьмяніць бачнасьць",
        "pagehist": "Гісторыя старонкі",
        "mergehistory-fail-bad-timestamp": "Няслушная метка часу.",
        "mergehistory-fail-invalid-source": "Няслушная старонка-крыніца.",
        "mergehistory-fail-invalid-dest": "Няслушная мэтавая старонка.",
+       "mergehistory-fail-no-change": "Пры аб’яднаньні гісторыі ніводная вэрсія не была аб’яднаная. Калі ласка, праверце парамэтры старонкі і часу.",
        "mergehistory-fail-permission": "Недастаткова правоў для аб’яднаньня гісторыі.",
        "mergehistory-fail-self-merge": "Крынічная і мэтавая старонкі супадаюць.",
+       "mergehistory-fail-timestamps-overlap": "Вэрсіі-крыніцы перакрываюць або ідуць пасьля мэтавых вэрсіяў.",
        "mergehistory-fail-toobig": "Немагчыма аб’яднаць гісторыю, бо будзе перавышаны ліміт у $1 {{PLURAL:$1|1=вэрсію|вэрсіі|вэрсіяў}}, якія будуць перанесеныя.",
        "mergehistory-no-source": "Не існуе крынічнай старонкі $1.",
        "mergehistory-no-destination": "Не існуе мэтавай старонкі $1.",
        "revertmerge": "Разьяднаць",
        "mergelogpagetext": "Ніжэй знаходзіцца сьпіс апошніх аб'яднаньняў гісторыяў старонак.",
        "history-title": "$1 — гісторыя зьменаў",
-       "difference-title": "$1: розьніца паміж вэрсіямі",
+       "difference-title": "Розьніца паміж вэрсіямі «$1»",
        "difference-title-multipage": "«$1» і «$2» — розьніца паміж старонкамі",
        "difference-multipage": "(Розьніца паміж старонкамі)",
        "lineno": "Радок $1:",
        "userrights-changeable-col": "Групы, якія Вы можаце мяняць",
        "userrights-unchangeable-col": "Групы, якія Вы ня можаце мяняць",
        "userrights-conflict": "Канфлікт пры зьмене правоў удзельнікаў! Калі ласка, праверце і захавайце вашыя зьмены.",
-       "userrights-removed-self": "Вы пасьпяхова пазбавілі сябе ўласных правоў. З гэтай прычыны вы больш ня маеце доступу да гэтай старонкі.",
+       "userrights-removed-self": "Вы пазбавілі сябе ўласных правоў. З гэтай прычыны вы больш ня маеце доступу да гэтай старонкі.",
        "group": "Група:",
        "group-user": "Удзельнікі",
        "group-autoconfirmed": "Аўтаматычна пацьверджаныя ўдзельнікі",
        "right-createpage": "стварэньне старонак (акрамя старонак абмеркаваньняў)",
        "right-createtalk": "стварэньне старонак абмеркаваньня",
        "right-createaccount": "стварэньне новых рахункаў удзельніка",
+       "right-autocreateaccount": "Аўтаматычны ўваход з вонкавага рахунку ўдзельніка",
        "right-minoredit": "пазначэньне рэдагаваньняў як дробныя",
        "right-move": "перанос старонак",
        "right-move-subpages": "перанос старонак разам зь іх падстаронкамі",
        "right-changetags": "дадаваць і выдаляць адвольныя [[Special:Tags|меткі]] да асобных вэрсіяў і запісаў у журнале падзеяў",
        "grant-generic": "Набор правоў «$1»",
        "grant-group-page-interaction": "Узаемадзеньне з старонкамі",
+       "grant-group-file-interaction": "Узаемадзеяньне з мэдыяфайламі",
+       "grant-group-watchlist-interaction": "Узаемадзеяньне з вашым сьпісам назіраньня",
+       "grant-group-email": "Адпраўка лістоў электроннай пошты",
+       "grant-group-high-volume": "Выкананьне дзеяньняў з высокай інтэнсіўнасьцю",
+       "grant-group-customization": "Налады і перавагі",
+       "grant-group-administration": "Выкананьне адміністрацыйных дзеяньняў",
+       "grant-group-other": "Розная актыўнасьць",
+       "grant-blockusers": "Блякаваньне і разблякаваньне ўдзельнікаў",
        "grant-createaccount": "Стварыць рахункі",
        "grant-createeditmovepage": "Ствараць, рэдагаваць і пераносіць старонкі",
        "grant-delete": "Выдаляць старонкі, вэрсіі і запісы журналу",
        "grant-editmywatchlist": "Рэдагаваць ваш сьпіс назіраньня",
        "grant-editpage": "Рэдагаваць існыя старонкі",
        "grant-editprotected": "Рэдагаваць абароненыя старонкі",
+       "grant-highvolume": "Рэдагаваньне з высокай інтэнсіўнасьцю",
+       "grant-oversight": "Хаваньне ўдзельнікаў і вэрсіяў старонак",
+       "grant-patrol": "Патруляваньне зьменаў старонак",
+       "grant-protect": "Абарона і зьняцьце абароны старонак",
+       "grant-rollback": "Адкат зьменаў старонак",
+       "grant-sendemail": "Адпраўка лістоў электроннай пошты іншым удзельнікам",
+       "grant-uploadeditmovefile": "Загрузка, замена і перайменаваньне файлаў",
+       "grant-uploadfile": "Загрузка новых файлаў",
+       "grant-basic": "Асноўныя правы",
+       "grant-viewdeleted": "Прагляд выдаленых файлаў і старонак",
+       "grant-viewmywatchlist": "Прагляд вашага сьпісу назіраньня",
        "newuserlogpage": "Журнал стварэньня рахункаў",
        "newuserlogpagetext": "Гэта журнал стварэньня рахункаў удзельнікаў і ўдзельніц.",
        "rightslog": "Журнал правоў удзельнікаў",
        "action-createpage": "стварэньне старонак",
        "action-createtalk": "стварэньне старонак абмеркаваньняў",
        "action-createaccount": "стварэньне гэтага рахунку ўдзельніка",
+       "action-autocreateaccount": "аўтаматычнае стварэньне гэтага рахунку вонкавага ўдзельніка",
        "action-history": "прагляд гісторыі гэтай старонкі",
        "action-minoredit": "пазначэньне гэтай праўкі як дробнай",
        "action-move": "перанос гэтай старонкі",
        "recentchanges-label-bot": "Гэтае рэдагаваньне зробленае робатам",
        "recentchanges-label-unpatrolled": "Гэтае рэдагаваньне яшчэ не было адпатруляванае",
        "recentchanges-label-plusminus": "Памер старонкі зьмяніўся на такую колькасьць байтаў",
-       "recentchanges-legend-heading": "'''Легенда:'''",
+       "recentchanges-legend-heading": "<strong>Легенда:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (глядзіце таксама [[Special:NewPages|сьпіс новых старонак]])",
        "recentchanges-submit": "Паказаць",
        "rcnotefrom": "Ніжэй {{PLURAL:$5|знаходзіцца зьмена|знаходзяцца зьмены}} з <strong>$4 $3</strong> (да <strong>$1</strong> на старонку).",
        "recentchangeslinked-page": "Назва старонкі:",
        "recentchangeslinked-to": "Замест гэтага паказваць зьмены на старонках, што спасылаюцца на гэтую старонку",
        "recentchanges-page-added-to-category": "[[:$1]] дададзеная да катэгорыі",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] і яшчэ {{PLURAL:$2|$2 старонка была дададзеная|$2 старонкі былі дададзеныя|$2 старонак былі дададзеныя}} да катэгорыі",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] і яшчэ [[Special:WhatLinksHere/$1|{{PLURAL:$2|$2 старонка была дададзеная|$2 старонкі былі дададзеныя|$2 старонак былі дададзеныя}}]] да катэгорыі",
        "recentchanges-page-removed-from-category": "[[:$1]] выдаленая з катэгорыі",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] і яшчэ $2 {{PLURAL:$2|старонка была выдаленая|старонкі былі выдаленыя|старонак былі выдаленыя}} з катэгорыі",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] і яшчэ [[Special:WhatLinksHere/$1|$2 {{PLURAL:$2|старонка была выдаленая|старонкі былі выдаленыя|старонак былі выдаленыя}}]] з катэгорыі",
        "autochange-username": "Аўтаматычная зьмена MediaWiki",
        "upload": "Загрузіць файл",
        "uploadbtn": "Загрузіць файл",
        "backend-fail-read": "Немагчыма прачытаць файл $1.",
        "backend-fail-create": "Немагчыма запісаць файл $1.",
        "backend-fail-maxsize": "Не атрымалася запісаць файл $1, бо яго памер перавышае {{PLURAL:$2|$2 байт|$2 байта|$2 байтаў}}.",
-       "backend-fail-readonly": "СÑ\8dÑ\80вÑ\8dÑ\80 Ñ\81Ñ\85овÑ\96Ñ\88Ñ\87а Â«$1» Ñ\83 Ñ\80Ñ\8dжÑ\8bме Ñ\82олÑ\8cкÑ\96 Ñ\87Ñ\8bÑ\82анÑ\8cнÑ\8f. Ð\9fÑ\80Ñ\8bÑ\87Ñ\8bна: Â«$2»",
+       "backend-fail-readonly": "СÑ\85овÑ\96Ñ\88Ñ\87а Â«$1» Ð·Ð½Ð°Ñ\85одзÑ\96Ñ\86Ñ\86а Ñ\9e Ñ\80Ñ\8dжÑ\8bме Ñ\82олÑ\8cкÑ\96 Ñ\87Ñ\8bÑ\82анÑ\8cнÑ\8f. Ð\9fÑ\80Ñ\8bÑ\87Ñ\8bна: <em>$2</em>",
        "backend-fail-synced": "Стан файла «$1» адрозьніваецца ад стану на ўнутраным сэрвэры сховішча",
        "backend-fail-connect": "Немагчыма далучыцца да сэрвэра сховішча «$1».",
        "backend-fail-internal": "Узьнікла невядомая памылка на сэрвэры сховішча «$1».",
        "uploadstash-clear": "Ачысьціць схаваныя файлы",
        "uploadstash-nofiles": "Вы ня маеце схаваных файлаў.",
        "uploadstash-badtoken": "Немагчыма выканаць гэтае дзеяньне, верагодна скончыўся тэрмін дзеяньня Вашага дазволу на рэдагаваньне. Паспрабуйце зноў.",
-       "uploadstash-errclear": "Немагчыма ачысьціць файлы.",
+       "uploadstash-errclear": "Не атрымалася ачысьціць файлы.",
        "uploadstash-refresh": "Абнавіць сьпіс файлаў.",
        "invalid-chunk-offset": "Няслушнае зрушэньне фрагмэнту",
        "img-auth-accessdenied": "Доступ забаронены",
        "log-title-wildcard": "Шукаць назвы, якія пачынаюцца з гэтага тэксту",
        "showhideselectedlogentries": "Паказаць/схаваць выбраныя запісы ў журнале",
        "log-edit-tags": "Рэдагаваць меткі да абраных запісаў у журнале падзеяў",
-       "checkbox-all": "Усе",
+       "checkbox-select": "Выбраць: $1",
+       "checkbox-all": "усе",
+       "checkbox-none": "нічога",
+       "checkbox-invert": "адваротна",
        "allpages": "Усе старонкі",
        "nextpage": "Наступная старонка ($1)",
        "prevpage": "Папярэдняя старонка ($1)",
        "delete-toobig": "Гэтая старонка мае доўгую гісторыю рэдагаваньняў, болей за $1 {{PLURAL:$1|вэрсію|вэрсіі|вэрсіяў}}.\nВыдаленьне такіх старонак было забароненае, каб пазьбегнуць праблемаў у працы {{GRAMMAR:родны|{{SITENAME}}}}.",
        "delete-warning-toobig": "Гэтая старонка мае доўгую гісторыю рэдагаваньняў, больш за $1 {{PLURAL:$1|вэрсію|вэрсіі|вэрсіяў}}.\nЯе выдаленьне можа выклікаць праблемы ў працы базы зьвестак {{GRAMMAR:родны|{{SITENAME}}}}; будзьце асьцярожны.",
        "deleteprotected": "Вы ня можаце выдаліць гэтую старонку, таму што яна абароненая.",
-       "deleting-backlinks-warning": "'''Увага:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|іншыя старонкі]] ўключаюць або спасылаюцца на старонку, якую вы зьбіраецеся выдаліць.",
+       "deleting-backlinks-warning": "<strong>Увага:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|іншыя старонкі]] ўключаюць або спасылаюцца на старонку, якую вы зьбіраецеся выдаліць.",
        "rollback": "Адкаціць рэдагаваньні",
        "rollbacklink": "адкат",
        "rollbacklinkcount": "адкаціць $1 {{PLURAL:$1|рэдагаваньне|рэдагаваньні|рэдагаваньняў}}",
        "rollbackfailed": "Памылка адкату",
        "cantrollback": "Немагчыма адкаціць зьмену; апошні рэдактар — адзіны аўтар гэтай старонкі.",
        "alreadyrolled": "Немагчыма адкаціць апошнюю зьмену [[:$1]], якую {{GENDER:$2|зрабіў|зрабіла}} [[User:$2|$2]] ([[User talk:$2|гутаркі]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); нехта іншы ўжо зьмяніў старонку альбо адкаціў зьмены.\n\nАпошнія зьмены зробленыя [[User:$3|$3]] ([[User talk:$3|гутаркі]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Кароткае апісаньне зьменаў было: «''$1''».",
+       "editcomment": "Кароткае апісаньне зьменаў было: <em>$1</em>.",
        "revertpage": "Рэдагаваньні [[Special:Contributions/$2|$2]] ([[User talk:$2|гутаркі]]) скасаваныя да папярэдняй вэрсіі [[User:$1|$1]]",
        "revertpage-nouser": "Рэдагаваньні схаванага ўдзельніка скасаваныя да папярэдняй вэрсіі {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Адмененыя рэдагаваньні $1;\nвернутая папярэдняя вэрсія $2.",
        "import-nonewrevisions": "Ніякія праўкі не былі імпартаваныя (усе ўжо або былі апрацаваныя, або прапушчаныя праз памылкі).",
        "xml-error-string": "$1 у радку $2, пазыцыі $3 (байт $4): $5",
        "import-upload": "Загрузіць XML-зьвесткі",
-       "import-token-mismatch": "Страчаныя зьвесткі сэсіі. Калі ласка, паспрабуйце ізноў.",
+       "import-token-mismatch": "Страчаныя зьвесткі сэсіі.\n\nМагчыма, вы выйшлі з сыстэмы. <strong>Калі ласка, праверце, што вы ўсё яшчэ знаходзіцеся ў сыстэме і паспрабуйце яшчэ раз</strong>. Калі не спрацуе, паспрабуйце [[Special:UserLogout|выйсьці]] і ўвайсьці яшчэ раз, а таксама праверце, што ваш браўзэр дазваляе кукі-файлы з гэтага сайту.",
        "import-invalid-interwiki": "Немагчыма імпартаваць з вызначанай вікі.",
        "import-error-edit": "Старонка «$1» не была імпартаваная, бо Вы ня маеце правоў на яе рэдагаваньне.",
        "import-error-create": "Старонка «$1» не была імпартаваная, бо Вы ня маеце правоў на яе стварэньне.",
        "tags-delete-not-allowed": "Меткі, вызначаныя пашырэньнем, ня могуць быць выдаленыя, акрамя выпадку, калі пашырэньне дазваляе гэта.",
        "tags-delete-not-found": "Метка «$1» не існуе.",
        "tags-delete-too-many-uses": "Метка «$1» выкарыстаная ў больш чым $2 {{PLURAL:$2|вэрсіі|вэрсіях}}, адпаведна, яна ня можа быць выдаленая.",
-       "tags-delete-warnings-after-delete": "Ð\9cеÑ\82ка Â«$1» Ð±Ñ\8bла Ð¿Ð°Ñ\81Ñ\8cпÑ\8fÑ\85ова Ð²Ñ\8bдаленаÑ\8f, Ð°Ð»Ðµ {{PLURAL:$2|1=аÑ\82Ñ\80Ñ\8bманае Ð½Ð°Ñ\81Ñ\82Ñ\83пнае Ð¿Ð°Ð¿Ñ\8fÑ\80Ñ\8dджанÑ\8cне|аÑ\82Ñ\80Ñ\8bманÑ\8bÑ\8f Ð½Ð°Ñ\81Ñ\82Ñ\83пнÑ\8bÑ\8f Ð¿Ð°Ð¿Ñ\8fÑ\80Ñ\8dджанÑ\8cнÑ\96}}:",
+       "tags-delete-warnings-after-delete": "Метка «$1» была выдаленая, але {{PLURAL:$2|1=атрыманае наступнае папярэджаньне|атрыманыя наступныя папярэджаньні}}:",
        "tags-activate-title": "Актываваць метку",
        "tags-activate-question": "Вы зьбіраецеся актываваць метку «$1».",
        "tags-activate-reason": "Прычына:",
        "tags-edit-revision-legend": "Дадаць ці прыбраць меткі з {{PLURAL:$1|1=гэтай вэрсіі|усіх $1 вэрсіяў}}",
        "tags-edit-logentry-legend": "Дадаць ці прыбраць меткі з {{PLURAL:$1|1=гэтага запісу|усіх $1 запісаў}} журналу",
        "tags-edit-existing-tags": "Наяўныя меткі:",
-       "tags-edit-existing-tags-none": "«Няма»",
+       "tags-edit-existing-tags-none": "<em>Няма</em>",
        "tags-edit-new-tags": "Новыя меткі:",
        "tags-edit-add": "Дадаць гэтыя меткі:",
        "tags-edit-remove": "Выдаліць гэтыя меткі:",
        "tags-edit-reason": "Прычына:",
        "tags-edit-revision-submit": "Дастасаваць зьмены да {{PLURAL:$1|1=гэтай вэрсіі|$1 вэрсіяў}}",
        "tags-edit-logentry-submit": "Дастасаваць зьмены да {{PLURAL:$1|$1 журнальнага запісу|$1 журнальных запісаў}}",
-       "tags-edit-success": "Ð\97Ñ\8cменÑ\8b Ð±Ñ\8bлÑ\96 Ð¿Ð°Ñ\81Ñ\8cпÑ\8fÑ\85ова Ð´Ð°Ñ\81Ñ\82аÑ\81аванÑ\8bÑ\8f.",
+       "tags-edit-success": "Зьмены былі дастасаваныя.",
        "tags-edit-failure": "Гэтыя зьмены ня могуць быць дастасаваныя:\n$1",
        "tags-edit-nooldid-title": "Няслушная мэтавая вэрсія",
        "tags-edit-nooldid-text": "Вы або не пазначылі мэтавую вэрсію для выкананьня гэтай функцыі, або пазначаная вэрсія не існуе.",
        "expand_templates_generate_xml": "Паказаць дрэва аналізу XML",
        "expand_templates_generate_rawhtml": "Паказаць HTML",
        "expand_templates_preview": "Папярэдні прагляд",
-       "expand_templates_preview_fail_html": "<em>Праз тое што {{SITENAME}} мае ўключаным сыры HTML і адбылася страта зьвестак сэсіі, папярэдні прагляд схаваны, як засьцярога ад атакаў з дапамогай JavaScript.</em>\n\n<strong>Калі гэта слушная спроба перадпрагляду, калі ласка, паспрабуйце яшчэ раз.</strong>\nКалі гэта не спрацуе, паспрабуйце [[Special:UserLogout|выйсьці]] і ўвайсьці яшчэ раз.",
+       "expand_templates_preview_fail_html": "<em>Праз тое што {{SITENAME}} мае ўключаным неапрацаваны HTML і адбылася страта зьвестак сэсіі, папярэдні прагляд схаваны, як засьцярога ад атакаў з дапамогай JavaScript.</em>\n\n<strong>Калі гэта слушная спроба перадпрагляду, калі ласка, паспрабуйце яшчэ раз.</strong>\nКалі гэта не спрацуе, паспрабуйце [[Special:UserLogout|выйсьці]] і ўвайсьці яшчэ раз, а таксама праверце, што ваш браўзэр дазваляе кукі-файлы з гэтага сайту.",
        "expand_templates_preview_fail_html_anon": "<em>Праз тое што {{SITENAME}} мае ўключаным сыры HTML і вы не ўвайшлі ў сыстэму, папярэдні прагляд схаваны, як засьцярога ад атакаў з дапамогай JavaScript.</em>\n\n<strong>Калі гэта слушная спроба перадпрагляду, калі ласка, [[Special:UserLogin|увайдзіце ў сыстэму]] і паспрабуйце яшчэ раз.</strong>",
        "pagelanguage": "Зьмена мовы старонкі",
        "pagelang-name": "Старонка",
        "default-skin-not-found": "Упс! Тэма афармленьня па змоўчаньні для вашай вікі, вызначаная ў <code dir=\"ltr\">$wgDefaultSkin</code> як <code>$1</code> недаступная.\n\nВашае ўсталяваньне, падобна, уключае {{PLURAL:$4|наступную тэму афармленьне|наступныя тэмы афармленьня}}. Глядзіце старонку [https://www.mediawiki.org/wiki/Manual:Skin_configuration Інструкцыя:Наладка тэмаў афармленьня] дзеля інфармацыі, як падключыць {{PLURAL:$4|яе|іх і абраць тэму па змоўчаньні}}.\n\n$2\n\n; Калі вы толькі што ўсталявалі MediaWiki:\n: Напэўна вы ўсталявалі з git або наўпрост з крынічнага коду з ужываньнем іншага мэтаду. Гэта чакана. Паспрабуйце ўсталяваць некалькі тэмаў афармленьня з [https://www.mediawiki.org/wiki/Category:All_skins каталёгу тэмаў mediawiki.org]:\n:* Спампуйце [https://www.mediawiki.org/wiki/Download tarball-усталёўнік], які ўтрымлівае некалькі тэмаў і пашырэньняў. Вы можаце скапіяваць каталёг <code>skins/</code> зь яго.\n:* Спампуйце tarball-усталёўнікі для асобных тэмаў з [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Выкарыстайце Git, каб спампаваць тэмы афармленьня].\n: Калі вы распрацоўнік MediaWiki, гэта не павінна ўплываць на вашае git-сховішча.\n\n; Калі вы толькі што абнавілі MediaWiki:\n: MediaWiki вэрсіі 1.24 і навейшыя больш не падключаюць тэмы афармленьня аўтаматычна (глядзіце [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Інструкцыя:Аўтаматычнае выяўленьне тэмаў афармленьня]). Вы можаце дадаць {{PLURAL:$5|наступны радок у|наступныя радкі ў}} <code>LocalSettings.php</code>, каб падключыць {{PLURAL:$5|усталяваную тэму|усе ўсталяваныя тэмы}} афармленьня:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Калі вы толькі што зьмянілі <code>LocalSettings.php</code>:\n: Пераправерце назвы тэмаў афармленьня на наяўнасьць памылак.",
        "default-skin-not-found-no-skins": "Упс! Тэма афармленьня па змоўчаньні для вашай вікі, вызначаная ў <code>$wgDefaultSkin</code> як <code>$1</code>, недаступная.\n\nВы ня маеце ўсталяваных тэмаў афармленьня.\n\n; Калі вы толькі што ўсталявалі або абнавілі MediaWiki:\n: Напэўна вы ўсталявалі з git або наўпрост з крынічнага коду з ужываньнем іншага мэтаду. Гэта чакана. MediaWiki вэрсіі 1.24 і навейшыя ня ўтрымліваюць тэмы афармленьня ў галоўным сховішчы. Паспрабуйце ўсталяваць некалькі тэмаў афармленьня з [https://www.mediawiki.org/wiki/Category:All_skins каталёгу тэмаў mediawiki.org]:\n:* Спампуйце [https://www.mediawiki.org/wiki/Download tarball-усталёўнік], які ўтрымлівае некалькі тэмаў і пашырэньняў. Вы можаце скапіяваць каталёг <code dir=\"ltr\">skins/</code> зь яго.\n:* Спампуйце tarball-усталёўнікі для асобны тэмаў афармленьня з [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Выкарыстайце Git, каб спампаваць тэмы афармленьня].\n: Калі вы распрацоўнік MediaWiki, гэта не павінна ўплываць на вашае git-сховішча. Глядзіце [https://www.mediawiki.org/wiki/Manual:Skin_configuration Інструкцыя:Наладка тэмаў афармленьня] дзеля інфармацыі, як падключыць іх і абраць тэму па змоўчаньні.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (уключана)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''адключана''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>адключана</strong>)",
        "mediastatistics": "Статыстыка мэдыяфайлаў",
        "mediastatistics-summary": "Статыстыка тыпаў загружаных файлаў. Яна ўключае толькі актуальныя вэрсіі файлаў. Старыя і выдаленыя вэрсіі ня ўлічваюцца.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 байт|$1 байты|$1 байтаў}} ($2; $3%)",
index c17f252..df3b02a 100644 (file)
        "title-invalid-interwiki": "Запытаны загаловак зьмяшчае інтэрвікі-спасылку, якую нельга ўжываць у назвах.",
        "title-invalid-talk-namespace": "Запытаная назва старонкі адпавядае старонцы размоў, якая не можа існаваць.",
        "title-invalid-characters": "Запытаная назва старонкі ўтрымлівае недапушчальныя сімвалы: \"$1\".",
+       "title-invalid-relative": "Назва ўтрымлівае адносны шлях. Адносныя назвы старонак (./, ../) недапушчальныя, паколькі яны часта недасяжныя падчас апрацоўкі карыстальніцкім браўзерам.",
        "title-invalid-magic-tilde": "Запытаная назва старонкі ўтрымлівае недапушчальную паслядоўнасць тыльдаў (<nowiki>~~~</nowiki>).",
        "title-invalid-too-long": "Запытаная назва старонкі занадта доўгая. Яна павінна быць не даўжэй за $1 {{PLURAL:$1|байт|байты|байтаў}} у кадаванні UTF-8.",
        "title-invalid-leading-colon": "Запытаная назва старонкі ўтрымлівае недапушчальнае двухкроп'е ў пачатку.",
        "myprivateinfoprotected": "Вам не дазволена рэдагаваць свае асабістыя звесткі.",
        "mypreferencesprotected": "Вам не дазволена рэдагаваць свае настройкі.",
        "ns-specialprotected": "Не дазволена правіць старонкі ў прасторы назваў {{ns:special}}.",
-       "titleprotected": "Назва засцерагаецца ад стварэння; ахова пастаўлена ўдзельнікам: [[User:$1|$1]].\nТлумачэнне пастаноўкі пад ахову: \"<em>$2</em>\".",
+       "titleprotected": "Назва засцерагаецца ад стварэння; ахова пастаўлена ўдзельнікам: [[User:$1|$1]].\nТлумачэнне пастаноўкі пад ахову: <em>$2</em>.",
        "filereadonlyerror": "Немагчыма змяніць файл \"$1\", таму што файлавае сховішча \"$2\" зараз у рэжыме \"толькі для чытання\".\n\nСістэмны адміністратар, які абмежаваў доступ, патлумачыў гэта так: \"$3\".",
        "invalidtitle-knownnamespace": "Недапушчальны загаловак з прасторай імёнаў \"$2\" і тэкстам \"$3\"",
        "invalidtitle-unknownnamespace": "Недапушчальны загаловак з невядомым лікам прасторы імён $1 і тэкстам \"$2\"",
        "changepassword-success": "Ваш пароль паспяхова зменены!",
        "changepassword-throttled": "Занадта многа нядаўніх спроб увайсці пад гэтым уліковым запісам. \nПачакайце $1 перад тым, як спрабаваць ізноў.",
        "botpasswords": "Паролі робатаў",
+       "botpasswords-summary": "<em>Паролі робатаў</em> дазваляюць доступ да ўліковага запісу ўдзельніка праз API без выкарыстання звестак асноўнага акаунта. Дазволы ўдзельніка пры выкарыстанні пароля робата могуць быць абмежаваныя.\n\nКалі вы не ведаеце, навошта гэта вам, хутчэй за ўсё, вам гэта не трэба. Ніхто не павінен прасіць вас стварыць такі пароль і перадаць гэты пароль яму.",
+       "botpasswords-disabled": "Паролі робатаў адключаны.",
+       "botpasswords-no-central-id": "Каб выкарыстоўваць паролі робатаў, вы павінны ўвайсці ў сістэму з цэнтралізаваным уліковым запісам.",
+       "botpasswords-existing": "Наяўныя паролі робатаў",
+       "botpasswords-createnew": "Стварыць новы пароль робата",
+       "botpasswords-editexisting": "Рэдагаваць наяўны пароль робата",
+       "botpasswords-label-appid": "Назва робата:",
+       "botpasswords-label-create": "Стварыць",
+       "botpasswords-label-update": "Абнавіць",
+       "botpasswords-label-cancel": "Скасаваць",
+       "botpasswords-label-delete": "Сцерці",
+       "botpasswords-label-resetpassword": "Скінуць пароль",
+       "botpasswords-label-grants": "Прыдатныя дазволы:",
+       "botpasswords-help-grants": "Кожны дазвол дае доступ да правоў удзельніка, якія ўжо прызначаны ўліковаму запісу удзельніка. Глядзіце [[Special:ListGrants|табліцу дазволаў]] для атрымання дадатковых зьвестак.",
+       "botpasswords-label-restrictions": "Абмежаванні на выкарыстанне:",
+       "botpasswords-label-grants-column": "Дазволена",
+       "botpasswords-bad-appid": "Назва робата \"$1\" недапушчальная.",
+       "botpasswords-insert-failed": "Не ўдалося дадаць робату назву \"$1\". Магчыма, яна ўжо дададзена?",
+       "botpasswords-update-failed": "Не ўдалося змяніць робату назву \"$1\". Можа, яна сцёртая?",
+       "botpasswords-created-title": "Пароль робата створаны",
+       "botpasswords-created-body": "Пароль для робата \"$1\" удзельніка \"$2\" паспяхова створаны.",
+       "botpasswords-updated-title": "Пароль робата абноўлены",
+       "botpasswords-updated-body": "Пароль для робата \"$1\" удзельніка \"$2\" паспяхова абноўлены.",
+       "botpasswords-deleted-title": "Пароль робата сцёрты",
+       "botpasswords-deleted-body": "Пароль для робата \"$1\" удзельніка \"$2\" паспяхова сцёрты.",
+       "botpasswords-newpassword": "Новы пароль для ўваходу пад <strong>$1</strong> — <strong>$2</strong>. <em>Калі ласка, запішыце яго для выкарыстання ў будучыні.</em>",
+       "botpasswords-no-provider": "BotPasswordsSessionProvider недаступны.",
+       "botpasswords-restriction-failed": "Уваход не выкананы з-за абмежаванняў на пароль робата.",
+       "botpasswords-invalid-name": "Паказанае імя ўдзельніка не ўтрымлівае падзяляльнік паролю робата (\"$1\").",
+       "botpasswords-not-exist": "Удзельнік \"$1\" не мае паролю для робата з назвай \"$2\".",
        "resetpass_forbidden": "Не дазволена мяняць паролі",
        "resetpass-no-info": "Трэба ўвайсці ў сістэму, каб звяртацца да гэтай старонкі наўпрост.",
        "resetpass-submit-loggedin": "Змяніць пароль",
        "passwordreset-emailtext-ip": "Нехта (магчыма вы, з IP-адрасу $1) запытаў скід  вашага пароля ў праекце {{SITENAME}} ($4).\n{{PLURAL:$3|Наступны ўліковы запіс звязаны|Наступныя ўліковыя запісы звязаны}} з гэтым адрасам электроннай пошты:\n\n$2\n\n{{PLURAL:$3|Гэты часовы пароль будзе|Гэтыя часовыя паролі будуць}} дзейнічаць {{PLURAL:$5|адзін дзень|$5 дні|$5 дзён}}.\nВы павінны зараз увайсці ў сістэму і абраць новы пароль. Калі вы не рабілі гэтага запыту, ці ўспомнілі свой зыходны пароль і не жадаеце яго мяняць, вы можаце праігнараваць гэтае паведамленне і працягнуць выкарыстоўваць свой стары пароль.",
        "passwordreset-emailtext-user": "Удзельнік $1 з праекта {{SITENAME}} запытаў скід вашага пароля ў праекце {{SITENAME}}\n($4).\n{{PLURAL:$3|Наступны ўліковы запіс звязаны|Наступныя уліковыя запісы звязаны}} з гэтым адрасам электроннай пошты:\n\n$2\n\n{{PLURAL:$3|Гэты часовы пароль будзе|Гэтыя часовыя паролі будуць}} дзейнічаць {{PLURAL:$5|$5 дзень |$5 дні |$5 дзён}}.\nВы павінны зараз увайсці ў сістэму і выбраць новы пароль. Калі вы не рабілі гэтага запыту, ці ўспомнілі свой зыходны пароль і не жадаеце яго мяняць, вы можаце праігнараваць гэтае паведамленне і працягваць выкарыстоўваць свой стары пароль.",
        "passwordreset-emailelement": "Імя ўдзельніка: \n$1\n\nЧасовы пароль: \n$2",
-       "passwordreset-emailsentemail": "Па электроннай пошце быў адпраўлены ліст пра скід пароля.",
+       "passwordreset-emailsentemail": "Калі гэты адрас электроннай пошты злучаны з вашым уліковым запісам, будзе адпраўлены ліст пра скід пароля.",
+       "passwordreset-emailsentusername": "Калі ёсць адрас электроннай пошты, злучаны з гэтым імем удзельніка, то будзе дасланы ліст пра скід пароля.",
        "passwordreset-emailsent-capture": "Ніжэй прыведзены адпраўлены ліст пра скід пароля.",
        "passwordreset-emailerror-capture": "Ніжэй прыведзены створаны ліст пра скід пароля, яго адпраўка не атрымалася па прычыне: $1",
-       "changeemail": "Змяніць адрас электроннай пошты",
-       "changeemail-header": "Змена электроннага адрасу акаўнта",
+       "changeemail": "Змяніць або выдаліць адрас электроннай пошты",
+       "changeemail-header": "Запоўніце гэтую форму, каб змяніць свой адрас электроннай пошты. Калі хочаце выдаліць адрас электроннай пошты, злучаны з вашым уліковым запісам, пакіньце поле новага адраса электроннай пошты пустым пры адпраўцы формы.",
+       "changeemail-passwordrequired": "Вам трэба будзе ўвесці свой пароль, каб пацвердзіць гэта змяненне.",
        "changeemail-no-info": "Каб звяртацца непасрэдна да гэтай старонкі, вам варта прадставіцца сістэме.",
        "changeemail-oldemail": "Бягучы адрас электроннай пошты:",
        "changeemail-newemail": "Новы адрас электроннай пошты:",
+       "changeemail-newemail-help": "Гэта поле павінна застацца пустым, калі вы хочаце выдаліць свой адрас электроннай пошты. Вы не зможаце скінуць забыты пароль і не будзеце атрымліваць лісты з гэтай Вікі пасля выдалення.",
        "changeemail-none": "(няма)",
        "changeemail-password": "Ваш {{SITENAME}} пароль:",
        "changeemail-submit": "Змяніць адрас электроннай пошты:",
        "changeemail-throttled": "Надта многа спроб увайсці пад гэтым рахункам. Пачакайце $1 перад тым, як спрабаваць ізноў.",
+       "changeemail-nochange": "Калі ласка, увядзіце іншы адрас электроннай пошты.",
        "resettokens": "Скінуць токены",
        "resettokens-text": "Вы можаце пераўстанавіць токены, якія дазваляюць атрымліваць доступ да пэўных прыватных звестак, звязаных з вашым уліковым запісам.\n\nВы мусіце скінуць токены, калі выпадкова падзяліліся імі з кім-небудзь, ці ваш уліковы запіс быў скампраметаваны.",
        "resettokens-no-tokens": "Няма чаго скідваць.",
        "anoneditwarning": "<strong>Увага!</strong> Вы не аўтарызаваліся на сайце. Ваш IP-адрас будзе публічна бачным, калі вы будзеце ўносіць любыя праўкі. Калі вы <strong>[$1 ўвойдзеце]</strong> ці <strong>[$2 створыце ўліковы запіс]</strong>, праўкі замест гэтага будуць звязаны з вашым імем карыстальніка, а таксама ў вас з'явяцца іншыя перавагі.",
        "anonpreviewwarning": "''Вы не прайшлі ідэнтыфікацыю Захаванне будзе запісана з вашым IP адрасам у гісторыі правак гэтай старонкі.''",
        "missingsummary": "<strong>Нагадваем:</strong> вы не ўпісалі тлумачэння для сваёй праўкі. Калі націснуць \"{{int:savearticle}}\" яшчэ раз, праўка будзе замацавана без тлумачэння.",
+       "selfredirect": "<strong>Увага:</strong> Вы перанакіроўваеце старонку на самую сябе.\nМагчыма, вы ўказалі няправільную мэту перанакіравання, ці правіце не тую старонку.\nКалі націсніце \"{{int:savearticle}}\" ізноў, перанакіраванне ўсё ж будзе створана.",
        "missingcommenttext": "Калі ласка, увядзіце ніжэй каментарый.",
        "missingcommentheader": "'''Напамінанне:''' вы нічога не ўпісалі ў тэму/загаловак гэтай заўвагі.\nПры паўторным націсканні кнопкі '{{int:savearticle}}' ваша праўка будзе запісана з пустым загалоўкам.",
        "summary-preview": "Перадпаказ апісання:",
        "subject-preview": "Перадпаказ тэмы/загалоўка:",
+       "previewerrortext": "Здарылася памылка пры спробе папярэдняга прагляду вашых змяненняў.",
        "blockedtitle": "Удзельнік заблакаваны",
        "blockedtext": "'''Ваша імя ўдзельніка або адрас IP былі пастаўлены пад блок.'''\n\nБлок быў пастаўлены ўдзельнікам: $1. Пададзеная прычына: ''$2''.\n\n* Блок пастаўлены: $8\n* Блок канчаецца: $6\n* Атрымальнік блока: $7\n\nВы можаце звярнуцца да $1 або да аднаго з іншых [[{{MediaWiki:Grouppage-sysop}}|адміністратараў]], каб паразмаўляць пра гэты блок.\nВы не зможаце дзеля гэтага карыстацца функцыяй ''{{:{{ns:mediawiki}}:emailuser/be}}'', калі гэта вам забаронена, або калі вы не наставілі правільнага пацверджанага адрасу эл.пошты ў сваіх [[Special:Preferences|настаўленнях]].\nВаш адрас IP: $3, нумар блоку: #$5. Падавайце ўсе гэтыя звесткі ў кожным сваім звароце адносна гэтага блоку.",
        "autoblockedtext": "Ваш адрас IP быў аўтаматычна заблакаваны, таму што ім карыстаўся ўдзельнік, заблакаваны адміністратарам $1.\nПададзеная прычына блоку:\n\n:''$2''\n\n* Блок пастаўлены: $8\n* Блок канчаецца: $6\n* Атрымальнік блоку: $7\n\nВы можаце звярнуцца да $1 або да аднаго з іншых [[{{MediaWiki:Grouppage-sysop}}|адміністратараў]], каб паразмаўляць пра гэты блок.\n\nВы не зможаце дзеля гэтага карыстацца функцыяй ''{{:{{ns:mediawiki}}:emailuser/be}}'', калі гэта вам забаронена, або калі вы не наставілі правільнага пацверджанага адрасу эл.пошты ў сваіх [[Special:Preferences|настаўленнях]].\n\nВаш адрас IP: $3. Ваш нумар блоку: $5. Падавайце ўсе гэтыя звесткі ў кожным сваім звароце адносна гэтага блоку.",
        "previewnote": "<strong>Памятайце, гэта толькі папярэдні паказ.</strong> Праўкі яшчэ не замацаваныя!",
        "continue-editing": "Працягнуць рэдагаванне",
        "previewconflict": "Гэта папярэдні паказ магчымага выніку замацоўвання актуальнага стану крынічнага тэксту ў верхнім тэкставым полі.",
-       "session_fail_preview": "'''Не ўдалося апрацаваць вашу праўку, таму што сервер згубіў звесткі аб вашым сеансе.\nПаспрабуйце, калі ласка, ізноў.\nКалі і тады не атрымаецца, паспрабуйце [[Special:UserLogout|выйсці з сістэмы]] і зайсці ізноў.'''",
-       "session_fail_preview_html": "'''Не ўдалося апрацаваць вашу праўку з-за таго, што згубіліся даныя аб сеансе.'''\n\n''Перадпаказ не зроблены, бо на пляцоўцы {{SITENAME}} дазволены сыры код HTML, што робіць магчымымі атакі праз Яваскрыпт.''\n\n'''Калі гэта нармальная спроба праўкі, паспрабуйце паўтарыць запісванне. Калі і гэта не дапаможа, паспрабуйце [[Special:UserLogout|выйсці з сістэмы]] і ўвайсці ізноў.'''",
+       "session_fail_preview": "Не ўдалося апрацаваць вашу праўку, таму што сервер згубіў звесткі аб вашым сеансе.\n\nМагчыма, вы выйшлі з сістэмы. <strong>Калі ласка, праверце, што вы ўвайшлі ў сістэму і паспрабуйце яшчэ раз.</strong>\nКалі і тады не атрымаецца, паспрабуйце [[Special:UserLogout|выйсці з сістэмы]] і зайсці ізноў, таксама праверце, што ваш браўзер дазваляе кукі з гэтага сайта.",
+       "session_fail_preview_html": "Не ўдалося апрацаваць вашу праўку з-за таго, што згубіліся даныя аб сеансе.\n\n<em>Перадпаказ не зроблены, бо на пляцоўцы {{SITENAME}} дазволены сыры код HTML, што робіць магчымымі атакі праз Яваскрыпт.</em>\n\n<strong>Калі гэта нармальная спроба праўкі, паспрабуйце паўтарыць запісванне.</strong>\nКалі і гэта не дапаможа, паспрабуйце [[Special:UserLogout|выйсці з сістэмы]] і ўвайсці ізноў, таксама праверце, што ваш браўзер дазваляе кукі з гэтага сайта.",
        "token_suffix_mismatch": "'''Ваша праўка была адхілена, каб пазбегнуць сапсавання тэксту старонкі, таму што ваш браўзер папсаваў знакі прыпынку ў квітку праўкі.\nМагчыма, прычына ў выкарыстанні вамі ананімнага проксі-сервера, праграмы якога працуюць некарэктна.'''",
        "edit_form_incomplete": "'''Некаторыя часткі формы рэдагавання не дасягнулі сервера. Упэўніцеся, што Вашыя рэдагаванні не пашкоджаныя і паспрабуйце зноў.'''",
        "editing": "Правім $1",
        "yourdiff": "Адрозненні",
        "copyrightwarning": "Заўважце, што ўсе ўклады на {{SITENAME}} лічацца выданымі на ўмовах $2 (бач падрабязнасці на $1). Калі вы не жадаеце, каб вашыя матэрыялы бязлітасна правіліся, і свабодна распаўсюджваліся, то і не аддавайце іх сюды.<br />\nТаксама вы нам абяцаеце, што напісалі гэта самі, або скапіравалі з рэсурсу, які знаходзіцца ў публічнай уласнасці, або з аналагічнага свабоднага рэсурсу.\n'''НЕ КЛАДЗІЦЕ СЮДЫ, БЕЗ АДПАВЕДНАГА ДАЗВОЛУ, МАТЭРЫЯЛУ, ЯКІ АХОЎВАЕЦЦА АЎТАРСКІМ ПРАВАМ!'''",
        "copyrightwarning2": "Заўважце, што кожны ўклад на {{SITENAME}} можа быць папраўлены, зменены або выдалены іншымі ўдзельнікамі. Калі вы не жадаеце, каб вашыя матэрыялы бязлітасна правіліся, то і не давайце іх сюды.<br />\nТаксама вы нам абяцаеце, што напісалі гэта самі, або скапіравалі з рэсурсу, які знаходзіцца ў публічнай уласнасці, або з аналагічнага свабоднага рэсурсу (бач падрабязнасці на $1).\n'''НЕ КЛАДЗІЦЕ СЮДЫ, БЕЗ АДПАВЕДНАГА ДАЗВОЛУ, МАТЭРЫЯЛУ, ЯКІ АХОЎВАЕЦЦА АЎТАРСКІМ ПРАВАМ!'''",
+       "editpage-cannot-use-custom-model": "Мадэль зместу гэтай старонкі не можа быць зменена.",
        "longpageerror": "'''Памылка: Аб’ём тэксту, які Вы спрабуеце запісаць складае $1 {{PLURAL:$1|кілабайт|кілабайты|кілабайтаў}}, што болей устаноўленага абмежавання на $2 {{PLURAL:$2|кілабайт|кілабайты|кілабайтаў}}.'''\nСтаронка не можа быць захаваная.",
-       "readonlywarning": "<strong>Увага: Ð·Ð°Ñ\80аз Ð²Ñ\8b Ð½Ðµ Ð¼Ð¾Ð¶Ð°Ñ\86е Ð·Ð°Ð¿Ñ\96Ñ\81аÑ\86Ñ\8c Ñ\81вае Ð¿Ñ\80аÑ\9eкÑ\96, Ñ\82амÑ\83 Ñ\88Ñ\82о Ð±Ð°Ð·Ð° Ð·Ð²ÐµÑ\81Ñ\82ак Ð·Ð°Ñ\87Ñ\8bнена Ð½Ð° Ð°Ð±Ñ\81лÑ\83гоÑ\9eванне.</strong>\nÐ\9cагÑ\87Ñ\8bма, Ð²Ð°Ñ\80Ñ\82а Ð¿ÐµÑ\80анеÑ\81Ñ\86Ñ\96 Ð²Ð°Ñ\88 Ñ\82Ñ\8dкÑ\81Ñ\82 Ñ\83 Ð°Ñ\81обнÑ\8b Ñ\84айл Ñ\96 Ð·Ð°Ð¿Ñ\96Ñ\81аÑ\86Ñ\8c Ð½Ð° Ð¿Ð¾Ñ\82Ñ\8bм.\n\nÐ\90дміністратар, які зачыніў базу, растлумачыў гэта так: $1",
+       "readonlywarning": "<strong>Увага: Ð·Ð°Ñ\80аз Ð²Ñ\8b Ð½Ðµ Ð¼Ð¾Ð¶Ð°Ñ\86е Ð·Ð°Ð¿Ñ\96Ñ\81аÑ\86Ñ\8c Ñ\81вае Ð¿Ñ\80аÑ\9eкÑ\96, Ñ\82амÑ\83 Ñ\88Ñ\82о Ð±Ð°Ð·Ð° Ð·Ð²ÐµÑ\81Ñ\82ак Ð·Ð°Ñ\87Ñ\8bнена Ð½Ð° Ð°Ð±Ñ\81лÑ\83гоÑ\9eванне.</strong>\nÐ\9cагÑ\87Ñ\8bма, Ð²Ð°Ñ\80Ñ\82а Ð¿ÐµÑ\80анеÑ\81Ñ\86Ñ\96 Ð²Ð°Ñ\88 Ñ\82Ñ\8dкÑ\81Ñ\82 Ñ\83 Ð°Ñ\81обнÑ\8b Ñ\84айл Ñ\96 Ð·Ð°Ð¿Ñ\96Ñ\81аÑ\86Ñ\8c Ð½Ð° Ð¿Ð¾Ñ\82Ñ\8bм.\n\nСÑ\96Ñ\81Ñ\82Ñ\8dмнÑ\8b Ð°дміністратар, які зачыніў базу, растлумачыў гэта так: $1",
        "protectedpagewarning": "'''УВАГА: старонка пастаўлена пад ахову, таму яе могуць правіць толькі адміністратары.'''\nНіжэй паказаны апошні запіс з адпаведнага журнала:",
        "semiprotectedpagewarning": "'''Увага:''' старонка пастаўлена пад ахову, таму яе могуць правіць толькі зарэгістраваныя ўдзельнікі («паў-ахова»). Ніжэй паказаны апошні запіс з адпаведнага журнала:",
-       "cascadeprotectedwarning": "'''Увага:''' гэтая старонка ахоўваецца, таму яе могуць правіць толькі ўдзельнікі з правамі адміністратара. Прычына аховы: улучэнне гэтай старонкі ў {{PLURAL:$1|старонку, якая стаіць|старонкі, якія стаяць}} пад каскаднай аховай:",
+       "cascadeprotectedwarning": "<strong>Увага:</strong> гэтая старонка ахоўваецца, таму яе могуць правіць толькі ўдзельнікі з правамі адміністратара. Прычына аховы: улучэнне гэтай старонкі ў {{PLURAL:$1|старонку, якая стаіць|старонкі, якія стаяць}} пад каскаднай аховай:",
        "titleprotectedwarning": "'''УВАГА: старонка пастаўлена пад ахову, таму яе могуць ствараць толькі ўдзельнікі з [[Special:ListGroupRights|адмысловымі правамі]].'''\nНіжэй паказаны апошні запіс з адпаведнага журнала:",
        "templatesused": "Шабло{{PLURAL:$1|н|ны}} на гэтай старонцы:",
        "templatesusedpreview": "Шабло{{PLURAL:$1|н у|ны ў}} гэтым перадпаказе:",
        "permissionserrors": "Памылка доступу",
        "permissionserrorstext": "Вам не дазволена гэтага рабіць, з наступн{{PLURAL:$1|ай прычыны|ых прычын}}:",
        "permissionserrorstext-withaction": "Вам не дазволена $2, з-за наступ{{PLURAL:$1|най прычыны|ных прычын}}:",
+       "contentmodelediterror": "Вы не можаце правіць гэту версію, таму што яе мадэль зместу — <code>$1</code>, што адрозніваецца ад цяперашняй мадэлі зместу старонкі, <code>$2</code>.",
        "recreate-moveddeleted-warn": "<strong>Увага: Вы аднаўляеце старонку, якая раней была сцёрта.</strong>\n\nТрэба падумаць, ці варта далей працаваць з гэтай старонкай.\nВось журнал сціранняў і пераносаў для гэтай старонкі:",
        "moveddeleted-notice": "Гэтая старонка была сцёртая.\nНіжэй паказаны журнал сціранняў і пераносаў для гэтай старонкі.",
+       "moveddeleted-notice-recent": "Выбачайце, гэта старонка была нядаўна сцёрта (цягам апошніх 24 гадзін).\nЖурналы сціранняў і пераносаў для гэтай старонкі пададзены ніжэй для даведкі.",
        "log-fulllog": "Паглядзець поўны лог",
        "edit-hook-aborted": "Праўка спынена хукам (hook).\nТлумачэнняў не было.",
        "edit-gone-missing": "Не ўдалося абнавіць старонку.\nЗдаецца, што яна была сцёртая.",
        "content-model-text": "звычайны тэкст",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "content-json-empty-object": "Пусты аб'ект",
+       "content-json-empty-array": "Пусты масіў",
+       "duplicate-args-warning": "<strong>Увага:</strong> [[:$1]] выклікае [[:$2]] з больш чым адным значэннем для параметра \"$3\". Толькі апошняе з пададзеных значэнняў будзе ўжытае.",
+       "duplicate-args-category": "Старонкі, якія выкарыстоўваюць задубляваныя параметры ў шаблонах",
+       "duplicate-args-category-desc": "Старонка ўтрымлівае шаблоны з задубляванымі параметрамі, напрыклад, <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> або <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Увага: На старонцы занадта шмат працаёмістых зваротаў да парсера.\n\nТрэба, каб зваротаў было меней за $2, а зараз ёсць $1.<!--In this particular lingual case, there's no need for plurals at all, so let's make checker happy by adding commented out {{PLURAL:$2|call|calls}} and {{PLURAL:$1|is now $1 call|are now $1 calls}}-->",
        "expensive-parserfunction-category": "Старонкі, дзе шмат працаёмістых зваротаў да парсера",
        "post-expand-template-inclusion-warning": "Увага: аб'ём улучанага шаблона занадта вялікі.\nНекаторыя шаблоны не будуць улучаныя.",
        "undo-summary-username-hidden": "Адкат версіі $1 схаванага ўдзельніка",
        "cantcreateaccounttitle": "Немагчыма стварыць рахунак",
        "cantcreateaccount-text": "Стварэнне рахункаў было забаронена для гэтага адрасу IP ('''$1''').\n\nЗабарона зроблена ўдзельнікам [[User:$3|$3]], з такім тлумачэннем: ''$2''",
-       "cantcreateaccount-range-text": "Стварэнне ўліковага запісу ўдзельніка з IP-адрасоў у дыяпазоне '''$1''', што ўключае ваш адрас IP ('''$4'''), было забаронена {{GENDER:$3|ўдзельнікам|ўдзельніцай}} [[User:$3|$3]].\n\n$3 {{GENDER:$3|патлумачыў|патлумачыла}} гэта так: ''$2''",
+       "cantcreateaccount-range-text": "Стварэнне ўліковага запісу ўдзельніка з IP-адрасоў у дыяпазоне <strong>$1</strong>, што ўключае ваш адрас IP (<strong>$4</strong>), было забаронена {{GENDER:$3|ўдзельнікам|ўдзельніцай}} [[User:$3|$3]].\n\n$3 {{GENDER:$3|патлумачыў|патлумачыла}} гэта так: <em>$2</em>",
        "viewpagelogs": "Паказаць журналы для гэтай старонкі",
        "nohistory": "Старонка не мае гісторыі правак.",
        "currentrev": "Актуальная версія",
        "history-feed-description": "Гісторыя версій гэтай старонкі",
        "history-feed-item-nocomment": "$1 на $2",
        "history-feed-empty": "Не знойдзена такая старонка.\nМагчыма, яна была сцёртая або названая іначай.\nПаспрабуйце [[Special:Search|пашукаць яе на гэтай Вікі]] сярод новых старонак.",
+       "history-edit-tags": "Правіць біркі абраных версій",
        "rev-deleted-comment": "(выдаленае кароткае апісанне змен)",
        "rev-deleted-user": "(удзельнік выдалены)",
        "rev-deleted-event": "(падрабязнасці з журнала сцёртыя)",
        "revdelete-legend": "Настроіць абмежаванні бачнасці",
        "revdelete-hide-text": "Тэкст версіі",
        "revdelete-hide-image": "Схаваць змест файла",
-       "revdelete-hide-name": "Ð\9dе Ð¿Ð°ÐºÐ°Ð·Ð²Ð°Ñ\86Ñ\8c Ð´Ð·ÐµÑ\8fннÑ\8f Ñ\96 Ð¼Ñ\8dÑ\82ы",
+       "revdelete-hide-name": "Ð\9dе Ð¿Ð°ÐºÐ°Ð·Ð²Ð°Ñ\86Ñ\8c Ð¼Ñ\8dÑ\82Ñ\83 Ñ\96 Ð¿Ð°Ñ\80амеÑ\82Ñ\80ы",
        "revdelete-hide-comment": "Тлумачэнне праўкі",
        "revdelete-hide-user": "Імя ўдзельніка /адрас IP",
        "revdelete-hide-restricted": "Таксама абмяжоўваць такім чынам адміністратараў",
        "revdelete-submit": "Прымяніць да азначан{{PLURAL:$1|ай ерсіі|ых версій}}",
        "revdelete-success": "Паспяхова абноўлена бачнасць версіі.",
        "revdelete-failure": "'''Не ўдалося абнавіць бачнасць версіі:'''\n$1",
-       "logdelete-success": "'''Бачнасць падзеі настаўленая паспяхова.'''",
+       "logdelete-success": "Бачнасць падзеі настаўленая паспяхова.",
        "logdelete-failure": "'''Бачнасць журнала не ўсталявана:'''\n$1",
        "revdel-restore": "памяняць бачнасць",
        "pagehist": "Гісторыя старонкі",
        "mergehistory-empty": "Няма версій, якія можна аб'яднаць.",
        "mergehistory-done": "$3 {{PLURAL:$3|версія|версій}} $1 паспяхова аб'яднаныя ў склад [[:$2]].",
        "mergehistory-fail": "Немагчыма аб'яднаць гісторыі, праверце зададзеныя назву і час.",
+       "mergehistory-fail-bad-timestamp": "Недапушчальная пазнака часу.",
+       "mergehistory-fail-invalid-source": "Недапушчальная старонка-крыніца.",
+       "mergehistory-fail-invalid-dest": "Недапушчальная старонка-мэта.",
+       "mergehistory-fail-no-change": "Пры аб'яднанні гісторыі ніводная версія не была аб'яднана. Калі ласка, праверце параметры старонкі і часу.",
+       "mergehistory-fail-permission": "Недастаткова правоў для аб'яднання гісторыі.",
+       "mergehistory-fail-self-merge": "Крынічная старонка і старонка-прызначэнне супадаюць.",
+       "mergehistory-fail-timestamps-overlap": "Крынічныя версіі перакрываюць або ідуць пасля версій прызначэння.",
        "mergehistory-fail-toobig": "Немагчыма аб'яднаць гісторыі правак, бо для гэтага трэба перанесці больш за ліміт у $1 {{PLURAL:$1|версію|версіі|версій}}.",
        "mergehistory-no-source": "Не існуе крынічная старонка $1.",
        "mergehistory-no-destination": "Не існуе мэтавая старонка $1.",
        "notextmatches": "Нічога не знойдзена ў тэкстах старонак",
        "prevn": "папярэдн. {{PLURAL:$1|$1}}",
        "nextn": "наступ. {{PLURAL:$1|$1}}",
+       "prev-page": "папярэдняя старонка",
+       "next-page": "наступная старонка",
        "prevn-title": "Папярэдні{{PLURAL:$1| вынік|я $1 вынікі(аў)}}",
        "nextn-title": "Наступны{{PLURAL:$1| вынік|я $1 вынікі(аў)}}",
        "shown-title": "Паказваць $1 {{PLURAL:$1|вынік|вынікі(аў)}} на старонку",
        "search-result-category-size": "{{PLURAL:$1|$1 элемент|$1 элемента|$1 элементаў}} ({{PLURAL:$2|$2 падкатэгорыя|$2 падкатэгорыі|$2 падкатэгорый}}, {{PLURAL:$3|$3 файл|$3 файла|$3 файлаў}})",
        "search-redirect": "(перасылка $1)",
        "search-section": "(падраздзел $1)",
+       "search-category": "(катэгорыя $1)",
        "search-file-match": "(адпавядае змесціву файла)",
        "search-suggest": "Ці хацелі вы сказаць: $1",
+       "search-rewritten": "Паказаны вынікі для $1. Замест гэтага шукаць $2.",
        "search-interwiki-caption": "Сумежныя праекты",
        "search-interwiki-default": "Вынікі з $1:",
        "search-interwiki-more": "(яшчэ)",
        "showingresultsinrange": "Ніжэй паказаны да {{PLURAL:$1|<strong>1</strong> выніку|<strong>$1</strong> вынікаў}} у дыяпазоне ад #<strong>$2</strong> да #<strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Вынік <strong>$1</strong> з <strong>$3</strong>|Вынікі <strong>$1 — $2</strong> з <strong>$3</strong>}}",
        "search-nonefound": "Нічога не было знойдзена.",
+       "search-nonefound-thiswiki": "Няма вынікаў, якія б адпавядалі такому запыту на гэтым сайце.",
        "powersearch-legend": "Падрабязны пошук",
        "powersearch-ns": "Шукаць у прасторах назваў:",
        "powersearch-togglelabel": "Пазначыць:",
        "prefs-personal": "Удзельнік",
        "prefs-rc": "{{:{{ns:mediawiki}}:Recentchanges/be}}",
        "prefs-watchlist": "Спіс назірання",
+       "prefs-editwatchlist": "Правіць спіс назірання",
+       "prefs-editwatchlist-label": "Правіць запісы ў вашым спісе назірання:",
+       "prefs-editwatchlist-edit": "Прагляд і сціранне старонак з вашага спісу назірання",
+       "prefs-editwatchlist-raw": "Правіць нефарматаваны спіс назірання",
+       "prefs-editwatchlist-clear": "Ачысціць ваш спіс назірання",
        "prefs-watchlist-days": "За колькі дзён паказваць змяненні ў назіраным:",
        "prefs-watchlist-days-max": "(найбольш $1 {{PLURAL:$1|дзень|дні|дзён}})",
        "prefs-watchlist-edits": "Колькасць правак для паказу ў разгорнутым выглядзе:",
        "prefs-watchlist-token": "Сакрэтны ключ для RSS:",
        "prefs-misc": "Рознае",
        "prefs-resetpass": "Змяніць пароль",
-       "prefs-changeemail": "Змяніць e-mail",
+       "prefs-changeemail": "Змяніць або выдаліць адрас электроннай пошты",
        "prefs-setemail": "Устаноўка электроннага адраса",
        "prefs-email": "Эл.пошта",
        "prefs-rendering": "Від",
        "rows": "Радкі:",
        "columns": "Калонкі:",
        "searchresultshead": "Пошук",
-       "stub-threshold": "Парог для паказу спасылкі <a href=\"#\" class=\"stub\">як на пачатковы артыкул</a> (у байтах):",
+       "stub-threshold": "Парог для паказу спасылкі як на пачатковы артыкул ($1):",
+       "stub-threshold-sample-link": "прыклад",
        "stub-threshold-disabled": "Не ўключана",
        "recentchangesdays": "За колькі дзён паказваць {{lc:{{:{{ns:mediawiki}}:recentchanges/be}}}}:",
        "recentchangesdays-max": "(найбольш $1 {{PLURAL:$1|дзень|дзён}})",
        "prefs-help-recentchangescount": "Гэта ўключае ў сябе апошнія змены, гісторыі старонак, журналы.",
        "prefs-help-watchlist-token2": "Гэта сакрэтны ключ к сеціўнай стужцы з вашага спіса назірання.\nКожны, хто ведае гэты ключ, будзе мець магчымасць чытаць ваш спіс назірання, таму не дзяліцеся ім.\nКалі трэба, можна [[Special:ResetTokens|скінуць яго]].",
        "savedprefs": "Настройкі замацаваныя.",
+       "savedrights": "Дазволы {{GENDER:$1|ўдзельніка|ўдзельніцы}} $1 захаваныя.",
        "timezonelegend": "Часавы пояс:",
        "localtime": "Мясцовы час:",
        "timezoneuseserverdefault": "Карыстацца настаўленнямі серверу ($1)",
        "prefs-tokenwatchlist": "Токен",
        "prefs-diffs": "Розніцы",
        "prefs-help-prefershttps": "Гэта настройка пачне дзейнічаць па наступным уваходзе ў сістэму.",
+       "prefswarning-warning": "Вы зрабілі змены ў сваіх настройках, якія яшчэ не былі запісаныя.\nКалі вы закрыеце гэту старонку, не націснуўшы \"$1\", вашы настройкі не будуць абноўлены.",
        "prefs-tabs-navigation-hint": "Падказка: Вы можаце карыстацца клавішамі са стрэлкамі ўлева і ўправа для навігацыі паміж карткамі ў спісе картак.",
        "userrights": "Распараджэнне правамі ўдзельніка",
        "userrights-lookup-user": "Распараджацца групамі ўдзельнікаў",
        "userrights-user-editname": "Увядзіце імя ўдзельніка:",
-       "editusergroup": "Правіць групы ўдзельнікаў",
-       "editinguser": "Змена праў удзельніка '''[[User:$1|$1]]''' $2",
+       "editusergroup": "Правіць групы {{GENDER:$1|ўдзельнікаў|ўдзельніц}}",
+       "editinguser": "Змена праў {{GENDER:$1|удзельніка|удзельніцы}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Распараджацца групамі ўдзельніка",
-       "saveusergroups": "Захаваць групы ўдзельнікаў",
+       "saveusergroups": "Захаваць групы {{GENDER:$1|ўдзельнікаў|ўдзельніц}}",
        "userrights-groupsmember": "У групе:",
        "userrights-groupsmember-auto": "Няяўны член:",
        "userrights-groups-help": "Тут можна мяняць групы, да якіх належыць гэты ўдзельнік.\n* Адзначанае поле выбару азначае ўваходжанне ўдзельніка ў пэўную групу.\n* Чыстае поле выбару азначае неўваходжанне.\n* Знак * азначае, што нельга выняць удзельніка з групы, калі ён ужо там, або наадварот.",
        "userrights-changeable-col": "Групы, якія вам дазволена мяняць",
        "userrights-unchangeable-col": "Групы, якія вам не дазволена мяняць",
        "userrights-conflict": "Канфлікт змянення ўдзельніцкіх дазволаў! Калі ласка, праверце і пацвердзіце змены.",
-       "userrights-removed-self": "Ð\92Ñ\8b Ð¿Ð°Ñ\81пÑ\8fÑ\85ова Ð²Ñ\8bдалÑ\96лÑ\96 Ñ\81вае Ñ\9eлаÑ\81нÑ\8bÑ\8f Ð¿Ñ\80авÑ\8b. Ð¢Ð°ÐºÑ\96м Ñ\87Ñ\8bнам, Ð\92Ñ\8b Ð±Ð¾Ð»Ñ\8cÑ\88 Ð½Ðµ Ð·Ð¼Ð¾Ð¶Ð°Ñ\86е Ð°Ñ\82Ñ\80Ñ\8bмаÑ\86Ñ\8c Ð´Ð¾Ñ\81Ñ\82Ñ\83п Ð´Ð° Ð³Ñ\8dÑ\82ай Ñ\81Ñ\82аÑ\80онкÑ\96.",
+       "userrights-removed-self": "Вы выдалілі свае ўласныя правы. Такім чынам, Вы больш не зможаце атрымаць доступ да гэтай старонкі.",
        "group": "Група:",
        "group-user": "Удзельнікі",
        "group-autoconfirmed": "Аўта-пацверджаныя ўдзельнікі",
        "right-createpage": "Ствараць старонкі (не размоўныя)",
        "right-createtalk": "Ствараць размоўныя старонкі",
        "right-createaccount": "Ствараць новыя рахункі ўдзелу",
+       "right-autocreateaccount": "Аўтаматычны ўваход у сістэму з вонкавага ўліковага запісу ўдзельніка",
        "right-minoredit": "Азначаць праўкі як дробныя",
        "right-move": "Пераносіць старонкі",
        "right-move-subpages": "Пераносіць старонкі разам з пад-старонкамі",
        "right-protect": "Мяняць узроўні аховы і правіць старонкі пад каскаднай аховай",
        "right-editprotected": "Правіць старонкі пад аховай \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "Правіць старонкі, што пад аховай \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editcontentmodel": "Рэдагаваць мадэль змесціва старонкі",
        "right-editinterface": "Правіць карыстальніцкі інтэрфейс",
        "right-editusercssjs": "Правіць файлы CSS і JS іншых удзельнікаў",
        "right-editusercss": "Правіць файлы CSS іншых удзельнікаў",
        "right-override-export-depth": "Экспартаваць старонкі, у тым ліку звязаныя, да глыбіні спасылак 5.",
        "right-sendemail": "Адпраўляць электронныя лісты іншым удзельнікам",
        "right-passwordreset": "Бачыць электронныя лісты аб змяненні пароля",
+       "right-managechangetags": "Ствараць і выдаляць [[Special:Tags|біркі]] з базы даных",
+       "right-applychangetags": "Прымяняць [[Special:Tags|біркі]] са сваімі праўкамі",
+       "right-changetags": "Дадаваць і выдаляць адвольныя [[Special:Tags|біркі]] да асобных версій і запісаў у журнале падзей",
+       "grant-generic": "Набор дазволаў \"$1\"",
+       "grant-group-page-interaction": "Узаемадзейнічаць з старонкамі",
+       "grant-group-file-interaction": "Узаемадзейнічаць з медыяфайламі",
+       "grant-group-watchlist-interaction": "Узаемадзейнічаць з вашым спісам назірання",
+       "grant-group-email": "Адпраўляць эл. пошту",
+       "grant-group-high-volume": "Выконваць вялікі аб'ём дзейнасці",
+       "grant-group-customization": "Настройкі і перавагі",
+       "grant-group-administration": "Выконваць адміністрацыйныя дзеянні",
+       "grant-group-other": "Розная актыўнасць",
+       "grant-blockusers": "Блакаваць і разблакаваць удзельнікаў",
+       "grant-createaccount": "Ствараць уліковыя запісы",
+       "grant-createeditmovepage": "Ствараць, правіць і пераносіць старонкі",
+       "grant-delete": "Сціраць старонкі, версіі і запісы ў журналах",
+       "grant-editinterface": "Правіць прасторы назваў МедыяВікі і CSS/JavaScript удзельніка",
+       "grant-editmycssjs": "Правіць ваш CSS/JavaScript",
+       "grant-editmyoptions": "Змяняць вашы настройкі",
+       "grant-editmywatchlist": "Правіць ваш спіс назірання",
+       "grant-editpage": "Правіць наяўныя старонкі",
+       "grant-editprotected": "Правіць абароненыя старонкі",
+       "grant-highvolume": "Вялікі аб'ём рэдагавання",
+       "grant-oversight": "Утойваць удзельнікаў і версіі старонак",
+       "grant-patrol": "Патруляваць змены старонак",
+       "grant-protect": "Ахоўваць і здымаць ахову старонак",
+       "grant-rollback": "Адкатваць змяненні старонак",
+       "grant-sendemail": "Адпраўляць электронную пошту іншым удзельнікам",
+       "grant-uploadeditmovefile": "Загружаць, замяняць і пераносіць файлы",
+       "grant-uploadfile": "Укладаць новыя файлы",
+       "grant-basic": "Асноўныя правы",
+       "grant-viewdeleted": "Праглядаць сцёртыя файлы і старонкі",
+       "grant-viewmywatchlist": "Бачыць ваш спіс назірання",
        "newuserlogpage": "Журнал рэгістрацыі ўдзельнікаў",
        "newuserlogpagetext": "Гэта журнал рэгістрацыі новых удзельнікаў.",
        "rightslog": "Журнал правоў удзельнікаў",
        "action-createpage": "ствараць старонкі",
        "action-createtalk": "ствараць размоўныя старонкі",
        "action-createaccount": "ствараць гэты рахунак удзельніка",
+       "action-autocreateaccount": "аўтаматычна ствараць гэты вонкавы ўліковы запіс удзельніка",
        "action-history": "глядзець гісторыю гэтай старонкі",
        "action-minoredit": "значыць гэтую праўку як дробную",
        "action-move": "пераносіць гэтую старонку",
        "action-viewmywatchlist": "глядзець свой спіс назірання",
        "action-viewmyprivateinfo": "бачыць свае асабістыя звесткі",
        "action-editmyprivateinfo": "правіць свае асабістыя звесткі",
+       "action-editcontentmodel": "правіць мадэль змесціва старонкі",
+       "action-managechangetags": "ствараць і выдаляць біркі з базы даных",
+       "action-applychangetags": "прымяняць біркі з сваімі праўкамі",
+       "action-changetags": "дадаваць і выдаляць адвольныя біркі да асобных версій і запісаў у журнале падзей",
        "nchanges": "$1 {{PLURAL:$1|змена|змены|змен}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|з часу апошняга наведвання}}",
        "enhancedrc-history": "гісторыя",
        "recentchanges-label-bot": "Праўка зроблена праграмай-робатам",
        "recentchanges-label-unpatrolled": "Праўка яшчэ не атрымала адзнакі ўхваленасці (за ёй не сочыць \"патруль\")",
        "recentchanges-label-plusminus": "Аб'ём старонкі змяніўся на гэтую лічбу байтаў",
-       "recentchanges-legend-heading": "'''Легенда:'''",
+       "recentchanges-legend-heading": "<strong>Легенда:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (гл. асобна [[Special:NewPages|новыя старонкі]])",
+       "recentchanges-submit": "Паказаць",
        "rcnotefrom": "Ніжэй {{PLURAL:$5|паказана змяненне|паказаны змены}} з <strong>$3, $4</strong> (не больш за <strong>$1</strong>).",
        "rclistfrom": "Паказаць змены з $3 $2",
        "rcshowhideminor": "$1 дробныя праўкі",
        "rcshowhidemine": "$1 уласныя праўкі",
        "rcshowhidemine-show": "Паказаць",
        "rcshowhidemine-hide": "Схаваць",
+       "rcshowhidecategorization": "$1 катэгарызацыю старонак",
+       "rcshowhidecategorization-show": "Паказаць",
+       "rcshowhidecategorization-hide": "Схаваць",
        "rclinks": "Паказаць апошнія $1 змен за мінулыя $2 дзён<br />$3",
        "diff": "розн.",
        "hist": "гіст.",
        "newpageletter": "Н",
        "boteditletter": "р",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|назіральнік|назіральнікі|назіральнікаў}}]",
-       "rc_categories": "Абмежаваць катэгорыямі (размяжоўваць знакам \"|\")",
+       "rc_categories": "Абмежаваць катэгорыямі (размяжоўваць знакам \"|\"):",
        "rc_categories_any": "Усе",
        "rc-change-size-new": "$1 {{PLURAL:$1|байт|байты|байтаў}} пасля змены",
        "newsectionsummary": "/* $1 */ новы падраздзел",
        "recentchangeslinked-summary": "Гэта пералік нядаўніх змяненняў старонак, на якія спасылаецца азначаная старонка, або змяненняў складнікаў азначанай катэгорыі.\nСтаронкі, якія ўваходзяць у [[Special:Watchlist|лік назіраных вамі]], выдзелены <strong>стылем</strong>.",
        "recentchangeslinked-page": "Назва старонкі:",
        "recentchangeslinked-to": "Паказваць, замест гэтага, змяненні на старонках, што спасылаюцца сюды",
+       "recentchanges-page-added-to-category": "[[:$1]] дададзена ў катэгорыю",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] і яшчэ {{PLURAL:$2|адна старонка дададзена|$2 старонкі дададзены|$2 старонак дададзена}} ў катэгорыю",
+       "recentchanges-page-removed-from-category": "[[:$1]] выдалена з катэгорыі",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] і яшчэ {{PLURAL:$2|адна старонка выдалена|$2 старонкі выдалены|$2 старонак выдалена}} з катэгорыі",
+       "autochange-username": "Аўтаматычная змена MediaWiki",
        "upload": "Укласці файл",
        "uploadbtn": "Укласці файл",
        "reuploaddesc": "Спыніць укладанне і вярнуцца да пачатковага фармуляра.",
        "uploaderror": "Памылка пры ўкладанні",
        "upload-recreate-warning": "'''Увага''': файл з такім імем быў выдалены або перамешчаны.''' \n\nЖурнал выдалення і перамяшчэння гэтай старонкі прыводзіцца тут для зручнасці:",
        "uploadtext": "Тут можна ўкласці файлы ў вікі.\nПрагляд або пошук раней укладзенага [[Special:FileList|робіцца тут]]; апроч таго, усе ўкладанні і сціранні адзначаюцца ў журналах [[Special:Log/upload|укладання]] і [[Special:Log/delete|сцірання]], адпаведна.\n\nКаб уставіць файл ў старонку, ужываецца спасылка, зробленая адным з наступных спосабаў:\n* '''<code><nowiki>[[</nowiki>image<nowiki>:File.jpg]]</nowiki></code>''' паказвае файл у поўным памеры\n*  '''<code><nowiki>[[</nowiki>image<nowiki>:File.png|200px|thumb|left|тлумачальны тэкст]]</nowiki></code>''' паказвае файл, маштабаваны да шырыні 200 кропак, у рамцы, змешчанай злева, і з 'тлумачальным тэкстам' у якасці подпісу\n* '''<code><nowiki>[[</nowiki>media<nowiki>:File.ogg]]</nowiki></code>''' не паказвае самога файла, а толькі спасылку на яго",
-       "upload-permitted": "Дазволеныя тыпы файлаў: $1.",
-       "upload-preferred": "Больш прымальныя тыпы файлаў: $1.",
-       "upload-prohibited": "Забароненыя тыпы файлаў: $1.",
+       "upload-permitted": "{{PLURAL:$2|Дазволены тып|Дазволеныя тыпы}} файлаў: $1.",
+       "upload-preferred": "Больш {{PLURAL:$2|прымальны тып|прымальныя тыпы}} файлаў: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Забаронены тып|Забароненыя тыпы}} файлаў: $1.",
        "uploadlogpage": "Журнал укладанняў",
        "uploadlogpagetext": "Ніжэй паказаны спіс [[Special:NewFiles|нядаўна ўкладзеных]] файлаў.",
        "filename": "Назва файла",
        "uploaddisabledtext": "Не дазваляюцца ўкладанні файлаў.",
        "php-uploaddisabledtext": "Укладанне файлаў не дазволена ў асяроддзі PHP. Праверце настаўленне file_uploads.",
        "uploadscripted": "У файле ўтрымліваецца код HTML або Яваскрыпту, які можа быць памылкова апрацаваны браўзерам.",
+       "upload-scripted-pi-callback": "Немагчыма ўкласці файл, які ўтрымлівае інструкцыі апрацоўкі табліцы стыляў XML.",
+       "uploaded-script-svg": "У ўкладзеным SVG-файле знойдзены небяспечны элемент з падтрымкай скрыптаў \"$1\".",
+       "uploaded-hostile-svg": "У ўкладзеным SVG файле знойдзены небяспечны CSS у элеменце стылю.",
+       "uploaded-event-handler-on-svg": "Устаноўка атрыбутаў апрацоўшчыка падзей <code>$1=\"$2\"</code> у SVG файле не дазваляецца.",
+       "uploaded-href-attribute-svg": "у SVG файлах атрыбутам href дазволены толькі мэты віду http:// або https://, знойдзена <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-unsafe-target-svg": "У ўкладзеным SVG файле знойдзена спасылка на небяспечныя звесткі: URI мэты <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-animate-svg": "У ўкладзеным SVG файле знойдзены тэг \"animate\", здольны змяніць спасылку з дапамогай атрыбута \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploadscriptednamespace": "Гэты файл SVG утрымлівае недапушчальную прастору імёнаў \"$1\".",
        "uploadinvalidxml": "Немагчыма прааналізаваць XML ва ўкладзеным файле.",
        "uploadvirus": "Файл утрымлівае вірус! Падрабязнасці: $1",
        "upload-options": "Магчымасці ўкладання",
        "watchthisupload": "Назіраць за файлам",
        "filewasdeleted": "Файл з такою назвай быў раней укладзены сюды, а потым сцёрты. Варта паглядзець у $1 перад тым, як укладаць яго нанова.",
+       "filename-thumb-name": "Выглядае як назва мініяцюры. Калі ласка, не загружайце мініяцюры назад у тую ж вікі. Калі вам неабходны гэты файл, выпраўце назву на больш асэнсаваную, каб яна не ўтрымлівала прэфікс мініяцюры.",
        "filename-bad-prefix": "Назва файла, які вы ўкладаеце, пачынаецца з <strong>\"$1\"</strong>, што падобна на аўтаматычныя, неінфарматыўныя назвы файлаў, якія робяць лічбавыя фотаапараты. Калі ласка, змяніце назву на больш зразумелую.",
        "upload-proto-error": "Няправільны пратакол",
        "upload-proto-error-text": "Укладанне файла зводдаль патрабуе URL, які пачынаецца з <code>http://</code> або <code>ftp://</code>.",
        "upload-too-many-redirects": "Занадта шмат перасылак за гэтым адрасам (URL)",
        "upload-http-error": "Памылка HTTP: $1",
        "upload-copy-upload-invalid-domain": "Капіраванне загрузак не дазволенае ў гэтым дамене.",
+       "upload-foreign-cant-upload": "Гэта вікі не настроена для ўкладання файлаў у запытанае старонняе сховішча файлаў.",
+       "upload-dialog-title": "Укласці файл",
+       "upload-dialog-button-cancel": "Нічога",
+       "upload-dialog-button-done": "Гатова",
+       "upload-dialog-button-save": "Запісаць",
+       "upload-dialog-button-upload": "Укласці",
+       "upload-form-label-infoform-title": "Падрабязнасці",
+       "upload-form-label-infoform-name": "Назва",
+       "upload-form-label-infoform-name-tooltip": "Унікальны апісальны загаловак для файла, які будзе служыць яго назвай. Можаце выкарыстоўваць звычайную мову з прабеламі. Не дадавайце канчатак назвы файла.",
        "upload-form-label-infoform-description": "Апісанне",
+       "upload-form-label-usage-title": "Выкарыстанне",
+       "upload-form-label-usage-filename": "Назва файла",
+       "foreign-structured-upload-form-label-own-work": "Гэта мая ўласная праца",
+       "foreign-structured-upload-form-label-infoform-categories": "Катэгорыі",
        "foreign-structured-upload-form-label-infoform-date": "Дата",
        "backend-fail-stream": "Не атрымалася трансляваць файл $1.",
        "backend-fail-backup": "Немагчыма зрабіць рэзервную копію $1.",
        "backend-fail-read": "Не атрымалася прачытаць файл $1.",
        "backend-fail-create": "Немагчыма запісаць файл \"$1\".",
        "backend-fail-maxsize": "Немагчыма запісаць файл \"$1\", таму што ён большы за {{PLURAL:$2|адзін байт|$2 байты|$2 байтаў}}.",
-       "backend-fail-readonly": "Сервер сховішча «$1» у рэжыме толькі чытання. Прычына: «$2»",
+       "backend-fail-readonly": "Сервер сховішча «$1» у рэжыме толькі чытання. Прычына: <em>$2</em>",
        "backend-fail-synced": "Стан файла «$1» адрозніваецца ад стану на ўнутраным серверы сховішча",
        "backend-fail-connect": "Немагчыма далучыцца да сервера сховішча «$1».",
        "backend-fail-internal": "Узнікла невядомая памылка на серверы сховішча «$1».",
        "listfiles-delete": "сцерці",
        "listfiles-summary": "Гэтая службовая старонка паказвае ўсе загружаныя файлы.",
        "listfiles_search_for": "Знайсці назву выявы:",
+       "listfiles-userdoesnotexist": "Уліковы запіс удзельніка \"$1\" не зарэгістраваны.",
        "imgfile": "файл",
        "listfiles": "Усе файлы",
        "listfiles_thumb": "Драбніца",
        "randomincategory-nopages": "Няма старонак у катэгорыі [[:Category:$1|$1]].",
        "randomincategory-category": "Катэгорыя:",
        "randomincategory-legend": "Выпадковая старонка ў катэгорыі",
+       "randomincategory-submit": "Перайсці",
        "randomredirect": "Выпадковая перасылка",
        "randomredirect-nopages": "Няма перасылак у прасторы назваў \"$1\".",
        "statistics": "Статыстыка",
        "mostrevisions": "Артыкулы з найбольшай колькасцю версій",
        "prefixindex": "Старонкі з назвамі на ўзор",
        "prefixindex-namespace": "Усе старонкі з прэфіксам ( $1 прастора імёнаў)",
+       "prefixindex-submit": "Паказаць",
        "prefixindex-strip": "Прыбраць прэфікс у пераліку",
        "shortpages": "Старонкі малога аб'ёму",
        "longpages": "Старонкі вялікага аб'ёму",
        "protectedpages-performer": "Паставіў ахову",
        "protectedpages-params": "Тыпы аховы",
        "protectedpages-reason": "Прычына",
+       "protectedpages-submit": "Паказаць старонкі",
        "protectedpages-unknown-timestamp": "Невядома",
        "protectedpages-unknown-performer": "Нявызначаны ўдзельнік",
        "protectedtitles": "Назвы пад аховай",
        "protectedtitles-summary": "На гэтай старонцы пералічаны назвы, якія зараз абаронены ад стварэння. Спіс існых старонак пад аховай гл. [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
        "protectedtitlesempty": "Няма назваў, якія зараз бы ахоўваліся з такімі параметрамі.",
+       "protectedtitles-submit": "Паказаць назвы",
        "listusers": "Усе ўдзельнікі",
        "listusers-editsonly": "Толькі ўдзельнікі, якія маюць праўкі",
        "listusers-creationsort": "У парадку датаў стварэння",
        "usereditcount": "$1 {{PLURAL:$1|праўка|праўкі|правак}}",
        "usercreated": "\t{{GENDER:$3|Зарэгістраваўся|Зарэгістравалася}} $1 у $2",
        "newpages": "Новыя старонкі",
+       "newpages-submit": "Паказаць",
        "newpages-username": "Імя ўдзельніка:",
        "ancientpages": "Найстарэйшыя старонкі",
        "move": "Перанесці",
        "pager-older-n": "{{PLURAL:$1|1 старэйшая|$1 старэйшыя}}",
        "suppress": "Падавіць",
        "querypage-disabled": "Гэта адмысловая старонка адключана для павышэння прадукцыйнасці.",
+       "apihelp": "Даведка па API",
+       "apihelp-no-such-module": "Модуль \"$1\" не знойдзены.",
+       "apisandbox": "Пясочніца API",
+       "apisandbox-jsonly": "Каб выкарыстоўваць пясочніцу API, патрэбен JavaScript.",
+       "apisandbox-api-disabled": "API адключаны на гэтым сайце.",
+       "apisandbox-fullscreen": "Разгарнуць панэль",
+       "apisandbox-fullscreen-tooltip": "Разгарнуць панэль пясочніцы, каб запоўніць акно браўзера.",
+       "apisandbox-unfullscreen": "Паказаць старонку",
+       "apisandbox-submit": "Зрабіць запыт",
+       "apisandbox-reset": "Ачысціць",
+       "apisandbox-retry": "Паўтарыць",
+       "apisandbox-no-parameters": "Гэты модуль API не мае параметраў.",
+       "apisandbox-helpurls": "Спасылкі на даведку",
+       "apisandbox-examples": "Прыклады",
+       "apisandbox-dynamic-parameters": "Дадатковыя параметры",
+       "apisandbox-dynamic-parameters-add-label": "Дадаць параметр:",
+       "apisandbox-dynamic-parameters-add-placeholder": "Назва параметра",
+       "apisandbox-dynamic-error-exists": "Параметр з назвай \"$1\" ужо існуе.",
+       "apisandbox-deprecated-parameters": "Састарэлыя параметры",
+       "apisandbox-results": "Вынікі",
+       "apisandbox-alert-page": "Палі на гэтай старонцы недапушчальныя.",
+       "apisandbox-alert-field": "Значэнне гэтага поля недапушчальнае.",
        "booksources": "Кнігі",
        "booksources-search-legend": "Знайсці, дзе купіць кнігі",
        "booksources-search": "Пошук",
        "booksources-text": "Ніжэй паказаны пералік спасылак на іншыя сеціўныя пляцоўкі, якія прадаюць новыя і б/у кнігі, і, магчыма, маюць больш звестак пра кнігі, якіх вы шукаеце:",
        "booksources-invalid-isbn": "Гэты ISBN не выглядае правільным; праверце правільнасць капіравання з арыгіналу.",
        "specialloguserlabel": "Выканаўца:",
-       "speciallogtitlelabel": "Мэта (назва ці ўдзельнік):",
+       "speciallogtitlelabel": "Мэта (назва ці {{ns:user}}:імя_ўдзельніка для ўдзельніка):",
        "log": "Журналы",
+       "logeventslist-submit": "Паказаць",
        "all-logs-page": "Усе публічныя журналы",
        "alllogstext": "Супольны паказ усіх магчымых журналаў на пляцоўцы {{SITENAME}}.\nМожна звузіць аб'ём паказу, выбіраючы тып журнала, імя ўдзельніка (з улікам рэгістру літар) або старонкі (таксама з улікам рэгістру).",
        "logempty": "Нічога адпаведнага ў журнале не знойдзена.",
        "log-title-wildcard": "Знайсці назвы, якія пачынаюцца з гэтага тэксту",
        "showhideselectedlogentries": "Паказаць/схаваць выбраныя запісы журнала",
+       "log-edit-tags": "Правіць біркі да выбраных запісаў журнала",
+       "checkbox-select": "Выбраць: $1",
+       "checkbox-all": "Усе",
        "allpages": "Усе старонкі",
        "nextpage": "Наступная старонка ($1)",
        "prevpage": "Папярэдняя старонка ($1)",
        "cachedspecial-viewing-cached-ts": "Вы праглядаеце кэшаваную версію старонкі, якая можа быць не зусім актуальнай.",
        "cachedspecial-refresh-now": "Глядзець найноўшую.",
        "categories": "Катэгорыі",
+       "categories-submit": "Паказаць",
        "categoriespagetext": "Наступн{{PLURAL:$1|ая катэгорыя ўтрымлівае|ыя $1 катэгорыі(-й) утрымліваюць}} старонкі або мультымедыю.\nТут не паказаныя [[Special:UnusedCategories|катэгорыі без складнікаў]].\nГл. таксама [[Special:WantedCategories|патрэбныя катэгорыі]].",
        "categoriesfrom": "Паказаць катэгорыі, пачынаючы з:",
        "special-categories-sort-count": "пд. колькасці",
        "activeusers-hidebots": "Без робатаў",
        "activeusers-hidesysops": "Без адміністратараў",
        "activeusers-noresult": "Няма такіх удзельнікаў.",
+       "activeusers-submit": "Паказаць актыўных удзельнікаў",
        "listgrouprights": "Дазволы для груп удзельнікаў",
        "listgrouprights-summary": "Гэты пералік вызначаных у гэтай вікі груп удзельнікаў, разам з прыпісанымі ім дазволамі.\nДаведацца больш пра асабістыя дазволы можна на старонцы [[{{MediaWiki:Listgrouprights-helppage}}]].",
        "listgrouprights-key": "Легенда:\n* <span class=\"listgrouprights-granted\">Дадзены дазвол</span>\n* <span class=\"listgrouprights-revoked\">Адкліканы дазвол</span>",
        "wlheader-showupdated": "Старонкі, якія былі зменены пасля вашага апошняга наведвання, паказаны <strong>абрысам шрыфту</strong>.",
        "wlnote": "Ніжэй {{PLURAL:$1|паказана апошняя <strong>$1</strong> змена|паказаны апошнія <strong>$1</strong> змены|паказаны апошнія <strong>$1</strong> змен}} за {{PLURAL:$2|апошнюю|апошнія|апошнія}} <strong>$2</strong> {{PLURAL:$2|гадзіну|гадзіны|гадзін}}, на момант часу $3 $4.",
        "wlshowlast": "Паказваць апошнія $1 гадз. $2 дзён",
+       "watchlist-hide": "Схаваць",
+       "watchlist-submit": "Паказаць",
+       "wlshowtime": "Перыяд часу для паказу:",
+       "wlshowhideminor": "дробныя праўкі",
+       "wlshowhidebots": "робатаў",
+       "wlshowhideliu": "пазнаных удзельнікаў",
+       "wlshowhideanons": "ананімных удзельнікаў",
+       "wlshowhidepatr": "ухваленыя праўкі",
+       "wlshowhidemine": "мае праўкі",
+       "wlshowhidecategorization": "катэгарызацыю старонак",
        "watchlist-options": "Магчымасці назірання",
        "watching": "Дапісваецца ў спіс назірання...",
        "unwatching": "Спыняем назіранне...",
        "deletepage": "Сцерці старонку",
        "confirm": "Пацвердзіць",
        "excontent": "тэкст быў: '$1'",
-       "excontentauthor": "тэкст быў: '$1' (і адзіны аўтар: '[[Special:Contributions/$2|$2]]')",
+       "excontentauthor": "тэкст быў: '$1' (і адзіны аўтар: \"[[Special:Contributions/$2|$2]]\" ([[User talk:$2|размовы]]))",
        "exbeforeblank": "змесціва перад ачысткаю было: '$1'",
        "delete-confirm": "Сцерці \"$1\"",
        "delete-legend": "Сцерці",
        "historywarning": "<strong>Увага:</strong> Старонка, якую вы хочаце сцерці, мае гісторыю з прыблізна $1 {{PLURAL:$1|праўкі|правак}}:",
+       "historyaction-submit": "Паказаць",
        "confirmdeletetext": "Вы збіраецеся сцерці старонку разам з цэлай яе гісторыяй правак.\nПацвердзіце свой намер зрабіць гэта, сваё разуменне наступстваў, і што вы робіце гэта ў адпаведнасці з [[{{MediaWiki:Policy-url}}|палітыкай (асноўнымі правіламі)]].",
        "actioncomplete": "Завершана аперацыя",
        "actionfailed": "Памылка дзеяння",
        "delete-toobig": "Старонка мае вялікую гісторыю правак, больш за $1 {{PLURAL:$1|версію|версій}}. Сціранне такіх старонак было абмежавана, каб пазбегчы ўтварэння выпадковых перашкод працы {{SITENAME}}.",
        "delete-warning-toobig": "Старонка мае вялікую гісторыю правак, больш за $1 {{PLURAL:$1|версію|версій}}. Сціранне такіх старонак можа перашкодзіць працы базы даных {{SITENAME}}; будзьце асцярожнымі.",
        "deleteprotected": "Вы не можаце сцерці гэтую старонку, таму што яна ахоўваецца.",
-       "deleting-backlinks-warning": "'''Увага:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Іншыя старонкі]] спасылаюцца на ці ўключаюць старонку, якую вы збіраецеся сцерці.",
+       "deleting-backlinks-warning": "<strong>Увага:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|Іншыя старонкі]] спасылаюцца на ці ўключаюць старонку, якую вы збіраецеся сцерці.",
        "rollback": "Адкаціць праўкі",
        "rollbacklink": "адкат",
        "rollbacklinkcount": "адкаціць $1 {{PLURAL:$1|праўку|праўкі|правак}}",
        "rollbackfailed": "Не ўдалося адкаціць",
        "cantrollback": "Немагчыма адкаціць праўку; апошні аўтар гэта адзіны аўтар на гэтай старонцы.",
        "alreadyrolled": "Немагчыма адкаціць апошнюю праўку ў [[:$1]], аўтарства [[User:$2|$2]] ([[User talk:$2|Talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nз таго часу нехта іншы правіў або адкатваў гэтую старонку.\n\nАпошняя праўка старонкі была аўтарства [[User:$3|$3]] ([[User talk:$3|Talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Тлумачэнне праўкі было: \"''$1''\".",
+       "editcomment": "Тлумачэнне праўкі было: <em>$1</em>.",
        "revertpage": "Праўкі аўтарства [[Special:Contributions/$2|$2]] ([[User talk:$2|размова]]) адкочаныя; вернута апошняя версія аўтарства [[User:$1|$1]]",
        "revertpage-nouser": "Праўкі (імя ўдзельніка схавана) адкочаны да версіі {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Адкочаны праўкі $1; вернута апошняя версія $2.",
        "sessionfailure-title": "Памылка сеансу",
        "sessionfailure": "Магчыма, ёсць праблемы з вашым сеансам працы ў сістэме. Таму вам было адмоўлена ў выкананні дзеяння, каб засцерагчыся ад захопу сеанса.\n\nВярніцеся на папярэднюю старонку, перазагрузіце яе і тады паспрабуйце зноў.",
+       "changecontentmodel-title-label": "Назва старонкі",
+       "changecontentmodel-model-label": "Новая мадэль змесціва",
+       "changecontentmodel-reason-label": "Прычына:",
+       "changecontentmodel-submit": "Змяніць",
+       "logentry-contentmodel-change-revertlink": "адкаціць",
        "protectlogpage": "Журнал аховы",
        "protectlogtext": "Ніжэй прыведзены журнал змен абароны старонкі.\nВы можаце таксама прагледзець [[Special:ProtectedPages|пералік старонак пад аховай]].",
        "protectedarticle": "пад аховай «[[$1]]»",
        "undeletepagetext": "Наступн{{PLURAL:$1|ая старонка была сцёртая, але застаецца ў архіве і можа быць адноўленая|ыя $1 старонкі былі сцёртыя, але застаюцца ў архіве і могуць быць адноўлены}}\nАрхіў можа перыядычна ачышчацца.",
        "undelete-fieldset-title": "Аднавіць версіі",
        "undeleteextrahelp": "Для поўнага аднаўлення гісторыі старонкі пакіньце ўсе адзнакі пустымі і націсніце '''«{{int:undeletebtn}}»'''. Для частковага аднаўлення, пазначце тыя версіі старонкі, якія трэба аднавіць, і націсніце '''«{{int:undeletebtn}}»'''.",
-       "undeleterevisions": "$1 {{PLURAL:$1|версія|версій}} з архіву",
+       "undeleterevisions": "$1 {{PLURAL:$1|версія|версій}} сцёрта",
        "undeletehistory": "Калі аднавіць старонку, то ў яе гісторыю правак вернуцца ўсе яе версіі.\nКалі пасля сцірання стваралася новая старонка з такой самай назвай, то адноўленыя версіі з'явяцца ў яе гісторыі перад часам стварэння новай старонкі.",
        "undeleterevdel": "Аднаўленне не будзе выконвацца, калі ў яго выніку была б часткова сцёртая найноўшая версія старонкі або файла. У такіх выпадках трэба зняць выбар з самых нядаўніх сцёртых версій або дазволіць іх паказ.",
        "undeletehistorynoadmin": "Гэтая старонка была сцёртая. Прычына сцірання паказаная ў ніжэй, разам з падрабязнасцямі пра ўдзельнікаў, якія правілі старонку перад сціраннем. Сам тэкст сцёртых версій даступны толькі адміністратарам.",
        "cant-move-to-user-page": "Вам не дазволена пераносіць старонку ў старонку карыстальніка (не лічачы пад-старонак карыстальніка).",
        "cant-move-category-page": "Вам не дазволена пераносіць старонкі катэгорый.",
        "cant-move-to-category-page": "Вам не дазволена пераносіць старонку ў старонку катэгорыі.",
-       "newtitle": "Ð\9fад Ð½Ð¾Ð²Ñ\83Ñ\8e Ð½Ð°Ð·Ð²Ñ\83:",
+       "newtitle": "Ð\9dоваÑ\8f Ð½Ð°Ð·Ð²Ð°:",
        "move-watch": "Назіраць за старонкай",
        "movepagebtn": "Перанесці старонку",
        "pagemovedsub": "Паспяховы перанос",
        "move-leave-redirect": "Пакінуць перасылку са старой назвы",
        "protectedpagemovewarning": "<strong>Папярэджанне:</strong> Гэта старонка была змешчана пад ахову; пераназваць яе могуць толькі ўдзельнікі з паўнамоцтвамі адміністратараў.\nНіжэй для даведкі прыведзена апошні запіс журнала:",
        "semiprotectedpagemovewarning": "<strong>Заўвага:</strong> Гэта старонка была змешчана пад ахову; пераносіць яе пад іншую назву могуць толькі зарэгістраваныя ўдзельнікі.\nНіжэй для даведкі прыведзена апошні запіс журнала:",
-       "move-over-sharedrepo": "== Файл існуе ==\nФайл з назвай [[:$1]] ёсць у агульным сховішчы. Файл, перанесены пад такую назву, будзе перамагаць файл з агульнага сховішча.",
+       "move-over-sharedrepo": "Файл з назвай [[:$1]] ёсць у агульным сховішчы. Файл, перанесены пад такую назву, будзе перамагаць файл з агульнага сховішча.",
        "file-exists-sharedrepo": "Такая назва файла ўжо выкарыстана ў агульным сховішчы.\nВыберыце іншую назву.",
        "export": "Экспартаваць старонкі",
        "exporttext": "Тут можна экспартаваць тэкст і гісторыю правак пэўнай старонкі або збору старонак, з наступным абгортваннем у адмысловы код XML. Такое потым можна імпартаваць у іншую Вікі на аснове пакету MediaWiki праз [[Special:Import|старонку імпартавання]].\n\nКаб экспартаваць старонкі, упішыце іх назвы, адну на радок, у тэкставым полі, што ніжэй, і абазначце, ці жадаеце актуальныя версіі разам са старымі версіямі і з гісторыяй правак, ці толькі актуальныя з інфармацыяй пра апошнюю праўку.\n\nУ апошнім выпадку можна карыстацца адмысловай формай спасылкі ў выглядзе, напр., [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] для \"[[{{MediaWiki:Mainpage}}]]\".",
        "thumbnail_image-missing": "Хутчэй за ўсё, адсутнічае файл $1",
        "thumbnail_image-failure-limit": "Занадта шмат нядаўніх няўдалых спроб ($1 ці болей) стварыць гэту мініяцюру. Калі ласка, паспрабуйце пазней.",
        "import": "Імпартаваць старонкі",
-       "importinterwiki": "Імпарт Transwiki",
-       "import-interwiki-text": "Ð\92Ñ\8bбаÑ\80 Ð²Ñ\96кÑ\96 Ñ\96 Ð½Ð°Ð·Ð²Ñ\8b Ñ\81Ñ\82аÑ\80онкÑ\96 Ð´Ð·ÐµÐ»Ñ\8f Ñ\96мпаÑ\80Ñ\82Ñ\83.\nÐ\94аÑ\82Ñ\8b Ð²ÐµÑ\80Ñ\81Ñ\96й і імёны аўтараў будуць захаваныя.\nУсе транс-вікавыя імпарты запісваюцца ў [[Special:Log/import|журнале імпартаў]].",
+       "importinterwiki": "Імпарт з іншай вікі",
+       "import-interwiki-text": "Ð\92Ñ\8bбеÑ\80Ñ\8bÑ\86е Ð²Ñ\96кÑ\96 Ñ\96 Ð½Ð°Ð·Ð²Ñ\83 Ñ\81Ñ\82аÑ\80онкÑ\96 Ð´Ð»Ñ\8f Ñ\96мпаÑ\80Ñ\82Ñ\83.\nÐ\94аÑ\82Ñ\8b Ð¿Ñ\80авак і імёны аўтараў будуць захаваныя.\nУсе транс-вікавыя імпарты запісваюцца ў [[Special:Log/import|журнале імпартаў]].",
        "import-interwiki-sourcewiki": "Крынічная вікі:",
        "import-interwiki-sourcepage": "Крынічная старонка:",
        "import-interwiki-history": "Капіраваць усе гістарычныя версіі гэтай старонкі",
        "javascripttest-qunit-intro": "Глядзіце [$1 дакументацыю па тэставанні] на mediawiki.org.",
        "tooltip-pt-userpage": "Ваша ўласная старонка",
        "tooltip-pt-anonuserpage": "Старонка ўдзельніка для таго IP, з якога вы зараз працуеце",
-       "tooltip-pt-mytalk": "Ваша старонка размоў",
+       "tooltip-pt-mytalk": "{{GENDER:|Ваша}} старонка размоў",
        "tooltip-pt-anontalk": "Размовы аб праўках, зробленых з гэтага IP-адраса",
-       "tooltip-pt-preferences": "Вашы настройкі",
+       "tooltip-pt-preferences": "{{GENDER:|Вашы}} настройкі",
        "tooltip-pt-watchlist": "Пералік старонак, за змяненнямі ў якіх вы сочыце",
-       "tooltip-pt-mycontris": "Пералік вашага ўкладу",
+       "tooltip-pt-mycontris": "Пералік {{GENDER:|вашага}} ўкладу",
        "tooltip-pt-anoncontribs": "Спіс правак, зробленых з гэтага IP-адраса",
        "tooltip-pt-login": "Вам прапануецца ўвайсці ў сістэму, але гэта неабавязкова.",
        "tooltip-pt-logout": "Выйсці з сістэмы",
        "tooltip-t-recentchangeslinked": "Нядаўнія змены ў старонках, на якія спасылаецца гэтая старонка",
        "tooltip-feed-rss": "RSS-струмень гэтай старонкі",
        "tooltip-feed-atom": "Струмень навін Atom для гэтай старонкі",
-       "tooltip-t-contributions": "Паказаць пералік укладаў гэтага ўдзельніка",
-       "tooltip-t-emailuser": "Адаслаць удзельніку ліст эл.пошты",
+       "tooltip-t-contributions": "Пералік укладаў {{GENDER:$1|гэтага ўдзельніка|гэтай удзельніцы}}",
+       "tooltip-t-emailuser": "Адаслаць {{GENDER:$1|удзельніку|удзельніцы}} ліст эл.пошты",
+       "tooltip-t-info": "Больш звестак пра гэту старонку",
        "tooltip-t-upload": "Укласці файлы",
        "tooltip-t-specialpages": "Пералік усіх адмысловых старонак",
        "tooltip-t-print": "Друкавальная версія гэтай старонкі",
        "lastmodifiedatby": "Апошняе змяненне старонкі адбылося $2, $1 аўтарства $3.",
        "othercontribs": "На аснове працы $1.",
        "others": "іншае",
-       "siteusers": "{{PLURAL:$2|удзельнік|удзельнікі}} з пляцоўкі {{SITENAME}} - $1",
+       "siteusers": "{{PLURAL:$2|{{GENDER:$1|удзельнік|удзельніца}}|удзельнікі}} з пляцоўкі {{SITENAME}} - $1",
        "anonusers": "ананімны{{PLURAL:$2| ўдзельнік|я ўдзельнікі}} {{SITENAME}} - $1",
        "creditspage": "Аўтарства старонкі",
        "nocredits": "Няма звестак пра аўтараў гэтай старонкі.",
        "pageinfo-robot-index": "Дазволена",
        "pageinfo-robot-noindex": "Не дазволена",
        "pageinfo-watchers": "Колькасць назіральнікаў старонкі",
+       "pageinfo-visiting-watchers": "Колькасць удзельнікаў, якія назіраюць за старонкай і бачылі апошнія змены",
        "pageinfo-few-watchers": "Менш чым $1 {{PLURAL:$1|назіральнік|назіральнікі|назіральнікаў}}",
+       "pageinfo-few-visiting-watchers": "Могуць быць, а можа і не быць удзельнікаў, якія назіраюць за старонкай і бачылі апошнія змены",
        "pageinfo-redirects-name": "Колькасць перасылак на гэту старонку",
        "pageinfo-subpages-name": "Колькасць падстаронак гэтай старонкі",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|перасылка|перасылкі|перасылак}}; $3 {{PLURAL:$3|прамая спасылка|прамыя спасылкі|прамых спасылак}})",
        "scarytranscludetoolong": "[Занадта доўгі URL]",
        "deletedwhileediting": "'''Увага''': гэтая старонка была сцёрта пасля таго, як вы пачалі з ёй працаваць!",
        "confirmrecreate": "Удзельнік [[User:$1|$1]] ([[User talk:$1|размова]]) сцёр гэты артыкул пасля таго, як вы пачалі працу з ім, падаўшы прычыну:\n: ''$2''\nПацвердзіце свой намер аднавіць гэты артыкул.",
-       "confirmrecreate-noreason": "Удзельнік [[User:$1|$1]] ([[User talk:$1|размовы]]) выдаліў гэтую старонку пасля таго, як вы пачалі яе рэдагаваць. Калі ласка, пацвердзіце, што вы сапраўды жадаеце аднавіць гэтую старонку.",
+       "confirmrecreate-noreason": "{{GENDER:$1|Удзельнік|Удзельніца}} [[User:$1|$1]] ([[User talk:$1|размовы]]) {{GENDER:$1|сцёр|сцёрла}} гэту старонку пасля таго, як вы пачалі яе рэдагаваць.\nКалі ласка, пацвердзіце, што вы сапраўды жадаеце аднавіць гэтую старонку.",
        "recreate": "Аднавіць",
        "unit-pixel": "крпк",
        "confirm_purge_button": "ОК",
        "watchlisttools-edit": "Паказаць спіс назірання",
        "watchlisttools-raw": "Паказаць нефарматаваны спіс назірання",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|размовы]])",
+       "timezone-local": "Мясцовы",
        "duplicate-defaultsort": "Увага: прадвызначаная клавіша ўпарадкавання \"$2\" замяніла ранейшую такую клавішу \"$1\".",
        "duplicate-displaytitle": "<strong>Папярэджанне:</strong> Паказаная назва \"$2\" перасягае ранейшую назву \"$1\".",
        "version": "Версія",
        "version-entrypoints": "Уваходныя адрасы",
        "version-entrypoints-header-entrypoint": "Кропка ўваходу",
        "version-entrypoints-header-url": "URL",
-       "redirect": "Перасылка да файла, ID удзельніка, старонкі ці версіі",
+       "version-libraries": "Устаноўленыя бібліятэкі",
+       "version-libraries-library": "Бібліятэка",
+       "version-libraries-version": "Версія",
+       "version-libraries-license": "Ліцэнзія",
+       "version-libraries-description": "Апісанне",
+       "version-libraries-authors": "Аўтары",
+       "redirect": "Перасылка да файла, ID удзельніка, старонкі, версіі ці журнала",
        "redirect-legend": "Перасылка да файла ці старонкі",
        "redirect-summary": "Гэта адмысловая старонка перасылае да файла (з назвы файла), на старонку (з ідэнтыфікатара версіі ці старонкі), ці на старонку ўдзельніка (калі дадзены лічбавы ID удзельніка). Ужыванне: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], ці [[{{#Special:Redirect}}/user/101]].",
        "redirect-submit": "Перайсці",
        "tags-tag": "Назва біркі",
        "tags-display-header": "Назва на паказ",
        "tags-description-header": "Поўнае апісанне значэння",
+       "tags-source-header": "Крыніца",
        "tags-active-header": "Актыўны?",
        "tags-hitcount-header": "Пазначаных правак",
+       "tags-actions-header": "Дзеянні",
        "tags-active-yes": "Да",
        "tags-active-no": "Не",
+       "tags-source-none": "Больш не выкарыстоўваецца",
        "tags-edit": "правіць",
+       "tags-delete": "сцерці",
+       "tags-activate": "актываваць",
+       "tags-deactivate": "адключыць",
        "tags-hitcount": "$1 {{PLURAL:$1|змена|змены|змен}}",
+       "tags-create-tag-name": "Назва біркі:",
+       "tags-create-reason": "Прычына:",
+       "tags-create-submit": "Стварыць",
+       "tags-create-already-exists": "Бірка \"$1\" ужо ёсць.",
+       "tags-create-warnings-below": "Вы хочаце прадоўжыць стварэнне біркі?",
+       "tags-delete-title": "Сцерці бірку",
+       "tags-delete-explanation-initial": "Вы збіраецеся выдаліць бірку \"$1\" з базы звестак.",
+       "tags-delete-explanation-warning": "Гэта дзеянне <strong>незваротнае</strong> і <strong>не можа быць адкочана</strong> нават адміністратарамі базы звестак. Упэўніцеся, што гэта тая бірка, што вы хочаце выдаліць.",
+       "tags-delete-reason": "Прычына:",
+       "tags-delete-submit": "Незваротна сцерці гэту бірку",
        "comparepages": "Параўнанне старонак",
        "compare-page1": "Старонка 1",
        "compare-page2": "Старонка 2",
        "feedback-error3": "Памылка. Няма адказу ад API",
        "feedback-message": "Паведамленне",
        "feedback-subject": "Тэма:",
-       "feedback-submit": "Даслаць водгук",
+       "feedback-submit": "Даслаць",
        "feedback-thanks": "Дзякуй! Ваш водгук размешчаны на старонцы «[$2 $1]».",
        "searchsuggest-search": "Знайсці",
        "searchsuggest-containing": "змяшчае...",
        "expand_templates_generate_xml": "Паказаць дрэва сінтаксічнага аналізу XML",
        "expand_templates_generate_rawhtml": "Паказаць зыходны код HTML",
        "expand_templates_preview": "Перадпаказ",
-       "pagelanguage": "Ð\92Ñ\8bбаÑ\80 Ð¼Ð¾Ð²Ñ\8b старонкі",
+       "pagelanguage": "Ð\97мÑ\8fнÑ\96Ñ\86Ñ\8c Ð¼Ð¾Ð²Ñ\83 старонкі",
        "pagelang-name": "Старонка",
        "pagelang-language": "Мова",
        "pagelang-use-default": "Прадвызначаная мова",
        "default-skin-not-found": "Упс! Прадвызначаная вокладка для вашай вікі (<code>$wgDefaultSkin</code>), <code>$1</code>, недаступна.\n\nВыглядае на тое, што ваша інсталяцыя ўключае наступныя вокладкі. Гл. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Інструкцыя: Устаноўка вокладак] дзеля інфармацыі па ўключэнні і выбару прадвызначанай вокладкі.\n\n$2\n\n; Калі вы толькі што ўстанавілі MediaWiki:\n: Магчыма, вы ўстанавілі з git, ці наўпрост з зыходнага коду, выкарыстаўшы іншы метад. Гэта нармальна. Паспрабуйце ўстанавіць некалькі вокладак з [https://www.mediawiki.org/wiki/Category:All_skins каталога вокладак mediawiki.org], такім чынам:\n:* Узяўшы [https://www.mediawiki.org/wiki/Download tarball-інсталятар], які ўтрымлівае некалькі вокладак і прыставак. Вы можаце скапіяваць і ўставіць каталог <code>skins/</code> з яго.\n:* Зрабіўшы клон  аднаго з сховішчаў <code>mediawiki/skins/*</code> праз git у каталог <code>skins/</code> вашай інсталяцыі MediaWiki.\n: Калі вы распрацоўшчык MediaWiki, гэта не павінна ўплываць на ваша git-сховішча.\n\n; Калі вы толькі што абнавілі MediaWiki:\n: MediaWiki 1.24 і навейшыя больш не падключаюць вокладкі аўтаматычна (гл. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Інструкцыя: Аўтавызначэнне вокладак]). Вы можаце ўставіць наступныя радкі ў <code>LocalSettings.php</code>, каб падключыць усе ўстаноўленыя вокладкі:\n\n<pre>$3</pre>\n\n; Калі вы толькі што змянілі <code>LocalSettings.php</code>:\n: Пераправерце назвы вокладак на прадмет памылак.",
        "default-skin-not-found-no-skins": "Упс! Прадвызначаная вокладка для вашай вікі (<code>$wgDefaultSkin</code>), <code>$1</code>, недаступна.\n\nВы не ўстанавілі вокладкі.\n\n; Калі вы толькі што ўстанавілі ці абнавілі MediaWiki:\n: Магчыма, вы ўстанавілі з git, ці наўпрост з зыходнага коду, выкарыстаўшы іншы метад. Гэта нармальна. MediaWiki 1.24 і навейшыя не ўключаюць вокладкі ў асноўнае сховішча. Паспрабуйце ўстанавіць некалькі вокладак з [https://www.mediawiki.org/wiki/Category:All_skins каталога вокладак mediawiki.org], такім чынам:\n:* Узяўшы [https://www.mediawiki.org/wiki/Download tarball-інсталятар], які ўтрымлівае некалькі вокладак і прыставак. Вы можаце скапіяваць і ўставіць каталог <code>skins/</code> адтуль.\n:* Зрабіўшы клон аднаго з сховішчаў <code>mediawiki/skins/*</code> праз git у каталог <code>skins/</code> вашай інсталяцыі MediaWiki.\n: Калі вы распрацоўшчык MediaWiki, гэта не павінна адбіцца на вашым git-сховішчы. Гл. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Інструкцыя: Настройка вокладак] дзеля інфармацыі па ўключэнні вокладак і выбары прадвызначэння.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (уключана)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''выключана''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>выключана</strong>)",
        "special-characters-group-latin": "Лацінскія",
        "special-characters-group-latinextended": "Лацінскія дадатковыя",
        "special-characters-group-ipa": "IPA",
index 3ee9c90..7d8303e 100644 (file)
        "myprivateinfoprotected": "Нямате права да редактирате личната си информация.",
        "mypreferencesprotected": "Нямате права да редактирате настройките си.",
        "ns-specialprotected": "Специалните страници не могат да бъдат редактирани.",
-       "titleprotected": "Тази страница е била защитена срещу създаване от [[User:$1|$1]].\nПосочената причина е ''$2''.",
+       "titleprotected": "Тази страница е била защитена срещу създаване от [[User:$1|$1]].\nПосочената причина е <em>$2</em>.",
        "filereadonlyerror": "Файлът „$1“ не може да бъде променен, тъй като файловото хранилище „$2“ е в режим само за четене.\n\nСистемният администратор, който го е заключил, е посочил следната причина: „$3“.",
        "invalidtitle-knownnamespace": "Невалидно заглавие с именно пространство „$2“ и текст „$3“",
        "invalidtitle-unknownnamespace": "Невалидно заглавие с неразпознато именно пространство номер $1 и текст „$2“",
        "recentchanges-label-bot": "Тази редакция е извършена от бот",
        "recentchanges-label-unpatrolled": "Тази редакция все още не е проверена",
        "recentchanges-label-plusminus": "Размерът на страницата е променен с този брой байтове",
-       "recentchanges-legend-heading": "'''Легенда:'''",
+       "recentchanges-legend-heading": "<strong>Легенда:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (вижте също [[Special:NewPages|списъка с нови страници]])",
        "recentchanges-submit": "Покажи",
        "rcnotefrom": "Дадени са промените от <strong>$2</strong> (до <strong>$1</strong> показани).",
        "rcshowhidemine": "$1 на моите приноси",
        "rcshowhidemine-show": "Показване",
        "rcshowhidemine-hide": "Скриване",
-       "rcshowhidecategorization-show": "Покажи",
-       "rcshowhidecategorization-hide": "Скриване",
+       "rcshowhidecategorization": "$1 категоризации",
+       "rcshowhidecategorization-show": "Показване на",
+       "rcshowhidecategorization-hide": "Скриване на",
        "rclinks": "Показване на последните $1 промени за последните $2 дни<br />$3",
        "diff": "разл",
        "hist": "ист",
        "rollbackfailed": "Отмяната не сполучи",
        "cantrollback": "Не може да се извърши отмяна на редакциите. Последният редактор е и единствен автор на страницата.",
        "alreadyrolled": "Редакцията на [[:$1]], направена от [[User:$2|$2]] ([[User talk:$2|Беседа]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]), не може да бъде отменена. Някой друг вече е редактирал страницата или е отменил промените.\n\nПоследната редакция е на [[User:$3|$3]] ([[User talk:$3|Беседа]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Резюмето на редакцията беше: „''$1''“.",
+       "editcomment": "Резюмето на редакцията беше: <em>$1</em>.",
        "revertpage": "Премахване на [[Special:Contributions/$2|редакции на $2]] ([[User talk:$2|беседа]]); възвръщане към последната версия на [[User:$1|$1]]",
        "revertpage-nouser": "Премахнати редакции на (отстранено потребителско име) и връщане към последната версия на [[User:$1|$1]]",
        "rollback-success": "Отменени редакции на $1; възвръщане към последната версия на $2.",
        "action-pagelang": "промяна езика на страницата",
        "log-name-pagelang": "Дневник на езиковите промени",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (включено)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''изключено''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>изключено</strong>)",
        "mediastatistics": "Медия статистики",
        "mediastatistics-table-mimetype": "MIME тип",
        "mediastatistics-header-audio": "Аудио",
index 959ef9f..bae6d56 100644 (file)
@@ -6,7 +6,8 @@
                        "Rachitrali",
                        "Mjbmr",
                        "Macofe",
-                       "Hosseinblue"
+                       "Hosseinblue",
+                       "Dalba"
                ]
        },
        "tog-underline": "لینکانی جهلگا خط کشیتین",
@@ -88,7 +89,7 @@
        "february-gen": "فیبروری",
        "march-gen": "مارچ",
        "april-gen": "اپریل",
-       "may-gen": "می",
+       "may-gen": "مای",
        "june-gen": "جون",
        "july-gen": "جولای",
        "august-gen": "اگوست",
        "feb": "فیبروری",
        "mar": "مارچ",
        "apr": "اپریل",
-       "may": "می",
+       "may": "مای",
        "jun": "جون",
        "jul": "جولای",
        "aug": "اگوست",
        "mypage": "تاکدیم",
        "mytalk": "گپ",
        "anontalk": "ای آی پی نشانی ئی باره ئا گپ",
-       "navigation": "ناوبری",
+       "navigation": "جهت یابي",
        "and": "&#32;و",
        "qbfind": "ودی کورتین",
        "qbbrowse": "مرور",
        "variants": "لهجه ئان",
        "navigation-heading": "ناوبری مینو",
        "errorpagetitle": "خطا",
-       "returnto": "بیئرگشت بئ $1.",
+       "returnto": "بیئرگشت به $1.",
        "tagline": "شه {{SITENAME}}",
        "help": "کومک",
        "search": "گشتین",
        "searchbutton": "گشتین",
        "go": "برا",
-       "searcharticle": "برا",
+       "searcharticle": "بررÙ\87",
        "history": "تاکدیمی تاریخچه",
        "history_short": "تاریخچه",
        "updatedmarker": "نئ آخرین آپڈیٹا نشان داتین",
        "viewhelppage": "کومکی تاکدیما نشان داتین",
        "categorypage": "دیستین تهری تاکدیمی",
        "viewtalkpage": "گپ تاکدیمی نشان داتین",
-       "otherlanguages": "بی دیگه زبانانی تا",
+       "otherlanguages": "به دیگه زبانانی‌تا",
        "redirectedfrom": "(گردینته بوته شه $1 ئا)",
        "redirectpagesub": "تاکدیمی تغییرمسیر داتین",
        "redirectto": "گردینتین په:",
-       "lastmodifiedat": "ای تاکدیم آخرین‌ وارا بی $1 سائت $2 تا تغییر بوته.",
+       "lastmodifiedat": "ای تاکدیم آخرین‌ وارا بِه $1‌ تاریخئا و $2 ساعت‌‌ئا گردینته بوته.",
        "viewcount": "شه ای تاکدیما کسی {{PLURAL:$1|یکوار|$1ور}} دیدن کورته.",
        "protectedpage": "قُلپ بوتگین تاکدیم",
-       "jumpto": "جوپ کورتین بی:",
-       "jumptonavigation": "ناوبری",
+       "jumpto": "جوپ کورتین بِه:",
+       "jumptonavigation": "جهت یابي",
        "jumptosearch": "گشتین",
        "view-pool-error": "متاسفانه موچین سرویس بی انونین وختا باز مشغول انت.\nبازین شه کار گیروکان لوٹنت که ای تاکدیما بگیندنت. \nمهربانی بکنیت دیم شه ایشی که پدا په ای تاکدیمی دیستینا کوشش بکنیت یک کمی صبر بکنیت.\n\n$1",
        "generic-pool-error": "متاسفانه موچین سرویس بی انونین وختا باز مشغول انت.\nبازین شه کار گیروکان لوتنت که ای تاکدیما بگیندنت. \nمهربانی بکنیت دیم شه ایشی که پدا په ای تاکدیمی دیستینا کوشش بکنیت یک کمی صبر بکنیت.",
        "pool-servererror": "پول سنتر سرویس بی دسترس ئا نه اینت ( $1 ).",
        "poolcounter-usage-error": "خطا استفاده شه: $1",
        "aboutsite": "بی بارها {{SITENAME}}",
-       "aboutpage": "Project:بی بارها",
+       "aboutpage": "Project:بِه باره‌ئا",
        "copyright": "محتوایات بی  $1 اجازه نامه ئا هستنت مگه ای که آی خلاف ئا ذکر بوته بیئنت .",
        "copyrightpage": "{{ns:project}}:کاپی رایت یا باز کورتینی حق",
-       "currentevents": "اÙ\86Ù\88Ù\86Û\8cÙ\86 Ù\88اÙ\82ئات",
-       "currentevents-url": "Project:اÙ\86Ù\88Ù\86Û\8cÙ\86 Ù\88اÙ\82ئاتان",
+       "currentevents": "اÙ\86Ù\88Ù\86Û\8cÙ\86 Ù\88اÙ\82عات",
+       "currentevents-url": "Project:اÙ\86Ù\88Ù\86Û\8cÙ\86 Ù\88اÙ\82عاتان",
        "disclaimers": "تکذیب‌ نامه‌هان",
-       "disclaimerpage": "Project:ئÙ\85Ù\88Ù\85Û\8c Ø¦Û\8cÙ\86 ØªÚ©Ø°Û\8cبâ\80\8c نامه",
+       "disclaimerpage": "Project:عÙ\85Ù\88Ù\85Û\8câ\80\8cئÛ\8cÙ\86 ØªÚ©Ø°Û\8cبâ\80\8câ\80\8cنامه",
        "edithelp": "کومک په ایدیت ئی خاتیرا",
        "helppage-top-gethelp": "کومک",
        "mainpage": "بُنیادی تاکدیم",
        "policy-url": "Project:سیاست‌ئان",
        "portal": "کار زوروکانئ داخل بوتین",
        "portal-url": "Project:کار زوروکانئ داخل بوتین",
-       "privacy": "سیاست محرمانگی",
-       "privacypage": "Project:سیاست محرمانگی",
+       "privacy": "محرمانگین سیاست",
+       "privacypage": "Project:محرمانگین سیاست",
        "badaccess": "دسترسی ئی خطا",
        "badaccess-group0": "شما اجازه په ای ئملی اجرائا که درخواست کورته ئیت نداریت.",
        "badaccess-groups": "ای ئملی که شما درخواست کورته ئیت مخصوص بی  {{PLURAL:$2|ای گروپ|ای گروپ ئان}} شه کار زوروکان اینت: $1.",
        "viewsourceold": "نشان داتین مبدائی",
        "editlink": "ایڈیٹ",
        "viewsourcelink": "نشان داتین مبدائی",
-       "editsectionhint": "ایدیت کورتین : $1 بخشی",
-       "toc": "Ù\85حتÙ\88Û\8cات",
+       "editsectionhint": "$1‌ئی: بخشێ ایڈیت کورتین",
+       "toc": "Ù\84Ú\91",
        "showtoc": "نشان داتین",
        "hidetoc": "چیهر داتین",
        "collapsible-collapse": "بستین",
        "feed-invalid": "هبر وانی وراک ئی قیسم جواز نداریت.",
        "feed-unavailable": "هبر وانی وراک ئان بی دسترس نه انت",
        "site-rss-feed": "آراس‌اس وراک په $1",
-       "site-atom-feed": "اتومئ وراک په $1",
+       "site-atom-feed": "اتومین وررگ په $1",
        "page-rss-feed": "آراس‌اس وراک په \"$1\"",
-       "page-atom-feed": "اتومي وراک په «$1»",
+       "page-atom-feed": "اتومين وررگ په «$1»",
        "red-link-title": "$1 ( دیم موجود نه اینت)",
        "sort-descending": "نزولین ترتیب کورتین",
        "sort-ascending": "صعودی ترتیب کورتین",
        "perfcached": "همراهی کنوکین دیتا شه نهانی ئین حافظهٔ ئا فراخوانی بوته و ممکن اینت کاملاً اپڈیٹ نه بوته. حداکثر {{PLURAL:$1|یک نتیجه| $1 نتیجه}} بي نهانی ئین حافظهٔ تا دسترس ئی وڈ اینت.",
        "perfcachedts": "همرای کنوکین دیتا شه نهانی ئین حافظه ئا فرخوانی بوته و آخرین وار  بئ  $1 ئی تا اپڈیٹ بوته. حداکثر {{PLURAL:$4|یک نتیجه|$4 نتیجه}} بئ نهانی ئین حافظه تا دسترس ئی وڈ اینت.",
        "querypage-no-updates": "ای تاکدیمی اپڈیٹ کورتین انون غیر فئال بوته.\nای تاکدیمی مئلومات ممکن اینت که نوک نه بوته انت.",
-       "viewsource": "Ù\86شاÙ\86 Ø¯Ø§ØªÛ\8cÙ\86 Ù\85بدائÛ\8c",
+       "viewsource": "Ù\85بدائÛ\8cÙ\86 Ù\86Ù\85اÛ\8cØ´",
        "viewsource-title": "مبدا ئی نشان داتین په $1",
        "actionthrottled": "شمی ئملی دیم گیپته بوت",
        "actionthrottledtext": "په دیمگیری شه اسپم شینک بوتینی خاتیرا، په شما اجازه نه اینت که ایرنگین ئملی ئا چینکه وار بی یک کمین وختی تا انجام دهیت.\nمهربانی بکنیت پد شه چینکه دقیقه ئا کوشش بکنیت.",
        "myprivateinfoprotected": "شما په وتئ شخصین مئلوماتانئ ایڈیٹ ئی اجازه ئه نداریت.",
        "mypreferencesprotected": "شما په وتئ تنظیماتانئ ایڈیٹ ئی خاتیرا اجازه نداریت.",
        "ns-specialprotected": "خاصین تاکدیم موچ غیر پئال انت.",
-       "titleprotected": "اÛ\8c Ø¦Ù\86Ù\88اÙ\86 Ø´Ù\87 [[User:$1|$1]] Ù\86Û\8cÙ\85گا Ù¾Ù\87 Ø¬Ù\88Ú\91 Ú©Ù\88رتÛ\8cÙ\86ئ Ù\85Ù\82ابÙ\84ا Ù\82Ù\8fÙ\84Ù¾ Ø¨Ù\88تÙ\87.\nÙ\88تئ Ø¯Ù\84Û\8cÙ\84 Ø¦Ø§ Ù¾Û\8cØ´ Ú©Ù\88رتÙ\87 Ø§Û\8cØ´ Ø§Û\8cÙ\86ت : Â«''$2''».",
+       "titleprotected": "اÛ\8c Ø¹Ù\86Ù\88اÙ\86 Ø´Ù\87 [[User:$1|$1]] Ù\86Û\8cÙ\85گا Ù\82Ù\8fÙ\84Ù¾ Ø¨Ù\88تÙ\87.\nØ¢Û\8c Ù¾Û\8cØ´ Ø¨Ù\88تÙ\87 Ø¦Û\8cÙ\86 Ø¯Ù\84Û\8cÙ\84 Ø§Û\8cØ´ Ø§Û\8cÙ\86ت: <em>$2</em>.",
        "filereadonlyerror": "«$1» ئی فایلئ تغیر داتین ممکن نه اینت چون ه «$2» ئی فایلي مخزن فقط بی وانتینی ئین  حالت ئی تا قرار داریت.\n\nمدیری که آیرا قُلپ کورته ایرنگ توضیح داته:  «$3».",
        "invalidtitle-knownnamespace": "نا موتبرین ئنوان گو نامئ فضای  «$2» و متن ئی  «$3»",
        "invalidtitle-unknownnamespace": "ناموتبرین ئنوان گو نا زاتین نامئ فضای شماره  $1 و متن ئی «$2»",
        "userlogin-createanother": "دیگرین کار زوروکین حسابئ جوڑ کورتین",
        "createacct-emailrequired": "ایمیل ادرس",
        "createacct-emailoptional": "ایمیل ادرس (اختیاری)",
-       "createacct-email-ph": "وتئ ایمیل ادرسا داخل بکنیت",
+       "createacct-email-ph": "وتي ایمیل ادرسا داخل بکنیت",
        "createacct-another-email-ph": "ایمیل ادرسی داخل کورتین",
        "createaccountmail": "استفاده شه تصادفین پاسوردا و آیی دیم داتین بی مشخصین ایمیل ادرسیا",
        "createacct-realname": "واقئین نام (اختیاری)",
        "createaccountreason": "دلیل:",
        "createacct-reason": "دلیل",
        "createacct-reason-ph": "پچی شما لوٹیت که دیگرین کار زوروکین حساب جوڑ کنیت؟",
-       "createacct-submit": "وتئ کار زوروکین حسابا جوڑ کنیت",
+       "createacct-submit": "وتي کار زوروکین حسابا جوڑ کنیت",
        "createacct-another-submit": "دیگرین کار زوروکین حسابئ جوڑ کورتین",
        "createacct-benefit-heading": "ای {{SITENAME}} چو شمیا همیرنگین مردمانی واسطه ئا جوڑ بوته",
        "createacct-benefit-body1": "{{PLURAL:$1|ایڈیٹ}}",
        "subject": "موضو/ئنوان:",
        "minoredit": "ای یک گونڈین ایڈیٹئ است",
        "watchthis": "دیستین ای تاکدیمی",
-       "savearticle": "اÛ\8c ØªØ§Ú©Ø¯Û\8cÙ\85 Ø°Ø®Û\8cرÙ\87 Ø¨Û\8cئت",
+       "savearticle": "تاکدÛ\8cÙ\85ئ Ø³Ø§ØªÛ\90تÛ\8cÙ\86",
        "preview": "دیم دیست",
        "showpreview": "دیم دیست",
        "showdiff": "تغیراتانئ نشان داتین",
        "accmailtitle": "پاسورد دیم داته بوت.",
        "newarticle": "(نوکین)",
        "newarticletext": "شما یک لینک ئی پدا گیپته ئیت و بي ورّق ئی رسیته ئيت که تا انون موجود نه اینت .\nپه ای ورّق ئی جۆڑ کورتینی خاتیرا، به جهلگین چارگوش ئی تا په نیوشیتین ئا شرو بکنیت (په گیشتیرین مالوماتان [$1 کومک ئی ورّق  ] ئا بگیندیت).\nاگه نالوٹگ ایدا آته ئیت، وتی بروزیر تا «بێرگشت» ئی کیلی ئا پرینچیت.",
-       "noarticletext": "ای تاکدیم همی انون هیچ متنئ نداریت .\nشما ئه توانیت که بئ دیگه تاکدیمانئ [[Special:Search/{{PAGENAME}}|ای تاکدیمی ئنوانا بگردیت]]،\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} مربوطین سیاه چال ئا هم بگردیت ]،\nیا [{{fullurl:{{FULLPAGENAME}}|action=edit}} ای تاکدیما ایڈیٹ بکنیت]</span>.",
+       "noarticletext": "ای تاکدیم انونین وختا هیچ متنئ نداریت.\nشما ئه توانێت که بِه دیگه تاکدیمانئ تا [[Special:Search/{{PAGENAME}}|ای عنوانئ پدا بگردێت]]،\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} مربوتين کورم-جاهاني تا هم بگردێت]،\nیا [{{fullurl:{{FULLPAGENAME}}|action=edit}} ای تاکدیما جۆڑ بکنێت]</span>.",
        "noarticletext-nopermission": "ای تاکدیم همی انون هیچ متنی نداریت.\nشما ئه توانیت که دیگه تاکدیمانئ تا [[Special:Search/{{PAGENAME}}|ای ئنوانئ پدا بگردیت ]]،\nیا <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} مرتبطین سیاه چال ئانئ پدا بگردیت ]</span> ولی شما په ای تاکدیمئ جوڑ کورتینا اجازه نداریت.",
        "missing-revision": "#$1 ئی ایڈیٹ شه  «{{FULLPAGENAME}}» ئی تاکدیما موجود نه اینت.\n\nمعمولاً بئ اثر لینک بئ تاریخچهٔ ئا اپڈیٹ نه بوته و تاکدیم پاک بوته.\nتوانیت ایدت مئلومات بئ  [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} پاک بوته ئین سیاه چال ئی] تا بگیندیت.",
        "userpage-userdoesnotexist": "«<nowiki>$1</nowiki>» ئی کار زوروکین حساب راجستر نه بوته.\nمهربانی بکنیت مطمائین بئیت که لوٹیت ای تاکدیما جوڑ یا ایڈیٹ بکنیت.",
        "previousrevision": "→ قدیمین نخسه",
        "nextrevision": "نوکین نخسه ←",
        "currentrevisionlink": "انونین نخسه یی نشان داتین",
-       "cur": "فعلی",
+       "cur": "انونین",
        "next": "بعدی",
        "last": "دیمتیرین",
        "page_first": "اولین",
        "difference-title": "$1: نخسه ئانی مانجینا فرق",
        "difference-title-multipage": "$1 و $2:تاکدیمانئ مانجینی فرق",
        "difference-multipage": "(تاکدیمانی مانجینا فرق)",
-       "lineno": "سطر $1:",
+       "lineno": "$1‌ئین سطر:",
        "compareselectedversions": "انتخاب بوته ئین نخسه ئانی مقایسه",
        "showhideselectedversions": "انتخاب بوته ئین نخسه ئانی پدیداری تغیر",
        "editundo": "خنثی‌ کورتین",
        "search-result-size": "$1 ({{PLURAL:$2|یک کلیمه|$2 کلیمه}})",
        "search-result-category-size": "{{PLURAL:$1|یک عضو|$1 عضو}} ({{PLURAL:$2|یک گۆنڈ تهر|$2 گۆنڈ تهر}}، {{PLURAL:$3|یک فایل|$3 فایل}})",
        "search-redirect": "($1 یي گردینتین)",
-       "search-section": "(بخش $1)",
+       "search-section": "($1 بخش)",
        "search-category": "(تهر  $1)",
        "search-file-match": "(فایلی محتوایی یکرنگی)",
        "search-suggest": "آیا شمی منظور ایش ات: $1",
        "showingresults": "نشان داتین حداکثر {{PLURAL:$1|'''۱''' نتیجه|'''$1''' نتیجه}} بی جهلگا، شرو شه شماره ئی  '''$2'''.",
        "showingresultsinrange": "نمایش بی جهلگا {{PLURAL:$1|<strong>1</strong> نتیجه|<strong>$1</strong> نتیجه}} بی محدودهٔ ئی #<strong>$2</strong> تا #<strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|نتیجه ئان <strong>$1</strong> شه <strong>$3</strong>|نتیجه ئان <strong>$1 - $2</strong> شه <strong>$3</strong>}}",
-       "search-nonefound": "نتیجه په چیزی که شما لوٹیته تیت بی دست نه یات.",
+       "search-nonefound": "نتیجه په چیزی که شما لوٹیته‌تیت به‌دست نه یات.",
        "powersearch-legend": "پیشرفته ئین گشتین",
        "powersearch-ns": "گشتین بی نامئ فضائان:",
        "powersearch-togglelabel": "چیک کورتین:",
        "right-blockemail": "دیگه کار زوروکانئ بلاک کورتین شه ایمیل ئی دیم داتین ئا",
        "right-hideuser": "کار زوروکئ بلاک کورتین و چیهر داتین شه عمومی ئی دیدا",
        "right-ipblock-exempt": "تاسیر نه گیپتین شه آی پی ئین بلاک ئی ، وتکارین یا پاسیله ئین بلاکان",
-       "right-proxyunbannable": "تاسیر نه گیپتین شه وتکارین پروکسی ئی بلاک بوتین ئان",
        "right-unblockself": "وتي دسترسی ئی پاچ کورتین",
        "right-protect": "قُلپ بوته تاکدیمانئ قلپی میزانی تغیر داتین و آوانی ایڈیٹ کورتین",
        "right-editprotected": "ایڈیٹ کورتین قُلپ بوته ئین تاکدیمانی بئ ئنوانئ «{{int:protect-level-sysop}}»",
        "recentchanges-noresult": "هیچ تغیری بئ تعین بوته ئین دوره ئی تا گۆ ای معیاران هموانی نداشت.",
        "recentchanges-feed-description": "به ائ ویکیێ تا نۆکین و آخیرئین تغیرانه به ای فیڈئ تا بگیندێت.",
        "recentchanges-label-newpage": "ای ایڈیٹ نوکین تاکدیمی ئا جوڑ کورت",
-       "recentchanges-label-minor": "ای یک گونڈین ایڈیٹئ است",
-       "recentchanges-label-bot": "ای ایڈیٹا یک ربات ئی کورته",
+       "recentchanges-label-minor": "ای یک گونڈین ایڈیٹئ اینت",
+       "recentchanges-label-bot": "ای ایڈیٹا یک رباتئی کورته",
        "recentchanges-label-unpatrolled": "ای ایڈیٹ تا انون گشت وارته نه بوته",
-       "recentchanges-label-plusminus": "تاکدیمئ حجم بئ ای اندازگ بایٹ ئا تغیر کورته",
-       "recentchanges-legend-heading": "'''اختصارئان:'''",
+       "recentchanges-label-plusminus": "تاکدیمئ حجم بِه ای اندازگ بایٹ‌ئا تغیر کورته",
+       "recentchanges-legend-heading": "<strong>اختصارئان:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (همیرنگ بی [[Special:NewPages|نوکین تاکدیمانئ لڑ لیست]] ئا سیل بکنیت)",
-       "rcnotefrom": "بئ جهلگا تغیرات شه <strong>$3, $4</strong> (تا <strong>$1</strong> {{PLURAL:$5|نشان داته بوته|نشان داته انت}}).",
+       "rcnotefrom": "بِه جهلگا تغیرات شه <strong>$3, $4</strong> (تا <strong>$1</strong> {{PLURAL:$5|نشان داته بوته|نشان داته انت}}).",
        "rclistfrom": "نوکین تغیراتانئ نشان داتین شرو شه $3 $2",
        "rcshowhideminor": "$1 ئی کمین ایڈیٹان",
        "rcshowhideminor-show": "نشان داتین",
        "rcshowhidecategorization-show": "نشان داتین",
        "rcshowhidecategorization-hide": "چیهر داتین",
        "rclinks": "نشان داتین $1 آخیر ئین تغییر بئ $2 اخیرین روچا<br />$3",
-       "diff": "تفاوت",
+       "diff": "فرق",
        "hist": "تاریخچه",
        "hide": "چیهر داتین",
        "show": "نشان داتین",
        "recentchangeslinked-toolbox": "مربوتین تغیراتان",
        "recentchangeslinked-title": "مربوتین تغیراتان گو $1",
        "recentchangeslinked-summary": "بئ جهلگا یک لڑلیست ئی شه آخیرئین ٹگلان گیندیت که بئ تاکدیما لینک بوته انت (یا چَمّی چیهری شریکین تهر) ئانه گیندیت .\nآ تاکدیمان که [[Special:Watchlist|شمی پدگیری لیست]] ئی تا به ینت '''پررنگ''' نشان داته ئه به ینت.",
-       "recentchangeslinked-page": "تاکدیم نام:",
+       "recentchangeslinked-page": "تاکدیمئ نام:",
        "recentchangeslinked-to": "نشان داتین تاکدیماني تغیرات که گۆ ای تاکدیما لینک دارنت",
        "recentchanges-page-added-to-category": "[[:$1]] به تهرئ تا اڈ بوت",
        "recentchanges-page-added-to-category-bundled": "[[:$1]] و {{PLURAL:$2|یک دیم|$2 pages}} به تهرئ تا اڈ بوتنت",
        "upload-description": "فایلی توضیحات",
        "upload-options": "بُرز کورتین یا آپلوڈئ اپشن",
        "watchthisupload": "دیستین ای فایلی",
-       "upload-success-subj": "بُرز کورتین یا آپلوڈ گو کامیابی ئا انجام بوت",
-       "upload-success-msg": "شمی بُرز کورتین شه [$2] ئا کامیاب ات. توانیت که ای پایل ئا ایدا : [[:{{ns:file}}:$1]] بگیندیت",
-       "upload-failure-subj": "بُرز کنوکی پرابلم",
-       "upload-failure-msg": "یک مشکل بئ بُرز کورتینا شه [$2] ئا وجود داشت:\n\n$1",
-       "upload-warning-subj": "بُرز کورتینئ هشدار",
        "upload-proto-error": "نادروستین پروتوکول",
        "upload-proto-error-text": "بُرز کورتین شه دوردستا به ادرس ئان که گو <code dir=ltr>http://</code> یا <code dir=ltr>ftp://</code>  ئی شرو بیئنت ضرورت داریت .",
        "upload-file-error": "داخلین خطا",
        "upload-dialog-button-done": "اجراء",
        "upload-dialog-button-save": "ساتیتێن",
        "upload-dialog-button-upload": "بُرز کورتین",
-       "upload-form-label-select-file": "فایلئ نشاني کورتین",
        "upload-form-label-infoform-title": "پاک کورتین (شه بین بورتین)",
        "upload-form-label-infoform-name": "نام",
        "upload-form-label-infoform-description": "توضیحان",
        "filehist-dimensions": "ابعاد",
        "filehist-filesize": "فایلی اندازه",
        "filehist-comment": "کومنیت",
-       "imagelinks": "بی کار گیپتین فایلئ",
+       "imagelinks": "کار گیپتین شه فایلا",
        "linkstoimage": "{{PLURAL:$1|تاکدیم|تاکدیمان}} جهلگین بی اکسا لینک {{PLURAL:$1|داریت|دارنت}}:",
        "linkstoimage-more": "گیشتیر شه $1 تاکدیم گۆ ای فایلا لینک {{PLURAL:$1|داریت|دارنت}}.\nجهلگی لڑ تانا {{PLURAL:$1|اولین لینک|اولین $1 لینک}} گۆ ای دیما نشان ئا دنت.\n[[Special:WhatLinksHere/$2|کامیلین لیست]] هم موجود اینت.",
        "nolinkstoimage": "شه ای فایلا بِه هیچ تاکدیمئ تا کار گیپته نه بوته.",
        "listduplicatedfiles-entry": "[[:File:$1|$1]][[$3|{{PLURAL:$2|یک تکرار|$2 تکرار}}]] داریت.",
        "unusedtemplates": "استفاده نه بوته ئین تراشوانان",
        "unusedtemplateswlh": "دیگه لینک ئان",
-       "randompage": "تصادفی مقاله",
+       "randompage": "تصادفین مقاله",
        "randomincategory": "تصادفین تاکدیم بئ تهر ئی تا",
        "randomincategory-invalidcategory": "«$1» یک موتبرین نامئ په تهر ئان نه اینت.",
        "randomincategory-nopages": "هیچ تاکدیمی بئ  [[:Category:$1|$1]] ئی تهری تا موجود نه اینت.",
        "querypage-disabled": "دلیلان.",
        "apihelp": "API کومک",
        "apihelp-no-such-module": "موڈیل \" $1 \" ودی نه بوت.",
+       "apisandbox-reset": "پاک کورتین",
        "booksources": "کتابئ منبه ئان",
        "booksources-search-legend": "په کتایئ منابی ئان خاتیرا گشتین",
        "booksources-search": "گشتین",
        "allpagesto": "تاکدیمانئ نشان داتین الاسئ گو:",
        "allarticles": "موچین تاکدیمان",
        "allinnamespace": "موچین تاکدیمان ($1 نامی فضا)",
-       "allpagessubmit": "برا",
+       "allpagessubmit": "بررÙ\87",
        "allpagesprefix": "تاکدیمانی نمایش گۆ دیمۆندا:",
        "allpagesbadtitle": "شمی درخواستین ئنوان ناموتبر،خالی،یا میان زبانین یا میان ویکی ئین ئنوان و یا شه خرابین لینکی است.\nممکن اینت که یک یا چینکه نویسگ داشته بیئت که نتوانن آوانا بئ تاکدیمانی ئنوانانی تا استیپاده کنن.",
        "allpages-bad-ns": "{{SITENAME}} ، «$1» ئی نامی فضا ئا نداریت.",
        "wlheader-showupdated": "تاکدیمان که شه شمی آخیرین دیستینا پد تغیر بوته انت '''پررنگ''' نشان داته بیئنت.",
        "wlnote": "بئ جهلگا {{PLURAL:$1|تغییری|<strong>$1</strong> تغییری}} که بئ {{PLURAL:$2|سائت|<strong>$2</strong> سائت}} دیمتیرا انجام بوته موجود اینت، آخیرین بازیابی تاریخ: $3، $4",
        "wlshowlast": "نشان داتین آخیرئین $1 سائت $2 روچئ",
-       "watchlistall2": "موچ",
        "watchlist-hide": "چیهر داتین",
        "watchlist-options": "واچلیستئ آپشن",
        "watching": "بئ دیستینئ حالا...",
        "deleteprotected": "شما نه توانیت که ای تاکدیما پاک کنیت چون که شه آیی محافظت بوته.",
        "deleting-backlinks-warning": "''' هشدار:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|دیگرین تاکدیم]] هستنت که گۆ ای تاکدیما که شما ئه لوٹیت آیرا پاک بکنیت لینک بوته انت.",
        "rollback": "ایڈیٹئ بیئرگردینتین",
-       "rollbacklink": "بÛ\8cجا Ø¢Ù\88رتین",
+       "rollbacklink": "بÛ\8cرگردÛ\8cÙ\86â\80\8cتین",
        "rollbacklinkcount": "بیئرگردینتین $1 {{PLURAL:$1|ایڈیٹ|ایڈیٹ هانئ}}",
        "rollbacklinkcount-morethan": "بیئرگردینتین گیشتیر شه $1 ایڈیٹا",
        "rollbackfailed": "بیئرگردینته نه بوت",
        "blocklink": "بلاک یا بستین",
        "unblocklink": "پاچ یا انبلاک بێت",
        "change-blocklink": "بلاک ئی تغیرداتین",
-       "contribslink": "مشارکت ئان",
+       "contribslink": "شراکت‌ئان",
        "emaillink": "ایمیلی دیم داتین",
        "blocklogpage": "کورمئ بستین",
        "blocklogentry": "«[[$1]]» ئا تا $2 بست $3",
        "javascripttest-pagetext-unknownaction": "نازانتین اکشن \"$1\".",
        "javascripttest-pagetext-skins": "پوسته‌ای ئا په آزمایشانی اجرا ئا انتخاب کنیت:",
        "javascripttest-qunit-intro": "[$1 آزمایشی مشتندانا] بئ mediawiki.org تا بگیندیت.",
-       "tooltip-pt-userpage": "شمی کار زوروکئ تاکدیم",
-       "tooltip-pt-mytalk": "شمی هبر و گپئ تاکدیم",
-       "tooltip-pt-preferences": "نئ تنظیمات",
+       "tooltip-pt-userpage": "{{GENDER:|شمئ کار زُورۆکین}} تاکدیم",
+       "tooltip-pt-mytalk": "{{GENDER:|شمئ}} حبر و گپئ تاکدیم",
+       "tooltip-pt-preferences": "{{GENDER:|شمئ}} تنظیماتان",
        "tooltip-pt-watchlist": "آ دیمانی لیست که شما آوانی تغیرانا پدگیری ئا کنیت",
-       "tooltip-pt-mycontris": "شمی شراکت ئانی لیست",
-       "tooltip-pt-login": "توصیه ئه کنن که بئ سایٹ ئی تا داخل بئیت. اگرچه که ای کار په جبر و زور نه اینت",
+       "tooltip-pt-mycontris": "{{GENDER:|شمئ}} شراکتاني لڑ",
+       "tooltip-pt-login": "توصیه ئه کنن که بِه سایٹ‌ئی تا داخل به‌ئێت. اگرچه ای کار په جبر و زور نه اینت",
        "tooltip-pt-logout": "در بوتین",
-       "tooltip-pt-createaccount": "شه شما ئه لوٹن که په وت یک کار زوروکئ حساب ئی جۆڑ بکنیت و بئ سایٹ ئی تا داخل بئیت؛هرچینکه که ای کار جبری نه اینت",
+       "tooltip-pt-createaccount": "شه شما ئه لوٹن که په وت یک کار زوروکین حساب‌ئی جۆڑ بکنیت و بِه سایٹ‌ئی تا داخل به‌ئێت؛هرچینکه که ای کار جبری نه اینت",
        "tooltip-ca-talk": "ای دیمی محتوا ئانی باره ئا حبر و گپ",
        "tooltip-ca-edit": "شما ئا توانیت که ای دیما ایڈیٹ بکنیت. مهربانی بکنیت دیم شه ایشی که ای دیما ذخیره بکنیت، شه دیم دیست ئا استفاده بکنیت.",
        "tooltip-ca-addsection": "نوکین بخشی جۆڑ بکنیت",
        "tooltip-ca-move": "ای تاکدیمی انتقال",
        "tooltip-ca-watch": "اضافه کورتین ای تاکدیمی بی نی واچلیستی تا",
        "tooltip-ca-unwatch": "ڈیلیٹ کورتین ای تاکدیمی شه نی واچلیستی لڑ لیستا",
-       "tooltip-search": "گشتین بی {{SITENAME}}",
-       "tooltip-search-go": "اگÙ\87 Ø§Ù\85کاÙ\86 Ø¯Ø§Ø´ØªÙ\87 Ø¨Û\8cئت ØªØ§Ú©Ø¯Û\8cÙ\85Û\8c ØªØ§ Ú¯Ù\88 Ø§Û\8c Ù\86اÙ\85ا Ø¨Ø±Ø§",
-       "tooltip-search-fulltext": "گشتین په ای کلمه ئی خاتیرا بی تاکدیمانی تا",
+       "tooltip-search": "گشتین بِه {{SITENAME}}‌ئی تا",
+       "tooltip-search-go": "اگÙ\87 Ø§Ù\85کاÙ\86 Ø¯Ø§Ø´ØªÙ\87 Ø¨Û\90ت Ø¨Ù\87 Ø§Û\8c Ù\86اÙ\85 Ù\88Ù\84ائÛ\8cÙ\86 ØªØ§Ú©Ø¯Û\8cÙ\85Û\8c ØªØ§ Ø¨Ø±Ø±Ù\87",
+       "tooltip-search-fulltext": "به تاکدیمانی تا گشتین په ای کلمه‌ئی خاتیرا",
        "tooltip-p-logo": "بُنیاد ئین تاکدیمی دیستین",
        "tooltip-n-mainpage": "بُنیاد ئین تاکدیمی دیستین",
        "tooltip-n-mainpage-description": "بُنیاد ئین تاکدیمی دیستین",
-       "tooltip-n-portal": "بی پروژه ئی موریدا٬ آنچه که توانیت انجام دهیت و ای که چی چیزی ئا شه گوجا ودی بکنیت",
+       "tooltip-n-portal": "بِه پروژه‌ئی موریدا٬ آنچه که توانێت انجام دهیت و ای که چی چیزی‌ئا شه گوجا ودی بکنێت",
        "tooltip-n-currentevents": "پدزمینه ئین مئلوماتئ بدست آورتین شه انونین رویداد ئان",
        "tooltip-n-recentchanges": "ائ ویکیێ نۆکین و آخیرئین تغیراني لڑ",
-       "tooltip-n-randompage": "یک تصادفی ئین دیمی آورتین",
-       "tooltip-n-help": "جای په ودی کورتین ئا",
+       "tooltip-n-randompage": "یک تصادفیئین دیمی آورتین",
+       "tooltip-n-help": "جاگه په ودي کورتین‌ئا",
        "tooltip-t-whatlinkshere": "موچین تاکدیمانی لڑ لیست که گۆ ای دیما لینک وارته انت",
        "tooltip-t-recentchangeslinked": "تاکدیمانئ آخیرین تغیران که ای دیم گۆ آوان لینک داریت",
        "tooltip-feed-rss": "آراس‌اس ئی خبرنامه په ای تاکدیما",
        "tooltip-feed-atom": "اتم ئی حبرنامه په ای دیما",
-       "tooltip-t-contributions": "ای کار زوروکئ شراکتانی لڑ لیست",
+       "tooltip-t-contributions": "{{GENDER:$1|ای کار‌ زوروکئ}} شراکتانی لڑ لیست",
        "tooltip-t-emailuser": "په ای کار زوروکا ایمیل ئی دیم داتین",
        "tooltip-t-info": "ای دیمی باره ئا گیشتیرین مئلومات",
        "tooltip-t-upload": "فایلی بُرز کورتین",
        "tooltip-ca-nstab-help": "دیستین کومکی تاکدیمئ",
        "tooltip-ca-nstab-category": "دیستین تهری تاکدیمی",
        "tooltip-minoredit": "ای ایڈیٹ ئا گۆنڈ ایڈیٹ نشانگ کن",
-       "tooltip-save": "وتئ تغیرانا ذخیره بکنیت",
-       "tooltip-preview": "شمی تغیرانی دیم دیست، مهربانی بکنیت دیما شه تاکدیمی ذخیره کورتینا شه ای کیلی ئا استفاده بکنیت.",
-       "tooltip-diff": "شمی تغیرانی نمایش که شما بئ متن ئی تا داته ایت.",
+       "tooltip-save": "وتي تغیرانا ذخیره بکنیت",
+       "tooltip-preview": "شمئ تغیرانی دیم دیست، مهربانی بکنیت دیما شه تاکدیمی ذخیره کورتینا شه ای کیلی ئا استفاده بکنیت.",
+       "tooltip-diff": "شمی تغیرانی نمایش که شما بِه متن‌ئی تا داته ایت.",
        "tooltip-compareselectedversions": "ای تاکدمئ دو انتخاب بوته ئین نخسه ئاني فرقاني دیستین",
        "tooltip-watch": "ای دیما به وتي واچلیست یا پدگیری لیستئ تا اڈڈ بکنیت",
        "tooltip-watchlistedit-normal-submit": "ئنوانانی پاک کورتین",
        "pageinfo-hidden-categories": "چیهرین {{PLURAL:$1| تهر|تهر هان}} ( $1 )",
        "pageinfo-templates": "{{PLURAL:$1|تراشوان|تراشوان}} استفاده‌ بوته ($1)",
        "pageinfo-transclusions": "{{PLURAL:$1|تاکدیم|تاکدیمان}} ترانسکلوڈ بوتگ بئ ($1) تا",
-       "pageinfo-toolboxlink": "تاکدÛ\8cÙ\85ئ Ù\85ئلومات",
+       "pageinfo-toolboxlink": "تاکدÛ\8cÙ\85ئ Ù\85الومات",
        "pageinfo-redirectsto": "تغییر مسیر بی",
        "pageinfo-redirectsto-info": "مئلومات",
        "pageinfo-contentpage": "هیساب بوته بئ ئنوان مهتوائین دیمی",
        "exif-copyright": "کاپی رایٹ ئی واوُند",
        "exif-exifversion": "exif ئی نخسه",
        "exif-flashpixversion": "Flashpix ئی پُشتیوانی بوته ئین نخسه",
-       "exif-colorspace": "رنگانئ فضا",
+       "exif-colorspace": "رنگاني فضا",
        "exif-componentsconfiguration": "هریک شه مووله په ئانی مانا",
        "exif-compressedbitsperpixel": "اکس ئی پشرده ئی هالت",
        "exif-pixelydimension": "اکسئ گۆر",
index a46373b..cf66e2b 100644 (file)
@@ -5,7 +5,8 @@
                        "Ganesh",
                        "Nepaboy",
                        "Rajivkurjee",
-                       "SatyamMishra"
+                       "SatyamMishra",
+                       "Macofe"
                ]
        },
        "tog-underline": "कड़ी अंडरलाइन कइल:",
        "myprivateinfoprotected": "रउआ लगे आपन व्यक्तिगत जानकारी बदले के अनुमति नइखे।",
        "mypreferencesprotected": "रउआ लगे आपन वरियतां ‍‍‍‍(पसंद) बदले के अधिकार नइखे।",
        "ns-specialprotected": "विशेष पन्ना के सम्पादन सम्भव नइखे",
-       "titleprotected": "सदस्य [[User:$1|$1]] द्वारा इ शीर्षक के पन्ना बनावे से बचाव खातिर इ के सुरक्षित कर दिहल गइल बा।\nइ खातिर निम्न कारण दिहल गइल बा: \"''$2''\"",
+       "titleprotected": "सदस्य [[User:$1|$1]] द्वारा इ शीर्षक के पन्ना बनावे से बचाव खातिर इ के सुरक्षित कर दिहल गइल बा।\nइ खातिर निम्न कारण दिहल गइल बा: <em>$2</em>",
        "filereadonlyerror": "फाइल \"$1\" के बदलल सक्षम नइखे काहे कि संग्रह \"$2\" 'खाली पाठन हेतु' (रिड ऑन्ली) मोड में बा।\n\nजउन प्रबंधक इ प्रबंध लगउले बानी उहाँ के निम्न विवरण प्रदान कइले बानी: \"$3\"।",
        "invalidtitle-knownnamespace": "\"$2\" नामस्थान आ \"$3\" पाठ्य वाला गलत शीर्षक",
        "invalidtitle-unknownnamespace": "अज्ञात नामस्थान संख्या $1 आ नाम \"$2\" वाला गलत शीर्षक",
        "undo-summary-username-hidden": "एगो छिपल सदस्य द्वारा कइल बदलाव $1 वापस कइल गइल",
        "cantcreateaccounttitle": "खाता खुल नईखे सकत",
        "cantcreateaccount-text": "एह आइपी पता (IP address)(<strong>$1</strong>) द्वारा नया खाता बनावे पर  [[User:$3|$3]] द्वारा रोक लगावल गइल बा।\n\nएकरा खातिर $3 के दिहल कारण:<em>$2</em>",
-       "cantcreateaccount-range-text": "आइपी पता बिस्तार (IP address range) '''$1''' पर, जेवना में आपके आइपी ('''$4''') भी बा, नया खाता बनावे पर [[User:$3|$3]] द्वारा रोक लगावल गइल बा।\n\nएकरा खातिर $3 के दिहल कारण बा:''$2''",
+       "cantcreateaccount-range-text": "आइपी पता बिस्तार (IP address range) <strong>$1</strong> पर, जेवना में आपके आइपी (<strong>$4</strong>) भी बा, नया खाता बनावे पर [[User:$3|$3]] द्वारा रोक लगावल गइल बा।\n\nएकरा खातिर $3 के दिहल कारण बा:<em>$2</em>",
        "viewpagelogs": "ए पन्ना खातिर लॉग कुल देखीं",
        "nohistory": "ए पन्ना के कौनों संपादन इतिहास नइखे",
        "currentrev": "सबसे नया बदलाव",
        "recentchanges-label-bot": "इ संपादन एगो बॉट द्वारा कइल गइल बा",
        "recentchanges-label-unpatrolled": "ए संपादन के अभिन ले जाँचल नइखे गइल",
        "recentchanges-label-plusminus": "एतना बाइटस् से पन्ना के साइज बदलल गइल",
-       "recentchanges-legend-heading": "'''संकेत:'''",
+       "recentchanges-legend-heading": "<strong>संकेत:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (इहो देखीं [[Special:NewPages|नया पन्नवन के लिस्ट]])",
        "rclistfrom": "$2, $3 से शुरु नया बदलाव देखाईं",
        "rcshowhideminor": "$1 छोट संपादन",
        "upload-options": "अपलोड बिकल्प",
        "watchthisupload": "ई फाइल के धियान रखीं",
        "filewasdeleted": "एही नाँव के एगो फाइल पहिले अपलोड भइल रहे आ बाद में हटावल गइल। पहिले आप $1 के जाँच लीं फिर अपलोड करे खातिर आगे बढ़ीं।",
-       "upload-success-subj": "सफलता से अपलोड भइल",
-       "upload-failure-subj": "अपलोड समस्या",
-       "upload-warning-subj": "अपलोड चेतावनी",
        "upload-proto-error": "गलत प्रोटोकाल",
        "upload-file-error": "इंटरनल खराबी",
        "upload-misc-error": "नामालूम अपलोड खराबी",
        "upload-dialog-button-done": "पूरा भइल",
        "upload-dialog-button-save": "सहेजीं",
        "upload-dialog-button-upload": "अपलोड",
-       "upload-form-label-select-file": "फाइल चुनीं",
        "upload-form-label-infoform-title": "डिटेल जानकारी",
        "upload-form-label-infoform-name": "नाँव",
        "upload-form-label-infoform-description": "विवरण",
index 5c178ff..9648250 100644 (file)
        "customcssprotected": "Pian kada baisi ijin mambabak tungkaran CSS ngini, karana ngini baisi setelan paribadi pamakai lain.",
        "customjsprotected": "Pian kada baisi ijin mambabak tungkaran JavaScript ngini, karana ngini baisi setelan paribadi pamakai lain.",
        "ns-specialprotected": "Tungkaran istimiwa kada kawa dibabak.",
-       "titleprotected": "Judul ngini dilindungi matan paulahan ulih [[User:$1|$1]].\nAlasan nang dibariakan adalah ''$2''.",
+       "titleprotected": "Judul ngini dilindungi matan paulahan ulih [[User:$1|$1]].\nAlasan nang dibariakan adalah <em>$2</em>.",
        "filereadonlyerror": "Kada kawa mamudipikasi data \"$1\" marga repositori data \"$2\" ada di modus read-only.\n\nAdministrator nang takunci nintu manawarakan panjalasan: \"$3\".",
        "invalidtitle-knownnamespace": "Judul nang kada sah lawan ruang-ngaran \"$2\" wan teks \"$3\"",
        "invalidtitle-unknownnamespace": "Judul nang kada sah lawan numur ruang ngaran kada dikatahui $1 wan teks \"$2\"",
        "passwordreset-emailtext-ip": "Ada urang (pinanya Pian, matan alamat IP $1) maminta sabuting pangingat hagan rarincian akun Pian gasan {{SITENAME}} ($4). Pamakai barikut {{PLURAL:$3|akun|akun}}\ntarait awan suril:\n\n$2\n\n{{PLURAL:$3|katasunduk pahadangan ngini|kakatasunduk pahadangan ngini}} akan kadaluarsa dalam {{PLURAL:$5|asa hari|$5 hari}}.\nPian parlu babuat log wan mamilih katasunduk hanyar wayah ni jua. Amun urang lain nang maminta ngini, atawa amun Pian sudah paingatan awan katasunduk Pian, wan Pian kada handak maubahnya, Pian kawa kada mahuwal pasan ngini wan manyambung mamuruk katasunduk lawas Pian.",
        "passwordreset-emailtext-user": "Ada urang (pinanya Pian, matan alamat IP $1) maminta sabuting pangingat hagan rarincian akun Pian gasan {{SITENAME}} ($4). Pamakai barikut {{PLURAL:$3|akun|akun}}\ntarait awan suril:\n\n$2\n\n{{PLURAL:$3|katasunduk pahadangan ngini|kakatasunduk pahadangan ngini}} akan kadaluarsa dalam {{PLURAL:$5|asa hari|$5 hari}}.\nPian parlu babuat log wan mamilih katasunduk hanyar wayah ini jua. Amun urang lain nang maminta ngini, atawa amun Pian sudah paingatan awan katasunduk Pian, wan Pian kada handak maubahnya, Pian kawa kada mahuwal pasan ngini wan manyambung mamuruk katasunduk lawas Pian.",
        "passwordreset-emailelement": "Ngaran pamakai: \n$1\n\nKatasunduk pahadangan: \n$2",
-       "passwordreset-emailsent": "Sabuting suril pangingat sudah takirim.",
+       "passwordreset-emailsentemail": "Sabuting suril pangingat sudah takirim.",
        "passwordreset-emailsent-capture": "Sabuting suril pangingat sudah dikirim, nangkaya ditampaiakan di bawah.",
        "passwordreset-emailerror-capture": "Suril paugingat, nang ditampaikan di bawah, hudah dihasilakan, tagal gagal mangirimakannya ka pamakai: $1",
        "changeemail": "Ganti alamat suril",
        "prefs-displayrc": "Pilihan tampilan",
        "prefs-displaywatchlist": "Pilihan tampilan",
        "prefs-diffs": "Bida",
-       "email-address-validity-valid": "Alamat suril tacungul sah",
-       "email-address-validity-invalid": "Buati sabuah alamat suril nang sah",
        "userrights": "Pangalulaan hak-hak pamuruk",
        "userrights-lookup-user": "Mangalula gagalambang pamuruk",
        "userrights-user-editname": "Buati sabuah ngaran pamuruk:",
        "right-blockemail": "Blukir saurang pamuruk mangirimi suril",
        "right-hideuser": "Blukir sabuah ngaranpamuruk, sungkupakan ini matan umum",
        "right-ipblock-exempt": "Liwati blukir IP, blukir-utumatis wan aria blukir",
-       "right-proxyunbannable": "Liwati utumatis blukir matan pruksi",
        "right-unblockself": "Lapas blukirnya surang",
        "right-protect": "Ubah tingkat parlindungan wan babakan tutungkaran nang diindungi",
        "right-editprotected": "Babak tungkaran nang dilindungi (kada parlindungan barenteng)",
        "watchthisupload": "Itihi barakas ini",
        "filewasdeleted": "Sabuah barakas bangaran ngini suah dihunggah wan abis tu dihapus.\nPian musti pariksa $1 hanyar mahunggah ngini pulang.",
        "filename-bad-prefix": "Ngaran barakas nang Pian hunggah bamula lawan '''\"$1\"''', nang lainan-ngaran diskriptip biasanya utumatis dibari ulih kudakan digital.\nMuhun pilih ngaran labih diskriptip lain gasan barakas Pian.",
-       "upload-success-subj": "Kulihan mahunggah",
-       "upload-success-msg": "Hunggahan Pian matan [$2] ruhui. Ngini tasadia di sia: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Hunggah bamasalah",
-       "upload-failure-msg": "Ada sabauah masalah tadi tu pas Pian hunggah matan [$2]:\n$1",
-       "upload-warning-subj": "Paringatan mahunggah",
-       "upload-warning-msg": "Ada masalah lawan hunggahan Pian matan [$2]. Pian bulih babulik ka [[Special:Upload/stash/$1|purmulir hunggah]] hagan mambujuri masalah ngini.",
        "upload-proto-error": "Protokol kada bujur",
        "upload-proto-error-text": "Hunggahan rimut parlu URL bamula lawan <code>http://</code> atawa <code>ftp://</code>.",
        "upload-file-error": "Kasalahan di dalam",
        "rollbackfailed": "Guling-bulik luput",
        "cantrollback": "Kada kawa mambalikakan babakan;\npanyumbang tauncit adalah asa-asanya panulis tungkaran ngini.",
        "alreadyrolled": "Kada kawa malakukan pambulikan ka ralatan tauncit [[:$1]] ulih [[User:$2|$2]] ([[User talk:$2|pandir]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\npamuruk lain sudah mambabak atawa malakukan pambulikan lawan tungkaran ini.\n\nBabakan tauncit dilakukan ulih [[User:$3|$3]] ([[User talk:$3|pandir]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Kumintar pambabakan adalah: \"''$1''\".",
+       "editcomment": "Kumintar pambabakan adalah: <em>$1</em>.",
        "revertpage": "←Babakan [[Special:Contributions/$2|$2]] ([[User talk:$2|pandir]]) dibulikakan ka ralatan tauncit ulih [[User:$1|$1]]",
        "revertpage-nouser": "Pambulikan babakan ulih (pamuruk dihapus) ka babakan tauncit ulih [[User:$1|$1]]",
        "rollback-success": "Pambalikakan babakab ulih $1;\ndiubah bulik ka ralatan tauncit ulih $2.",
        "movenosubpage": "Tungkaran ngini kada baisi subtutungkaran.",
        "movereason": "Alasan:",
        "revertmove": "bulikakan",
-       "delete_and_move": "Hapus wan pindahakan",
        "delete_and_move_text": "==pahapusan diparluakan==\nTungkaran tatuju\"[[:$1]]\" sadauh tasadia.\nPian handakkah hagan mahapus ngini maulah jalan gasan pamindahan?",
        "delete_and_move_confirm": "I'ih, hapus tungkaran ngini",
        "delete_and_move_reason": "Dihapus hagan mangantisipasiakan pamindahan tungkaran matan \"[[$1]]\"",
index f123a25..69f663d 100644 (file)
@@ -26,7 +26,8 @@
                        "Wikisagnik",
                        "Aashaa",
                        "Sayma Jahan",
-                       "Macofe"
+                       "Macofe",
+                       "Bodhisattwa"
                ]
        },
        "tog-underline": "সংযোগগুলির নিচে দাগ দেখানো হোক:",
        "category-media-header": "\"$1\" বিষয়শ্রেণীতে অন্তর্ভুক্ত মিডিয়া ফাইলগুলি",
        "category-empty": "''এই বিষয়শ্রণীতে বর্তমানে কোন পাতা বা মিডিয়া ফাইল নেই।''",
        "hidden-categories": "{{PLURAL:$1|লুকায়িত বিষয়শ্রেণী|লুকায়িত বিষয়শ্রেণীসমূহ}}",
-       "hidden-category-category": "লুকায়িত বিষয়শ্রেণীসমূহ",
+       "hidden-category-category": "লà§\81à¦\95à§\8dà¦\95ায়িত à¦¬à¦¿à¦·à¦¯à¦¼à¦¶à§\8dরà§\87ণà§\80সমà§\82হ",
        "category-subcat-count": "{{PLURAL:$2|এই বিষয়শ্রেণীতে কেবলমাত্র নিচের উপবিষয়শ্রেণীটি আছে।|এই বিষয়শ্রেণীতে অন্তর্ভুক্ত মোট $2টি উপবিষয়শ্রেণীর মধ্যে {{PLURAL:$1|টি উপবিষয়শ্রেণী|$1টি উপবিষয়শ্রেণী}} নিচে দেখানো হয়েছে।}}",
        "category-subcat-count-limited": "এই বিষয়শ্রেণীতে নিচের {{PLURAL:$1|টি উপবিষয়শ্রেণী|$1টি উপবিষয়শ্রেণী আছে}}।",
        "category-article-count": "{{PLURAL:$2|এই বিষয়শ্রেণীতে কেবল নিচের পাতাটি আছে।|এই বিষয়শ্রেণীতে অন্তর্ভুক্ত মোট $2টি পাতার মধ্যে {{PLURAL:$1|টি পাতা|$1টি পাতা}} নিচে দেখানো হল।}}",
        "myprivateinfoprotected": "আপনার ব্যক্তিগত তথ্য সম্পাদনা করতে আপনার অনুমতি নেই",
        "mypreferencesprotected": "আপনার পছন্দসমূহ সম্পাদনা করতে আপনার অনুমতি নেই",
        "ns-specialprotected": "বিশেষ পাতাসমূহ সম্পাদনা করা যাবে না।",
-       "titleprotected": "[[User:$1|$1]] কর্তৃক এই শিরোনামটি সৃষ্টি করা থেকে সুরক্ষিত করা হয়েছে। কারণ: \"<em>$2</em>\"।",
+       "titleprotected": "[[User:$1|$1]] কর্তৃক এই শিরোনামটি সৃষ্টি করা থেকে সুরক্ষিত করা হয়েছে। কারণ: <em>$2</em>।",
        "filereadonlyerror": "\"$1\" ফাইলটিকে পরিবর্তন করা সম্ভব হচ্ছে না কারণ \"$2\" ফাইল সংগ্রহস্থল শুধুমাত্র-পঠন মোডে আছে।\n\nসিস্টেম প্রশাসক যিনি এটি বন্ধ করেছেন তিনি এই ব্যাখ্যা দিয়েছেন: \"$3\"।",
        "invalidtitle-knownnamespace": "অবৈধ শিরোনাম, যেখানে নামস্থান \"$2\" এবং লেখা হয়েছে \"$3\"",
        "invalidtitle-unknownnamespace": "অবৈধ শিরোনাম, যেখানে ব্যবহৃত হয়েছে অপরিচিত নামস্থান সংখ্যা $1 এবং লেখা হয়েছে \"$2\"",
        "nocookieslogin": "ব্যবহারকারীদের প্রবেশ সম্পন্ন করতে {{SITENAME}} কুকি ব্যবহার করে। আপনার ব্রাউজারে কুকি নিষ্ক্রিয় করা আছে। কুকি চালু করে আবার চেষ্টা করুন।",
        "nocookiesfornew": "ব্যবহারকারীর অ্যাকাউন্ট তৈরি হয়নি, কারণ এর উৎস সম্পর্কে আমরা নিশ্চিত নই।\nনিশ্চিত করুন আপনার কুকি সক্রিয় রয়েছে, পাতাটি পুনরায় লোড করে আবার চেষ্টা করুন।",
        "noname": "আপনি সঠিক ব্যবহারকারী নাম নির্দিষ্ট করেননি।",
-       "loginsuccesstitle": "পà§\8dরবà§\87শ à¦¸à¦«à¦²",
-       "loginsuccess": "'''আপনি এইমাত্র \"$1\" নামে {{SITENAME}}-তে প্রবেশ করেছেন।'''",
+       "loginsuccesstitle": "পà§\8dরবà§\87শ à¦\95রà§\87à¦\9bà§\87ন",
+       "loginsuccess": "<strong>আপনি এইমাত্র \"$1\" নামে {{SITENAME}}-তে প্রবেশ করেছেন।</strong>",
        "nosuchuser": "\"$1\" নামে কোন ব্যবহারকারী নেই।\nব্যবহারকারী নামের আকার সংবেদনশীল।\nআপনার বানান পরীক্ষা করে দেখুন, অথবা [[Special:UserLogin/signup|নতুন একটি অ্যাকাউন্ট খুলুন]]।",
        "nosuchusershort": "\"$1\" নামের কোন ব্যবহারকারী নেই। নামের বানান পরীক্ষা করুন।",
        "nouserspecified": "আপনাকে অবশ্যই ব্যবহারকারী নাম নির্দিষ্ট করতে হবে।",
        "createaccount-title": "{{SITENAME}}-এর জন্য অ্যাকাউন্ট সৃষ্টি",
        "createaccount-text": "কেউ $2-এর জন্য {{SITENAME}}-এ একটি অ্যাকাউন্ট সৃষ্টি করেছেন ($4)। \"$2\"-এর জন্য পাসওয়ার্ড হল \"$3\"। আপনার এখন অ্যাকাউন্টে প্রবেশ করে পাসওয়ার্ড পরিবর্তন করা উচিত।\n\nযদি ভুল করে অ্যাকাউন্টটি সৃষ্টি হয়ে থাকে, তাহলে এই বার্তাটি উপেক্ষা করুন।",
        "login-throttled": "আপনি সাম্প্রতিক সময়ে পরপর বেশ কয়েকবার প্রবেশের চেষ্টা করেছেন।\nপুনরায় চেষ্টা করার পূর্বে অনুগ্রহ করে $1 অপেক্ষা করুন।",
-       "login-abort-generic": "à¦\86পনার à¦²à¦\97à¦\87ন à¦¸à¦«à¦² à¦\9bিলà§\8b à¦¨à¦¾ - বাতিল করা হয়েছে",
+       "login-abort-generic": "à¦\86পনার à¦ªà§\8dরবà§\87শ à¦¬à§\8dযরà§\8dথ à¦¹à¦¯à¦¼à§\87à¦\9bà§\87 - বাতিল করা হয়েছে",
        "login-migrated-generic": "আপনার অ্যাকাউন্ট স্থানান্তরিত করা হয়েছে, এবং আপনার ব্যবহারকারী নাম আর এই উইকিতে বিদ্যমান নয়।",
        "loginlanguagelabel": "ভাষা: $1",
        "suspicious-userlogout": "আপনার প্রস্থানের অনুরোধ বাতিল হয়েছে কারণ অনুমিত যে আপনার ব্রাউজার অসম্পূর্ণ অথবা পূবর্বতী তথ্য প্রেরণ করেছে।",
        "newpassword": "নতুন পাসওয়ার্ড:",
        "retypenew": "নতুন পাসওয়ার্ড আবার লিখুন:",
        "resetpass_submit": "পাসওয়ার্ড দাও এবং লগ-ইন করো",
-       "changepassword-success": "à¦\86পনার à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦¸à¦¾à¦«à¦²à¦­à¦¾à¦¬à§\87 à¦ªà¦°à¦¿à¦¬à¦°à§\8dতà§\80ত à¦¹à¦¯à¦¼à§\87à¦\9bà§\87।",
+       "changepassword-success": "à¦\86পনার à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bà§\87!",
        "changepassword-throttled": "আপনি সম্প্রতি পরপর বেশ কয়েকবার প্রবেশের চেষ্টা করেছেন। পুনরায় চেষ্টা করার পূর্বে অনুগ্রহ করে $1 অপেক্ষা করুন।",
        "botpasswords": "বট পাসওয়ার্ড",
+       "botpasswords-disabled": "বট পাসওয়ার্ড নিষ্ক্রিয় করা।",
+       "botpasswords-no-central-id": "বট পাসওয়ার্ড ব্যবহার করার জন্য, আপনাকে একটি কেন্দ্রীভূত অ্যাকাউন্টে প্রবেশ করতে হবে।",
+       "botpasswords-createnew": "একটি নতুন বট পাসওয়ার্ড তৈরি করুন",
        "botpasswords-label-appid": "বটের নাম:",
        "botpasswords-label-create": "তৈরি করো",
        "botpasswords-label-update": "হালনাগাদ",
        "botpasswords-insert-failed": "\"$1\" নামের বট যুক্ত করা যায়নি। আগে থেকেই তালিকায় রয়েছে?",
        "botpasswords-update-failed": "\"$1\" নামের বট যুক্ত করা যায়নি। আগে অপসারণ করা হয়েছিল?",
        "botpasswords-created-title": "বট পাসওয়ার্ড তৈরী করা হয়েছে",
-       "botpasswords-created-body": "\"$1\", বট পাসওয়ার্ড তৈরী করা হয়েছে।",
+       "botpasswords-created-body": "ব্যবহারকারী \"$2\"-এর \"$1\" নামের বটের জন্য বট পাসওয়ার্ড তৈরী করা হয়েছে।",
        "botpasswords-updated-title": "বট পাসওয়ার্ড আপডেট করা হয়েছে",
-       "botpasswords-updated-body": "\"$1\" বট পাসওয়ার্ডটি সফলভাবে হালনাগাদ করা হয়েছে।",
+       "botpasswords-updated-body": "ব্যবহারকারী \"$2\"-এর \"$1\" নামের বটের জন্য বট পাসওয়ার্ড হালনাগাদ করা হয়েছে।",
        "botpasswords-deleted-title": "বট পাসওয়ার্ড অপসারণ করা হয়েছে",
+       "botpasswords-deleted-body": "ব্যবহারকারী \"$2\"-এর \"$1\" নামের বটের জন্য বট পাসওয়ার্ড মুছে ফেলা হয়েছিল।",
        "botpasswords-no-provider": "BotPasswordsSessionProvider উপলব্ধ নয়।",
        "resetpass_forbidden": "পাসওয়ার্ড পরিবর্তন করা সম্ভব নয়",
        "resetpass-no-info": "এই পাতাটিতে সরাসরি প্রবেশাধিকার পেতে আপনাকে অবশ্যই লগইন করতে হবে।",
        "resetpass-submit-loggedin": "পাসওয়ার্ড পরিবর্তন",
        "resetpass-submit-cancel": "বাতিল",
-       "resetpass-wrong-oldpass": "ভà§\81ল à¦\85সà§\8dথায়à§\80 à¦\85থবা à¦¬à¦°à§\8dতমান à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড।\nসমà§\8dভবতà¦\83 à¦\86পনি à¦\87তà§\8bমধà§\8dযà§\87à¦\87 à¦¸à¦«à¦²à¦­à¦¾à¦¬à§\87 à¦\86পনার à¦ªà¦¾à¦¸à¦\93য়ারà§\8dডà¦\9fি à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\95রà§\87à¦\9bà§\87ন à¦\85থবা à¦\8fà¦\95à¦\9fি à¦¨à¦¤à§\81ন à¦\85সà§\8dথায়à§\80 à¦ªà¦¾à¦¸à¦\93য়ারà§\8dডà§\87র à¦\9cনà§\8dয à¦\85নà§\81রà§\8bধ à¦\95রà§\87à¦\9bà§\87ন।",
+       "resetpass-wrong-oldpass": "ভুল অস্থায়ী অথবা বর্তমান পাসওয়ার্ড।\nসম্ভবতঃ আপনি ইতোমধ্যেই আপনার পাসওয়ার্ডটি পরিবর্তন করেছেন অথবা একটি নতুন অস্থায়ী পাসওয়ার্ডের জন্য অনুরোধ করেছেন।",
        "resetpass-recycled": "অনুগ্রহ করে বর্তমানে ব্যবহার করছেন এমন পাসওয়ার্ডের পরিবর্তে নতুন একটি পাসওয়ার্ড নির্ধারণ করুন।",
        "resetpass-temp-emailed": "সাময়িকভাবে ব্যবহার করার কোড দিয়ে আপনি লগইন করেছেন।\nলগইন করার জন্য আপনাকে অবশ্যই একটি নতুন পাসওয়ার্ড নির্ধারন করতে হবে:",
        "resetpass-temp-password": "অস্থায়ী পাসওয়ার্ড:",
        "newarticle": "(নতুন)",
        "newarticletext": "আপনি এমন একটি লিংক অনুসরণ করছেন, যা নেই।\nপাতাটি তৈরি করতে, নিচের বাক্সে তা টাইপ করা শুরু করুন (আরও তথ্য জানতে [$1 সহায়িকা পাতা] দেখুন)।\nআপনি যদি ভুল করে এখানে এসে থাকেন, তাহলে আপনার ব্রাউজারের '''back''' বোতাম ক্লিক করুন।",
        "anontalkpagetext": "----''এটি একটি বেনামী ব্যবহারকারীর আলাপের পাতা, যিনি এখনও কোন অ্যাকাউন্ট তৈরি করেননি, কিংবা তিনি অ্যাকাউন্টটি ব্যবহার করছেন না।\nআমরা তাই সাংখ্যিক আইপি ঠিকানা ব্যবহার করে তাঁকে শনাক্ত করছি।\nএকাধিক ব্যবহারকারী এরকম একটি আইপি ঠিকানা ব্যবহার করতে পারেন।\nআপনি যদি একজন বেনামী ব্যবহারকারী হয়ে থাকেন এবং যদি অনুভব করেন যে আপনার প্রতি অপ্রাসঙ্গিক মন্তব্য করা হয়েছে, তাহলে অন্যান্য বেনামী ব্যবহারকারীর সাথে ভবিষ্যতে বিভ্রান্তি এড়াতে অনুগ্রহ করে [[Special:UserLogin/signup|একটি অ্যাকাউন্ট তৈরি করুন]] অথবা  [[Special:UserLogin|অ্যাকাউন্টে প্রবেশ করুন]]।''",
-       "noarticletext": "বরà§\8dতমানà§\87 à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦¯à¦¼ à¦\95à§\8bন à¦²à§\87à¦\96া à¦¨à§\87à¦\87।\nà¦\86পনি à¦\9aাà¦\87লà§\87 à¦\85নà§\8dযানà§\8dয à¦ªà¦¾à¦¤à¦¾à¦¯à¦¼ [[Special:Search/{{PAGENAME}}| à¦\8fà¦\87 à¦¶à¦¿à¦°à§\8bনামà¦\9fি à¦\85নà§\81সনà§\8dধান à¦\95রতà§\87 à¦ªà¦¾à¦°à§\87ন]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} à¦\8f à¦¸à¦®à§\8dপরà§\8dà¦\95িত à¦²à¦\97 à¦\85নà§\81সনà§\8dধান à¦\95রতà§\87 à¦ªà¦¾à¦°à§\87ন], \nà¦\95িà¦\82বা [{{fullurl:{{FULLPAGENAME}}|action=edit}} à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦¸à¦®à§\8dপাদনা করতে পারেন]</span>।",
+       "noarticletext": "বরà§\8dতমানà§\87 à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦¯à¦¼ à¦\95à§\8bন à¦²à§\87à¦\96া à¦¨à§\87à¦\87।\nà¦\86পনি à¦\9aাà¦\87লà§\87 à¦\85নà§\8dযানà§\8dয à¦ªà¦¾à¦¤à¦¾à¦¯à¦¼ [[Special:Search/{{PAGENAME}}| à¦\8fà¦\87 à¦¶à¦¿à¦°à§\8bনামà¦\9fি à¦\85নà§\81সনà§\8dধান à¦\95রতà§\87 à¦ªà¦¾à¦°à§\87ন]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} à¦\8f à¦¸à¦®à§\8dপরà§\8dà¦\95িত à¦²à¦\97 à¦\85নà§\81সনà§\8dধান à¦\95রতà§\87 à¦ªà¦¾à¦°à§\87ন], \nà¦\95িà¦\82বা [{{fullurl:{{FULLPAGENAME}}|action=edit}} à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦¤à§\88রি করতে পারেন]</span>।",
        "noarticletext-nopermission": "বর্তমানে এই পাতায় কোন লেখা নেই।\nআপনি চাইলে অন্য পাতায় [[Special:Search/{{PAGENAME}}| শিরোনামটি অনুসন্ধান করতে পারেন]], অথবা <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} সম্পর্কিত লগ অনুসন্ধান করতে পারেন]</span>, কিন্তু আপনার এই পাতাটি তৈরী করার অনুমতি নেই।",
        "missing-revision": "\"{{FULLPAGENAME}}\" এর #$1তম সংস্করণটি প্রদর্শন সম্ভব নয়।\n\nসাধারণত মুছে ফেলা হয়েছে এমন পাতার মেয়াদ উত্তীর্ণ ইতিহাস পাতার লিংক ওপেন করার কারণে এটি হতে পারে। \n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অপসারণ লগে] বিস্তারিত তথ্য জানা যাবে।",
        "userpage-userdoesnotexist": "\"<nowiki>$1</nowiki>\" নামের কোন ব্যবহারকারী অ্যাকাউন্ট নিবন্ধিত হয়নি। অনুগ্রহ করে পরীক্ষা করে দেখুন আপনি এই পাতাটি সৃষ্টি/সম্পাদনা করতে চান কি না।",
        "userpage-userdoesnotexist-view": "ব্যবহারকারী অ্যাকাউন্ট \"$1\" অনিবন্ধিত।",
        "blocked-notice-logextract": "এই ব্যবহারকারী বর্তমানে ব্লক রয়েছে।\nরেফারেন্সের জন্য সাম্প্রতিক ব্লক লগ ভুক্তি নিচে দেওয়া হল:",
-       "clearyourcache": "<strong>লà¦\95à§\8dষà§\8dয à¦\95রà§\81ন:</strong> à¦¸à¦\82রà¦\95à§\8dষণà§\87র à¦ªà¦°, à¦ªà¦°à¦¿à¦¬à¦°à§\8dতনà¦\97à§\81লà§\8b à¦¦à§\87à¦\96তà§\87 à¦\86পনাà¦\95à§\87 à¦\86পনার à¦¬à§\8dরাà¦\89à¦\9cারà§\87র à¦\95à§\8dযাশà§\87 à¦ªà¦°à¦¿à¦¸à§\8dà¦\95ার à¦\95রার à¦ªà§\8dরয়à§\8bà¦\9cন à¦¹à¦¤à§\87 à¦ªà¦¾à¦°à§\87।\n* <strong>ফায়ারফà¦\95à§\8dস / à¦¸à¦¾à¦«à¦¾à¦°à¦¿:</strong> <em>Shift</em> à¦§à¦°à§\87 à¦°à¦¾à¦\96া à¦\85বসà§\8dথায়<em>পà§\81নà¦\83লà§\8bড à¦\95রà§\81ন</em>-à¦\8f à¦\95à§\8dলিà¦\95 à¦\95রà§\81ন, à¦\85থবা <em>Ctrl-F5</em> à¦¬à¦¾ <em>Ctrl-R</em> (মà§\8dযাà¦\95-à¦\8f <em>â\8c\98-R</em>) à¦\9aাপà§\81ন\n* <strong>à¦\97à§\81à¦\97ল à¦\95à§\8dরà§\8bম:</strong> <em>Ctrl-Shift-R</em> (মà§\8dযাà¦\95-à¦\8f <em>â\8c\98-Shift-R</em>) à¦\9aাপà§\81ন\n* <strong>à¦\87নà§\8dà¦\9fারনà§\87à¦\9f à¦\8fà¦\95à§\8dসপà§\8dলà§\8bরার:</strong> <em>Ctrl</em> à¦§à¦°à§\87 à¦°à¦¾à¦\96া à¦\85বসà§\8dথায় <em>Refresh</em>-à¦\8f à¦\95à§\8dলিà¦\95 à¦\95রà§\81ন, à¦\85থবা <em>Ctrl-F5</em> à¦\9aাপà§\81ন\n* <strong>à¦\85পà§\87রা:</strong> <em>সরà¦\9eà§\8dà¦\9cাম â\86\92 à¦ªà¦\9bনà§\8dদসমà§\82হ</em>-à¦\8f à¦\97িয়à§\87 à¦\95à§\8dযাশà§\87 à¦ªà¦°à¦¿à¦¸্কার করে নিন",
+       "clearyourcache": "<strong>লà¦\95à§\8dষà§\8dয à¦\95রà§\81ন:</strong> à¦¸à¦\82রà¦\95à§\8dষণà§\87র à¦ªà¦°, à¦ªà¦°à¦¿à¦¬à¦°à§\8dতনà¦\97à§\81লà§\8b à¦¦à§\87à¦\96তà§\87 à¦\86পনাà¦\95à§\87 à¦\86পনার à¦¬à§\8dরাà¦\89à¦\9cারà§\87র à¦\95à§\8dযাশà§\87 à¦ªà¦°à¦¿à¦·à§\8dà¦\95ার à¦\95রার à¦ªà§\8dরয়à§\8bà¦\9cন à¦¹à¦¤à§\87 à¦ªà¦¾à¦°à§\87।\n* <strong>ফায়ারফà¦\95à§\8dস / à¦¸à¦¾à¦«à¦¾à¦°à¦¿:</strong> <em>Shift</em> à¦§à¦°à§\87 à¦°à¦¾à¦\96া à¦\85বসà§\8dথায়<em>পà§\81নà¦\83লà§\8bড à¦\95রà§\81ন</em>-à¦\8f à¦\95à§\8dলিà¦\95 à¦\95রà§\81ন, à¦\85থবা <em>Ctrl-F5</em> à¦¬à¦¾ <em>Ctrl-R</em> (মà§\8dযাà¦\95-à¦\8f <em>â\8c\98-R</em>) à¦\9aাপà§\81ন\n* <strong>à¦\97à§\81à¦\97ল à¦\95à§\8dরà§\8bম:</strong> <em>Ctrl-Shift-R</em> (মà§\8dযাà¦\95-à¦\8f <em>â\8c\98-Shift-R</em>) à¦\9aাপà§\81ন\n* <strong>à¦\87নà§\8dà¦\9fারনà§\87à¦\9f à¦\8fà¦\95à§\8dসপà§\8dলà§\8bরার:</strong> <em>Ctrl</em> à¦§à¦°à§\87 à¦°à¦¾à¦\96া à¦\85বসà§\8dথায় <em>Refresh</em>-à¦\8f à¦\95à§\8dলিà¦\95 à¦\95রà§\81ন, à¦\85থবা <em>Ctrl-F5</em> à¦\9aাপà§\81ন\n* <strong>à¦\85পà§\87রা:</strong> <em>সরà¦\9eà§\8dà¦\9cাম â\86\92 à¦ªà¦\9bনà§\8dদসমà§\82হ</em>-à¦\8f à¦\97িয়à§\87 à¦\95à§\8dযাশà§\87 à¦ªà¦°à¦¿à¦·্কার করে নিন",
        "usercssyoucanpreview": "'''পরামর্শ:''' \"{{int:showpreview}}\" বোতাম ব্যবহার করে সংরক্ষণের আগে আপনার নতুন CSS পরীক্ষা করুন।",
        "userjsyoucanpreview": "'''পরামর্শ:''' \"{{int:showpreview}}\" বোতাম ব্যবহার করে সংরক্ষণের আগে আপনার নতুন JavaScript পরীক্ষা করুন।",
        "usercsspreview": "'''মনে রাখবেন আপনি আপনার জন্য বরাদ্ধকৃত সিএসএস প্রাকদর্শন করছেন।\nএটা এখনও সংরক্ষণ করা হয়নি!'''",
        "previewnote": "'''খেয়াল করুন, এটি একটি প্রাকদর্শন মাত্র।'''\nআপনার পরিবর্তন এখনও সংরক্ষণ করা হয়নি!",
        "continue-editing": "সম্পাদনা করুন",
        "previewconflict": "এই প্রাকদর্শনটি সম্পাদনা ক্ষেত্রের উপরের অংশটির টেক্সট সংরক্ষণ করলে যেরকম দেখাবে, তা দেখাচ্ছে।",
-       "session_fail_preview": "'''দুঃখিত! সেশন ডাটা হারিয়ে যাওয়ার কারণে আপনার সম্পাদনাটি সংরক্ষণ করা সম্ভব হয়নি। দয়া করে লেখাটি আবার জমা দেয়ার চেষ্টা করুন। যদি এতেও কাজ না হয়, তবে অ্যাকাউন্ট থেকে বেরিয়ে গিয়ে আবার অ্যাকাউন্টে প্রবেশ করে চেষ্টা করুন।'''",
+       "session_fail_preview": "দুঃখিত! সেশন ডাটা হারিয়ে যাওয়ার কারণে আপনার সম্পাদনাটি সংরক্ষণ করা সম্ভব হয়নি।\n\nআপনি সম্ভবত সংযোগ হারিয়েছন। <strong>দয়া করে যাচাই করুন যে আপনি এখনও প্রবেশরত রয়েছেন এবং আবার চেষ্টা করুন</strong>। যদি এটি এখনও কাজ না করে, তাহলে দয়া করে [[Special:UserLogout|অ্যাকাউন্ট থেকে প্রস্থান করুন]] এবং আবার অ্যাকাউন্টে প্রবেশ করে চেষ্টা করুন এবং এবং পরীক্ষা করুন যে আপনার ব্রাউজার এই সাইটে কুকি ব্যবহারের অনুমতি দেয়।",
        "session_fail_preview_html": "'''দুঃখিত! সেশন উপাত্ত হারিয়ে যাওয়ার কারণে আমরা আপনার সম্পাদনাটি প্রক্রিয়া করতে পারিনি।'''\n\n''{{SITENAME}}-এ raw HTML সক্রিয় আছে বলে জাভাস্ক্রিপ্টভিত্তিক আক্রমণ থেকে প্রতিরক্ষার জন্য প্রাকদর্শনটি দেখানো হচ্ছে না।''\n\n'''যদি এটি সম্পাদনার একটি বৈধ প্রচেষ্টা হয়, তবে অনুগ্রহ করে আবার চেষ্টা করুন। যদি তারপরেও কাজ না হয়, তবে অ্যাকাউন্ট থেকে বেরিয়ে গিয়ে আবার প্রবেশ করে চেষ্টা করুন।'''",
        "token_suffix_mismatch": "'''আপনার সম্পাদনাটি প্রত্যাখ্যান করা হয়েছে, কারণ আপনার ক্লায়েন্ট প্রোগ্রামটি সম্পাদনা টেক্সটের বিরামচিহ্নগুলি গুলিয়ে ফেলেছে। পাতাটির টেক্সটে যাতে ক্ষতি না হয় সেজন্য সম্পাদনাটি প্রত্যাখ্যান করা হয়েছে। আপনি কোন ত্রুটিপূর্ণ ওয়েব-ভিত্তিক বেনামী প্রক্সি সেবা ব্যবহার করলে এরকম হতে পারে।'''",
        "edit_form_incomplete": "'''আপনার সম্পাদনার কিছু অংশ সার্ভারে পৌছায় নি; আপনার সম্পাদনা সম্পূর্ণরুপে আছে কিনা নিশ্চিত হয়ে আবার চেষ্টা করুন'''",
        "undo-summary-username-hidden": "একজন লুকানো ব্যবহারকারী $1 সংশোধন পুনরায় ফিরিয়ে এনেছেন",
        "cantcreateaccounttitle": "অ্যাকাউন্ট তৈরি করা যাবে না",
        "cantcreateaccount-text": "[[User:$3|$3]] এই আইপি ঠিকানা('''$1''') থেকে অ্যাকাউন্ট সৃষ্টিতে বাধা দিয়েছেন।\n\n$3-এর দেয়া কারণ হল ''$2''",
-       "cantcreateaccount-range-text": "[[User:$3|$3]] কর্তৃক আইপি ঠিকানা '''$1''' ব্যাপ্তির মধ্য থেকে অ্যাকাউন্ট তৈরি করা অবরুদ্ধ করা হয়েছে। যাতে আপনার আইপি ঠিকানা ('''$4''') রয়েছে। \n\n$3 কর্তৃক ''$2'' কারণ দেখানো হয়েছে।",
+       "cantcreateaccount-range-text": "[[User:$3|$3]] কর্তৃক আইপি ঠিকানা <strong>$1</strong> ব্যাপ্তির মধ্য থেকে অ্যাকাউন্ট তৈরি করা অবরুদ্ধ করা হয়েছে। যাতে আপনার আইপি ঠিকানা (<strong>$4</strong>) রয়েছে। \n\n$3 কর্তৃক <em>$2</em> কারণ দেখানো হয়েছে।",
        "viewpagelogs": "এই পাতার জন্য লগগুলো দেখুন",
        "nohistory": "এই পাতার কোন সম্পাদনার ইতিহাস নেই।",
        "currentrev": "সর্বশেষ সংস্করণ",
        "revdelete-unsuppress": "সংশোধন পুনঃস্থাপনের উপর সীমাবদ্ধতা দূর করো",
        "revdelete-log": "কারণ:",
        "revdelete-submit": "নির্বাচিত {{PLURAL:$1|সংশোধনে|সংশোধসমূহে}} প্রয়োগ করো",
-       "revdelete-success": "'''সংশোধন দৃশ্যমানতা সফলভাবে হালনাগাদ করা হয়েছে।'''",
+       "revdelete-success": "সংশোধনের দৃশ্যমানতা হালনাগাদ করা হয়েছে।",
        "revdelete-failure": "সংশোধনের দৃশ্যমানতা হালনাগাদ করা যায়নি:\n$1",
        "logdelete-success": "'''ঘটনা দৃশ্যমানতা সফলভাবে স্থাপন করা হয়েছে।'''",
        "logdelete-failure": "'''লগ-এর দৃশ্যমানতা নির্ধারণ সম্ভব হচ্ছে না:'''\n$1",
        "mergehistory-fail-bad-timestamp": "সময়তারিখ অবৈধ।",
        "mergehistory-fail-invalid-source": "উত্স পাতা অবৈধ।",
        "mergehistory-fail-invalid-dest": "গন্তব্য পাতা অবৈধ।",
+       "mergehistory-fail-permission": "ইতিহাস একত্রীকরণের জন্য পর্যাপ্ত অনুমতি নেই।",
+       "mergehistory-fail-self-merge": "উৎস এবং গন্তব্য পাতা একই।",
        "mergehistory-fail-toobig": "ইতিহাস থেকে আগের পাতাগুলো একীকরণ সম্ভব নয়, কারণ এর ফলে সর্বোচ্চ $1 টি {{PLURAL:$1|সংস্করণ}} স্থানান্তরের সীমানা অতিক্রম করবে।",
        "mergehistory-no-source": "$1 বলে কোন উৎস পাতার অস্তিত্ব নেই।",
        "mergehistory-no-destination": "$1 বলে কোন গন্তব্য পাতার অস্তিত্ব নেই।",
        "prefs-watchlist-token": "নজরতালিকা টোকেন:",
        "prefs-misc": "বিবিধ",
        "prefs-resetpass": "পাসওয়ার্ড পরিবর্তন",
-       "prefs-changeemail": "ইমেইল ঠিকানা পরিবর্তন বা বাতিল",
+       "prefs-changeemail": "ইমেইল ঠিকানা পরিবর্তন বা বাতিল করুন",
        "prefs-setemail": "একটি ই-মেইল ঠিকানা নির্ধারণ করুন",
        "prefs-email": "ই-মেইল অপশন",
        "prefs-rendering": "অবয়ব",
        "allowemail": "অন্য ব্যবহারকারীদেরকে আপনাকে ই-মেইল পাঠানোর অনুমতি দিন।",
        "prefs-searchoptions": "অনুসন্ধান",
        "prefs-namespaces": "নামস্থানসমূহ",
-       "default": "à¦\86দি à¦\85বসà§\8dথা",
+       "default": "পà§\82রà§\8dবনিরà§\8dধারিত",
        "prefs-files": "ফাইল",
        "prefs-custom-css": "স্বনির্ধারিত CSS",
        "prefs-custom-js": "স্বনির্ধারিত JS",
        "right-changetags": "নির্দিষ্ট সংস্করণ এবং দীর্ঘ সম্পাদনাগুলোতে [[Special:Tags|ট্যাগ]] সংযোজন ও অপসারণ করুন",
        "grant-group-email": "ইমেইল পাঠান",
        "grant-createaccount": "অ্যাকাউন্ট তৈরি করুন",
+       "grant-createeditmovepage": "পাতা তৈরি, সম্পাদনা এবং স্থানান্তর করুন",
        "grant-editmycssjs": "আপনার সিএসএস/জাভাস্ক্রিপ্ট সম্পাদনা করুন",
        "grant-editmyoptions": "আপনার ব্যবহারকারী পছন্দসমূহ সম্পাদনা করুন",
        "grant-editmywatchlist": "আপনার নজরতালিকা সম্পাদনা করুন",
+       "grant-editprotected": "সংরক্ষিত পাতা সম্পাদনা করুন",
+       "grant-sendemail": "অন্য ব্যবহারকারীকে ইমেইল পাঠান",
+       "grant-uploadfile": "নতুন ফাইল আপলোড করুন",
        "grant-basic": "মৌলিক অধিকার",
+       "grant-viewdeleted": "অপসারিত ফাইল ও পাতাগুলি দেখুন",
+       "grant-viewmywatchlist": "আপনার নজরতালিকা দেখুন",
        "newuserlogpage": "ব্যবহারকারী সৃষ্টির লগ",
        "newuserlogpagetext": "এটি নতুন ব্যবহারকারী সৃষ্টির লগ",
        "rightslog": "ব্যবহারকারীর অধিকার লগ",
        "recentchanges-label-bot": "এটি বট দ্বারা সম্পাদিত",
        "recentchanges-label-unpatrolled": "এই সম্পাদনাটি এখনও পরীক্ষিত নয়",
        "recentchanges-label-plusminus": "পাতার আকারে এই পরিমান বাইট পরিবর্তিত হয়েছে",
-       "recentchanges-legend-heading": "'''ব্যাখ্যামূলক বর্ণনা:'''",
+       "recentchanges-legend-heading": "<strong>ব্যাখ্যামূলক বর্ণনা:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (আরও দেখুন [[Special:NewPages|নতুন পাতার তালিকা]])",
        "recentchanges-legend-plusminus": "(''±১২৩'')",
        "recentchanges-submit": "দেখাও",
        "recentchangeslinked-page": "পাতার নাম:",
        "recentchangeslinked-to": "প্রদত্ত পাতায় সংযুক্ত আছে এমন পাতাগুলোর পরিবর্তন দেখাও",
        "recentchanges-page-added-to-category": "বিষয়শ্রেণীতে [[:$1]] যোগ করা হয়েছে",
-       "recentchanges-page-added-to-category-bundled": "বিষয়শà§\8dরà§\87ণà§\80তà§\87 [[:$1]] à¦\8fবà¦\82 {{PLURAL:$2|à¦\8fà¦\95à¦\9fি à¦ªà¦¾à¦¤à¦¾|$2à¦\9fি à¦ªà¦¾à¦¤à¦¾}} যোগ করা হয়েছে",
+       "recentchanges-page-added-to-category-bundled": "বিষয়শà§\8dরà§\87ণà§\80তà§\87 [[:$1]] à¦\93 [[Special:WhatLinksHere/$1|{{PLURAL:$2|à¦\8fà¦\95à¦\9fি à¦ªà¦¾à¦¤à¦¾|$2à¦\9fি à¦ªà¦¾à¦¤à¦¾}}]] যোগ করা হয়েছে",
        "recentchanges-page-removed-from-category": "বিষয়শ্রেণী থেকে [[:$1]] সরানো হয়েছে",
-       "recentchanges-page-removed-from-category-bundled": "বিষয়শà§\8dরà§\87ণà§\80 à¦¥à§\87à¦\95à§\87 [[:$1]] à¦\8fবà¦\82 {{PLURAL:$2|à¦\8fà¦\95à¦\9fি à¦ªà¦¾à¦¤à¦¾|$2à¦\9fি à¦ªà¦¾à¦¤à¦¾}} সরানো হয়েছে",
+       "recentchanges-page-removed-from-category-bundled": "বিষয়শà§\8dরà§\87ণà§\80 à¦¥à§\87à¦\95à§\87 [[:$1]] à¦\93 [[Special:WhatLinksHere/$1|{{PLURAL:$2|à¦\8fà¦\95à¦\9fি à¦ªà¦¾à¦¤à¦¾|$2à¦\9fি à¦ªà¦¾à¦¤à¦¾}}]] সরানো হয়েছে",
        "autochange-username": "মিডিয়াউইকি স্বয়ংক্রিয় পরিবর্তন",
        "upload": "আপলোড",
        "uploadbtn": "ফাইল আপলোড করুন",
        "apisandbox-retry": "পুনঃচেষ্টা করুন",
        "apisandbox-loading": "\"$1\" এপিআই মডিউলের জন্য তথ্য লোড হচ্ছে...",
        "apisandbox-load-error": "\"$1\" এপিআই মডিউলের জন্য তথ্য লোড করার সময় একটি ত্রুটি ঘটেছে: $2",
+       "apisandbox-helpurls": "সাহায্যকারী লিঙ্কসমূহ",
        "apisandbox-examples": "উদাহরণ",
+       "apisandbox-dynamic-parameters": "অতিরিক্ত প্যারামিটার",
        "apisandbox-dynamic-parameters-add-label": "প্যারামিটার যোগ করুন:",
        "apisandbox-dynamic-parameters-add-placeholder": "প্যারামিটারের নাম",
        "apisandbox-results": "ফলাফল",
        "delete-toobig": "এই পাতার সম্পাদনার ইতিহাস অনেক বড়, যা $1টি {{PLURAL:$1|সংস্করণের|সংস্করণের}} বেশি।\n{{SITENAME}}-এর দূর্ঘটনাজনিত সমস্যা এড়াতে এই ধরনের পাতা মুছার ব্যপারে সীমাবদ্ধতা আরোপিত হয়েছে।",
        "delete-warning-toobig": "এই পাতাটির একটি বৃহৎ সম্পাদনা ইতিহাস রয়েছে, যা $1 {{PLURAL:$1|সংস্করণেরও|সংস্করণেরও}} বেশি।\nএই পাতাটি মুছে ফেললে তা {{SITENAME}} সাইটের ডেটাবেজ সমস্যার কারণ হতে পারে;\nসাবধানতার সাথে এগিয়ে যান।",
        "deleteprotected": "আপনি এই পাতাটি মুছে ফেলতে পারবেন না কারণ এটি সুরক্ষিত করা হয়েছে।",
-       "deleting-backlinks-warning": "'''সতর্কীকরণ:''' আপনি যেটি মুছে ফেলতে যাচ্ছেন তা [[Special:WhatLinksHere/{{FULLPAGENAME}}|অন্যান্য পাতাসমূহে]] সংযুক্ত অথবা অন্তর্ভুক্ত রয়েছে।",
+       "deleting-backlinks-warning": "<strong>সতর্কীকরণ:</strong> আপনি যেটি মুছে ফেলতে যাচ্ছেন তা [[Special:WhatLinksHere/{{FULLPAGENAME}}|অন্যান্য পাতাসমূহে]] সংযুক্ত অথবা অন্তর্ভুক্ত রয়েছে।",
        "rollback": "সম্পাদনা ফিরিয়ে নিন",
        "rollbacklink": "পুনর্বহাল",
        "rollbacklinkcount": "$1টি {{PLURAL:$1|সম্পাদনা}} রোলব্যাক করুন",
        "rollback-success": "$1-এর সম্পাদনাগুলি পূর্বাবস্থায় ফিরিয়ে নেওয়া হয়েছে; $2-এর করা শেষ সংস্করণে পাতাটি ফেরত নেওয়া হয়েছে।",
        "sessionfailure-title": "সেশন পরিত্যক্ত",
        "sessionfailure": "আপনার প্রবেশ সেশনে একটি সমস্যা হয়েছে বলে মনে হচ্ছে;\nসেশন হাইজ্যাক প্রতিরোধের উপায় হিসেবে এই কাজটি বাতিল করা হয়েছে।\nঅনুগ্রহ ব্রাউজারের \"পিছনে\" বোতাম চাপুন এবং যে পাতা থেকে এসেছিলেন, তা পুনঃলোড করুন এবং আবার চেষ্টা করুন।",
+       "changecontentmodel-legend": "বিষয়বস্তুর মডেল পরিবর্তন করুন",
        "changecontentmodel-title-label": "পাতার শিরোনাম",
        "changecontentmodel-model-label": "পাতার বিষয়বস্তুর প্রতিরূপ",
        "changecontentmodel-reason-label": "কারণ:",
+       "changecontentmodel-submit": "পরিবর্তন করুন",
        "changecontentmodel-success-title": "বিষয়বস্তুর প্রতিরূপ পরিবর্তিত হয়েছিলো",
        "changecontentmodel-success-text": "[[:$1]]-এর বিষয়বস্তুর ধরণ পরিবর্তন হয়েছে।",
        "log-name-contentmodel": "বিষয়বস্তুর মডেল পরিবর্তন লগ",
        "hijri-calendar-m10": "শাওয়াল",
        "hijri-calendar-m11": "জ্বিলকদ",
        "hijri-calendar-m12": "জ্বিলহজ্জ",
+       "hebrew-calendar-m1": "তিশরেই",
        "hebrew-calendar-m10": "তামুয",
        "hebrew-calendar-m11": "আভ",
        "hebrew-calendar-m12": "এলুল",
+       "hebrew-calendar-m7-gen": "নিসান",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|আলাপ]])",
        "timezone-utc": "ইউটিসি",
        "timezone-local": "স্থানীয়",
        "tags-create-submit": "তৈরি করুন",
        "tags-create-no-name": "আপনাকে একটি ট্যাগের নাম অবশ্যই উল্লেখ করতে হবে।",
        "tags-create-already-exists": "\"$1\" ট্যাগ ইতিমধ্যেই বিদ্যমান।",
+       "tags-create-warnings-below": "আপনি কি ট্যাগটি তৈরি করা চালিয়ে যেতে চান?",
        "tags-delete-title": "ট্যাগ অপসারণ",
        "tags-delete-reason": "কারণ:",
        "tags-delete-submit": "অপরিবর্তনীয় এই ট্যাগ অপসারন করো",
        "tags-edit-revision-selected": "[[:$2]] পাতার {{PLURAL:$1|নির্বাচিত সংশোধন|নির্বাচিত সংশোধনসমূহ}}:",
        "tags-edit-logentry-selected": "{{PLURAL:$1|নির্বাচিত লগ ইভেন্ট}}:",
        "tags-edit-existing-tags": "বিদ্যমান ট্যাগ:",
-       "tags-edit-existing-tags-none": "''কোনটি নয়''",
+       "tags-edit-existing-tags-none": "<em>কোনটি নয়</em>",
        "tags-edit-new-tags": "নতুন ট্যাগ:",
+       "tags-edit-add": "এই ট্যাগগুলি যোগ করুন:",
+       "tags-edit-remove": "এই ট্যাগগুলি সরিয়ে ফেলুন:",
+       "tags-edit-remove-all-tags": "(সব ট্যাগ সরান)",
        "tags-edit-chosen-placeholder": "কিছু ট্যাগ নির্বাচন করুন",
        "tags-edit-chosen-no-results": "কোন ট্যাগ মিল পাওয়া যায়নি",
        "tags-edit-reason": "কারণ:",
        "tags-edit-revision-submit": "Apply changes to {{PLURAL:$1|এই সংশোধনে|$1 সংশোধনসমূহে}} পরিবর্তন প্রয়োগ করুন",
-       "tags-edit-success": "পরিবরà§\8dতন à¦¸à¦«à¦²à¦­à¦¾à¦¬à§\87 à¦ªà§\8dরয়à§\8bà¦\97 à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bà§\87।",
+       "tags-edit-success": "পরিবর্তন প্রয়োগ করা হয়েছে।",
        "tags-edit-failure": "পরিবর্তন প্রয়োগ করা যায়নি: $1",
        "tags-edit-nooldid-title": "লক্ষ্য সংশোধন অবৈধ",
        "tags-edit-none-selected": "যোগ করতে অথবা অপসারণ করতে অন্ততপক্ষে একটি ট্যাগ দয়া করে নির্বাচন করুন।",
        "logentry-upload-revert": "$1 $3 {{GENDER:$2|আপলোড করেছেন}}",
        "log-name-managetags": "ট্যাগ ব্যবস্থাপনা লগ",
        "logentry-managetags-create": "$1 \"$4\" ট্যাগ {{GENDER:$2|তৈরি করেছে}}",
+       "logentry-managetags-delete": "$1 \"$4\" ট্যাগটি {{GENDER:$2|অপসারণ করেছেন}} ($5টি {{PLURAL:$5|সংস্করণ বা লগ ভুক্তি|সংস্করণ ও/বা লগ ভুক্তি}} সরানো হয়েছে)",
        "log-name-tag": "ট্যাগ লগ",
        "rightsnone": "(কিছু নাই)",
        "revdelete-summary": "সম্পাদনা সারাংশ",
        "expand_templates_generate_xml": "XML পার্স বৃক্ষ দেখাও",
        "expand_templates_generate_rawhtml": "এইচটিএমএল দেখাও",
        "expand_templates_preview": "প্রাকদর্শন",
+       "expand_templates_input_missing": "আপনাকে অন্তত কিছু ইনপুট লেখা প্রদান করতে হবে।",
        "pagelanguage": "পাতার ভাষা পরিবর্তন করুন",
        "pagelang-name": "পাতা",
        "pagelang-language": "ভাষা",
        "log-description-pagelang": "এটি পাতার ভাষা পরিবর্তনের লগ।",
        "logentry-pagelang-pagelang": "$1 $3-এর ভাষা $4 থেকে $5-এ {{GENDER:$2|পরিবর্তন}} করেছেন",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (সক্রিয় করা)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''নিষ্ক্রিয় করা''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>নিষ্ক্রিয় করা</strong>)",
        "mediastatistics": "মিডিয়া পরিসংখ্যান",
+       "mediastatistics-summary": "আপলোড করা ফাইলের ধরন সম্পর্কে পরিসংখ্যান। এটি শুধুমাত্র একটি ফাইলের সাম্প্রতিকতম সংস্করণ অন্তর্ভুক্ত করে। ফাইলের পুরাতন বা অপসারিত সংস্করণ অন্তর্ভুক্ত করা হয়নি।",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 বাইট}} ($2; $3%)",
        "mediastatistics-bytespertype": "এই অনুচ্ছেদের জন্য মোট ফাইলের আকার: {{PLURAL:$1|$1 বাইট}} ($2; $3%)।",
        "mediastatistics-allbytes": "সব ফাইলের জন্য মোট ফাইলের আকার: {{PLURAL:$1|$1 বাইট}} ($2)।",
        "mw-widgets-titleinput-description-new-page": "পাতা এখনো বিদ্যমান নয়",
        "mw-widgets-titleinput-description-redirect": "$1-এ পুনঃনির্দেশিত",
        "api-error-blacklisted": "অনুগ্রহ করে অপর কোনো বর্ণনামূলক নাম ব্যবহার করুন।",
+       "sessionmanager-tie": "একাধিক অনুরোধের প্রমাণীকরণের ধরন একত্রিত করা যাবে না: $1।",
        "sessionprovider-generic": "$1টি সেশন",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "কুকি-ভিত্তিক সেশন",
        "sessionprovider-nocookies": "কুকি নিষ্ক্রিয় করা। নিশ্চিত করুন যে আপনার কুকি সক্রিয় আছে এবং আবার শুরু করুন।",
index 572379d..299b757 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Usingha",
                        "Uttam Singha, Dec 2006",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "লিঙ্কর তলে দুরগ দিক:",
        "customcssprotected": "এরে সিএসএস আসে পাতা এহান পতানিরকা তরতা য়্যাথাং নেই, কিদিয়া বুল্লে আরাক আতাকুরা আগর ব্যক্তিগত বিষয়ররবস্তু আসে।",
        "customjsprotected": "এরে জাভাস্ক্রিপ্ট আসে পাতা এহান পতানিরকা তরতা য়্যাথাং নেই, কিদিয়া বুল্লে আরাক আতাকুরা আগর ব্যক্তিগত বিষয়ররবস্তু আসে।",
        "ns-specialprotected": "{{ns:special}} নাঙর থাকে কোন পাতা পতানি নাইব।",
-       "titleprotected": "[[User:$1|$1]]-রে এরে চিঙনাঙর পাতা হঙকরানিত্ত থেত করিয়া থনা ইসে। কারণ: ''$2''।",
+       "titleprotected": "[[User:$1|$1]]-রে এরে চিঙনাঙর পাতা হঙকরানিত্ত থেত করিয়া থনা ইসে। কারণ: <em>$2</em>।",
        "virus-badscanner": "হবানেই হাজানিহান: হারনাপাসি ভাইরাসর সাকুকুরাহান: ''$1''",
        "virus-scanfailed": "স্ক্যান করানি নাইল (কোড $1)",
        "virus-unknownscanner": "হারনাপাসি এন্টিভাইরাস:",
        "passwordreset-username": "আতাকুরার নাংহান:",
        "passwordreset-domain": "ডমেইন:",
        "changeemail": "ই-মেইল ঠিকানাহান সিলকর",
-       "changeemail-text": "ইমেইল ঠিকানাহান সিরকরানি মনেইলে ফরম এহান পুরন কর। সিলপা এহান লেপকরতে তর খন্তাচাবিগ দেনা লাগতই।",
+       "changeemail-header": "অ্যাকাউন্টর ই-মেইল ঠিকানাহান সিলকর",
        "changeemail-no-info": "পাতা এহানাত হমিতে গেলেগা তি যেসারেউ লগইন করানি লাগতই।",
        "changeemail-none": "(নেই)",
        "changeemail-submit": "ই-মেইল সিলকর",
        "movelogpage": "লগ গুসা",
        "movereason": "কারণ:",
        "revertmove": "রিভার্ট",
-       "delete_and_move": "পুসানি বারো থেইকরানি",
        "delete_and_move_confirm": "হায়, পাতা এহান পুস",
        "export": "পাতাহান দিয়াপেঠা",
        "allmessages": "সিস্টেমর পৌহানি",
index b3dae32..c542737 100644 (file)
        "pool-timeout": "Aet eur dreist d'an termen gortoz evit ar stankadenn",
        "pool-queuefull": "Soulgarget eo ar servijerioù",
        "pool-errorunknown": "Fazi dianav",
+       "poolcounter-usage-error": "Fazi implij : $1",
        "aboutsite": "Diwar-benn {{SITENAME}}",
        "aboutpage": "Project:Diwar-benn",
        "copyright": "Danvez a c'haller implijout dindan $1 nemet ha notet e vefe ar c'hontrol.",
        "filerenameerror": "Dibosupl da adenvel « $1 » e « $2 ».",
        "filedeleteerror": "Dibosupl eo diverkañ « $1 ».",
        "directorycreateerror": "N'eus ket bet gallet krouiñ kavlec'h \"$1\".",
+       "directoryreadonlyerror": "Kavlec'h  «$1» lenn hepken",
+       "directorynotreadableerror": "Ne c'haller ket lenn ar c'havlec'h « $1 ».",
        "filenotfound": "N'haller ket kavout ar restr \"$1\".",
        "unexpected": "Talvoudenn dic'hortoz : \"$1\"=\"$2\".",
        "formerror": "Fazi: Dibosupl eo kinnig ar furmskrid",
        "myprivateinfoprotected": "N'ho peus ket ar gwirioù evit kemmañ ho titouroù personel.",
        "mypreferencesprotected": "N'ho peus ket ar gwirioù evit kemmañ ho Penndibaboù.",
        "ns-specialprotected": "N'haller ket kemmañ ar pajennoù en esaouenn anv {{ns:special}}.",
-       "titleprotected": "Gwarezet eo bet an titl-mañ p'eo bet krouet gant [[User:$1|$1]].\nSetu amañ perak ''$2''.",
+       "titleprotected": "Gwarezet eo bet an titl-mañ p'eo bet krouet gant [[User:$1|$1]].\nSetu amañ perak <em>$2</em>.",
        "filereadonlyerror": "Dibosupl kemmañ ar restr \"$1\" abalamour m'emañ ar c'havlec'h restroù \"$2\" e mod lenn nemetken.\n\n\"''$3''\" eo an abeg roet gant ar merour en deus prennet anezhi.",
        "invalidtitle-knownnamespace": "Titl direizh gant an esaouenn anv \"$2\" hag an destenn \"$3\"",
        "invalidtitle-unknownnamespace": "Titl direizh gant an niverenn esaouenn anv $1 hag an destenn \"$2\" dianav",
        "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.\nGortozit $1, mar plij, a-raok esaeañ en-dro.",
+       "botpasswords-label-appid": "Anv ar robot",
        "botpasswords-label-create": "Krouiñ",
+       "botpasswords-label-update": "Hizivaat",
        "botpasswords-label-cancel": "Nullañ",
        "botpasswords-label-delete": "Dilemel",
+       "botpasswords-label-resetpassword": "Adderaouekaat ar ger-tremen",
+       "botpasswords-bad-appid": "N'eo ket reizh anv ar robot « $1 »",
+       "botpasswords-insert-failed": "C'hwitet eo ouzhpennadenn ar robot « $1 ». Hag ouzhpennet eo bet ?",
+       "botpasswords-update-failed": "C'hwitet eo bet hizivadur anv ar robot « $1 ». Ha dilamet eo bet ?",
+       "botpasswords-created-title": "Ger-tremen robotoù krouet",
+       "botpasswords-created-body": "Krouet mat eo bet ar ger-tremen « $1 ».",
+       "botpasswords-updated-title": "Ger-tremen robotoù hizivaet",
+       "botpasswords-updated-body": "Hizivaet mat eo bet ar ger-tremen « $1 ».",
+       "botpasswords-deleted-title": "Ger-tremen robotoù dilamet",
+       "botpasswords-deleted-body": "Ar ger-tremen robotoù « $1 » zo bet dilamet.",
+       "botpasswords-newpassword": "<strong>\"$2\"</strong> eo ar ger-tremen evit kevreañ gant <strong>$1</strong>. Enrollit anezhañ, par plij, evit ober dave dezhañ diwezhatoc'h.</em>",
+       "botpasswords-no-provider": "N'eo ket hegerz BotPasswordsSessionProvider.",
        "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",
        "recentchanges-label-bot": "Gant ur bot eo bet degaset ar c'hemm-mañ.",
        "recentchanges-label-unpatrolled": "N'eo ket bet gwiriet ar c'hemm-mañ evit c'hoazh.",
        "recentchanges-label-plusminus": "Kemmet eo ment ar bajenn eus an niver-mañ a oktedoù",
-       "recentchanges-legend-heading": "'''Alc'hwez :'''",
+       "recentchanges-legend-heading": "<strong>Alc'hwez :</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (gwelet ivez [[Special:NewPages|roll ar pajennoù nevez]])",
        "rcnotefrom": "Setu aze roll ar c'hemmoù c'hoarvezet abaoe an <strong>$2</strong> (<strong>$1</strong> d'ar muiañ).",
        "rclistfrom": "Diskouez ar c'hemmoù diwezhañ abaoe an/ar $3 $2",
        "upload-dialog-button-done": "Graet",
        "upload-dialog-button-save": "Enrollañ",
        "upload-dialog-button-upload": "Enporzhiañ",
-       "upload-form-label-select-file": "Diuzañ ur restr",
        "upload-form-label-infoform-title": "Munudoù",
        "upload-form-label-infoform-name": "Anv",
        "upload-form-label-infoform-description": "Deskrivadur",
        "suppress": "Dindan evezh",
        "querypage-disabled": "Diweredekaet eo bet ar bajenn dibar-mañ evit aesaat d'ar reizhiad un tammig.",
        "apihelp-no-such-module": "N'eo ket bet kavet ar vodulenn \"$1\".",
+       "apisandbox": "Poull-traezh API",
+       "apisandbox-api-disabled": "Diweredekaet eo API war al lec'hienn-mañ.",
+       "apisandbox-intro": "Grit gant ar bajenn-mañ evit amprouiñ '''servij Web API MediaWiki'''.\nKit da deuler ur sell war [//www.mediawiki.org/wiki/API:Main_page titouroù an API] evit gouzout hiroc'h war an doare da embreger API. Da skouer :\n[//www.mediawiki.org/wiki/API#A_simple_example gwelet danvez ur bennbajenn]. Dibabit un oberiadenn bennak evit gwelet skouerioù all",
+       "apisandbox-submit": "Sevel ar goulenn",
+       "apisandbox-reset": "Riñsañ",
+       "apisandbox-examples": "Skouer",
+       "apisandbox-results": "Disoc'h",
+       "apisandbox-request-url-label": "Goulenn URL :",
+       "apisandbox-request-time": "Pad ar goulenn: $1",
        "booksources": "Oberennoù dave",
        "booksources-search-legend": "Klask en oberennoù dave",
        "booksources-isbn": "ISBN :",
        "rollbackfailed": "C'hwitet eo bet an distaoladenn",
        "cantrollback": "Dibosupl da zisteuler: an aozer diwezhañ eo an hini nemetañ da vezañ kemmet ar pennad-mañ",
        "alreadyrolled": "Dibosupl eo disteuler ar c'hemm diwezhañ graet d'ar bajenn [[:$1]] gant [[User:$2|$2]] ([[User talk:$2|Kaozeal]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nkemmet pe distaolet eo bet c'hoazh gant unan bennak all.\n\nAr c'hemm diwezhañ d'ar bajenn-mañ a oa bet graet gant [[User:$3|$3]] ([[User talk:$3|Kaozeal]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Diverradenn ar c'hemm a oa : \"''$1''\".",
+       "editcomment": "Diverradenn ar c'hemm a oa : <em>$1</em>.",
        "revertpage": "Kemmoù distaolet gant [[Special:Contributions/$2|$2]] ([[User talk:$2|Kaozeal]]); adlakaet d'ar stumm diwezhañ a-gent gant [[User:$1|$1]]",
        "revertpage-nouser": "Disteuler kemmoù un implijer kuzhet ha distreiñ d'ar stumm diwezhañ gant an {{GENDER:$1|[[implijer :$1|$1]]}}",
        "rollback-success": "Disteuler kemmoù $1; distreiñ da stumm diwezhañ $2.",
        "log-description-pagelang": "Hemañ zo ur marilh eus ar c'hemmoù e pajenn ar yezhoù.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|en deus|he deus}} cheñchet yezh ar bajenn evit $3 eus $4 da $5.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (gweredekaet)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''diweredekaet''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>diweredekaet</strong>)",
        "mediastatistics": "Stadegoù ar media",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 okted|$1 a oktedoù}} ($2; $3%)",
        "mediastatistics-table-mimetype": "Seurt MIME",
index f688bae..21ba46b 100644 (file)
        "myprivateinfoprotected": "Nemate dozvolu da uređujete svoje privatne informacije.",
        "mypreferencesprotected": "Nemate dozvolu da uređujete svoje postavke.",
        "ns-specialprotected": "Specijalne stranice se ne mogu uređivati.",
-       "titleprotected": "Ovaj naslov stranice je od pravljenja [[User:$1|{{GENDER:$1|zaštitio $1|zaštitila $1}}]].\nRazlog: \"<em>$2</em>\".",
-       "filereadonlyerror": "Ne mogu promijeniti datoteku \"$1\" jer je skladište datoteka \"$2\" zaključano samo za čitanje.\n\nAdministrator koji ga je zaključao naveo je ovo objašnjenje: \"$3\".",
+       "titleprotected": "Ovaj naslov stranice je od pravljenja [[User:$1|{{GENDER:$1|zaštitio $1|zaštitila $1}}]].\nRazlog: <em>$2</em>.",
+       "filereadonlyerror": "Ne mogu promijeniti datoteku \"$1\" jer je skladište datoteka \"$2\" zaključano samo za čitanje.\n\nSistemski administrator koji ga je zaključao naveo je ovo objašnjenje: \"$3\".",
        "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",
        "nocookieslogin": "{{SITENAME}} koristi kolačiće (''cookies'') da bi se korisnici prijavili.  Vi ste onemogućili kolačiće na Vašem kompjuteru.  Molimo Vas da ih omogućite i da pokušate ponovo sa prijavom.",
        "nocookiesfornew": "Korisnički račun nije napravljen, jer nismo mogli da potvrdimo njegov izvor.\nProvjerite da li su cookies omogućeni, ponovo učitajte ovu stranicu i pokušajte ponovo.",
        "noname": "Niste izabrali ispravno korisničko ime.",
-       "loginsuccesstitle": "Prijavljivanje uspješno",
+       "loginsuccesstitle": "Prijavljen",
        "loginsuccess": "'''Sad ste prijavljeni na {{SITENAME}} kao \"$1\".'''",
        "nosuchuser": "Ne postoji korisnik s imenom \"$1\".\nKorisnička imena razlikuju velika i mala slova.\nProvjerite Vaš unos ili [[Special:UserLogin/signup|napravite novi korisnički račun]].",
        "nosuchusershort": "Ne postoji korisnik s imenom \"$1\".\nProvjerite jeste li dobro ukucali.",
        "wrongpasswordempty": "Lozinka koju ste unijeli je bila prazna.\nMolimo Vas da pokušate ponovno.",
        "passwordtooshort": "Lozinka mora imati najmanje {{PLURAL:$1|1 znak|$1 znaka|$1 znakova}}.",
        "passwordtoolong": "Lozinke ne mogu biti duže od {{PLURAL:$1|jednog znaka|$1 znaka|$1 znakova}}.",
-       "password-name-match": "Vaša šifra mora biti različita od Vašeg korisničkog imena.",
+       "password-name-match": "Vaša lozinka mora biti različita od Vašeg korisničkog imena.",
        "password-login-forbidden": "Korištenje ovih korisničkih imena i šifara je zabranjeo.",
        "mailmypassword": "Poništi lozinku",
-       "passwordremindertitle": "{{SITENAME}} - privremena šifra",
-       "passwordremindertext": "Neko (vjerovatno Vi, sa IP adrese $1) je zahtjevao da vam pošaljemo novu šifru za {{SITENAME}}  ($4). Privremena šifra za korisnika \"$2\" je napravljena i glasi \"$3\". Ako ste to željeli, sad treba da se prijavite i promjenite šifru.\nVaša privremena šifra će isteči za {{PLURAL:$5|$5 dan|$5 dana}}.\n\nAko je neko drugi napravio ovaj zahtjev ili ako ste se sjetili vaše šifre i ne želite više da je promjenite, možete da ignorišete ovu poruku i da nastavite koristeći vašu staru šifru.",
+       "passwordremindertitle": "Privremena lozinka za {{GRAMMAR:akuzativ|{{SITENAME}}}}",
+       "passwordremindertext": "Neko (vjerovatno Vi, s IP adrese $1) zathijevao je da Vam pošaljemo novu lozinku za {{GRAMMAR:akuzativ|{{SITENAME}}}} ($4). Privremena lozinka za korisnika \"$2\" napravljena je i glasi \"$3\". Ako ste to željeli, sad se trebate prijaviti i promijeniti lozinku.\nVaša privremena lozinku isteći će za {{PLURAL:$5|$5 dan|$5 dana}}.\n\nAko je neko drugi napravio ovaj zahtjev ili ako ste se u međuvremenu sjetili Vaše lozinke i više je ne želite promijeniti, možete ignorirati ovu poruku i nastaviti da koristite Vašu staru lozinku.",
        "noemail": "Ne postoji adresa e-pošte za korisnika \"$1\".",
        "noemailcreate": "Morate da navedete validnu e-mail adresu",
-       "passwordsent": "Nova šifra je poslata na adresu e-pošte korisnika \"$1\".\nMolimo Vas da se prijavite nakon što je primite.",
-       "blocked-mailpassword": "Da bi se spriječila nedozvoljena akcija, Vašoj IP adresi je onemogućeno uređivanje stranica kao i mogućnost zahtijevanje nove šifre.",
+       "passwordsent": "Nova lozinka poslana je na adresu e-pošte korisnika \"$1\".\nMolimo Vas da se prijavite nakon što je primite.",
+       "blocked-mailpassword": "Da bi se spriječila nedozvoljena akcija, Vašoj IP adresi je onemogućeno uređivanje stranica kao i mogućnost zahtijevanje nove lozinke.",
        "eauthentsent": "Na navedenu adresu e-pošte poslana je poruka s potvrdom.\nPrije nego što pošaljemo daljnje poruke, pratite uputstva s e-pošte da biste potvrdili da je račun zaista Vaš.",
-       "throttled-mailpassword": "Već Vam je poslan e-mail za promjenu šifre u {{PLURAL:$1|posljednjih sat vremena|posljednja $1 sata|posljednjih $1 sati}}.\nDa bi se spriječila zloupotreba, može se poslati samo jedan e-mail za promjenu šifre {{PLURAL:$1|svakih sat vremena|svaka $1 sata|svakih $1 sati}}.",
+       "throttled-mailpassword": "Već Vam je poslana e-poruka za promjenu lozinke u {{PLURAL:$1|posljednjih sat vremena|posljednja $1 sata|posljednjih $1 sati}}.\nDa bi se spriječila zloupotreba, može se poslati samo jedna e-poruka za promjenu lozinke {{PLURAL:$1|svakih sat vremena|svaka $1 sata|svakih $1 sati}}.",
        "mailerror": "Greška pri slanju e-pošte: $1",
        "acct_creation_throttle_hit": "Posjetioci na ovoj wiki koji koriste Vašu IP adresu su već napravili {{PLURAL:$1|$1 račun|$1 računa}} u zadnjih nekoliko dana, što je najveći broj dopuštenih napravljenih računa za ovaj period.\nKao rezultat, posjetioci koji koriste ovu IP adresu ne mogu trenutno praviti više računa.",
        "emailauthenticated": "Vaša adresa e-pošte potvrđena je $2 u $3.",
        "accountcreated": "Korisnički račun je napravljen",
        "accountcreatedtext": "Korisnički račun za [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|razgovor]]) je napravljen.",
        "createaccount-title": "Pravljenje korisničkog računa za {{SITENAME}}",
-       "createaccount-text": "Neko je napravio korisnički račun za vašu e-mail adresu na {{SITENAME}} ($4) sa imenom \"$2\", i sa šifrom \"$3\".\nTrebali biste se prijaviti i promijeniti šifru.\n\nMožete ignorisati ovu poruku, ako je korisnički račun napravljen greškom.",
+       "createaccount-text": "Neko je napravio korisnički račun za Vašu adresu e-pošte na {{GRAMMAR:dativ|{{SITENAME}}}} ($4) s imenom \"$2\", i s lozinkom \"$3\".\nTrebali biste se prijaviti i promijeniti lozinku.\n\nMožete ignorirati ovu poruku, ako je korisnički račun napravljen greškom.",
        "login-throttled": "Previše puta ste se pokušali prijaviti.\nMolimo Vas da sačekate $1 prije nego što pokušate ponovo.",
-       "login-abort-generic": "Vaša prijava nije bila uspješna – Prekinuto",
+       "login-abort-generic": "Neuspješna prijava – Prekinuto",
        "login-migrated-generic": "Vaš račun je premješten, a vaše korisničko ime više ne postoji na ovoj wiki.",
        "loginlanguagelabel": "Jezik: $1",
        "suspicious-userlogout": "Vaš zahtjev za odjavu je odbijen jer je poslan preko pokvarenog preglednika ili keširanog proksija.",
        "php-mail-error-unknown": "Nepoznata greška u PHP funkciji mail()",
        "user-mail-no-addy": "Pokušaj slanja e-maila bez navedene e-mail adrese.",
        "user-mail-no-body": "Pokušano slanje e-poruke s praznim ili nerazumno kratkim sadržajem.",
-       "changepassword": "Promijeni šifru",
-       "resetpass_announce": "Da biste završili prijavu, morate postaviti novu šifru.",
+       "changepassword": "Promijeni lozinku",
+       "resetpass_announce": "Da biste završili prijavu, morate podesiti novu lozinku.",
        "resetpass_text": "<!-- Unesi tekst ovdje -->",
-       "resetpass_header": "Obnovi šifru za račun",
-       "oldpassword": "Stara šifra:",
-       "newpassword": "Nova šifra:",
-       "retypenew": "Ponovo upišite novu šifru:",
-       "resetpass_submit": "Odredi šifru i prijavi se",
-       "changepassword-success": "Vaša šifra/lozinka je uspiješno promjenjena!",
+       "resetpass_header": "Promjena lozinke računa",
+       "oldpassword": "Stara lozinka:",
+       "newpassword": "Nova lozinka:",
+       "retypenew": "Ponovo upišite novu lozinku:",
+       "resetpass_submit": "Postavi lozinku i prijavi se",
+       "changepassword-success": "Vaša lozinka je promijenjena.",
        "changepassword-throttled": "Previše puta ste se pokušali prijaviti.\nMolimo Vas da sačekate $1 prije nego što pokušate ponovo.",
-       "resetpass_forbidden": "Šifre ne mogu biti promjenjene",
+       "resetpass_forbidden": "Lozinke ne mogu biti promijenjene",
        "resetpass-no-info": "Morate biti prijavljeni da biste pristupili ovoj stranici direktno.",
-       "resetpass-submit-loggedin": "Promijeni šifru",
+       "resetpass-submit-loggedin": "Promijeni lozinku",
        "resetpass-submit-cancel": "Odustani",
-       "resetpass-wrong-oldpass": "Privremena ili trenutna šifra nije validna.\nMožda ste već uspješno promijenili Vašu šifru ili ste tražili novu privremenu šifru.",
+       "resetpass-wrong-oldpass": "Privremena ili trenutna lozinka nije validna.\nMožda ste već promijenili Vašu lozinku ili ste tražili novu privremenu lozinku.",
        "resetpass-recycled": "Molimo resetirajte vašu lozinku u nešto drugo od vaše trenutne lozinke.",
        "resetpass-temp-emailed": "Prijavili ste se sa privremenim kodom iz e-pošte.\nDa biste završili prijavljivanje morate postaviti novu lozinku ovdje:",
-       "resetpass-temp-password": "Privremena šifra:",
-       "resetpass-abort-generic": "Promjenu šifre/lozinke je prekinula ekstenzija.",
+       "resetpass-temp-password": "Privremena lozinka:",
+       "resetpass-abort-generic": "Promjenu lozinke prekinulo je proširenje.",
        "resetpass-expired": "Vaša lozinka je istekla. Postavite novu lozinku da biste se prijavili.",
-       "resetpass-expired-soft": "Vaša šifra je istekla i mora se resetirati. Molimo odaberite sada novu šifru ili kliknite  \"{{int:resetpass-submit-cancel}}\" da je resetirate kasnije.",
-       "resetpass-validity-soft": "Vaša šifra nije valjana: $1\n\nMolimo odaberite novu šifru ili kliknite \"{{int:resetpass-submit-cancel}}\" da je resetirate kasnije.",
-       "passwordreset": "Poništavanje šifre",
-       "passwordreset-text-one": "Ispunite ovaj obrazac da biste resetovali Vašu šifru/lozinku.",
+       "resetpass-expired-soft": "Vaša lozinka je istekla i mora se resetirati. Molimo odaberite sada novu lozinka ili kliknite  \"{{int:resetpass-submit-cancel}}\" da je resetirate kasnije.",
+       "resetpass-validity-soft": "Vaša lozinka nije valjana: $1\n\nMolimo odaberite novu lozinku ili kliknite \"{{int:resetpass-submit-cancel}}\" da je resetirate kasnije.",
+       "passwordreset": "Ponovo postavljanje lozinke",
+       "passwordreset-text-one": "Ispunite ovaj obrazac da biste dobili privremenu lozinku na Vašu adresu e-pošte.",
        "passwordreset-text-many": "{{PLURAL:$1|Ispunite jedno od polja kako biste dobili privremenu lozinku putem e-pošte.}}",
-       "passwordreset-disabled": "Poništavanje šifre  je onemogućeno na ovoj wiki.",
+       "passwordreset-disabled": "Ponovo postavljanje lozinke je onemogućeno na ovom wikiju.",
        "passwordreset-emaildisabled": "E-pošta je onemogućena na ovom wikiju.",
        "passwordreset-username": "Korisničko ime:",
        "passwordreset-domain": "Domen:",
        "newarticle": "(Novi)",
        "newarticletext": "Došli ste na stranicu koja još nema sadržaja.\n*Ako želite unijeti sadržaj, počnite tipkati u prozor ispod ovog teksta.\n*Ako Vam treba pomoć, idite na [$1 stranicu za pomoć].\n*Ako ste ovamo dospjeli slučajno, kliknite na dugme \"Nazad\" (''Back'') u Vašem internetskom pregledniku.",
        "anontalkpagetext": "----''Ovo je stranica za razgovor za anonimnog korisnika koji još nije napravio nalog ili ga ne koristi.\nZbog toga moramo da koristimo brojčanu IP adresu kako bismo identifikovali njega ili nju.\nTakvu adresu može dijeliti više korisnika.\nAko ste anonimni korisnik i mislite da su vam upućene nebitne primjedbe, molimo Vas da [[Special:UserLogin/signup|napravite nalog]] ili se [[Special:UserLogin|prijavite]] da biste izbjegli buduću zabunu sa ostalim anonimnim korisnicima.''",
-       "noarticletext": "Na ovoj stranici trenutno nema teksta.\nMožete [[Special:Search/{{PAGENAME}}|tražiti naslov ove stranice]] na drugim stranicama.\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tražiti u povezanim zapisnicima] ili [{{fullurl:{{FULLPAGENAME}}|action=edit}} urediti ovu stranicu]</span>.",
+       "noarticletext": "Na ovoj stranici trenutno nema teksta.\nMožete [[Special:Search/{{PAGENAME}}|tražiti naslov ove stranice]] na drugim stranicama,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tražiti u povezanim zapisnicima] ili [{{fullurl:{{FULLPAGENAME}}|action=edit}} napraviti ovu stranicu]</span>.",
        "noarticletext-nopermission": "Trenutno nema teksta na ovoj stranici.\nMožete [[Special:Search/{{PAGENAME}}|tražiti ovaj naslov stranice]] na drugim stranicama ili <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti povezane zapisnike]</span>, ali nemate dozvolu da napravite ovu stranicu.",
        "missing-revision": "Uređivanje broj $1 na stranici \"{{FULLPAGENAME}}\" ne postoji.\n\nOvo se obično dešava kad pratite zastarjelu vezu na stranicu koja je obrisana.\nViše informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} protokolu brisanja].",
        "userpage-userdoesnotexist": "Korisnički račun \"<nowiki>$1</nowiki>\" nije registrovan.\nMolimo provjerite da li želite napraviti/izmijeniti ovu stranicu.",
        "undo-summary-username-hidden": "Poništi izmjenu $1 od skrivenog korisnika",
        "cantcreateaccounttitle": "Nije moguće napraviti korisnički račun",
        "cantcreateaccount-text": "Pravljenje korisničkog računa sa ove IP adrese ('''$1''') je blokirano od strane [[User:$3|$3]].\n\nRazlog koji je naveo $3 je ''$2''",
-       "cantcreateaccount-range-text": "Pravljenje računa sa IP adresa u rasponu '''$1''', koji uključuje i vašu IP adresu ('''$4'''), je blokirao korisnik [[User:$3|$3]].\n\nNavedeni razlog korisnika $3 je ''$2''",
+       "cantcreateaccount-range-text": "Pravljenje računa sa IP adresa u rasponu <strong>$1</strong>, koji uključuje i vašu IP adresu (<strong>$4</strong>), je blokirao korisnik [[User:$3|$3]].\n\nNavedeni razlog korisnika $3 je <em>$2</em>",
        "viewpagelogs": "Pogledaj zapisnike ove stranice",
        "nohistory": "Ne postoji historija izmjena za ovu stranicu.",
        "currentrev": "Trenutna verzija",
        "userrights": "Postavke korisničkih prava",
        "userrights-lookup-user": "Menadžment korisničkih grupa",
        "userrights-user-editname": "Upišite korisničko ime:",
-       "editusergroup": "Uredi korisničke grupe",
+       "editusergroup": "Uredi {{GENDER:$1|korisničke}} grupe",
        "editinguser": "Mijenjate korisnička prava korisnika <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Uredi korisničke grupe",
        "saveusergroups": "Sačuvaj korisničke grupe",
        "recentchanges-label-bot": "Izmjenu napravio bot",
        "recentchanges-label-unpatrolled": "Ova izmjena još nije patrolirana",
        "recentchanges-label-plusminus": "Promjena veličine stranice u bajtovima",
-       "recentchanges-legend-heading": "'''Legenda:'''",
+       "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|spisak novih stranica]])",
        "recentchanges-submit": "Prikaži",
        "rcnotefrom": "Ispod {{PLURAL:$5|je izmjena|su izmjene}} od <strong>$3, $4</strong> (do <strong>$1</strong> prikazano).",
-       "rclistfrom": "Prikaži nove izmjene počev od $3 $2",
+       "rclistfrom": "Prikaži nove izmjene počev od $3 $2",
        "rcshowhideminor": "$1 manje izmjene",
        "rcshowhideminor-show": "Prikaži",
        "rcshowhideminor-hide": "Sakrij",
        "upload-dialog-button-done": "Gotovo",
        "upload-dialog-button-save": "Sačuvaj",
        "upload-dialog-button-upload": "Postavi",
-       "upload-form-label-select-file": "Izaberi datoteku",
        "upload-form-label-infoform-title": "Detalji",
        "upload-form-label-infoform-name": "Ime",
        "upload-form-label-infoform-description": "Opis",
        "foreign-structured-upload-form-label-own-work": "Ovo je moje djelo",
        "foreign-structured-upload-form-label-infoform-categories": "Kategorije",
        "foreign-structured-upload-form-label-infoform-date": "Datum",
-       "foreign-structured-upload-form-label-own-work-message-local": "Potvrđujem da postavljam ovu datoteku u skladu s uvjetima korištenja i pravilima o licenciranju na {{GRAMMAR:dativ|{{SITENAME}}}}.",
+       "foreign-structured-upload-form-label-own-work-message-local": "Potvrđujem da postavljam ovu datoteku u skladu s uslovima korištenja i pravilima o licenciranju na {{GRAMMAR:dativ|{{SITENAME}}}}.",
        "foreign-structured-upload-form-label-not-own-work-message-local": "Ako niste u stanju postaviti ovu datoteku pod pravilima {{GRAMMAR:genitiv|{{SITENAME}}}}, molimo zatvorite ovaj prozor i pokušajte drugom metodom.",
        "foreign-structured-upload-form-label-not-own-work-local-local": "Također možete pokušati [[Special:Upload|na standardnoj stranici za postavljanje]].",
-       "foreign-structured-upload-form-label-own-work-message-default": "Shvatam da postavljam ovu datoteku na zajedničko spremište. Potvrđujem da to činim u skladu s uvjetima korištenja i ovdašnjim pravilima licenciranja.",
+       "foreign-structured-upload-form-label-own-work-message-default": "Shvatam da postavljam ovu datoteku na zajedničko spremište. Potvrđujem da to činim u skladu s uslovima korištenja i ovdašnjim pravilima licenciranja.",
        "foreign-structured-upload-form-label-not-own-work-message-default": "Ako niste u stanju postaviti ovu datoteku pod pravilima zajedničkog skladišta, molimo zatvorite ovaj prozor i pokušajte drugom metodom.",
        "foreign-structured-upload-form-label-not-own-work-local-default": "Možete također pokušati koristeći  [[Special:Upload|stranicu za postavljanje na  {{GRAMMAR:dativ|{{SITENAME}}}}]], ako se ova datoteka može postaviti pod tamošnjim pravilima.",
-       "foreign-structured-upload-form-label-own-work-message-shared": "Potvrđujem da posjedujem autorska prava za ovu datoteku i slažem se da ću je neopozivo postaviti na Wikimedia Commons pod licencom [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Attribution-ShareAlike 4.0], te se slažem s [https://wikimediafoundation.org/wiki/Terms_of_Use Uvjetima korištenja].",
+       "foreign-structured-upload-form-label-own-work-message-shared": "Potvrđujem da posjedujem autorska prava za ovu datoteku i slažem se da ću je neopozivo postaviti na Wikimedia Commons pod licencom [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Attribution-ShareAlike 4.0], te se slažem s [https://wikimediafoundation.org/wiki/Terms_of_Use uslovima korištenja].",
        "foreign-structured-upload-form-label-not-own-work-message-shared": "Ako ne posjedujete autorska prava za ovu datoteku ili je želite postaviti pod drugom licencom, imajte na umu da možete koristiti [https://commons.wikimedia.org/wiki/Special:UploadWizard čarobnjak za postavljanje datoteka na Commonsu].",
-       "foreign-structured-upload-form-label-not-own-work-local-shared": "Također možete koristiti [[Special:Upload|stranicu za postavljanje datoteka na projektu {{SITENAME}}]] ako politika stranice dozvoljava postavljanje ove datoteke.",
+       "foreign-structured-upload-form-label-not-own-work-local-shared": "Također možete koristiti [[Special:Upload|stranicu za postavljanje datoteka na {{GRAMMAR:dativ|{{SITENAME}}}}]] ako pravila te stranice dozvoljavaju postavljanje ove datoteke.",
        "backend-fail-stream": "Ne mogu emitirati datoteku $1.",
        "backend-fail-backup": "Ne može sigurnosno kopirati datoteku $1.",
        "backend-fail-notexists": "Datoteka $1 ne postoji.",
        "rollbackfailed": "Neuspešno vraćanje",
        "cantrollback": "Ne mogu vratiti izmjenu;\nposljednji autor je ujedno i jedini.",
        "alreadyrolled": "Ne može se vratiti posljednja izmjena [[:$1]] od korisnika [[User:$2|$2]] ([[User talk:$2|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); neko je već izmijenio ili vratio članak na prethodnu provjerenu verziju.\n\nPosljednju izmjenu napravio je korisnik [[User:$3|$3]] ([[User talk:$3|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Sažetak izmjene je bio: \"''$1''\".",
+       "editcomment": "Sažetak izmjene je bio: <em>$1</em>.",
        "revertpage": "Vraćene izmjene {{GENDER:$2|korisnika|korisnice}} [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]]) na posljednju izmjenu {{GENDER:$1|korisnika|korisnice}} [[User:$1|$1]]",
        "revertpage-nouser": "Vraćene izmjene skrivenog korisnika na posljednju reviziju, koju je {{GENDER:$1|napravio|napravila}} [[User:$1|$1]]",
        "rollback-success": "Vraćene izmjene {{GENDER:$2|korisnika|korisnice}} $1 na posljednju verziju {{GENDER:$2|korisnika|korisnice}} $2.",
        "javascripttest-pagetext-frameworks": "Molimo Vas izaberite jednu od sljedećih testnih okvira: $1",
        "javascripttest-pagetext-skins": "Izaberite s kojom temom želite da pokrenete probu:",
        "javascripttest-qunit-intro": "Pogledajte [$1 dokumentaciju za testiranje] na mediawiki.org.",
-       "tooltip-pt-userpage": "Vaša korisnička stranica",
+       "tooltip-pt-userpage": "{{GENDER:|Vaša}} korisnička stranica",
        "tooltip-pt-anonuserpage": "Korisnička stranica za ip koju Vi uređujete kao",
-       "tooltip-pt-mytalk": "Vaša stranica za razgovor",
+       "tooltip-pt-mytalk": "{{GENDER:|Vaša}} stranica za razgovor",
        "tooltip-pt-anontalk": "Razgovor o doprinosu sa ove IP adrese",
-       "tooltip-pt-preferences": "Vaše postavke",
+       "tooltip-pt-preferences": "{{GENDER:|Vaše}} postavke",
        "tooltip-pt-watchlist": "Spisak stranica koje pratite",
-       "tooltip-pt-mycontris": "Spisak vaših doprinosa",
+       "tooltip-pt-mycontris": "Spisak {{GENDER:|Vaših}} doprinosa",
        "tooltip-pt-login": "Predlažemo da se prijavite, ali nije obvezno.",
        "tooltip-pt-logout": "Odjavi me",
        "tooltip-pt-createaccount": "Ohrabrujemo vas da otvorite nalog i prijavite se, međutim to nije obavezno",
        "tooltip-t-recentchangeslinked": "Nedavne izmjene na stranicama koje su povezane sa ovom",
        "tooltip-feed-rss": "RSS za ovu stranicu",
        "tooltip-feed-atom": "Atom za ovu stranicu",
-       "tooltip-t-contributions": "Pogledajte spisak doprinosa ovog korisnika",
+       "tooltip-t-contributions": "Pogledajte spisak doprinosa {{GENDER:$1|ovog korisnika|ove korisnice|ove osobe}}",
        "tooltip-t-emailuser": "Pošaljite pismo ovom korisniku",
        "tooltip-t-info": "Više informacija o ovoj stranici",
        "tooltip-t-upload": "Postavi slike i druge medije",
        "version-poweredby-others": "ostali",
        "version-poweredby-translators": "translatewiki.net prevodioci",
        "version-credits-summary": "Željeli bismo se zahvaliti sljedećim ljudima na njihovom doprinosu [[Special:Version|MediaWikiju]].",
-       "version-license-info": "Mediawiki je slobodni softver; možete ga redistribuirati i(li) mijenjati pod uvjetima opće javne GNU licence kao što je objavljeno od strane \"Free Software Foundationa\", bilo u verziji 2 licence ili (po Vašoj volji) nekoj od kasnijih verzija.\n\nMediawiki se distribuira u nadi da će biti korisna, ali BEZ IKAKVIH GARANCIJA, čak i bez ikakvih posrednih garancija o KOMERCIJALNOSTI ili DOSTUPNOSTI ZA ODREĐENU SVRHU. Pogledajte opću javnu GNU licencu za više detalja.\n\nTrebali biste dobiti [{{SERVER}}{{SCRIPTPATH}}/KOPIJU opće javne GNU licence] zajedno s ovim programom. Ako niste, pišite \"Free Software Foundationu\" na adresu: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ili je pročitajte [//www.gnu.org/licenses/old-licenses/gpl-2.0.html ovdje].",
+       "version-license-info": "Mediawiki je slobodni softver; možete ga redistribuirati i(li) mijenjati pod uslovima opće javne GNU licence kao što je objavljeno od strane \"Free Software Foundationa\", bilo u verziji 2 licence ili (po Vašoj volji) nekoj od kasnijih verzija.\n\nMediawiki se distribuira u nadi da će biti korisna, ali BEZ IKAKVIH GARANCIJA, čak i bez ikakvih posrednih garancija o KOMERCIJALNOSTI ili DOSTUPNOSTI ZA ODREĐENU SVRHU. Pogledajte opću javnu GNU licencu za više detalja.\n\nTrebali biste dobiti [{{SERVER}}{{SCRIPTPATH}}/KOPIJU opće javne GNU licence] zajedno s ovim programom. Ako niste, pišite \"Free Software Foundationu\" na adresu: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ili je pročitajte [//www.gnu.org/licenses/old-licenses/gpl-2.0.html ovdje].",
        "version-software": "Instalirani softver",
        "version-software-product": "Proizvod",
        "version-software-version": "Verzija",
        "default-skin-not-found": "Ups! Nije dostupna predodređena tema vašeg wikija, koja je definirana u <code dir=\"ltr\">$wgDefaultSkin</code> kao <code>$1</code>.\n\nVaša instalacija sadrži {{PLURAL:$4|sljedeću temu|sljedeće teme}}. Pogledajte [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priručnik: Podešavanje tema] za više informacija o tome kako {{PLURAL:$4|je uključiti|ih uključiti i izabrati predodređenu}}.\n\n$2\n\n; Ako ste upravo instalirali MediaWiki:\n: Vjerovatno ste je instalirali sa gita ili sa izvornog koda koristeći se nekom drugom metodom. Ovo je za očekivati. Pokušajte instalirati neku temu sa [https://www.mediawiki.org/wiki/Category:All_skins kataloga tema] tako što ćete:\n:* Preuzeti [https://www.mediawiki.org/wiki/Download tarball instalacijsku datoteku] koji sadrži nekoliko tema i proširenja. Možete prekopirati folder <code>skins/</code> iz nje.\n:* Preuzeti zasebne instalacijske tarball datoteke sa stranice [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]. \n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Koristiti Git kako biste preuzeli teme].\n: Ako ste MediaWiki razvijatelj, ovo ne bi trebalo utjecati na vaše git skladište.\n\n; Ako ste upravo nadogradili MediaWiki:\n: MediaWiki 1.24 i više verzije više ne automatski uključuju instalirane teme (pogledajte [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Priručni: Automatski traženje tema]). Možete prekopirati {{PLURAL:$5|sljedeći red kǒda|sljedeće redove kǒda}} u datoteku <code>LocalSettings.php</code> kako biste uključili {{PLURAL:$5|odgovarajuću instaliranu temu|sve instalirane teme}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Ako ste upravo promijenili datoteku <code>LocalSettings.php</code>:\n: Provjerite jeste li napravili grešku pri unosu naziva tema.",
        "default-skin-not-found-no-skins": "Ups! Nije dostupna predodređena tema vašeg wikija, koja je definirana u <code dir=\"ltr\">$wgDefaultSkin</code> kao <code>$1</code>.\n\nNemate instaliranih tema.\n\n; Ako ste upravo nadogradili MediaWiki:\n: Vjerovatno ste je instalirali sa gita ili sa izvornog koda koristeći se nekom drugom metodom. Ovo je za očekivati. MediaWiki 1.24 i više ne sadržavaju teme u glavnom skladištu. Pokušajte instalirati neku temu sa [https://www.mediawiki.org/wiki/Category:All_skins kataloga tema] tako što ćete:\n:* Preuzeti [https://www.mediawiki.org/wiki/Download tarball instalacijsku datoteku] koji sadrži nekoliko tema i proširenja. Možete prekopirati folder <code>skins/</code> iz nje.\n:* Preuzeti zasebne instalacijske tarball datoteke sa stranice [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]. \n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Koristiti Git kako biste preuzeli teme].\n: Ako ste MediaWiki razvijatelj, ovo ne bi trebalo utjecati na vaše git skladište.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (uključena)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (isključena)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>isključena</strong>)",
        "mediastatistics": "Statistika datoteka",
        "mediastatistics-summary": "Statistike o tipovima poslanih datoteka. Ovdje su uračunate samo najnovije verzije datoteka. Stare ili obrisane verzije nisu uračunate.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 bajt|$1 bajt|$1 bajtova}} ($2; $3%)",
index 40204f2..9ac9fb8 100644 (file)
        "myprivateinfoprotected": "No tens permís per editar la teva informació privada.",
        "mypreferencesprotected": "No tens permís per editar les teves preferències.",
        "ns-specialprotected": "No es poden modificar les pàgines especials.",
-       "titleprotected": "La creació d'aquesta pàgina està protegida per [[User:$1|$1]].\nEls seus motius han estat: «''$2''».",
+       "titleprotected": "La creació d'aquesta pàgina està protegida per [[User:$1|$1]].\nEls seus motius han estat: <em>$2</em>.",
        "filereadonlyerror": "No s'ha pogut modificar el fitxer «$1» perquè el repositori de fitxers \"$2\" està en mode només de lectura.\nL'administrador que l'ha bloquejat ha donat aquesta explicació: \"$3\".",
        "invalidtitle-knownnamespace": "El títol amb l'espai de noms «$2» i text «$3» no és vàlid",
        "invalidtitle-unknownnamespace": "Títol no vàlid amb espai de noms desconegut de número «$1» i text «$2»",
        "nocookiesfornew": "No s'ha creat el compte d'usuari, ja que no es podia confirmar el seu origen.\nVerifiqueu que teniu habilitades les galetes al vostre navegador, torneu a carregar aquesta pàgina i intenteu-lo de nou.",
        "nocookiesforlogin": "{{int:nocookieslogin}}",
        "noname": "No heu especificat un nom vàlid d'usuari.",
-       "loginsuccesstitle": "S'ha iniciat la sessió amb èxit",
+       "loginsuccesstitle": "Sessió iniciada",
        "loginsuccess": "Heu iniciat la sessió a {{SITENAME}} com a «$1».",
        "nosuchuser": "No hi ha cap usuari anomenat «$1».\nReviseu-ne l'ortografia (recordeu que es distingeixen les majúscules i minúscules), o [[Special:UserLogin/signup|creeu un compte d'usuari nou]].",
        "nosuchusershort": "No hi ha cap usuari anomenat «$1». Comproveu que ho hàgiu escrit correctament.",
        "createaccount-title": "Creació d'un compte a {{SITENAME}}",
        "createaccount-text": "Algú ha creat un compte d'usuari anomenat $2 en el projecte {{SITENAME}}\n($4) amb la vostra adreça de correu electrònic. La contrasenya per a l'usuari «$2» és «$3». Hauríeu d'accedir al compte i canviar-vos aquesta contrasenya com més aviat millor.\n\nSi no hi teniu cap relació i aquest compte s'ha creat per error, simplement ignoreu el missatge.",
        "login-throttled": "Heu realitzat massa intents d'accés a la sessió.\nEspereu $1 abans de tornar-ho a provar.",
-       "login-abort-generic": "L'entrada al compte d'usuari no ha reeixit - S'ha interromput.",
+       "login-abort-generic": "L'inici de sessió ha fallat - Operació anul·lada.",
        "login-migrated-generic": "S'ha migrat el vostre compte, i el vostre nom d'usuari ja no existeix en aquest wiki.",
        "loginlanguagelabel": "Llengua: $1",
        "suspicious-userlogout": "S'ha denegat la vostra petició per a tancar la sessió, ja que sembla que va ser enviada per un navegador defectuós o un servidor intermediari.",
        "newpassword": "Contrasenya nova",
        "retypenew": "Torneu a escriure la nova contrasenya:",
        "resetpass_submit": "Definiu una contrasenya i inicieu una sessió",
-       "changepassword-success": "S'ha canviat la vostra contrasenya amb èxit!",
+       "changepassword-success": "S'ha canviat la vostra contrasenya!",
        "changepassword-throttled": "Heu realitzat massa intents d'inici de sessió.\nEspereu $1 abans de tornar-ho a provar.",
        "botpasswords": "Contrasenyes de bot",
        "botpasswords-disabled": "S'han inhabilitat les contrasenyes dels bots",
        "botpasswords-no-central-id": "Per a utilitzar contrasenyes de bots heu d'haver iniciat una sessió en un compte centralitzat.",
+       "botpasswords-existing": "Contrasenyes de bot existents",
+       "botpasswords-createnew": "Crea una contrasenya de bot nova",
+       "botpasswords-editexisting": "Edita una contrasenya de bot existent",
        "botpasswords-label-appid": "Nom del bot:",
        "botpasswords-label-create": "Crea",
        "botpasswords-label-update": "Actualitza",
        "botpasswords-label-cancel": "Cancel·la",
        "botpasswords-label-delete": "Suprimeix",
        "botpasswords-label-resetpassword": "Reinicia la contrasenya",
+       "botpasswords-label-grants": "Permisos aplicables:",
+       "botpasswords-label-restrictions": "Restriccions d'ús:",
+       "botpasswords-label-grants-column": "Concedit",
+       "botpasswords-bad-appid": "",
        "resetpass_forbidden": "No poden canviar-se les contrasenyes",
        "resetpass-no-info": "Heu d'estar registrats en un compte per a poder accedir directament a aquesta pàgina.",
        "resetpass-submit-loggedin": "Canvia la contrasenya",
        "passwordreset-emailtext-ip": "Algú (vós mateix segurament, des de l'adreça IP $1) ha demanat una reinicialització de la vostra contrasenya al projecte {{SITENAME}} ($4). {{PLURAL:$3|El següent compte d'usuari està associat|Els següents comptes d'usuari estan associats}} amb aquesta adreça de correu electrònic:\n\n$2\n\n{{PLURAL:$3|Aquesta contrasenya temporal caducarà|Aquestes contrasenyes temporals caducaran}} en {{PLURAL:$5|un dia|$5 dies}}.\nHauríeu d'entrar al compte per a fixar-hi una nova contrasenya al més aviat possible. Si algú que no sou vós és qui ha fet aquesta petició o si heu recordat la contrasenya original i ja no la voleu canviar, podeu ignorar aquest missatge i seguir utilitzant la vostra antiga contrasenya.",
        "passwordreset-emailtext-user": "L'usuari $1 de {{SITENAME}} ha demanat una reinicialització de la vostra contrasenya per al projecte {{SITENAME}} ($4). {{PLURAL:$3|El següent compte d'usuari està associat|Els següents comptes d'usuari estan associats}} amb aquesta adreça de correu electrònic:\n\n$2\n\n{{PLURAL:$3|Aquesta contrasenya temporal caducarà|Aquestes contrasenyes temporals caducaran}} en {{PLURAL:$5|un dia|$5 dies}}.\nHauríeu d'entrar ara per fixar una nova contrasenya. Si algú que no sou vós és qui ha fet aquesta petició o si heu recordat la contrasenya original i ja no la voleu canviar, podeu ignorar aquest missatge i seguir utilitzant la vostra antiga contrasenya.",
        "passwordreset-emailelement": "Nom d'usuari: \n$1\n\nContrasenya temporal: \n$2",
-       "passwordreset-emailsentemail": "Si aquesta és una adreça electrònica registrada amb el vostre compte, s’hi enviarà un missatge de restabliment de contrasenya.",
+       "passwordreset-emailsentemail": "Si aquesta adreça electrònica està associada al vostre compte, s’enviarà un missatge de restabliment de contrasenya.",
        "passwordreset-emailsent-capture": "S'ha enviat un correu electrònic de reinicialització de contrasenya, tal com es mostra a continuació.",
        "passwordreset-emailerror-capture": "S'ha generat un correu electrònic de renovació de contrasenya, que es mostra a continuació, però ha fallat l'enviament a {{GENDER:$2:l'usuari|la usuària}}: $1",
        "changeemail": "Canvia o elimina l’adreça electrònica",
        "copyrightwarning2": "Si us plau, tingueu en compte que totes les contribucions al projecte {{SITENAME}} poden ser corregides, alterades o esborrades per altres usuaris. Si no desitgeu la modificació i distribució lliure dels vostres escrits sense el vostre consentiment, no els poseu ací.<br />\nA més a més, en enviar el vostre text, doneu fe que és vostra l'autoria, o bé de fonts en el domini públic o altres recursos lliures similars (consulteu $1 per a més detalls).\n'''No feu servir textos amb drets d'autor sense permís!'''",
        "editpage-cannot-use-custom-model": "El model de contingut d'aquesta pàgina no pot ser canviat.",
        "longpageerror": "'''Error: El text que heu introduït és {{PLURAL:$1|d'un kilobyte|de $1 kilobytes}} i sobrepassa el màxim permès de {{PLURAL:$2|one kilobyte|$2 kilobytes}}.'''\nNo es pot desar.",
-       "readonlywarning": "'''Avís: La base de dades està tancada per manteniment, de manera que no podreu desar els canvis ara mateix.'''\nÉs possible que vulgueu copiar i enganxar el text en un arxiu de text i desar-ho més tard.\n\nL'administrador que l'ha bloquejada ha donat la següent explicació: $1",
+       "readonlywarning": "<strong>Avís: La base de dades està tancada per manteniment, de manera que no podreu desar els canvis ara mateix.</strong>\nÉs possible que vulgueu copiar i enganxar el text en un arxiu de text i desar-ho més tard.\n\nL'administrador de sistema que l'ha bloquejada ha donat la següent explicació: $1",
        "protectedpagewarning": "'''ATENCIÓ: Aquesta pàgina està bloquejada i només els usuaris amb drets d'administrador la poden modificar.\nA continuació es mostra la darrera entrada del registre com a referència:",
        "semiprotectedpagewarning": "'''Avís:''' Aquesta pàgina està bloquejada i només pot ser modificada per usuaris registrats.\nA continuació es mostra la darrera entrada del registre com a referència:",
        "cascadeprotectedwarning": "'''Atenció:''' Aquesta pàgina està protegida de forma que només la poden modificar els administradors, ja que està inclosa a {{PLURAL:$1|la següent pàgina|les següents pàgines}} amb l'opció de «protecció en cascada» activada:",
        "permissionserrors": "Error de permisos",
        "permissionserrorstext": "No teniu permisos per a fer-ho, {{PLURAL:$1|pel següent motiu|pels següents motius}}:",
        "permissionserrorstext-withaction": "No teniu permís per a $2, {{PLURAL:$1|pel motiu següent|pels motius següents}}:",
-       "contentmodelediterror": "No podeu modificar aquesta revisió perquè el seu model de contingut és <code>$1</code>, i el model de contingut actual de la pàgina és <code>$2</code>.",
+       "contentmodelediterror": "No podeu modificar aquesta revisió perquè el seu model de contingut és <code>$1</code>, que difereix del model de contingut actual de la pàgina <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Avís: esteu creant una pàgina que s'ha suprimit prèviament.'''\n\nHauríeu de considerar si és realment necessari continuar editant aquesta pàgina.\nA continuació s'ofereix el registre de supressions i de reanomenaments de la pàgina:",
        "moveddeleted-notice": "S'ha suprimit aquesta pàgina.\nA continuació us mostrem com a referència el registre d'esborraments i reanomenaments de la pàgina.",
        "moveddeleted-notice-recent": "S’ha suprimit aquesta pàgina recentment (en les últimes 24 hores).\nA continuació us mostrem com a referència el registre de supressions i reanomenaments de la pàgina.",
        "undo-summary-username-hidden": "Desfés la revisió $1 d'un usuari ocult",
        "cantcreateaccounttitle": "No es pot crear el compte",
        "cantcreateaccount-text": "[[User:$3|$3]] ha bloquejat la creació de comptes des d'aquesta adreça IP ('''$1''').\n\nEl motiu donat per $3 és ''$2''",
-       "cantcreateaccount-range-text": "La creació de comptes des de les adreces IP en el rang '''$1''', que inclou la vostra adreça IP ('''$4'''), ha estat blocada per [[User:$3|$3]].\n\nEl motiu donat per $3 és ''$2''",
+       "cantcreateaccount-range-text": "La creació de comptes des de les adreces IP en el rang <strong>$1</strong>, que inclou la vostra adreça IP (<strong>$4</strong>), ha estat blocada per [[User:$3|$3]].\n\nEl motiu donat per $3 és <em>$2</em>",
        "viewpagelogs": "Visualitza els registres d'aquesta pàgina",
        "nohistory": "No hi ha un historial de revisions per a aquesta pàgina.",
        "currentrev": "Revisió actual",
        "revdelete-unsuppress": "Suprimir les restriccions de les revisions restaurades",
        "revdelete-log": "Motiu:",
        "revdelete-submit": "Aplica a {{PLURAL:$1|la revisió seleccionada|les revisions seleccionades}}",
-       "revdelete-success": "'''La visibilitat d'aquesta revisió s'ha actualitzat correctament.'''",
+       "revdelete-success": "La visibilitat d'aquesta revisió s'ha actualitzat.",
        "revdelete-failure": "'''La visibilitat de la revisió no ha pogut actualitzar-se:'''\n$1",
        "logdelete-success": "'''S'ha establert correctament la visibilitat d'aquest element.'''",
        "logdelete-failure": "'''No s'ha pogut establir la visibilitat del registre:'''\n$1",
        "mergehistory-empty": "No pot fusionar-se cap revisió.",
        "mergehistory-done": "{{PLURAL:$3|S’ha|S’han}} fusionat correctament $3 {{PLURAL:$3|revisió|revisions}} de $1 a [[:$2]].",
        "mergehistory-fail": "No s'ha pogut realitzar la fusió de l'historial, comproveu la pàgina i els paràmetres horaris.",
+       "mergehistory-fail-bad-timestamp": "La marca horària no és vàlida.",
+       "mergehistory-fail-invalid-source": "La pàgina font no és vàlida.",
+       "mergehistory-fail-invalid-dest": "La pàgina de destinació no és vàlida.",
+       "mergehistory-fail-self-merge": "Les pàgines d'origen i de destinació no poden ser la mateixa",
        "mergehistory-fail-toobig": "No s'ha pogut fer la fusió de l'historial perquè es mourien més del límit de $1 {{PLURAL:$1|revisió|revisions}}.",
        "mergehistory-no-source": "La pàgina d'origen $1 no existeix.",
        "mergehistory-no-destination": "La pàgina de destinació $1 no existeix.",
        "userrights": "Gestió dels permisos d’usuari",
        "userrights-lookup-user": "Gestiona els grups d'usuari",
        "userrights-user-editname": "Introduïu un nom d'usuari:",
-       "editusergroup": "Edita els grups d'usuaris",
+       "editusergroup": "Edita els grups d'{{GENDER:$1|usuari}}",
        "editinguser": "Modificació dels permisos de {{GENDER:$1|l'usuari|la usuària}} <strong>[[User:$1|$1]]</strong>$2",
        "userrights-editusergroup": "Edita els grups d'usuaris",
-       "saveusergroups": "Desa els grups d'usuari",
+       "saveusergroups": "Desa els grups d'{{GENDER:$1|usuari}}",
        "userrights-groupsmember": "Membre de:",
        "userrights-groupsmember-auto": "Membre implícit de:",
        "userrights-groupsmember-type": "$1",
        "userrights-unchangeable-col": "Grups que no podeu canviar",
        "userrights-irreversible-marker": "$1*",
        "userrights-conflict": "Conflicte de canvis dels permisos d'usuari. Reviseu i confirmeu els canvis.",
-       "userrights-removed-self": "Heu suprimit els vostres propis permisos correctament. Per tant, ja no podeu tornar a accedir a aquesta pàgina.",
+       "userrights-removed-self": "Heu suprimit els vostres propis permisos. Per tant, ja no podeu tornar a accedir a aquesta pàgina.",
        "group": "Grup:",
        "group-user": "Usuaris",
        "group-autoconfirmed": "Usuaris autoconfirmats",
        "grant-group-file-interaction": "Interacció amb fitxes multimèdia",
        "grant-group-watchlist-interaction": "Interacció amb la vostra llista de seguiment",
        "grant-group-email": "Enviament de correu",
+       "grant-group-customization": "Personalització i preferències",
+       "grant-group-administration": "Realitza accions administratives",
+       "grant-group-other": "Activitat miscel·lània",
+       "grant-blockusers": "Bloca i desbloca usuaris",
        "grant-createaccount": "Crea comptes",
        "grant-createeditmovepage": "Crea, modifica i reanomena pàgines",
        "grant-delete": "Suprimeix pàgines, revisions i entrades de registre",
+       "grant-editinterface": "Modifica l'espai de noms MediaWiki i els CSS/JavaScript d'usuari",
+       "grant-editmywatchlist": "Modifica la llista de seguiment",
+       "grant-editpage": "Modifica les pàgines existents",
+       "grant-editprotected": "Modifica pàgines protegides",
+       "grant-highvolume": "Edició d'alt volum",
+       "grant-oversight": "Amaga usuaris i suprimeix revisions",
+       "grant-uploadfile": "Carrega fitxers nous",
+       "grant-basic": "Permisos bàsics",
+       "grant-viewdeleted": "Mostra fitxers eliminats i pàgines",
+       "grant-viewmywatchlist": "Modifica la llista de seguiment",
        "newuserlogpage": "Registre de creació d'usuaris",
        "newuserlogpagetext": "Aquest és un registre de creació de nous usuaris.",
        "rightslog": "Registre dels permisos d'usuari",
        "action-createpage": "crear pàgines",
        "action-createtalk": "crear pàgines de discussió",
        "action-createaccount": "crear aquest compte d'usuari",
+       "action-autocreateaccount": "crea automàtica aquest compte d'usuari extern",
        "action-history": "mostra l'historial de la pàgina",
        "action-minoredit": "marcar aquesta modificació com a menor",
        "action-move": "moure aquesta pàgina",
        "recentchanges-label-bot": "Aquesta modificació fou feta per un bot",
        "recentchanges-label-unpatrolled": "Aquesta modificació encara no s'ha patrullat",
        "recentchanges-label-plusminus": "La mida de la pàgina ha canviat aquest nombre de bytes",
-       "recentchanges-legend-heading": "'''Llegenda:'''",
+       "recentchanges-legend-heading": "<strong>Llegenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vegeu també la [[Special:NewPages|llista de pàgines noves]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Mostra",
        "rcshowhidemine": "$1 edicions pròpies",
        "rcshowhidemine-show": "Mostra",
        "rcshowhidemine-hide": "Amaga",
-       "rcshowhidecategorization": "$1 la categorització de la pàgina",
+       "rcshowhidecategorization": "$1 categoritzacions de pàgina",
        "rcshowhidecategorization-show": "Mostra",
        "rcshowhidecategorization-hide": "Amaga",
        "rclinks": "Mostra els darrers $1 canvis en els darrers $2 dies<br />$3",
        "apisandbox": "Pàgina de proves de l'API",
        "apisandbox-api-disabled": "L'API està desactivada en aquest lloc.",
        "apisandbox-intro": "Utilitzeu aquesta pàgina per experimentar amb l'<nowiki />'''API de web service de MediaWiki'''.\nVisiteu [//www.mediawiki.org/wiki/API:Main_page la documentació de l'API] per a més informació sobre l'ús de l'API. Exemple: [//www.mediawiki.org/wiki/API#A_simple_example recuperar el contingut d'una Pàgina Principal]. Seleccioneu una acció per veure més exemples.\n\nTingueu en compte que, encara que això és una pàgina de proves, les accions que feu en aquesta pàgina poden modificar la wiki.",
+       "apisandbox-unfullscreen": "Mostra la pàgina",
        "apisandbox-submit": "Fes sol·licitud",
        "apisandbox-reset": "Neteja",
-       "apisandbox-examples": "Exemple",
-       "apisandbox-results": "Resultat",
+       "apisandbox-retry": "Torna a provar",
+       "apisandbox-loading": "S'està carregant la informació del mòdul d'API «$1»...",
+       "apisandbox-helpurls": "Enllaços d'ajuda",
+       "apisandbox-examples": "Exemples",
+       "apisandbox-dynamic-parameters": "Paràmetres adicionals",
+       "apisandbox-dynamic-parameters-add-label": "Afegeix un paràmetre:",
+       "apisandbox-dynamic-parameters-add-placeholder": "Nom del paràmetre",
+       "apisandbox-results": "Resultats",
        "apisandbox-request-url-label": "Sol·licita URL:",
        "apisandbox-request-time": "Temps de sol·licitud: $1",
        "booksources": "Obres de referència",
        "listgrouprights-namespaceprotection-namespace": "Espai de noms",
        "listgrouprights-namespaceprotection-restrictedto": "Permisos que permeten modificar a l'usuari",
        "listgrants": "Autoritzacions",
-       "listgrants-grant": "Autoritza",
+       "listgrants-grant": "Concedeix",
        "listgrants-rights": "Permisos",
        "trackingcategories": "Categories de seguiment",
        "trackingcategories-summary": "Aquesta pàgina llista les categories de seguiment que s'omplen automàticament pel programari MediaWiki. Es poden canviar els seus noms modificant els missatges del sistema corresponents en l'espai de noms {{ns:8}}.",
        "wlshowhideanons": "usuaris anònims",
        "wlshowhidepatr": "edicions supervisades",
        "wlshowhidemine": "les meves edicions",
+       "wlshowhidecategorization": "categorització de pàgines",
        "watchlist-options": "Opcions de la llista de seguiment",
        "watching": "S'està vigilant...",
        "unwatching": "S'està desatenent...",
        "rollbackfailed": "No s'ha pogut revocar",
        "cantrollback": "No s'han pogut revertir les edicions; el darrer col·laborador és l'únic autor de la pàgina.",
        "alreadyrolled": "No es pot revertir la darrera modificació de [[:$1]]\nde l'usuari [[User:$2|$2]] ([[User talk:$2|Discussió]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]). Algú altre ja ha modificat o revertit la pàgina.\n\nLa darrera modificació l'ha fet l'usuari [[User:$3|$3]] ([[User talk:$3|Discussió]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "El resum d'edició és: «$1».",
+       "editcomment": "El resum d'edició és: <em>$1</em>.",
        "revertpage": "Revertides les edicions de [[Special:Contributions/$2|$2]] ([[User talk:$2|discussió]]) a l'última versió de [[User:$1|$1]]",
        "revertpage-nouser": "Edicions revertides per un usuari ocult a l'última revisió de {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Edicions revertides de $1; s'ha canviat a la darrera versió de $2.",
        "watchlisttools-edit": "Visualitza i edita la llista de seguiment",
        "watchlisttools-raw": "Edita la llista de seguiment sense format",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discussió]])",
+       "timezone-local": "Local",
        "duplicate-defaultsort": "Atenció: La clau d'ordenació per defecte \"$2\" invalida l'anterior clau \"$1\".",
        "duplicate-displaytitle": "<strong>Avís:</strong> El títol a mostrar «$2» sobreescriu l'anterior títol a mostrar «$1».",
        "invalid-indicator-name": "<strong>Error:</strong> No pot estar buit l'atribut <code>name</code> dels indicadors d'estat de la pàgina.",
        "tags-edit-revision-selected": "{{PLURAL:$1|Revisió seleccionada|Revisions seleccionades}} de [[:$2]]:",
        "tags-edit-logentry-legend": "Afegeix o suprimeix etiquetes {{PLURAL:$1|d'aquesta entrada del registre|de totes les entrades del registre}}",
        "tags-edit-existing-tags": "Etiquetes existents:",
-       "tags-edit-existing-tags-none": "''Cap''",
+       "tags-edit-existing-tags-none": "<em>Cap</em>",
        "tags-edit-new-tags": "Etiquetes noves:",
        "tags-edit-add": "Afegeix aquestes etiquetes:",
        "tags-edit-remove": "Treu aquestes etiquetes:",
        "tags-edit-reason": "Motiu:",
        "tags-edit-revision-submit": "Aplica els canvis a {{PLURAL:$1|a aquesta revisió|$1 revisions}}",
        "tags-edit-logentry-submit": "Aplica els canvis a {{PLURAL:$1|aquesta entrada de registre|$1 entrades de registre}}",
-       "tags-edit-success": "S’han aplicat els canvis correctament.",
+       "tags-edit-success": "S’han aplicat els canvis.",
        "tags-edit-failure": "No s’han pogut aplicar els canvis:\n$1",
        "tags-edit-nooldid-title": "Revisió de l'objectiu no vàlida",
        "tags-edit-none-selected": "Seleccioneu com a mínim una etiqueta per afegir o suprimir.",
        "expand_templates_preview": "Previsualitza",
        "expand_templates_preview_fail_html": "<em>Atès que {{SITENAME}} té HTML cru i hi ha hagut una pèrdua de dades de la sessió, s'ha amagat la vista prèvia com a mesura de precaució contra atacs en JavaScript.</em>\n\n<strong>Si això és un intent de previsualització legítim, torneu-ho a provar.</strong>\nSi encara no funciona, intenteu [[Special:UserLogout|finalitzar la sessió]] i iniciar-la de nou.",
        "expand_templates_preview_fail_html_anon": "<em>Atès que {{SITENAME}} té l'HTML cru habilitat i no heu iniciat una sessió, s'ha amagat la previsualització com a prevenció d'atacs en JavaScript.</em>\n\n<strong>Si això és un intent de previsualització legítim, [[Special:UserLogin|inicieu una sessió]] i torneu-ho a provar.</strong>",
-       "pagelanguage": "Selector de l'idioma de les pàgines",
+       "expand_templates_input_missing": "Cal que proporcioneu al menys algun text d'entrada.",
+       "pagelanguage": "Canvia l'idioma de la pàgina",
        "pagelang-name": "Pàgina",
        "pagelang-language": "Idioma",
        "pagelang-use-default": "Utilitza l'idioma per defecte",
        "pagelang-select-lang": "Selecciona un idioma",
+       "pagelang-submit": "Envia",
        "right-pagelang": "Canvia l'idioma de la pàgina",
        "action-pagelang": "canvia l'idioma de la pàgina",
-       "log-name-pagelang": "Canvia el registre de llengua",
+       "log-name-pagelang": "Registre de canvi de llengua",
        "log-description-pagelang": "Aquest és un registre dels canvis en les llengües de les pàgines.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ha canviat}} la llengua de la pàgina per a $3 de $4 a $5.",
        "default-skin-not-found": "Òndia! L'aparença per defecte per al wiki, definit en <code dir=\"ltr\">$wgDefaultSkin</code> com <code>$1</code>, no està disponible.\n\nLa vostra instal·lació sembla que inclou les següents aparences. Consulteu [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Configuració d'aparences] per a la informació de com habilitar-les i triar-ne el valor per defecte.\n\n$2\n\n; Si heu acabat d'instal·lar MediaWiki:\n: Probablement l'instal·làveu des de git, o directament des del codi font utilitzant algun altre mètode. Això és l'esperat. Intenteu instal·lar algunes aparences des del [https://www.mediawiki.org/wiki/Category:All_skins directori d'aparences de mediawiki.org], per:\n: * Descarregar l'[https://www.mediawiki.org/wiki/Download instal·lador tarball], que ve amb diverses aparences i ampliacions. Podeu copiar i enganxar el directori <code>skins/</code> des d'aquí.\n: * Clonar un dels repositoris <code>mediawiki/skins/*</code> a través de git en el directori <code dir=\"ltr\">skins/</code> de la vostra instal·lació de MediaWiki.\n: Fent això no s'hauria d'interferir amb el vostre dipòsit git si sou un desenvolupador de MediaWiki.\n\n; Si només heu actualitzat MediaWiki:\n: Per MediaWiki 1.24 i posteriors ja no permet aparences instal·lades automàticament (consulteu [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Aparences autodiscovery]). Podeu enganxar les línies següents en <code>LocalSettings.php</code> per permetre totes les aparences instal·lades actualment:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si només heu modificat <code>LocalSettings.php</code>:\n: Reviseu els noms de l'aparença per errors tipogràfics.",
        "default-skin-not-found-no-skins": "Òndia! L'aparença per defecte pel vostre wiki, definida a <code>$wgDefaultSkin</code> com <code>$1</code>, no està disponible.\n\nNo teniu cap aparença instal·lada.\n\n\n; Si heu acabat d'instal·lar o actualitzar MediaWiki:\n: Probablement l'heu instal·lat des de git, o directament des del codi font utilitzant algun altre mètode. Això és l'esperat. Per MediaWiki 1.24 i posteriors ja no s'inclouen aparences en el repositori principal. Proveu d'instal·lar algunes aparences des del [https://www.mediawiki.org/wiki/Category:All_skins directori d'aparences de mediawiki.org] per:\n: * Descarregar l'[https://www.mediawiki.org/wiki/Download instal·lador ''tarball''], que ve amb diverses aparences i extensions. Podeu copiar i enganxar el directori <code>skins/</code> des d'aquí.\n: * Clonar un dels repositoris <code>mediawiki/skins/*</code> a través de git en el directori <code dir=\"ltr\">skins/</code> de la vostra instal·lació de MediaWiki.\n: Fent això no s'hauria d'interferir amb el vostre repositori de git si sou un desenvolupador de MediaWiki. Consulteu [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] per a més informació sobre com permetre aparences i triar-ne per defecte.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (habilitat)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''inhabilitat''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>inhabilitat</strong>)",
        "mediastatistics": "Estadístiques dels multimèdia",
        "mediastatistics-summary": "Les estadístiques sobre els tipus de fitxers pujats. Això només inclou la versió més recent d'un fitxer. S'exclouen les versions antigues o eliminades dels fitxers.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
index d5c84cd..cf650ea 100644 (file)
@@ -10,7 +10,8 @@
                        "Impersonator 1",
                        "LNDDYL",
                        "唐吉訶德的侍從",
-                       "Ztl8702"
+                       "Ztl8702",
+                       "Macofe"
                ]
        },
        "tog-underline": "下劃綫鏈接",
        "tagline": "來源:{{SITENAME}}",
        "help": "幫助",
        "search": "尋討",
-       "searchbutton": "討",
+       "searchbutton": "討",
        "go": "去",
        "searcharticle": "去",
        "history": "頁面歷史",
        "toc": "目錄",
        "showtoc": "顯示",
        "hidetoc": "囥起",
-       "collapsible-collapse": "",
+       "collapsible-collapse": "",
        "collapsible-expand": "現",
        "confirmable-confirm": "汝會確定𣍐?",
        "confirmable-yes": "是",
        "site-atom-feed": "$1原子訂閱",
        "page-rss-feed": "「$1」RSS訂閱",
        "page-atom-feed": "「$1」原子訂閱",
-       "red-link-title": "$1(頁面無敆𡅏)",
+       "red-link-title": "$1(無許頁)",
        "sort-descending": "降序排序",
        "sort-ascending": "升序排序",
        "nstab-main": "頁面",
        "myprivateinfoprotected": "汝無權限编輯汝其私人信息。",
        "mypreferencesprotected": "汝無權限編輯偏好。",
        "ns-specialprotected": "𣍐使修改特殊頁面。",
-       "titleprotected": "茲蜀萆標題共[[User:$1|$1]]保護其咯。\n原因是「''$2''」。",
+       "titleprotected": "茲蜀萆標題共[[User:$1|$1]]保護其咯。\n原因是<em>$2</em>。",
        "exception-nologin": "未登錄",
        "exception-nologin-text": "起動汝登錄以後再訪問茲蜀頁,或者做茲蜀萆操作。",
        "exception-nologin-text-manual": "起動汝$1,以後才會使訪問茲蜀頁,或者做茲蜀萆行為。",
        "searchrelated": "相關其",
        "searchall": "全部",
        "showingresults": "顯示趁#<b>$2</b>開始其{{PLURAL:$1|'''$1'''萆結果}}。",
+       "search-nonefound": "討毋着",
        "preferences": "設定",
        "mypreferences": "我其設定",
        "prefs-edits": "修改數量:",
        "rollbackfailed": "轉𣍐去",
        "cantrollback": "𣍐使恢復修改;最後其貢獻者是茲蜀頁其唯一其作者。",
        "alreadyrolled": "𣍐使回滾最後蜀回[[User:$2|$2]] ([[User talk:$2|討論]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])其[[:$1]]編輯;\n有其他儂已經編輯過了或者茲蜀頁已經乞回滾過了。\n\n最後蜀回茲蜀頁其修改是[[User:$3|$3]] ([[User talk:$3|討論]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])改其。",
-       "editcomment": "修改評論是:「''$1''」。",
+       "editcomment": "修改評論是:<em>$1</em>。",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]])所做其修改轉去[[User:$1|$1]]其前蜀萆版本",
        "protectlogpage": "保護日誌",
        "protect-title": "改變「$1」其保護等級",
        "watchlisttools-view": "看相關改變",
        "watchlisttools-edit": "看共修改監視單",
        "watchlisttools-raw": "修改原始監視單",
-       "specialpages": "特殊頁"
+       "specialpages": "特殊頁",
+       "searchsuggest-search": "討"
 }
index 78359a6..c4acdf4 100644 (file)
@@ -9,7 +9,8 @@
                        "Умар",
                        "아라",
                        "Kaganer",
-                       "Исмаил Садуев"
+                       "Исмаил Садуев",
+                       "Macofe"
                ]
        },
        "tog-underline": "КӀел сиз хьакха хьажорган:",
        "faq": "СиХХ",
        "faqpage": "Project:СиХХ",
        "actions": "Дийраш",
-       "namespaces": "ЦÓ\80еÑ\80ийн Ð°Ð½Ð°",
+       "namespaces": "ЦÓ\80еÑ\80ийн Ð¼ÐµÑ\82Ñ\82игаÑ\88",
        "variants": "Кепараш",
        "navigation-heading": "Навигацин меню",
        "errorpagetitle": "ГӀалат",
        "protect_change": "хийца",
        "protectthispage": "Ларъе хӀара агӀо",
        "unprotect": "Ларъяр хийцар",
-       "unprotectthispage": "Хийца хӀокху агӀона ларъяр",
+       "unprotectthispage": "ХӀокху агӀонан ларъяр хийца",
        "newpage": "Керла агӀонаш",
-       "talkpage": "Ð\94ийÑ\86аÑ\80е Ð¹Ð¸Ð»Ð»Ð° Ñ\85Ó\80аÑ\80а Ð°Ð³Ó\80о",
+       "talkpage": "Ð¥Ó\80аÑ\80а Ð°Ð³Ó\80о Ð¹Ð¸Ð¹Ñ\86аÑ\80е Ð¹Ð¸Ð»Ð»Ð°",
        "talkpagelinktext": "Дийцаре",
        "specialpage": "Белхан агӀо",
        "personaltools": "Долахь болу гӀирсаш",
        "templatepage": "Хьажа кепа агӀоне",
        "viewhelppage": "Схьаэца гӀо",
        "categorypage": "Хьажа категорешан агӀоне",
-       "viewtalkpage": "Ð¥Ñ\8cажа Ð´Ð¸Ð¹Ñ\86аÑ\80е",
+       "viewtalkpage": "Ð\94ийÑ\86аÑ\80е Ñ\85Ñ\8cажа",
        "otherlanguages": "Кхечу маттахь дерш",
-       "redirectedfrom": "(ДӀасахьажийна кху $1)",
+       "redirectedfrom": "($1 дӀасахьажийна кхузе)",
        "redirectpagesub": "АгӀо-дӀасахьажорг",
        "redirectto": "ДӀасахьажор тӀе:",
-       "lastmodifiedat": "ХӀокху агӀон тӀаьххьаралера хийцам: $1, $2.",
+       "lastmodifiedat": "ХӀокху агӀонна тӀаьххьара хийцамаш бина: $1, $2.",
        "viewcount": "ХӀокху агӀонг хьовсийна $1 {{PLURAL:$1|за}}.",
        "protectedpage": "ГӀароллийца йолу агӀо",
        "jumpto": "Дехьа гӀо:",
        "aboutpage": "Project:Цуьнах лаьцна",
        "copyright": "Чулацам лело мега $1 лицензица (кхиниг билгалйина яцахь).",
        "copyrightpage": "{{ns:project}}:Авторан бакъонаш",
-       "currentevents": "Ð¥Ó\80инÑ\86алера хилларш",
-       "currentevents-url": "Project:Ð¥Ó\80инÑ\86алера хилларш",
+       "currentevents": "Ð\9aаÑ\80ара хилларш",
+       "currentevents-url": "Project:Ð\9aаÑ\80ара хилларш",
        "disclaimers": "Жоьпалла тӀецалацар",
        "disclaimerpage": "Project:Жоьпалла тӀецалацар",
        "edithelp": "ГӀо оцу тадарна",
        "feed-atom": "Атом",
        "feed-rss": "RSS",
        "red-link-title": "$1 (ишта агӀо йоцуш ю)",
-       "sort-descending": "Ð\9cа Ñ\85ийла Ð½Ð¸Ñ\81Ñ\8fр",
-       "sort-ascending": "Ð\9cа Ñ\85ила Ð½Ð¸Ñ\81Ñ\8fр",
+       "sort-descending": "Ð\96има Ñ\85илийÑ\82а ÐºÑ\8aепе Ð´Ð°Ð»Ð¾р",
+       "sort-ascending": "Ð\90лÑ\81ам Ñ\85илийÑ\82а ÐºÑ\8aепе Ð´Ð°Ð»Ð¾р",
        "nstab-main": "Яззам",
        "nstab-user": "Декъашхо",
        "nstab-media": "Медиа агӀо",
        "myprivateinfoprotected": "Хьайн долара хаамна хийцам ба хьа йиш яц",
        "mypreferencesprotected": "Хьай гӀирс нисбан хьа бакъо яц.",
        "ns-specialprotected": "ХӀокху «{{ns:special}}» цӀерийн меттигашан агӀонаш таян йиш яц.",
-       "titleprotected": "[[Декъашхо:$1|$1]] дихкина ишта корта болуш агӀо кхоллар.\nГайтина бахьана: ''$2''.",
+       "titleprotected": "[[User:$1|$1]] дихкина ишта корта болуш агӀо кхоллар.\nГайтина бахьана: <em>$2</em>.",
        "filereadonlyerror": "файл хийца цатарло «$1», «$2» Ӏалаш ечехь ешаран хьолехь хилар бахьнехь.\n\nХӀара хьал хӀоттиначу куьйгалхочо битина хаам: «''$3''».",
        "invalidtitle-knownnamespace": "Магийна боцу коьртамогӀа цӀерийн меттигца «$2» йоза  «$3»",
        "invalidtitle-unknownnamespace": "Магийна боцу коьртамогӀа ца йовза меттигца $1 «$2» йозанца",
        "logouttext": "'''Ахьа болх дӀаберзийна.'''\n\nЦхьайолу агӀонаш чохь хьо хьай цӀарца болх беш сана хила тарло ишта ца хилийта керлаякха браузеран кэш.",
        "cannotlogoutnow-title": "ХӀинца чудаха таро яц",
        "welcomeuser": "Марша ДогӀийла, $1!",
-       "welcomecreation-msg": "Хьан декъашхочун дӀаяздар кхоьлина.\nДиц ма делахь {{SITENAME}} сайтан [[Special:Preferences|декъашхочун гӀирс]].",
+       "welcomecreation-msg": "Хьан хьесапан (учётни) дӀаяздар кхоьллина.\nДиц ма делахь {{SITENAME}} сайтан [[Special:Preferences|декъашхочун гӀирс]] чекхбаккха.",
        "yourname": "Декъашхочун цӀе:",
        "userlogin-yourname": "Декъашхочун цӀе",
        "userlogin-yourname-ph": "Язъе декъашхочун цӀе",
        "createacct-emailoptional": "Электронан поштан адрес (ца яздича мега)",
        "createacct-email-ph": "ДӀаязде хьайн электронан поштан адрес",
        "createacct-another-email-ph": "ДӀаязде электронан поштан адрес",
-       "createaccountmail": "Лела йе цахууш нисйина хана пароль, кхин язйинчу электронан адрес тӀе яийта и.",
+       "createaccountmail": "Лелае цахууш нисйина хана пароль, кхин язйинчу электронан адрес тӀе яийта и.",
        "createacct-realname": "Хьан цӀе (ца язйича мега)",
        "createaccountreason": "Бахьана:",
        "createacct-reason": "Бахьана",
        "hr_tip": "Ана сиз (сих сиха ма леладайша)",
        "summary": "Хийцамех лаьцна:",
        "subject": "ДӀахьедар/коьрта могӀа:",
-       "minoredit": "Жим хийцам",
-       "watchthis": "Ð\9bаÑ\82айе Ñ\85Ó\80аÑ\80а Ð°Ð³Ó\80о Ñ\82еÑ\80гаме Ð¼Ð¾Ð³Ó\80анан Ñ\8eкÑ\8aаÑ\85Ñ\8c",
-       "savearticle": "АгӀо дӀаязъяр",
-       "preview": "Хьалха хьажар",
+       "minoredit": "Жима хийцам",
+       "watchthis": "Ð¥Ó\80аÑ\80а Ð°Ð³Ó\80о Ñ\82еÑ\80гаме Ð¼Ð¾Ð³Ó\80анан Ñ\8eкÑ\8aаÑ\82оÑ\85а",
+       "savearticle": "АгӀо дӀаязъян",
+       "preview": "Хьалххе хьажар",
        "showpreview": "Хьалха хьажар",
-       "showdiff": "Бина хийцамашка хьажар",
+       "showdiff": "Бина болу хийцамашка хьажар",
        "blankarticle": "<strong>ДӀахьедар:</strong> Ахьа кхуллуш йолу агӀо еса ю.\nЮху кнопка «{{int:savearticle}}» тӀетаӀаяхь, агӀо цхьа чулацам боцуш кхуллур ю.",
        "anoneditwarning": "'''Тергам бе''': Ахьа хьай цӀарца тадарш деш дац. Хьан IP-адрес дӀаяздина хира ду хӀокху агӀон истори чу.",
        "anonpreviewwarning": "''Системин чу цагӀахь хьан IP-адрес агӀона истори чу дӀаяз лур ду.''",
        "noarticletext": "ХӀокху хан чохь кху агӀонца йоза дац.\nШуьга далундерг [[Special:Search/{{PAGENAME}}|лахар ишта хьехош йолу цӀе]] кхечу яззамашкахь,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} лахар кхечу тептаршкахь],\nя '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} кхолла ишта цӀе йолу агӀо]'''</span>.",
        "noarticletext-nopermission": "ХӀокху хан чохь кху агӀонца йоза дац.\nШуьга далундерг [[Special:Search/{{PAGENAME}}|лахар ишта хьехош йолу цӀе]] кхечу яззамашкахь,\nя <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} лаха оцуьнах терадерг кхечу тептаршкахь].</span>",
        "missing-revision": "АгӀона «{{FULLPAGENAME}}» верси $1 яц.\n\nИшта хуьйла ширелла дӀаяьккхина агӀонан хьажораган дихьа делча.\nМа-дара хила мега [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дӀайаьхарш йолу тептар] чохь.",
-       "userpage-userdoesnotexist": "Ð\98Ñ\88Ñ\82а Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н Ð´Ó\80аÑ\8fздаÑ\80 Â«<nowiki>$1</nowiki>» Ñ\85Ó\80инÑ\86а Ð´Ð°Ñ\86. Ð¥Ñ\8cажа Ð±Ð¸Ð»Ð³Ð°Ð», Ñ\85Ñ\8cÑ\83на Ð±Ð°ÐºÑ\8aалла Ð»Ð°Ñ\8cий ÐºÑ\85олла Ñ\8f Ñ\85ийÑ\86ам Ð±Ð° Ñ\85Ó\80окÑ\85Ñ\83 Ð°Ð³Ó\80он.",
+       "userpage-userdoesnotexist": "Ð¥Ó\80окÑ\85Ñ\83 Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н Â«<nowiki>$1</nowiki>» Ñ\85Ñ\8cеÑ\81апан Ð´Ó\80аÑ\8fздаÑ\80 Ð´Ð°Ñ\86. Ð¢ÐµÑ\88на Ñ\85ила, Ñ\85Ñ\8cÑ\83на Ð±Ð°ÐºÐºÑ\8aалла Ð»Ð°Ñ\8cий ÐºÑ\85олла Ð°, Ñ\8f Ñ\85Ó\80окÑ\85Ñ\83 Ð°Ð³Ó\80онан Ñ\85ийÑ\86ам Ð±Ð°Ð½ Ð°.",
        "userpage-userdoesnotexist-view": "«$1» ишта декъашхочун дӀаяздар дац.",
        "blocked-notice-logextract": "ХӀара декъашхочун дӀаяздар блоктоьхна ду.\nЛахахь гойту блоктохарийн тептар чура тӀаьххьарлера дӀаяздар:",
        "clearyourcache": "'''Билгалдаккхар.''' Ӏалашйинчул тӀехьа хийцамаш га браузеран кэш цӀанъян езаш хила мега.\n* '''Firefox / Safari:''' ''Shift'' цӀе йолу пиллиг лаьцна битна, гӀирсийн панелан тӀера тӀетаӀе ''Карлаяккха'' я ''Ctrl-F5'' я ''Ctrl-R'' (''⌘-R'' Mac тӀехь)\n* '''Google Chrome:''' ТӀетаӀе ''Ctrl-Shift-R'' (''⌘-Shift-R'' Mac тӀехь)\n* '''Internet Explorer:''' ''Ctrl'' лаьцна йитан, тӀетаӀе ''Карлаяккха'' я тӀетаӀе ''Ctrl-F5''\n* '''Opera:''' Кэш цӀанъяр харжа меню ''Инструменты → Настройки'' чохь",
        "sitejspreview": "'''ХӀара хьалх хьажар ду, хӀара JavaScript-код.'''\n'''хӀинца Ӏалашйина яц!'''",
        "updated": "(Карла йаькхина)",
        "note": "'''Билгалдаккхар:'''",
-       "previewnote": "'''Ð¥Ó\80аÑ\80а Ñ\85Ñ\8cлÑ\85а Ñ\85Ñ\8cажаÑ\80 Ð´Ñ\83, Ð¹Ð¾Ð·Ð° Ñ\85Ó\80инÑ\86а Ñ\8fзданза Ð´Ñ\83!'''",
+       "previewnote": "'''Ð\94агаÑ\85Ñ\8c Ð´Ð¸Ñ\82а Ñ\85Ñ\8cайна! Ð¥Ó\80аÑ\80а Ð´ÐµÐºÐºÑ\8aа Ñ\85Ñ\8cалÑ\85Ñ\85е Ñ\85Ñ\8cажаÑ\80 Ñ\85илаÑ\80.'''\nÐ¥Ñ\8cан Ñ\85ийÑ\86амаÑ\88 Ñ\85Ó\80инÑ\86а Ð° Ð´Ó\80абазбина Ð±Ð°Ñ\86!.",
        "continue-editing": "Кхин дӀа тадар",
        "session_fail_preview": "Сервер лара ца йира ахьа бина хийцамаш дӀаязба. Кхиъ цкъа а гӀортахь.\nНагахь санна хӀара гӀалат юха а далахь, [[Special:UserLogout|сеанс дӀа а къоьвлин]], юха а системин чугӀо.",
        "edit_form_incomplete": "'''Цхьайолу тадаран формаш серверан тӀекхаьчча яц. Тидаме хьажа хьай нисдарш доьхна дуй, ТӀакха южу гӀорта.'''",
        "undo-summary-username-hidden": "Юхадаьккхина декъашхочун нисдарш $1, цунна цӀе дӀахьулйина",
        "cantcreateaccounttitle": "Декъашхочун дӀаяздар кхолла йиш яц",
        "viewpagelogs": "Гайта хӀокху агӀонан тептар",
-       "nohistory": "ХӀокху агӀона хийцамаш бина хила бац.",
+       "nohistory": "ХӀокху агӀонан хийцамаш ца бина.",
        "currentrev": "Карара верси",
        "currentrev-asof": "Карара верси $1",
        "revisionasof": "Верси $1",
        "revdelete-legend": "Доза тохар",
        "revdelete-hide-text": "Къайладаккха хӀокху агӀона чура йоза",
        "revdelete-hide-image": "Къайлабаккха файлан чулацам",
-       "revdelete-hide-name": "Къайлаяккха дешдерг а цуна объект а",
+       "revdelete-hide-name": "Къайлаяккха Ӏалашо а, цуна объект а",
        "revdelete-hide-comment": "Хийцамах лаьцнарг",
        "revdelete-hide-user": "Декъашхочун цӀе/IP-адрес",
        "revdelete-hide-restricted": "Къайлабаха хаамаш куьйгалхойх а",
        "searchprofile-advanced-tooltip": "Дехарца йолу цӀерийн анашкахь лахар",
        "search-result-size": "$1 ({{PLURAL:$2|$2 дош|$2 дешнаш}})",
        "search-result-category-size": "$1 {{PLURAL:$1|юкъаяр}} ($2 {{PLURAL:$2|1=бухара категори|бухара категореш}}, $3 {{PLURAL:$3|1=файл|файлаш}}).",
-       "search-redirect": "(дlасахьажийна $1)",
+       "search-redirect": "(дӀасахьажийна $1)",
        "search-section": "(дакъа $1)",
        "search-category": "(категори $1)",
        "search-file-match": "(файлан чулацаме тера хилар)",
        "columns": "БӀогӀамаш:",
        "searchresultshead": "Лахар",
        "stub-threshold": "Кеч яран доза <a href=\"#\" class=\"stub\">коьртамогӀамна хьажоргаш</a> (байташках):",
+       "stub-threshold-sample-link": "масала",
        "stub-threshold-disabled": "ДӀадайина",
        "recentchangesdays": "Керла нисдар гайта динахь:",
        "recentchangesdays-max": "Къезиг $1 {{PLURAL:$1|дена}}",
        "timezoneregion-pacific": "Тийна океан",
        "allowemail": "Магийта декъашхошна хьайга электронан поштехула кехат кхехьийта",
        "prefs-searchoptions": "Лахар",
-       "prefs-namespaces": "ЦÓ\80еÑ\80ийн Ð°Ð½Ð°",
+       "prefs-namespaces": "ЦÓ\80еÑ\80ийн Ð¼ÐµÑ\82Ñ\82игаÑ\88",
        "default": "Iад йитарца",
        "prefs-files": "Файлаш",
        "prefs-custom-css": "Долахь йолу CSS",
        "prefs-timeoffset": "Хенан  гӀирс",
        "prefs-advancedediting": "Юкъара параметреш",
        "prefs-editor": "Тадар",
-       "prefs-preview": "Хьалха хьажар",
+       "prefs-preview": "Хьалххе хьажар",
        "prefs-advancedrc": "Кхин гӀирс нисбар",
        "prefs-advancedrendering": "Кхин гӀирс нисбар",
        "prefs-advancedsearchoptions": "Кхин гӀирс нисбар",
        "userrights-editusergroup": "Хийца декъашхочун бакъо",
        "saveusergroups": "Декъашхочун бакъонаш Ӏалашъян",
        "userrights-groupsmember": "Декъашхо:",
-       "userrights-groupsmember-auto": "Ð\91акÑ\8aонаÑ\88ан Ñ\82оба:",
-       "userrights-groups-help": "Хьона хийца ло декъашхочун бакъонаш.\n* Бакъона цӀера юххехь билгало елахь, цуна и бакъо йолуш ю.\n* Билгало яцахь — декъашхочун и бакъо яц.\n* Хьаьрко * билгала до ахьа бакъо еллачул тӀаьхьа хьона и дӀаяккха цалуш хилар.",
+       "userrights-groupsmember-auto": "Ð\93Ñ\83Ñ\88 Ð¹Ð¾Ñ\86Ñ\83 Ñ\82обанаÑ\88:",
+       "userrights-groups-help": "Хьоьга хийцалун хӀокху декъашхочун бакъонаш.\n* Бакъона цӀера юххехь билгало елахь, цуна и бакъо йолуш ю.\n* Билгало яцахь — декъашхочун и бакъо яц.\n* Хьаьрко * билгала до ахьа бакъо еллачул тӀаьхьа хьуна и дӀаяккха цалуш хилар.",
        "userrights-reason": "Бахьана:",
        "userrights-no-interwiki": "Хьан бакъо яц декъашхой бакъо хийца кхечу википеди чохь.",
        "userrights-nologin": "Куьйгалхочунна бакъо йолу [[Special:UserLogin|дӀаяздарца]] ло декъашхочун бакъо.",
        "userrights-notallowed": "Хьан дӀаяздарца магийна дац декъашхошна бакъо яла а дӀаяккха а.",
-       "userrights-changeable-col": "Хьона хийца луш йолу бакъонаш",
-       "userrights-unchangeable-col": "Хьуна хийца луш йоцу бакъонаш",
+       "userrights-changeable-col": "Хьоьга хийцалун бакъонаш",
+       "userrights-unchangeable-col": "Хьоьга хийцалун бакъонаш",
        "group": "Тоба:",
        "group-user": "Декъашхой",
-       "group-autoconfirmed": "Ша Ñ\82Ó\80елаÑ\8cÑ\86болÑ\83 декъашхой",
+       "group-autoconfirmed": "Ð\90вÑ\82оÑ\82Ó\80елаÑ\8cÑ\86на декъашхой",
        "group-bot": "Боташ",
        "group-sysop": "Куьйгалхой",
        "group-bureaucrat": "Бюрократаш",
        "group-suppress": "Ревизораш",
        "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|бюрократхо}}",
        "group-suppress-member": "{{GENDER:$1|ревизор}}",
        "grouppage-user": "{{ns:project}}:Декъашхой",
-       "grouppage-autoconfirmed": "{{ns:project}}:Ð\91акÑ\8aонаÑ\88 Ð¹Ð¾Ð»Ñ\83 декъашхой",
+       "grouppage-autoconfirmed": "{{ns:project}}:Ð\90вÑ\82оÑ\82Ó\80елаÑ\8cÑ\86на декъашхой",
        "grouppage-bot": "{{ns:project}}:Боташ",
        "grouppage-sysop": "{{ns:project}}:Куьйгалхой",
        "grouppage-bureaucrat": "{{ns:project}}:Бюрократаш",
        "right-move-rootuserpages": "декъашхочун ораман агӀонийн цӀерш хийцар",
        "right-move-categorypages": "Категорийн агӀонийн цӀерш хийцар",
        "right-movefile": "Файлийн цӀе хийцар",
-       "right-suppressredirect": "агÓ\80она Ñ\86Ó\80е Ñ\85Ñ\83Ñ\8cйÑ\86Ñ\83Ñ\88 Ñ\88иÑ\80Ñ\87Ñ\83 Ñ\86Ó\80аÑ\80аÑ\85 Ð¼Ð° ÐºÑ\85олла Ð´Ó\80аÑ\81аÑ\85Ñ\8cажоÑ\80г",
+       "right-suppressredirect": "ШиÑ\80Ñ\87Ñ\83 Ñ\86Ó\80аÑ\80аÑ\85 Ð´Ó\80аÑ\81аÑ\85Ñ\8cажоÑ\80г Ñ\86а ÐºÑ\85Ñ\83ллÑ\83Ñ\88 Ñ\86Ó\80е Ñ\85ийÑ\86аÑ\80",
        "right-upload": "Файлаш чуйаьхар",
        "right-reupload": "йолуш йолу чера тӀехула файлаш дӀаязъяр",
        "right-reupload-own": "тохарлеррачу декъашхочо файлаш юху дӀаязъяр",
        "grant-createaccount": "Декъашхочун дӀаяздарш кхоллар",
        "grant-createeditmovepage": "АгӀонашна хийцам бар",
        "grant-delete": "АгӀонаш а, нисдарш а, декъашхойн дӀаяздар а дӀадахар",
-       "grant-editinterface": "MediaWiki Ñ\86Ó\80еÑ\80ийн Ð°Ð½Ð° Ð°, Ð´Ð¾Ð»Ð°Ñ\80а CSS/JavaScript нисъяр",
+       "grant-editinterface": "MediaWiki Ñ\86Ó\80еÑ\80ийн Ð¼ÐµÑ\82Ñ\82иг Ð°, Ð´Ð¾Ð»Ð°Ñ\80а CSS/JavaScript Ð° нисъяр",
        "grant-editmycssjs": "Долара CSS/JavaScript нисъяр",
        "grant-editmyoptions": "Табе хьай гӀирс",
        "grant-editmywatchlist": "Хьан тергаме могӀам табар",
        "grant-sendemail": "Кхечу декъашхошка электронан хаамаш кхехьийта",
        "grant-uploadeditmovefile": "Чуяхар а, хийцар а файлийн цӀерш хийцар а",
        "grant-uploadfile": "Чуяха керла файлаш",
-       "grant-viewdeleted": "ДӀабаьхьна хаамашка хьажар",
+       "grant-basic": "Коьрта бакъонаш",
+       "grant-viewdeleted": "ДӀаяьхна файлашка а, агӀонашка а хьажар",
        "grant-viewmywatchlist": "Шен тергаме могӀаме хьажар",
        "newuserlogpage": "Декъашхой дӀабазбина тептар",
        "newuserlogpagetext": "Дукху хан йоцуш дӀабазбелла декъашхойн могӀам",
        "action-createpage": "агӀонаш кхолла",
        "action-createtalk": "дийцаре агӀонаш кхоллар",
        "action-createaccount": "хӀара декъашхочун дӀаяздар кхоллар",
-       "action-history": "хӀокху агӀона исторега хьажар",
+       "action-history": "хӀокху агӀонан исторешка хьажар",
        "action-minoredit": "жима нисдар сана билгало",
-       "action-move": "хӀокху агӀон цӀе хийца",
+       "action-move": "хӀокху агӀонан цӀе хийцар",
        "action-move-subpages": "хӀокху агӀона цӀе хийцар цуна массо бухара агӀонийн а",
        "action-move-rootuserpages": "декъашхочун ораман агӀонийн цӀерш хийцар",
        "action-move-categorypages": "категорийн агӀонийн цӀерш хийцар",
        "action-writeapi": "нисдеш лелойо API",
        "action-delete": "дӀаяккха хӀара агӀо",
        "action-deleterevision": "агӀона хӀара верси дӀаяккхар",
-       "action-deletedhistory": "хӀокху агӀона дӀаяккхинцу исторега хьажар",
+       "action-deletedhistory": "хӀокху агӀонан дӀаяьккхинчу исторешка хьажар",
        "action-browsearchive": "ДӀаяхна агӀонаш лахар",
        "action-undelete": "хӀара агӀо меттахӀоттор",
        "action-suppressrevision": "хӀокху къайлаха йолу агӀон версеш хьажар а, меттахӀоттор а",
        "recentchanges-label-bot": "ХӀара нисдар бото дина",
        "recentchanges-label-unpatrolled": "ХӀара нисдар хӀинца цхьано патрулировать дина дац",
        "recentchanges-label-plusminus": "байташкахь барам хийцар",
-       "recentchanges-legend-heading": "'''Легенда:&nbsp;'''",
+       "recentchanges-legend-heading": "<strong>Легенда:&nbsp;</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (хьажа кхин [[Special:NewPages|керла агӀонийн могӀа]])",
        "recentchanges-submit": "Гайта",
        "rcnotefrom": "Лахахь гайтина тӀера <strong>$2</strong> (хийцамаш <strong>$1</strong> кӀезиг).",
-       "rclistfrom": "Ð\93айÑ\82а Ñ\85ийÑ\86ам {{CURRENTYEAR}} Ñ\88аран {{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTTIME}} бина болу",
+       "rclistfrom": "Ð\93айÑ\82а Ñ\85ийÑ\86ам {{CURRENTYEAR}} Ñ\88еран {{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTTIME}} бина болу",
        "rcshowhideminor": "$1 кегийра нисдарш",
        "rcshowhideminor-show": "Гайта",
        "rcshowhideminor-hide": "Къайладаха",
        "rcshowhidebots": "$1 боташ",
        "rcshowhidebots-show": "Гайта",
        "rcshowhidebots-hide": "Къайлабаха",
-       "rcshowhideliu": "$1 шайн цӀершца болу декъашхой",
+       "rcshowhideliu": "$1 дӀабазбелла декъашхой",
        "rcshowhideliu-show": "Гайта",
        "rcshowhideliu-hide": "Къайлабаха",
        "rcshowhideanons": "$1 цӀе хьулйина декъашхой",
        "rcshowhideanons-show": "Гайта",
        "rcshowhideanons-hide": "Къайлабаха",
-       "rcshowhidepatr": "$1 Ñ\85Ñ\8cажжина нисдарш",
+       "rcshowhidepatr": "$1 Ñ\82еллина нисдарш",
        "rcshowhidepatr-show": "Гайта",
        "rcshowhidepatr-hide": "Къайладаха",
        "rcshowhidemine": "$1 айхьа нисдинарш",
        "recentchangeslinked-page": "АгӀон цӀе:",
        "recentchangeslinked-to": "Кхечу агӀор, гайта хийцамаш агӀонашца, хӀоттийначу агӀонтӀе хьажорг йолуш",
        "recentchanges-page-added-to-category": "[[:$1]] категори чу тоьхна",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] а, {{PLURAL:$2|цхьа агӀо|$2 агӀо}} а категорин тӀетоьхна",
        "recentchanges-page-removed-from-category": "[[:$1]] дӀаяьккхина категори чура",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] а, {{PLURAL:$2|цхьа агӀо|$2 агӀо}} а категорин чура дӀаяьккхина",
+       "autochange-username": "MediaWiki авто-хийцамбар",
        "upload": "Файл чуяккхар",
        "uploadbtn": "Файл чуяккхар",
        "reuploaddesc": "Юху гӀо файл чуйоккху агӀоне",
        "uploaddisabled": "Чуяккхар магийна дац",
        "copyuploaddisabled": "URL тӀера чуяккхар дӀадайина ду.",
        "uploaddisabledtext": "Файлаш чуяхар дӀадайина ду.",
-       "uploadscriptednamespace": "Ð¥Ó\80окÑ\85Ñ\83 SVG-Ñ\84айлан Ñ\86Ó\80еÑ\80ийн Ð°Ð½Ð° нийса яц '$1'",
+       "uploadscriptednamespace": "Ð¥Ó\80окÑ\85Ñ\83 SVG-Ñ\84айлан Ñ\86Ó\80еÑ\80ийн Ð¼ÐµÑ\82Ñ\82иг нийса яц '$1'",
        "upload-source": "ДIайолалун файл",
        "sourcefilename": "ДIайолалун файл:",
        "sourceurl": "Хьостан URL-адрес:",
        "protectedpages-performer": "Декъашхо ларор",
        "protectedpages-params": "ГӀаролийн параметраш",
        "protectedpages-reason": "Бахьана",
+       "protectedpages-submit": "Гайта агӀонаш",
        "protectedpages-unknown-timestamp": "Хууш дац",
        "protectedpages-unknown-performer": "Хууш доцу декъашхо",
        "protectedtitles": "Ларйина цӀерш",
        "protectedtitles-summary": "ХӀокху агӀонгахь гойтуш ю ца кхоллийта ларйина цӀерш. ХӀинца ларйина агӀонашка хьажа [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
+       "protectedtitles-submit": "Гайта кортош",
        "listusers": "Декъашхойн могӀам",
        "listusers-editsonly": "Цхаъ мукъане а хийцам бина декъашхой гайта",
        "listusers-creationsort": "Кхоьллина хене хьаьжжина нисъяр",
        "newpages-username": "Декъашхо:",
        "ancientpages": "Шира агӀонаш",
        "move": "ЦӀе хийца",
-       "movethispage": "ХӀокху агӀон цӀе хийца",
+       "movethispage": "ХӀокху агӀонан цӀе хийца",
        "unusedimagestext": "Лахара файлаш цхьана агӀонгахь лелош яц.\nДехар до, тидаме бе, кхин йолу веб-сайташ а лелош хила мега нийсса йогӀу хьажорг (URL), хӀокху могӀаме йогӀуш ялахь а иза хила мега жигара лелош.",
        "unusedcategoriestext": "ХӀокху категорешан чохь агӀонаш я кхин категореш яц.",
        "notargettitle": "Ӏалашо билгал йина яц",
        "apihelp-no-such-module": "Модуль «$1» цакарий.",
        "apisandbox": "Ловзаран майда API",
        "apisandbox-intro": "Лела йе хӀара агӀо '''MediaWiki API''' зуьйш.\nAPI кхин муха лела йо хьажа [//www.mediawiki.org/wiki/API:Main_page кхузахь]. Масала, [//www.mediawiki.org/wiki/API#A_simple_example Коьрта агӀона чулацам схьаэца]. Кхин масалаш ган харжа дийриг.",
+       "apisandbox-unfullscreen": "Гайта агӀо",
        "apisandbox-submit": "Дехар далар",
        "apisandbox-reset": "ЦӀанъян",
+       "apisandbox-retry": "ЮхагӀорта",
        "apisandbox-examples": "Масала",
+       "apisandbox-dynamic-parameters-add-label": "ТӀетоха параметр:",
+       "apisandbox-dynamic-parameters-add-placeholder": "Параметран цӀе",
+       "apisandbox-dynamic-error-exists": "«$1» цӀе йолу параметр йолуш ю",
+       "apisandbox-deprecated-parameters": "Ширъелла параметраш",
+       "apisandbox-fetch-token": "Токен авто-юззар",
        "apisandbox-results": "Хилам",
        "apisandbox-request-url-label": "Дехаран URL-адрес:",
        "apisandbox-request-time": "Дехар дина хан: $1",
        "allpagesfrom": "Гучé яха агӀонаш, йолалуш йолу оцу:",
        "allpagesto": "Араяхар сацадé тӀе:",
        "allarticles": "Массо агӀонаш",
-       "allinnamespace": "Массо агӀонаш оцу цӀерийн анахь «$1»",
+       "allinnamespace": "Массо агӀонаш «$1» цӀерийн меттигехь",
        "allpagessubmit": "Кхочушдé",
        "allpagesprefix": "Лаха агӀонаш, дӀайолалуш йолу:",
        "allpagesbadtitle": "Цамагош йолу агӀон цӀе. Коьрта могӀан юкъах ю юкъарвики меттанийн юкъе тӀечӀагӀйина йолу хьаьрк я магийна доцу оцу коьрта моӀанца символаш я кхин.",
-       "allpages-bad-ns": "{{SITENAME}} кху чохь ана цӀерш яц «$1».",
+       "allpages-bad-ns": "{{SITENAME}} кху чохь цӀерийн меттиг яц «$1».",
        "allpages-hide-redirects": "Къайлаяха дӀасахьажийнарш",
        "cachedspecial-viewing-cached-ttl": "Хьо хьоьжу агӀона верси кэш чура ю, иза карлаяьккхина хила мега $1 хьалха.",
        "cachedspecial-refresh-now": "Хьажа тӀехьарчу версега.",
        "sp-deletedcontributions-contribs": "къинхьегам",
        "linksearch": "Арахьара хьажорг",
        "linksearch-pat": "Лехарна кеп:",
-       "linksearch-ns": "ЦÓ\80еÑ\80ийн Ð°Ð½Ð°:",
+       "linksearch-ns": "ЦÓ\80еÑ\80ийн Ð¼ÐµÑ\82Ñ\82игаÑ\88",
        "linksearch-ok": "Лахар",
        "linksearch-text": "Лело мега хӀоттош йолу символаш, масала, <code>*.wikipedia.org</code>.\nЛакхара даржан домен мукъа хила еза , масала<code>*.org</code><br />\nЛовш йолу {{PLURAL:$2|1=протокол|протоколаш}}: $1 (Iад йитарца http://, протокол бакъалла язъен яцахь).",
        "linksearch-line": "$2 — хьажорг кху $1",
        "listgrouprights-addgroup-all": "массо тобанийн юкъатоха йиш ю",
        "listgrouprights-removegroup-all": "тобан чура дӀабаха ло",
        "listgrouprights-namespaceprotection-header": "ЦӀеран анан бехкам",
-       "listgrouprights-namespaceprotection-namespace": "ЦÓ\80еÑ\80ийн Ð°Ð½Ð°",
+       "listgrouprights-namespaceprotection-namespace": "ЦÓ\80еÑ\80ийн Ð¼ÐµÑ\82Ñ\82иг",
        "listgrouprights-namespaceprotection-restrictedto": "Декъашхочун хийцамаш бан таро хуьлуьйту бакъонаш",
        "listgrants": "Бакъо",
        "listgrants-grant": "Бакъо",
        "removedwatchtext": "АгӀо «[[:$1]]» дӀаяьккхина яра хьан [[Special:Watchlist|тергаме могӀанан юкъар]].",
        "removedwatchtext-short": "«$1» агӀо хьан тергаман магӀам чура дӀаяьккхина.",
        "watch": "Тидам бе",
-       "watchthispage": "ТеÑ\80гам Ð±Ã© Ñ\85Ó\80окÑ\85Ñ\83 Ð°Ð³Ó\80она",
+       "watchthispage": "Ð¥Ó\80окÑ\85Ñ\83 Ð°Ð³Ó\80онан Ñ\82идам Ð±ÐµÑ\88 Ñ\85ила",
        "unwatch": "Тергамах къаста",
        "unwatchthispage": "ДӀадаккха терго яр",
        "notanarticle": "Яззам бац",
        "enotif_lastvisited": "Хьажа кхин. $1 хьуна тӀаьхьара гина чул тӀехьа бина хийцамашка хьажар.",
        "enotif_lastdiff": "Кхин хьажа. $1 хийцам бовза.",
        "enotif_anon_editor": "къайлаха декъашхо $1",
-       "enotif_body": "Ð\90Ñ\81Ñ\81алам Ó\80алийкÑ\83м, $WATCHINGUSERNAME!\n\n$PAGEINTRO $NEWPAGE\n\nХийÑ\86амаÑ\85 Ð»Ð°Ñ\8cÑ\86на Ð´Ð¾Ñ\86а Ñ\8fздаÑ\80: $PAGESUMMARY $PAGEMINOREDIT\n\nХийÑ\86ам Ð±Ð¸Ð½Ð°Ñ\87Ñ\83нга Ñ\85аам Ð±Ð°Ñ\80:\nÑ\8dл. Ð¿Ð¾Ñ\88Ñ\82: $PAGEEDITOR_EMAIL\nвики: $PAGEEDITOR_WIKI\nÐ¥Ñ\8cо Ñ\85Ñ\8cайн Ñ\86Ó\80аÑ\80Ñ\86а Ñ\85Ó\80окÑ\85Ñ\83 Ð°Ð³Ó\80он Ñ\87Ñ\86 Ñ\86а Ð³Ó\80аÑ\88, Ð¾Ñ\8cÑ\86Ñ\83на ÐºÑ\85ин Ñ\85ийÑ\86амаÑ\88 Ð±Ð¸Ñ\87а Ñ\85Ñ\8cÑ\83на Ñ\85аам Ð±Ð¸Ñ\80а Ð±Ð°Ñ\86. Ð\9aÑ\85ин Ñ\85Ñ\8cа Ð¹Ð¸Ñ\88 Ñ\8e Ð¸ Ð¾Ð¿Ñ\86и Ð¼Ð°Ñ\81Ñ\81о Ð°Ð³Ó\80онаÑ\88на Ð´Ó\80аÑ\8fйа.\nХааман Ñ\81иÑ\81Ñ\82ема {{grammar:genitive|{{SITENAME}}}}\n\n--\nХааман Ñ\85ийÑ\86ам Ð±Ð°Ñ\80\n{{canonicalurl:{{#special:Preferences}}}}\n\nÐ¥Ñ\8cайн Ñ\82еÑ\80гаме Ð¼Ð¾Ð³Ó\80ам Ð½Ð¸Ñ\81баÑ\80\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nÐ¥Ñ\8cайн Ñ\82еÑ\80гаме Ð¼Ð¾Ð³Ó\80ам Ñ\87Ñ\83Ñ\80а Ð°Ð³Ó\80онаÑ\88 Ð´Ó\80аÑ\8fÑ\85а\n$UNWATCHURL\n\nТÑ\85оÑ\8cга Ð·Ó\80е Ð° гӀо а\n$HELPPAGE",
+       "enotif_body": "Ð\9cаÑ\80Ñ\88алла Ñ\85Ñ\83Ñ\8cлда, $WATCHINGUSERNAME!\n\n$PAGEINTRO $NEWPAGE\n\nХийÑ\86амаÑ\85 Ð»Ð°Ñ\8cÑ\86на Ð´Ð¾Ñ\86Ñ\86а Ð´Ó\80аÑ\8fздаÑ\80: $PAGESUMMARY $PAGEMINOREDIT\n\nХийÑ\86ам Ð±Ð¸Ð½Ñ\87Ñ\83нна Ñ\82Ó\80едеÑ\80заÑ\80:\nÑ\8dл. Ð¿Ð¾Ñ\88Ñ\82: $PAGEEDITOR_EMAIL\nвики: $PAGEEDITOR_WIKI\nÐ\9dагаÑ\85Ñ\8c Ñ\81анна Ñ\85Ñ\8cо Ñ\85Ñ\8cайн Ñ\85Ñ\8cеÑ\81апан Ð´Ó\80аÑ\8fздаÑ\80Ñ\86а Ñ\85Ó\80окÑ\85Ñ\83 Ð°Ð³Ó\80онан Ñ\87Ñ\83 Ñ\86адагÓ\80аÑ\85Ñ\8c, Ð¾Ñ\86Ñ\83нна ÐºÑ\85ин Ñ\85ийÑ\86амаÑ\88 Ð±Ð¸Ñ\87а Ñ\85Ñ\8cÑ\83на Ñ\85аам Ð±Ð¸Ñ\80а Ð±Ð°Ñ\86. Ð\9aÑ\85ин Ñ\85Ñ\8cан Ð¹Ð¸Ñ\88 Ñ\8e Ð¸ Ð¾Ð¿Ñ\86и Ð¼Ð°Ñ\81Ñ\81о Ð°Ð³Ó\80онаÑ\88на Ð´Ó\80аÑ\8fйа.\nХааман Ñ\81иÑ\81Ñ\82ема {{grammar:genitive|{{SITENAME}}}}\n\n--\nХааман Ñ\85ийÑ\86ам Ð±Ð°Ñ\80\n{{canonicalurl:{{#special:Preferences}}}}\n\nÐ¥Ñ\8cайн Ñ\82еÑ\80гаме Ð¼Ð¾Ð³Ó\80ам Ð½Ð¸Ñ\81баÑ\80\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nÐ¥Ñ\8cайн Ñ\82еÑ\80гаме Ð¼Ð¾Ð³Ó\80ам Ñ\87Ñ\83Ñ\80а Ð°Ð³Ó\80онаÑ\88 Ð´Ó\80аÑ\8fÑ\85а\n$UNWATCHURL\n\nЮÑ\85адоÑ\8cÑ\80зÑ\83 Ð´Ð°Ð·Ð°Ñ\80 Ð°, гӀо а\n$HELPPAGE",
        "changed": "хийцина",
        "deletepage": "ДӀаяккха агӀо",
        "confirm": "Бакъдан",
        "rollbacklinkcount-morethan": "Юхадаккха $1 дукха {{PLURAL:$1|нисдар|нисдарш|нисдарш}}",
        "rollbackfailed": "Юхайоккхуш гӀалат ду",
        "alreadyrolled": "ТӀаьххьара [[User:$2|$2]] ([[User talk:$2|дийцаре]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) декъашхочо «[[:$1]]» агӀона  бина хийцамаш юхабаха цатарло,\nхӀинцале цхъаъ кхиъна хийцамаш юхабаха я агӀо тая.\n\nХийцамаш бинарг [[User:$3|$3]] ([[User talk:$3|дийцаре]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Хийцамаш барна гайтина бахьана: ''$1''.",
+       "editcomment": "Хийцамаш барна гайтина бахьана: <em>$1</em>.",
        "revertpage": "Нисдарш [[Special:Contributions/$2|$2]] ([[User talk:$2|дийцаре]]) юха даьхна версин [[User:$1|$1]]",
        "revertpage-nouser": "Нисдарш (декъашхочун цӀе хьулйина) юхадаьхина версин {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Юхадаьхна $1; нисдарш, $2 версин.",
        "protect-title": "Ларъяр: «$1»",
        "protect-title-notallowed": "ГӀораллин бараме хьажар «$1»",
        "prot_1movedto2": "«[[$1]]» цӀе хийцина → «[[$2]]»",
-       "protect-badnamespace-title": "Ð\93Ó\80оÑ\80аладан Ñ\86алÑ\83Ñ\88 Ð¹Ð¾Ð»Ñ\83 Ñ\86Ó\80еÑ\80ийн Ð°Ð½Ð°",
+       "protect-badnamespace-title": "Ð\9bаÑ\80Ñ\8aÑ\8fн Ñ\86алÑ\83Ñ\88 Ð¹Ð¾Ð»Ñ\83 Ñ\86Ó\80еÑ\80ийн Ð¼ÐµÑ\82Ñ\82иг",
        "protect-badnamespace-text": "ХӀокху цӀерийн меттигехь йолу агӀонашна гӀараладан цало.",
        "protect-norestrictiontypes-title": "ГӀараладан цалуш йолу агӀо",
        "protect-legend": "Бакъде агӀо ларъяр",
        "protect_expiry_old": "Хан чаккхе — хьалхалера.",
        "protect-unchain-permissions": "Схьабелла кхин лаъръяран гӀирс",
        "protect-text": "Кхузéхь хьо хьажало хийцалуш ларъяран локхалла оцу агӀонашна '''$1'''.",
-       "protect-locked-access": "Хьан дӀаяздаран тоъал бакъо яц гӀароллийн локхаллéхь агӀон хийцам бá. ДӀадоьлху хӀоттийнарш агӀонна '''$1''':",
+       "protect-locked-access": "Хьан хьесапан дӀаяздаран тоъал бакъо яц агӀонан лардаран локхаллехь хийцам бан. АгӀонан карара дӀахӀоттамаш '''$1''':",
        "protect-cascadeon": "ХӀара агӀо хӀинца ларйина ю, хӀунда аьлча иза латийна {{PLURAL:$1|1=лахахьа гойтучу агӀонца, цуьнца хӀоттийна|лахахьа гойтучу агӀоншца, цаьрца хӀоттийна}} чахчарийца ларяър. Хьога хийцалур ду ларяран локхалла хӀокху агӀон, амма оцо хийцам бийра бац чахчарехь йолучу ларярна.",
        "protect-default": "Ларъяр доцуш",
        "protect-fallback": "Бакъо оьшу «$1»",
        "protect-expiring-local": "чекхйолу $1",
        "protect-expiry-indefinite": "хан чаккхе йоцуш",
        "protect-cascade": "АгӀонаш ларъяр, хӀокху агӀонца хӀоттайелларш (чахчарé ларъяр)",
-       "protect-cantedit": "Хьéга хийцам цабало хӀокху агӀон гlаролли локхалан, хӀуд аьлча хьан бакъо яц оцунна тадар дан.",
+       "protect-cantedit": "Хьоьга хийцам ца бало хӀокху агӀонан лардаран локхаллин, хӀунда аьлча хьан бакъо яц иза таян.",
        "protect-othertime": "Кхин хан:",
        "protect-othertime-op": "кхин хан",
        "protect-existing-expiry": "Карара чекхйолу хан: $2, $3",
        "undelete-error-short": "Файл меттахӀоттаяран гӀалат: $1",
        "undelete-error-long": "Файл меттахӀоттош гӀалат даьлла:\n\n$1",
        "undelete-show-file-submit": "ХӀаъ",
-       "namespace": "ЦÓ\80еÑ\80ийн Ð°Ð½Ð°:",
+       "namespace": "ЦÓ\80еÑ\80ийн Ð¼ÐµÑ\82Ñ\82игаÑ\88:",
        "invert": "Хаьржинарг къайлаяккха",
        "tooltip-invert": "ХӀоттае хӀара билгало, хаьржинчу цӀерийн анан агӀонийн хийцамаш къайлабаха (кхин дихкина цӀерийн анаш, гайтина елахь)",
-       "namespace_association": "Ð\99иÑ\85кина Ð°Ð½Ð°",
-       "tooltip-namespace_association": "Ð¥Ó\80оÑ\82Ñ\82ае Ñ\85Ó\80аÑ\80а Ð±Ð¸Ð»Ð³Ð°Ð»Ð¾, Ð¸Ñ\88Ñ\82Ñ\82а Ð´Ð¸Ð¹Ñ\86аÑ\80ийн (Ñ\8f ÐºÑ\85ин) Ñ\86Ó\80еÑ\80ийн Ð°Ð½Ð° юкъахь хилийта",
+       "namespace_association": "Ð\99иÑ\85кина Ð¼ÐµÑ\82Ñ\82иг",
+       "tooltip-namespace_association": "Ð¥Ó\80оÑ\82Ñ\82ае Ñ\85Ó\80аÑ\80а Ð±Ð¸Ð»Ð³Ð°Ð»Ð¾, Ð¸Ñ\88Ñ\82Ñ\82а Ð´Ð¸Ð¹Ñ\86аÑ\80ийн (Ñ\8f ÐºÑ\85ин) Ñ\86Ó\80еÑ\80ийн Ð¼ÐµÑ\82Ñ\82иг юкъахь хилийта",
        "blanknamespace": "(Коьрта)",
        "contributions": "{{GENDER:$1|Декъашхочун}} къинхьегам",
        "contributions-title": "{{GENDER:$1|Декъашхочун}} къинхьегам $1",
        "sp-contributions-toponly": "Гайта тӀаьххьарлера хийцамаш",
        "sp-contributions-newonly": "АгӀонаш кхоллар бен ма гайта",
        "sp-contributions-submit": "Лахар",
-       "whatlinkshere": "Ð¥Ñ\8cажоÑ\80гаÑ\88 ÐºÑ\85Ñ\83зе",
+       "whatlinkshere": "Ð\9aÑ\85Ñ\83за Ñ\85Ñ\8cажоÑ\80гаÑ\88",
        "whatlinkshere-title": "«$1» тӀе хьажоргаш йолу агӀонаш",
        "whatlinkshere-page": "АгӀо:",
        "linkshere": "ТӀаьхьайогӀу агӀонаш оцу '''[[:$1]]''': хьажоргца ю",
        "nolinkshere": "ХӀокху '''[[:$1]]''' агӀона тӀе кхечу агӀонашкахь хьажоргаш яц.",
-       "nolinkshere-ns": "ХаÑ\8cÑ\80жинÑ\87Ñ\83 Ð°Ð½Ð°хь яц '''[[:$1]]''' цӀе йолу агӀонаш",
+       "nolinkshere-ns": "ХаÑ\8cÑ\80жинÑ\87Ñ\83 Ð¼ÐµÑ\82Ñ\82игехь яц '''[[:$1]]''' цӀе йолу агӀонаш",
        "isredirect": "агӀо-дӀасахьажорг",
        "istemplate": "юкъаялийнарш",
        "isimage": "Файлан хьажорг",
        "cant-move-category-page": "Хьан категорийн цӀерш хийца бакъо яц.",
        "cant-move-to-category-page": "Хьан категорийн цӀерш хийца бакъо яц.",
        "newtitle": "Керла цӀе",
-       "move-watch": "Ð\9bаÑ\82айé Ñ\85Ó\80аÑ\80а Ð°Ð³Ó\80о Ñ\82еÑ\80гаме Ð¼Ð¾Ð³Ó\80анан Ñ\8eкÑ\8aаÑ\85Ñ\8c",
+       "move-watch": "Ð¥Ó\80аÑ\80а Ð°Ð³Ó\80о Ñ\82еÑ\80гаме Ð¼Ð¾Ð³Ó\80анан Ñ\8eкÑ\8aаÑ\82оÑ\85а",
        "movepagebtn": "АгӀон цӀе хийца",
-       "pagemovedsub": "АгӀон цӀе хийцина",
+       "pagemovedsub": "АгӀонан цӀе хийцина",
        "movepage-moved": "'''АгӀон цӀе «$1» хийцина → «$2»'''",
        "movepage-moved-redirect": "Кхоьллина дӀасахьажорг.",
        "movepage-moved-noredirect": "ДӀасхьажорг кхоллар дохина.",
        "tooltip-n-recentchanges": "ТӀаьххьаралера хийцаман могӀам",
        "tooltip-n-randompage": "Хьажа цахууш нисйеллачу агlоне",
        "tooltip-n-help": "ГӀоде меттиг",
-       "tooltip-t-whatlinkshere": "Ð\9cаÑ\81Ñ\81о Ð°Ð³Ó\80он Ð¼Ð¾Ð³Ó\80ам, Ñ\85Ó\80окÑ\85Ñ\83 Ð°Ð³Ó\80онÑ\82Ó\80е Ñ\85Ñ\8cажийна Ð¹Ð¾Ð»Ñ\83",
+       "tooltip-t-whatlinkshere": "Ð¥Ó\80окÑ\85Ñ\83 Ð°Ð³Ó\80онан Ñ\82Ó\80е Ñ\85Ñ\8cажийна Ð¹Ð¾Ð»Ñ\83 Ð¼Ð°Ñ\81Ñ\81о Ð°Ð³Ó\80онийн Ð¼Ð¾Ð³Ó\80ам",
        "tooltip-t-recentchangeslinked": "ТӀаьххьарлера хийцамаш хӀокху агӀонашкахь, хьажийна хӀара агӀо болу",
-       "tooltip-feed-rss": "ХӀокху агӀона трансляци RSS-рца",
+       "tooltip-feed-rss": "RSS-ехь йолу хӀокху агӀонан трансляци",
        "tooltip-feed-atom": "Хьагайтар оцу Atom цани хlокху агlон",
        "tooltip-t-contributions": "ХӀокху декъашхочо хийцина йолу агӀонийн могӀам",
        "tooltip-t-emailuser": "ДӀабахьийта хаам оцу декъашхона",
        "anonymous": "{{PLURAL:$1|1=ЦӀе хьулйина декъашхо|ЦӀе хьулйина декъашхой}} {{grammar:genitive|{{SITENAME}}}}",
        "siteuser": "декъашхо {{grammar:genitive|{{SITENAME}}}} $1",
        "anonuser": "цӀе хьулйина декъашхо {{grammar:genitive|{{SITENAME}}}} $1",
-       "lastmodifiedatby": "Ð¥Ó\80окÑ\85Ñ\83 Ð°Ð³Ó\80он Ñ\82Ó\80аÑ\8cÑ\85Ñ\85Ñ\8cаÑ\80алеÑ\80а Ñ\85ийÑ\86ам: $1 $2. — $3",
+       "lastmodifiedatby": "Ð¥Ó\80аÑ\80а Ð°Ð³Ó\80о Ñ\82Ó\80аÑ\8cÑ\85Ñ\85Ñ\8cаÑ\80а Ñ\85ийÑ\86ина: $1 $2, Ñ\85ийÑ\86ам Ð±Ð¸Ð½Ð° — $3",
        "othercontribs": "Кхуллуш дакъалецира декъашхоша: $1.",
        "others": "кхин",
        "siteusers": "{{PLURAL:$2|1=декъашхо|декъашхой}} {{grammar:genitive|{{SITENAME}}}} $1",
        "seconds-abbrev": "$1 оцу",
        "minutes-abbrev": "$1 мин",
        "hours-abbrev": "$1 сахь.",
+       "days-abbrev": "$1 д",
        "seconds": "{{PLURAL:$1|$1 секунд|$1 секунд}}",
        "minutes": "{{PLURAL:$1|$1 минот|$1 минот}}",
        "hours": "{{PLURAL:$1|$1 сахьт}}",
        "exif-lightsource-9": "Хаза хенан хӀоттам",
        "exif-lightsource-10": "Мархаш йолу",
        "exif-lightsource-11": "ӀиндагӀ",
+       "exif-flash-fired-1": "Йолаелла я́лар",
        "exif-flash-mode-3": "авто хьал",
        "exif-flash-function-1": "Серло яц",
        "exif-focalplaneresolutionunit-2": "дюйм",
        "exif-scenecapturetype-0": "Стандартан",
        "exif-scenecapturetype-3": "Буса даьккхина сурт",
        "exif-gaincontrol-0": "Яц",
-       "exif-gaincontrol-1": "Ð\96им Ð´Ð¾кха дар",
+       "exif-gaincontrol-1": "Ð\93Ó\80еÑ\85Ñ\85Ñ\8cа Ð´Ð¾Ðºкха дар",
        "exif-gaincontrol-2": "Дукху доккха дар",
-       "exif-gaincontrol-3": "Дуккху жим дар",
+       "exif-gaincontrol-3": "Дуккха жима дар",
        "exif-gaincontrol-4": "Дукху жим дар",
        "exif-contrast-0": "Лартӏахь",
        "exif-contrast-1": "КӀеда айина",
        "exif-gpsspeed-m": "миль/сахьтехь",
        "exif-gpsspeed-n": "шеддаш",
        "exif-gpsdestdistance-k": "Километр",
+       "exif-gpsdestdistance-m": "Миль",
        "exif-gpsdestdistance-n": "ХӀордаца йолу миль",
        "exif-gpsdop-excellent": "Дика ($1)",
        "exif-gpsdop-good": "Хаза ($1)",
        "exif-gpsdirection-t": "бакъалла",
        "exif-gpsdirection-m": "магнитан",
        "exif-ycbcrpositioning-1": "Юкъйина",
+       "exif-ycbcrpositioning-2": "CO-sited",
        "exif-dc-contributor": "Дакъалаьцнарг",
        "exif-dc-date": "Терахь(ш)",
        "exif-dc-publisher": "Арахецархо",
        "exif-iimcategory-dis": "Ирча бохам а, авари а",
        "exif-iimcategory-fin": "Экономика а, бизнес а",
        "exif-iimcategory-edu": "Дешна хилар",
+       "exif-iimcategory-evn": "Гонахе",
+       "exif-iimcategory-hth": "Могшалла",
        "exif-iimcategory-lab": "Къинхьегам",
+       "exif-iimcategory-pol": "Политика",
        "exif-iimcategory-rel": "Дин а, тешар а",
        "exif-iimcategory-sci": "Ӏилма а, техника а",
        "exif-iimcategory-soi": "Социалан хаттарш",
+       "exif-iimcategory-spo": "Спорт",
        "exif-iimcategory-wea": "Хенан хӀоттам",
        "exif-urgency-normal": "Диканиг ($1)",
        "exif-urgency-low": "Лахара ($1)",
        "tags-description-header": "МаьӀнан буьззина хаам",
        "tags-source-header": "Хьост",
        "tags-active-header": "Жигара?",
-       "tags-hitcount-header": "Ð\9aÑ\8aаÑ\81Ñ\82ам Ð±ина нисдарш",
+       "tags-hitcount-header": "Ð\91илгалдина нисдарш",
        "tags-actions-header": "Дийраш",
        "tags-active-yes": "ХӀаъ",
        "tags-active-no": "ХӀахӀа",
        "htmlform-chosen-placeholder": "Харжа кеп",
        "htmlform-cloner-create": "ТӀетоха кхин",
        "htmlform-cloner-delete": "ДӀаяккха",
+       "htmlform-title-not-exists": "«$1» яц.",
+       "htmlform-user-not-exists": "<strong>$1</strong> яц.",
+       "htmlform-user-not-valid": "<strong>$1</strong> — декъашхочун магийна йоцу цӀе.",
        "logentry-delete-delete": "$1 {{GENDER:$2|дӀаяьккхина}} агӀо $3",
        "logentry-delete-restore": "$1 {{GENDER:$2|меттахӀоттайина|меттахӀоттайина}} агӀо $3",
        "logentry-delete-event": "$1 {{GENDER:$2|хийцина}} гуш хилар {{PLURAL:$5|1=$5 дӀаяздаран|$5 дӀаяздаршан}} тептаран → $3: $4",
        "logentry-newusers-create2": "$1 {{GENDER:$2|кхоьллина}} декъашхочун дӀаяздапр $3",
        "logentry-newusers-byemail": "$1 {{GENDER:$2|кхоьллина}} декъашхочун дӀаяздар $3 пароль электронан поште яхьийтина",
        "logentry-newusers-autocreate": "Автоматически кхоьллина {{GENDER:$2|декъашхочун}} $1 дӀаяздар",
+       "logentry-protect-unprotect": "$1 — $3 тӀера ларъяр {{GENDER:$2|дӀадаьккхина}}",
        "logentry-protect-protect": "$1 {{GENDER:$2|ларйина}} $3 $4",
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|ларйина}} $3 $4 [каскадан]",
        "logentry-protect-modify": "$1 {{GENDER:$2|хийцина}} ларяран барам $3 $4",
        "feedback-subject": "Къамел:",
        "feedback-submit": "Дахьийта",
        "feedback-thanks-title": "Баркалла!",
+       "feedback-useragent": "Браузер:",
        "searchsuggest-search": "Лахар",
        "searchsuggest-containing": "чуьраниг…",
        "api-error-duplicate": "Иштта чулацам болу {{PLURAL:$1|кхин файл|кхин файлаш}} йолуш ю.",
        "duration-centuries": "$1 {{PLURAL:$1|бӀешо|бӀешераш}}",
        "duration-millennia": "$1 {{PLURAL:$1|эзар шо|эзар шераш}}",
        "rotate-comment": "Сурт дерзина $1 {{PLURAL:$1|градус}} сахьтан цамзаца",
-       "limitreport-title": "Ð\90гÓ\80она Ñ\85Ó\80оÑ\82Ñ\82ам ÐºÑ\8aаÑ\81торан хаамаш:",
+       "limitreport-title": "Ð\90нализаторан хаамаш:",
        "limitreport-cputime": "Процессоран хан лелор",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|секунд}}",
        "limitreport-walltime": "Йодуш йолу хенахь лелор",
        "limitreport-templateargumentsize": "Кепан аргументан барам",
        "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|байт}}",
        "limitreport-expansiondepth": "Шордаларан уггар йокха кӀоргалла",
-       "limitreport-expensivefunctioncount": "Ð\90гÓ\80она Ñ\85Ó\80оÑ\82Ñ\82ам ÐºÑ\8aаÑ\81Ñ\82оÑ\80ан Â«ÐµÐ·Ð°Â» Ñ\84Ñ\83нкÑ\86еÑ\88",
+       "limitreport-expensivefunctioncount": "Ð\90нализаÑ\82оÑ\80ан Â«ÐµÐ·Ð°Â» Ñ\84Ñ\83нкÑ\86ийн Ð´Ñ\83кÑ\85алла",
        "expandtemplates": "Кепаш схьаястар",
        "expand_templates_intro": "ХӀокху белхан агӀорахь йиш ю йоза хийца.\nКхин кепаш схьаяста.\n<code><nowiki>{{#language:…}}</nowiki></code> кхочуш дан тайп\n<code><nowiki>{{CURRENTDAY}}</nowiki></code>.",
        "expand_templates_title": "АгӀона {{FULLPAGENAME}} корта кхин а:",
        "pagelang-language": "Мотт",
        "pagelang-use-default": "Ӏад битарца мотт",
        "pagelang-select-lang": "Харжа мотт",
+       "pagelang-submit": "ДӀадахьийта",
        "right-pagelang": "АгӀона мотт хийца",
        "action-pagelang": "агӀона мотт хийца",
        "log-name-pagelang": "Мотт хийцаран тептар",
        "log-description-pagelang": "ХӀара агӀонашкахь мотт хийцаран тептар ду.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|хийцина}} агӀона мотт $3 $4 → $5.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (латина)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''дӀаяйина''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>дӀаяйина</strong>)",
        "mediastatistics": "Медиа-статистика",
        "mediastatistics-summary": "Чуяьхна файлийн тайпанийн статистикин хаамаш. Кху чохь тӀаьххьара чуяьхна файлийн версеш бен яц. Шираниш я дӀаяхнарш лоруш яц.",
        "mediastatistics-nbytes": "$1 {{PLURAL:$1|байт}} ($2; $3%)",
index 4af8146..17e3f08 100644 (file)
@@ -10,7 +10,8 @@
                        "Reedy",
                        "לערי ריינהארט",
                        "아라",
-                       "Leeheonjin"
+                       "Leeheonjin",
+                       "Macofe"
                ]
        },
        "tog-underline": "Binadlisan nga mga sumpay:",
        "cascadeprotected": "Ang kining panid giprotektahan sa pag-usab tungod kay nahiapil kini sa mosunod nga {{PLURAL:$1|panid, nga|mga panid, nga}} giprotektahan pinaagi sa pag-turn on gamit ang \"cascading\" nga opsyon:\n$2",
        "namespaceprotected": "Wala kay permiso nga mag-usab sa mga panid sa '''$1''' nga ngalang espasyo.",
        "ns-specialprotected": "Ang mga espesyal nga panid dili mausban.",
-       "titleprotected": "Ang kining titulo giprotektahan sa paghimo ni [[User:$1|$1]].\nAng rason nga gihatag mao ang \"''$2''\".",
+       "titleprotected": "Ang kining titulo giprotektahan sa paghimo ni [[User:$1|$1]].\nAng rason nga gihatag mao ang <em>$2</em>.",
        "virus-badscanner": "Daot nga kompigurasyon: wala mailhing virus scanner: ''$1''",
        "virus-scanfailed": "scan failed (code $1)",
        "virus-unknownscanner": "wala mailhing antivirus:",
        "unwatch": "Pasagdi",
        "watchlist-details": "{{PLURAL:$1|$1 ka panid|$1 ka mga panid}} ang imong gibantayan, way labot ang mga panid sa hisgot.",
        "wlshowlast": "Ipakita ang miaging $1 ka oras $2 ka mga adlaw",
-       "watchlistall2": "tanan",
        "watchlist-hide": "Tagoa",
        "watchlist-options": "Mga opsyon sa akong gibantayan",
        "watching": "Gibantayan...",
index ed28fb6..eda9211 100644 (file)
@@ -7,7 +7,8 @@
                        "Magalahi",
                        "MisterWiki",
                        "Shirayuki",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Na'raya i inachetton:",
        "viewsourcetext": "Siña un li'e' yan kopia i code ni påhina:",
        "namespaceprotected": "Ti nahong nibet-mu petmisu tumulaika i påhina siha ni mafa'na'an '''$1'''.",
        "ns-specialprotected": "Ti siña un tulaika i manespesiat na påhina.",
-       "titleprotected": "Prinetehi este na titulo ginen fina'tinas-ña as  [[User:$1|$1]].\nHa nå'i i rason ''$2''.",
+       "titleprotected": "Prinetehi este na titulo ginen fina'tinas-ña as  [[User:$1|$1]].\nHa nå'i i rason <em>$2</em>.",
        "logouttext": "'''Malog-out hao på'go.'''\n\nSiña hao kumontinua manu'usa {{SITENAME}} sin nå'an, pat siña uma'log ta'lo pat siña un usa otra na nå'an muna'sesetbi.\nFanapunta na pålu na påhina siha para u na'annok na ma'log-in hao, asta ki un funas iyo-mu browser cache.",
        "yourname": "Nå'an ni muna'setbi:",
        "yourpassword": "Password:",
index 590bcfa..80d65d6 100644 (file)
@@ -17,7 +17,8 @@
                        "Ebraminio",
                        "Macofe",
                        "Pirehelokan",
-                       "Diyariq"
+                       "Diyariq",
+                       "Sarchia"
                ]
        },
        "tog-underline": "ھێڵ ھێنان بەژێر بەستەرەکان:",
        "myprivateinfoprotected": "دەسەڵاتی دەستکارییکردنی زانیارییە تایبەتییەکانی خۆتت نییە.",
        "mypreferencesprotected": "دەسەڵاتی دەستکارییکردنی هەڵبژاردنەکانی خۆتت نییە.",
        "ns-specialprotected": "پەڕە تایبەتەکان دەستکاری ناکرێن.",
-       "titleprotected": "ئەم سەرناوە پارێزراوە لە دروستکران لە لایەن [[User:$1|$1]].\nھۆکاری ئەمە بریتیە لە \"''$2''\".",
+       "titleprotected": "ئەم سەرناوە پارێزراوە لە دروستکران لە لایەن [[User:$1|$1]].\nھۆکاری ئەمە بریتیە لە <em>$2</em>.",
        "invalidtitle-knownnamespace": "سەردێڕی نادروست بە بۆشایی ناوی «$2» و دەقی «$3»",
        "invalidtitle-unknownnamespace": "سەردێڕی هەڵە لەگەڵ ناوەبۆشایی نەناسراوی ژمارە $1 و دەقی \"$2\"",
        "exception-nologin": "لەژوورەوە نیت",
        "createacct-reason": "ھۆکار",
        "createacct-reason-ph": "بۆ ھەژمارێکی تر دروست دەکەی",
        "createacct-submit": "ھەژمارەکەت دروست بکە",
-       "createacct-another-submit": "ھەژمارێکی تر دروست بکە",
+       "createacct-another-submit": "ھەژمار دروست بکە",
        "createacct-benefit-heading": "{{SITENAME}} لە لایەن کەسانێک وەکوو خۆت دروست کراوە.",
        "createacct-benefit-body1": "{{PLURAL:$1|دەستکاری}}",
        "createacct-benefit-body2": "{{PLURAL:$1|پەڕە}}",
        "nocookieslogin": "{{SITENAME}} بۆ چوونەژوورەوە لە کووکی‌یەکان کەڵک وەرئەگرێت.\nڕێگەت نەداوە بە کووکی‌یەکان.\nڕێگەیان پێ بدەو و دیسان تێبکۆشە.",
        "nocookiesfornew": "ھەژماری بەکارھێنەری دروست نەکرا، چون ناتوانین سەرچاوەکەی پشتڕاست بکەینەوە.\nدڵنیا بە کوکییەکانت چالاک کردووە، پەڕەکە بار بکەوە و دیسان ھەوڵ بدە.",
        "noname": "ناوی بەکارهێنەرییەکی گۆنجاوت دیاری نەکردووه.",
-       "loginsuccesstitle": "سەرکەوتی بۆ چوونە ژوورەوە",
+       "loginsuccesstitle": "چوویە ناوەوە",
        "loginsuccess": "'''ئێستا بە ناوی «$1»ەوە لە {{SITENAME}} چوویتەتەژوورەوە.'''",
        "nosuchuser": "بەکارھێنەرێک بە ناوی «$1» نیە.\nناوی بەکارھێنەر بە گەورە و بچووک بوونی پیتەکان ھەستیارە.\nڕێنووسەکەت چاولێکەرەوە، یان [[Special:UserLogin/signup|ھەژمارێکی نوێ دروست بکە]].",
        "nosuchusershort": "بەکارھێنەرێک بە ناوی «$1»ەوە نیە.\nبە نووسراوەکەتدا بچۆرەوە.",
        "newarticle": "(نوێ)",
        "newarticletext": "بە دوای بەستەری پەڕەیەک کەوتووی کە ھێشتا دروست نەکراوە.\nبۆ دروست کردنی پەڕەکە، لە چوارچێوەکەی خوارەوە دەست بکە بە تایپ کردن. (بۆ زانیاری زورتر\n[$1 یارمەتی] ببینە).\nئەگەر بە ھەڵەوە ھاتویتە ئێرە، لە سەر دوگمەی '''back'''ی وێبگەڕەکەت کلیک بکە.",
        "anontalkpagetext": "----''ئەمە لاپەڕەی وتووێژە بۆ بەکارهێنەرێکی نەناسراوە کە هێشتا هەژمارەی درووست‌نەکردووه یان کەڵکی‌ لێ وەرناگرێ .\nلەبەر ئەوە مەجبوورین ئای‌پی ئەدرەسەکی ژمارەیی بۆ ناساندنی بەکار بێنین.\nئای‌پی ئەدرەسی وا لەوانەیه لە لایەن چەندین بەکارهێنەروە بەکاربێت.\nئەگەر تۆ بەکارهێنەرێکی نەناسراوی و هەست ئەکەی ئەم لێدوانە پەیوەندی بە تۆوە نیە تکایە [[Special:UserLogin/signup|ھەژمارێکی نوێ دروست بکە]] یان [[Special:UserLogin|بچۆ ژوورەوە]] لەبەر ئەوەی لەداهاتوودا دەگەڵ بەکارهێنەرانی‌ نەناسراوی دی تێکەڵ نەکرێیت. ''",
-       "noarticletext": "ھەنووکە ھیچ دەقێک لەم پەڕەیەدا نییە.\nدەتوانی بۆ ئەم ناوە لە [[Special:Search/{{PAGENAME}}|پەڕەکانی تردا بگەڕێی]]، <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} لە لۆگەکاندا بگەڕێی]، یان [{{fullurl:{{FULLPAGENAME}}|action=edit}} ئەم پەڕەیە دەستکاری بکەیت]</span>.",
+       "noarticletext": "ھەنووکە ھیچ دەقێک لەم پەڕەیەدا نییە.\nدەتوانیت لە پەڕەکانی تردا [[Special:Search/{{PAGENAME}}|بۆ ئەم سەرناوە بگەڕێیت]]،\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} لە لۆگە پەیوەندیدارەکاندا بگەڕێیت]،\nیان [{{fullurl:{{FULLPAGENAME}}|action=edit}} ئەم پەڕەیە دروست بکەیت]</span>.",
        "noarticletext-nopermission": "ھەنووکە ھیچ دەقێک لەم پەڕەیەدا نییە.\nدەتوانی لە پەڕەکانی تردا [[Special:Search/{{PAGENAME}}|بۆ ئەم ناوە بگەڕێی]]، یان <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} لە لۆگە پەیوەندیدارەکاندا بگەڕێی]</span>، بەڵام ناتوانی ئەم پەڕەیە دروست بکەی.",
        "userpage-userdoesnotexist": "ھەژماری بەکارھێنەریی «$1» تۆمار نەکراوە.\nتکایە دڵنیا ببەرەوە ئەگەر دەتھەوێت ئەم پەڕەیە دروست یان دەستکاری بکەیت.",
        "userpage-userdoesnotexist-view": "ھەژماری بەکارھێنەریی «$1» تۆمار نەکراوە.",
        "recentchanges-label-bot": "ئەم دەستکارییە لە لایەن بۆتەوە کراوە",
        "recentchanges-label-unpatrolled": "ئەم دەستکارییە ھێشتا پاس نەدراوە",
        "recentchanges-label-plusminus": "قەبارەی پەڕە ئەوەندە بایت گۆڕاوە",
-       "recentchanges-legend-heading": "'''کورتکراوەکان:'''",
+       "recentchanges-legend-heading": "<strong>کورتکراوەکان:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ھەروەھا بڕوانە [[Special:NewPages|پێرستی پەڕە نوێکان]])",
        "recentchanges-legend-plusminus": "(''±۱٢٣'')",
        "recentchanges-submit": "نیشانی بدە",
        "unwatchthispage": "ئیتر چاودێری مەکە",
        "notanarticle": "پەڕەی بێ ناوەڕۆک",
        "notvisiblerev": "پیاچوونەوە سڕاوەتەوە",
-       "watchlist-details": "{{PLURAL:$1|$1 پەڕە|$1 پەڕە}} لە لیستی چاودێریەکەتدایە، بێجگە پەڕەکانی لێدوان.",
+       "watchlist-details": "بێجگە لە پەڕەکانی لێدوان، {{PLURAL:$1|$1 پەڕە}} لە پێرستی {{PLURAL:$1|چاودێرییەکەتدایە|چاودێرییەکەتدان}}.",
        "wlheader-enotif": "ئاگاداری بە ئیمەیل چالاکە.",
        "wlheader-showupdated": "‏ئەو پەڕانە کە لە پاش دوایین سەردانت دەستکاری کراون بە <strong>ئەستوور</strong> نیشان دراون.",
        "wlnote": "خوارەوە {{PLURAL:$1|دوایین گۆڕانکارییە|دوایین <strong>$1</strong> گۆڕانکارییە}} لە دوایین {{PLURAL:$2|کاتژمێر|<strong>$2</strong> کاتژمێر}}دا ھەتا $4ی $3.",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|پێداچوونەوە}} ھاوردە کرا",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|پێداچوونەوە}} لە $2 ھاوردە کرا",
        "javascripttest": "تاقیکردنەوەی جاڤاسکریپت",
-       "tooltip-pt-userpage": "پەڕەی بەکارھێنەرییەکەت",
+       "tooltip-pt-userpage": "پەڕەی {{GENDER:|تۆ}}",
        "tooltip-pt-anonuserpage": "پەڕەی بەکارھێنەری بۆ ئای‌پی یەکە کە بەناویەوە خەریکی دەستکاری کردنی",
        "tooltip-pt-mytalk": "پەڕەی لێدوانەکەت",
        "tooltip-pt-anontalk": "لێدوان لەسەر دەستکارییەکان لەم ئایپی ئەدرەسەوە",
-       "tooltip-pt-preferences": "هەڵبژاردەکانت",
+       "tooltip-pt-preferences": "{{GENDER:|هەڵبژاردەکانت}}",
        "tooltip-pt-watchlist": "پێرستی ئەو پەڕانە کە چاودێریی گۆڕانکارییەکانیانی دەکەی",
        "tooltip-pt-mycontris": "پێرستی بەشدارییەکانت",
        "tooltip-pt-login": "پێشنیارت پێدەکرێ بچیتە ژوورەوە؛ ھەرچەندە زۆرت لێناکرێ",
        "tooltip-t-recentchangeslinked": "دوایین گۆڕانکارییەکان لەو پەڕانە کە بەگرەوە گرێ دراون",
        "tooltip-feed-rss": "RSS feed بۆ ئەم پەڕە",
        "tooltip-feed-atom": "Atom feed بۆ ئەم پەڕە",
-       "tooltip-t-contributions": "Ù\84Û\8cستÛ\8c Ø¨Û\95شدارÛ\8cÛ\8cÛ\95کاÙ\86Û\8c Ø¦Û\95Ù\85 Ø¨Û\95کارھÛ\8eÙ\86Û\95رÛ\95 Ø¨Ø¨Û\8cÙ\86Û\95",
+       "tooltip-t-contributions": "Ù¾Û\8eرستÛ\8c Ø¨Û\95شدارÛ\8cÛ\8cÛ\95کاÙ\86Û\8c {{GENDER:$1|ئÛ\95Ù\85 Ø¨Û\95کارھÛ\8eÙ\86Û\95رÛ\95}}",
        "tooltip-t-emailuser": "ئیمەیلێک بنێرە بۆ ئەم بەکارھێنەرە",
        "tooltip-t-upload": "پەڕگە بار بکە",
        "tooltip-t-specialpages": "پێرستی ھەموو پەڕە تایبەتەکان",
index adc0dbc..1bac2e1 100644 (file)
@@ -7,7 +7,8 @@
                        "Urhixidur",
                        "아라",
                        "Исмаил Садуев",
-                       "Умар"
+                       "Умар",
+                       "Macofe"
                ]
        },
        "tog-underline": "Багълантыларнынъ тюбюни сызув:",
        "cascadeprotected": "Бу саифени денъиштирип оламазсынъыз, чюнки каскад къорчалав алтында булунгъан {{PLURAL:$1|1=саифеге|саифелерге}} менсюптир:\n$2",
        "namespaceprotected": "'''$1''' исим фезасында саифелер денъиштирмеге акъкъынъыз ёкъ.",
        "ns-specialprotected": "{{ns:special}} исим фезасындаки саифелерни денъиштирмек ясакъ.",
-       "titleprotected": "Бойле серлеванен саифе яратмакъ ясакътыр. Ясакълагъан: [[User:$1|$1]].\nСебеп: ''$2''.",
+       "titleprotected": "Бойле серлеванен саифе яратмакъ ясакътыр. Ясакълагъан: [[User:$1|$1]].\nСебеп: <em>$2</em>.",
        "virus-badscanner": "Янълыш сазлама. Билинмеген вирус сканери: ''$1''",
        "virus-scanfailed": "скан этюв мувафакъиетсиз (код $1)",
        "virus-unknownscanner": "билинмеген антивирус:",
        "recentchanges-label-bot": "Бу бир ботнынъ япкъан денъиштирмеси",
        "recentchanges-label-unpatrolled": "Бу денъиштирме аля даа тешкерильмеген",
        "recentchanges-label-plusminus": "Байт эсабынен саифе буюклигининъ денъиштирильмеси",
-       "recentchanges-legend-heading": "'''Ишаретлер:'''",
+       "recentchanges-legend-heading": "<strong>Ишаретлер:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|янъы саифелер джедвелине]] де бакъынъыз)",
        "rcnotefrom": "<strong>$3, $4</strong> тарихындан башлап япылгъан {{PLURAL:$5|денъиштирме|денъиштирмелер}} ашагъыдадыр (энъ чокъ <strong>$1</strong> дане саифе косьтериле).",
        "rclistfrom": "$3 $2 тарихындан берли япылгъан денъиштирмелерни косьтер",
        "rollbacklink": "эски алына кетир",
        "rollbackfailed": "кери алув мувафакъиетсиз",
        "cantrollback": "Денъиштирмелер кери алынамай, саифени сонъки денъиштирген киши онынъ тек бир муэллифидир",
-       "editcomment": "Денъиштирме изааты: \"''$1''\" эди.",
+       "editcomment": "Денъиштирме изааты: <em>$1</em> эди.",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|музакере]]) тарафындан япылгъан денъиштирмелер кери алынып, [[User:$1|$1]] тарафындан денъиштирильген эвельки версия кери кетирильди.",
        "protectlogpage": "Къорчалав журналы",
        "protectlogtext": "Ашагъыдаки, къорчалавгъа алув/къорчалавдан чыкъарув иле багълы денъишмелер журналыдыр.\nКъорчалангъан саифелер [[Special:ProtectedPages|там джедвелини]] де коре билесинъиз.",
index b35f032..9333f95 100644 (file)
@@ -4,7 +4,8 @@
                        "AlefZet",
                        "Don Alessandro",
                        "Urhixidur",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Bağlantılarnıñ tübüni sızuv:",
        "cascadeprotected": "Bu saifeni deñiştirip olamazsıñız, çünki kaskad qorçalav altında bulunğan {{PLURAL:$1|saifege|saifelerge}} mensüptir:\n$2",
        "namespaceprotected": "'''$1''' isim fezasında saifeler deñiştirmege aqqıñız yoq.",
        "ns-specialprotected": "{{ns:special}} isim fezasındaki saifelerni deñiştirmek yasaq.",
-       "titleprotected": "Böyle serlevanen saife yaratmaq yasaqtır. Yasaqlağan: [[User:$1|$1]].\nSebep: ''$2''.",
+       "titleprotected": "Böyle serlevanen saife yaratmaq yasaqtır. Yasaqlağan: [[User:$1|$1]].\nSebep: <em>$2</em>.",
        "virus-badscanner": "Yañlış sazlama. Bilinmegen virus skaneri: ''$1''",
        "virus-scanfailed": "skan etüv muvafaqiyetsiz (kod $1)",
        "virus-unknownscanner": "bilinmegen antivirus:",
        "recentchanges-label-bot": "Bu bir botnıñ yapqan deñiştirmesi",
        "recentchanges-label-unpatrolled": "Bu deñiştirme alâ daa teşkerilmegen",
        "recentchanges-label-plusminus": "Bayt esabınen saife büyükliginiñ deñiştirilmesi",
-       "recentchanges-legend-heading": "'''İşaretler:'''",
+       "recentchanges-legend-heading": "<strong>İşaretler:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|yañı saifeler cedveline]] de baqıñız)",
        "rcnotefrom": "<strong>$3, $4</strong> tarihından başlap yapılğan {{PLURAL:$5|deñiştirme|deñiştirmeler}} aşağıdadır (eñ çоq <strong>$1</strong> dane saife kösterile).",
        "rclistfrom": "$3 $2 tarihından berli yapılğan deñiştirmelerni köster",
        "watchthisupload": "Bu faylnı közet",
        "filewasdeleted": "Bu isimde bir fayl bar edi, amma yoq etilgen edi. Lütfen, tekrar yüklemeden evel $1 teşkeriñiz.",
        "filename-bad-prefix": "Siz yüklegen faylnıñ adı '''\"$1\"'''-nen başlana. Bu, adetince, raqamlı fotoapparatlardan fayl adına yazılğan manasız işaretlerdir. Lütfen, bu fayl içün añlıca bir ad saylap yazıñız.",
-       "upload-success-subj": "Yüklenüv becerildi",
        "upload-proto-error": "Yañlış protokol",
        "upload-proto-error-text": "İnternetten bir resim faylı yüklemege isteseñiz adres <code>http://</code> ya da <code>ftp://</code>nen başlamalı.",
        "upload-file-error": "İçki hata",
        "wlheader-showupdated": "Soñki ziyaretiñizden soñ deñiştirilgen saifeler '''qalın ariflernen''' kösterildi.",
        "wlnote": "Aşağıda saat $3, $4 içün soñki {{PLURAL:$2|saat|'''$2''' saat}} içinde yapılğan soñki {{PLURAL:$1|deñiştirme|'''$1''' deñiştirme}} kösterile.",
        "wlshowlast": "Soñki $1 saat içün, $2 kün içün ya da  köster",
-       "watchlistall2": "episini",
        "watchlist-options": "Közetüv cedveli sazlamaları",
        "watching": "Közetüv cedveline kirsetilmekte...",
        "unwatching": "Közetüv cedvelinden yoq etilmekte...",
        "rollbacklink": "eski alına ketir",
        "rollbackfailed": "keri aluv muvafaqiyetsiz",
        "cantrollback": "Deñiştirmeler keri alınamay, saifeni soñki deñiştirgen kişi onıñ tek bir müellifidir",
-       "editcomment": "Deñiştirme izaatı: \"''$1''\" edi.",
+       "editcomment": "Deñiştirme izaatı: <em>$1</em> edi.",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|muzakere]]) tarafından yapılğan deñiştirmeler keri alınıp, [[User:$1|$1]] tarafından deñiştirilgen evelki versiya keri ketirildi.",
        "protectlogpage": "Qorçalav jurnalı",
        "protectlogtext": "Aşağıdaki, saifeni qorçalavğa aluv/qorçalavdan çıqaruv ile bağlı deñişmeler jurnalıdır.\nQorçalanğan saifeler [[Special:ProtectedPages|tam cedvelini]] de köre bilesiñiz.",
index ac313b7..a6205df 100644 (file)
@@ -27,7 +27,9 @@
                        "YjM",
                        "לערי ריינהארט",
                        "Cvanca",
-                       "Macofe"
+                       "Macofe",
+                       "Urbanecm",
+                       "LordMsz"
                ]
        },
        "tog-underline": "Podtrhávat odkazy:",
@@ -62,7 +64,7 @@
        "tog-watchlisthidebots": "Na seznamu sledovaných stránek skrýt editace botů",
        "tog-watchlisthideminor": "Na seznamu sledovaných stránek skrýt malé editace",
        "tog-watchlisthideliu": "Na seznamu sledovaných stránek skrýt editace přihlášených uživatelů",
-       "tog-watchlistreloadautomatically": "Při změně nastavení automaticky aktualizovat seznam sledovaných stránek (vyžaduje JavaScript)",
+       "tog-watchlistreloadautomatically": "Při změně filtru automaticky aktualizovat seznam sledovaných stránek (vyžaduje JavaScript)",
        "tog-watchlisthideanons": "Na seznamu sledovaných stránek skrýt editace nepřihlášených uživatelů",
        "tog-watchlisthidepatrolled": "Skrýt prověřené editace ve sledovaných stránkách",
        "tog-watchlisthidecategorization": "Skrýt kategorizaci stránek",
        "directoryreadonlyerror": "Adresář „$1“ je pouze pro čtení.",
        "directorynotreadableerror": "Adresář „$1“ nelze číst.",
        "filenotfound": "Nebylo možné najít soubor „$1“.",
-       "unexpected": "Neočekávaná hodnota: \"$1\"=\"$2\".",
+       "unexpected": "Neočekávaná hodnota: „$1“=„$2“.",
        "formerror": "Chyba: nebylo možné odeslat formulář",
        "badarticleerror": "Tuto činnost nelze na této stránce provést.",
        "cannotdelete": "Nebylo možné smazat stránku nebo soubor „$1“.\nMožná už byl(a) smazán(a) někým jiným.",
        "title-invalid-empty": "Požadovaný název stránky je prázdný nebo obsahuje pouze název jmenného prostoru.",
        "title-invalid-utf8": "Požadovaný název stránky obsahuje neplatnou sekvenci UTF-8.",
        "title-invalid-interwiki": "Požadovaný název stránky obsahuje interwiki odkaz, který nelze v názvech používat.",
-       "title-invalid-talk-namespace": "Požadovaný název stránky odkazuje na diskusní stránku, která neexistuje.",
+       "title-invalid-talk-namespace": "Požadovaný název stránky odkazuje na diskusní stránku, která nemůže existovat.",
        "title-invalid-characters": "Požadovaný název stránky obsahuje neplatné znaky: „$1“.",
        "title-invalid-relative": "Název obsahuje relativní cestu. Relativní názvy stránek (./, ../) jsou neplatné, protože často budou nedostupné, když je zpracuje prohlížeč uživatele.",
        "title-invalid-magic-tilde": "Požadovaný název stránky obsahuje neplatnou magickou posloupnost vlnovek (<nowiki>~~~</nowiki>).",
        "title-invalid-too-long": "Požadovaný název stránky je příliš dlouhý. V kódování UTF-8 nesmí být delší než $1 {{PLURAL:$1|bajt|bajty|bajtů}}.",
-       "title-invalid-leading-colon": "Požadovaný název stránku na začátku obsahuje neplatnou dvojtečku.",
+       "title-invalid-leading-colon": "Požadovaný název stránky na začátku obsahuje neplatnou dvojtečku.",
        "perfcached": "Následující data jsou z cache a nemusí být plně aktuální. Cache může obsahovat maximálně {{PLURAL:$1|jeden výsledek|$1 výsledky|$1 výsledků}}.",
        "perfcachedts": "Následující data jsou z cache, která byla naposledy aktualizována $1. Cache může obsahovat maximálně {{PLURAL:$4|jeden výsledek|$4 výsledky|$4 výsledků}}.",
        "querypage-no-updates": "Aktualizace této stránky je vypnuta. Data nyní nebudou obnovována.",
        "editinginterface": "<strong>Upozornění:</strong> Editujete stránku, která definuje texty rozhraní.\nZměny této stránky ovlivní vzhled uživatelského rozhraní všem uživatelům této wiki.",
        "translateinterface": "Pro přidávání a změny překladů pro všechny wiki použijte [//translatewiki.net/ translatewiki.net], projekt pro lokalizaci MediaWiki.",
        "cascadeprotected": "Tato stránka je zamčena, neboť je vložena na {{PLURAL:$1|následující stránku, zamčenou|následující stránky, zamčené}} kaskádovým zámkem:\n$2",
-       "namespaceprotected": "Nemáte povoleno editovat stránky ve jmenném prostoru '''$1'''.",
+       "namespaceprotected": "Nemáte povoleno editovat stránky ve jmenném prostoru <strong>$1</strong>.",
        "customcssprotected": "Nemáte povoleno editovat tuto stránku s CSS, protože obsahuje osobní nastavení jiného uživatele.",
        "customjsprotected": "Nemáte povoleno editovat tuto stránku s JavaScriptem, protože obsahuje osobní nastavení jiného uživatele.",
        "mycustomcssprotected": "Nemáte oprávnění editovat tuto stránku s CSS.",
        "myprivateinfoprotected": "Nemáte oprávnění měnit své soukromé údaje.",
        "mypreferencesprotected": "Nemáte oprávnění změnit svá nastavení.",
        "ns-specialprotected": "Stránky ve jmenném prostoru {{ns:special}} nelze editovat.",
-       "titleprotected": "Stránku s tímto názvem nelze založit, protože název {{GENDER:$1|zamkl|zamkla|zamkl uživatel}} [[User:$1|$1]].\nUdaným důvodem bylo „<em>$2</em>“.",
+       "titleprotected": "Stránku s tímto názvem nelze založit, protože název {{GENDER:$1|zamkl|zamkla|zamkl uživatel}} [[User:$1|$1]].\nUdaným důvodem bylo <em>$2</em>.",
        "filereadonlyerror": "Nelze změnit soubor „$1“, protože úložiště souborů „$2“ je pouze pro čtení.\n\nSprávce serveru, který úložiště zamkl, poskytl toto zdůvodnění: „$3“.",
        "invalidtitle-knownnamespace": "Neplatný název se jmenným prostorem „$2“ a textem „$3“",
        "invalidtitle-unknownnamespace": "Neplatný název s neznámým číslem jmenného prostoru $1 a textem „$2“",
        "mailmypassword": "Poslat nové heslo",
        "passwordremindertitle": "Nové dočasné heslo na {{grammar:4sg|{{SITENAME}}}}",
        "passwordremindertext": "Někdo (patrně vy, z IP adresy $1) požádal o nové heslo\npro přihlášení do {{grammar:2sg|{{SITENAME}}}} ($4). Uživateli „$2“ bylo\nproto nastaveno dočasné heslo „$3“. Pokud jste to byl(a) vy, můžete se\nnyní přihlásit a zvolit si nové heslo. Platnost tohoto dočasného hesla\nvyprší za {{PLURAL:$5|jeden den|$5 dny|$5 dní}}.\n\nPokud jste o změnu hesla nežádal(a) nebo jste si na původní heslo již\nvzpomněl(a) a už ho změnit nechcete, můžete tuto zprávu ignorovat\na používat staré heslo.",
-       "noemail": "Uživatel „$1“ nemá zaregistrovanou e-mailovou adresu.",
+       "noemail": "{{GENDER:$1|Uživatel|Uživatelka}} „$1“ nemá zaregistrovanou e-mailovou adresu.",
        "noemailcreate": "Musíte uvést platnou e-mailovou adresu",
        "passwordsent": "Dočasné heslo bylo zasláno na e-mailovou adresu registrovanou pro „$1“. Přihlaste se, prosím, znovu, jakmile ho obdržíte.",
        "blocked-mailpassword": "Vaší IP adrese byla zablokována možnost editace, a současně s tím je zablokována funkce pro zaslání nového hesla.",
        "newpassword": "Nové heslo:",
        "retypenew": "Napište znovu nové heslo",
        "resetpass_submit": "Nastavit heslo a přihlásit se",
-       "changepassword-success": "Vaše heslo bylo úspěšně změněno!",
+       "changepassword-success": "Vaše heslo bylo změněno!",
        "changepassword-throttled": "Provedli jste příliš mnoho pokusů o přihlášení.\nČekejte prosím $1 a zkuste to znovu.",
        "botpasswords": "Hesla pro boty",
        "botpasswords-summary": "<em>Hesla pro boty</em> umožňují přistupovat k uživatelskému účtu prostřednictví API bez použití hlavních přihlašovacích údajů účtu. Uživatelská oprávnění dostupná po přihlášení pomocí hesla pro boty mohou být omezena.\n\nPokud nevíte, k čemu byste to {{GENDER:|chtěl|chtěla|chtěli}} použít, pravděpodobně byste to používat {{GENDER:|neměl|neměla|neměli}}. Nikdo by vás nikdy neměl žádat, abyste si zde vygenerovali heslo a dali mu ho.",
        "botpasswords-label-cancel": "Storno",
        "botpasswords-label-delete": "Smazat",
        "botpasswords-label-resetpassword": "Resetovat heslo",
+       "botpasswords-label-grants": "Použitelná oprávnění:",
+       "botpasswords-help-grants": "Každé přidělení dává přístup k uvedeným uživatelským oprávněním, která uživatelský účet již má. Viz [[Special:ListGrants|table of grants]] pro více informací.",
        "botpasswords-label-restrictions": "Omezení užití:",
        "botpasswords-label-grants-column": "Přiděleno",
        "botpasswords-bad-appid": "Název bota „$1“ není platný.",
        "botpasswords-insert-failed": "Nepodařilo se přidat název bota „$1“. Nebyl už přidán?",
        "botpasswords-update-failed": "Nepodařilo se aktualizovat název bota „$1“. Nebyl smazán?",
        "botpasswords-created-title": "Heslo pro bota vytvořeno",
-       "botpasswords-created-body": "Heslo pro bota „$1“ bylo úspěšně vytvořeno.",
+       "botpasswords-created-body": "Heslo pro bota jménem „$1“ {{GENDER:$2|uživatele|uživatelky}} „$2“ bylo vytvořeno.",
        "botpasswords-updated-title": "Heslo pro bota aktualizováno",
-       "botpasswords-updated-body": "Heslo pro bota „$1“ bylo úspěšně aktualizováno.",
+       "botpasswords-updated-body": "Heslo pro bota jménem „$1“ {{GENDER:$2|uživatele|uživatelky}} „$2“ bylo aktualizováno.",
        "botpasswords-deleted-title": "Heslo pro bota smazáno",
-       "botpasswords-deleted-body": "Heslo pro bota „$1“ bylo smazáno.",
+       "botpasswords-deleted-body": "Heslo pro bota jménem „$1“ {{GENDER:$2|uživatele|uživatelky}} „$2“ bylo smazáno.",
        "botpasswords-newpassword": "Nové přihlašovací heslo pro bota <strong>$1</strong> je <strong>$2</strong>. <em>Zaznamenejte si je pro budoucí použití.</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider není dostupný.",
        "botpasswords-restriction-failed": "Toto přihlášení bylo zamítnuto omezením hesel pro boty.",
        "resetpass-no-info": "K této stránce mají přímý přístup jen přihlášení uživatelé.",
        "resetpass-submit-loggedin": "Změnit heslo",
        "resetpass-submit-cancel": "Storno",
-       "resetpass-wrong-oldpass": "Nesprávné dočasné nebo aktuální heslo.\nMožná jste si již úspěšně heslo změnili, nebo jste si vyžádali nové dočasné heslo.",
+       "resetpass-wrong-oldpass": "Nesprávné dočasné nebo aktuální heslo.\nMožná jste si již 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 pomocí dočasného hesla, které bylo zasláno e-mailem.\nAbyste dokončili přihlášení, nastavte si nové heslo:",
        "resetpass-temp-password": "Dočasné heslo:",
        "previewnote": "<strong>Pamatujte, že toto je pouze náhled.</strong>\nZměny dosud nebyly uloženy!",
        "continue-editing": "Přejít k editačnímu poli",
        "previewconflict": "Tento náhled ukazuje text tak, jak bude vypadat po uložení stránky.",
-       "session_fail_preview": "<strong>Váš požadavek se nepodařilo zpracovat kvůli ztrátě dat z relace.</strong>\nZkuste to prosím znovu.\nPokud se tento problém bude opakovat, zkuste se [[Special:UserLogout|odhlásit]] a znovu přihlásit.",
-       "session_fail_preview_html": "<strong>Váš požadavek se nepodařilo zpracovat kvůli ztrátě dat z relace.</strong>\n\n<em>Jelikož má {{SITENAME}} zapnuto používání neomezeného HTML, náhled se kvůli prevenci proti útokům JavaScriptem nezobrazuje.</em>\n\n<strong>Pokud jde o zamýšlenou editaci, zkuste to prosím znovu.</strong>\nPokud se tento problém bude opakovat, zkuste se [[Special:UserLogout|odhlásit]] a znovu přihlásit.",
+       "session_fail_preview": "Promiňte! Váš požadavek se nepodařilo zpracovat kvůli ztrátě dat z relace.\n\nMožná jste byli odhlášeni. <strong>Zkontrolujte, že jste stále přihlášeni a zkuste to prosím znovu.</strong>\nPokud se tento problém bude opakovat, zkuste se [[Special:UserLogout|odhlásit]] a znovu přihlásit a zkontrolujte, že váš prohlížeč dovoluje přijímat cookie z tohoto serveru.",
+       "session_fail_preview_html": "Promiňte! Vaši editaci se nepodařilo zpracovat kvůli ztrátě dat z relace.\n\n<em>Jelikož má {{SITENAME}} zapnuto používání neomezeného HTML, náhled se kvůli prevenci proti útokům JavaScriptem nezobrazuje.</em>\n\n<strong>Pokud jde o zamýšlenou editaci, zkuste to prosím znovu.</strong>\nPokud se tento problém bude opakovat, zkuste se [[Special:UserLogout|odhlásit]] a znovu přihlásit a zkontrolujte, že váš prohlížeč dovoluje přijímat cookie z tohoto serveru.",
        "token_suffix_mismatch": "<strong>Vaše editace byla odmítnuta, protože Váš prohlížeč komolí některé znaky v editovaném textu.</strong>\nEditace byla odmítnuta, aby se zabránilo poškození textu stránky.\nToto se někdy může stát, používáte-li chybující webový anonymizér.",
        "edit_form_incomplete": "<strong>Část editačního formuláře nedorazila na server; překontrolujte úplnost změn a zkuste to znovu.</strong>",
        "editing": "Editace stránky $1",
        "undo-summary-username-hidden": "Zrušena verze $1 od skrytého uživatele",
        "cantcreateaccounttitle": "Nelze vytvořit uživatelský účet",
        "cantcreateaccount-text": "Zakládání nových účtů z této IP adresy ('''$1''') bylo zablokováno uživatelem [[User:$3|$3]].\n\n$3 uvádí toto zdůvodnění: ''$2''",
-       "cantcreateaccount-range-text": "Zakládání nových účtů z IP adres v rozsahu '''$1''', který obsahuje i vaši IP adresu ('''$4'''), bylo zablokováno {{GENDER:$3|uživatelem|uživatelkou}} [[User:$3|$3]].\n\n$3 uvádí toto zdůvodnění: ''$2''",
+       "cantcreateaccount-range-text": "Zakládání nových účtů z IP adres v rozsahu <strong>$1</strong>, který obsahuje i vaši IP adresu (<strong>$4</strong>), bylo zablokováno {{GENDER:$3|uživatelem|uživatelkou}} [[User:$3|$3]].\n\n$3 uvádí toto zdůvodnění: <em>$2</em>",
        "viewpagelogs": "Zobrazit protokolovací záznamy k této stránce",
        "nohistory": "O této stránce neexistuje historie editací.",
        "currentrev": "Aktuální verze",
        "revdelete-unsuppress": "Odstranit omezení na obnovených revizích",
        "revdelete-log": "Důvod:",
        "revdelete-submit": "Aplikovat na {{PLURAL:$1|zvolenou revizi|zvolené revize}}",
-       "revdelete-success": "'''Viditelnost revize úspěšně nastavena.'''",
+       "revdelete-success": "Viditelnost revize nastavena.",
        "revdelete-failure": "'''Nepodařilo se nastavit viditelnost revize:'''\n$1",
-       "logdelete-success": "'''Viditelnost události úspěšně nastavena.'''",
+       "logdelete-success": "Viditelnost události úspěšně nastavena.",
        "logdelete-failure": "'''Nepodařilo se nastavit viditelnost protokolu:'''\n$1",
        "revdel-restore": "Změnit viditelnost",
        "pagehist": "Historie stránky",
        "mergehistory-empty": "Nelze sloučit žádnou verzi.",
        "mergehistory-done": "$3 {{PLURAL:$3|verze|verze|verzí}} stránky $1 {{PLURAL:$3|byla úspěšně sloučena|byly úspěšně sloučeny|bylo úspěšně sloučeno}} do stránky [[:$2]].",
        "mergehistory-fail": "Sloučení historií nelze provést. Překontrolujte zadané stránky a jejich historii.",
+       "mergehistory-fail-bad-timestamp": "Časové razítko je neplatné.",
+       "mergehistory-fail-invalid-source": "Zdrojová stránka je neplatná.",
+       "mergehistory-fail-invalid-dest": "Cílová stránka je neplatná.",
+       "mergehistory-fail-no-change": "Sloučení historie nespojilo žádné revize. Překontrolujte prosím stránku a časové parametry.",
+       "mergehistory-fail-permission": "Nedostatečná oprávnění ke slučování historie.",
+       "mergehistory-fail-self-merge": "Zdrojová a cílová stránka jsou shodné.",
+       "mergehistory-fail-timestamps-overlap": "Zdrojové revize se překrývají, nebo přichází až po cílových revizích.",
        "mergehistory-fail-toobig": "Nelze provést sloučení historie, protože by se přesouvalo více revizí, než je limit $1.",
        "mergehistory-no-source": "Zdrojová stránka $1 neexistuje.",
        "mergehistory-no-destination": "Cílová stránka $1 neexistuje.",
        "userrights-changeable-col": "Skupiny, které můžete měnit",
        "userrights-unchangeable-col": "Skupiny, které nemůžete měnit",
        "userrights-conflict": "Konflikt změn uživatelských práv! Zkontrolujte a potvrďte požadované změny.",
-       "userrights-removed-self": "Úspěšně jste si odebrali vlastní práva. Tudíž už nemáte k této stránce přístup.",
+       "userrights-removed-self": "Odebrali jste si vlastní práva. Tudíž už nemáte k této stránce přístup.",
        "group": "Skupina:",
        "group-user": "Uživatelé",
        "group-autoconfirmed": "Automaticky schválení uživatelé",
        "recentchanges-label-bot": "Tuto editaci provedl bot",
        "recentchanges-label-unpatrolled": "Tato změna dosud nebyla prověřena",
        "recentchanges-label-plusminus": "Velikost stránky se změnila o tolik bajtů",
-       "recentchanges-legend-heading": "'''Legenda:'''",
+       "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vizte též [[Special:NewPages|seznam nových stránek]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Zobrazit",
        "recentchangeslinked-page": "Název stránky:",
        "recentchangeslinked-to": "Zobrazit změny na stránkách odkazujících na zadanou stránku",
        "recentchanges-page-added-to-category": "Stránka [[:$1]] zařazena do kategorie",
-       "recentchanges-page-added-to-category-bundled": "Stránka [[:$1]] a {{PLURAL:$2|jedna další zařazeny|$2 další zařazeny|$2 dalších zařazeno}} do kategorie",
+       "recentchanges-page-added-to-category-bundled": "Stránka [[:$1]] a [[Special:WhatLinksHere/$1|{{PLURAL:$2|jedna další zařazeny|$2 další zařazeny|$2 dalších zařazeno}}]] do kategorie",
        "recentchanges-page-removed-from-category": "Stránka [[:$1]] vyřazena z kategorie",
-       "recentchanges-page-removed-from-category-bundled": "Stránka [[:$1]] a {{PLURAL:$2|jedna další vyřazeny|$2 další vyřazeny|$2 dalších vyřazeno}} z kategorie",
+       "recentchanges-page-removed-from-category-bundled": "Stránka [[:$1]] a [[Special:WhatLinksHere/$1|{{PLURAL:$2|jedna další vyřazeny|$2 další vyřazeny|$2 dalších vyřazeno}}]] z kategorie",
        "autochange-username": "Automatická změna MediaWiki",
        "upload": "Načíst soubor",
        "uploadbtn": "Načíst soubor",
        "ignorewarning": "Ignorovat varování a načíst soubor.",
        "ignorewarnings": "Ignorovat všechna varování",
        "minlength1": "Jméno souboru musí mít alespoň jeden znak.",
-       "illegalfilename": "Název souboru \"$1\" obsahuje znaky, které nejsou povoleny v názvech stránek. Prosím přejmenujte soubor a zkuste jej nahrát znovu.",
+       "illegalfilename": "Název souboru „$1“ obsahuje znaky, které nejsou povoleny v názvech stránek. Prosím přejmenujte soubor a zkuste jej nahrát znovu.",
        "filename-toolong": "Jména souborů nemohou být delší než 240 bajtů.",
        "badfilename": "Jméno souboru bylo změněno na „$1“.",
        "filetype-mime-mismatch": "Přípona souboru „.$1“ neodpovídá rozpoznanému MIME typu souboru ($2).",
        "filetype-bad-ie-mime": "Nelze načíst tento soubor, neboť Internet Explorer by ho považoval za „$1“, což je nedovolený a potenciálně nebezpečný typ souboru.",
        "filetype-unwanted-type": "„.$1“''' je nežádoucí formát souborů. {{PLURAL:$3|Upřednostňovaný formát souborů je|Upřednostňované formáty souborů jsou}} $2.",
        "filetype-banned-type": "'''„.$1“''' {{PLURAL:$4|je nedovolený formát souborů|jsou nedovolené formáty souborů}}.\n{{PLURAL:$3|Povolený formát souborů je|Povolené formáty souborů jsou}} $2.",
-       "filetype-missing": "Soubor nemá příponu (např. \".jpg\").",
+       "filetype-missing": "Soubor nemá příponu (např. „.jpg“).",
        "empty-file": "Načtený soubor je prázdný.",
        "file-too-large": "Načtený soubor je příliš velký.",
        "filename-tooshort": "Název souboru je příliš krátký.",
        "upload-too-many-redirects": "URL obsahovalo příliš mnoho přesměrování",
        "upload-http-error": "Došlo k chybě HTTP: $1",
        "upload-copy-upload-invalid-domain": "Načítání kopírováním není dostupné z této domény.",
+       "upload-foreign-cant-upload": "Tato wiki není nakonfigurována, aby načítala soubory na požadované vzdálené úložiště souborů.",
        "upload-dialog-title": "Načtení souboru",
        "upload-dialog-button-cancel": "Storno",
        "upload-dialog-button-done": "Hotovo",
        "upload-dialog-button-save": "Uložit",
        "upload-dialog-button-upload": "Načíst",
-       "upload-form-label-select-file": "Výběr souboru",
        "upload-form-label-infoform-title": "Podrobnosti",
        "upload-form-label-infoform-name": "Název",
+       "upload-form-label-infoform-name-tooltip": "Krátký unikátní nadpis tohoto souboru, který bude sloužit jako jeho název. Můžete použít běžný jazyk i s mezerami. Nevkládejte příponu souboru.",
        "upload-form-label-infoform-description": "Popis",
+       "upload-form-label-infoform-description-tooltip": "Stručně popište všechny důležité informace o díle.\nU fotografií zmiňte hlavní zobrazené objekty, příležitost, při které fotografie vznikla, nebo místo.",
        "upload-form-label-usage-title": "Použití",
        "upload-form-label-usage-filename": "Jméno souboru",
        "foreign-structured-upload-form-label-own-work": "Je to mé vlastní dílo",
        "backend-fail-read": "Soubor $1 nelze číst.",
        "backend-fail-create": "Nepodařilo se zapsat do souboru $1.",
        "backend-fail-maxsize": "Nepodařilo se zapsat do souboru $1, protože je větší než {{PLURAL:$2|$2 bajt|$2 bajty|$2 bajtů}}.",
-       "backend-fail-readonly": "Koncový úložný systém „$1“ je momentálně pouze pro čtení. Udaným důvodem je: „$2“",
+       "backend-fail-readonly": "Koncový úložný systém „$1“ je momentálně pouze pro čtení. Udaným důvodem je: <em>$2</em>",
        "backend-fail-synced": "Soubor „$1“ je v interních koncových úložných systémech v nekonzistentním stavu",
        "backend-fail-connect": "Nepodařilo se připojit ke koncovému úložnému systému „$1“.",
        "backend-fail-internal": "V koncovém úložném systému „$1“ došlo k neznámé chybě.",
        "uploadstash-summary": "Tato stránka nabízí přístup k načteným (nebo právě načítaným) souborům, které dosud nejsou zveřejněny na wiki. Tyto soubory se nezobrazí nikomu kromě uživatele, který je načetl.",
        "uploadstash-clear": "Vymazat soubory ve skrýši",
        "uploadstash-nofiles": "Ve skrýši nemáte žádné soubory.",
-       "uploadstash-badtoken": "Operace se nezdařila, možná vypršela platnost vašeho oprávnění k editaci. Zkuste to znovu.",
+       "uploadstash-badtoken": "Operace se nezdařila. Možná vypršela platnost vašeho oprávnění k editaci. Zkuste to znovu.",
        "uploadstash-errclear": "Soubory se nepodařilo vymazat.",
        "uploadstash-refresh": "Aktualizovat seznam souborů",
        "invalid-chunk-offset": "Neplatný posun bloku",
        "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ě.",
        "deleteprotected": "Tuto stránku nemůžete smazat, protože je zamč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.",
+       "deleting-backlinks-warning": "<strong>Upozornění:</strong> 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": "Vrátit zpět editace",
        "rollbacklink": "vrácení zpět",
        "rollbacklinkcount": "vrácení $1 {{PLURAL:$1|editace|editací}} zpět",
        "rollbackfailed": "Nešlo vrátit zpět",
        "cantrollback": "Nelze vrátit zpět poslední editaci, neboť poslední přispěvatel je jediným autorem této stránky.",
        "alreadyrolled": "Nelze vrátit zpět poslední editaci [[:$1]] od uživatele [[User:$2|$2]] ([[User talk:$2|diskuse]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]), protože někdo jiný již stránku editoval nebo vrátil tuto změnu zpět.\n\nPoslední editaci této stránky {{GENDER:$3|provedl|provedla|provedl uživatel}} [[User:$3|$3]] ([[User talk:$3|diskuse]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Shrnutí editace bylo: ''„$1“''.",
+       "editcomment": "Shrnutí editace bylo: <em>$1</em>.",
        "revertpage": "Editace uživatele „[[Special:Contributions/$2|$2]]“ ([[User talk:$2|diskuse]]) vráceny do předchozího stavu, jehož autorem je „[[User:$1|$1]]“",
        "revertpage-nouser": "Editace skrytého uživatele vráceny do předchozího stavu, jehož {{GENDER:$1|autorem|autorkou}} je „[[User:$1|$1]]“",
        "rollback-success": "Editace uživatele $1 byly vráceny na poslední verzi od uživatele $2.",
        "changecontentmodel-title-label": "Název stránky",
        "changecontentmodel-model-label": "Nový model obsahu",
        "changecontentmodel-reason-label": "Důvod:",
+       "changecontentmodel-submit": "Změnit",
        "changecontentmodel-success-title": "Model obsahu byl změněn",
        "changecontentmodel-success-text": "Model obsahu stránky [[:$1]] byl změněn.",
        "changecontentmodel-cannot-convert": "Obsah stránky [[:$1]] nelze zkonvertovat na typ $2.",
        "changecontentmodel-nodirectediting": "Model obsahu $1 nepodporuje přímou editaci",
        "log-name-contentmodel": "Kniha změny modelů obsahu",
        "log-description-contentmodel": "Události týkající se modelů obsahu stránek",
+       "logentry-contentmodel-new": "$1 {{GENDER:$2|založil|založila}} stránku $3 za použití nestandardního modelu obsahu „$5“",
        "logentry-contentmodel-change": "$1 {{GENDER:$2|změnil|změnila}} model obsahu stránky $3 z „$4“ na „$5“",
        "logentry-contentmodel-change-revertlink": "vrátit",
        "logentry-contentmodel-change-revert": "vrácení zpět",
        "import-nonewrevisions": "Žádné revize nebyly importovány (buď již byly všechny importovány dříve, nebo byly přeskočeny kvůli chybám).",
        "xml-error-string": "$1 na řádku $2, sloupec $3 (bajt $4): $5",
        "import-upload": "Importovat XML data",
-       "import-token-mismatch": "Ztratila se data relace. Zkuste to znovu.",
+       "import-token-mismatch": "Ztratila se data relace.\n\nMožná jste byli odhlášeni. <strong>Zkontrolujte, že jste stále přihlášeni a zkuste to prosím znovu.</strong>\nPokud se tento problém bude opakovat, zkuste se [[Special:UserLogout|odhlásit]] a znovu přihlásit a zkontrolujte, že váš prohlížeč dovoluje přijímat cookie z tohoto serveru.",
        "import-invalid-interwiki": "Ze zadané wiki nelze importovat.",
        "import-error-edit": "Stránka „$1“ se nenaimportovala, protože nemáte oprávnění ji editovat.",
        "import-error-create": "Stránka „$1“ se nenaimportovala, protože nemáte oprávnění ji založit.",
        "tooltip-pt-anoncontribs": "Seznam editací provedených z této IP adresy",
        "tooltip-pt-login": "Doporučujeme vám přihlásit se, ovšem není to povinné.",
        "tooltip-pt-logout": "Odhlásit se",
-       "tooltip-pt-createaccount": "Doporučujeme vytvořit si účet a přihlásit se, není to však povinné",
+       "tooltip-pt-createaccount": "Doporučujeme vytvořit si účet a přihlásit se, ovšem není to povinné",
        "tooltip-ca-talk": "Diskuse ke stránce",
        "tooltip-ca-edit": "Editovat tuto stránku",
        "tooltip-ca-addsection": "Začít novou sekci",
        "tooltip-ca-nstab-media": "Zobrazit stránku souboru",
        "tooltip-ca-nstab-special": "Toto je speciální stránka, kterou nelze editovat.",
        "tooltip-ca-nstab-project": "Zobrazit stránku o wiki",
-       "tooltip-ca-nstab-image": "Zobrazit stránku obrázku",
+       "tooltip-ca-nstab-image": "Zobrazit stránku souboru",
        "tooltip-ca-nstab-mediawiki": "Zobrazit systémovou zprávu",
        "tooltip-ca-nstab-template": "Zobrazit šablonu",
        "tooltip-ca-nstab-help": "Zobrazit stránku nápovědy",
        "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 */",
        "anonymous": "{{PLURAL:$1|anonymního uživatele|anonymních uživatelů}} {{GRAMMAR:2sg|{{SITENAME}}}}",
-       "siteuser": "uživatel {{grammar:2sg|{{SITENAME}}}} $1",
+       "siteuser": "{{GENDER:$2|uživatel|uživatelka}} {{GRAMMAR:2sg|{{SITENAME}}}} $1",
        "anonuser": "anonymní uživatel {{grammar:2sg|{{SITENAME}}}} $1",
        "lastmodifiedatby": "Tuto stránku naposledy {{GENDER:$4|změnil|změnila|změnil}} $3 v $2, $1.",
        "othercontribs": "Založeno na práci $1.",
        "creditspage": "Zásluhy za stránku",
        "nocredits": "K této stránce neexistuje informace o zásluhách.",
        "spamprotectiontitle": "Protispamový filtr",
-       "spamprotectiontext": "Stránka, kterou jste se pokusil(a) uložit, byla zablokována protispamovým filtrem. Pravděpodobnou příčinou je odkaz na externí stránku, která je na černé listině.",
+       "spamprotectiontext": "Stránka, kterou jste se {{GENDER:|pokusil|pokusila|pokusil(a)}} uložit, byla zablokována protispamovým filtrem. Pravděpodobnou příčinou je odkaz na externí stránku, která je na černé listině.",
        "spamprotectionmatch": "Následující text spustil náš filtr proti spamu: $1",
        "spambot_username": "Systémový čistič spamu",
        "spam_reverting": "Revert na poslední verzi neobsahující odkazy na $1",
        "exif-copyrighted-true": "Chráněno autorským právem",
        "exif-copyrighted-false": "Bez informací o autorských právech",
        "exif-photometricinterpretation-1": "Černobílá (černá je 0)",
+       "exif-photometricinterpretation-4": "Maska průhlednosti",
        "exif-unknowndate": "neznámé datum",
        "exif-orientation-1": "Normální",
        "exif-orientation-2": "Vodorovně převráceno",
        "tags-delete-not-allowed": "Značky definované rozšířeními nelze smazat, leda by to příslušné rozšíření výslovně umožnilo.",
        "tags-delete-not-found": "Značka „$1“ neexistuje.",
        "tags-delete-too-many-uses": "Značkou „$1“ {{PLURAL:$2|je označena více než $2 revize|jsou označeny více než $2 revize|je označeno více než $2 revizí}}, což znamená, že ji nelze smazat.",
-       "tags-delete-warnings-after-delete": "Značka „$1“ byla úspěšně smazána, ale {{PLURAL:$1|bylo zjištěno|byla zjištěna}} následující varování:",
+       "tags-delete-warnings-after-delete": "Značka „$1“ byla smazána, ale {{PLURAL:$2|bylo zjištěno|byla zjištěna}} následující varování:",
        "tags-activate-title": "Aktivovat značku",
        "tags-activate-question": "Chystáte se aktivovat značku „$1“.",
        "tags-activate-reason": "Důvod:",
        "tags-edit-revision-legend": "Změna značek u {{PLURAL:$1|této revize|těchto $1 revizí}}",
        "tags-edit-logentry-legend": "Změna značek u {{PLURAL:$1|tohoto protokolovacího záznamu|těchto $1 protokolovacích záznamů}}",
        "tags-edit-existing-tags": "Stávající značky:",
-       "tags-edit-existing-tags-none": "''Žádná''",
+       "tags-edit-existing-tags-none": "<em>Žádná</em>",
        "tags-edit-new-tags": "Nové značky:",
        "tags-edit-add": "Přidat tyto značky:",
        "tags-edit-remove": "Odebrat tyto značky:",
        "tags-edit-reason": "Důvod:",
        "tags-edit-revision-submit": "Aplikovat změny na {{PLURAL:$1|tuto revizi|tyto $1 revize|těchto $1 revizí}}",
        "tags-edit-logentry-submit": "Aplikovat změny na {{PLURAL:$1|tento protokolovací záznam|tyto $1 protokolovací záznamy|těchto $1 protokolovacích záznamů}}",
-       "tags-edit-success": "Změny byly úspěšně aplikovány.",
+       "tags-edit-success": "Změny byly aplikovány.",
        "tags-edit-failure": "Změny se nepodařilo provést:\n$1",
        "tags-edit-nooldid-title": "Neplatná cílová revize",
        "tags-edit-nooldid-text": "Buď jste nezadali žádnou cílovou revizi, na kterou by se tato funkce měla použít, nebo uvedená revize neexistuje.",
        "logentry-move-move": "$1 {{GENDER:$2|přesunul|přesunula}} stránku $3 na $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|přesunul|přesunula}} stránku $3 na $4 bez založení přesměrování",
        "logentry-move-move_redir": "$1 {{GENDER:$2|přesunul|přesunula}} stránku $3 na $4 s výměnou přesměrování",
-       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|přesunul|přesunula}} stránku $3 na $4 místo přesměrování bez založení přesměrování",
+       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|přesunul|přesunula}} stránku $3 na $4 s výměnou přesměrování bez založení přesměrování",
        "logentry-patrol-patrol": "$1 {{GENDER:$2|označil|označila}} revizi $4 stránky $3 jako prověřenou",
        "logentry-patrol-patrol-auto": "$1 automaticky {{GENDER:$2|označil|označila}} revizi $4 stránky $3 jako prověřenou",
        "logentry-newusers-newusers": "Byl {{GENDER:$2|založen}} uživatelský účet $1",
        "expand_templates_generate_xml": "Zobrazit syntaktický strom v XML",
        "expand_templates_generate_rawhtml": "Zobrazit surové HTML",
        "expand_templates_preview": "Náhled",
-       "expand_templates_preview_fail_html": "<em>Protože {{SITENAME}} má povolené syrové HTML a došlo ke ztrátě dat relace, je náhled skryt kvůli ochraně před JavaScriptovými útoky.</em>\n\n<strong>Pokud to byl legitimní pokus o náhled, zkuste to znovu.</strong>\nPokud to stále nebude fungovat, zkuste se [[Special:UserLogout|odhlásit]] a znovu přihlásit.",
+       "expand_templates_preview_fail_html": "<em>Protože {{SITENAME}} má povolené syrové HTML a došlo ke ztrátě dat relace, je náhled skryt kvůli ochraně před JavaScriptovými útoky.</em>\n\n<strong>Pokud jde o zamýšlený pokus o náhled, zkuste to prosím znovu.</strong>\nPokud se tento problém bude opakovat, zkuste se [[Special:UserLogout|odhlásit]] a znovu přihlásit a zkontrolujte, že váš prohlížeč dovoluje přijímat cookie z tohoto serveru.",
        "expand_templates_preview_fail_html_anon": "<em>Protože {{SITENAME}} má povolené syrové HTML a vy nejste přihlášeni, je náhled skryt kvůli ochraně před JavaScriptovými útoky.</em>\n\n<strong>Pokud to byl legitimní pokus o náhled, [[Special:UserLogin|přihlaste se]] a zkuste to znovu.</strong>",
        "expand_templates_input_missing": "Musíte zadat alespoň nějaký vstupní text.",
        "pagelanguage": "Změnit jazyk stránky",
        "default-skin-not-found": "Jejda! Výchozí vzhled vaší wiki, definovaný ve <code dir=\"ltr\">$wgDefaultSkin</code> jako <code>$1</code>, není dostupný.\n\nVaše instalace zřejmě obsahuje následující {{PLURAL:$4|vzhled|vzhledy}}. Informace o tom, jak {{PLURAL:$4|jej|je}} povolit a vybrat výchozí, najdete na stránce [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration/cs Manual:Skin configuration].\n\n$2\n\n; Pokud jste právě nainstalovali MediaWiki:\n: Zřejmě jste instalovali z gitu nebo nějakým jiným způsobem přímo ze zdrojového kódu. Tak to má fungovat. Zkuste nainstalovat některé vzhledy ze [https://www.mediawiki.org/wiki/Category:All_skins seznamu vzhledů na mediawiki.org] buď:\n:* Můžete si stáhnout [https://www.mediawiki.org/wiki/Download/cs instalaci v tarballu], která zahrnuje několik vzhledů a rozšíření, a vykopírovat si z ní adresář <code dir=\"ltr\">skins/</code>.\n:* Nebo si můžete stáhnout tarbally jednotlivých vzhledů z [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Nebo si můžete [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins vzhledy stáhnout pomocí Gitu].\n: Pokud jste vývojářem MediaWiki, nemělo by to nijak narušit váš gitový repozitář.\n\n; Pokud jste právě aktualizovali MediaWiki:\n: MediaWiki 1.24 a novější již automaticky nepovolují nainstalované vzhledy (vizte [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_autodiscovery/cs Manual:Skin autodiscovery]). Pro povolení {{PLURAL:$5|právě nainstalovaného vzhledu|všech nainstalovaných vzhledů}} vlepte následující {{PLURAL:$5|řádku|řádky}} do <code>LocalSettings.php</code>:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Pokud jste právě upravili <code>LocalSettings.php</code>:\n: Překontrolujte případné překlepy v názvech vzhledů.",
        "default-skin-not-found-no-skins": "Jejda! Výchozí vzhled vaší wiki, definovaný ve <code dir=\"ltr\">$wgDefaultSkin</code> jako <code>$1</code>, není dostupný.\n\nNemáte nainstalovány žádné vzhledy.\n\n; Pokud jste právě nainstalovali nebo aktualizovali MediaWiki:\n: Zřejmě jste instalovali z gitu nebo nějakým jiným způsobem přímo ze zdrojového kódu. Tak to má fungovat. MediaWiki 1.24 a novější již v hlavním repozitáři neobsahují žádné vzhledy. Zkuste nainstalovat některé vzhledy ze [https://www.mediawiki.org/wiki/Category:All_skins seznamu vzhledů na mediawiki.org] buď:\n:* Můžete si stáhnout [https://www.mediawiki.org/wiki/Download/cs instalaci v tarballu], která zahrnuje několik vzhledů a rozšíření, a vykopírovat si z ní adresář <code>skins/</code>.\n:* Nebo si můžete stáhnout tarbally jednotlivých vzhledů z [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Nebo si můžete [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins vzhledy stáhnout pomocí Gitu].\n: Pokud jste vývojářem MediaWiki, nemělo by to nijak narušit váš gitový repozitář. Informace o tom, jak povolit vzhledy a vybrat výchozí, najdete na stránce [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration/cs Manual:Skin configuration].",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (povolený)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''zakázaný''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>zakázaný</strong>)",
        "mediastatistics": "Statistika souborů",
        "mediastatistics-summary": "Statistika o typech načtených souborů. Zahrnuje vždy jen nejnovější verzi souboru. Staré nebo smazané verze se nezapočítávají.",
        "mediastatistics-nfiles": "$1 ($2 %)",
index f88c082..efe2990 100644 (file)
@@ -9,7 +9,8 @@
                        "Александр Сигачёв",
                        "Блокнот",
                        "아라",
-                       "Chuvash2014"
+                       "Chuvash2014",
+                       "Macofe"
                ]
        },
        "tog-underline": "Ссылкăсене аялтан туртса палармалла:",
        "protectedinterface": "Ку страница çинче MediaWiki'н системлă çырăвĕ вырнаçнă, ăна проект администраторĕсем çеç улăштарма пултараççĕ.",
        "namespaceprotected": "Сирĕн «$1» ят уçлăхĕнчи статьясене тӳрлетмелли май çук..",
        "ns-specialprotected": "«{{ns:special}}» ят уçлăхĕнчи страницăсене эсир тӳрлетейместĕр.",
-       "titleprotected": "Ку ятлă страницăна хатĕрлессине [[Хутшăнакан:$1|$1]] хутшăнакан чарса хунă.\nÇак сăлтава кăтартнă: ''$2''.",
+       "titleprotected": "Ку ятлă страницăна хатĕрлессине [[User:$1|$1]] хутшăнакан чарса хунă.\nÇак сăлтава кăтартнă: <em>$2</em>.",
        "exception-nologin": "Кĕмен",
        "virus-badscanner": "Ĕнерлев йăнăшĕ. Вирус сканерĕ паллă мар: ''$1''",
        "virus-scanfailed": "скенерланă чухнехи йăнăш (код $1)",
        "logentry-delete-delete": "$1 $3 страница {{GENDER:$2|пăсса утрĕ}}",
        "logentry-block-block": "$1 {{GENDER:$4|$3}} {{GENDER:$2|чарса хучĕ}} $5 пĕтиччен $6",
        "logentry-move-move": "$1 страницă {{GENDER:$2|ятне улăштарчĕ}} $3 - $4",
+       "logentry-newusers-newusers": "Хутшăнакан $1 аккаунтне {{GENDER:$2|турĕ}}",
+       "logentry-newusers-create": "Хутшăнакан $1 аккаунтне {{GENDER:$2|турĕ}}",
        "rightsnone": "(çук)",
        "feedback-back": "Каялла",
        "searchsuggest-search": "Шырамалли",
index 4108483..d76acad 100644 (file)
@@ -50,6 +50,7 @@
        "tog-watchlisthidebots": "Cuddio golygiadau bot yn fy rhestr wylio",
        "tog-watchlisthideminor": "Cuddio golygiadau bychain rhag y rhestr wylio",
        "tog-watchlisthideliu": "Cuddio golygiadau gan ddefnyddwyr mewngofnodedig rhag y rhestr wylio",
+       "tog-watchlistreloadautomatically": "Ail-lwyther y Rhestr wylio yn otomatigpan newider ffiltr (angen JavaScript)",
        "tog-watchlisthideanons": "Cuddio golygiadau gan ddefnyddwyr anhysbys rhag y rhestr wylio",
        "tog-watchlisthidepatrolled": "Cuddio golygiadau sydd wedi derbyn ymweliad patrôl rhag y rhestr wylio",
        "tog-watchlisthidecategorization": "Cuddiwych y categoriau",
        "october-date": "$1 Hydref",
        "november-date": "$1 Tachwedd",
        "december-date": "$1 Rhagfyr",
+       "period-am": "AM",
+       "period-pm": "PM",
        "pagecategories": "{{PLURAL:$1|Categori|Categori|Categorïau|Categorïau|Categorïau|Categorïau}}",
        "category_header": "Erthyglau yn y categori \"$1\"",
        "subcategories": "Is-gategorïau",
        "moredotdotdot": "Rhagor...",
        "morenotlisted": "Nid yw'r rhestr hon yn llawn.",
        "mypage": "Tudalen defnyddiwr",
+       "anonuserpage": "Defnyddiwr anhysbys",
        "mytalk": "Sgwrs",
-       "anontalk": "Sgwrs ar gyfer y cyfeiriad IP hwn",
+       "anontalk": "Sgwrs",
        "navigation": "Panel llywio",
        "and": "&#32;a/ac",
        "qbfind": "Canfod",
        "actionthrottled": "Tagwyd y weithred",
        "actionthrottledtext": "Mae camau gwrth-sbam y wici yn cyfyngu ar ba mor aml y gall defnyddwyr ailwneud y weithred hon mewn byr amser, ac rydych chi wedi croesi'r terfyn.\nCeisiwch eto ymhen rhai munudau.",
        "protectedpagetext": "Mae'r dudalen hon wedi'i diogelu rhag cael ei thrin a'i thrafod.",
-       "viewsourcetext": "Cewch weld a chopïo côd y dudalen:",
+       "viewsourcetext": "Cewch weld a chopïo côd y ddalen:",
        "viewyourtext": "Cewch weld a copïo ffynhonnell ''eich golygiadau'' i'r dudalen hon:",
        "protectedinterface": "Testun ar gyfer rhyngwyneb y wici yw cynnwys y dudalen hon. Clowyd y dudalen er mwyn ei diogeli. Os am gyfieithu'r neges neu ei newid ym mhob wici yn hytrach nag yn hwn yn unig, defnyddiwch [//translatewiki.net/ translatewiki.net], y prosiect MediaWiki sy'n hyrwyddo'r gwaith cyfieithu.",
        "editinginterface": "<strong>Dalier sylw:</strong> Rydych yn golygu tudalen sy'n rhan o destun rhyngwyneb y meddalwedd. Bydd newidiadau i'r dudalen hon yn effeithio ar y rhyngwyneb a ddefnyddir ar y wici hwn yn unig.",
        "myprivateinfoprotected": "Nid oes caniatad gennych i olygu eich manylion personol preifat.",
        "mypreferencesprotected": "Nid oes caniatad gennych i olygu eich dewisiadau eich hunan.",
        "ns-specialprotected": "Ni ellir golygu tudalennau arbennig.",
-       "titleprotected": "Diogelwyd y teitl hwn rhag ei greu gan [[User:$1|$1]].\nRhoddwyd y rheswm hwn - ''$2''.",
+       "titleprotected": "Diogelwyd y teitl hwn rhag ei greu gan [[User:$1|$1]].\nRhoddwyd y rheswm hwn - <em>$2</em>.",
        "filereadonlyerror": "Nid oes modd newid y ffeil \"$1\" oherwydd nad oes modd gwneud dim heblaw darllen storfa'r ffeil yn \"$2\" yn unig.\n\nY rheswm a roddwyd gan y gweinyddwr a roddodd y ffeil dan glo yw \"''$3''\".",
        "invalidtitle-knownnamespace": "Teitl annilys o'r enw \"$3\" yn y parth \"$2\"",
        "invalidtitle-unknownnamespace": "Teitl annilys ag iddi'r rhif parth anhysbys $1 a'r enw \"$2\"",
        "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-success": "Newidiwyd eich cyfrinair!",
        "changepassword-throttled": "Rydych wedi ceisio logio mewn yn rhy aml.\nArhoswch am $1 cyn trio eto.",
+       "botpasswords-label-delete": "Diddymu neu ddileu",
+       "botpasswords-label-resetpassword": "Ailosod y cyfrinair",
+       "botpasswords-label-grants": "Nawdd perthnasol:",
        "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",
        "passwordreset-emailsent-capture": "Anfonwyd e-bost i ailosod cyfrinair, ac fe'i ddangosir isod.",
        "passwordreset-emailerror-capture": "Lluniwyd e-bost i ailosod cyfrinair fel ag a welir isod, ond ni lwyddwyd i'w anfon at y {{GENDER:$2|defnyddiwr}}: $1",
        "changeemail": "Newid y cyfeiriad e-bost",
-       "changeemail-header": "Newid cyfeiriad e-bost y cyfrif",
+       "changeemail-header": "Cwbwlhewch y ffurflen hon i newid cyfeiriad e-bost y cyfrifi. I ddileu pob cysylltiad i bob cyfeiriad ebost, gadewch e'n wag.",
        "changeemail-no-info": "Ni allwch fynd at y dudalen hon heblaw eich bod wedi mewngofnodi.",
        "changeemail-oldemail": "Y cyfeiriad e-bost presennol:",
        "changeemail-newemail": "Cyfeiriad e-bost newydd:",
        "sig_tip": "Eich llofnod gyda stamp amser",
        "hr_tip": "Llinell lorweddol (peidiwch â'i gor-ddefnyddio)",
        "summary": "Crynodeb:",
-       "subject": "Pwnc/pennawd:",
+       "subject": "Pwnc:",
        "minoredit": "Golygiad bychan yw hwn",
        "watchthis": "Gwylier y dudalen hon",
        "savearticle": "Cadw'r dudalen",
        "missingsummary": "'''Sylwer:''' Nid ydych wedi gosod nodyn yn y blwch 'Crynodeb'.\nOs y pwyswch eto ar 'Cadw'r dudalen' caiff y golygiad ei gadw heb nodyn.",
        "selfredirect": "<strong>Gofal:</strong> Rydych yn ailgyfeirio'r dudalen hon ati hi ei hun!  Gwirwch yr hyn rydych yn ceisio'i wneud. Os cliciwch \"{{int:savearticle}}\" eto yna caiff y dudalen ailgyfeirio (wallus!) ei chreu beth bynnag.",
        "missingcommenttext": "Rhowch eich sylwadau isod.",
-       "missingcommentheader": "'''Nodyn:''' Nid ydych wedi cynnig unrhywbeth yn y blwch 'Pwnc/Pennawd:'. Os y cliciwch \"{{int:savearticle}}\" eto fe gedwir y golygiad heb bennawd.",
+       "missingcommentheader": "<strong>Nodyn atgoffa:</strong> \nNid ydych wedi cynnig unrhywbeth yn y blwch 'Pwnc:'. Os y cliciwch \"{{int:savearticle}}\" eto fe gedwir y golygiad heb bennawd.",
        "summary-preview": "Rhagolwg o'r crynodeb:",
-       "subject-preview": "Rhagolwg pwnc/pennawd:",
+       "subject-preview": "Rhagolwg pwnc:",
        "blockedtitle": "Mae'r defnyddiwr hwn wedi cael ei flocio",
        "blockedtext": "'''Mae eich enw defnyddiwr neu gyfeiriad IP wedi cael ei flocio.'''\n\n$1 a osododd y bloc.\nY rheswm a roddwyd dros y blocio yw: ''$2''.\n\n*Dechreuodd y bloc am: $8\n*Bydd y bloc yn dod i ben am: $6\n*Bwriadwyd blocio: $7\n\nGallwch gysylltu â $1 neu un arall o'r [[{{MediaWiki:Grouppage-sysop}}|gweinyddwyr]] i drafod y bloc.\nSylwch mai dim ond y rhai sydd wedi gosod cyfeiriad e-bost yn eu [[Special:Preferences|dewisiadau defnyddiwr]], a hwnnw heb ei flocio, sydd yn gallu 'anfon e-bost at ddefnyddiwr' trwy'r wici.\n$3 yw eich cyfeiriad IP presennol. Cyfeirnod y bloc yw #$5.\nPan yn ysgrifennu at weinyddwr, cofiwch gynnwys yr holl fanylion uchod, os gwelwch yn dda.",
        "autoblockedtext": "Rhoddwyd bloc yn awtomatig ar eich cyfeiriad IP oherwydd iddo gael ei ddefnyddio gan ddefnyddiwr arall, a bod bloc wedi ei roi ar hwnnw gan $1.\nY rheswm a roddwyd dros y bloc oedd:\n\n:''$2''\n\n*Dechreuodd y bloc am: $8\n*Daw'r bloc i ben am: $6\n*Bwriadwyd blocio: $7\n\nGallwch gysylltu â $1 neu un arall o'r [[{{MediaWiki:Grouppage-sysop}}|gweinyddwyr]] i drafod y bloc.\n\nSylwch mai dim ond y rhai sydd wedi gosod cyfeiriad e-bost yn eu [[Special:Preferences|dewisiadau defnyddiwr]], a hwnnw heb ei flocio, sydd yn gallu 'anfon e-bost at ddefnyddiwr' trwy'r wici.\n\nEich cyfeiriad IP presennol yw $3. Cyfeirnod y bloc yw $5. Nodwch y manylion hyn wrth drafod y bloc.",
        "newarticle": "(Newydd)",
        "newarticletext": "Rydych chi wedi dilyn cysylltiad i dudalen sydd heb gael ei chreu eto.\nI greu'r dudalen, dechreuwch deipio yn y blwch isod (gweler y [$1 dudalen gymorth] am fwy o wybodaeth).\nOs daethoch yma ar ddamwain, cliciwch botwm '''n&ocirc;l''' y porwr.",
        "anontalkpagetext": "----''Dyma dudalen sgwrs ar gyfer defnyddiwr anhysbys sydd heb greu cyfrif eto, neu nad yw'n ei ddefnyddio. Felly mae'n rhaid inni ddefnyddio'r cyfeiriad IP i'w (h)adnabod. Mae cyfeiriadau IP yn gallu cael eu rhannu rhwng nifer o ddefnyddwyr. Os ydych chi'n ddefnyddiwr anhysbys ac yn teimlo'ch bod wedi derbyn sylwadau amherthnasol, [[Special:UserLogin/signup|crëwch gyfrif]] neu [[Special:UserLogin|mewngofnodwch]] i osgoi cael eich drysu gyda defnyddwyr anhysbys eraill o hyn ymlaen.''",
-       "noarticletext": "Mae'r dudalen hon yn wag ar hyn o bryd.\nGallwch [[Special:Search/{{PAGENAME}}|chwilio am y teitl hwn]] ar dudalennau eraill, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} chwilio drwy'r logiau perthnasol], neu [{{fullurl:{{FULLPAGENAME}}|action=edit}} golygu'r dudalen]</span>.",
+       "noarticletext": "Mae'r dudalen hon yn wag ar hyn o bryd.\nGallwch [[Special:Search/{{PAGENAME}}|chwilio am y teitl hwn]] ar ddalennau eraill, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} chwilio drwy'r logiau perthnasol], neu [{{fullurl:{{FULLPAGENAME}}|action=edit}} fe allwch greu'r ddalen hon]</span>.",
        "noarticletext-nopermission": "Mae'r dudalen hon yn wag ar hyn o bryd.\nGallwch [[Special:Search/{{PAGENAME}}|chwilio am y teitl hwn]] ar dudalennau eraill, neu gallwch <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} chwilio drwy'r logiau perthnasol]</span>, ond nid yw'r gallu gennych i ddechrau'r dudalen o'r dechrau cyntaf.",
        "missing-revision": "Nid yw'r diwygiad #$1 o'r dudalen \"{{FULLPAGENAME}}\" ar gael.\n\nFel arfer, fe ddigwydd hyn wrth ddilyn hen gyswllt i dudalen sydd wedi ei dileu.\nGallwch weld y manylion yn y [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} lòg dileu].",
        "userpage-userdoesnotexist": "Nid oes defnyddiwr a'r enw \"<nowiki>$1</nowiki>\" yn bod. Gwnewch yn siwr eich bod am greu/golygu'r dudalen hon.",
        "previewnote": "'''Cofiwch taw rhagolwg yw hwn.''' Nid yw eich gwaith wedi ei roi ar gadw eto!",
        "continue-editing": "Neidio i'r blwch golygu",
        "previewconflict": "Mae'r rhagolwg hwn yn dangos y testun yn yr ardal golygu uchaf, fel ag y byddai'n ymddangos petaech yn rhoi'r dudalen ar gadw.",
-       "session_fail_preview": "'''Ymddiheurwn! Methwyd prosesu eich golygiad gan fod rhan o ddata'r sesiwn wedi'i golli. Ceisiwch eto.\nOs digwydd yr un peth eto, ceisiwch [[Special:UserLogout|allgofnodi]] ac yna mewngofnodi eto.'''",
+       "session_fail_preview": "'''Ymddiheurwn! Methwyd prosesu eich golygiad gan fod rhan o ddata'r sesiwn wedi'i golli. Ceisiwch eto.\nOs digwydd yr un peth eto, ceisiwch [[Special:UserLogout|allgofnodi]] ac yna mewngofnodi drachefn, a gwirwch fod eich porwr yn caniatau cwcis o'r wefan hon.'''",
        "session_fail_preview_html": "'''Ymddiheurwn! Methwyd prosesu eich golygiad gan fod rhan o ddata'r sesiwn wedi'i golli.'''\n\n''Oherwydd bod HTML amrwd ar waith ar {{SITENAME}}, cuddir y rhagolwg er mwyn gochel rhag ymosodiad JavaScript.''\n\n'''Os ydych am wneud golygiad dilys, ceisiwch eto.\nOs methwch unwaith eto, ceisiwch [[Special:UserLogout|allgofnodi]] ac yna mewngofnodi unwaith eto.'''",
        "token_suffix_mismatch": "'''Gwrthodwyd eich golygiad oherwydd bod eich gweinydd cleient wedi gwneud cawl o'r atalnodau yn y tocyn golygu.\nGwrthodwyd y golygiad rhag i destun y dudalen gael ei lygru.\nWeithiau fe ddigwydd hyn wrth ddefnyddio dirprwy-wasanaeth anhysbys gwallus yn seiliedig ar y we.'''",
        "edit_form_incomplete": "'''Nid yw peth o'r ffurflen golygu wedi cyrraedd y gweinydd; sicrhewch bod eich golygiadau'n gyfan o hyd ac yna ceisiwch eto.'''",
        "undo-summary-username-hidden": "Dadwneud y golygiad $1 gan ddefnyddiwr cudd",
        "cantcreateaccounttitle": "Yn methu creu cyfrif",
        "cantcreateaccount-text": "Rhwystrwyd y gallu i greu cyfrif ar gyfer y cyfeiriad IP hwn, ('''$1'''), gan [[User:$3|$3]].\n\nY rheswm a roddwyd dros y bloc gan $3 yw ''$2''.",
-       "cantcreateaccount-range-text": "Gosododd [[User:$3|$3]] floc ar agor cyfrifon o gyfeiriadau IP yn yr ystod '''$1''', sy'n cynnwys eich cyfeiriad IP chi ('''$4''').\n\nY rheswm a roddwyd gan $3 yw \"$2\"",
+       "cantcreateaccount-range-text": "Gosododd [[User:$3|$3]] floc ar agor cyfrifon o gyfeiriadau IP yn yr ystod <strong>$1</strong>, sy'n cynnwys eich cyfeiriad IP chi (<strong>$4</strong>).\n\nY rheswm a roddwyd gan $3 yw \"$2\"",
        "viewpagelogs": "Dangos logiau'r dudalen hon",
        "nohistory": "Does dim hanes golygu i'r dudalen hon.",
        "currentrev": "Diwygiad cyfoes",
        "notextmatches": "Does dim testun yn cyfateb",
        "prevn": "{{PLURAL:$1||yr $1 cynt|y $1 gynt|y $1 chynt|y $1 chynt|y $1 cynt}}",
        "nextn": "y {{PLURAL:$1|$1}} nesaf",
+       "prev-page": "tudalen flaenorol",
+       "next-page": "tudalen nesaf",
        "prevn-title": "Y $1 {{PLURAL:$1|canlyiad|canlyniad|ganlyniad|chanlyniad|chanlyniad|canlyniad}} cynt",
        "nextn-title": "Y $1 {{PLURAL:$1|canlyiad|canlyniad|ganlyniad|chanlyniad|chanlyniad|canlyniad}} nesaf",
        "shown-title": "Dangos $1 {{PLURAL:$1|canlyiad|canlyniad|ganlyniad|chanlyniad|chanlyniad|canlyniad}} y dudalen",
        "userrights": "Rheoli galluoedd defnyddwyr",
        "userrights-lookup-user": "Rheoli grwpiau defnyddiwr",
        "userrights-user-editname": "Rhowch enw defnyddiwr:",
-       "editusergroup": "Golygu Grwpiau Defnyddwyr",
+       "editusergroup": "Golygu Grwpiau {{GENDER:$1|Defnyddwyr}}",
        "editinguser": "Newid galluoedd {{GENDER:$1|y defnyddiwr}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Golygu grwpiau defnyddwyr",
-       "saveusergroups": "Cadw'r Grwpiau Defnyddwyr",
+       "saveusergroups": "Cadw'r Grwpiau {{GENDER:$1|Defnyddwyr}}",
        "userrights-groupsmember": "Yn aelod o:",
        "userrights-groupsmember-auto": "Ac ynghlwm wrth aelodaeth y grwpiau uchod, yn aelod o:",
        "userrights-groups-help": "Gallwch newid y grwpiau y perthyn y defnyddiwr hwn iddynt:\n* Mae defnyddiwr yn perthyn i grŵp pan mae tic yn y bocs.\n* Nid yw defnyddiwr yn perthyn i grŵp pan nad oes tic yn y bocs.\n* Mae * yn golygu na fyddwch yn gallu dad-wneud unrhyw newid yn y grŵp hwnnw.",
        "userrights-changeable-col": "Grwpiau y gallwch eu newid",
        "userrights-unchangeable-col": "Grwpiau na allwch eu newid",
        "userrights-conflict": "Gwrthdaro oherwydd newid i hawliau defnyddiwr! Adolygwch eich newidiadau a'u cadarnhau.",
-       "userrights-removed-self": "Rydych wedi llwyddo rhoi'r gorau i'ch galluoedd. Gan hynny, nid ydych yn cael myned i'r dudalen hon bellach.",
+       "userrights-removed-self": "Rydych wedi rhoi'r gorau i'ch galluoedd. Gan hynny, ni allwch gyrchu'r ddalen hon bellach.",
        "group": "Grŵp:",
        "group-user": "Defnyddwyr",
        "group-autoconfirmed": "Defnyddwyr wedi eu cadarnhau'n awtomatig",
        "right-blockemail": "Atal defnyddiwr rhag anfon e-bost",
        "right-hideuser": "Atal enw defnyddiwr rhag i'r cyhoedd ei weld",
        "right-ipblock-exempt": "Mynd heibio i flociau IP, blociau awtomatig a blociau amrediad",
-       "right-proxyunbannable": "Mynd heibio i flociau awtomatig gan weinyddion dirprwyol",
        "right-unblockself": "Dad-flocio ei hunan",
        "right-protect": "Newid lefelau diogelu a golygu tudalennau a sgydol-ddiogelwyd",
        "right-editprotected": "Golygu tudalennau sydd wedi eu diogelu ond mai \"{{int:protect-level-sysop}}\"",
        "right-sendemail": "Anfon e-bost at ddefnyddwyr eraill",
        "right-passwordreset": "Gweld e-byst sy'n ailosod cyfrinair",
        "right-managechangetags": "Creu a dileu [[Special:Tags|tagiau]] o'r gronfa ddata",
+       "grant-group-email": "Danfon ebost",
+       "grant-basic": "Hawliau sylfaenol",
+       "grant-viewdeleted": "Gweld ffeiliau a ddilewyd",
+       "grant-viewmywatchlist": "Gweld eich Rhestr Wylio",
        "newuserlogpage": "Lòg creu cyfrifon defnyddwyr newydd",
        "newuserlogpagetext": "Dyma restr o'r defnyddwyr newydd sydd wedi ymuno â'r wici.",
        "rightslog": "Lòg galluoedd defnyddiwr",
        "recentchanges-label-bot": "Golygwyd gan fot",
        "recentchanges-label-unpatrolled": "Nid yw'r golygiad hwn wedi derbyn ymweliad patrôl eto",
        "recentchanges-label-plusminus": "Newidiodd maint y dudalen o'r nifer hwn o feitiau",
-       "recentchanges-legend-heading": "'''Allwedd:'''",
+       "recentchanges-legend-heading": "<strong>Allwedd:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (gweler hefyd [[Special:NewPages|restr y tudalennau newydd]])",
        "recentchanges-legend-plusminus": "(''±123'')",
+       "recentchanges-submit": "Dangos",
        "rcnotefrom": "Isod rhestrir pob newid er <strong>$3, $4</strong> (ymddengys <strong>$1</strong> ohonynt).",
        "rclistfrom": "Dangos newidiadau newydd, gan ddechrau ers $3 $2",
        "rcshowhideminor": "$1 golygiadau bychain",
        "rcshowhidemine": "$1 fy ngolygiadau",
        "rcshowhidemine-show": "Dangoser",
        "rcshowhidemine-hide": "Cuddier",
+       "rcshowhidecategorization": "Categorieiddio tudalen $1",
+       "rcshowhidecategorization-show": "Dangos",
+       "rcshowhidecategorization-hide": "Cuddio",
        "rclinks": "Dangos y $1 newid diweddaraf yn ystod y(r) $2 diwrnod diwethaf<br />$3",
        "diff": "gwahan",
        "hist": "hanes",
        "recentchangeslinked-to": "Dangos newidiadau i'r tudalennau â chyswllt arnynt sy'n arwain at y dudalen a enwir",
        "recentchanges-page-added-to-category": "Ychwanegwyd [[:$1]] at y categori",
        "recentchanges-page-added-to-category-bundled": "[[:$1]] ac {{PLURAL:$2|un ddalen|$2 dalen}} wedi'u hychwanegu at y categori",
+       "recentchanges-page-removed-from-category": "Symudwyd [[:$1]] o'r categori",
        "upload": "Uwchlwytho ffeil",
        "uploadbtn": "Uwchlwytho ffeil",
        "reuploaddesc": "Dileu'r uwchlwytho a dychwelyd i'r ffurflen uwchlwytho",
        "watchthisupload": "Gwylier y ffeil hon",
        "filewasdeleted": "Cafodd ffeil o'r enw hwn eisoes ei uwchlwytho ac yna ei dileu.\nDylech ddarllen y $1 cyn bwrw ati i'w uwchlwytho unwaith eto.",
        "filename-bad-prefix": "Mae'r enw ar y ffeil yr ydych yn ei uwchlwytho yn dechrau gyda '''\"$1\"'''. Mae'r math hwn o enw diystyr fel arfer yn cael ei osod yn awtomatig gan gamerâu digidol. Mae'n well gosod enw sy'n disgrifio'r ffeil arno.",
-       "upload-success-subj": "Wedi llwyddo uwchlwytho",
-       "upload-success-msg": "Llwyddwyd i uwchlwytho'r ffeil o [$2]. Mae ar gael yma: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Cafwyd problem wrth uwchlwytho",
-       "upload-failure-msg": "Cafwyd problem wrth uwchlwytho o [$2]:\n\n$1",
-       "upload-warning-subj": "Rhybudd uwchlwytho",
-       "upload-warning-msg": "Cafwyd problem wrth uwchlwytho o [$2]. Gallwch ddychwelyd at y [[Special:Upload/stash/$1|ffurflen uwchlwytho]] i ddatrys y broblem.",
        "upload-proto-error": "Protocol gwallus",
        "upload-proto-error-text": "Rhaid cael URLs yn dechrau gyda <code>http://</code> neu <code>ftp://</code> wrth uwchlwytho'n bell.",
        "upload-file-error": "Gwall mewnol",
        "upload-too-many-redirects": "Roedd gormod o ailgyfeiriadau yn yr URL",
        "upload-http-error": "Digwyddodd gwall HTTP: $1",
        "upload-copy-upload-invalid-domain": "Ni ellir uwchlwytho ffeiliau o'r parth hwn.",
+       "upload-dialog-title": "Uwchlwytho ffeil",
+       "upload-dialog-button-cancel": "Canslo",
+       "upload-dialog-button-done": "Wedi cwbwlhau",
+       "upload-dialog-button-save": "Wedi ei gadw",
+       "upload-dialog-button-upload": "Uwchlwytho",
+       "upload-form-label-infoform-title": "Manylion",
+       "upload-form-label-infoform-name": "Enw",
+       "upload-form-label-infoform-description": "Disgrifiad",
+       "upload-form-label-usage-title": "Defnydd",
+       "upload-form-label-usage-filename": "Enw'r ffeil",
+       "foreign-structured-upload-form-label-own-work": "Dyma fy ngwaith fy hun",
+       "foreign-structured-upload-form-label-infoform-categories": "Categoriau",
+       "foreign-structured-upload-form-label-infoform-date": "Dyddiad",
+       "foreign-structured-upload-form-label-own-work-message-local": "Rwy'n cadarnhau fy mod yn uwchlwytho'r ffeil yma gan ddilyn amodau a pholisiau trwyddedu {{SITENAME}}.",
+       "foreign-structured-upload-form-label-not-own-work-local-local": "Efallai y carwch hefyd roi gynnig ar [[Special:Upload|y ddalen uwchlwytho diofyn]].",
+       "foreign-structured-upload-form-label-own-work-message-default": "Rwy'n cadarnhau fy mod yn uwchlwytho'r ffeil yma i fan sy'n cael ei rannu gan nifer. Rwy'n cadarnhau hefyd y gwnaf hyn gan ddilyn yr amodau a'r polisiau trwyddedu sydd yno.",
+       "foreign-structured-upload-form-label-own-work-message-shared": "Cadarnhaf mai fi yw perchennog hawlfraint y ffeil hon, a chytunaf  yn ddi-droi'n ôl i ryddhau'r ffeil hon i Gomin Wicimedia dan drwydded [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Attribution-ShareAlike 4.0], a chytunaf gyda'r[https://wikimediafoundation.org/wiki/Terms_of_Use Amodau Defnyddio].",
        "backend-fail-stream": "Wedi methu ffrydio'r ffeil $1.",
        "backend-fail-backup": "Wedi methu gwneud copi wrth gefn o'r ffeil $1.",
        "backend-fail-notexists": "Nid yw'r ffeil $1 ar gael.",
        "backend-fail-read": "Wedi methu darllen y ffeil $1.",
        "backend-fail-create": "Wedi methu ysgrifennu'r ffeil $1.",
        "backend-fail-maxsize": "Ni ellid ysgrifennu'r ffeil $1 oherwydd ei bod yn fwy na{{PLURAL:$2||g un beit| $2 feit| $2 beit| $2 beit| $2 beit}} o faint.",
-       "backend-fail-readonly": "Ar hyn o bryd gellir darllen y storfa \"$1\" yn unig. Y rheswm dros hyn yw: \"''$2''\"",
+       "backend-fail-readonly": "Ar hyn o bryd gellir darllen y storfa \"$1\" yn unig. Y rheswm dros hyn yw:\n<em>$2</em>",
        "backend-fail-synced": "Mae'r ffeil \"$1\" mewn cyflwr anghyson oddi mewn i'r storfeydd tu ôl i'r llenni.",
        "backend-fail-connect": "Ni ellid cysylltu â'r storfa tu ôl i'r llenni yn \"$1\".",
        "backend-fail-internal": "Cafwyd gwall anhysbys yn y storfa tu ôl i'r llenni yn \"$1\".",
        "uploadstash-summary": "O'r dudalen hon gallwch gyrchu'r ffeiliau sydd wedi cael eu huwchlwytho (neu wrthi'n cael eu huwchlwytho) ond nad ydynt wedi eu cyhoeddi ar y wici eto. Nid oes neb yn gallu gweld y ffeiliau heblaw am y defnyddiwr a'u huwchlwythodd.",
        "uploadstash-clear": "Clirio'r celc ffeiliau",
        "uploadstash-nofiles": "Nid oes unrhyw ffeiliau mewn celc gennych.",
-       "uploadstash-badtoken": "Ni lwyddodd y weithred, efallai oherwydd bod eich cymwysterau golygu wedi dod i ben. Ceisiwch eto.",
+       "uploadstash-badtoken": "Ni lwyddodd y weithred. Efallai oherwydd bod eich cymwysterau golygu wedi dod i ben. Ceisiwch eto.",
        "uploadstash-errclear": "Ni lwyddwyd i glirio'r ffeiliau.",
        "uploadstash-refresh": "Adnewyddu rhestr y ffeiliau",
        "invalid-chunk-offset": "Atred annilys i'r talpiau",
        "listfiles-delete": "dileu",
        "listfiles-summary": "Rhestr yr holl ffeiliau sydd wedi eu huwchlwytho sydd ar y dudalen hon.",
        "listfiles_search_for": "Chwilio am enw'r ddelwedd:",
+       "listfiles-userdoesnotexist": "Ni yw cyfrif defnyddiwr \"$1\" wedi'i gofrestru.",
        "imgfile": "ffeil",
        "listfiles": "Rhestr o'r holl ffeiliau",
        "listfiles_thumb": "Mân-lun",
        "randomincategory-nopages": "Nid oes unrhyw dudalennau yn y categori [[:Category:$1]].",
        "randomincategory-category": "Categori:",
        "randomincategory-legend": "Tudalen ar hap o blith tudalennau'r categori",
+       "randomincategory-submit": "Ewch",
        "randomredirect": "Tudalen ailgyfeirio ar hap",
        "randomredirect-nopages": "Does dim tudalennau ailgyfeirio yn y parth \"$1\".",
        "statistics": "Ystadegau",
        "mostrevisions": "Tudalennau yn nhrefn nifer y newidiadau iddynt",
        "prefixindex": "Pob tudalen yn ôl parth",
        "prefixindex-namespace": "Pob tudalen â rhagddodiad penodol (y parth $1)",
+       "prefixindex-submit": "Dangos",
        "prefixindex-strip": "Diosg y rhagddodiad wrth restru",
        "shortpages": "Erthyglau byr",
        "longpages": "Tudalennau hirion",
        "protectedpages-performer": "Y diogelwr",
        "protectedpages-params": "Paramedrau'r diogelu",
        "protectedpages-reason": "Rheswm",
+       "protectedpages-submit": "Dangos y dalenau",
        "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.",
+       "protectedtitles-submit": "Dangos y teitlau",
        "listusers": "Rhestr defnyddwyr",
        "listusers-editsonly": "Dangos y defnyddwyr hynny sydd wedi golygu rhywbeth yn unig",
        "listusers-creationsort": "Trefnwch yn ôl dyddiad creu",
        "usereditcount": "$1 {{PLURAL:$1|golygiad|golygiad|olygiad|golygiad|golygiad|o olygiadau}}",
        "usercreated": "{{GENDER:$3|Crëwyd}} ar $1 am $2",
        "newpages": "Erthyglau newydd",
+       "newpages-submit": "Dangos",
        "newpages-username": "Enw defnyddiwr:",
        "ancientpages": "Erthyglau hynaf",
        "move": "Symud",
        "querypage-disabled": "Analluogwyd y dudalen arbennig hon er mwyn osgoi iddi andwyo perfformiad y wefan.",
        "apihelp": "Cymorth API",
        "apihelp-no-such-module": "Ni chafwyd hyd i fodiwl \"$1\".",
+       "apisandbox": "Pwll tywod API",
+       "apisandbox-fullscreen": "Ehangu'r panel",
+       "apisandbox-unfullscreen": "Dangos y ddalen",
+       "apisandbox-submit": "Gwnewch gais",
+       "apisandbox-reset": "Clirio",
+       "apisandbox-retry": "Ailgeisio",
        "booksources": "Ffynonellau llyfrau",
        "booksources-search-legend": "Chwilier am lyfrau",
        "booksources-search": "Chwilio",
        "wlheader-showupdated": "Mae tudalennau sydd wedi newid ers i chi eu gweld ddiwethaf wedi'u '''hamlygu'''.",
        "wlnote": "Isod, {{PLURAL:$1|yw'r golygiad diweddaraf |yw'r golygiadau diweddaraf <strong>$1</strong> changes}} yn y {{PLURAL:$2|hour|<strong>$2</strong> awr}}, fel ag y mae ar $3, $4.",
        "wlshowlast": "Dangoser newidiadau'r $1 awr ddiwethaf neu'r $2 {{PLURAL:$2|diwrnod|diwrnod|ddiwrnod|diwrnod|diwrnod|diwrnod}} diwethaf neu'r newidiadau.",
-       "watchlistall2": "holl",
        "wlshowtime": "Dangos y diwethaf:",
        "wlshowhideminor": "golygiadau bychan",
        "wlshowhidebots": "botiau",
        "rollbackfailed": "Methodd y gwrthdroi",
        "cantrollback": "Wedi methu gwrthdroi'r golygiad; y cyfrannwr diwethaf oedd unig awdur y dudalen hon.",
        "alreadyrolled": "Nid yw'n bosib dadwneud y golygiad diwethaf i'r dudalen [[:$1|$1]] gan [[User:$2|$2]] ([[User talk:$2|Sgwrs]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nmae rhywun arall eisoes wedi dadwneud y golygiad neu wedi golygu'r dudalen.\n\n[[User:$3|$3]] ([[User talk:$3|Sgwrs]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) a wnaeth y golygiad diwethaf.",
-       "editcomment": "Crynodeb y golygiad oedd: \"''$1''\".",
+       "editcomment": "Crynodeb y golygiad oedd: <em>$1</em>.",
        "revertpage": "Wedi gwrthdroi golygiadau gan [[Special:Contributions/$2|$2]] ([[User talk:$2|Sgwrs]]); wedi adfer y golygiad diweddaraf gan [[User:$1|$1]]",
        "revertpage-nouser": "Wedi gwrthdroi golygiadau gan ddefnyddiwr cudd; wedi adfer y golygiad diweddaraf gan {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Gwrthdrowyd y golygiadau gan $1;\nwedi gwrthdroi i'r golygiad olaf gan $2.",
        "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.",
+       "import-token-mismatch": "Collwyd y data.\n\nEfallai i chi allgofnodi (logio allan).<strong>Cadarnhewch eich bod yn dal wedi mewngofnodi a cheisiwch eto</strong>\nOs yw'n parhau i fethu, ceisiwch [[Special:UserLogout|allgofnodi]] a mewngofnodwch drachefn, a gwirwch fod eich porwr yn caniatau cwcis o'r wefan hon.",
        "import-invalid-interwiki": "Ni ellir uwchlwytho o'r wici dewisedig.",
        "import-error-edit": "Ni fewnforiwyd y dudalen \"$1\" oherwydd nad yw'r gallu i'w golygu gennych.",
        "import-error-create": "Ni fewnforiwyd y dudalen \"$1\" oherwydd nad yw'r hawl i'w chreu gennych.",
        "javascripttest-pagetext-frameworks": "Dewiswch un o'r fframweithiau profi canlynol: $1",
        "javascripttest-pagetext-skins": "Dewiswch wedd i gynnal profion arni:",
        "javascripttest-qunit-intro": "Gweler y [$1 wybodaeth am y profion] ar mediawiki.org.",
-       "tooltip-pt-userpage": "Eich tudalen defnyddiwr",
+       "tooltip-pt-userpage": "{{GENDER:|Eich tudalen defnyddiwr}}",
        "tooltip-pt-anonuserpage": "Y tudalen defnyddiwr ar gyfer y cyfeiriad IP yr ydych yn ei ddefnyddio wrth olygu",
        "tooltip-pt-mytalk": "Eich tudalen sgwrs",
        "tooltip-pt-anontalk": "Sgwrs ynglŷn â golygiadau o'r cyfeiriad IP hwn",
        "tooltip-pt-preferences": "Eich dewisiadau",
        "tooltip-pt-watchlist": "Rydych yn dilyn hynt y tudalennau sydd ar y rhestr hon",
-       "tooltip-pt-mycontris": "Rhestr eich cyfraniadau yn nhrefn amser",
+       "tooltip-pt-mycontris": "Rhestr o'ch cyfraniadau",
        "tooltip-pt-login": "Fe'ch anogir i fewngofnodi, er nad oes rhaid gwneud.",
        "tooltip-pt-logout": "Allgofnodi",
        "tooltip-pt-createaccount": "Rydym yn argymell eich bod yn creu cyfri ac yn menwgofnodi. Fodd bynnag, dydy hyn ddim yn orfodol",
        "tooltip-t-recentchangeslinked": "Newidiadau diweddar i dudalennau sydd yn cysylltu â hon",
        "tooltip-feed-rss": "Porthiant RSS ar gyfer y dudalen hon",
        "tooltip-feed-atom": "Porthiant atom ar gyfer y dudalen hon",
-       "tooltip-t-contributions": "Gwelwch restr o gyfraniadau'r defnyddiwr hwn",
+       "tooltip-t-contributions": "Rhestr o gyfraniadau'r {{GENDER:$1|defnyddiwr hwn}}",
        "tooltip-t-emailuser": "Anfonwch e-bost at y defnyddiwr hwn",
        "tooltip-t-info": "Mwy o wybodaeth am y dudalen hon",
        "tooltip-t-upload": "Uwchlwythwch ffeil delwedd, sain, fideo, ayb",
        "pageinfo-category-files": "Nifer y ffeiliau",
        "markaspatrolleddiff": "Marcio ei bod wedi derbyn ymweliad patrôl",
        "markaspatrolledtext": "Marcio bod y dudalen wedi derbyn ymweliad patrôl",
+       "markaspatrolledtext-file": "Marcio fod fersiwn y ffeil wedi cael ymweliad",
        "markedaspatrolled": "Gosodwyd marc ei bod wedi derbyn ymweliad patrôl",
        "markedaspatrolledtext": "Wedi gosod marc bod y golygiad dewisedig o [[:$1]] wedi derbyn ymweliad patrôl.",
        "rcpatroldisabled": "Patrol y Newidiadau Diweddar wedi'i analluogi",
        "exif-usercomment": "Sylwadau'r defnyddiwr",
        "exif-relatedsoundfile": "Ffeil sain gysylltiedig",
        "exif-datetimeoriginal": "Dyddiad ac amser y cynhyrchwyd y data",
-       "exif-datetimedigitized": "Dyddiad ac amser y digiteiddiwyd",
+       "exif-datetimedigitized": "Dyddiad ac amser y digido",
        "exif-subsectime": "Manylyn iseiliad amser newid y ffeil",
        "exif-subsectimeoriginal": "Manylyn iseiliad amser cynhyrchu'r llun",
        "exif-subsectimedigitized": "Manylyn iseiliad amser digiteiddio'r llun",
        "htmlform-cloner-required": "Mae angen o leiaf un peth!",
        "sqlite-has-fts": "$1 gyda chymorth chwilio yr holl destun",
        "sqlite-no-fts": "$1 heb gymorth chwiliad yr holl destun",
-       "logentry-delete-delete": "Dileodd $1 dudalen $3",
+       "logentry-delete-delete": "Dileodd $1 dudalen $3",
        "logentry-delete-restore": "Adferodd $1 y dudalen $3",
        "logentry-delete-event": "Newidiodd $1 ymddangosiad {{PLURAL:$5||cofnod lòg|$5 gofnod lòg|$5 chofnod lòg|$5 chofnod lòg|$5 cofnod lòg}} ar $3: $4",
        "logentry-delete-revision": "{{GENDER:$2|Newidiodd}} $1 ymddangosiad {{PLURAL:$5||diwygiad|$5 ddiwygiad|$5 diwygiad}} o'r dudalen $3: $4",
        "expand_templates_generate_xml": "Dangos y goeden dosrannu XML",
        "expand_templates_generate_rawhtml": "Dangos HTML crai",
        "expand_templates_preview": "Rhagolwg",
-       "pagelanguage": "Dewis iaith y dudalen",
+       "pagelanguage": "Newidiwch iaith ddalen",
        "pagelang-name": "Tudalen",
        "pagelang-language": "Iaith",
        "pagelang-use-default": "Defnyddier yr iaith arferol",
        "pagelang-select-lang": "Dewis iaith",
+       "pagelang-submit": "Ei wneud",
        "right-pagelang": "Newidiwch iaith y dudalen",
        "action-pagelang": "newidiwch iaith y dudalen",
        "log-name-pagelang": "Newidiwch iaith y log",
        "log-description-pagelang": "Dyma log o newidiadau yn nhudalen yr ieithoedd",
        "logentry-pagelang-pagelang": "Newidiodd $1 {{GENDER:$2}} iaith ydudalen am $3 o $4 i $5.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (galluogi)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''diffoddwyd''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>diffoddwyd</strong>)",
        "mediastatistics": "Ystadegau cyfryngau",
        "mediastatistics-summary": "Ystadegau am fathau o ffeiliau a uwchlwythwyd. Mae hyn yn cynnwys y fersiynau diweddaraf o'r ffeil yn unig.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 beit|$1 beit}} ($2; $3%)",
        "mediastatistics-header-text": "Testun",
        "mediastatistics-header-executable": "Gweithredadwy",
        "mediastatistics-header-archive": "Fformat wedi'i gywasgu",
+       "mediastatistics-header-total": "Pob ffeil",
        "json-warn-trailing-comma": "Tynnwyd $1 {{PLURAL:$1|coma}} o JSON",
        "json-error-unknown": "Roedd gwall gyda JSON. Gwall: $1",
        "json-error-depth": "Aethpwyd dros y dyfnder mwyaf a ganiateir",
index 17aa7bd..8263cf6 100644 (file)
        "myprivateinfoprotected": "Du har ikke rettigheder til at redigere dine private oplysninger.",
        "mypreferencesprotected": "Du har ikke rettigheder til at redigere dine indstillinger.",
        "ns-specialprotected": "Sider i navnerummet {{ns:special}} kan ikke redigeres.",
-       "titleprotected": "Dette sidenavn er blevet beskyttet mod oprettelse af [[User:$1|$1]]. Begrundelsen for beskyttelsen er \"''$2''\".",
+       "titleprotected": "Dette sidenavn er blevet beskyttet mod oprettelse af [[User:$1|$1]]. Begrundelsen for beskyttelsen er <em>$2</em>.",
        "filereadonlyerror": "Ude af stand til at redigere filen \"$1\", fordi fildatabasen \"$2\" er skrivebeskyttet.\n\nAdministratoren, som skrivebeskyttede den, gav følgende begrundelse: \"$3\".",
        "invalidtitle-knownnamespace": "Ugyldig titel med navnerummet \"$2\" og teksten \"$3\"",
        "invalidtitle-unknownnamespace": "Ugyldig titel med ukendt navnerum nummer $1 og tekst \"$2\"",
        "undo-summary-username-hidden": "Fortryde revision $1 af en skjult bruger",
        "cantcreateaccounttitle": "Brugerkontoen kan ikke oprettes.",
        "cantcreateaccount-text": "Oprettelsen af en brugerkonto fra IP-adressen ('''$1''') er blevet blokeret af [[User:$3|$3]].\n\nÅrsagen til blokeringen er angivet af $3 som ''$2''",
-       "cantcreateaccount-range-text": "Oprettelsen af en brugerkonto fra IP-adresser i intervallet '''$1''', som omfatter din IP-adresse ('''$4'''), er blevet blokeret af [[User:$3|$3]].\n\nÅrsagen angivet af $3 er ''$2''",
+       "cantcreateaccount-range-text": "Oprettelsen af en brugerkonto fra IP-adresser i intervallet <strong>$1</strong>, som omfatter din IP-adresse (<strong>$4</strong>), er blevet blokeret af [[User:$3|$3]].\n\nÅrsagen angivet af $3 er <em>$2</em>",
        "viewpagelogs": "Vis loglister for denne side",
        "nohistory": "Der er ingen versionshistorik for denne side.",
        "currentrev": "Nuværende version",
        "recentchanges-label-bot": "Denne redigering blev udført af en bot",
        "recentchanges-label-unpatrolled": "Denne redigering er endnu ikke blevet patruljeret",
        "recentchanges-label-plusminus": "Størrelsen på siden blev ændret med dette antal bytes",
-       "recentchanges-legend-heading": "'''Forklaring:'''",
+       "recentchanges-legend-heading": "<strong>Forklaring:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (se også [[Special:NewPages|listen over nye sider]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Nedenfor er op til '''$1''' {{PLURAL:$5|ændring|ændringer}} siden '''$2''' vist.",
        "upload-dialog-button-done": "Færdig",
        "upload-dialog-button-save": "Gem",
        "upload-dialog-button-upload": "Læg op",
-       "upload-form-label-select-file": "Vælg filer",
        "upload-form-label-infoform-name": "Navn",
        "upload-form-label-infoform-description": "Beskrivelse",
        "upload-form-label-usage-filename": "Filnavn",
        "rollbackfailed": "Kunne ikke fjerne redigeringen",
        "cantrollback": "Kan ikke fjerne redigering; den sidste bruger er den eneste forfatter.",
        "alreadyrolled": "Kan ikke fjerne den seneste redigering af [[:$1]] foretaget af [[User:$2|$2]] ([[User talk:$2|diskussion]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nen anden har allerede redigeret siden eller fjernet redigeringen.\n\nDen seneste redigering er foretaget af [[User:$3|$3]] ([[User talk:$3|diskussion]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Redigeringsbeskrivelsen var: \"''$1''\".",
+       "editcomment": "Redigeringsbeskrivelsen var: <em>$1</em>.",
        "revertpage": "Gendannet til seneste version af [[User:$1|$1]], fjerner ændringer fra [[Special:Contributions/$2|$2]] ([[User talk:$2|diskussion]])",
        "revertpage-nouser": "Gendannet til seneste version af {{GENDER:$1|[[User:$1|$1]]}}, fjerner ændringer fra en skjult bruger",
        "rollback-success": "Ændringerne fra $1 er fjernet,\nog den seneste version af $2 er gendannet.",
index bfffb5a..d7f2c90 100644 (file)
        "editfont-style": "Schriftart für den Text im Bearbeitungsfenster:",
        "editfont-default": "Browserstandard",
        "editfont-monospace": "Schrift mit fester Zeichenbreite",
-       "editfont-sansserif": "Serifenlose Groteskschrift",
+       "editfont-sansserif": "Schrift ohne Serifen",
        "editfont-serif": "Schrift mit Serifen",
        "sunday": "Sonntag",
        "monday": "Montag",
        "myprivateinfoprotected": "Du hast keine Berechtigung, deine privaten Informationen zu bearbeiten.",
        "mypreferencesprotected": "Du bist nicht berechtigt, deine Einstellungen zu ändern.",
        "ns-specialprotected": "Spezialseiten können nicht bearbeitet werden.",
-       "titleprotected": "Eine Seite mit diesem Namen kann nicht angelegt werden.\nDie Sperre wurde durch [[User:$1|$1]] mit der Begründung „<em>$2</em>“ eingerichtet.",
+       "titleprotected": "Eine Seite mit diesem Namen kann nicht angelegt werden.\nDie Sperre wurde durch [[User:$1|$1]] mit der Begründung <em>$2</em> eingerichtet.",
        "filereadonlyerror": "Die Datei „$1“ kann nicht verändert werden, da auf das Dateirepositorium „$2“ nur Lesezugriff möglich ist.\n\nDer Systemadministrator, der den Schreibzugriff sperrte, gab folgenden Grund an: „$3“.",
        "invalidtitle-knownnamespace": "Ungültiger Titel mit Namensraum „$2“ und Text „$3“",
        "invalidtitle-unknownnamespace": "Ungültiger Titel mit unbekannter Namensraumnummer $1 und Text „$2“",
        "nocookieslogin": "{{SITENAME}} benutzt Cookies zur Anmeldung der Benutzer. Du hast Cookies deaktiviert, bitte aktiviere diese und versuche es erneut.",
        "nocookiesfornew": "Das Benutzerkonto wurde nicht erstellt, da die Datenherkunft nicht ermittelt werden konnte.\nBitte stelle sicher, dass du Cookies aktiviert hast. Lade diese Seite danach erneut und versuche es noch einmal.",
        "noname": "Du musst einen gültigen Benutzernamen angeben.",
-       "loginsuccesstitle": "Anmeldung erfolgreich",
+       "loginsuccesstitle": "Angemeldet",
        "loginsuccess": "<strong>Du bist jetzt als „$1“ bei {{SITENAME}} angemeldet.</strong>",
        "nosuchuser": "Der Benutzername „$1“ existiert nicht.\nÜberprüfe die Schreibweise (Groß-/Kleinschreibung beachten) oder [[Special:UserLogin/signup|lege ein neues Benutzerkonto an]].",
        "nosuchusershort": "Der Benutzername „$1“ ist nicht vorhanden. Bitte überprüfe die Schreibweise.",
        "createaccount-title": "Erstellung eines Benutzerkontos für {{SITENAME}}",
        "createaccount-text": "Es wurde für dich ein Benutzerkonto „$2“ auf {{SITENAME}} ($4) erstellt. Das automatisch generierte Passwort für „$2“ ist „$3“. Du solltest dich nun anmelden und das Passwort ändern.\n\nFalls das Benutzerkonto irrtümlich angelegt wurde, kannst du diese Nachricht ignorieren.",
        "login-throttled": "Du hast zu oft versucht, dich anzumelden.\nBitte warte $1, bevor du es erneut probierst.",
-       "login-abort-generic": "Deine Anmeldung war nicht erfolgreich – Abgebrochen",
+       "login-abort-generic": "Deine Anmeldung ist fehlgeschlagen – Abgebrochen",
        "login-migrated-generic": "Dein Benutzerkonto wurde migriert. Dein Benutzername ist auf diesem Wiki nicht mehr vorhanden.",
        "loginlanguagelabel": "Sprache: $1",
        "suspicious-userlogout": "Deine Abmeldeanfrage wurde verweigert, da sie vermutlich von einem defekten Browser oder einem Cache-Proxy gesendet wurde.",
        "newpassword": "Neues Passwort:",
        "retypenew": "Neues Passwort (nochmal):",
        "resetpass_submit": "Passwort übermitteln und anmelden",
-       "changepassword-success": "Dein Passwort wurde erfolgreich geändert!",
+       "changepassword-success": "Dein Passwort wurde geändert!",
        "changepassword-throttled": "Du hast kürzlich zu viele Anmeldeversuche unternommen.\nBitte warte $1, bevor du es erneut versuchst.",
        "botpasswords": "Botpasswörter",
        "botpasswords-summary": "<em>Botpasswörter</em> erlauben Zugriff auf ein Benutzerkonto über die API, ohne die Hauptanmeldeinformationen des Benutzerkontos zu verwenden. Die verfügbaren Benutzerrechte bei der Anmeldung mit einem Botpasswort können beschränkt sein.\n\nWenn du nicht weißt, warum du ein Passwort erstellen sollst, tu es nicht. Du solltest ein Passwort nie für einen anderen erzeugen und es an ihn übergeben.",
        "botpasswords-insert-failed": "Der Botname „$1“ konnte nicht hinzugefügt werden. Wurde er bereits hinzugefügt?",
        "botpasswords-update-failed": "Der Botname „$1“ konnte nicht aktualisiert werden. Wurde er gelöscht?",
        "botpasswords-created-title": "Botpasswort erstellt",
-       "botpasswords-created-body": "Das Botpasswort „$1“ wurde erfolgreich erstellt.",
+       "botpasswords-created-body": "Das Botpasswort für den Botnamen „$1“ des Benutzers „$2“ wurde erstellt.",
        "botpasswords-updated-title": "Botpasswort aktualisiert",
-       "botpasswords-updated-body": "Das Botpasswort „$1“ wurde erfolgreich aktualisiert.",
+       "botpasswords-updated-body": "Das Botpasswort für den Botnamen „$1“ des Benutzers „$2“ wurde aktualisiert.",
        "botpasswords-deleted-title": "Botpasswort gelöscht",
-       "botpasswords-deleted-body": "Das Botpasswort „$1“ wurde gelöscht.",
+       "botpasswords-deleted-body": "Das Botpasswort für den Botnamen „$1“ des Benutzers „$2“ wurde gelöscht.",
        "botpasswords-newpassword": "Das neue Passwort zur Anmeldung mit <strong>$1</strong> ist <strong>$2</strong>. <em>Bitte halte dies für die Zukunft fest.</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider ist nicht verfügbar.",
        "botpasswords-restriction-failed": "Beschränkungen des Botpassworts verhindern diese Anmeldung.",
        "resetpass-no-info": "Du musst dich anmelden, um auf diese Seite direkt zuzugreifen.",
        "resetpass-submit-loggedin": "Passwort ändern",
        "resetpass-submit-cancel": "Abbrechen",
-       "resetpass-wrong-oldpass": "Ungültiges temporäres oder aktuelles Passwort.\nMöglicherweise hast du dein Passwort bereits erfolgreich geändert oder ein neues temporäres Passwort beantragt.",
+       "resetpass-wrong-oldpass": "Ungültiges temporäres oder aktuelles Passwort.\nMöglicherweise hast du dein Passwort bereits 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.\nUm die Anmeldung abzuschließen, musst du jetzt ein neues Passwort festlegen:",
        "resetpass-temp-password": "Temporäres Passwort:",
        "resetpass-validity-soft": "Dein Passwort ist nicht gültig: $1\n\nBitte wähle jetzt ein neues Passwort oder klicke auf „{{int:resetpass-submit-cancel}}“, um es später zurückzusetzen.",
        "passwordreset": "Passwort zurücksetzen",
        "passwordreset-text-one": "Fülle dieses Formular aus, um ein temporäres Passwort per E-Mail zu erhalten.",
-       "passwordreset-text-many": "{{PLURAL:$1|Füll eines der Felder aus, um ein temporäres Passwort per E-Mail zugesandt zu bekommen.}}",
+       "passwordreset-text-many": "{{PLURAL:$1|Fülle eines der Felder aus, um ein temporäres Passwort per E-Mail zugesandt zu bekommen.}}",
        "passwordreset-disabled": "Das Zurücksetzen von Passwörtern wurde in diesem Wiki deaktiviert.",
        "passwordreset-emaildisabled": "Die E-Mail-Funktionen wurden auf diesem Wiki deaktiviert.",
        "passwordreset-username": "Benutzername:",
        "newarticle": "(Neu)",
        "newarticletext": "Du bist einem Link zu einer Seite gefolgt, die nicht vorhanden ist.\nUm diese Seite anzulegen, trage deinen Text in das untenstehende Bearbeitungsfeld ein (weitere Informationen auf der [$1 Hilfeseite]).\nSofern du fälschlicherweise hier bist, klicke auf die Schaltfläche '''Zurück''' deines Browsers.",
        "anontalkpagetext": "----''Diese Seite dient dazu, einem nicht angemeldeten Benutzer Nachrichten zu hinterlassen. Es wird seine IP-Adresse zur Identifizierung verwendet. IP-Adressen können von mehreren Benutzern gemeinsam verwendet werden. Wenn du mit den Kommentaren auf dieser Seite nichts anfangen kannst, richten sie sich vermutlich an einen früheren Inhaber deiner IP-Adresse und du kannst sie ignorieren. Du kannst dir auch ein [[Special:UserLogin/signup|Benutzerkonto erstellen]] oder dich [[Special:UserLogin|anmelden]], um künftig Verwechslungen mit anderen anonymen Benutzern zu vermeiden.''",
-       "noarticletext": "Diese Seite enthält momentan noch keinen Text.\nDu kannst sie <span class=\"plainlinks\">[{{fullurl:{{FULLPAGENAME}}|action=edit}} bearbeiten]</span>,\nihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]]\noder die zugehörigen <span class=\"plainlinks\">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten]</span>.",
+       "noarticletext": "Diese Seite enthält momentan noch keinen Text.\nDu kannst sie <span class=\"plainlinks\">[{{fullurl:{{FULLPAGENAME}}|action=edit}} erstellen]</span>,\nihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]]\noder die zugehörigen <span class=\"plainlinks\">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten]</span>.",
        "noarticletext-nopermission": "Diese Seite enthält momentan noch keinen Text und du bist auch nicht dazu berechtigt, diese Seite zu erstellen.\nDu kannst ihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]] oder die zugehörigen <span class=\"plainlinks\">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten].</span>",
        "missing-revision": "Die Version $1 der Seite namens „{{FULLPAGENAME}}“ ist nicht vorhanden.\n\nDieser Fehler wird normalerweise von einem veralteten Link zur Versionsgeschichte einer Seite verursacht, die zwischenzeitlich gelöscht wurde.\nEinzelheiten sind im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch] einsehbar.",
        "userpage-userdoesnotexist": "Das Benutzerkonto „<nowiki>$1</nowiki>“ ist nicht vorhanden. Bitte prüfe, ob du diese Seite wirklich erstellen/bearbeiten willst.",
        "undo-summary-username-hidden": "Änderung $1 eines versteckten Benutzers rückgängig gemacht.",
        "cantcreateaccounttitle": "Das Benutzerkonto kann nicht erstellt werden",
        "cantcreateaccount-text": "Die Erstellung eines Benutzerkontos von der IP-Adresse '''($1)''' aus wurde durch [[User:$3|$3]] gesperrt.\n\nGrund der Sperre: ''$2''",
-       "cantcreateaccount-range-text": "Das Erstellen von Benutzerkonten von IP-Adressen im Bereich '''$1''', der deine IP-Adresse ('''$4''') enthält, wurde von [[User:$3|$3]] gesperrt.\n\nDer angegebene Grund von $3 lautet: ''$2''",
+       "cantcreateaccount-range-text": "Das Erstellen von Benutzerkonten von IP-Adressen im Bereich <strong>$1</strong>, der deine IP-Adresse (<strong>$4</strong>) enthält, wurde von [[User:$3|$3]] gesperrt.\n\nDer angegebene Grund von $3 lautet: <em>$2</em>",
        "viewpagelogs": "Logbücher dieser Seite anzeigen",
        "nohistory": "Zu dieser Seite ist keine Versionsgeschichte vorhanden.",
        "currentrev": "Aktuelle Version",
        "revdelete-unsuppress": "Einschränkungen für wiederhergestellte Versionen aufheben",
        "revdelete-log": "Grund:",
        "revdelete-submit": "Auf gewählte {{PLURAL:$1|Version|Versionen}} anwenden",
-       "revdelete-success": "'''Die Versionsansicht wurde aktualisiert.'''",
+       "revdelete-success": "Die Versionsansicht wurde aktualisiert.",
        "revdelete-failure": "'''Die Versionssichtbarkeit konnte nicht aktualisiert werden:'''\n$1",
-       "logdelete-success": "'''Logbuchansicht erfolgreich geändert.'''",
+       "logdelete-success": "Logbuchansicht geändert.",
        "logdelete-failure": "'''Logbuchsichtbarkeit kann nicht geändert werden:'''\n$1",
        "revdel-restore": "Sichtbarkeit ändern",
        "pagehist": "Versionsgeschichte",
        "userrights": "Benutzerrechte verwalten",
        "userrights-lookup-user": "Gruppenzugehörigkeit verwalten",
        "userrights-user-editname": "Benutzername:",
-       "editusergroup": "{{GENDER:$1|Benutzerrechte}} bearbeiten",
+       "editusergroup": "{{GENDER:$1|Benutzergruppen}} verwalten",
        "editinguser": "Ändere Benutzerrechte {{GENDER:$1|des Benutzers|der Benutzerin}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Benutzer-Gruppenzugehörigkeit bearbeiten",
        "saveusergroups": "{{GENDER:$1|Gruppenzugehörigkeit}} ändern",
        "userrights-changeable-col": "Gruppenzugehörigkeit, die du ändern kannst",
        "userrights-unchangeable-col": "Gruppenzugehörigkeit, die du nicht ändern kannst",
        "userrights-conflict": "Benutzerrechteänderungskonflikt! Bitte überprüfe und bestätige deine Änderungen.",
-       "userrights-removed-self": "Du hast deine eigenen Rechte erfolgreich entfernt. Du kannst nicht länger auf diese Seite zugreifen.",
+       "userrights-removed-self": "Du hast deine eigenen Rechte entfernt. Du kannst nicht länger auf diese Seite zugreifen.",
        "group": "Gruppe:",
        "group-user": "Benutzer",
        "group-autoconfirmed": "Automatisch bestätigte Benutzer",
        "right-editprotected": "Seiten bearbeiten, die als „{{int:protect-level-sysop}}“ geschützt sind",
        "right-editsemiprotected": "Seiten bearbeiten, die als „{{int:protect-level-autoconfirmed}}“ geschützt sind",
        "right-editcontentmodel": "Das Inhaltsmodell einer Seite bearbeiten",
-       "right-editinterface": "Benutzeroberfläche bearbeiten",
+       "right-editinterface": "Systemnachrichten und Benutzeroberflächen bearbeiten",
        "right-editusercssjs": "Fremde CSS- und JavaScript-Dateien bearbeiten",
        "right-editusercss": "Fremde CSS-Dateien bearbeiten",
        "right-edituserjs": "Fremde JavaScript-Dateien bearbeiten",
        "right-patrolmarks": "Kontrollmarkierungen in den letzten Änderungen sehen",
        "right-unwatchedpages": "Liste der unbeobachteten Seiten ansehen",
        "right-mergehistory": "Versionsgeschichten von Seiten vereinen",
-       "right-userrights": "Benutzerrechte bearbeiten",
-       "right-userrights-interwiki": "Benutzerrechte in anderen Wikis bearbeiten",
+       "right-userrights": "Benutzerrechte verwalten",
+       "right-userrights-interwiki": "Benutzerrechte in anderen Wikis verwalten",
        "right-siteadmin": "Datenbank sperren und entsperren",
        "right-override-export-depth": "Exportiere Seiten einschließlich verlinkter Seiten bis zu einer Tiefe von 5",
        "right-sendemail": "E-Mails an andere Benutzer senden",
        "action-autopatrol": "eigene Bearbeitungen als kontrolliert zu markieren",
        "action-unwatchedpages": "die Liste der unbeobachteten Seiten einzusehen",
        "action-mergehistory": "die Versionsgeschichten von Seiten zu vereinen",
-       "action-userrights": "Benutzerrechte zu ändern",
+       "action-userrights": "Benutzerrechte zu verwalten",
        "action-userrights-interwiki": "die Rechte von Benutzern in anderen Wikis zu ändern",
        "action-siteadmin": "die Datenbank zu sperren oder freizugeben",
        "action-sendemail": "E-Mails zu senden",
        "recentchanges-label-bot": "Änderung durch einen Bot",
        "recentchanges-label-unpatrolled": "Nicht-kontrollierte Änderung",
        "recentchanges-label-plusminus": "Die Änderung der Seitengröße in Bytes",
-       "recentchanges-legend-heading": "'''Legende:'''",
+       "recentchanges-legend-heading": "<strong>Legende:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (siehe auch die [[Special:NewPages|Liste neuer Seiten]])",
        "recentchanges-legend-plusminus": "''(±123)''",
        "recentchanges-submit": "Anzeigen",
        "recentchangeslinked-page": "Seite:",
        "recentchangeslinked-to": "Zeige nur Änderungen an Seiten, die auf diese Seite verlinken",
        "recentchanges-page-added-to-category": "[[:$1]] zur Kategorie hinzugefügt",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] und {{PLURAL:$2|eine weitere Seite|$2 weitere Seiten}} zur Kategorie hinzugefügt",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] und [[Special:WhatLinksHere/$1|{{PLURAL:$2|eine weitere Seite|$2 weitere Seiten}}]] zur Kategorie hinzugefügt",
        "recentchanges-page-removed-from-category": "[[:$1]] von der Kategorie entfernt",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] und {{PLURAL:$2|eine weitere Seite|$2 weitere Seiten}} von der Kategorie entfernt",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] und [[Special:WhatLinksHere/$1|{{PLURAL:$2|eine weitere Seite|$2 weitere Seiten}}]] von der Kategorie entfernt",
        "autochange-username": "Automatische MediaWiki-Änderung",
        "upload": "Datei hochladen",
        "uploadbtn": "Datei hochladen",
        "backend-fail-read": "Die Datei $1 konnte nicht gelesen werden.",
        "backend-fail-create": "Die Datei $1 konnte nicht gespeichert werden.",
        "backend-fail-maxsize": "Die Datei $1 konnte nicht gespeichert werden, da sie größer als {{PLURAL:$2|ein Byte|$2 Bytes}} ist.",
-       "backend-fail-readonly": "Das Speicher-Backend „$1“ befindet sich derzeit im Lesemodus. Der angegebene Grund lautet: „$2“",
+       "backend-fail-readonly": "Das Speicher-Backend „$1“ befindet sich derzeit im Lesemodus. Der angegebene Grund lautet: <em>$2</em>",
        "backend-fail-synced": "Die Datei „$1“ befindet sich, innerhalb des internen Speicher-Backends, in einem inkonsistenten Zustand.",
        "backend-fail-connect": "Es konnte keine Verbindung zum Speicher-Backend „$1“ hergestellt werden.",
        "backend-fail-internal": "Im Speicher-Backend „$1“ ist ein unbekannter Fehler aufgetreten.",
        "uploadstash-summary": "Diese Seite ermöglicht den Zugriff auf Dateien, die hochgeladen wurden, bzw. gerade hochgeladen werden, aber noch nicht auf dem Wiki publiziert wurden. Die Dateien sind ausschließlich für den hochladenden Benutzer einsehbar.",
        "uploadstash-clear": "Die vorab gespeicherten Dateien entfernen",
        "uploadstash-nofiles": "Es sind keine vorab gespeicherten Dateien vorhanden.",
-       "uploadstash-badtoken": "Das Entfernen der vorab gespeicherten Dateien war erfolglos, vielleicht weil deine Sitzungsdaten abgelaufen sind. Bitte versuche es erneut.",
-       "uploadstash-errclear": "Das Entfernen der vorab gespeicherten Dateien war erfolglos.",
+       "uploadstash-badtoken": "Das Entfernen der vorab gespeicherten Dateien ist fehlgeschlagen, da vielleicht deine Sitzungsdaten abgelaufen sind. Bitte versuche es erneut.",
+       "uploadstash-errclear": "Das Entfernen der vorab gespeicherten Dateien ist fehlgeschlagen.",
        "uploadstash-refresh": "Liste der Dateien aktualisieren",
        "invalid-chunk-offset": "Ungültiger Startpunkt",
        "img-auth-accessdenied": "Zugriff verweigert",
        "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.",
        "deleteprotected": "Du kannst diese Seite nicht löschen, da sie geschützt wurde.",
-       "deleting-backlinks-warning": "'''Warnung:''' Es verweisen noch [[Special:WhatLinksHere/{{FULLPAGENAME}}|andere Seiten]] auf diese zu löschende Seite oder sie ist noch an anderer Stelle eingebunden.",
+       "deleting-backlinks-warning": "<strong>Warnung:</strong> Es verweisen noch [[Special:WhatLinksHere/{{FULLPAGENAME}}|andere Seiten]] auf diese zu löschende Seite oder sie ist noch an anderer Stelle eingebunden.",
        "rollback": "Zurücksetzen der Änderungen",
        "rollbacklink": "Zurücksetzen",
        "rollbacklinkcount": "{{PLURAL:$1|Eine Version|$1 Versionen}} zurücksetzen",
        "rollbackfailed": "Zurücksetzen gescheitert",
        "cantrollback": "Die Änderung kann nicht zurückgesetzt werden, da es keine früheren Autoren gibt.",
        "alreadyrolled": "Das Zurücksetzen der Änderungen von [[User:$2|$2]] ([[User talk:$2|Diskussion]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) an [[:$1]] ist gescheitert, da in der Zwischenzeit ein anderer Benutzer die Seite geändert hat.\n\nDie letzte Änderung stammt von [[User:$3|$3]] ([[User talk:$3|Diskussion]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Die Änderungszusammenfassung lautet: ''„$1“''.",
+       "editcomment": "Die Änderungszusammenfassung lautet: <em>$1</em>.",
        "revertpage": "Änderungen von [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussion]]) wurden auf die letzte Version von [[User:$1|$1]] zurückgesetzt",
        "revertpage-nouser": "Änderungen von einem versteckten Benutzer rückgängig gemacht und letzte Version von {{GENDER:$1|[[User:$1|$1]]}} wiederhergestellt",
        "rollback-success": "Die Änderungen von $1 wurden rückgängig gemacht und die letzte Version von $2 wurde wiederhergestellt.",
        "changecontentmodel-title-label": "Seitentitel",
        "changecontentmodel-model-label": "Neues Inhaltsmodell",
        "changecontentmodel-reason-label": "Grund:",
+       "changecontentmodel-submit": "Ändern",
        "changecontentmodel-success-title": "Das Inhaltsmodell wurde geändert",
        "changecontentmodel-success-text": "Der Inhaltstyp von [[:$1]] wurde geändert.",
        "changecontentmodel-cannot-convert": "Der Inhalt von [[:$1]] kann nicht zum Typ $2 konvertiert werden.",
        "changecontentmodel-nodirectediting": "Das Inhaltsmodell „$1“ unterstützt keine direkten Bearbeitungen",
        "log-name-contentmodel": "Inhaltsmodell-Änderungs-Logbuch",
        "log-description-contentmodel": "Ereignisse bezüglich den Inhaltsmodellen einer Seite",
+       "logentry-contentmodel-new": "$1 {{GENDER:$2|erstellte}} die Seite $3 mit einem Nicht-Standard-Inhaltsmodell „$5“",
        "logentry-contentmodel-change": "$1 {{GENDER:$2|änderte}} das Inhaltsmodell der Seite $3 von „$4“ nach „$5“",
        "logentry-contentmodel-change-revertlink": "zurücksetzen",
        "logentry-contentmodel-change-revert": "zurücksetzen",
        "movepagetext-noredirectfixer": "Mit untenstehendem Formular kannst du eine Seite umbenennen, indem du sie mitsamt allen Versionen auf einen neuen Titel verschiebst.\nDer alte Titel wird danach zum neuen weiterleiten.\nStelle sicher, dass du im Anschluss alle [[Special:DoubleRedirects|doppelten]] oder [[Special:BrokenRedirects|defekten Weiterleitungen]] überprüfst.\nDu bist dafür verantwortlich, dass Links weiterhin auf das korrekte Ziel verweisen.\n\nDie Seite wird <strong>nicht</strong> verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt, es sei denn, diese ist eine Weiterleitung ohne Versionsgeschichte.\nDies bedeutet, dass du die Umbenennung rückgängig machen kannst, sofern du einen Fehler gemacht hast. Du kannst hingegen keine existierende Seite überschreiben.\n\n<strong>Hinweis:</strong>\nDie Verschiebung kann weitreichende und unerwartete Folgen für häufig besuchte Seiten haben.\nDu solltest daher die Konsequenzen verstanden haben, bevor du jetzt fortfährst.",
        "movepagetalktext": "Falls du dieses Kästchen aktivierst, wird die dazugehörige Diskussionsseite automatisch auf den neuen Titel verschoben, sofern nicht bereits eine nicht-leere Diskussionsseite dort vorhanden ist.\n\nIn diesem Fall musst du die Seite manuell verschieben oder zusammenführen, falls erforderlich.",
        "moveuserpage-warning": "'''Warnung:''' Du bist dabei, eine Benutzerseite zu verschieben. Bitte bedenke, dass dadurch nur die Benutzerseite verschoben, '''nicht''' aber der Benutzer umbenannt wird.",
-       "movecategorypage-warning": "<strong>Warnung:</strong> Du bist gerade dabei, eine Kategorieseite zu verschieben. Bitte sei dir bewusst, dass nur die Seite verschoben wird. Alle Seiten in der alten Kategorie werden <em>nicht</em> neu kategorisiert.",
+       "movecategorypage-warning": "<strong>Warnung:</strong> Du bist gerade dabei, eine Kategorieseite zu verschieben. Bitte sei dir bewusst, dass nur die Seite verschoben wird. Alle der alten Kategorie zugeordneten Seiten werden <em>nicht</em> neu kategorisiert.",
        "movenologintext": "Du musst ein registrierter Benutzer und [[Special:UserLogin|angemeldet]] sein, um eine Seite zu verschieben.",
        "movenotallowed": "Du hast nicht die erforderliche Berechtigung, um Seiten verschieben zu können.",
        "movenotallowedfile": "Du hast nicht die erforderliche Berechtigung, um Dateien verschieben zu können.",
        "tags-delete-not-allowed": "Markierungen, die von einer Erweiterung definiert werden, können nicht gelöscht werden, außer die Erweiterung erlaubt es ausdrücklich.",
        "tags-delete-not-found": "Die Markierung „$1“ ist nicht vorhanden.",
        "tags-delete-too-many-uses": "Die Markierung „$1“ wird bei mehr als {{PLURAL:$2|einer Version|$2 Versionen}} verwendet und kann deshalb nicht gelöscht werden.",
-       "tags-delete-warnings-after-delete": "Die Markierung „$1“ wurde erfolgreich gelöscht, aber die {{PLURAL:$2|folgende Warnung ist|folgenden Warnungen sind}} aufgetreten:",
+       "tags-delete-warnings-after-delete": "Die Markierung „$1“ wurde gelöscht, aber die {{PLURAL:$2|folgende Warnung ist|folgenden Warnungen sind}} aufgetreten:",
        "tags-activate-title": "Markierung aktivieren",
        "tags-activate-question": "Du bist dabei, die Markierung „$1“ zu aktivieren.",
        "tags-activate-reason": "Grund:",
        "tags-edit-revision-legend": "Markierungen von {{PLURAL:$1|dieser Version|allen $1 Versionen}} hinzufügen oder entfernen",
        "tags-edit-logentry-legend": "Markierungen von {{PLURAL:$1|diesem Logbucheintrag|allen $1 Logbucheinträgen}} hinzufügen oder entfernen",
        "tags-edit-existing-tags": "Vorhandene Markierungen:",
-       "tags-edit-existing-tags-none": "''Keine''",
+       "tags-edit-existing-tags-none": "<em>Keine</em>",
        "tags-edit-new-tags": "Neue Markierungen:",
        "tags-edit-add": "Diese Markierungen hinzufügen:",
        "tags-edit-remove": "Diese Markierungen entfernen:",
        "tags-edit-reason": "Grund:",
        "tags-edit-revision-submit": "Änderungen an {{PLURAL:$1|diese Version|$1 Versionen}} anwenden",
        "tags-edit-logentry-submit": "Änderungen an {{PLURAL:$1|diesen Logbucheintrag|$1 Logbucheinträgen}} anwenden",
-       "tags-edit-success": "Die Änderungen wurden erfolgreich angewandt.",
+       "tags-edit-success": "Die Änderungen wurden angewandt.",
        "tags-edit-failure": "Die Änderungen konnten nicht angewandt werden:\n$1",
        "tags-edit-nooldid-title": "Ungültige Zielversion",
        "tags-edit-nooldid-text": "Du hast entweder keine Zielversion angegeben, für die diese Funktion ausgeführt werden soll oder die angegebene Version ist nicht vorhanden.",
        "default-skin-not-found": "Hoppla! Die mit <code>$wgDefaultSkin</code> als <code>$1</code>&nbsp;für dein Wiki definierte Standardbenutzeroberfläche ist nicht verfügbar.\n\n{{PLURAL:$4|Die folgende Benutzeroberfläche scheint|Die folgenden Benutzeroberflächen scheinen}} vorhanden zu sein:\n\n$2\n\nSiehe hierzu das [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de Benutzerhandbuch zur Konfiguration von Benutzeroberflächen].\n\n; Sofern du MediaWiki gerade installiert hast\n: Du hast MediaWiki vermutlich mit Hilfe von Git oder den Quellcode direkt anhand einer anderen Methode installiert. Das aktuelle Problem war deshalb zu erwarten. Installiere zumindest eine im [https://www.mediawiki.org/wiki/Category:All_skins Verzeichnis der Benutzeroberflächen] enthaltene Benutzeroberfläche indem du:\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Git zum Herunterladen von Benutzeroberflächen verwendest].\n:* die Dateiveröffentlichungen einzelner Benutzeroberflächen aus [https://www.mediawiki.org/wiki/Special:SkinDistributor MediaWiki.org] herunterlädst und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopierst,\n:* die [https://www.mediawiki.org/wiki/Download/de Dateiveröffentlichung von MediaWiki] herunterlädst, die verschiedene Benutzeroberflächen sowie Erweiterungen enthält. Du kannst das dort enthaltene Verzeichnis <code>skins/</code> Verzeichnis nutzen und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopieren.\n\n; Sofern du MediaWiki gerade aktualisiert hast\n: Bei MediaWiki 1.24 und neueren Versionen werden die installierten Benutzeroberflächen nicht mehr automatisch aktiviert (siehe das [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Benutzerhandbuch]). Du kannst die {{PLURAL:$5|folgende Zeile|folgenden Zeilen}} in die Datei <code>LocalSettings.php</code> einfügen, um {{PLURAL:$5|die installierte Benutzeroberfläche|alle installierten Benutzeroberflächen}} zu aktivieren:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Falls du gerade die Datei <code>LocalSettings.php</code> geändert hast\n: Überprüfe die Namen der Benutzeroberflächen auf Tippfehler.",
        "default-skin-not-found-no-skins": "Hoppla! Die mit <code>$wgDefaultSkin</code> als <code>$1</code>&nbsp;für dein Wiki definierte Standardbenutzeroberfläche ist nicht verfügbar.\n\nDu hast keine Benutzeroberfläche installiert.\n\n; Sofern du MediaWiki gerade installiert oder aktualisiert hast\n: Du hast MediaWiki vermutlich mit Hilfe von Git oder den Quellcode direkt anhand einer anderen Methode installiert. Das aktuelle Problem war deshalb zu erwarten, da MediaWiki 1.24 und neuere Versionen keine Benutzeroberflächen im Hauptrepositorium enthalten. Installiere zumindest eine im [https://www.mediawiki.org/wiki/Category:All_skins Verzeichnis der Benutzeroberflächen] enthaltene Benutzeroberfläche indem du:\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Git zum Herunterladen von Benutzeroberflächen verwendest].\n:* die Dateiveröffentlichungen einzelner Benutzeroberflächen aus [https://www.mediawiki.org/wiki/Special:SkinDistributor MediaWiki.org] herunterlädst und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopierst,\n:* die [https://www.mediawiki.org/wiki/Download/de Dateiveröffentlichung von MediaWiki] herunterlädst, die verschiedene Benutzeroberflächen sowie Erweiterungen enthält. Du kannst das dort enthaltene Verzeichnis <code>skins/</code> Verzeichnis nutzen und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopieren.\n: Siehe hierzu das [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de Benutzerhandbuch zur Konfiguration von Benutzeroberflächen].",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiviert)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''deaktiviert''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>deaktiviert</strong>)",
        "mediastatistics": "Medienstatistiken",
        "mediastatistics-summary": "Statistiken über hochgeladene Dateitypen. Dies beinhaltet nur die aktuellste Version einer Datei. Alte oder gelöschte Dateiversionen sind ausgeschlossen.",
        "mediastatistics-nfiles": "$1 ($2 %)",
index 4aed463..059ce8b 100644 (file)
        "views": "Asayışi",
        "toolbox": "Haceti",
        "userpage": "Pela karberi bıvêne",
-       "projectpage": "Pela procey bıvêne",
+       "projectpage": "Pela proceyi bıvêne",
        "imagepage": "Pela dosya bımocne",
        "mediawikipage": "Pela mesaci bımocne",
        "templatepage": "Pela şabloni bımocne",
        "nstab-user": "Pela karberi",
        "nstab-media": "Pela medya",
        "nstab-special": "Pela xase",
-       "nstab-project": "Pela procey",
+       "nstab-project": "Pela proceyi",
        "nstab-image": "Dosya",
        "nstab-mediawiki": "Mesac",
        "nstab-template": "Şablon",
        "delete-hook-aborted": "Esterıtışi terefê çengeli ra ibtal bi.\nQet tesrih beyan nêbi.",
        "no-null-revision": "Qandé \"$1\" zew rewizyono newe névıraziya.",
        "badtitle": "Sernameo xırabın",
-       "badtitletext": "Sernamey pela ke şıma waşt, nêvêrd, thalo/vengo ya ki zıwano miyanêno ğelet gırêdae ya ki sernamey wiki.\nBeno ke, tede yew ya zi zêdê işareti estê ke sernaman de nêxebetiyenê.",
+       "badtitletext": "Sernameyê pela ke şıma waşt, nêvêrd, vengo ya zi zıwano miyanêno ğelet gırêdaye ya zi sernameyê wiki.\nBeno ke, tede yew ya zi zêdê işareti estê ke sernameyan de nêxebetiyenê.",
        "perfcached": "Datay cı ver hazır biye. No semedê ra nıkayin niyo! tewr zaf {{PLURAL:$1|netice|$1 netice}} debêno de",
        "perfcachedts": "Cêr de malumatê nımıteyi esti, demdê newe kerdışo peyın: $1. Tewr zaf {{PLURAL:$4|netice|$4 neticey cı}} debyayo de",
        "querypage-no-updates": "Rocanebiyayışê na pele nıka cadayiyê.\nDayiyi tiya nıka newe nêbenê.",
        "myprivateinfoprotected": "Ğısusi malumatana ğo timar kerdışire icazeta şıma çıniya.",
        "mypreferencesprotected": "Terciha timar kerdışire icazeta şıam çıniya.",
        "ns-specialprotected": "Pelê xısusiyi nênê vurnayış.",
-       "titleprotected": "Eno [[User:$1|$1]] zerreyê ena peli nişeno vuriye.\nSebeb: \"''$2''\".",
+       "titleprotected": "No sername terefê [[User:$1|$1]] ra, afernayene ra şevekiyayo.\nSebebê xo <em>$2</em> dero.",
        "filereadonlyerror": "Dosyay vurnayışê \"$1\" nê abê no lakin depoy dosya da \"$2\" mod dê  salt wendi deyo.\n\nXızmetkarê  kılitkerdışi wa bewni ro enay wa çımra ravyarno: \"$3\".",
        "invalidtitle-knownnamespace": "Canemey \"$2\" u metnê \"$3\" xırabo",
        "invalidtitle-unknownnamespace": "Sernameye nêşınasiya yana amraiya canameyo  $1 u metno \"$2\" xırab",
        "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.",
+       "botpasswords-label-cancel": "Bıtexelne",
+       "botpasswords-label-delete": "Bestere",
        "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",
        "newarticle": "(Newe)",
        "newarticletext": "To yew gıre tıkna be ra yew pela ke hewna çıniya.\nSeba afernayışê pele ra, qutiya metnê cêrêni bıgurene (seba melumati qaytê [$1 pela peşti] ke).\nEke be ğeletine ameya tiya, wa gocega <strong>peyser</strong>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": "Ena pele de hewna theba çıniyo.\nTı şenay zerreyê pelanê binan de [[Special:Search/{{PAGENAME}}|seba sernameyê ena pele cı geyre]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} qeydan miyan de cı geyre],\nya zi [{{fullurl:{{FULLPAGENAME}}|action=edit}} ena pele bıvurne]</span>.",
+       "noarticletext": "Ena pele de hewna theba çıniyo.\nTı şenay zerreyê pelanê binan de [[Special:Search/{{PAGENAME}}|seba sernameyê ena pele cı geyre]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} qeydan miyan de cı geyre],\nya zi [{{fullurl:{{FULLPAGENAME}}|action=edit}} ena pele vıraze]</span>.",
        "noarticletext-nopermission": "Ena pele de hewna theba çıniyo.\nTı ş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 \"{{FULLPAGENAME}}\" dı çıniyo.\n\nNo normal de tarix dê pelanê besterneyan dı ena xırabin asena.\nDetayê besternayışi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} tiya dı] aseno.",
        "userpage-userdoesnotexist": "Hesabê karberi \"<nowiki>$1</nowiki>\" qeyd nêbiyo.\nKerem ke, tı ke wazenay na pele bafernê/bıvurnê, qontrol ke.",
        "recentchanges-label-bot": "Eno vurnayış terefê yew boti ra vıraziyo",
        "recentchanges-label-unpatrolled": "Eno vurnayış hewna dewriya nêbiyo",
        "recentchanges-label-plusminus": "Ebadê pele de bazê bayti de vayeyê cı",
-       "recentchanges-legend-heading": "'''Kıtabek:'''",
+       "recentchanges-legend-heading": "<strong>Kıtabek:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|Lista pelanê neweyan]] zi bıvêne)",
        "recentchanges-legend-plusminus": "''(±123)''",
        "rcnotefrom": "Cêr de <strong>$2</strong> ra nata vurnayışiyê asenê (tewr vêşi <strong>$1</strong> asenê).",
        "mailnologin": "adresa erşawıtışi/ruşnayişi çina.",
        "mailnologintext": "qey karberanê binan re e-posta erşawıtış de gani şıma [[Special:UserLogin|hesab aker]]ê [[Special:Preferences|pelê tercihani]] de gani yew e-postayo meqbul bıbo.",
        "emailuser": "Ena karberi rê mesac bırse",
-       "emailuser-title-target": "Na E-postaya {{GENDER:$1|karberi}}ya",
+       "emailuser-title-target": "Nê {{GENDER:$1|karberi}} rê e-poste bırışe",
        "emailuser-title-notarget": "E-postaya karberi",
        "emailpagetext": "Şıma şenê nê formê cêrêni nê {{GENDER:$1|karber}}i rê e-poste rıştış de bıgurenê.\n[[Special:Preferences|Tercihanê şımayê karberi]] de adresa e-posteya ke şıma daya, na adrese qısmê adresa e-postey de \"kami ra\" asena, no sebeb ra gırewtoğ şeno direkt cewab bıdero şıma.",
        "defemailsubject": "\"$1\" ra e-postay {{SITENAME}} amê",
        "rollbackfailed": "Peyserardış nêbi",
        "cantrollback": "karbero peyin têna paşt dayo, no semedi ra vuriyayiş tepiya nêgeriyeni.",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|Talk]]{{int:pipe-separator}} hetê [[Special:Contributions/$2|{{int:contribslink}}]]) ra pelê ıney[[:$1]] de vurnayiş biyo u no vurnayiş tepiya nêgeriyeno;\nyewna ten pel de vurnayiş kerdo u pel tepiya nêgeriyeno.\n\noyo ke vurnayişo peyin kerdo: [[User:$3|$3]] ([[User talk:$3|Talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "kılmnuşteyê vurnayişibi: \"''$1''\".",
+       "editcomment": "Xulasaya vurnayışi: <em>$1</em>.",
        "revertpage": "Hetê [[Special:Contributions/$2|$2]] ([[User talk:$2|Mesac]]) ra vurnayiş biyo u ney vurnayişi tepiya geriyayo u no [[User:$1|$1]] kes o ke cuwa ver revizyon kerdo revizyonê no kesi tepiya anciyayo.",
        "revertpage-nouser": "No keso ke vuriyayiş kerdo vuriyayişé{{GENDER:$1|[[User:$1|$1]]}} ker o",
        "rollback-success": "vurnayişê no kesi $1 tepiya geriyayo u hetê no\n$2 kesi ra cıwa ver o ke revizyon biyo no revizyon tepiya anciyayo.",
        "javascripttest-pagetext-frameworks": "Şıma ra reca xorê cêr ra test weçinê:$1",
        "javascripttest-pagetext-skins": "Testa akarfinayışi rê verqayt:",
        "javascripttest-qunit-intro": "Mediawiki.org dı [dokumanê $1] bıvinê.",
-       "tooltip-pt-userpage": "Pela şımaya karberi",
+       "tooltip-pt-userpage": "Pela {{GENDER:|şımaya karberi}}",
        "tooltip-pt-anonuserpage": "pelê karberê IPyi",
-       "tooltip-pt-mytalk": "Pela toya werênayışi",
+       "tooltip-pt-mytalk": "Pela {{GENDER:|toya}} werênayışi",
        "tooltip-pt-anontalk": "vurnayiş ê ke no Ipadresi ra biyo muneqeşa bıker",
-       "tooltip-pt-preferences": "Tercihi",
+       "tooltip-pt-preferences": "Tercihê {{GENDER:|şıma}}",
        "tooltip-pt-watchlist": "Lista pelanê ke to gırewtê seyrkerdış",
-       "tooltip-pt-mycontris": "Listeya dekerdışan de şıma",
+       "tooltip-pt-mycontris": "Yew lista iştırakanê {{GENDER:|şıma}}",
        "tooltip-pt-login": "Mayê şıma ronıştış akerdışi rê dawet keme; labelê ronıştış mecburi niyo",
        "tooltip-pt-logout": "Bıveciye",
        "tooltip-pt-createaccount": "Şıma rê tewsiyey ma xorê jew hesab akerê. Fına zi hesab akerdış mecburi niyo.",
        "tooltip-p-logo": "Şo pela seri",
        "tooltip-n-mainpage": "Şo pela seri",
        "tooltip-n-mainpage-description": "Şo pela seri",
-       "tooltip-n-portal": "Heqa procey de, çı şenay bıkerê, çı koti vêniyeno",
+       "tooltip-n-portal": "Heqa proceyi 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é",
        "tooltip-t-recentchangeslinked": "Vurnayışê peyênê pelanê ke ena pela ra gırê biyê",
        "tooltip-feed-rss": "RSS feed qe ena pele",
        "tooltip-feed-atom": "Qe ena pele atom feed",
-       "tooltip-t-contributions": "Listey dekerdışan de karberi bıvin",
+       "tooltip-t-contributions": "Yew lista iştırakanê {{GENDER:$1|nê karberi}}",
        "tooltip-t-emailuser": "Ena karber ri yew email bışırav",
        "tooltip-t-upload": "Dosya bar ke",
        "tooltip-t-specialpages": "Yew lista pelanê xasanê pêroyinan",
        "tooltip-ca-nstab-user": "Pela karberi bıvêne",
        "tooltip-ca-nstab-media": "Pela medya bıvêne",
        "tooltip-ca-nstab-special": "Na pelaya xas a, şıma nêşenê sero vurnayış bıkerê",
-       "tooltip-ca-nstab-project": "Pela procey bıvêne",
+       "tooltip-ca-nstab-project": "Pela proceyi bıvêne",
        "tooltip-ca-nstab-image": "Pera dosyayer bıvin",
        "tooltip-ca-nstab-mediawiki": "Mesacê sistemi bıvêne",
        "tooltip-ca-nstab-template": "Şabloni bıvin",
index 50f5994..0817b87 100644 (file)
        "myprivateinfoprotected": "Njamaš pšawo swóje priwatne informacije wobźěłaś.",
        "mypreferencesprotected": "Njamaš pšawo swóje nastajenja wobźěłaś.",
        "ns-specialprotected": "Njejo móžno, boki w rumje {{ns:special}} wobźěłaś.",
-       "titleprotected": "Bok z toś tym mjenim bu wót [[User:$1|$1]] pśeśiwo napóranjeju šćitany. Pśicyna jo ''$2''.",
+       "titleprotected": "Bok z toś tym mjenim bu wót [[User:$1|$1]] pśeśiwo napóranjeju šćitany. Pśicyna jo <em>$2</em>.",
        "filereadonlyerror": "Njejo móžno dataju \"$1\" změniś, dokulaž datajowy repozitorium \"$2\" jo jano cytajobny.\n\nAdministrator, kenž jo jen zastajił, jo toś tu pśicynu pódał: \"$3\".",
        "invalidtitle-knownnamespace": "Njepłaśiwy titel z mjenjowym rumom \"$2\" a tekstom \"$3\"",
        "invalidtitle-unknownnamespace": "Njepłaśiwy titel z njeznatym mjenjowym rumom $1 a tekstom \"$2\"",
        "createaccountreason": "Pśicyna:",
        "createacct-reason": "Pśicyna",
        "createacct-reason-ph": "Cogodla załožujoš druge konto?",
-       "createacct-captcha": "Wěstotna kontrola",
-       "createacct-imgcaptcha-ph": "Zapódaj tekst, kótaryž wiźeš dołojce",
        "createacct-submit": "Twójo konto załožyś",
        "createacct-another-submit": "Druge konto załožyś",
        "createacct-benefit-heading": "{{SITENAME}} jo se wót luźi ako ty napórała.",
        "passwordreset-emailtext-ip": "Něchten (nejskerjej ty, z IP-adresu $1) jo anulěrowanje gronidła za {{GRAMMAR:akuzatiw|{{SITENAME}}}} pominał ($4).  {{PLURAL:$3|Slědujuce wužywarske konto jo|Slědujucej wužywarskej konśe stej|Slědujuce wužywarske konta su}} z toś tej e-mailoweju adresu {{PLURAL:$3|zwězane|zwězanej|zwězane}}:\n\n$2\n\n{{PLURAL:$3|Toś to nachylne gronidło spadnjo|Toś tej nachylnej gronidle spadnjotej|Toś te nachylne gronidła spadnu}} za {{PLURAL:$5|jaden źeń|$5 dnja|$5 dny|$5 dnjow}}.\nTy by měł se něnto pśizjawiś a nowe gronidło wustajiś. Jolic něchten drugi jo toś to napšašowanje pósłał, abo jolic sy se zasej na spócetne gronidło spomnjeł a wěcej njocoš jo změniś, móžoš toś to zdźělenje ignorěrowaś a swójo stare gronidło dalej wužywaś.",
        "passwordreset-emailtext-user": "Wužywaŕ $1 jo anulěrowanje gronidła za {{GRAMMAR:akuzatiw|{{SITENAME}}}} pominał ($4).  {{PLURAL:$3|Slědujuce wužywarske konto jo|Slědujucej wužywarskej konśe stej|Slědujuce wužywarske konta su}} z toś tej e-mailoweju adresu {{PLURAL:$3|zwězane|zwězanej|zwězane}}:\n\n$2\n\n{{PLURAL:$3|Toś to nachylne gronidło spadnjo|Toś tej nachylnej gronidle spadnjotej|Toś te nachylne gronidła spadnu}} za {{PLURAL:$5|jaden źeń|$5 dnja|$5 dny|$5 dnjow}}.\nTy by měł se něnto pśizjawiś a nowe gronidło wustajiś. Jolic něchten drugi jo toś to napšašowanje pósłał, abo jolic sy se zasej na spócetne gronidło spomnjeł a wěcej njocoš jo změniś, móžoš toś to zdźělenje ignorěrowaś a swójo stare gronidło dalej wužywaś.",
        "passwordreset-emailelement": "Wužywarske mě: \n$1\n\nNachylne gronidło: \n$2",
-       "passwordreset-emailsent": "E-mail za anulěrowanje gronidła jo se pósłała.",
+       "passwordreset-emailsentemail": "E-mail za anulěrowanje gronidła jo se pósłała.",
        "passwordreset-emailsent-capture": "E-mail za anulěrowanje gronidła jo se pósłała, kótaraž pokazujo se dołojce.",
        "passwordreset-emailerror-capture": "E-mail za anulěrowanje gronidła jo se napórała, kótaraž se dołojce pokazujo, ale słanje {{GENDER:$2|wužywarjeju|wužywarce}} njejo se raźiło: $1",
        "changeemail": "E-mailowu adresu změniś",
-       "changeemail-text": "Wupołni toś ten formular, aby swóju e-mailowu adresu změnił. Musyš swójo gronidło zapódaś, aby toś tu změnu wobkšuśił.",
+       "changeemail-header": "Kontowu e-mailowu adresu změniś",
        "changeemail-no-info": "Dejš pśizjawjony byś, aby direktny pśistup na toś ten bok měł.",
        "changeemail-oldemail": "Aktualna e-mailowa adresa:",
        "changeemail-newemail": "Nowa e-mailowa adresa:",
        "undo-summary-username-hidden": "Změna $1 schowanego wužywarja jo se anulěrowała",
        "cantcreateaccounttitle": "Njejo móžno wužywarske konto wutwóriś",
        "cantcreateaccount-text": "Wutwórjenje wužywarskego konta z toś teje IP adresy ('''$1''') jo blokěrowane pśez [[User:$3|$3]].\n\nPśicyna, kótaruž $3 jo zapódał, jo ''$2''.",
-       "cantcreateaccount-range-text": "Napóranje kontow z IP-adresow we wobcerku '''$1''', kótaryž wopśimujo twóju IP-adresu ('''$4'''), jo se wót [[User:$3|$3]] zablokěrowało.\n\nPśicyna pódana wót $3 jo ''$2''",
+       "cantcreateaccount-range-text": "Napóranje kontow z IP-adresow we wobcerku <strong>$1</strong>, kótaryž wopśimujo twóju IP-adresu (<strong>$4</strong>), jo se wót [[User:$3|$3]] zablokěrowało.\n\nPśicyna pódana wót $3 jo <em>$2</em>",
        "viewpagelogs": "Protokole boka pokazaś",
        "nohistory": "Stawizny wobźěłanja za toś ten bok njeeksistěruju.",
        "currentrev": "Aktualna wersija",
        "prefs-diffs": "Rozdźěle",
        "prefs-help-prefershttps": "Toś to nastajenje wustatkujo se pó twójom pśiducem pśizjawjenju.",
        "prefs-tabs-navigation-hint": "Tip: Móžoš lěwu a pšawu šypku wužywaś, aby mjazy rejtarkami w lisćinje rejtarkow nawigěrował.",
-       "email-address-validity-valid": "Zda se, až e-mailowa adresa jo płaśiwa",
-       "email-address-validity-invalid": "Zapódaj płaśiwu e-mailowu adresu",
        "userrights": "Zastojanje wužywarskich pšawow",
        "userrights-lookup-user": "Wužywarske kupki zastojaś",
        "userrights-user-editname": "Wužywarske mě:",
        "right-blockemail": "Wužywarjoju słanje emailow zawoboraś",
        "right-hideuser": "Wužywarske mě blokěrowaś a schowaś",
        "right-ipblock-exempt": "Blokěrowanja IP, awtomatiske blokěrowanja a blokěrowanja wobcerkow se wobinuś",
-       "right-proxyunbannable": "Awtomatiske blokěrowanje proksyjow se wobinuś",
        "right-unblockself": "Wótblokěrowaś se",
        "right-protect": "Šćitowe schojźeńki změniś a z kaskadami šćitane boki wobźěłaś",
        "right-editprotected": "Boki wobźěłaś, kótarež su pśez \"{{int:protect-level-sysop}}\" šćitane",
        "recentchanges-label-bot": "Toś ta změna jo se pśez bośik wuwjadła.",
        "recentchanges-label-unpatrolled": "Toś ta změna hyšći njejo se pśekontrolěrowała",
        "recentchanges-label-plusminus": "Změnjona wjelikosc boka (licba bajtow)",
-       "recentchanges-legend-heading": "'''Legenda:'''",
+       "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (glej teke [[Special:NewPages|lisćinu nowych bokow]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Dołojce pokazuju se změny wót <strong>$2</strong> (maks. <strong>$1</strong> zapisow).",
        "filewasdeleted": "Dataja z toś tym mjenim jo se južo raz nagrała a mjaztym zasej wulašowała. Pšosym kontrolěruj pjerwjej $1, nježli až nagrajoš dataju znowego.",
        "filename-bad-prefix": "Mě dataje, kótaruž nagrawaš, zachopijo z '''„$1“'''. Take mě jo wót digitalneje kamery pśedpódane a toś wjele njewugroni. Pšosym pómjeni dataju tak, aby mě wěcej wó jeje wopśimjeśu wugroniło.",
        "filename-prefix-blacklist": " #<!-- Njezměń nic na toś tej rědce! --> <pre>\n# Syntaksa jo slědujuca:\n#   * Wšykno wót \"#\" znamuška až ku kóńcoju rědki jo komentar.\n#   * Kužda njeprozna smužka jo prefiks za typiske datajowe mjenja, kótarež se awtomatiski wót digitalnych kamerow dodawaju.\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # some mobil phones\nIMG # generic\nJD # Jenoptik\nMGP # Pentax\nPICT # misc.\n #</pre> <!-- Njezměń nic na toś tej rědce! -->",
-       "upload-success-subj": "Nagraśe jo było wuspěšne.",
-       "upload-success-msg": "Twójo nagraśe z [$2] jo wuspěšne było. Stoj how k dispoziciji: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Nagrawański problem",
-       "upload-failure-msg": "Jo był problem z twójim nagraśim wót [$2]:\n\n$1",
-       "upload-warning-subj": "Nagrawańske warnowanje",
-       "upload-warning-msg": "Jo był problem z twójim nagraśim z [$2]. Wroś k [[Special:Upload/stash/$1|nagrawańskemu formularoju]], aby wótpórał toś ten problem.",
        "upload-proto-error": "Njekorektny protokol",
        "upload-proto-error-text": "URL musy zachopiś z <code>http://</code> abo <code>ftp://</code>.",
        "upload-file-error": "Interna zmólka",
        "pager-older-n": "{{PLURAL:$1|staršy 1|staršej $1|starše $1|staršych $1}}",
        "suppress": "Doglědowanje",
        "querypage-disabled": "Toś ten specialny bok jo z wugbaśowych pśicynow znjemóžnjony.",
+       "apisandbox": "API-grajkanišćo",
+       "apisandbox-api-disabled": "API jo se na toś tom sedle znjemóžnił.",
+       "apisandbox-intro": "Wužyj toś ten bok, aby z '''websłužbu Mediawiki API''' eksperimentěrował.\nGlědaj [//www.mediawiki.org/wiki/API:Main_page API-dokumentaciju] za dalšne drobnostki za wužywanje API. Pśikład: [//www.mediawiki.org/wiki/API#A_simple_example Wopśimjeśe głownego boka wótwołaś]. Wubjeŕ akciju, aby dalšne pśikłady wiźeł.\n\nŹiwaj na to, až, lěcrownož to jo grajkanišćo, akcije, kótarež pśewjedujoš na toś tom boku, by mógli wiki změniś.",
+       "apisandbox-submit": "Napšašowanje pśewjasć",
+       "apisandbox-reset": "Wuprozniś",
+       "apisandbox-examples": "Pśikład",
+       "apisandbox-results": "Wuslědk",
+       "apisandbox-request-url-label": "URL napšašowanja:",
+       "apisandbox-request-time": "Napšašowański cas: $1",
        "booksources": "Pytanje pó ISBN",
        "booksources-search-legend": "Knigłowe žrědła pytaś",
        "booksources-text": "To jo lisćina z wótkazami na internetowe boki, kótarež pśedawaju nowe a trjebane knigły. Tam mógu teke dalšne informacije wó knigłach byś. {{SITENAME}} njezwisujo góspodarski z žednym z toś tych póbitowarjow.",
        "rollbackfailed": "Slědkwześe njejo se raźiło.",
        "cantrollback": "Njejo móžno změnu slědk wześ, slědny pśinosowaŕ jo jadnučki awtor boka.",
        "alreadyrolled": "Njejo móžno slědnu změnu w nastawku [[:$1]] wót [[User:$2|$2]] ([[User talk:$2|diskusija]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) slědk wześ; drugi wužywaŕ jo mjaztym bok změnił abo južo slědk stajił .\n\nSlědnu změnu k bokoju jo pśewjadł [[User:$3|$3]] ([[User talk:$3|diskusija]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Zapominanje k slědnej změnje jo było: \"''$1''\".",
+       "editcomment": "Zapominanje k slědnej změnje jo było: <em>$1</em>.",
        "revertpage": "Změny wužywarja [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskusija]]) su se wótwrośili a slědna wersija wužywarja [[User:$1|$1]] jo se wótnowiła.",
        "revertpage-nouser": "Změny su se wót schowanego wužywarja anulěrowali a pjerwjejšna wersija wužywarja {{GENDER:$1|[[User:$1|$1]]}} jo se wótnowiła",
        "rollback-success": "Změny wót $1 su se slědk wzeli a slědna wersija wót $2 jo zasej se nawrośiła.",
        "movenosubpage": "Toś ten bok njama pódboki.",
        "movereason": "Pśicyna:",
        "revertmove": "nawrośiś",
-       "delete_and_move": "Wulašowaś a pśesunuś",
        "delete_and_move_text": "==Celowy bok eksistěrujo - wulašowaś??==\n\nBok „[[:$1]]“ južo eksistěrujo. Coš jen wulašowaś, aby mógał toś ten bok pśesunuś?",
        "delete_and_move_confirm": "Jo, toś ten bok wulašowaś",
        "delete_and_move_reason": "Wulašowane, aby městno za pśesunjenje boka \"[[$1]]\" napórał",
        "special-characters-group-khmer": "Khmeršćina",
        "special-characters-title-endash": "krotka lažaca smužka",
        "special-characters-title-emdash": "dłujka lažaca smužka",
-       "special-characters-title-minus": "minusowe znamuško"
+       "special-characters-title-minus": "minusowe znamuško",
+       "randomrootpage": "Pśipadny kórjenjowy bok"
 }
index 79eb333..1b9381e 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "FRANCIS5091",
                        "FRANELYA",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Mangagaris pioputan:",
        "myprivateinfoprotected": "Ingaa kasagaannu do monimban diti kointalangan minsosondirinu.",
        "mypreferencesprotected": "Ingaa kasagaannu do monimban diti komoisaannu.",
        "ns-specialprotected": "Bolikon pinotontu awu milo iditon.",
-       "titleprotected": "Notingoligan tuluhon diti mantad wonsoyon do [[User:$1|$1]].\nSasabab no do \"''$2''\".",
+       "titleprotected": "Notingoligan tuluhon diti mantad wonsoyon do [[User:$1|$1]].\nSasabab no do <em>$2</em>.",
        "filereadonlyerror": "Awu milo do simbanan pail \"$1\" tu pinogompi iti pail \"$2\" id mud do basaon noh tomod.\n\nMongungulud di minongunsi pinopointalang do kointalangan diti: \"$3\".",
        "invalidtitle-knownnamespace": "Pogoduhan tuluhon kiruangaran \"$2\" om tiik \"$3\"",
        "invalidtitle-unknownnamespace": "Pogoduhan tuluhon it awu ointutunan ruangaran numbur $1 om tiik \"$2\"",
        "passwordreset-email": "Porikatan surat-i:",
        "passwordreset-emailtitle": "Kointalangan takaun id {{SITENAME}}",
        "passwordreset-emailelement": "Ngaranmoguno: \n$1\n\nKaatalib daamot: \n$2",
-       "passwordreset-emailsent": "Surat-i pononsorou nakaatod noh.",
+       "passwordreset-emailsentemail": "Surat-i pononsorou nakaatod noh.",
        "passwordreset-emailsent-capture": "Surat-i pononsorou nakaatod noh, miagal id siriba diti.",
        "passwordreset-emailerror-capture": "Surat-i pononsorou nopudali noh, miagal id siriba diti, nga awu kaatod id momomoguno: $1",
        "changeemail": "Alanai porikatan surat-i",
-       "changeemail-text": "Gonopo poom diti do mongolon porikatan surat-i nuh. Mangai posuango kaatalibnu do papasaah di naalanan.",
+       "changeemail-header": "Alanai akaun porikatan surat-i",
        "changeemail-no-info": "Mositi sumuang log ko do mongoguno monilombus id bolikon diti.",
        "changeemail-oldemail": "Porikatan surat-i maso diti:",
        "changeemail-newemail": "Porikatan surat-i it kawawagu:",
        "prefs-displayrc": "Pomilian pongitanan",
        "prefs-displaywatchlist": "Pomilian pongitanan",
        "prefs-diffs": "Pisuaian",
-       "email-address-validity-valid": "Porikatan surat-i asaah",
-       "email-address-validity-invalid": "Posuango porikatan surat-i di asaah",
        "userrights": "Ponguludan don momomoguna",
        "userrights-lookup-user": "Uludo tinimungan momomoguno",
        "userrights-user-editname": "Posuango ngaranmoguno:",
index 08dfe43..51104de 100644 (file)
        "customcssprotected": "तमलाई यो  पानो सम्पादन गद्दे अनुमति छैन, किनकी यैमी कुनै अर्को प्रयोगकर्ताको व्यक्तिगत अभिरुचीहरू संग्रहित छन् ।",
        "customjsprotected": "तमलाई यो जाभास्कृप्ट पानो सम्पादन गद्दे अनुमति छैन, किनकी यैमी कुनै अर्को प्रयोगकर्ताको व्यक्तिगत अभिरुचीहरू संग्रहित छन् ।",
        "ns-specialprotected": "विशेष पृष्ठहरू सम्पादन अद्दु नाइँ सकिनो।",
-       "titleprotected": "[[User:$1|$1]]द्वारा ये शीर्षक निर्माणहुनबठे जोगाइया छ।\nकारण \"<em>$2</em>\" हो ।",
+       "titleprotected": "[[User:$1|$1]]द्वारा ये शीर्षक निर्माणहुनबठे जोगाइया छ।\nकारण <em>$2</em> हो ।",
        "filereadonlyerror": "फाइल \"$1\" लाई परिवर्तन अद्दु नाइँ सकिनो क्याईकि फाइल भण्डार  \"$2\" केवल पढ्ने स्थिति (read-only mode)मी छ।\n\nयेलाई सुरक्षित गर्ने प्रवन्धकले  यो कारण दियाकाछन् : ''$3''।",
        "exception-nologin": "प्रवेश (लग ईन) नगरिएको",
        "virus-scanfailed": "जँचाई असफल(कोड $1)",
        "createaccountreason": "कारण:",
        "createacct-reason": "कारण",
        "createacct-reason-ph": "क्याई तम नयाँ खाता खोल्ला छौ?",
-       "createacct-captcha": "सुरक्षा जाँच",
-       "createacct-imgcaptcha-ph": "मल्तिर धेकियाका अनुसारको पाठ भरिदिय",
        "createacct-submit": "तमरो खाता सिर्जना गर",
        "createacct-another-submit": "दोसरो खाता सिर्जना गर",
        "createacct-benefit-heading": "{{SITENAME}} तम जसाई मान्सुनले सिर्जना गरिया हो ।",
        "passwordreset-email": "इमेल ठेगाना:",
        "passwordreset-emailtitle": "{{SITENAME}}मा खाता विवरण",
        "passwordreset-emailelement": "प्रयोगकर्ताको नाम: \n$1\n\nअस्थाई पासवर्ड: \n$2",
-       "passwordreset-emailsent": "पासवर्ड परिवर्तनका लागि इमेल पठाइया छ।",
+       "passwordreset-emailsentemail": "पासवर्ड परिवर्तनका लागि इमेल पठाइया छ।",
        "changeemail": "इमेल ठेगाना बदेल",
-       "changeemail-text": "आफ्नो इमेल ठेगाना परिवर्तन गद्द यो फारम भर । यैलाई पुष्टि गद्द तमीले आफ्नो पासवर्ड हाल्नु पडन्छ।",
+       "changeemail-header": "आफ्नो इमेल ठेगाना परिवर्तन गद्द यो फारम भर । यैलाई पुष्टि गद्द तमीले आफ्नो पासवर्ड हाल्नु पडन्छ।",
        "changeemail-oldemail": "अईलको इमेल-ठेगाना:",
        "changeemail-newemail": "नयाँ इमेल-ठेगाना:",
        "changeemail-none": "(के लै नाइँ)",
        "right-userrights-interwiki": "अन्य विकिहरूमी प्रयोगकर्ताहरूको अधिकार सम्पादन गद्या",
        "right-override-export-depth": "गहिराइ ५ सम्म लिंक गरियाका पानाहरू सहित निर्यात गद्या",
        "right-sendemail": "अन्य प्रयोगकर्तानलाई इमेल पठाउन्या",
+       "grant-editmycssjs": "तमरो प्रयोगकर्ता CSS/JavaScript सम्पादन गर",
+       "grant-editmyoptions": "तमरा प्रयोगकर्ता अभिरूचीहरूलाई सम्पादन गर",
        "newuserlogpage": "प्रयोगकर्ता श्रृजना लग",
        "action-move-subpages": "यै पानाको रे यैका उपपानाको नाम बदल्न्या",
        "action-unwatchedpages": "कसैले ध्यान नराख्याका पाननको सूची हेद्या",
        "recentchanges-label-bot": "यो सम्पादन बोटबठे गरियाको थ्यो",
        "recentchanges-label-unpatrolled": "यो सम्पादन यैलसम्म गस्ती गरियाको नाइथी",
        "recentchanges-label-plusminus": "यति बाइटहरू संख्याले पानाको आकार फेरबदल  भयाको छ",
-       "recentchanges-legend-heading": "'''आदर्श वाक्य:'''",
+       "recentchanges-legend-heading": "<strong>आदर्श वाक्य:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नौला पानाको सूची]] यैलाई लै हेरिदिय)",
        "rclistfrom": "$3 $2 देखिका नयाँ परिवर्तनहरू देखाउन्या",
        "rcshowhideminor": "$1 सानतिनो सम्पादन",
        "rcshowhidemine": "$1 मेरा सम्पादनहरू",
        "rcshowhidemine-show": "धेकाइदिय",
        "rcshowhidemine-hide": "लुकाइदिय",
+       "rcshowhidecategorization-show": "धेकाउन्या",
+       "rcshowhidecategorization-hide": "लुकाउन्या",
        "rclinks": "पछिल्ला $1 परिवर्तनहरू पछाडिका $2 दिनहरूमी<br />$3",
        "diff": "फरक",
        "hist": "इतिहास",
        "upload-dialog-button-done": "सकियो",
        "upload-dialog-button-save": "सङ्ग्रह गद्या",
        "upload-dialog-button-upload": "अपलोड",
-       "upload-process-error": "गल्ती भयो",
-       "upload-process-warning": "सूचना हुनु",
-       "upload-form-label-select-file": "फाइल छान",
        "upload-form-label-infoform-title": "विवरण",
        "upload-form-label-infoform-name": "नाऊ",
        "upload-form-label-infoform-description": "बेलिविस्तार",
index 3b83b34..388ad61 100644 (file)
@@ -6,7 +6,8 @@
                        "Geitost",
                        "아라",
                        "Shirayuki",
-                       "Gloria sah"
+                       "Gloria sah",
+                       "Macofe"
                ]
        },
        "tog-underline": "Tîra 'na rîga sòta i colegamèint.",
        "myprivateinfoprotected": "An 's gh'à mìa i permès necesâri per cambiê 'l j infurmasiòun personêli.",
        "mypreferencesprotected": "An 's gh'à mìa i permès necesâri per cambiêr al preferèinsi personêli.",
        "ns-specialprotected": "An n'é mìa pusébil mudifichêr al pàgini specêli.",
-       "titleprotected": "Al tétol ed cla pagina ché l'é stê bluchê da [[User:$1|$1]].\nCòst l'é al mutîv:\"$2\".",
+       "titleprotected": "Al tétol ed cla pagina ché l'é stê bluchê da [[User:$1|$1]].\nCòst l'é al mutîv: <em>$2</em>.",
        "filereadonlyerror": "An n'é mìa stê pusébil mudifichêr al file \"$1\" perchè al depôsit di file \"$2\" a 's pōl sōl lēzer.\n\nL'aministradōr ch' al l'à bluchê l'à dê cla spiegasiòun ché:\"$3\".",
        "invalidtitle-knownnamespace": "Tétol mìa vâlid cme spâsi di nòm \"$2\" e tèst \"$3\"",
        "invalidtitle-unknownnamespace": "Tétol mìa vâlid cun spâsi di nòm mìa cgnusû \"$1\" e tèst \"$2\"",
        "createaccountreason": "Mutîv:",
        "createacct-reason": "Mutîv",
        "createacct-reason-ph": "Perchè ét drē fêr 'n' êtra utèinsa",
-       "createacct-captcha": "Cuntròl 'd sicurèsa",
-       "createacct-imgcaptcha-ph": "Mèt dèinter al tèst ch'é vèd ché sōver",
        "createacct-submit": "Fà la tó utèinsa",
        "createacct-another-submit": "Fà 'n' êtra utèinsa.",
        "createacct-benefit-heading": "{{SITENAME}} crès grâsia a persòuni cme té.",
        "passwordreset-emailtext-ip": "Quelchidûn (prubabilmèint té, cun l'indirés IP $1) l'à dmandê de spidîregh 'na nōva cêva 'd ingrès per andêr dèinter a {{SITENAME}} ($4). {{PLURAL:$3|L'utèint inscrét| J utèint inscrét}} a sté indirés ed pôsta eletrônica în:\n \n$2 \n\n{{PLURAL:$3|Cla cêva 'd ingrès pruvişôria la scadrà| St' al cêvi 'd ingrès pruvişôri ché scadrân}} dôp {{PLURAL:$5|ûn dé|$5 dé}}. Ét duvrés andêr dèinter e sernîr 'na cêva 'd ingrès nōva adès. \n\nSe t'é mìa stê té a fêr la dmânda, o s' ét t'é ricurdê la cêva 'd ingrès uriginêla e an 't vō mia pió cambiêrla, ét pō scanşlêr cól mesâg ché e cuntinvêr a druvêr la tó cêva 'd ingrès vècia.",
        "passwordreset-emailtext-user": "L'utèint $1 ed {{SITENAME}} l'à dmandê de spidîregh 'na nōva cêva 'd ingrès per andêr dèinter a {{SITENAME}} ($4). {{PLURAL:$3|L'utèint inscrét| J utèint inscrét}} a sté indirés ed pôsta eletrônica în:\n\n$2 \n\n{{PLURAL:$3|Cla cêva 'd ingrès pruvişôria ché la scadrà| St' al cêvi 'd ingrès pruvişôri ché scadrân}} dôp {{PLURAL:$5|ûn dé|$5 dé}}. Ét duvrés andêr dèinter e sernîr 'na cêva 'd ingrès nōva adès. \n\nSe t'é mìa stê té a fêr la dmânda, o s' ét t'é ricurdê la cêva 'd ingrès uriginêla e an 't vō mia pió cambiêrla, ét pō scanşlêr cól mesâg ché e cuntinvêr a druvêr la tó cêva 'd ingrès vècia",
        "passwordreset-emailelement": "Nòm utèint: \n$1\n.\nCêva 'd ingrès pruvişôria: \n$2",
-       "passwordreset-emailsent": "É stê spidî un mesâg ed pôsta eletrônica per turnêr a impustêr la cêva 'd ingrès.",
+       "passwordreset-emailsentemail": "É stê spidî un mesâg ed pôsta eletrônica per turnêr a impustêr la cêva 'd ingrès.",
        "passwordreset-emailsent-capture": "É stê spidî un mesâg ed pôsta eletrônica per turnêr a impustêr la cêva 'd ingrès, ché sòta a gh'é al tèst che gh'é scrét.",
        "passwordreset-emailerror-capture": "É stê fât un mesâg ed pôsta eletrônica per turnêr a impustêr la cêva 'd ingrès, scréta ché 'd sègvit. La spedisiòun {{GENDER:$2|a l'utèint}} an n'é mia 'riusîda:$1",
        "changeemail": "Câmbia l'indirés ed la pôsta eletrônica",
-       "changeemail-text": "Impés sté mòdul per cambiêr al tó indirés ed pòsta eletrônica. A srà necesâri mèter dèinter la cêva 'd ingrès per cunfermêr la mudéfica.",
+       "changeemail-header": "Câmbia l'indirés ed la pôsta eletrônica 'd la tó inscrisiòun.",
        "changeemail-no-info": "Per andêr dèinter diretamèint a cla pàgina ché 't gh'ê da fêr l'ingrès.",
        "changeemail-oldemail": "L'indirés ed la pôsta eletrànica 'd adès.",
        "changeemail-newemail": "Nōv indirés ed pàsta eletrônica:",
        "undo-summary-username-hidden": "Scanşlê la modéfica $1 ed 'n utèin lughê",
        "cantcreateaccounttitle": "Impusébil registrêr un utèint",
        "cantcreateaccount-text": "La registrasiòun ed cl'indirés IP ché ('''$1''') l'é stêda bluchêda da [[User:$3|$3]]. \n\nAl mutîv dal blôch dê da $3 l'é còst: ''$2''.",
-       "cantcreateaccount-range-text": "La registrasiòun da indirés IP int l'intervâl '''$1''', in dó gh'é dèinter al tó  ('''$4'''), l'é stêda bluchêda da [[User:$3|$3]]. \n\nAl mutîv dê da $3 l'é ''$2''",
+       "cantcreateaccount-range-text": "La registrasiòun da indirés IP int l'intervâl <strong>$1</strong>, in dó gh'é dèinter al tó  (<strong>$4</strong>), l'é stêda bluchêda da [[User:$3|$3]]. \n\nAl mutîv dê da $3 l'é <em>$2</em>",
        "viewpagelogs": "Guêrda la stòria 'd cla pàgina ché",
        "nohistory": "L'elèinch ed la stôria dal versiòun ed cla pàgina ché an 's câta mìa.",
        "currentrev": "Ûltma versiòun",
        "prefs-help-prefershttps": "Cla diferèinsa ché la gh'à efèt dal st'êter ingrès.",
        "prefswarning-warning": "T'é fât dal mudéfichi al tō preferèinsi ch'în mìa stêdi salvêdi. S'ét vê fōra da cla pàgina ché sèinsa clichêr \"$1\" al preferèinsi a gnîran mìa arnuvêdi.",
        "prefs-tabs-navigation-hint": "Sugerimèint: è pusébil druvêr i tâst frècia a mansèina e a dréta per spustêres tr'al schēdi int l'elèinch dal schēdi.",
-       "email-address-validity-valid": "L'indirès ed pôste eletrônica a sèmbra vâlid",
-       "email-address-validity-invalid": "Mèt un indirés ed pôsta eletrônica vâlid",
        "userrights": "Gestiòun di permès relatîv a j utèint",
        "userrights-lookup-user": "Gestiòun di gróp utèint",
        "userrights-user-editname": "Mèt dèinter al nòm utèint:",
        "right-blockemail": "L'impidés a 'n utèint de spidîr la pôsta eletrônica",
        "right-hideuser": "Blôca un nòm utèint, e 'l lōga al póblich",
        "right-ipblock-exempt": "Al vèd mìa i blôch 'd IP, i blôch avtomâtich e i blôch ed range IP",
-       "right-proxyunbannable": "An vèder mìa i blôch avtomâtich di proxi",
        "right-unblockself": "A şblôca ló 'stès",
        "right-protect": "Câmbia i livē 'd prutesiòun e mudéfica 'l pàgini prutèti in ripetisiòun",
        "right-editprotected": "Mudéfica 'l pàgini prutèti cun \"{{int:protect-level-sysop}}\"",
        "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.",
        "recentchanges-label-plusminus": "Cambiamèint ed la pàgina in nómer ed byte",
-       "recentchanges-legend-heading": "'''Spiegasiòun:'''",
+       "recentchanges-legend-heading": "<strong>Spiegasiòun:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (guêrda [[Special:NewPages|al pàgini nōvi]])",
        "rcnotefrom": "Ché sòt a {{PLURAL:$5|gh'é la mudéfica fâta|gh'în al mudéfichi fâti}} a partîr da<strong>$3,$4</strong>(fîn a <strong>$1</strong>).",
        "rclistfrom": "Fà vèder al mudéfichi fâti a partîr da $3 $2",
        "watchthisupload": "Zûnta a i tgnu  'd ôc",
        "filewasdeleted": "Un file cun cól nòm ché l'é bèle stê carghê e scanşlê tèimp indrē. Verifichêr la stôria dal $1 préma 'd carghêrel incòra.",
        "filename-bad-prefix": "Al nòm dal file che s'é drē carghêr al cumîncia cun <strong>\"$1\"</strong>, ch'l'é un nòm genèrich cumpâgn a quî dê in avtomâtich dal mâchini fotogrâfichi digitêli. As prèiga ed sernîr un nòm pió precîş p'r al fîle.",
-       "upload-success-subj": "Carghê cun sucès",
-       "upload-success-msg": "La cârga da [$2] l'é andêda bèin. Al file a's pōl catêr ché: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "A gh'é un problēma carghêr",
-       "upload-failure-msg": " A s'é verifiche un problēma cun la cârga da [$2]:\n\n\n$1",
-       "upload-warning-subj": "Avîş che s'é drē carghêr",
-       "upload-warning-msg": "A gh'é stê un problēma mèinter 's carghêva da [$2]. A ' spōl turnêr al [[Special:Upload/stash/$1|form di upload]] per justêr al problēma.",
        "upload-proto-error": "Protocôl şbagliê",
        "upload-proto-error-text": "Per carghêr da terminêl luntân druvêr URL che cumîncen cun code>http://</code> opór <code>ftp://</code>.",
        "upload-file-error": "Erōr intêren",
index 5c75776..16d8c33 100644 (file)
@@ -44,7 +44,8 @@
                        "Macofe",
                        "Stam.nikos",
                        "Giorgos456",
-                       "SucreRouge"
+                       "SucreRouge",
+                       "Gts-tg"
                ]
        },
        "tog-underline": "Υπογράμμιση συνδέσμων:",
        "myprivateinfoprotected": "Δεν έχετε άδεια για να επεξεργαστείτε τα προσωπικά σας στοιχεία.",
        "mypreferencesprotected": "Δεν έχετε άδεια για να επεξεργαστείτε τις προτιμήσεις σας.",
        "ns-specialprotected": "Η επεξεργασία σελίδων στον τομέα {{ns:special}} δεν είναι δυνατή.",
-       "titleprotected": "Αυτός ο τίτλος έχει προστατευθεί από την δημιουργία από τον [[User:$1|$1]].\nΟ λόγος που δίνεται είναι «$2».",
+       "titleprotected": "Αυτός ο τίτλος έχει προστατευθεί από την δημιουργία από τον [[User:$1|$1]].\nΟ λόγος που δίνεται είναι <em>$2</em>.",
        "filereadonlyerror": "Δεν είναι δυνατή η τροποποίηση του αρχείου «$1» επειδή το αποθετήριο αρχείων «$2» είναι σε κατάσταση λειτουργίας μόνο για ανάγνωση.\n\nΟ διαχειριστής που το κλείδωσε προσφέρει αυτή την αιτιολόγηση: «$3».",
        "invalidtitle-knownnamespace": "Μη έγκυρος τίτλος με χώρο ονομάτων «$2» και κείμενο «$3»",
        "invalidtitle-unknownnamespace": "Μη έγκυρος τίτλος με άγνωστο αριθμό χώρου ονομάτων $1 και κείμενο «$2»",
        "botpasswords-label-resetpassword": "Επαναφορά κωδικού",
        "botpasswords-label-grants": "Ισχύουσες άδειες:",
        "botpasswords-label-restrictions": "Περιορισμοί χρήσης:",
+       "botpasswords-label-grants-column": "Χορηγήθηκε",
        "botpasswords-bad-appid": "Η ονομασία του ρομπότ «$1» δεν είναι έγκυρη.",
        "botpasswords-update-failed": "Αποτυχία ενημέρωσης της ονομασίας του ρομπότ «$1». Μήπως διαγράφτηκε ο κωδικός;",
        "botpasswords-created-title": "Ο κωδικός πρόσβασης του ρομπότ δημιουργήθηκε",
        "newarticle": "(Νέο)",
        "newarticletext": "Ακολουθήσατε ένα σύνδεσμο προς μια σελίδα που δεν υπάρχει ακόμα. \nΓια να δημιουργήσετε τη σελίδα, αρχίστε να πληκτρολογείτε στο παρακάτω πλαίσιο (δείτε τη [$1 σελίδα βοήθειας] για περισσότερες πληροφορίες).\nΑν έχετε βρεθεί εδώ κατά λάθος, πατήστε το κουμπί '''πίσω''' στον περιηγητή σας.",
        "anontalkpagetext": "----''Αυτή η σελίδα συζήτησης προορίζεται για ανώνυμο χρήστη που δεν έχει δημιουργήσει ακόμα λογαριασμό ή που δεν τον χρησιμοποιεί. Έτσι για την ταυτοποίηση ενός ανώνυμου χρήστη χρησιμοποιείται η διεύθυνση IP του. Είναι όμως πιθανόν η διεύθυνση αυτή να είναι κοινή για πολλούς διαφορετικούς χρήστες.  Αν είστε ανώνυμος χρήστης και νομίζετε ότι άσχετα σχόλια απευθύνθηκαν σε σας, παρακαλούμε να [[Special:UserLogin/signup|δημιουργήσετε ένα λογαριασμό]] ή να  [[Special:UserLogin|συνδεθείτε]] για να αποφεύγεται η μελλοντική σύγχυση με άλλους ανώνυμους χρήστες.''",
-       "noarticletext": "Δεν υπάρχει προς το παρόν κείμενο σε αυτή τη σελίδα. Μπορείτε να [[Special:Search/{{PAGENAME}}|αναζητήσετε αυτόν τον τίτλο σελίδας]] σε άλλες σελίδες,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} να αναζητήσετε τις σχετικές καταγραφές],\nή να [{{fullurl:{{FULLPAGENAME}}|action=edit}} επεξεργαστείτε αυτή τη σελίδα]</span>.",
+       "noarticletext": "Δεν υπάρχει προς το παρόν κείμενο σε αυτή τη σελίδα. \nΜπορείτε να [[Special:Search/{{PAGENAME}}|αναζητήσετε αυτόν τον τίτλο σελίδας]] σε άλλες σελίδες,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} να αναζητήσετε τις σχετικές καταγραφές],\nή να [{{fullurl:{{FULLPAGENAME}}|action=edit}} δημιουργήσετε αυτή τη σελίδα]</span>.",
        "noarticletext-nopermission": "Δεν υπάρχει προς το παρόν κείμενο σε αυτή τη σελίδα.\nΜπορείτε να [[Special:Search/{{PAGENAME}}|αναζητήσετε αυτόν τον τίτλο σελίδας]] σε άλλες σελίδες, ή <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} να ψάξετε στις σχετικές καταγραφές]</span>, αλλά δεν έχετε την άδεια να δημιουργήσετε αυτή τη σελίδα.",
        "missing-revision": "Δεν υπάρχει αναθεώρηση με αριθμό $1 για τη σελίδα με όνομα «{{FULLPAGENAME}}».\n\nΑυτό συνήθως προκαλείται από παλιό σύνδεσμο ιστορικού προς σελίδα που έχει διαγραφεί.\nΛεπτομέρειες θα βρείτε στο [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ημερολόγιο καταγραφής διαγραφών].",
        "userpage-userdoesnotexist": "Ο Λογαριασμός του χρήστη \"<nowiki>$1</nowiki>\" δεν είναι καταχωρημένος. Παρακαλώ δείτε αν θα θέλατε να δημιουργήσετε/επεξεργαστείτε αυτή τη σελίδα.",
        "undo-summary-username-hidden": "Αναίρεση αναθεώρησης $1 από ένα κρυμμένο χρήστη",
        "cantcreateaccounttitle": "Ο λογαριασμός δεν μπορεί να δημιουργηθεί",
        "cantcreateaccount-text": "Η δημιουργία λογαριασμού από αυτή τη διεύθυνση IP ('''$1''') έχει αποτραπεί από τον [[User:$3|$3]].\n\nΟ λόγος που δόθηκε από τον $3 είναι ''$2''",
-       "cantcreateaccount-range-text": "Η δημιουργία λογαριασμού από διευθύνσεις IP στην περιοχή  '''$1''', που περιλαμβάνει τη δική σας διεύθυνση IP ('''$4'''), έχει αποκλειστεί από τον [[User:$3|$3]].\n\nΗ αιτιολογία που δόθηκε από τον $3 είναι \"$2\"",
+       "cantcreateaccount-range-text": "Η δημιουργία λογαριασμού από διευθύνσεις IP στην περιοχή  <strong>$1</strong>, που περιλαμβάνει τη δική σας διεύθυνση IP (<strong>$4</strong>), έχει αποκλειστεί από τον [[User:$3|$3]].\n\nΗ αιτιολογία που δόθηκε από τον $3 είναι \"$2\"",
        "viewpagelogs": "Προβολή αρχείων καταγραφών για αυτήν τη σελίδα",
        "nohistory": "Δεν υπάρχει ιστορικό επεξεργασίας για αυτή τη σελίδα.",
        "currentrev": "Τρέχουσα αναθεώρηση",
        "mergehistory-empty": "Καμία έκδοση δεν μπορεί να συγχωνευθεί.",
        "mergehistory-done": "$3 {{PLURAL:$3|έκδοση|εκδόσεις}} του $1 συγχωνεύθηκαν επιτυχώς στο [[:$2]].",
        "mergehistory-fail": "Αδύνατη η εκτέλεση της συγχώνευσης ιστορικού, παρακαλούμε κάντε επανέλεγχο των παραμέτρων σελίδας και χρόνου.",
+       "mergehistory-fail-bad-timestamp": "Η χρονική σήμανση δεν είναι έγκυρη.",
        "mergehistory-fail-toobig": "Δεν είναι δυνατό να πραγματοποιηθεί η συγχώνευση ιστορικών, καθώς πάνω από $1 {{PLURAL:$1|αναθεώρηση|αναθεωρήσεις}} θα μετακινούνταν.",
        "mergehistory-no-source": "Η σελίδα πηγής $1 δεν υπάρχει.",
        "mergehistory-no-destination": "Η σελίδα προορισμού $1 δεν υπάρχει.",
        "right-importupload": "Εισαγωγή σελίδων με ανέβασμα αρχείου",
        "right-patrol": "Σήμανση επεξεργασιών άλλων χρηστών ως ελεγμένες",
        "right-autopatrol": "Αυτόματη σημείωση των επεξεργασιών τους ως ελεγμένες",
-       "right-patrolmarks": "Î\94είÏ\84ε Ï\84ιÏ\82 Ï\83ημειÏ\8eÏ\83ειÏ\82 'Ï\85Ï\80Ï\8c Ï\80αÏ\81ακολοÏ\8dθηÏ\83η' Ï\84Ï\89ν Ï\80Ï\81οÏ\83Ï\86άτων αλλαγών",
+       "right-patrolmarks": "ΠÏ\81οβολή Ï\83ημάνÏ\83εÏ\89ν ÎµÎ»Î­Î³Ï\87οÏ\85 Ï\80Ï\81Ï\8cÏ\83Ï\86ατων αλλαγών",
        "right-unwatchedpages": "Δείτε μια λίστα σελίδων που δεν παρακολουθούνται",
        "right-mergehistory": "Συγχώνευση του ιστορικού των σελίδων",
        "right-userrights": "Τροποποίηση όλων των δικαιωμάτων χρηστών",
        "grant-rollback": "Η επαναφορά αλλαγών σε σελίδες",
        "grant-sendemail": "Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου σε άλλους χρήστες",
        "grant-uploadeditmovefile": "Ανέβασμα, αντικατάσταση, και μετακίνηση αρχείων",
+       "grant-uploadfile": "Ανέβασμα νέων αρχείων",
        "grant-basic": "Βασικά δικαιώματα",
+       "grant-viewdeleted": "Δείτε τα διαγεγραμμένα αρχεία και σελίδες",
+       "grant-viewmywatchlist": "Προβολή της λίστας παρακολούθησής σας",
        "newuserlogpage": "Αρχείο καταγραφών δημιουργίας χρηστών",
        "newuserlogpagetext": "Αυτή είναι μια καταγραφή δημιουργίας χρηστών.",
        "rightslog": "Αρχείο καταγραφών δικαιωμάτων χρηστών",
        "action-createpage": "να δημιουργήσετε σελίδες",
        "action-createtalk": "να δημιουργήσετε σελίδες συζήτησης",
        "action-createaccount": "να δημιουργήσετε αυτό το λογαριασμό χρήστη",
+       "action-autocreateaccount": "Δημιουργείστε αυτόματα αυτόν τον εξωτερικό λογαριασμό χρήστη",
        "action-history": "προβολή ιστορικού αυτή της σελίδας",
        "action-minoredit": "να σημειώσετε αυτή την επεξεργασία σαν «μικρής κλίμακας»",
        "action-move": "να μετακινήσετε αυτή τη σελίδα",
        "recentchanges-label-bot": "Αυτή η επεξεργασία έγινε από ένα ρομπότ",
        "recentchanges-label-unpatrolled": "Αυτή η επεξεργασία δεν έχει ελεγχθεί ακόμα",
        "recentchanges-label-plusminus": "Μεταβολή του μεγέθους της σελίδας σε bytes",
-       "recentchanges-legend-heading": "'''Υπόμνημα:'''",
+       "recentchanges-legend-heading": "<strong>Υπόμνημα:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (δείτε [[Special:NewPages|κατάλογος νέων σελίδων]])",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "Προβολή",
        "uploaded-script-svg": "Βρέθηκε στοιχείο με δυνατότητα δημιουργίας δέσμης ενεργειών «$1» στο ανεβασμένο αρχείο SVG.",
        "uploaded-hostile-svg": "Βρέθηκε μη ασφαλές CSS στο στοιχείο στυλ του ανεβασμένου αρχείου SVG.",
        "uploaded-event-handler-on-svg": "Δεν επιτρέπεται ο ορισμός ιδιοτήτων χειρισμού συμβάντων <code>$1=\"$2\"</code> σε αρχεία SVG.",
-       "uploaded-href-unsafe-target-svg": "Βρέθηκε href προς έναν μη ασφαλή προορισμό <code>&lt;$1 $2=\"$3\"&gt;</code> στο ανεβασμένο αρχείο SVG.",
+       "uploaded-href-unsafe-target-svg": "Βρέθηκε href προς έναν μη ασφαλή data: URI προορισμό <code>&lt;$1 $2=\"$3\"&gt;</code> στο ανεβασμένο αρχείο SVG.",
        "uploaded-animate-svg": "Βρέθηκε μία ετικέτα <code>&lt;animate&gt;</code> που ίσως να αλλάζει το href, με την ιδιότητα \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> στο ανεβασμένο αρχείο SVG.",
        "uploaded-setting-event-handler-svg": "Η ρύθμιση ιδιοτήτων χειρισμού σφαλμάτων είναι αποκλεισμένη, βρέθηκε <code>&lt;$1 $2=\"$3\"&gt;</code> στο ανεβασμένο αρχείο SVG.",
        "uploaded-setting-href-svg": "Η χρήση της ετικέτας «set» για την προσθήκη του χαρακτηριστικού «href» στο γονικό στοιχείο είναι αποκλεισμένη.",
        "apisandbox": "Αμμοδοχείο API",
        "apisandbox-api-disabled": "Η Διεπαφή Προγραμματισμού Εφαρμογών (API) είναι απενεργοποιημένη σε αυτήν την τοποθεσία.",
        "apisandbox-intro": "Χρησιμοποιήστε αυτήν τη σελίδα για να πειραματιστείτε με το '''API της υπηρεσίας ιστού του MediaWiki'''.\nΑνατρέξτε στην [//www.mediawiki.org/wiki/API:Main_page τεκμηρίωση του API] για περισσότερες πληροφορίες πάνω στη χρήση του API. Παράδειγμα: [//www.mediawiki.org/wiki/API#A_simple_example λήψη του περιεχομένου της Αρχικής Σελίδας]. Επιλέξτε μια ενέργεια για να δείτε περισσότερα παραδείγματα.\n\nΝα σημειωθεί ότι, παρόλο που αυτό εδώ είναι αμμοδοχείο, οι ενέργειες που εκτελείτε σε αυτήν τη σελίδα μπορούν να τροποποιήσουν το wiki.",
+       "apisandbox-unfullscreen": "Εμφάνιση της σελίδας",
        "apisandbox-submit": "Υποβολή του αιτήματος",
        "apisandbox-reset": "Εκκαθάριση",
-       "apisandbox-examples": "Παράδειγμα",
-       "apisandbox-results": "Αποτέλεσμα",
+       "apisandbox-retry": "Ξαναπροσπαθήστε",
+       "apisandbox-helpurls": "Σύνδεσμοι βοήθειας",
+       "apisandbox-examples": "Παραδείγματα",
+       "apisandbox-dynamic-parameters": "Πρόσθετες παράμετροι",
+       "apisandbox-dynamic-parameters-add-placeholder": "Ονομασία παραμέτρου",
+       "apisandbox-dynamic-error-exists": "Η παράμετρος με την ονομασία \"$1\" υπάρχει ήδη",
+       "apisandbox-submit-invalid-fields-title": "Κάποια από τα πεδία δεν είναι έγκυρα",
+       "apisandbox-submit-invalid-fields-message": "Παρακαλώ διορθώστε τα σημειωμένα πεδία και προσπαθείστε ξανά.",
+       "apisandbox-results": "Αποτελέσματα",
+       "apisandbox-sending-request": "Αποστολή αιτήματος API...",
+       "apisandbox-loading-results": "Λήψη αποτελεσμάτων API...",
        "apisandbox-request-url-label": "Αίτηση URL:",
        "apisandbox-request-time": "Χρόνος αιτήματος: $1",
        "booksources": "Πηγές βιβλίων",
        "rollbackfailed": "Η επαναφορά απέτυχε.",
        "cantrollback": "Δεν είναι δυνατή η αναίρεση αυτής της αλλαγής, πρόκειται για την αρχική ενέργεια δημιουργίας της σελίδας.",
        "alreadyrolled": "Αδύνατον να αναιρεθεί η τελευταία αλλαγή της σελίδας [[:$1]] από το χρήστη ([[User:$2|$2]] ([[User talk:$2|Συζήτηση]]){{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]), διότι κάποιος έχει ήδη αναιρέσει την αλλαγή ή έχει αλλάξει εκ νέου τη σελίδα.\n\nΤελευταία αλλαγή από το χρήστη ([[User:$3|$3]] ([[User talk:$3|Συζήτηση]]){{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Το σχόλιο της επεξεργασίας ήταν: \"''$1''\".",
+       "editcomment": "Το σχόλιο της επεξεργασίας ήταν: <em>$1</em>.",
        "revertpage": "Ανάκληση των αλλαγών [[Special:Contributions/$2|$2]] ([[User talk:$2|συζήτηση]]) επιστροφή στην προηγούμενη αναθεώρηση [[User:$1|$1]]",
        "revertpage-nouser": "Αναστράφηκαν οι επεξεργασίες από τον (όνομα χρήστη αφαιρέθηκε) στη τελευταία έκδοση από τον/την {{GENDER:$1|[[User:$1|$1]]}}φ",
        "rollback-success": "Ανεστραμμένες εκδόσεις από $1, αλλάχθηκαν στην προηγούμενη έκδοση από $2.",
        "ipb_expiry_temp": "Οι κρυμμένες φραγές ονομάτων χρηστών πρέπει να είναι μόνιμες.",
        "ipb_hide_invalid": "Μη εφικτή καταστολή αυτού του λογαριασμού. Μπορεί να έχει περισσότερες από {{PLURAL:$1|μια επεξεργασία|$1 επεξεργασίες}}.",
        "ipb_already_blocked": "Η διεύθυνση IP \"$1\" είναι ήδη φραγμένη",
-       "ipb-needreblock": "$1 είναι ήδη αποκλεισμένη. Θέλετε να αλλάξετε τις ρυθμίσεις?",
+       "ipb-needreblock": "Η $1 είναι ήδη αποκλεισμένη. Θέλετε να αλλάξετε τις ρυθμίσεις;",
        "ipb-otherblocks-header": "{{PLURAL:$1|Άλλη φραγή|Άλλες φραγές}}",
        "unblock-hideuser": "Δεν μπορείτε να καταργήσετε τον αποκλεισμό αυτού του χρήστη, καθώς το όνομα χρήστη του έχει αποκρυβεί.",
        "ipb_cant_unblock": "Σφάλμα: Ο αριθμός αναγνώρισης φραγής $1 δεν βρέθηκε. Μπορεί να έχει ξεμπλοκαριστεί ήδη.",
        "pageinfo-category-pages": "Αριθμός σελίδων",
        "pageinfo-category-subcats": "Αριθμός υποκατηγοριών",
        "pageinfo-category-files": "Αριθμός αρχείων",
-       "markaspatrolleddiff": "Î\9dα Ï\83ημειÏ\89θεί 'Ï\85Ï\80Ï\8c Ï\80αÏ\81ακολοÏ\8dθηÏ\83η'",
+       "markaspatrolleddiff": "ΣήμανÏ\83η Ï\89Ï\82 ÎµÎ»ÎµÎ³Î¼Î­Î½Î¿",
        "markaspatrolledtext": "Σήμανση αυτής της σελίδας ως ελεγμένης",
        "markaspatrolledtext-file": "Επισημάνετε αυτή τη έκδοση του αρχείου ως ελεγμένη",
-       "markedaspatrolled": "ΣημειÏ\89μένο Ï\89Ï\82 'Ï\85Ï\80Ï\8c Ï\80αÏ\81ακολοÏ\8dθηÏ\83η'",
+       "markedaspatrolled": "ΣημειÏ\8eθηκε Ï\89Ï\82 ÎµÎ»ÎµÎ³Î¼Î­Î½Î¿",
        "markedaspatrolledtext": "Η επιλεγμένη αναθεώρηση της [[:$1]] έχει σημειωθεί ως ελεγμένη.",
        "rcpatroldisabled": "Η λειτουργία 'Παρακολούθηση Πρόσφατων Αλλαγών' έχει απενεργοποιηθεί.",
        "rcpatroldisabledtext": "Η λειτουργία 'Παρακολούθηση Πρόσφατων Αλλαγών' είναι αυτή τη στιγμή απενεργοποιημένη.",
        "markedaspatrollednotify": "Αυτή η αλλαγή σε $1 έχει επισημανθεί ως ελεγμένη.",
        "markedaspatrollederrornotify": "Σήμανση ως ελεγμένη απέτυχε.",
        "patrol-log-page": "Αρχείο καταγραφής περιπολιών",
-       "patrol-log-header": "Αυτός είναι ένας κατάλογος περιπολούμενων αναθεωρήσεων.",
-       "log-show-hide-patrol": "$1 ÎºÎ±Ï\84αγÏ\81αÏ\86ή ÎµÏ\80ιÏ\84ήÏ\81ηÏ\83ηÏ\82",
+       "patrol-log-header": "Αυτό είναι μητρώο ελεγμένων αναθεωρήσεων.",
+       "log-show-hide-patrol": "$1 Î¼Î·Ï\84Ï\81Ï\8eοÏ\85 ÎµÎ»Î­Î³Ï\87οÏ\85 ÎµÏ\80εξεÏ\81γαÏ\83ιÏ\8eν",
        "log-show-hide-tag": "$1 ετικέττα καταγραφής",
        "deletedrevision": "Η παλιά έκδοση της $1 διαγράφτηκε",
        "filedeleteerror-short": "Σφάλμα κατά τη διαγραφή του αρχείου: $1",
        "tags-edit-revision-legend": "Προσθαφαιρέσετε ετικέτες {{PLURAL:$1|από αυτή την αναθεώρηση|και από τις $1 αναθεωρήσεις}}",
        "tags-edit-logentry-legend": "Προσθαφαιρέσετε ετικέτες {{PLURAL:$1|από αυτήν την καταχώριση|και από τις $1 καταχωρίσεις}} του αρχείου καταγραφής",
        "tags-edit-existing-tags": "Υπάρχουσες ετικέτες:",
-       "tags-edit-existing-tags-none": "''Καμία''",
+       "tags-edit-existing-tags-none": "<em>Καμία</em>",
        "tags-edit-new-tags": "Νέες ετικέτες:",
        "tags-edit-add": "Προσθήκη αυτών των ετικετών:",
        "tags-edit-remove": "Κατάργηση αυτών των ετικετών:",
        "logentry-move-move_redir": "{{GENDER:$2|Ο|Η}} $1 μετακίνησε τη σελίδα $3 στην $4 πάνω από την ανακατεύθυνση",
        "logentry-move-move_redir-noredirect": "{{GENDER:$2|Ο|Η}} $1 μετακίνησε την σελίδα $3 στην $4 πάνω από μια ανακατεύθυνση χωρίς να αφήσει ανακατεύθυνση",
        "logentry-patrol-patrol": "{{GENDER:$2|Ο|Η}} $1 επισήμανε την έκδοση $4 της σελίδας $3 ως ελεγμένη",
-       "logentry-patrol-patrol-auto": "{{GENDER:$2|Î\9f\97}} $1 Î±Ï\85Ï\84Ï\8cμαÏ\84α Ï\83ήμανε την έκδοση $4 της σελίδας $3 ως ελεγμένη",
+       "logentry-patrol-patrol-auto": "{{GENDER:$2|Î\9f\97}} $1 Î±Ï\85Ï\84Ï\8cμαÏ\84α Ï\83ημείÏ\89Ï\83ε την έκδοση $4 της σελίδας $3 ως ελεγμένη",
        "logentry-newusers-newusers": "Ο λογαριασμός χρήστη $1 {{GENDER:$2|δημιουργήθηκε}}",
        "logentry-newusers-create": "Ο λογαριασμός χρήστη $1 {{GENDER:$2|δημιουργήθηκε}}",
        "logentry-newusers-create2": "Ο λογαριασμός χρήστη $3 δημιουργήθηκε από {{GENDER:$2|τον|την}} $1",
        "expand_templates_generate_xml": "Εμφάνιση δέντρου συντακτικής ανάλυσης XML",
        "expand_templates_generate_rawhtml": "Εμφάνιση ανεπεξέργαστης HTML",
        "expand_templates_preview": "Προεπισκόπηση",
-       "expand_templates_preview_fail_html": "<em>Επειδή το {{SITENAME}} έχει ενεργοποιημένη ακατέργαστη HTML  και υπάρχει μια απώλεια της συνόδου δεδομένων, η προεπισκόπηση είναι κρυμμένη ως ένα προληπτικό μέτρο κατά επιθέσεων JavaScript.</em>\n\n<strong>Αν αυτή είναι μια δικαιολογημένη προσπάθεια προεπισκόπησης, παρακαλούμε δοκιμάστε ξανά.</strong>\nΑν εξακολουθεί να μην λειτουργεί, δοκιμάστε να [[Special:UserLogout|αποσυνδεθείτε]] και να συνδεθείτε πάλι.",
+       "expand_templates_preview_fail_html": "<em>Επειδή το {{SITENAME}} έχει ενεργοποιημένη ακατέργαστη HTML και υπήρξε μια απώλεια της συνόδου δεδομένων, η προεπισκόπηση είναι κρυμμένη ως ένα προληπτικό μέτρο κατά επιθέσεων JavaScript.</em>\n\n<strong>Αν αυτή είναι μια δικαιολογημένη προσπάθεια προεπισκόπησης, παρακαλούμε δοκιμάστε ξανά.</strong>\nΑν εξακολουθεί να μην λειτουργεί, δοκιμάστε να [[Special:UserLogout|αποσυνδεθείτε]] και να συνδεθείτε πάλι, καθώς και να ελέγξετε πως ο φυλλομετρητής σας επιτρέπει την χρήση cookies από τον ιστότοπο αυτό.",
        "expand_templates_preview_fail_html_anon": "<em>Επειδή το {{SITENAME}} έχει ενεργοποιημένη raw HTML και δεν είστε συνδεδεμένοι, η προεπισκόπηση είναι κρυμμένη ως ένα προληπτικό μέτρο ενάντια σε επιθέσεις JavaScript.</em>\n\n<strong>Αν αυτό είναι δικαιολογημένη απόπειρα προεπισκόπησης, παρακαλούμε να [[Special:UserLogin|συνδεθείτε]] και δοκιμάστε πάλι.</strong>",
        "pagelanguage": "Αλλαγή γλώσσας σελίδας",
        "pagelang-name": "Σελίδα",
        "default-skin-not-found": "Ουπς! Το default skin για το wiki, που ορίζεται στο <code dir=\"ltr\">$wgDefaultSkin</code> ως <code>$1</code>, δεν είναι διαθέσιμη.\n\nΗ εγκατάσταση φαίνεται να περιλαμβάνει τις ακόλουθες {{PLURAL:$4|δερμάτων|δέρματα}}. Δείτε [https://www.mediawiki.org/wiki/Manual:Skin_configuration Εγχειρίδιο: Δέρμα διαμόρφωση] για πληροφορίες σχετικά με τον τρόπο για να ενεργοποιήσετε {{PLURAL:$4|it|και να επιλέξετε το default}}.\n\n$2\n\n; Αν έχετε μόλις εγκαταστήσει το MediaWiki:\n: Πιθανότατα εγκατεστημένο από το git, ή απευθείας από τον πηγαίο κώδικα χρησιμοποιώντας κάποια άλλη μέθοδο. Αυτό είναι αναμενόμενο. Δοκιμάστε να εγκαταστήσετε κάποια δέρματα από [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org δέρματος, κατάλογος]:\n:* Τη λήψη του [https://www.mediawiki.org/wiki/Download tarball installer], το οποίο έρχεται με πολλά δέρματα και επεκτάσεις. Μπορείτε να αντιγράψετε και να επικολλήσετε τα <code>δέρματα/</code> directory.\n:* Λήψη μεμονωμένων δέρμα tarballs από [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Χρησιμοποιώντας το Git για να κατεβάσετε τα δέρματα].\n: Το κάνεις αυτό δεν πρέπει να παρεμβαίνει με το git repository αν είσαι MediaWiki προγραμματιστής.\n\n; Αν έχετε μόλις αναβαθμίσει MediaWiki:\n: Το MediaWiki 1.24 και νεότερα πλέον να ενεργοποιεί αυτόματα τα εγκατεστημένα δέρματα (βλέπε [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Εγχειρίδιο: Δέρμα autodiscovery]). Μπορείτε να επικολλήσετε το παρακάτω {{PLURAL:$5|γραμμή|γραμμές}} σε <code>LocalSettings.php</code> για να ενεργοποιήσετε {{PLURAL:$5|η|all}} εγκατασταθεί {{PLURAL:$5|δερμάτων|δέρματα}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Αν έχετε μόλις τροποποιήσατε <code>LocalSettings.php</code>:\n: Ελέγξτε το δέρμα ονόματα για τυπογραφικά λάθη.",
        "default-skin-not-found-no-skins": "Ουπς! Το default skin για το wiki, που ορίζεται στο <code>$wgDefaultSkin</code> ως <code>$1</code>, δεν είναι διαθέσιμη.\n\nΔεν έχετε κανένα εγκατεστημένο δέρματα.\n\n; Αν έχετε μόλις εγκαταστήσει ή να αναβαθμιστούν MediaWiki:\n: Πιθανότατα εγκατεστημένο από το git, ή απευθείας από τον πηγαίο κώδικα χρησιμοποιώντας κάποια άλλη μέθοδο. Αυτό είναι αναμενόμενο. Το MediaWiki 1.24 και νεότερη έκδοση δεν περιλαμβάνει κανένα από τα δέρματα στο κύριο αποθετήριο. Δοκιμάστε να εγκαταστήσετε κάποια δέρματα από [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org δέρματος, κατάλογος]:\n:* Τη λήψη του [https://www.mediawiki.org/wiki/Download tarball installer], το οποίο έρχεται με πολλά δέρματα και επεκτάσεις. Μπορείτε να αντιγράψετε και να επικολλήσετε τα <code>δέρματα/</code> directory.\n:* Λήψη μεμονωμένων δέρμα tarballs από [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Χρησιμοποιώντας το Git για να κατεβάσετε τα δέρματα].\n: Το κάνεις αυτό δεν πρέπει να παρεμβαίνει με το git repository αν είσαι MediaWiki προγραμματιστής. Δείτε [https://www.mediawiki.org/wiki/Manual:Skin_configuration Εγχειρίδιο: Δέρμα διαμόρφωση] για πληροφορίες για το πώς να ενεργοποιήσετε τα δέρματα και να επιλέξετε την προεπιλεγμένη.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> /$2 (ενεργοποιημένο)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''απενεργοποιημένο''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>απενεργοποιημένο</strong>)",
        "mediastatistics": "Στατιστικά πολυμέσων",
        "mediastatistics-summary": "Στατιστικά για τύπους ανεβασμένων αρχείων. Περιέχει μόνο την πλέον πρόσφατη έκδοση κάθε αρχείου. Δεν συμπεριλαμβάνονται παλιές ή διαγεγραμμένες εκδόσεις αρχείων.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2, $3%)",
        "sessionprovider-generic": "$1 συνεδρίες",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "συνεδρίες με βάση τα cookies",
        "sessionprovider-nocookies": "Τα Cookies μπορούν να απενεργοποιηθούν. Βεβαιωθείτε ότι έχετε ενεργοποιημένα τα cookies και ξεκινήστε πάλι.",
-       "randomrootpage": "Τυχαία σελίδα ρίζα"
+       "randomrootpage": "Τυχαία κύρια σελίδα"
 }
index eb48dd6..c405b38 100644 (file)
        "myprivateinfoprotected": "You do not have permission to edit your private information.",
        "mypreferencesprotected": "You do not have permission to edit your preferences.",
        "ns-specialprotected": "Special pages cannot be edited.",
-       "titleprotected": "This title has been protected from creation by [[User:$1|$1]].\nThe reason given is \"<em>$2</em>\".",
+       "titleprotected": "This title has been protected from creation by [[User:$1|$1]].\nThe reason given is <em>$2</em>.",
        "filereadonlyerror": "Unable to modify the file \"$1\" because the file repository \"$2\" is in read-only mode.\n\nThe system administrator who locked it offered this explanation: \"$3\".",
        "invalidtitle-knownnamespace": "Invalid title with namespace \"$2\" and text \"$3\"",
        "invalidtitle-unknownnamespace": "Invalid title with unknown namespace number $1 and text \"$2\"",
        "nocookiesfornew": "The user account was not created, as we could not confirm its source.\nEnsure you have cookies enabled, reload this page and try again.",
        "nocookiesforlogin": "{{int:nocookieslogin}}",
        "noname": "You have not specified a valid username.",
-       "loginsuccesstitle": "Login successful",
+       "loginsuccesstitle": "Logged in",
        "loginsuccess": "<strong>You are now logged in to {{SITENAME}} as \"$1\".</strong>",
        "nosuchuser": "There is no user by the name \"$1\".\nUsernames are case sensitive.\nCheck your spelling, or [[Special:UserLogin/signup|create a new account]].",
        "nosuchusershort": "There is no user by the name \"$1\".\nCheck your spelling.",
        "createaccount-title": "Account creation for {{SITENAME}}",
        "createaccount-text": "Someone created an account for your email address on {{SITENAME}} ($4) named \"$2\", with password \"$3\".\nYou should log in and change your password now.\n\nYou may ignore this message, if this account was created in error.",
        "login-throttled": "You have made too many recent login attempts.\nPlease wait $1 before trying again.",
-       "login-abort-generic": "Your login was unsuccessful - Aborted",
+       "login-abort-generic": "Your login failed - Aborted",
        "login-migrated-generic": "Your account has been migrated, and your username no longer exist on this wiki.",
        "loginlanguagelabel": "Language: $1",
        "loginlanguagelinks": "* {{#language:de}}|de\n* {{#language:en}}|en\n* {{#language:eo}}|eo\n* {{#language:fr}}|fr\n* {{#language:es}}|es\n* {{#language:it}}|it\n* {{#language:nl}}|nl",
        "newpassword": "New password:",
        "retypenew": "Retype new password:",
        "resetpass_submit": "Set password and log in",
-       "changepassword-success": "Your password has been changed successfully!",
+       "changepassword-success": "Your password has been changed!",
        "changepassword-throttled": "You have made too many recent login attempts.\nPlease wait $1 before trying again.",
        "botpasswords": "Bot passwords",
        "botpasswords-summary": "<em>Bot passwords</em> allow access to a user account via the API without using the account's main login credentials. The user rights available when logged in with a bot password may be restricted.\n\nIf you don't know why you might want to do this, you should probably not do it. No one should ever ask you to generate one of these and give it to them.",
        "botpasswords-insert-failed": "Failed to add bot name \"$1\". Was it already added?",
        "botpasswords-update-failed": "Failed to update bot name \"$1\". Was it deleted?",
        "botpasswords-created-title": "Bot password created",
-       "botpasswords-created-body": "The bot password \"$1\" was created successfully.",
+       "botpasswords-created-body": "The bot password for bot name \"$1\" of user \"$2\" was created.",
        "botpasswords-updated-title": "Bot password updated",
-       "botpasswords-updated-body": "The bot password \"$1\" was updated successfully.",
+       "botpasswords-updated-body": "The bot password for bot name \"$1\" of user \"$2\" was updated.",
        "botpasswords-deleted-title": "Bot password deleted",
-       "botpasswords-deleted-body": "The bot password \"$1\" was deleted.",
+       "botpasswords-deleted-body": "The bot password for bot name \"$1\" of user \"$2\" was deleted.",
        "botpasswords-newpassword": "The new password to log in with <strong>$1</strong> is <strong>$2</strong>. <em>Please record this for future reference.</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider is not available.",
        "botpasswords-restriction-failed": "Bot password restrictions prevent this login.",
        "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.\nYou may have already successfully changed your password or requested a new temporary password.",
+       "resetpass-wrong-oldpass": "Invalid temporary or current password.\nYou may have already 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.\nTo finish logging in, you must set a new password here:",
        "resetpass-temp-password": "Temporary password:",
        "newarticletextanon": "{{int:newarticletext|$1}}",
        "talkpagetext": "<!-- MediaWiki:talkpagetext -->",
        "anontalkpagetext": "----\n<em>This is the discussion page for an anonymous user who has not created an account yet, or who does not use it.</em>\nWe therefore have to use the numerical IP address to identify him/her.\nSuch an IP address can be shared by several users.\nIf 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.\nYou can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],\nor [{{fullurl:{{FULLPAGENAME}}|action=edit}} edit this page]</span>.",
+       "noarticletext": "There is currently no text in this page.\nYou can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],\nor [{{fullurl:{{FULLPAGENAME}}|action=edit}} create this page]</span>.",
        "noarticletext-nopermission": "There is currently no text in this page.\nYou 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}}",
        "missing-revision": "The revision #$1 of the page named \"{{FULLPAGENAME}}\" does not exist.\n\nThis is usually caused by following an outdated history link to a page that has been deleted.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
        "undo-summary-username-hidden": "Undo revision $1 by a hidden user",
        "cantcreateaccounttitle": "Cannot create account",
        "cantcreateaccount-text": "Account creation from this IP address (<strong>$1</strong>) has been blocked by [[User:$3|$3]].\n\nThe 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]].\n\nThe reason given by $3 is ''$2''",
+       "cantcreateaccount-range-text": "Account creation from IP addresses in the range <strong>$1</strong>, which includes your IP address (<strong>$4</strong>), has been blocked by [[User:$3|$3]].\n\nThe reason given by $3 is <em>$2</em>",
        "createaccount-hook-aborted": "$1",
        "viewpagelogs": "View logs for this page",
        "nohistory": "There is no edit history for this page.",
        "revdelete-unsuppress": "Remove restrictions on restored revisions",
        "revdelete-log": "Reason:",
        "revdelete-submit": "Apply to selected {{PLURAL:$1|revision|revisions}}",
-       "revdelete-success": "Revision visibility successfully updated.",
+       "revdelete-success": "Revision visibility updated.",
        "revdelete-failure": "Revision visibility could not be updated:\n$1",
-       "logdelete-success": "Log visibility successfully set.",
+       "logdelete-success": "Log visibility set.",
        "logdelete-failure": "Log visibility could not be set:\n$1",
        "revdel-restore": "change visibility",
        "pagehist": "Page history",
        "userrights-unchangeable-col": "Groups you cannot change",
        "userrights-irreversible-marker": "$1*",
        "userrights-conflict": "Conflict of user rights changes! Please review and confirm your changes.",
-       "userrights-removed-self": "You successfully removed your own rights. As such, you are no longer able to access this page.",
+       "userrights-removed-self": "You removed your own rights. As such, you are no longer able to access this page.",
        "group": "Group:",
        "group-user": "Users",
        "group-autoconfirmed": "Autoconfirmed users",
        "recentchanges-label-bot": "This edit was performed by a bot",
        "recentchanges-label-unpatrolled": "This edit has not yet been patrolled",
        "recentchanges-label-plusminus": "The page size changed by this number of bytes",
-       "recentchanges-legend-heading": "'''Legend:'''",
+       "recentchanges-legend-heading": "<strong>Legend:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (also see [[Special:NewPages|list of new pages]])",
        "recentchanges-legend-minor": "{{int:recentchanges-label-minor}}",
        "recentchanges-legend-bot": "{{int:recentchanges-label-bot}}",
        "recentchangeslinked-page": "Page name:",
        "recentchangeslinked-to": "Show changes to pages linked to the given page instead",
        "recentchanges-page-added-to-category": "[[:$1]] added to category",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] and {{PLURAL:$2|one page|$2 pages}} added to category",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] and [[Special:WhatLinksHere/$1|{{PLURAL:$2|one page|$2 pages}}]] added to category",
        "recentchanges-page-removed-from-category": "[[:$1]] removed from category",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] and {{PLURAL:$2|one page|$2 pages}} removed from category",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] and [[Special:WhatLinksHere/$1|{{PLURAL:$2|one page|$2 pages}}]] removed from category",
        "autochange-username": "MediaWiki automatic change",
        "upload": "Upload file",
        "uploadbtn": "Upload file",
        "backend-fail-read": "Could not read file \"$1\".",
        "backend-fail-create": "Could not write file \"$1\".",
        "backend-fail-maxsize": "Could not write file \"$1\" because it is larger than {{PLURAL:$2|one byte|$2 bytes}}.",
-       "backend-fail-readonly": "The storage backend \"$1\" is currently read-only. The reason given is: \"<em>$2</em>\"",
+       "backend-fail-readonly": "The storage backend \"$1\" is currently read-only. The reason given is: <em>$2</em>",
        "backend-fail-synced": "The file \"$1\" is in an inconsistent state within the internal storage backends",
        "backend-fail-connect": "Could not connect to storage backend \"$1\".",
        "backend-fail-internal": "An unknown error occurred in storage backend \"$1\".",
        "uploadstash-summary": "This page provides access to files that are uploaded or in the process of uploading, but are not yet published to the wiki. These files are not visible to anyone but the user who uploaded them.",
        "uploadstash-clear": "Clear stashed files",
        "uploadstash-nofiles": "You have no stashed files.",
-       "uploadstash-badtoken": "Performing of that action was unsuccessful, perhaps because your editing credentials expired. Try again.",
-       "uploadstash-errclear": "Clearing the files was unsuccessful.",
+       "uploadstash-badtoken": "Performing that action failed. Perhaps because your editing credentials expired. Please try again.",
+       "uploadstash-errclear": "Clearing the files failed.",
        "uploadstash-refresh": "Refresh the list of files",
+       "uploadstash-thumbnail": "view thumbnail",
        "invalid-chunk-offset": "Invalid chunk offset",
        "img-auth-accessdenied": "Access denied",
        "img-auth-nopathinfo": "Missing PATH_INFO.\nYour server is not set up to pass this information.\nIt may be CGI-based and cannot support img_auth.\nSee https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "delete-toobig": "This page has a large edit history, over $1 {{PLURAL:$1|revision|revisions}}.\nDeletion 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}}.\nDeleting it may disrupt database operations of {{SITENAME}};\nproceed with caution.",
        "deleteprotected": "You cannot delete this page because it has been protected.",
-       "deleting-backlinks-warning": "'''Warning:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Other pages]] link to or transclude the page you are about to delete.",
+       "deleting-backlinks-warning": "<strong>Warning:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|Other pages]] link to or transclude the page you are about to delete.",
        "rollback": "Roll back edits",
        "rollbacklink": "rollback",
        "rollbacklinkcount": "rollback $1 {{PLURAL:$1|edit|edits}}",
        "rollbackfailed": "Rollback failed",
        "cantrollback": "Cannot revert edit;\nlast contributor is only author of this page.",
        "alreadyrolled": "Cannot rollback last edit of [[:$1]] by [[User:$2|$2]] ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nsomeone else has edited or rolled back the page already.\n\nThe last edit to the page was by [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "The edit summary was: \"''$1''\".",
+       "editcomment": "The edit summary was: <em>$1</em>.",
        "revertpage": "Reverted edits by [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]]) to last revision by [[User:$1|$1]]",
        "revertpage-nouser": "Reverted edits by a hidden user to last revision by {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Reverted edits by $1;\nchanged back to last revision by $2.",
        "changecontentmodel-title-label": "Page title",
        "changecontentmodel-model-label": "New content model",
        "changecontentmodel-reason-label": "Reason:",
+       "changecontentmodel-submit": "Change",
        "changecontentmodel-success-title": "The content model was changed",
        "changecontentmodel-success-text": "The content type of [[:$1]] has been changed.",
        "changecontentmodel-cannot-convert": "The content on [[:$1]] cannot be converted to a type of $2.",
        "changecontentmodel-nodirectediting": "The $1 content model does not support direct editing",
        "log-name-contentmodel": "Content model change log",
        "log-description-contentmodel": "Events related to the content models of a page",
+       "logentry-contentmodel-new": "$1 {{GENDER:$2|created}} the page $3 using a non-default content model \"$5\"",
        "logentry-contentmodel-change": "$1 {{GENDER:$2|changed}} the content model of the page $3 from \"$4\" to \"$5\"",
        "logentry-contentmodel-change-revertlink": "revert",
        "logentry-contentmodel-change-revert": "revert",
        "tags-delete-not-allowed": "Tags defined by an extension cannot be deleted unless the extension specifically allows it.",
        "tags-delete-not-found": "The tag \"$1\" does not exist.",
        "tags-delete-too-many-uses": "The tag \"$1\" is applied to more than $2 {{PLURAL:$2|revision|revisions}}, which means it cannot be deleted.",
-       "tags-delete-warnings-after-delete": "The tag \"$1\" was deleted successfully, but the following {{PLURAL:$2|warning was|warnings were}} encountered:",
+       "tags-delete-warnings-after-delete": "The tag \"$1\" was deleted, but the following {{PLURAL:$2|warning was|warnings were}} encountered:",
        "tags-activate-title": "Activate tag",
        "tags-activate-question": "You are about to activate the tag \"$1\".",
        "tags-activate-reason": "Reason:",
        "tags-edit-revision-legend": "Add or remove tags from {{PLURAL:$1|this revision|all $1 revisions}}",
        "tags-edit-logentry-legend": "Add or remove tags from {{PLURAL:$1|this log entry|all $1 log entries}}",
        "tags-edit-existing-tags": "Existing tags:",
-       "tags-edit-existing-tags-none": "''None''",
+       "tags-edit-existing-tags-none": "<em>None</em>",
        "tags-edit-new-tags": "New tags:",
        "tags-edit-add": "Add these tags:",
        "tags-edit-remove": "Remove these tags:",
        "tags-edit-reason": "Reason:",
        "tags-edit-revision-submit": "Apply changes to {{PLURAL:$1|this revision|$1 revisions}}",
        "tags-edit-logentry-submit": "Apply changes to {{PLURAL:$1|this log entry|$1 log entries}}",
-       "tags-edit-success": "The changes were successfully applied.",
+       "tags-edit-success": "The changes were applied.",
        "tags-edit-failure": "The changes could not be applied:\n$1",
        "tags-edit-nooldid-title": "Invalid target revision",
        "tags-edit-nooldid-text": "You have either not specified any target revision on which to perform this function, or the specified revision does not exist.",
        "default-skin-not-found": "Whoops! The default skin for your wiki, defined in <code dir=\"ltr\">$wgDefaultSkin</code> as <code>$1</code>, is not available.\n\nYour installation seems to include the following {{PLURAL:$4|skin|skins}}. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable {{PLURAL:$4|it|them and choose the default}}.\n\n$2\n\n; If you have just installed MediaWiki:\n: You probably installed from git, or directly from the source code using some other method. This is expected. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by:\n:* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* Downloading individual skin tarballs from [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Using Git to download skins].\n: Doing this should not interfere with your git repository if you're a MediaWiki developer.\n\n; If you have just upgraded MediaWiki:\n: MediaWiki 1.24 and newer no longer automatically enables installed skins (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). You can paste the following {{PLURAL:$5|line|lines}} into <code>LocalSettings.php</code> to enable {{PLURAL:$5|the|all}} installed {{PLURAL:$5|skin|skins}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; If you have just modified <code>LocalSettings.php</code>:\n: Double-check the skin names for typos.",
        "default-skin-not-found-no-skins": "Whoops! The default skin for your wiki, defined in <code>$wgDefaultSkin</code> as <code>$1</code>, is not available.\n\nYou have no installed skins.\n\n; If you have just installed or upgraded MediaWiki:\n: You probably installed from git, or directly from the source code using some other method. This is expected. MediaWiki 1.24 and newer doesn't include any skins in the main repository. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by:\n:* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* Downloading individual skin tarballs from [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Using Git to download skins].\n: Doing this should not interfere with your git repository if you're a MediaWiki developer. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable skins and choose the default.\n",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (enabled)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disabled''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>disabled</strong>)",
        "mediastatistics": "Media statistics",
        "mediastatistics-summary": "Statistics about uploaded file types. This only includes the most recent version of a file. Old or deleted versions of files are excluded.",
        "mediastatistics-nfiles": "$1 ($2%)",
index d257f96..8e163a7 100644 (file)
        "october-gen": "oktobro",
        "november-gen": "novembro",
        "december-gen": "decembro",
-       "jan": "Jan",
-       "feb": "Feb",
-       "mar": "Mar",
-       "apr": "Apr",
-       "may": "Maj",
-       "jun": "Jun",
-       "jul": "Jul",
-       "aug": "Aŭg",
-       "sep": "Sep",
-       "oct": "Okt",
-       "nov": "Nov",
-       "dec": "Dec",
+       "jan": "jan",
+       "feb": "feb",
+       "mar": "mar",
+       "apr": "apr",
+       "may": "maj",
+       "jun": "jun",
+       "jul": "jul",
+       "aug": "aŭg",
+       "sep": "sep",
+       "oct": "okt",
+       "nov": "nov",
+       "dec": "dec",
        "january-date": "$1-a de januaro",
        "february-date": "$1-a de februaro",
        "march-date": "$1-a de marto",
        "search": "Serĉi",
        "searchbutton": "Serĉi",
        "go": "Ek!",
-       "searcharticle": "Ek!",
+       "searcharticle": "Ek",
        "history": "Historio de versioj",
        "history_short": "Historio",
        "updatedmarker": "ĝisdatigita de post mia lasta vizito",
        "unprotectthispage": "Ŝanĝi protektadon de ĉi tiu paĝo",
        "newpage": "Nova paĝo",
        "talkpage": "Diskuti la paĝon",
-       "talkpagelinktext": "Diskuto",
+       "talkpagelinktext": "diskuto",
        "specialpage": "Speciala Paĝo",
        "personaltools": "Personaj iloj",
        "articlepage": "Rigardi artikolon",
        "copyrightpage": "{{ns:project}}:Aŭtorrajto",
        "currentevents": "Aktualaĵoj",
        "currentevents-url": "Project:Aktualaĵoj",
-       "disclaimers": "Malgarantio",
+       "disclaimers": "Malgarantioj",
        "disclaimerpage": "Project:Malgarantia paĝo",
        "edithelp": "Helpo pri redaktado",
        "helppage-top-gethelp": "Helpo",
        "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 tiu titolo estas protektita de kreado de [[User:$1|$1]].\nLa kialo donata estis ''$2''.",
+       "titleprotected": "Ĉi tiu titolo estas protektita de kreado de [[User:$1|$1]].\nLa kialo donata estis <em>$2</em>.",
        "filereadonlyerror": "La dosiero \"$1\" ne estas modifebla, ĉar la dosiera deponejo \"$2\" estas en nurlegebla reĝimo.\n\nLa sistema administranto, kiu ŝlosis ĝin, oferis 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\"",
        "virus-scanfailed": "skano malsukcesis (kun kodo $1)",
        "virus-unknownscanner": "nekonata kontraŭvirusilo:",
        "logouttext": "'''Vi nun estas elsalutinta.'''\n\nNotu ke iuj paĝoj daŭre ŝajnos kvazaŭ vi ankoraŭ estus ensalutinta, ĝis vi refreŝigos kaŝmemoron de via retumilo.",
+       "cannotlogoutnow-title": "Nuntempe ne eblas elsaluti",
+       "cannotlogoutnow-text": "Ne eblas elsaluti dum uzado de $1.",
        "welcomeuser": "Bonvenon, $1!",
        "welcomecreation-msg": "Via konto estas kreita.\nNe forgesu ŝanĝi viajn [[Special:Preferences|{{SITENAME}}-preferojn]]",
        "yourname": "Salutnomo:",
        "createacct-yourpasswordagain": "Konfirmu pasvorton",
        "createacct-yourpasswordagain-ph": "Retajpu pasvorton",
        "remembermypassword": "Memori mian ensalutadon ĉe ĉi tiu komputilo (daŭrante maksimume $1 {{PLURAL:$1|tagon|tagojn}})",
-       "userlogin-remembermypassword": "Memoru mian ensaluton",
+       "userlogin-remembermypassword": "Memori mian ensaluton",
        "userlogin-signwithsecure": "Uzu sekurigitan konekton",
+       "cannotloginnow-title": "Nuntempe ne eblas ensaluti",
+       "cannotloginnow-text": "Ne eblas ensaluti dum uzado de $1.",
        "yourdomainname": "Via domajno",
        "password-change-forbidden": "Ve ne povas ŝanĝi pasvortojn en ĉi tiu vikio.",
        "externaldberror": "Aŭ estis datenbaza eraro rilate al ekstera aŭtentikigado, aŭ vi ne rajtas ĝisdatigi vian eksteran konton.",
        "userlogin-joinproject": "Aliĝu al {{SITENAME}}",
        "nologin": "Ĉu vi ne havas konton? $1.",
        "nologinlink": "Krei konton",
-       "createaccount": "Krei novan konton",
+       "createaccount": "Krei konton",
        "gotaccount": "Ĉu vi jam havas konton? '''$1'''.",
        "gotaccountlink": "Ensaluti",
        "userlogin-resetlink": "Ĉu vi forgesis ensalutajn detalojn?",
        "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 paĝon kaj reprovu.",
        "noname": "Vi ne tajpis validan salutnomon.",
-       "loginsuccesstitle": "Ensalutado sukcesis",
+       "loginsuccesstitle": "Ensalutis",
        "loginsuccess": "Vi ensalutis ĉe {{SITENAME}} kiel uzanto \"$1\".",
        "nosuchuser": "Neniu uzanto havas nomon \"$1\".\nNomoj por uzantoj estas usklecodistingaj.\nKontrolu vian literumadon, aŭ [[Special:UserLogin/signup|kreu novan konton]].",
        "nosuchusershort": "Ne ekzistas uzanto kun la nomo \"$1\". Bonvolu kontroli vian ortografion.",
        "wrongpasswordempty": "Vi tajpis malplenan pasvorton. Bonvolu provi denove.",
        "passwordtooshort": "Pasvortoj devas esti longaj almenaŭ  $1 {{PLURAL:$1|1 signon|$1 signojn}}.",
        "passwordtoolong": "Pasvorto ne povas esti pli longa ol {{PLURAL:$1|1 signo|$1 signoj}}.",
+       "passwordtoopopular": "Ne eblas uzi kutimajn pasvortojn. Bonvolu uzi pli unikan pasvorton.",
        "password-name-match": "Via pasvorto devas nepre malsami vian salutnomon.",
        "password-login-forbidden": "Estas malpermesite uzi tiun ĉi salutnomon kaj pasvorton.",
        "mailmypassword": "Refari pasvorton",
        "createacct-another-realname-tip": "La vera nomo estas nenecesa.\nSe vi decidas indiki ĝin, ĝi estos uzata por montri atribuadon de viaj kontribuoj.",
        "pt-login": "Ensaluti",
        "pt-login-button": "Ensaluti",
-       "pt-createaccount": "Krei novan konton",
+       "pt-createaccount": "Krei konton",
        "pt-userlogout": "Elsaluti",
        "php-mail-error-unknown": "Nekonata eraro en la funkcio mail() de PHP",
        "user-mail-no-addy": "Provis sendi retpoŝton sen retpoŝtadreso.",
        "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.\nBonvolu atendi $1 antaŭ ol reprovi.",
+       "botpasswords": "Robotaj pasvortoj",
+       "botpasswords-summary": "<em>Robotaj pasvortoj</em> ebligas aliron al uzanto-konto per API sen uzado de ĉefaj ensalutaj datumoj de la konto. La uzanto-rajtoj disponeblaj dum ensaluto per robota pasvorto povas esti limigitaj.\n\nSe vi ne scias, kial vi devus fari tion, vi probable maldevus fari tion. Neniu devus peti vin generi pasvorton tie ĉi kaj transdoni ĝin al li.",
+       "botpasswords-disabled": "Robotaj pasvortoj estas malŝaltitaj.",
+       "botpasswords-no-central-id": "Por uzi robotajn pasvortojn vi devas esti ensalutita al centra konto.",
+       "botpasswords-existing": "Ekzistantaj robotaj pasvortoj",
+       "botpasswords-createnew": "Krei novan robotan pasvorton",
+       "botpasswords-editexisting": "Redakti ekzistantan robotan pasvorton",
+       "botpasswords-label-appid": "Robota nomo:",
        "botpasswords-label-create": "Krei",
        "botpasswords-label-update": "Ĝisdatigi",
        "botpasswords-label-cancel": "Nuligi",
        "botpasswords-label-delete": "Forigi",
        "botpasswords-label-resetpassword": "Rekomencigi la pasvorton",
+       "botpasswords-label-restrictions": "Limigoj de uzado:",
+       "botpasswords-bad-appid": "La robota nomo \"$1\" estas malvalida.",
+       "botpasswords-created-title": "Robota pasvorto kreita",
+       "botpasswords-created-body": "La robota pasvorto \"$1\" estis sukcese kreita.",
+       "botpasswords-updated-title": "Robota pasvorto ĝisdatigita",
+       "botpasswords-updated-body": "La robota pasvorto \"$1\" estis sukcese ĝisdatigita.",
+       "botpasswords-deleted-title": "Robota pasvorto forigita",
+       "botpasswords-deleted-body": "La robota pasvorto \"$1\" estis forigita.",
        "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",
        "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:\n\n$2\n\nĈi {{PLURAL:$3|tiu provizora pasvorto|tiuj provizoraj pasvortoj}} findatiĝos {{PLURAL:$5|unu tagon|$5 tagojn}}.\nVi ensalutu kaj elektu novan pasvorton nun. Se iu alia petis ĉi tion,\naŭ se vi memoris vian originalan pasvorton, kaj vi ne plu volas\nŝanĝi ĝin, vi povas ignori ĉi tiun mesaĝon kaj plu uzi vian \nmalnovan pasvorton.",
        "passwordreset-emailtext-user": "Uzanto $1 de {{SITENAME}} petis restarigo de via pasvorto por {{SITENAME}}\n($4). La {{PLURAL:$3|jena uzanto-konto estas asociita|jenaj uzanto-kontoj estas asociitaj}} kun ĉi tiu retpoŝtadreso:\n\n$2\n\nĈi {{PLURAL:$3|tiu provizora pasvorto|tiuj provizoraj pasvortoj}} findatiĝos {{PLURAL:$5|unu tagon|$5 tagojn}}.\nVi devas ensaluti kaj elekti novan pasvorton nun. Se iu alia petis ĉi tion,\naŭ se vi memoris vian originalan pasvorton, kaj vi ne plu volas ŝanĝi\nĝin, vi povas ignori ĉi tiun mesaĝon kaj uzi vian malnovan pasvorton.",
        "passwordreset-emailelement": "Salutnomo: \n$1\n\nProvizora pasvorto: \n$2",
-       "passwordreset-emailsentemail": "Se tio estas registrita retpoŝta adreso por via konto, tiam retpoŝto por renovigita pasvorto estos sendata al ĉi tiu adreso.",
+       "passwordreset-emailsentemail": "Se tiu ĉu retpoŝta adreso estas kunligita kun via konto, tiam al ĉi tiu adreso estos sendita retpoŝto por renovigi pasvorton.",
        "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",
        "changeemail": "Ŝanĝi aŭ forigi retpoŝtadreson",
        "newarticle": "(Nova)",
        "newarticletext": "Vi sekvis ligilon al paĝo ankoraŭ ne ekzistanta. Se vi volas krei ĝin, ektajpu malsupre (vidu la [$1 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.\nNi tial devas uzi la cifran IP-adreson por identigi lin/ŝin.\nĈi tia IP-adreso povas esti uzata de pluraj uzantoj.\nSe vi estas anonimulo kaj preferus eviti tiajn mistrafajn komentojn al vi, bonvolu [[Special:UserLogin/signup|krei konton]] aŭ [[Special:UserLogin|ensaluti]] por eviti estontan konfuzon pro aliaj anonimaj uzantoj.''",
-       "noarticletext": "Mankas teksto en ĉi tiu paĝo.\nVi povas [[Special:Search/{{PAGENAME}}|serĉi ĉi tiun paĝtitolon]] en aliaj paĝoj,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} serĉi la rilatajn protokolojn],\naŭ [{{fullurl:{{FULLPAGENAME}}|action=edit}} redakti ĉi tiun paĝon]</span>.",
+       "noarticletext": "Mankas teksto en ĉi tiu paĝo.\nVi povas [[Special:Search/{{PAGENAME}}|serĉi ĉi tiun paĝtitolon]] en aliaj paĝoj,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} serĉi la rilatajn protokolojn],\naŭ [{{fullurl:{{FULLPAGENAME}}|action=edit}} krei ĉi tiun paĝon]</span>.",
        "noarticletext-nopermission": "Estas neniom da teksto en ĉi tiu paĝo.\nVi povas [[Special:Search/{{PAGENAME}}|serĉi ĉi tiun paĝan titolon]] en aliaj paĝoj,\naŭ <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 \"{{FULLPAGENAME}}\" ne ekzistas.\n\nTio kutime estas kaŭzata per sekvado de malaktuala historio-ligilo al paĝo forigita.\nDetaloj 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.",
        "previewnote": "'''Memoru, ke ĉi tio estas nur antaŭrigardo.''' \nViaj ŝanĝoj ne ankoraŭ estas konservitaj!",
        "continue-editing": "Iri al redakta spaco",
        "previewconflict": "La jena antaŭrigardo montras la tekston el la supra tekstujo,\nkiel ĝi aperos se vi elektos konservi la paĝon.",
-       "session_fail_preview": "'''Ni ne povas procezi vian redakton pro perdo de seancaj datenoj.\nBonvolu reprovi.\nSe ankoraŭ ne funkcios, provu [[Special:UserLogout|elsaluti]] kaj reensaluti.'''",
-       "session_fail_preview_html": "'''Bedaŭrinde, ni ne povas trakti vian redakton pro manko de seancaj datenoj.'''\n\n''Ĉar {{SITENAME}} ebligas krudan HTML-kodon, ĉi tiu antaŭrigardo estas kaŝita kiel prevento kontraŭ Ĝavaskriptaj atakoj.''\n\n'''Se ĉi tiu estas taŭga provo por redakti, bonvolu reprovi.'''\nSe ankoraŭ ne funkcias, provu [[Special:UserLogout|elsaluti]] kaj reensaluti.",
+       "session_fail_preview": "Ni ne povas procezi vian redakton pro perdo de seancaj datenoj.\n\nVi eble elsalutiĝis. <strong>Bonvolu kontroli, ke vi estas plue ensalutinta kaj reprovu</strong>.\nSe ankoraŭ ne funkcios, provu [[Special:UserLogout|elsaluti]] kaj reensaluti kaj kontrolu ĉu vi retfoliumilo akceptas kuketojn de tiu ĉi retejo.",
+       "session_fail_preview_html": "Bedaŭrinde, ni ne povas trakti vian redakton pro manko de seancaj datenoj.\n<em>Ĉar {{SITENAME}} ebligas krudan HTML-kodon, ĉi tiu antaŭrigardo estas kaŝita kiel prevento kontraŭ Ĝavaskriptaj atakoj.</em>\n\n<strong>Se ĉi tiu estas taŭga provo por redakti, bonvolu reprovi.<strong>\nSe ankoraŭ ne funkcias, provu [[Special:UserLogout|elsaluti]] kaj reensaluti kaj kontrolu ĉu vi retfoliumilo akceptas kuketojn de tiu ĉi retejo.",
        "token_suffix_mismatch": "'''Via redakto estis malpermesita ĉar via kliento fuŝis la interpunkcion en la redakto-signo.\nLa redakto estis malpermesita por preventi koruptadon de la teksto de la paĝo.\nĈ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",
        "undo-summary-username-hidden": "Malfari ŝanĝon $1 de kaŝita uzulo",
        "cantcreateaccounttitle": "Ne eblas krei konton",
        "cantcreateaccount-text": "Konto-kreado de ĉi tiu IP-adreso ('''$1''') estis forbarita de [[User:$3|$3]].\n\nLa kialo donata de $3 estas ''$2''.",
-       "cantcreateaccount-range-text": "La kreado de kontoj de IP-adresoj en la intervalo '''$1''', kiu inkludas vian IP-adreson ('''$4'''), estis blokita de [[User:$3|$3]].\n\nLa donita kialo de $3 estas ''$2''",
+       "cantcreateaccount-range-text": "La kreado de kontoj de IP-adresoj en la intervalo <strong>$1</strong>, kiu inkludas vian IP-adreson (<strong>$4</strong>), estis blokita de [[User:$3|$3]].\n\nLa donita kialo de $3 estas <em>$2</em>",
        "viewpagelogs": "Rigardi la protokolojn por tiu ĉi paĝo",
        "nohistory": "Ne ekzistas historio de redaktoj por ĉi tiu paĝo.",
        "currentrev": "Aktuala versio",
        "mergehistory-empty": "Neniuj versioj estas kunigeblaj.",
        "mergehistory-done": "$3 {{PLURAL:$3|versio|versioj}} de $1 sukcese estis {{PLURAL:$3|kunigita|kunigitaj}} en [[:$2]].",
        "mergehistory-fail": "Ne povis fari la historian kunigon; bonvolu konstati la paĝajn kaj tempajn parametrojn.",
+       "mergehistory-fail-invalid-source": "Fonta paĝo estas malvalida.",
        "mergehistory-fail-toobig": "Ne eblas kunigi historiojn ĉar pli ol sojlo de $1 {{PLURAL:$1|revizio|revizioj}} estus {{PLURAL:$1|movita|movitaj}}.",
        "mergehistory-no-source": "Fontpaĝo $1 ne ekzistas.",
        "mergehistory-no-destination": "Celpaĝo $1 ne ekzistas.",
        "right-managechangetags": "Kreado kaj forigado de [[Special:Tags|etikedoj]] de datumbazo",
        "right-applychangetags": "Aldoni [[Special:Tags|etikedojn]] al propraj ŝanĝoj",
        "right-changetags": "Aldoni kaj forigi arbitrajn [[Special:Tags|etikedojn]] ĉe unuopaj revizioj kaj protokoleroj",
+       "grant-group-email": "Sendi retpoŝton",
+       "grant-createaccount": "Krei kontojn",
        "newuserlogpage": "Protokolo de uzanto-kreado",
        "newuserlogpagetext": "Jen protokolo de lastaj kreadoj de uzantoj.",
        "rightslog": "Protokolo de uzanto-rajtoj",
        "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-label-plusminus": "La paĝa grandeco ŝanĝiĝis je ĉi tiu nombro de bajtoj",
-       "recentchanges-legend-heading": "'''Klarigo:'''",
+       "recentchanges-label-plusminus": "La paĝa grandeco ŝanĝiĝis je ĉi tiu nombro de bitokoj",
+       "recentchanges-legend-heading": "<strong>Klarigo:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vidu ankaŭ [[Special:NewPages|liston de novaj paĝoj]])",
        "recentchanges-submit": "Montri",
        "rcnotefrom": "Malsupre estas la {{PLURAL:$5|ŝanĝo|ŝanĝoj}} ekde <strong>$3, $4</strong> (montrante ĝis <strong>$1</strong>).",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|priatentanta uzanto|priatentantaj uzantoj}}]",
        "rc_categories": "Nur paĝoj el jenaj kategorioj (disigu per \"|\"):",
        "rc_categories_any": "Iuj el la elektitaj",
-       "rc-change-size-new": "$1 {{PLURAL:$1|bajto|bajtoj}} post ŝanĝo",
+       "rc-change-size-new": "$1 {{PLURAL:$1|bitoko|bitokoj}} post ŝanĝo",
        "newsectionsummary": "/* $1 */ nova sekcio",
        "rc-enhanced-expand": "Montri detalojn (per JavaScript)",
        "rc-enhanced-hide": "Kaŝi detalojn",
        "filehist-deleteone": "forigi",
        "filehist-revert": "restarigi",
        "filehist-current": "nuna",
-       "filehist-datetime": "Dato/Tempo",
+       "filehist-datetime": "Dato/tempo",
        "filehist-thumb": "Bildeto",
        "filehist-thumbtext": "Bildeto por versio ekde $1",
        "filehist-nothumb": "Neniu bildeto",
        "apisandbox-intro": "Uzu tiun ĉi paĝon por eksperimenti kun '''MediaWiki API'''.\nVidu [//www.mediawiki.org/wiki/API:Main_page la API-dokumentadon] por pli da detaloj pri la uzo de API. Ekz-e: [//www.mediawiki.org/wiki/API#A_simple_example atingi la enhavon de la Ĉefpaĝo]. Elektu agon por vidi pliajn ekzemplojn.\n\nNotu ke, kvankam ĉi tiu estas provejo, agoj kiun vi faros en ĉi tiu paĝo povas modifi la vikion.",
        "apisandbox-submit": "Fari mendon",
        "apisandbox-reset": "Nuligi",
-       "apisandbox-examples": "Ekzemplo",
-       "apisandbox-results": "Rezulto",
+       "apisandbox-examples": "Ekzemploj",
+       "apisandbox-dynamic-parameters": "Aldonaj parametroj",
+       "apisandbox-dynamic-parameters-add-label": "Aldoni parametron:",
+       "apisandbox-dynamic-parameters-add-placeholder": "Nomo de parametro",
+       "apisandbox-dynamic-error-exists": "Parametro nomata \"$1\" jam ekzistas.",
+       "apisandbox-results": "Rezultoj",
        "apisandbox-request-url-label": "Mendi URL-on.",
        "apisandbox-request-time": "Tempo de peto: $1",
-       "booksources": "Libroservoj",
+       "booksources": "Librofontoj",
        "booksources-search-legend": "Serĉi librofontojn",
        "booksources-search": "Serĉi",
        "booksources-text": "Jen ligilaro al aliaj TTT-ejoj, kiuj vendas librojn,\nkaj/aŭ informumos pri la libro ligita.\nLa {{SITENAME}} ne estas komerce ligita al tiuj vendejoj, kaj la listo ne estu\nkomprenata kiel rekomendo aŭ reklamo.",
        "log-title-wildcard": "Serĉi titolojn komencantajn kun ĉi tiu teksto",
        "showhideselectedlogentries": "Montri/kaŝi elektitajn protokolerojn",
        "log-edit-tags": "Redakti etikedojn ĉe elektitaj protokoleroj",
+       "checkbox-select": "Elektu: $1",
+       "checkbox-all": "Ĉiuj",
+       "checkbox-none": "Neniu",
+       "checkbox-invert": "Inversigi",
        "allpages": "Ĉiuj paĝoj",
        "nextpage": "Sekvanta paĝo ($1)",
        "prevpage": "Antaŭa paĝo ($1)",
        "rollbackfailed": "Malfaro malsukcesis",
        "cantrollback": "Ne povas restarigi antaŭan redakton; la redaktinto lasta estas la sola aŭtoro de la paĝo.",
        "alreadyrolled": "Ne povas restarigi la lastan redakton de [[:$1]] de la [[User:$2|$2]] ([[User talk:$2|diskuto]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\npro tio, ke oni intertempe redaktis aŭ restarigis la paĝon.\nLa lasta redaktinto estis [[User:$3|$3]] ([[User talk:$3|diskuto]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "La resumo de la komento estis: \"''$1''\".",
+       "editcomment": "La resumo de la redakto estis: <em>$1</em>.",
        "revertpage": "Malfaris redaktojn de [[Special:Contributions/$2|$2]] ([[User talk:$2|diskuto]]) al la lasta versio de [[User:$1|$1]]",
        "revertpage-nouser": "Restarigis redaktojn de (salutnomo forigita) al lasta revizio de {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Restaris redaktojn de $1; ŝanĝis al lasta versio de $2.",
        "sessionfailure": "Ŝajnas, ke estas problemo kun via ensalutado;\nĈi ago estis nuligita por malhelpi fiensalutadon.\nBonvolu alklaki la reirbutonon kaj reŝargi la paĝon el kiu vi venas, kaj provu denove.",
        "changecontentmodel-title-label": "Titolo de paĝo",
        "changecontentmodel-reason-label": "Kialo:",
+       "changecontentmodel-submit": "Ŝanĝi",
        "logentry-contentmodel-change-revertlink": "restarigi",
        "logentry-contentmodel-change-revert": "restarigi",
        "protectlogpage": "Protokolo pri protektoj",
        "tooltip-t-contributions": "Listo de kontribuoj de {{GENDER:$1|ĉi tiu uzanto}}",
        "tooltip-t-emailuser": "Sendi retmesaĝon al tiu ĉi uzanto",
        "tooltip-t-info": "Pli da informo pri ĉi tiu paĝo",
-       "tooltip-t-upload": "Alŝuti bildojn aŭ dosierojn",
+       "tooltip-t-upload": "Alŝuti dosierojn",
        "tooltip-t-specialpages": "Listo de ĉiuj specialaj paĝoj",
        "tooltip-t-print": "Printebla versio de ĉi tiu paĝo",
        "tooltip-t-permalink": "Konstanta ligilo al ĉi versio de la paĝo",
        "tags-edit-revision-legend": "Aldoni aŭ forigi etikedojn de {{PLURAL:$1|tiu ĉi revizio|ĉiuj $1 revizioj}}",
        "tags-edit-logentry-legend": "Aldoni aŭ forigi etikedojn de {{PLURAL:$1|tiu ĉi protokolero|ĉiuj $1 protokoleroj}}",
        "tags-edit-existing-tags": "Ekzistantaj etikedoj:",
-       "tags-edit-existing-tags-none": "\"Neniu\"",
+       "tags-edit-existing-tags-none": "<em>Neniu</em>",
        "tags-edit-new-tags": "Novaj markiloj:",
        "tags-edit-add": "Aldoni ĉi-tiujn markilojn:",
        "tags-edit-remove": "Forigi tiujn ĉi etikedojn:",
        "limitreport-expansiondepth": "Plej alta profundeco de etendo",
        "limitreport-expensivefunctioncount": "Nombro de kostaj sintaks-analizilaj funkcioj",
        "expandtemplates": "Ŝablonetendilo",
-       "expand_templates_intro": "Ĉi tiu speciala paĝo traktas tekston kaj ampleksigas ĉiujn ŝablonojn en ĝi rekursie.\nĜi ankaŭ ampleksigas sintaksajn funkciojn kiel\n<code><nowiki>{{</nowiki>#language:…}}</code> kaj variablojn kiel\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>. Fakte preskaŭ iujn ajn en duoblaj krampoj.",
+       "expand_templates_intro": "Ĉi tiu speciala paĝo prenas tekston kaj rikure etendas ĉiujn ŝablonojn en ĝi.\nĜi etendas ankaŭ sintaksajn funkciojn kiel\n<code><nowiki>{{</nowiki>#language:…}}</code> kaj variablojn kiel\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nFakte, ĝi etendas preskaŭ ĉion en duoblaj krampoj.",
        "expand_templates_title": "Kunteksta titolo, por {{FULLPAGENAME}}, ktp.:",
        "expand_templates_input": "Enigita teksto:",
        "expand_templates_output": "Rezulto",
        "default-skin-not-found": "Ups! La defaŭlta etoso por via vikio, difinita en <code dir=\"ltr\">$wgDefaultSkin</code> kiel <code>$1</code> ne estas disponebla.\n\nŜajnas, ke via instalaĵo enhavas {{PLURAL:$4|jenan etoson|jenajn etosojn}}. Vidu [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manlibro:Agordado de etosoj] por informoj kiel {{PLURAL:$4|ĝin ŝalti|ilin ŝalti kaj elekti la defaŭltan}}.\n\n$2\n\n; Se vi ĵus instalis MediaWiki:\n: Vi probable instalis de git aŭ rekte de fontokodo per alia metodo. Tio estas antaŭsupozata. MediaWiki 1.24 kaj pli novaj versioj enhavas neniun etoson en la ĉefa deponejo. Provu instali iujn etosojn de [https://www.mediawiki.org/wiki/Category:All_skins etosa dosierujo en mediawiki.org] per jenaj metodoj:\n:* Elŝutu [https://www.mediawiki.org/wiki/Download pakitan instalilon], kiu enhavas kelkajn etosojn kaj etendaĵojn. Vi povas de ĝi kopii kaj alglui la dosierujon <code>skins/</code>.\n:* Elŝutu unuopajn pakitajn etosojn de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Uzu Git por elŝuti etosojn].\n: Tio maldevus interkolizii kun via git-deponejo se vi estas evoluiganto de MediaWiki.\n\n; Se vi ĵus promociis MediaWiki:\n: MediaWiki 1.24 kaj pli novaj ne plu aŭtomate ŝaltas instalitajn etosojn (vidu [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manlibro:Aŭtomata malkovrado de etosoj]). Vi povas alglui {{PLURAL:$5|jenan linion|jenajn liniojn}} al <code>LocalSettings.php</code> por ŝalti {{PLURAL:$5|la instalitan etoson|ĉiujn instalitajn etosojn}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Se vi ĵus modifis <code>LocalSettings.php</code>:\n: Denove kontrolu nomon de etosoj pro eblaj mistajpoj.",
        "default-skin-not-found-no-skins": "Ups! La defaŭlta etoso por via vikio, difinita en <code>$wgDefaultSkin</code> kiel <code>$1</code> ne estas disponebla.\n\nVi havas neniun instalitan etson.\n\n; Se vi ĵus instalis aŭ promocii MediaWiki:\n: Vi probable instalis de git aŭ rekte de fontokodo per alia metodo. Tio estas antaŭspozata. MediaWiki 1.24 kaj pli novaj versioj enhavas neniun etoson en la ĉefa deponejo. Provu instali iujn etosojn de [https://www.mediawiki.org/wiki/Category:All_skins etosa dosierujo en mediawiki.org] per jenaj metodoj:\n:* Elŝutu [https://www.mediawiki.org/wiki/Download pakitan instalilon], kiu enhavas kelkajn eosojn kaj etendaĵojn. Vi povas de ĝi kopii kaj alglui la dosierujon <code>skins/</code>.\n:* Elŝutu unuopajn pakitajn etosojn de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Uzu Git por elŝuti etosojn].\n: Tio maldevus interkolizii kun via git-deponejo se vi estas evoluiganto de MediaWiki. Vidu [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manlibro:Agordado de etosoj] por informoj kiel ŝalti etosojn kaj elekti la defaŭltan.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (ŝalta)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''malŝalta''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>malŝalta</strong>)",
        "mediastatistics": "Statistikoj pri dosieroj",
        "mediastatistics-summary": "Statistiko pri tipoj de alŝutitaj dosieroj. Tio ĉi inkludas nur aktualajn versiojn de dosiero. Malnovaj aŭ forigitaj versioj de dosieroj estas ekskluditaj.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 bitoko|$1 bitokoj}} ($2; $3%)",
index a8f7c5d..d84ac8c 100644 (file)
                        "ElGatoSaez",
                        "Joaquin1001",
                        "YoViajo",
-                       "Asierog"
+                       "Asierog",
+                       "Mgpena",
+                       "Transonlohk"
                ]
        },
        "tog-underline": "Subrayar los enlaces:",
        "currentevents": "Actualidad",
        "currentevents-url": "Project:Actualidad",
        "disclaimers": "Aviso legal",
-       "disclaimerpage": "Project:Limitación general de responsabilidad",
+       "disclaimerpage": "Project:Descargo general",
        "edithelp": "Ayuda de edición",
        "helppage-top-gethelp": "Ayuda",
        "mainpage": "Página principal",
        "myprivateinfoprotected": "No tienes permiso para editar tu información privada.",
        "mypreferencesprotected": "No tienes permiso para editar tus preferencias.",
        "ns-specialprotected": "No se pueden editar las páginas especiales.",
-       "titleprotected": "Este título ha sido protegido contra creación por [[User:$1|$1]].\nEl motivo proporcionado es \"<em>$2</em>\".",
+       "titleprotected": "Este título ha sido protegido contra creación por [[User:$1|$1]].\nEl motivo proporcionado es <em>$2</em>.",
        "filereadonlyerror": "No se puede modificar el archivo \"$1\" porque el repositorio de archivos \"$2\" es de solo lectura.\n\nEl administrador del sistema que lo ha bloqueado ofrece esta explicación: \"$3\".",
        "invalidtitle-knownnamespace": "El título con el espacio de nombres «$2» y el texto «$3» no es válido",
        "invalidtitle-unknownnamespace": "El título con el espacio de nombres desconocido (n.º $1) y el texto «$2» no es válido",
        "createaccount-title": "Creación de cuenta para {{SITENAME}}",
        "createaccount-text": "Alguien creó en {{SITENAME}} ($4) una cuenta asociada a este correo electrónico con el nombre «$2» y contraseña «$3». Por favor, accede ahora y cambia tu contraseña.\n\nSi esta cuenta fue creada por error, ignora este mensaje.",
        "login-throttled": "Has intentado iniciar sesión demasiadas veces seguidas. Por favor espera $1 antes de intentarlo nuevamente.",
-       "login-abort-generic": "Se ha intentado acceder sin éxito - Cancelado",
+       "login-abort-generic": "Falló el inicio de sesión - Cancelado",
        "login-migrated-generic": "Se ha trasladado tu cuenta. Tu nombre de usuario ya no existe en este wiki.",
        "loginlanguagelabel": "Idioma: $1",
        "suspicious-userlogout": "Tu solicitud de desconexión ha sido denegada, pues parece haber sido enviada desde un navegador defectuoso o un proxy caché.",
        "newpassword": "Contraseña nueva:",
        "retypenew": "Confirmar la contraseña nueva:",
        "resetpass_submit": "Establecer contraseña e iniciar sesión",
-       "changepassword-success": "La contraseña se modificó correctamente.",
+       "changepassword-success": "Se modificó la contraseña.",
        "changepassword-throttled": "Has intentado acceder demasiadas veces recientemente.\nEspera $1 antes de intentarlo de nuevo.",
        "botpasswords": "Contraseñas de bots",
        "botpasswords-summary": "Las <em>contraseñas de bots</em> permiten el acceso a una cuenta de usuario mediante la API sin usar las credenciales principales de la cuenta. Los derechos de un usuario mientras haya iniciado sesión con una contraseña de bot pueden estar restringidos.\n\nSi no sabes por qué querrías hacer esto, probablemente no deberías hacerlo. Nadie debería pedirte que generes una de estas claves y que se la entregues.",
        "botpasswords-insert-failed": "No se pudo agregar el nombre del bot \"$1\". ¿Ya ha sido añadido?",
        "botpasswords-update-failed": "No se pudo actualizar el nombre del bot \"$1\". ¿Ha sido borrado?",
        "botpasswords-created-title": "Se creó la contraseña de bot",
-       "botpasswords-created-body": "La contraseña de bot \"$1\" se creó correctamente.",
-       "botpasswords-updated-title": "La contraseña de bot ha sido actualizada",
-       "botpasswords-updated-body": "La contraseña de bot\"$1\" se actualizó correctamente.",
-       "botpasswords-deleted-title": "La contraseña de bot ha sido eliminada",
-       "botpasswords-deleted-body": "La contraseña de bot \"$1\" ha sido eliminada.",
+       "botpasswords-created-body": "Se creó la contraseña del bot llamado \"$1\" del usuario \"$2\".",
+       "botpasswords-updated-title": "Se actualizó la contraseña de bot",
+       "botpasswords-updated-body": "Se actualizó la contraseña del bot llamado \"$1\" del usuario \"$2\".",
+       "botpasswords-deleted-title": "Se eliminó la contraseña de bot",
+       "botpasswords-deleted-body": "Se eliminó la contraseña del bot llamado \"$1\" del usuario \"$2\".",
        "botpasswords-newpassword": "La nueva contraseña para iniciar sesión con <strong>$1</strong> es <strong>$2</strong>. <em>Conserva estos datos para usos futuros.</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider no está disponible.",
        "botpasswords-restriction-failed": "Las restricciones de la contraseña de bot impiden este inicio de sesión.",
        "resetpass-no-info": "Debes iniciar sesión para acceder directamente a esta página.",
        "resetpass-submit-loggedin": "Cambiar contraseña",
        "resetpass-submit-cancel": "Cancelar",
-       "resetpass-wrong-oldpass": "La contraseña actual, o temporal, no es correcta.\nPuede que ya hayas cambiado exitosamente tu contraseña o que hayas pedido una nueva contraseña temporal.",
+       "resetpass-wrong-oldpass": "La contraseña actual, o temporal, no es correcta.\nPuede que ya hayas cambiado tu contraseña o que hayas pedido una nueva contraseña temporal.",
        "resetpass-recycled": "Restablece tu contraseña a algo distinto de tu contraseña actual.",
        "resetpass-temp-emailed": "Has iniciado sesión con una contraseña temporal enviada por correo electrónico.\nPara continuar, debes establecer una nueva contraseña aquí:",
        "resetpass-temp-password": "Contraseña temporal:",
        "newarticle": "(Nuevo)",
        "newarticletext": "Has seguido un enlace a una página que aún no existe.\nPara crear esta página, escribe en el cuadro que aparece a continuación. Para más información, consulta la [$1 página de ayuda].\nSi llegaste aquí por error, vuelve a la página anterior.",
        "anontalkpagetext": "---- ''Esta es la página de discusión de un usuario anónimo que aún no ha creado una cuenta, o no la usa. Por lo tanto, tenemos que usar su dirección IP para identificarlo. Puede que varios usuarios compartan una misma dirección IP. Si eres un usuario anónimo y crees que se han dirigido a ti con comentarios improcedentes, por favor [[Special:UserLogin/signup|crea una cuenta]] o, si ya la tienes, [[Special:UserLogin|identifícate]] para evitar confusiones futuras con otros usuarios anónimos.''",
-       "noarticletext": "En este momento no hay texto en esta página.\nPuedes [[Special:Search/{{PAGENAME}}|buscar el título de esta página]] en otras páginas,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los registros relacionados],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} editar esta página]</span>.",
+       "noarticletext": "En este momento no hay texto en esta página.\nPuedes [[Special:Search/{{PAGENAME}}|buscar el título de esta página]] en otras páginas,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los registros relacionados],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} crear esta página]</span>.",
        "noarticletext-nopermission": "Actualmente no hay texto en esta página.\nPuedes [[Special:Search/{{PAGENAME}}|buscar este título de página]] en otras páginas, o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los registros relacionados]</span>, pero no tienes permiso para crear esta página.",
        "missing-revision": "La revisión n.º $1 de la página «{{FULLPAGENAME}}» no existe.\n\nEsto suele ocurrir cuando se sigue un enlace de historial obsoleto que apunta a una página ya borrada.\nPuedes encontrar detalles en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrados].",
        "userpage-userdoesnotexist": "El usuario «$1» no está registrado. Asegúrate de que realmente quieres crear o editar esta página.",
        "previewnote": "<strong>Recuerda que esto no es más que una previsualización.</strong>\nAún no se han guardado tus cambios.",
        "continue-editing": "Ir al área de edición",
        "previewconflict": "Esta previsualización muestra cómo aparecerá el texto en el área de edición superior una vez guardados los cambios.",
-       "session_fail_preview": "<strong>Lo sentimos, no hemos podido procesar tu edición debido a una pérdida de los datos de sesión.</strong>\nPor favor, inténtalo de nuevo.\nSi el problema persiste, prueba a [[Special:UserLogout|cerrar sesión]] y volver a acceder.",
-       "session_fail_preview_html": "<strong>Lo sentimos, no hemos podido procesar tu edición debido a una pérdida de datos de sesión.</strong>\n\n<em>La previsualización está oculta como prevención frente a ataques JavaScript, puesto que este wiki tiene habilitado el HTML en bruto.</em>\n\n<strong>Si se trata de un intento legítimo de modificación, por favor, inténtalo de nuevo.</strong>\nSi aún así no funcionase, prueba a [[Special:UserLogout|cerrar sesión]] y volver a acceder.",
+       "session_fail_preview": "Lo sentimos, no hemos podido procesar tu edición debido a una pérdida de los datos de sesión.\n\nPuede que se haya cerrado tu sesión. <strong> Verifica que hayas accedido e inténtalo de nuevo</strong>.\nSi el problema persiste, prueba a [[Special:UserLogout|cerrar sesión]] y volver a acceder. Y verifica que tu navegador permita las cookies de este sitio.",
+       "session_fail_preview_html": "Lo sentimos, no hemos podido procesar tu edición debido a una pérdida de datos de sesión.\n\n<em>La previsualización está oculta como prevención frente a ataques JavaScript, puesto que este wiki tiene habilitado el HTML en bruto.</em>\n\n<strong>Si se trata de un intento legítimo de modificación, inténtalo de nuevo.</strong>\nSi aún así no funcionase, prueba a [[Special:UserLogout|cerrar sesión]] y volver a acceder, y verifica que tu navegador acepte cookies de este sitio.",
        "token_suffix_mismatch": "<strong>Tu edición ha sido rechazada porque tu cliente ha mezclado los signos de puntuación en la clave de edición.</strong>\nSe rechazó la edición para evitar la corrupción del texto de la página.\nEsto sucede en ocasiones si se usa un servicio de proxy anónimo defectuoso.",
        "edit_form_incomplete": "<strong>Una parte del formulario de edición no ha llegado al servidor. Comprueba que tus cambios están intactos e inténtalo de nuevo.</strong>",
        "editing": "Edición de «$1»",
        "undo-summary-username-hidden": "Se ha deshecho la revisión $1 de un usuario oculto",
        "cantcreateaccounttitle": "No se puede crear la cuenta",
        "cantcreateaccount-text": "[[User:$3|$3]] ha bloqueado la creación de cuentas desde esta dirección IP (<strong>$1</strong>).\n\nEl motivo dado por $3 es <em>$2</em>",
-       "cantcreateaccount-range-text": "[[User:$3|$3]] ha bloqueado la creación de cuentas de usuario desde direcciones IP en el rango '''$1''', en el que se encuentra tu dirección IP ('''$4''').\n\nEl motivo dado por $3 es ''$2''",
+       "cantcreateaccount-range-text": "[[User:$3|$3]] ha bloqueado la creación de cuentas de usuario desde direcciones IP en el rango <strong>$1</strong>, en el que se encuentra tu dirección IP (<strong>$4</strong>).\n\nEl motivo dado por $3 es <em>$2</em>",
        "viewpagelogs": "Ver los registros de esta página",
        "nohistory": "No hay historial de ediciones para esta página.",
        "currentrev": "Revisión actual",
        "revdelete-unsuppress": "Eliminar restricciones de las revisiones restauradas",
        "revdelete-log": "Motivo:",
        "revdelete-submit": "Aplicar a {{PLURAL:$1|la revisión seleccionada|las revisiones seleccionadas}}",
-       "revdelete-success": "Se ha cambiado con éxito la visibilidad de las revisiones.",
+       "revdelete-success": "Se cambió la visibilidad de las revisiones.",
        "revdelete-failure": "No se ha podido cambiar la visibilidad de las revisiones:\n$1",
-       "logdelete-success": "Se ha cambiado con éxito la visibilidad de los eventos.",
+       "logdelete-success": "Se cambió la visibilidad de los registros.",
        "logdelete-failure": "No se pudo cambiar la visibilidad de los eventos:\n$1",
        "revdel-restore": "cambiar visibilidad",
        "pagehist": "Historial de la página",
        "userrights-changeable-col": "Grupos que puedes cambiar",
        "userrights-unchangeable-col": "Grupos que no puedes cambiar",
        "userrights-conflict": "¡Conflicto de cambio de los permisos de usuario! Por favor, revisa y confirma tus cambios.",
-       "userrights-removed-self": "Has eliminado con éxito tus propios permisos. Por tanto, ya no podrás volver a acceder a esta página.",
+       "userrights-removed-self": "Has eliminado tus propios permisos. Por tanto, ya no podrás volver a acceder a esta página.",
        "group": "Grupo:",
        "group-user": "Usuarios",
        "group-autoconfirmed": "Autoconfirmados",
        "right-managechangetags": "Crear y eliminar [[Special:Tags|etiquetas]] en la base de datos",
        "right-applychangetags": "Aplicar [[Special:Tags|etiquetas]] junto con los cambios propios",
        "right-changetags": "Agregar y quitar [[Special:Tags|etiquetas]] arbitrarias a revisiones individuales y entradas del registro",
-       "grant-generic": "Paquete de derechos \"$1\"",
+       "grant-generic": "Paquete de permisos \"$1\"",
        "grant-group-page-interaction": "Interactuar con páginas",
        "grant-group-file-interaction": "Interactuar con multimedia",
        "grant-group-watchlist-interaction": "Interactuar con tu lista de seguimiento",
        "recentchanges-label-bot": "Esta edición fue realizada por un robot",
        "recentchanges-label-unpatrolled": "Esta edición aún no ha sido verificada",
        "recentchanges-label-plusminus": "El tamaño de la página cambió esta cantidad de bytes",
-       "recentchanges-legend-heading": "'''Leyenda:'''",
+       "recentchanges-legend-heading": "<strong>Leyenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (véase también la [[Special:NewPages|lista de páginas nuevas]])",
        "recentchanges-submit": "Mostrar",
        "rcnotefrom": "Debajo aparece{{PLURAL:$5| el cambio|n los cambios}} desde <strong>$3, $4</strong> (se muestran hasta <strong>$1</strong>).",
        "backend-fail-read": "No se pudo leer el archivo «$1».",
        "backend-fail-create": "No se pudo escribir el archivo $1.",
        "backend-fail-maxsize": "No se pudo escribir el archivo \"$1\" porque es mayor a {{PLURAL:$2|un byte|$2 bytes}}.",
-       "backend-fail-readonly": "El servidor (back-end) de almacenamiento \"$1\" está actualmente en estado de sólo lectura. La razón aducida fue: \"$2\"",
+       "backend-fail-readonly": "El servidor (back-end) de almacenamiento \"$1\" está actualmente en estado de sólo lectura. La razón aducida es: <em>$2</em>",
        "backend-fail-synced": "El archivo \"$1\" se encuentra en un estado incoherente dentro de los servidores (backends) de almacenamiento interno",
        "backend-fail-connect": "No se pudo conectar al servidor (backend) de almacenamiento \"$1\".",
        "backend-fail-internal": "Se ha producido un error desconocido en el servidor (backend) de almacenamiento \"$1\".",
        "uploadstash-clear": "Borrar los ficheros escondidos",
        "uploadstash-nofiles": "No tienes archivos escondidos.",
        "uploadstash-badtoken": "No se pudo realizar la acción. Es posible que haya finalizado el tiempo de espera de la sesión. Inténtalo de nuevo.",
-       "uploadstash-errclear": "El borrado de los archivos no tuvo éxito.",
+       "uploadstash-errclear": "Falló el borrado de los archivos.",
        "uploadstash-refresh": "Actualizar la lista de archivos",
        "invalid-chunk-offset": "Desplazamiento inválido del fragmento",
        "img-auth-accessdenied": "Acceso denegado",
        "apisandbox-submit": "Realizar solicitud",
        "apisandbox-reset": "Limpiar",
        "apisandbox-retry": "Reintentar",
+       "apisandbox-loading": "Cargando la información para el módulo API \"$1\"...",
+       "apisandbox-load-error": "Ocurrió un error al cargar la información para el módulo API \"$1\": $2",
        "apisandbox-no-parameters": "Este módulo API no tiene parámetros.",
        "apisandbox-helpurls": "Enlaces de ayuda",
        "apisandbox-examples": "Ejemplos",
        "apisandbox-dynamic-parameters": "Parámetros adicionales",
        "apisandbox-dynamic-parameters-add-label": "Añadir parámetro:",
        "apisandbox-dynamic-parameters-add-placeholder": "Nombre del parámetro",
+       "apisandbox-dynamic-error-exists": "Ya existe un parámetro llamado \"$1\".",
        "apisandbox-deprecated-parameters": "Parámetros desaconsejados",
        "apisandbox-submit-invalid-fields-title": "Algunos campos no son válidos",
+       "apisandbox-submit-invalid-fields-message": "Por favor, corrige los campos señalados e inténtalo de nuevo.",
        "apisandbox-results": "Resultados",
        "apisandbox-sending-request": "Enviando pedido a la API...",
        "apisandbox-loading-results": "Recibiendo resultados de la API...",
+       "apisandbox-results-error": "Ocurrió un error durante la carga de la respuesta a la consulta API: $1",
        "apisandbox-request-url-label": "URL solicitante:",
        "apisandbox-request-time": "Tiempo de solicitud: {{PLURAL:$1|$1 ms}}",
+       "apisandbox-results-fixtoken": "Corrige el token y vuelve a enviar",
+       "apisandbox-results-fixtoken-fail": "No fue posible recuperar el token \"$1\".",
+       "apisandbox-alert-page": "Los campos de esta página no son válidos.",
+       "apisandbox-alert-field": "El valor de este campo no es válido.",
        "booksources": "Fuentes de libros",
        "booksources-search-legend": "Buscar fuentes de libros",
        "booksources-search": "Buscar",
        "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}}.\nEliminarla puede perturbar las operaciones de la base de datos de {{SITENAME}}.\nProcede con cautela.",
        "deleteprotected": "No puedes eliminar esta página porque ha sido protegida.",
-       "deleting-backlinks-warning": "'''Advertencia:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Otras páginas]] enlazan o transcluyen la página que vas a eliminar.",
+       "deleting-backlinks-warning": "<strong>Advertencia:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|otras páginas]] enlazan o transcluyen la página que estás a punto de eliminar.",
        "rollback": "Revertir ediciones",
        "rollbacklink": "revertir",
        "rollbacklinkcount": "revertir $1 {{PLURAL:$1|edición|ediciones}}",
        "rollbackfailed": "No se pudo revertir",
        "cantrollback": "No se puede revertir la edición;\nel último colaborador es el único autor de esta página.",
        "alreadyrolled": "No se puede revertir la última edición de [[:$1]] hecha por [[User:$2|$2]] ([[User talk:$2|discusión]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nalguien más ya ha editado o revertido esa página.\n\nLa última edición fue hecha por [[User:$3|$3]] ([[User talk:$3|discusión]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "El resumen de la edición fue: ''«$1»''.",
+       "editcomment": "El resumen de la edición fue: <em>$1</em>.",
        "revertpage": "Revertidos los cambios de [[Special:Contributions/$2|$2]] ([[User talk:$2|disc.]]) a la última edición de [[User:$1|$1]]",
        "revertpage-nouser": "Revertidas las ediciones hechas por un usuario oculto a la última revisión hecha por {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Revertidas las ediciones de $1; recuperada la última versión de $2.",
        "changecontentmodel-title-label": "Título de página",
        "changecontentmodel-model-label": "Modelo de contenido nuevo",
        "changecontentmodel-reason-label": "Motivo:",
+       "changecontentmodel-submit": "Cambiar",
        "changecontentmodel-success-title": "Se cambió el modelo de contenido",
        "changecontentmodel-success-text": "Se ha cambiado el tipo de contenido de [[:$1]].",
        "changecontentmodel-cannot-convert": "El contenido de [[:$1]] no se puede convertir a un tipo de $2.",
        "changecontentmodel-nodirectediting": "El modelo de contenido $1 no admite la edición directa",
        "log-name-contentmodel": "Registro de cambios del modelo de contenido",
        "log-description-contentmodel": "Eventos relacionados con los modelos de contenido de una página",
+       "logentry-contentmodel-new": "$1 {{GENDER:$2|creó}} la página $3 usando un modelo de contenido no predeterminado \"$5\"",
        "logentry-contentmodel-change": "$1 {{GENDER:$2|cambió}} el modelo de contenido de la página $3 de \"$4\" a \"$5\"",
        "logentry-contentmodel-change-revertlink": "revertir",
        "logentry-contentmodel-change-revert": "revertir",
        "import-nonewrevisions": "Ninguna revisión fue importada (todas ya estaban presentes o fueron omitido debido a errores).",
        "xml-error-string": "$1 en la línea $2, col $3 (byte $4): $5",
        "import-upload": "Subir datos XML",
-       "import-token-mismatch": "Pérdida de datos de sesión.\nInténtalo de nuevo.",
+       "import-token-mismatch": "Pérdida de datos de sesión.\n\nEs posible que haya finalizado tu sesión. <strong>Por favor, verifica que tu sesión continúa iniciada e inténtalo de nuevo</strong>.\nSi aun así no funciona, intenta [[Special:UserLogout|cerrar sesión]] e iniciarla de nuevo, y comprueba que tu navegador acepta cookies de este sitio.",
        "import-invalid-interwiki": "No se puede importar de la wiki especificada.",
        "import-error-edit": "No se importó la página «$1» porque no tienes permisos para editarla.",
        "import-error-create": "No se importó la página «$1» porque no tienes permisos para crearla.",
        "exif-attributionurl": "Cuando reutilices este trabajo, por favor enlaza a",
        "exif-preferredattributionname": "Al volver a utilizar este trabajo, por favor da crédito",
        "exif-pngfilecomment": "Comentario de archivo PNG",
-       "exif-disclaimer": "Aviso legal",
+       "exif-disclaimer": "Descargo",
        "exif-contentwarning": "Advertencia de contenido",
        "exif-giffilecomment": "Comentario de archivo GIF",
        "exif-intellectualgenre": "Tipo de elemento",
        "tags-deactivate": "desactivar",
        "tags-hitcount": "$1 {{PLURAL:$1|cambio|cambios}}",
        "tags-manage-no-permission": "No tienes permiso para gestionar las etiquetas de cambios.",
+       "tags-manage-blocked": "No puedes gestionar el cambio de etiquetas mientras estés bloqueado.",
        "tags-create-heading": "Crear una etiqueta",
        "tags-create-explanation": "De manera predeterminada, las etiquetas nuevas estarán disponibles para su uso por usuarios y bots.",
        "tags-create-tag-name": "Nombre de la etiqueta:",
        "tags-delete-not-allowed": "No se pueden eliminar las etiquetas definidas por una extensión, a menos que esta lo permita expresamente.",
        "tags-delete-not-found": "La etiqueta «$1» no existe.",
        "tags-delete-too-many-uses": "No se puede borrar la etiqueta \"$1\" porque se ha aplicado a más de {{PLURAL:$2|una revisión|$2 revisiones}}.",
-       "tags-delete-warnings-after-delete": "La etiqueta \"$1\" se borró exitosamente, pero con {{PLURAL:$2|la siguiente advertencia|las siguientes advertencias}}:",
+       "tags-delete-warnings-after-delete": "La etiqueta \"$1\" se borró, pero con {{PLURAL:$2|la siguiente advertencia|las siguientes advertencias}}:",
        "tags-activate-title": "Activar etiqueta",
        "tags-activate-question": "Estás a punto de activar la etiqueta «$1».",
        "tags-activate-reason": "Motivo:",
        "tags-edit-reason": "Motivo:",
        "tags-edit-revision-submit": "Aplicar los cambios a {{PLURAL:$1|esta revisión|$1 revisiones}}",
        "tags-edit-logentry-submit": "Aplicar los cambios a {{PLURAL:$1|esta entrada del registro|$1 entradas del registro}}",
-       "tags-edit-success": "Los cambios se aplicaron con éxito.",
+       "tags-edit-success": "Se aplicaron los cambios.",
        "tags-edit-failure": "No se pudieron aplicar los cambios:\n$1",
        "tags-edit-nooldid-title": "Revisión de página no válida",
        "tags-edit-nooldid-text": "No se especificó ninguna revisión en que realizar esta acción, o bien, la revisión especificada no existe.",
        "expand_templates_generate_xml": "Mostrar el árbol XML",
        "expand_templates_generate_rawhtml": "Mostrar HTML en crudo",
        "expand_templates_preview": "Previsualización",
-       "expand_templates_preview_fail_html": "<em>Se ha ocultado la previsualización como precaución frente a ataques JavaScript. Esto se debe a que {{SITENAME}} tiene habilitada la característica de código HTML en bruto, y se perdieron los datos de la sesión.</em>\n\n<strong>Si se trata de un intento de previsualización legítimo, inténtalo de nuevo.</strong>\nSi aun así no funciona, intenta [[Special:UserLogout|cerrar sesión]] y volver a acceder.",
+       "expand_templates_preview_fail_html": "<em>Se ha ocultado la previsualización como precaución frente a ataques JavaScript. Esto se debe a que {{SITENAME}} tiene habilitada la característica de código HTML en bruto, y se perdieron los datos de la sesión.</em>\n\n<strong>Si se trata de un intento de previsualización legítimo, inténtalo de nuevo.</strong>\nSi aun así no funciona, intenta [[Special:UserLogout|cerrar sesión]] y volver a acceder, y verifica que tu navegador acepte cookies de este sitio.",
        "expand_templates_preview_fail_html_anon": "<em>Se ha ocultado la previsualización como precaución frente a ataques JavaScript. Esto se debe a que {{SITENAME}} tiene habilitada la característica de código HTML en bruto, y no has iniciado sesión.</em>\n\n<strong>Si se trata de un intento de previsualización legítimo, [[Special:UserLogin|inicia sesión]] e inténtalo de nuevo.</strong>",
        "expand_templates_input_missing": "Necesitas proporcionar al menos algún texto de entrada.",
        "pagelanguage": "Cambiar el idioma de la página",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambió}} el idioma de «$3» del $4 al $5.",
        "default-skin-not-found": "¡Vaya! La apariencia predeterminada de tu wiki, definida en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, no está disponible.\n\nLa instalación parece contener {{PLURAL:$4|la siguiente apariencia|las siguientes apariencias}}. Revisa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Configuración de apariencias] para más información sobre cómo {{PLURAL:$4|activarla|activarlas y seleccionar la predeterminada}}.\n\n$2\n\n; Si acabas de instalar MediaWiki:\n: Probablemente la hayas instalado desde git, o directamente desde el código fuente usando algún otro método. Es normal que ocurra esto. Intenta instalar algunas apariencias desde [https://www.mediawiki.org/wiki/Category:All_skins el directorio de apariencias de mediawiki.org] ya sea:\n:* Descargando [https://www.mediawiki.org/wiki/Download el instalador tarball], el cual contiene varias apariencias y extensiones. Puedes copiar y pegar el directorio <code>skins/</code> de ahí.\n:* Descargando tarballs individuales de cada apariencia de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Usando Git para descargar apariencias].\n: Hacer esto no debería interferir con tu repositorio git si eres un desarrollador de MediaWiki.\n\n; Si acabas de actualizar MediaWiki:\n: A partir de MediaWiki 1.24 ya no se activan automáticamente las apariencias instaladas (revisa [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Puedes pegar {{PLURAL:$5|la siguiente línea|las siguientes líneas}} en <code>LocalSettings.php</code> para activar {{PLURAL:$5|la apariencia instalada|todas las apariencias instaladas}} actualmente:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si acabas de modificar <code>LocalSettings.php</code>:\n: Comprueba detenidamente posibles errores tipográficos en los nombres de las apariencias.",
        "default-skin-not-found-no-skins": "¡Vaya! La apariencia predeterminada de tu wiki, definida en <code>$wgDefaultSkin</code> como <code>$1</code>, no está disponible.\n\nNo tienes apariencias instaladas.\n\n; Si has instalado o actualizado MediaWiki recientemente:\n: Probablemente has instalado desde git, o directamente desde el código fuente usando algún otro método. Esto puede ocurrir en este caso. A partir de MediaWiki 1.24 ya no se incluye ninguna apariencia en el repositorio principal. Trata de instalar algunas apariencias desde el [https://www.mediawiki.org/wiki/Category:All_skins directorio de apariencias de mediawiki.org], ya sea:\n:* Descargando el [https://www.mediawiki.org/wiki/Download instalador tarball], que viene con varias apariencias y extensiones. Puedes copiar y pegar el directorio <code>skins/</code> desde ahí.\n:* Descargando tarballs individuales de cada apariencia de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Usando Git para descargar apariencias].\n: Hacer esto no debería interferir con tu repositorio de MediaWiki si eres un desarrollador de MediaWiki. Revisa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Configuración de apariencias] para información sobre cómo habilitar las apariencias y seleccionar la predeterminada.",
-       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activado)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desactivado''')",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activada)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>desactivada</strong>)",
        "mediastatistics": "Estadísticas de multimedia",
        "mediastatistics-summary": "Estadísticas sobre los tipos de archivos cargados. Sólo se incluyen las versiones más recientes. Los archivos antiguos o eliminados están excluidos.",
        "mediastatistics-nfiles": "$1 ($2 %)",
index 30f40b1..5ce1955 100644 (file)
        "myprivateinfoprotected": "Sul pole lubatud oma eraandmeid redigeerida.",
        "mypreferencesprotected": "Sul pole lubatud oma eelistusi muuta.",
        "ns-specialprotected": "Erilehekülgi ei saa redigeerida.",
-       "titleprotected": "Kasutaja [[User:$1|$1]] on selle pealkirjaga lehe loomise keelanud esitades järgmise põhjenduse: ''$2''.",
+       "titleprotected": "Kasutaja [[User:$1|$1]] on selle pealkirjaga lehe loomise keelanud esitades järgmise põhjenduse: <em>$2</em>.",
        "filereadonlyerror": "Faili \"$1\" ei saa muuta, sest hoidla \"$2\" on kirjutuskaitstud.\n\nSüsteemiadministraator lukustas selle järgmisel põhjusel: \"$3\".",
        "invalidtitle-knownnamespace": "Vigane pealkiri nimeruumis \"$2\" tekstiga \"$3\"",
        "invalidtitle-unknownnamespace": "Vigane pealkiri nimeruuminumbriga $1 ja tekstiga \"$2\"",
        "undo-summary-username-hidden": "Eemaldatud redaktsioon $1, mille tegi peidetud kasutaja",
        "cantcreateaccounttitle": "Ei saa kontot luua",
        "cantcreateaccount-text": "[[User:$3|$3]] on blokeerinud konto loomise sellelt IP-aadressilt (<strong>$1</strong>).\n\n$3 märkis järgmise põhjuse: <em>$2</em>",
-       "cantcreateaccount-range-text": "Kontode loomine IP-aadressidelt vahemikus '''$1''', millesse jääb sinu IP-aadress ('''$4'''), on blokeeritud. Blokeeris kasutaja [[User:$3|$3]].\n\n$3 tõi järgmise põhjuse: ''$2''",
+       "cantcreateaccount-range-text": "Kontode loomine IP-aadressidelt vahemikus <strong>$1</strong>, millesse jääb sinu IP-aadress (<strong>$4</strong>), on blokeeritud. Blokeeris kasutaja [[User:$3|$3]].\n\n$3 tõi järgmise põhjuse: <em>$2</em>",
        "viewpagelogs": "Vaata selle lehekülje logisissekandeid",
        "nohistory": "Sellel leheküljel ei ole eelmisi redaktsioone.",
        "currentrev": "Viimane redaktsioon",
        "recentchanges-label-bot": "Roboti tehtud muudatus",
        "recentchanges-label-unpatrolled": "Seda muudatust ei ole veel kontrollitud",
        "recentchanges-label-plusminus": "Lehekülje suuruse muutus baitides",
-       "recentchanges-legend-heading": "'''Seletus:'''",
+       "recentchanges-legend-heading": "<strong>Seletus:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vaata ka [[Special:NewPages|uute lehekülgede loendit]])",
        "recentchanges-submit": "Näita",
        "rcnotefrom": "Allpool on toodud {{PLURAL:$5|muudatus|muudatused}} alates: <strong>$3, kell $4</strong> (näidatakse kuni <strong>$1</strong> muudatust)",
        "rollbackfailed": "Muudatuste tühistamine ebaõnnestus",
        "cantrollback": "Ei saa muudatusi eemaldada, sest viimane kaastööline on artikli ainus autor.",
        "alreadyrolled": "Muudatust, mille tegi lehele [[:$1]] kasutaja [[User:$2|$2]] ([[User talk:$2|arutelu]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]), ei saa tühistada, sest keegi teine on seda lehte vahepeal muutnud.\n\nLehte muutis viimasena [[User:$3|$3]] ([[User talk:$3|arutelu]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Redaktsiooni resümee oli: \"''$1''\".",
+       "editcomment": "Redaktsiooni resümee oli: <em>$1</em>.",
        "revertpage": "Tühistati kasutaja [[Special:Contributions/$2|$2]] ([[User talk:$2|arutelu]]) tehtud muudatused ja pöörduti tagasi viimasele muudatusele, mille tegi [[User:$1|$1]].",
        "revertpage-nouser": "Tühistati peidetud kasutaja muudatused ja pöörduti tagasi viimasele muudatusele, mille tegi [[User:$1|$1]].",
        "rollback-success": "Tühistati muudatused, mille tegi $1;\npöörduti tagasi viimasele muudatusele, mille tegi $2.",
        "default-skin-not-found": "Oih! Sinu viki vaikekujundus, milleks muutuja <code dir=\"ltr\">$wgDefaultSkin</code> järgi on <code>$1</code>, pole saadaval.\n\nPaistab, et sinu install sisaldab {{PLURAL:$4|järgmist kujundust|järgmisi kujundusi}}. Vaata [https://www.mediawiki.org/wiki/Manual:Skin_configuration kujunduste häälestusjuhendist], kuidas {{PLURAL:$4|seda|neid}} lubada ja kuidas valida vaikekujundus.\n\n$2\n\n; Kui oled MediaWiki just paigaldanud:\n: Paigaldasid tarkvara ilmselt Giti kaudu või otse lähtekoodist või mõnel muul viisil. See on ootuspärane. Proovi [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-i kujunduste kataloogist] mõni kujundus paigaldada. Selleks saad:\n:* laadida alla [https://www.mediawiki.org/wiki/Download lintarhiivi paigaldaja], mis sisaldab mitut kujundust ja tarkvaralisa. Saad sealt kleepimiseks kopeerida kausta <code dir=\"ltr\">skins/</code>;\n:* [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org-ist] kindla kujunduse lintarhiivi alla laadida;\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins kasutada Giti, et kujundusi alla laadida].\n: Selle tegemine ei tohiks häirida Giti hoidlat, kui oled MediaWiki arendaja.\n\n; Kui oled MediaWikit just täiendanud:\n: MediaWiki 1.24-s ja uuemates versioonides pole paigaldatud kujundused enam automaatselt lubatud (vaata juhendist [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery kujunduste automaatse leidmise] kohta). Saad kleepida {{PLURAL:$5|järgmise rea|järgmised read}} leheküljele <code>LocalSettings.php</code>, et lubada {{PLURAL:$5|ainus paigaldatud kujundus|kõik paigaldatud kujundused}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Kui oled lehekülge <code>LocalSettings.php</code> just muutnud:\n: Kontrolli üle, ega kujunduste nimedes pole trükivigu.",
        "default-skin-not-found-no-skins": "Oih! Sinu viki vaikekujundus, milleks muutuja <code dir=\"ltr\">$wgDefaultSkin</code> järgi on <code>$1</code>, pole saadaval.\n\nÜhtegi kujundust pole paigaldatud.\n\n; Kui oled MediaWiki just paigaldanud või täiendasid seda:\n: Paigaldasid tarkvara ilmselt Giti kaudu või otse lähtekoodist või mõnel muul viisil. See on ootuspärane. MediaWiki 1.24 ja uuemad versioonid ei sisalda peahoidlas ühtegi kujundust. Proovi [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-i kujunduste kataloogist] mõni kujundus paigaldada. Selleks saad:\n:* laadida alla [https://www.mediawiki.org/wiki/Download lintarhiivi paigaldaja], mis sisaldab mitut kujundust ja tarkvaralisa. Saad sealt kleepimiseks kopeerida kausta <code dir=\"ltr\">skins/</code>;\n:* [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org-ist] kindla kujunduse lintarhiivi alla laadida;\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins kasutada Giti, et kujundusi alla laadida].\n: Selle tegemine ei tohiks häirida Giti hoidlat, kui oled MediaWiki arendaja. Vaata [https://www.mediawiki.org/wiki/Manual:Skin_configuration kujunduste häälestusjuhendist], kuidas kujundusi lubada ja kuidas valida vaikekujundus.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (lubatud)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''keelatud''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>keelatud</strong>)",
        "mediastatistics": "Meediafailide arvandmestik",
        "mediastatistics-summary": "Arvandmed üles laaditud failitüüpide kohta. See käib ainult failide viimaste versioonide kohta. Vanu ja kustutatud versioone pole arvesse võetud.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 bait|$1 baiti}} ($2; $3%)",
index 7c33712..e99ed78 100644 (file)
        "myprivateinfoprotected": "Ez duzu eskumenik zure informazio pribatua aldatzeko.",
        "mypreferencesprotected": "Ez daukazu eskumenik zure hobespenak aldatzeko.",
        "ns-specialprotected": "Ezin dira {{ns:special}} izen-tarteko orrialdeak editatu.",
-       "titleprotected": "[[User:$1|$1]]ek izenburu hau sortzea ekidin zuen.\nEmandako arrazoia ''$2'' izan zen.",
+       "titleprotected": "[[User:$1|$1]]ek izenburu hau sortzea ekidin zuen.\nEmandako arrazoia <em>$2</em> izan zen.",
        "filereadonlyerror": "Ezin izan da \"$1\" fitxategia aldatu, \"$2\" fitxategi bilduma irakrutzeko-bakarrik moduan dagoelako.\n\nBlokeoa ezarri zuen administratzaileak honako arrazoia eman zuen: \"$3\".",
        "invalidtitle-knownnamespace": "Izenburua gaizki dago \"$2\" izen eremuan eta \"$3\" testuan",
        "invalidtitle-unknownnamespace": "Izenburua gaizki dago \"$1\" izen eremuan ezezagunean eta \"$2\" testuan",
        "recentchanges-label-bot": "Aldaketa hau bot batek egin du",
        "recentchanges-label-unpatrolled": "Aldaketa hau ez da oraindik patruilatua izan",
        "recentchanges-label-plusminus": "Orriaren neurriak byte kopuru honen gorabehera izan du",
-       "recentchanges-legend-heading": "'''Azalpenak:'''",
+       "recentchanges-legend-heading": "<strong>Azalpenak:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ikus, gainera, [[Special:NewPages|orri berrien zerrenda]])",
        "recentchanges-submit": "Erakutsi",
        "rcnotefrom": "Jarraian azaltzen diren aldaketak data honetatik aurrerakoak dira: <b>$2</b> (gehienez <b>$1</b> erakusten dira).",
        "enotif_lastvisited": "Ikus «$1» zure azken bisitaz geroztik izandako aldaketa guztiak ikusteko.",
        "enotif_lastdiff": "Jo $1(e)ra aldaketa hau ikusteko.",
        "enotif_anon_editor": "$1 erabiltzaile anonimoa",
-       "enotif_body": "Kaixo $WATCHINGUSERNAME,\n\n{{SITENAME}}-(e)ko $PAGETITLE orrialdea $CHANGEDORCREATED egin da $PAGEEDITOR-(e)k une honetan: $PAGEEDITDATE, ikus $PAGETITLE_URL azken bertsiorako.\n\n$NEWPAGE\n\nEgilearen laburpena: $PAGESUMMARY $PAGEMINOREDIT\n\nEgilearekin harremanetan jarri:\nposta: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nEz dira oharpen gehiago bidaliko orrialde hau berriz bisitatzen ez baduzu.\nHorrez gain, orrialdeen oharpen konfigurazioa leheneratu dezakezu jarraipen zerrendatik.\n\n             Adeitasunez {{SITENAME}}(e)ko oharpen sistema\n\n--\nZure epostaren jakinarazpenen konfigurazioa aldatzeko, ikus\n{{canonicalurl:{{#special:Preferences}}}}\n\nZure jarraipen zerrendako konfigurazioa aldatzeko, ikus\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nOrrialdea zure jarraipen zerrendatik ezabatzeko, ikus\n$UNWATCHURL\n\nLaguntza:\n$HELPPAGE",
+       "enotif_body": "Kaixo $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\n\nEgilearen laburpena: $PAGESUMMARY $PAGEMINOREDIT\n\nEgilearekin harremanetan jarri:\nposta: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nEz dira oharpen gehiago bidaliko orrialde hau berriz bisitatzen ez baduzu izena emanda zaudela.\nHorrez gain, orrialdeen oharpen konfigurazioa leheneratu dezakezu jarraipen zerrendatik.\n\n             Adeitasunez {{SITENAME}}(e)ko oharpen sistema\n\n--\nZure epostaren jakinarazpenen konfigurazioa aldatzeko, ikus\n{{canonicalurl:{{#special:Preferences}}}}\n\nZure jarraipen zerrendako konfigurazioa aldatzeko, ikus\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nOrrialdea zure jarraipen zerrendatik ezabatzeko, ikus\n$UNWATCHURL\n\nLaguntza:\n$HELPPAGE",
        "created": "sortu",
        "changed": "aldatu",
        "deletepage": "Orrialdea ezabatu",
        "rollbackfailed": "Desegiteak huts egin dud",
        "cantrollback": "Ezin da aldaketa desegin; erabiltzaile bakarrak hartu du parte.",
        "alreadyrolled": "Ezin da [[User:$2|$2]] ([[User talk:$2|Eztabaida]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) wikilariak «[[$1]]» orrian egindako azken aldaketa desegin;\nbeste norbaitek editatu edo desegin du jadanik.\n\n Azken aldaketa [[User:$3|$3]] ([[User talk:$3|Eztabaida]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) wikilariak egin du.",
-       "editcomment": "Aldaketaren laburpena: \"''$1''\".",
+       "editcomment": "Aldaketaren laburpena: <em>$1</em>.",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|talk]]) wikilariaren aldaketak deseginda, edukia [[User:$1|$1]] wikilariaren azken bertsiora itzuli da.",
        "rollback-success": "$1 wikilariaren aldaketak deseginda,\nedukia $2 wikilariaren azken bertsiora itzuli da.",
        "sessionfailure-title": "Saio-akatsa",
        "action-pagelang": "orrialdearen hizkuntza aldatu",
        "log-name-pagelang": "Hizkuntza aldatu:",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (gaituta)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desgaituta''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>desgaituta</strong>)",
        "mediastatistics": "Media estatistikak",
        "mediastatistics-summary": "Igotako fitxategien estatistikak. Hemen ikus daitekeena fitxategiaren azken bertsioa baino ez da. Fitxategiaren bertsio zahar edo ezabatuak kanpo daude.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 byte}} ($2; %$3)",
index f713c6d..ba57308 100644 (file)
        "cascadeprotected": "Esta páhina s'alcuentra protehia ebiu a que horma parti e {{PLURAL:$1|la siguienti páhina|las siguientis páhinas}}, qu'están protehias cola oción \"proteción en cascá\" ativá:\n$2",
        "namespaceprotected": "Nu tiinis premisu pa eital páhinas nel \"espaciu e nombris\" '''$1'''.",
        "ns-specialprotected": "Nu se puein eital las páhinas el {{ns:special}} \"espaciu e nombris\".",
-       "titleprotected": "Esti entítulu á siu atarugau pol [[User:$1|$1]].\nLa razón es la siguienti: ''$2''.",
+       "titleprotected": "Esti entítulu á siu atarugau pol [[User:$1|$1]].\nLa razón es la siguienti: <em>$2</em>.",
        "virus-badscanner": "Mala confeguración: escrucaol de virus andarríu: ''$1''",
        "virus-scanfailed": "marru al escrucal virus (cóigu $1)",
        "virus-unknownscanner": "Antivirus andarriu:",
        "watchthisupload": "Vegilal esti archivu",
        "filewasdeleted": "Un archivu con el mesmu nombri ya hue empuntau i alogu esborrau. Eberias comprebal el $1 enantis de gorvel a empuntalu.",
        "filename-bad-prefix": "El nombri del archivu qu'estás empuntandu esmiença pol '''\"$1\"''', es izil, es un nombri nu descritivu (típicu nombri dau autumaticamenti pol cámaras dehitalis). Pol favol, chamba el nombri del tu archivu.",
-       "upload-success-subj": "Empuntu satisfatoriu",
        "upload-proto-error": "Protocolu encorretu",
        "upload-proto-error-text": "El empuntu remotu prehisa e \"URLs\" qu´esmiencin pol <code>http://</code> u <code>ftp://</code>.",
        "upload-file-error": "Marru entelnu",
        "wlheader-showupdated": "Las páhinas que s'án emburacau dendi la úrtima vezi que las visoreasti son muestrás en '''negrina'''",
        "wlnote": "Embahu {{PLURAL:$1|es el úrtimu chambu|son los úrtimus '''$1''' chambus}} enas úrtimas {{PLURAL:$2|oras|'''$2''' oras}}.",
        "wlshowlast": "Muestral úrtimus $1 oras $2 dias",
-       "watchlistall2": "tó",
        "watchlist-options": "Ocionis de la mi lista e seguimientu",
        "watching": "Vehilandu...",
        "unwatching": "Abaldonandu la vehiláncia en...",
        "rollbackfailed": "Marru revirtiendu",
        "cantrollback": "Nu se puei eshazel la eición; el úrtimu colabutaol es el únicu autol d´esta páhina.",
        "alreadyrolled": "Nu es posibri revertil la úrtima eición de [[:$1]], hecha pol [[User:$2|$2]] ([[User talk:$2|Caraba]]); alguien ya á eitau u revertiu la páhina.\n\nLa úrtima eición á siu hecha pol [[User:$3|$3]] ([[User talk:$3|Caraba]]).",
-       "editcomment": "La síntesis la eición hue: \"''$1''\".",
+       "editcomment": "La síntesis la eición hue: <em>$1</em>.",
        "revertpage": "Án siu revertias las eicionis de [[Special:Contributions/$2|$2]] ([[User talk:$2|Caraba]]); chambau a la úrtima velsión de [[User:$1|$1]]",
        "rollback-success": "Revertias las eicionis de $1; chambau a la úrtima velsión de $2.",
        "sessionfailure": "Paci qu'ai un pobrema cola tu sesión; pol precaución\ns'á cancelau l'ación solicitá. Pursa nel botón \"Atrás\" del\ntu escrucaol pa cargal otra vezi la páhina i güervi a ententalu.",
index 0ef38b6..cf13d37 100644 (file)
@@ -49,7 +49,9 @@
                        "Danialbehzadi",
                        "MRG90",
                        "Mahdy Saffar",
-                       "Arian Ar"
+                       "Arian Ar",
+                       "Ms96",
+                       "Freshman404"
                ]
        },
        "tog-underline": "خط کشیدن زیر پیوندها:",
        "nstab-special": "صفحهٔ ویژه",
        "nstab-project": "صفحهٔ پروژه",
        "nstab-image": "پرونده",
-       "nstab-mediawiki": "Ù¾Û\8cغاÙ\85",
+       "nstab-mediawiki": "پیام",
        "nstab-template": "الگو",
        "nstab-help": "صفحهٔ راهنما",
        "nstab-category": "رده",
        "myprivateinfoprotected": "شما دارای مجوز ویرایش اطلاعات شخصی خود نیستید.",
        "mypreferencesprotected": "شما دارای مجوز ویرایش تنظیمات خود نیستید.",
        "ns-specialprotected": "صفحه‌های ویژه غیر قابل ویرایش هستند.",
-       "titleprotected": "این عنوان توسط [[User:$1|$1]] در برابر ایجاد محافظت شده‌است.\nدلیل ارائه‌شده این است: «''$2''».",
+       "titleprotected": "این عنوان توسط [[User:$1|$1]] در برابر ایجاد محافظت شده‌است.\nدلیل ارائه‌شده این است: <em>$2</em>.",
        "filereadonlyerror": "تغییر پروندهٔ «$1» ممکن نیست چون مخزن پروندهٔ «$2» در حالت فقط خواندنی قرار دارد.\n\nمدیری که آن را قفل کرده چنین توضیحی را ذکر کرده:  «$3».",
        "invalidtitle-knownnamespace": "عنوان نامعتبر با فضای نام «$2» و متن «$3»",
        "invalidtitle-unknownnamespace": "عنوان نامعتبر با فضای نام ناشناختهٔ شمارهٔ $1 و متن «$2»",
        "userlogin-yourname": "نام کاربری",
        "userlogin-yourname-ph": "نام کاربریتان را وارد کنید",
        "createacct-another-username-ph": "نام کاربریتان را وارد کنید",
-       "yourpassword": "رمز عبور:",
+       "yourpassword": "گذرواژه:",
        "userlogin-yourpassword": "گذرواژه",
        "userlogin-yourpassword-ph": "گذرواژه را وارد کنید",
        "createacct-yourpassword-ph": "یک گذرواژه وارد کنید",
        "nocookieslogin": "{{SITENAME}} برای ورود کاربران به سامانه از کوکی‌ها استفاده می‌کند.\nشما کوکی‌ها را از کار انداخته‌اید.\nلطفاً کوکی‌ها را به کار بیندازید و دوباره امتحان کنید.",
        "nocookiesfornew": "حساب کاربری ساخته نشد، زیرا نتوانستیم منبع آن را تأیید کنیم.\nمطمئن شوید که کوکی‌ها فعال هستند، آن‌گاه صفحه را از نو بارگیری کنید و دوباره امتحان کنید.",
        "noname": "شما نام کاربری معتبری مشخص نکرده‌اید.",
-       "loginsuccesstitle": "ورود موفقیت‌آمیز به سامانه",
+       "loginsuccesstitle": "ورود به سامانه",
        "loginsuccess": "'''شما اکنون با نام «$1» به {{SITENAME}} وارد شده‌اید.'''",
        "nosuchuser": "کاربری با نام «$1» وجود ندارد.\nنام کاربری به بزرگی و کوچکی حروف حساس است.\nاملای نام را بررسی کنید، یا [[Special:UserLogin/signup|یک حساب کاربری تازه بسازید]].",
        "nosuchusershort": "هیچ کاربری با نام ''$1'' وجود ندارد.\nاملایتان را وارسی کنید.",
        "newpassword": "گذرواژهٔ تازه:",
        "retypenew": "گذرواژهٔ تازه را دوباره وارد کنید",
        "resetpass_submit": "تنظیم گذرواژه و ورود به سامانه",
-       "changepassword-success": "گذرÙ\88اÚ\98Ù\87Ù\94 Ø´Ù\85ا Ø¨Ø§ Ù\85Ù\88Ù\81Ù\82Û\8cت ØªØºÛ\8cÛ\8cر Ø¯Ø§Ø¯Ù\87 Ø´Ø¯!",
+       "changepassword-success": "گذرواژهٔ شما تغییر داده شد!",
        "changepassword-throttled": "شما به تازگی چندین‌بار برای ثبت ورود تلاش کرده‌اید.\nلطفاً پیش از آنکه دوباره تلاش کنید $1 صبر کنید.",
        "botpasswords": "گذرواژه ربات",
        "botpasswords-summary": "<em>گذرواژه‌های رباتی</em> اجازه دسترسی به یک حساب کاربری با ای‌پی‌آی بدون استفاده از رمز اصلی حساب را می‌دهد. دسترسی‌های کاربری موجود هنگامی که با گذرواژهٔ رباتیک وارد می‌شوید ممکن است محدود باشند.\n\nاگر نمی‌دانید که ممکن است با این چه کنید، احتمالاً نباید هیچ کاری کنید. هیچ‌کس نباید از شما خواسته باشد که یکی از این‌ها درست کنید به آن‌ها بدهید.",
        "botpasswords-editexisting": "ویرایش گذرواژه موجود ربات",
        "botpasswords-label-appid": "نام ربات:",
        "botpasswords-label-create": "ایجاد",
-       "botpasswords-label-update": "به‌روز",
+       "botpasswords-label-update": "به‌روز رسانی",
        "botpasswords-label-cancel": "لغو",
        "botpasswords-label-delete": "حذف",
        "botpasswords-label-resetpassword": "بازگردانی گذرواژه",
        "botpasswords-insert-failed": "شکست در افزودن نام ربات «$1». در حال حاضر اضافه شده است؟",
        "botpasswords-update-failed": "شکست در به‌روزرسانی نام رباتی «$1». حذف شده است؟",
        "botpasswords-created-title": "گذرواژه ربات ایجاد شد",
-       "botpasswords-created-body": "گذرواژهٔ رباتی «$1» با موفقیت ایجاد شد.",
+       "botpasswords-created-body": "گذرواژهٔ رباتی برای ربات «$1» و کاربر «$2» ایجاد شد.",
        "botpasswords-updated-title": "گذرواژه ربات به‌روز شد",
-       "botpasswords-updated-body": "گذرواژهٔ رباتی «$1» با موفقیت به‌روز شد.",
+       "botpasswords-updated-body": "گذرواژهٔ رباتی برای ربات «$1» و کاربر «$2» به‌روز شد.",
        "botpasswords-deleted-title": "گذرواژه ربات حذف شد",
-       "botpasswords-deleted-body": "گذرواژهٔ رباتی «$1» حذف شد.",
+       "botpasswords-deleted-body": "گذرواژهٔ رباتی برای ربات «$1» و کاربر «$2» حذف شد.",
        "botpasswords-newpassword": "<strong>$2</strong> گذرواژهٔ جدید برای ورود با <strong>$1</strong> است. <em>لطفاً این را برای ارجاع در آینده ذخیره کنید.</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider موجود نیست.",
        "botpasswords-restriction-failed": "محدودیت‌های گذرواژهٔ ربات از این ورود جلوگیری می‌کند.",
        "resetpass-no-info": "برای دسترسی مستقیم به این صفحه شما باید به سامانه وارد شده باشید.",
        "resetpass-submit-loggedin": "تغییر گذرواژه",
        "resetpass-submit-cancel": "لغو",
-       "resetpass-wrong-oldpass": "گذرÙ\88اÚ\98Ù\87Ù\94 Ù\85Ù\88Ù\82ت Û\8cا Ø§Ø®Û\8cر Ù\86اÙ\85عتبر.\nÙ\85Ù\85Ú©Ù\86 Ø§Ø³Øª Ú©Ù\87 Ø´Ù\85ا Ù\87Ù\85Û\8cÙ\86Ú© Ú¯Ø°Ø±Ù\88اÚ\98Ù\87â\80\8cتاÙ\86 Ø±Ø§ Ø¨Ø§ Ù\85Ù\88Ù\81Ù\82Û\8cت ØªØºÛ\8cÛ\8cر Ø¯Ø§Ø¯Ù\87 Ø¨Ø§Ø´Û\8cد Û\8cا Ø¯Ø±Ø®Ù\88است Û\8cÚ© Ú¯Ø°Ø±Ù\88اÚ\98Ù\87Ù\94 Ù\85Ù\88Ù\82ت ØªØ§Ø²Ù\87 Ú©Ø±Ø¯Ù\87 Ø¨Ø§Ø´Û\8cد.",
+       "resetpass-wrong-oldpass": "گذرواژهٔ موقت یا اخیر نامعتبر.\nممکن است که شما همینک گذرواژه‌تان را تغییر داده باشید یا درخواست یک گذرواژهٔ موقت تازه کرده باشید.",
        "resetpass-recycled": "لطفاً رمز عبور خود را به چیز دیگری غیر از رمز عبور فعلی تنظیم کنید.",
        "resetpass-temp-emailed": "شما با یک کد ایمیل شدهٔ موقت وارد شده‌اید.\nبرای پایان ورود، شما باید رمز عبور جدیدی اینجا وارد کنید:",
        "resetpass-temp-password": "گذرواژهٔ موقت:",
        "newarticle": "(تازه)",
        "newarticletext": "شما پیوندی را دنبال کرده‌اید و به صفحه‌ای رسیده‌اید که هنوز وجود ندارد.\nبرای ایجاد صفحه، در مستطیل زیر شروع به نوشتن کنید (برای اطلاعات بیشتر به [$1 صفحهٔ راهنما] مراجعه کنید).\nاگر به اشتباه اینجا آمده‌اید، دکمهٔ «بازگشت» مرورگرتان را بزنید.",
        "anontalkpagetext": "----''این صفحهٔ بحث برای کاربر گمنامی است که هنوز حسابی درست نکرده است یا از آن استفاده نمی‌کند.\nبنا بر این برای شناسایی‌اش مجبوریم از نشانی آی‌پی عددی استفاده کنیم.\nچنین نشانی‌های آی‌پی ممکن است توسط چندین کاربر به شکل مشترک استفاده شود.\nاگر شما کاربر گمنامی هستید و تصور می‌کنید اظهار نظرات نامربوط به شما صورت گرفته است، لطفاً برای پیشگیری از اشتباه گرفته شدن با کاربران گمنام دیگر در آینده [[Special:UserLogin/signup|حسابی ایجاد کنید]] یا [[Special:UserLogin|به سامانه وارد شوید]].''",
-       "noarticletext": "این صفحه هم‌اکنون دارای هیچ متنی نیست.\nشما می‌توانید در صفحه‌های دیگر [[Special:Search/{{PAGENAME}}|عنوان این صفحه را جستجو کنید]]،\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} سیاهه‌های مرتبط را جستجو کنید]،\nیا [{{fullurl:{{FULLPAGENAME}}|action=edit}} این صفحه را ویرایش کنید]</span>.",
+       "noarticletext": "این صفحه هم‌اکنون دارای هیچ متنی نیست.\nشما می‌توانید در صفحه‌های دیگر [[Special:Search/{{PAGENAME}}|عنوان این صفحه را جستجو کنید]]،\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} سیاهه‌های مرتبط را جستجو کنید]،\nیا [{{fullurl:{{FULLPAGENAME}}|action=edit}} این صفحه را ایجاد کنید]</span>.",
        "noarticletext-nopermission": "این صفحه هم‌اکنون متنی ندارد.\nشما می‌توانید در دیگر صفحات [[Special:Search/{{PAGENAME}}|این عنوان را جستجو کنید]]،\nیا <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} سیاهه‌های مرتبط را بگردید]</span> ولی شما اجازه ایجاد این صفحه را ندارید.",
        "missing-revision": "ویرایش #$1 از صفحهٔ «{{FULLPAGENAME}}» موجود نیست.\n\nمعمولاً در اثر پیوند به تاریخچهٔ به‌روز نشدهٔ صفحهٔ حذف شده است.\nمی‌توانید جزئیات بیشتر را در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] بیابید.",
        "userpage-userdoesnotexist": "حساب کاربر «<nowiki>$1</nowiki>» ثبت نشده‌است.\nلطفاً مطمئن شوید که می‌خواهید این صفحه را ایجاد یا ویرایش کنید.",
        "userpage-userdoesnotexist-view": "حساب کاربری «$1» ثبت نشده‌است.",
        "blocked-notice-logextract": "دسترسی این کاربر در حال حاضر بسته است.\nآخرین مورد سیاهه قطع دسترسی در زیر آمده‌است:",
-       "clearyourcache": "<strong>نکته:</strong> پس از ذخیرهکردن ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.\n*<strong>فایرفاکس / سافاری:</strong> کلید <em>Shift</em> را نگه دارید و روی دکمهٔ <em>Reload</em> کلیک کنید، یا کلید‌های <em>Ctrl-F5</em> یا <em>Ctrl-R</em> را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های <em>⌘-R</em>)\n*<strong>گوگل کروم:</strong> کلیدهای <em>Ctrl+Shift+R</em> را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های <em>⌘-Shift-R</em>)\n*<strong>اینترنت اکسپلورر:</strong> کلید <em>Ctrl</em> را نگه‌دارید و روی دکمهٔ <em>Refresh</em> کلیک کنید، یا کلید‌های <em>Ctrl-F5</em> را با هم فشار دهید\n*<strong>اپرا:</strong> حافظهٔ نهانی مرورگر را از طریق منوی <em>Tools &rarr; Preferences</em> پاک کنید",
-       "usercssyoucanpreview": "'''نکته:''' پیش از ذخیرهکردن پرونده سی‌اس‌اس خود، با دکمهٔ '''{{int:showpreview}}''' آن را آزمایش کنید.",
-       "userjsyoucanpreview": "'''نکته:''' پیش از ذخیرهکردن پروندهٔ جاوااسکریپت خود، با دکمهٔ '''{{int:showpreview}}''' آن را آزمایش کنید.",
+       "clearyourcache": "<strong>نکته:</strong> پس از ذخیره کردن ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.\n*<strong>فایرفاکس / سافاری:</strong> کلید <em>Shift</em> را نگه دارید و روی دکمهٔ <em>Reload</em> کلیک کنید، یا کلید‌های <em>Ctrl-F5</em> یا <em>Ctrl-R</em> را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های <em>⌘-R</em>)\n*<strong>گوگل کروم:</strong> کلیدهای <em>Ctrl+Shift+R</em> را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های <em>⌘-Shift-R</em>)\n*<strong>اینترنت اکسپلورر:</strong> کلید <em>Ctrl</em> را نگه‌دارید و روی دکمهٔ <em>Refresh</em> کلیک کنید، یا کلید‌های <em>Ctrl-F5</em> را با هم فشار دهید\n*<strong>اپرا:</strong> حافظهٔ نهانی مرورگر را از طریق منوی <em>Tools &rarr; Preferences</em> پاک کنید",
+       "usercssyoucanpreview": "'''نکته:''' پیش از ذخیره کردن پرونده سی‌اس‌اس خود، با دکمهٔ '''{{int:showpreview}}''' آن را آزمایش کنید.",
+       "userjsyoucanpreview": "'''نکته:''' پیش از ذخیره کردن پروندهٔ جاوااسکریپت خود، با دکمهٔ '''{{int:showpreview}}''' آن را آزمایش کنید.",
        "usercsspreview": "'''فراموش مکنید که شما فقط دارید پیش‌نمایش سی‌اس‌اس کاربری‌تان را می‌بینید.'''\n'''این سی‌اس‌اس هنوز ذخیره نشده‌است!'''",
        "userjspreview": "'''به یاد داشته باشید که شما فقط دارید جاوااسکریپت کاربری‌تان را امتحان می‌کنید/پیش‌نمایش آن را می‌بینید.'''\n'''این جاوااسکریپت هنوز ذخیره نشده‌است!'''",
        "sitecsspreview": "'''به یاد داشته باشید که شما فقط دارید پیش‌نمایش این سی‌اس‌اس را می‌بینید.'''\n'''این سی‌اس‌اس هنوز ذخیره نشده‌است!'''",
        "undo-summary-username-hidden": "خنثی‌سازی نسخهٔ $1 به دست یک کاربر پنهان‌شده",
        "cantcreateaccounttitle": "نمی‌توان حساب باز کرد",
        "cantcreateaccount-text": "امكان ساختن حساب کاربری از این این نشانی آی‌پی ('''$1''') توسط [[User:$3|$3]] سلب شده است.\n\nدلیل ارائه شده توسط $3 چنین است: $2",
-       "cantcreateaccount-range-text": "ایجاد حساب از آدرس آی‌پی در مجموعه‌ی '''$1'''، که شامل آدرس آی‌پی شما ('''$4''') است، توسط [[User:$3|$3]] متوقف شده‌است.\nدلیل ارائه شده توسط $3، $2 است.",
+       "cantcreateaccount-range-text": "ایجاد حساب از آدرس آی‌پی در مجموعه‌ی <strong>$1</strong>، که شامل آدرس آی‌پی شما (<strong>$4</strong>) است، توسط [[User:$3|$3]] متوقف شده‌است.\nدلیل ارائه شده توسط $3، $2 است.",
        "viewpagelogs": "نمایش سیاهه‌های این صفحه",
        "nohistory": "این صفحه تاریخچهٔ ویرایش ندارد.",
        "currentrev": "نسخهٔ فعلی",
        "revdelete-unsuppress": "حذف محدودیت‌ها در بازبینی‌های ترمیم‌شده",
        "revdelete-log": "دلیل:",
        "revdelete-submit": "اعمال بر {{PLURAL:$1|نسخهٔ|نسخه‌های}} انتخاب شده",
-       "revdelete-success": "'''پیدایی نسخه با موفقیت به روز شد.'''",
+       "revdelete-success": "'''پیدایی نسخه به روز شد.'''",
        "revdelete-failure": "'''پیدایی نسخه‌ها قابل به روز کردن نیست:'''\n$1",
-       "logdelete-success": "تغÛ\8cÛ\8cر Ù¾Û\8cداÛ\8cÛ\8c Ù\85Ù\88رد Ø¨Ø§ Ù\85Ù\88Ù\81Ù\82Û\8cت Ø§Ù\86جاÙ\85 Ø´Ø¯.",
+       "logdelete-success": "تغییر پیدایی مورد انجام شد.",
        "logdelete-failure": "'''پیدایی سیاهه‌ها قابل تنظیم نیست:'''\n$1",
        "revdel-restore": "تغییر پیدایی",
        "pagehist": "تاریخچهٔ صفحه",
        "search-suggest": "آیا منظورتان این بود: $1",
        "search-rewritten": "نمایش نتایج $1. جستجوی به جای $2.",
        "search-interwiki-caption": "پروژه‌های خواهر",
-       "search-interwiki-default": "نتایج از $1 :",
+       "search-interwiki-default": "نتایج از $1:",
        "search-interwiki-more": "(بیشتر)",
        "search-relatedarticle": "مرتبط",
        "searchrelated": "مرتبط",
        "userrights-changeable-col": "گروه‌هایی که می‌توانید تغییر دهید",
        "userrights-unchangeable-col": "گروه‌هایی که نمی‌توانید تغییر دهید",
        "userrights-conflict": "تعارض دسترسی‌های کاربری! لطفاً بررسی کنید و تغییرات را تأیید کنید.",
-       "userrights-removed-self": "Ø´Ù\85ا Ø¨Ø§ Ù\85Ù\88Ù\81Ù\82Û\8cت Ø¯Ø³ØªØ±Ø³Û\8câ\80\8cÙ\87اÛ\8c Ø®Ù\88د Ø±Ø§ Ù\88استاÙ\86دÛ\8cد. Ø¨Ù\87 Ø§Û\8cÙ\86 ØªØ±ØªÛ\8cب Ø´Ù\85ا Ø¯Û\8cگر Ø¨Ù\87 Ø§Û\8cÙ\86 ØµÙ\81Ø­Ù\87 Ø¯Ø³ØªØ±Ø³Û\8c Ù\86دارÛ\8cد.",
+       "userrights-removed-self": "شما دسترسی‌های خود را واستاندید. به این ترتیب شما دیگر به این صفحه دسترسی ندارید.",
        "group": "گروه:",
        "group-user": "کاربران",
        "group-autoconfirmed": "کاربران تأییدشدهٔ خودکار",
        "recentchanges-label-bot": "این ویرایش را یک ربات انجام داده است",
        "recentchanges-label-unpatrolled": "این ویرایش هنوز گشت‌زنی نشده است",
        "recentchanges-label-plusminus": "حجم صفحه به اندازه این مقدار بایت تغییر یافته است",
-       "recentchanges-legend-heading": "'''اختصارها:'''",
+       "recentchanges-legend-heading": "<strong>اختصارها:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (همچنین به [[Special:NewPages|فهرست صفحات تازه]] نگاه کنید)",
        "recentchanges-legend-plusminus": "(<em>±۱۲۳</em>)",
        "recentchanges-submit": "نمایش",
        "backend-fail-read": "نمی‌توان پروندهٔ $1 را خواند.",
        "backend-fail-create": "نمی‌توان بر روی پروندهٔ $1 اطلاعات نوشت.",
        "backend-fail-maxsize": "نمی‌توان بر روی پروندهٔ $1 اطلاعات نوشت چون بزرگتر از {{PLURAL:$2|یک بایت|$2 بایت}} است.",
-       "backend-fail-readonly": "پشتیبان «$1» درحال حاضر در وضیت فقط خواندنی است. دلیل ارائه شده چنین است: «$2»",
+       "backend-fail-readonly": "پشتیبان «$1» درحال حاضر در وضیت فقط خواندنی است. دلیل ارائه شده چنین است: <em>«$2»</em>",
        "backend-fail-synced": "پرونده «$1» در پشتیبان‌های ذخیره داخلی در وضعیتی ناپایدار قرار دارد",
        "backend-fail-connect": "ارتباط با پشیبان ذخیره «$1» برقرار نشد.",
        "backend-fail-internal": "خطایی نامعلوم در پشتیبان ذخیره «$1» رخ داد.",
        "uploadstash-summary": "این صفحه دسترسی به پرونده‌هایی که بارگذاری شده‌اند (یا در حال بارگذاری هستند) اما هنوز در ویکی منتشر نشده‌اند را فراهم می‌کند. این پرونده‌ها توسط هیچ کاربری به جز کسی که آن‌ها را بارگذاری کرده قابل دیدن نیستند.",
        "uploadstash-clear": "پاک‌کردن پرونده‌های انبارشده",
        "uploadstash-nofiles": "شما هیچ پروندهٔ انبارشده‌ای ندارید.",
-       "uploadstash-badtoken": "انجام این اقدام ناموفق بود، احتمالاً به این دلیل که اعتبار ویرایش شما به اتمام رسیده است. دوباره امتحان کنید.",
+       "uploadstash-badtoken": "انجام این اقدام ناموفق بود، احتمالاً به این دلیل که اعتبار ویرایش شما به اتمام رسیده است. لطفاً دوباره امتحان کنید.",
        "uploadstash-errclear": "پاک‌کردن پرونده‌ها ناموفق بود.",
        "uploadstash-refresh": "تازه کردن فهرست پرونده‌ها",
        "invalid-chunk-offset": "جابجایی نامعتبر قطعه",
        "ninterwikis": "$1 {{PLURAL:$1|میان‌ویکی|میان‌ویکی}}",
        "nlinks": "$1 {{PLURAL:$1|پیوند|پیوند}}",
        "nmembers": "$1 {{PLURAL:$1|عضو|عضو}}",
-       "nmemberschanged": "$1 â\86\92 $2   {{PLURAL:$2| عضو|عضو}}",
+       "nmemberschanged": "$1 â\86\90 $2 {{PLURAL:$2| عضو|عضو}}",
        "nrevisions": "$1 {{PLURAL:$1|نسخه|نسخه}}",
        "nimagelinks": "مورد استفاده در $1 {{PLURAL:$1|صفحه|صفحه}}",
        "ntransclusions": "در $1 {{PLURAL:$1|صفحه|صفحه}} استفاده شده‌است",
        "delete-toobig": "این صفحه تاریخچهٔ ویرایشی بزرگی دارد، که شامل بیش از $1 {{PLURAL:$1|نسخه|نسخه}} است.\nبه منظور جلوگیری از اختلال ناخواسته در {{SITENAME}} حذف این گونه صفحات محدود شده‌است.",
        "delete-warning-toobig": "این صفحه تاریخچهٔ ویرایشی بزرگی دارد، که شامل بیش از $1 {{PLURAL:$1|نسخه|نسخه}} است.\nحذف آن ممکن است که عملکرد پایگاه دادهٔ {{SITENAME}} را مختل کند;\nبا احتیاط ادامه دهید.",
        "deleteprotected": "شما نمی‌توانید این صفحه را پاک کنید چون که از آن محافظت شده‌است.",
-       "deleting-backlinks-warning": "''' هشدار:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|صفحه‌های دیگری]] هستند که به صفحه‌ای که شما در حال حذف آن هستید پیوند دارند یا آن را تراگنجانیده‌اند.",
+       "deleting-backlinks-warning": "<strong>هشدار:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|صفحه‌های دیگری]] هستند که به صفحه‌ای که شما در حال حذف آن هستید پیوند دارند یا آن را تراگنجانیده‌اند.",
        "rollback": "واگردانی ویرایش‌ها",
        "rollbacklink": "واگردانی",
        "rollbacklinkcount": "واگردانی $1 ویرایش",
        "rollbackfailed": "واگردانی نشد",
        "cantrollback": "نمی‌توان ویرایش را واگرداند؛\nآخرین مشارکت‌کننده تنها مؤلف این مقاله است.",
        "alreadyrolled": "واگردانی آخرین ویرایش [[:$1]] توسط [[User:$2|$2]] ([[User talk:$2|بحث]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ممکن نیست؛\nپیش از این شخص دیگری مقاله را ویرایش یا واگردانی کرده‌است.\n\nآخرین ویرایش توسط [[User:$3|$3]] ([[User talk:$3|بحث]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) انجام شده‌است.",
-       "editcomment": "خلاصهٔ ویرایش این بود: «''$1''».",
+       "editcomment": "خلاصهٔ ویرایش این بود:  <em>«$1»</em>.",
        "revertpage": "ویرایش [[Special:Contributions/$2|$2]] ([[User talk:$2|بحث]]) به آخرین تغییری که [[User:$1|$1]] انجام داده بود واگردانده شد",
        "revertpage-nouser": "ویرایش‌های انجام‌شده توسط (نام کاربری حذف شده) به آخرین ویرایش [[User:$1|$1]] واگردانی شد.",
        "rollback-success": "ویرایش‌های $1 واگردانی شد؛\nصفحه به آخرین ویرایش $2 برگردانده شد.",
        "changecontentmodel-title-label": "عنوان صفحه",
        "changecontentmodel-model-label": "نمونه محتوای جدید",
        "changecontentmodel-reason-label": "دلیل:",
+       "changecontentmodel-submit": "تغییر",
        "changecontentmodel-success-title": "نمونه محتوی تغییر یافت",
        "changecontentmodel-success-text": "نوع محتوی [[:$1]]  تغییر یافت",
        "changecontentmodel-cannot-convert": "محتوی در [[:$1]] نمی‌تواند به گونه‌ای از $2 تبدیل شود.",
        "changecontentmodel-nodirectediting": "نمونه محتوی $1 امکان ویرایش مستقیم را پشتیبانی نمی‌کند",
        "log-name-contentmodel": "سیاهه تغییر نمونه محتوی",
        "log-description-contentmodel": "رویدادهای مرتبط با نمونه محتوی‌های یک صفحه",
+       "logentry-contentmodel-new": "صفحهٔ $3 با استفاده از مدل‌های محتوایی غیر پیش‌فرض «$5» توسط $1 {{GENDER:$2|ساخته شد}}",
        "logentry-contentmodel-change": "نمونه محتوای صفحهٔ $3 از \"$4\" به \"$5\" توسط $1 {{GENDER:$2|تغییر داده شد}}",
        "logentry-contentmodel-change-revertlink": "واگردانی",
        "logentry-contentmodel-change-revert": "واگردانی",
        "sp-contributions-newbies-sub": "برای تازه‌کاران",
        "sp-contributions-newbies-title": "مشارکت‌های کاربری برای حساب‌های تازه‌کار",
        "sp-contributions-blocklog": "سیاههٔ بسته‌شدن‌ها",
-       "sp-contributions-suppresslog": "کمک‌های کاربر متوقف شده",
+       "sp-contributions-suppresslog": "مشارکت‌های فرونشانی‌شده",
        "sp-contributions-deleted": "مشارکت‌های حذف‌شدهٔ کاربر",
        "sp-contributions-uploads": "بارگذاری‌ها",
        "sp-contributions-logs": "سیاهه‌ها",
        "tooltip-ca-nstab-category": "دیدن صفحهٔ رده",
        "tooltip-minoredit": "این ویرایش را ویرایش جزئی نشانه‌گذاری کن",
        "tooltip-save": "تغییرات خود را ذخیره کنید",
-       "tooltip-preview": "پیش‌نمایش تغییرات شما، لطفاً قبل از ذخیرهکردن صفحه از این کلید استفاده کنید.",
+       "tooltip-preview": "پیش‌نمایش تغییرات شما، لطفاً قبل از ذخیره کردن صفحه از این کلید استفاده کنید.",
        "tooltip-diff": "نمایش تغییراتی که شما در متن داده‌اید.",
        "tooltip-compareselectedversions": "دیدن تفاوت‌های دو نسخهٔ انتخاب‌شده از این صفحه",
        "tooltip-watch": "این صفحه را به فهرست پی‌گیری‌هایتان بیفزایید.",
        "tags-delete-not-allowed": "برچسب‌هایی که در یک افزونه تعریف می‌شوند قابل حذف نیستند، مگر اینکه آن افزونه در این مورد خاص این قابلیت را بدهد.",
        "tags-delete-not-found": "تگ «$1» وجود ندارد.",
        "tags-delete-too-many-uses": "برچسب \"$1\" در بیش از $2 نسخه اعمال شده است و نمی‌توان آن را حذف نمود.",
-       "tags-delete-warnings-after-delete": "برÚ\86سب \"$1\" Ø¨Ø§ Ù\85Ù\88Ù\81Ù\82Û\8cت Ø­Ø°Ù\81 Ø´Ø¯Ø\8c Ø§Ù\85ا Ø¨Ø§ {{PLURAL:$2|خطاÛ\8c|خطاÙ\87اÛ\8c}} Ø²Û\8cر Ù\87Ù\85راÙ\87 Ø¨Ù\88د:",
+       "tags-delete-warnings-after-delete": "برچسب \"$1\" حذف شد، اما با {{PLURAL:$2|خطای|خطاهای}} زیر همراه بود:",
        "tags-activate-title": "فعال‌سازی برچسب",
        "tags-activate-question": "شما در حال فعال‌سازی تگ «$1» هستید.",
        "tags-activate-reason": "دلیل:",
        "tags-edit-revision-legend": "افزودن یا حذف برچسب از {{PLURAL:$1|این نسخه|همهٔ $1 نسخه‌ها}}",
        "tags-edit-logentry-legend": "افزودن یا حذف برچسب از {{PLURAL:$1|این سیاهه|همهٔ $1 سیاهه‌ها}}",
        "tags-edit-existing-tags": "برچسب‌های موجود:",
-       "tags-edit-existing-tags-none": "\"هیچکدام\"",
+       "tags-edit-existing-tags-none": "<em>هیچکدام</em>",
        "tags-edit-new-tags": "برچسب جدید:",
        "tags-edit-add": "افزودن این برچسب‌ها:",
        "tags-edit-remove": "حذف این برچسب‌ها:",
        "tags-edit-reason": "دلیل:",
        "tags-edit-revision-submit": "اعمال تغییرات بر روی {{PLURAL:$1|این نسخه|$1 نسخه}}",
        "tags-edit-logentry-submit": "اعمال تغییرات بر روی {{PLURAL:$1|این سیاهه|$1 سیاهه}}",
-       "tags-edit-success": "تغÛ\8cÛ\8cرات Ø¨Ø§ Ù\85Ù\88Ù\81Ù\82Û\8cت Ø§Ø¹Ù\85اÙ\84 Ø´Ø¯Ù\86د.",
+       "tags-edit-success": "تغییرات اعمال شدند.",
        "tags-edit-failure": "امکان اعمال تغییرات وجود ندارد: $1",
        "tags-edit-nooldid-title": "نسخهٔ مقصد نادرست",
        "tags-edit-nooldid-text": "نسخهٔ مقصد برای اعمال تابع مورد نظر را مشخص نکرده‌اید، یا نسخهٔ مورد نظر وجود ندارد.",
        "default-skin-not-found": "اوه! پوسته پیش‌فرض برای ویکی شما تعریف‌شده در <code dir=\"ltr\"<$wgDefaultSkin</code> به عنوان <code>$1</code>، در دسترس نیست.\n\nبه نظر می‌آید نصب شما شامل پوسته‌های زیر می‌شود. [https://www.mediawiki.org/wiki/Manual:Skin_configuration راهنما: تنظیمات پوسته] را برای کسب اطلاعات در باره چگونگی فعال‌ساختن آن‌ها و انتخاب پیش‌فرض ببینید.\n\n$2\n\n; اگر اخیراً مدیاویکی را نصب کرده‌اید:\n: احتمالاً از گیت، یا به طور مستقیم از کد مبدأ که از چند متد دیگر استفاده می‌کند نصب کردید. انتظار می‌رود. چند {{PLURAL:$4|پوسته|پوسته}} از [https://www.mediawiki.org/wiki/Category:All_skins فهرست پوسته mediawiki.org] نصب کنید، که همراه چندین پوسته و افزونه هستند. شما می‌توانید شاخه <code>skins/</code> را از آن نسخه‌برداری کرده و بچسبانید.\n\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins استفاده از گیت برای دریافت پوسته‌ها].\n: انجام این کار با مخزن گیت‌تان تداخل نمی‌کند اگر توسعه‌دهنده مدیاویکی هستید.\n\n; اگر اخیراً مدیاویکی را ارتقاء دادید:\n: مدیاویکی ۱٫۲۴ و تازه‌تر دیگر به طور خودکار پوسته‌های نصب‌شده را فعال نمی‌کند ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery راهنما: کشف خودکار پوسته] را ببینید). شما می‌توانید خطوط زیر را به داخل <code>LocalSettings.php</code> بچسبانید تا {{PLURAL:$5|همه|همه}} پوسته‌های نصب‌شده را فعال کنید:\n\n<pre dir=\"ltr\">$3</pre>\n\n; اگر اخیراً <code>LocalSettings.php</code> را تغییر دادید:\n: نام پوسته‌ها را برای غلط املایی دوباره بررسی کنید.",
        "default-skin-not-found-no-skins": "پوستهٔ پیش‌فرض برای ویکی شما تعریف‌شده در<code>$wgDefaultSkin</code> به عنوان <code>$1</code>، هست موجود نیست.\n\nشما پوسته‌ها را نصب نکرده‌اید.\n\n:اگر مدیاویکی را به‌روز یا نصب کرده‌اید:\n:ممکن است از گیت یا از کد منبع با روش‌های دیگر نصب کرده‌اید. انتظار می‌رود MediaWiki 1.24 یا جدیدتر در پوشهٔ اصلی هیچ پوسته‌ای نداشته باشند.\nسعی کنید تعدادی پوسته از [https://www.mediawiki.org/wiki/Category:All_skins پوشهٔ پوسته‌های مدیاویکی]، با:\n:*دریافت [https://www.mediawiki.org/wiki/Download نصب‌کننده تاربال]، که با چندین پوسته و افزونه هست. شما می توانید پوستهٔ <code>skins/</code> را از آن کپی و پیست کنید.\n:*کلون کردن یکی از <code dir=\"ltr\">mediawiki/skins/*</code> از مخزن در پوشهٔ <code>skins/</code> مدیاویکی‌تان.\n:اگر توسعه‌دهندهٔ مدیاویکی هستید، انجام این کار نباید تعارضی با مخزن گیت شما داشته باشد. برای اطلاعات بیشتر و فعال کردن پوسته‌ها و انتخاب آنها به عنوان پیش‌فرض [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: تنظیمات پوسته] را مشاهده کنید.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (فعال)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''غیر فعال''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>غیر فعال</strong>)",
        "mediastatistics": "آمار رسانه‌ها",
        "mediastatistics-summary": "آمارها دربارهٔ نوع‌های پرونده‌ای به روزشده. این فقط شامل آخرین نسخهٔ پرونده است. نسخه‌های قدیمی یا حذف‌شده مسثنی هستند.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 بایت}} ($2؛ $3٪)",
index 5d5dd0c..126c430 100644 (file)
        "myprivateinfoprotected": "Sinulla ei ole oikeutta muuttaa omia yksityisiä tietojasi.",
        "mypreferencesprotected": "Sinulla ei ole oikeutta muuttaa omia asetuksiasi.",
        "ns-specialprotected": "Toimintosivuja ei voi muokata.",
-       "titleprotected": "Käyttäjä [[User:$1|$1]] on suojannut tämän sivunimen, ja sivua ei voi luoda.\nSuojauksen syy on: ''$2''.",
+       "titleprotected": "Käyttäjä [[User:$1|$1]] on suojannut tämän sivunimen, ja sivua ei voi luoda.\nSuojauksen syy on: <em>$2</em>.",
        "filereadonlyerror": "Tiedostoa \"$1\" ei voida muuttaa, koska jaettu mediavarasto \"$2\" on asetettu tilaan ''vain lukeminen sallittu''.\n\nTietokannan lukinneen palvelinjärjestelmän ylläpitäjän antama selitys on: $3.",
        "invalidtitle-knownnamespace": "Virheellinen sivunimi, nimiavaruus \"$2\" ja teksti \"$3\"",
        "invalidtitle-unknownnamespace": "Virheellinen sivunimi, tuntematon nimiavaruus numero $1 ja teksti \"$2\"",
        "nocookieslogin": "{{SITENAME}} käyttää evästeitä sisäänkirjautumisen yhteydessä. Selaimesi ei salli evästeitä. Ota ne käyttöön, ja yritä uudelleen.",
        "nocookiesfornew": "Käyttäjätunnusta ei luotu, koska sen lähdettä ei kyetty varmistamaan. Varmista, että selaimessasi on käytössä evästeet, päivitä tämä sivu ja yritä uudelleen.",
        "noname": "Et ole määritellyt kelvollista käyttäjänimeä.",
-       "loginsuccesstitle": "Sisäänkirjautuminen onnistui",
+       "loginsuccesstitle": "Olet kirjautunut sisään",
        "loginsuccess": "'''Olet kirjautunut sivustolle {{SITENAME}} käyttäjänä $1.'''",
        "nosuchuser": "Käyttäjää ”$1” ei ole olemassa. Nimet ovat kirjainkoosta riippuvaisia. Tarkista kirjoititko nimen oikein, tai [[Special:UserLogin/signup|luo uusi käyttäjätunnus]].",
        "nosuchusershort": "Käyttäjää nimeltä ”$1” ei ole. Kirjoititko nimen oikein?",
        "newpassword": "Uusi salasana:",
        "retypenew": "Uusi salasana uudelleen:",
        "resetpass_submit": "Aseta salasana ja kirjaudu sisään",
-       "changepassword-success": "Salasanan vaihto onnistui.",
+       "changepassword-success": "Salasanasi on vaihdettu!",
        "changepassword-throttled": "Olet tehnyt liian monta äskettäistä kirjautumisyritystä.\nOdota $1 ennen kuin yrität uudelleen.",
        "botpasswords": "Botin salasanat",
        "botpasswords-disabled": "Botin salasanat on poistettu käytöstä.",
+       "botpasswords-label-appid": "Botin nimi:",
        "botpasswords-label-create": "Luo",
        "botpasswords-label-update": "Päivitä",
-       "botpasswords-label-cancel": "Peruuta",
+       "botpasswords-label-cancel": "Peru",
        "botpasswords-label-delete": "Poista",
        "botpasswords-label-resetpassword": "Uudista salasana",
        "botpasswords-label-grants": "Valittavissa olevat toimintaoikeudet:",
+       "botpasswords-label-restrictions": "Käytön rajoitukset:",
        "resetpass_forbidden": "Salasanoja ei voi vaihtaa.",
        "resetpass-no-info": "Et voi nähdä tätä sivua kirjautumatta sisään.",
        "resetpass-submit-loggedin": "Muuta salasana",
        "undo-summary-username-hidden": "Kumottu muokkaus $1, jonka on tehnyt piilotettu käyttäjä",
        "cantcreateaccounttitle": "Tunnusta ei voida luoda",
        "cantcreateaccount-text": "Tunnusten luonti tästä IP-osoitteesta ('''$1''') on estetty. Estäjänä on [[User:$3|$3]].\n\nKäyttäjän $3 antama syy on ''$2''",
-       "cantcreateaccount-range-text": "Tunnusten luominen IP-osoitteista osoitealueella '''$1''', johon kuuluu myös sinun käyttämäsi IP-osoite ('''$4'''), on estetty. Eston on asettanut [[User:$3|$3]].\n\nSyy estolle on \"$2\".",
+       "cantcreateaccount-range-text": "Tunnusten luominen IP-osoitteista osoitealueella <strong>$1</strong>, johon kuuluu myös sinun käyttämäsi IP-osoite (<strong>$4</strong>), on estetty. Eston on asettanut [[User:$3|$3]].\n\nSyy estolle on \"$2\".",
        "viewpagelogs": "Näytä tämän sivun lokit",
        "nohistory": "Tällä sivulla ei ole muutoshistoriaa.",
        "currentrev": "Nykyinen versio",
        "recentchanges-label-bot": "Tämän muutoksen suoritti botti",
        "recentchanges-label-unpatrolled": "Tätä muutosta ei ole vielä tarkastettu",
        "recentchanges-label-plusminus": "Sivun koon muutos tavuina",
-       "recentchanges-legend-heading": "'''Selitys:'''",
+       "recentchanges-legend-heading": "<strong>Selitys:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (katso myös [[Special:NewPages|lista uusista sivuista]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Näytä",
        "apisandbox-dynamic-parameters": "Lisäparametrit",
        "apisandbox-dynamic-parameters-add-label": "Lisää parametri:",
        "apisandbox-dynamic-parameters-add-placeholder": "Parametrin nimi",
-       "apisandbox-dynamic-error-exists": "Parametri nimellä \"$1\" on ennestään olemassa.",
+       "apisandbox-dynamic-error-exists": "Parametri nimellä ”$1” on jo olemassa.",
        "apisandbox-deprecated-parameters": "Käytöstä poistuneet parametrit",
-       "apisandbox-fetch-token": "Lisää \"token\" automaattisesti",
+       "apisandbox-fetch-token": "Lisää token automaattisesti",
        "apisandbox-submit-invalid-fields-title": "Jotkin kentät ovat epäkelpoja",
        "apisandbox-submit-invalid-fields-message": "Korjaa merkityt kentät ja yritä uudestaan.",
        "apisandbox-results": "Tulokset",
        "delete-toobig": "Tällä sivulla on pitkä muokkaushistoria, yli $1 {{PLURAL:$1|versio|versiota}}. \nTämänkaltaisten sivujen poistamista on rajoitettu. Tällä ehkäistään sivuston {{SITENAME}} vaurioitumista tahattomasti.",
        "delete-warning-toobig": "Tällä sivulla on pitkä muutoshistoria – yli $1 {{PLURAL:$1|versio|versiota}}. Näin suurien muutoshistorioiden poistaminen voi haitata sivuston suorituskykyä.",
        "deleteprotected": "Et voi poistaa tätä sivua, koska se on suojattu.",
-       "deleting-backlinks-warning": "'''Varoitus:''' Sivulle, jota olet poistamassa, johtaa [[Special:WhatLinksHere/{{FULLPAGENAME}}|linkkejä muilta sivuilta]], tai sivu on sisällytetty muuhun sivuun.",
+       "deleting-backlinks-warning": "<strong>Varoitus:</strong> Sivulle, jota olet poistamassa, johtaa [[Special:WhatLinksHere/{{FULLPAGENAME}}|linkkejä muilta sivuilta]], taikka sivu on sisällytetty muuhun sivuun.",
        "rollback": "palauta aiempaan versioon",
        "rollbacklink": "palauta",
        "rollbacklinkcount": "palauta $1 {{PLURAL:$1|muutos|muutosta}}",
        "rollbackfailed": "Palautus epäonnistui",
        "cantrollback": "Aiempaan versioon ei voi palauttaa, koska viimeisin kirjoittaja on sivun ainoa tekijä.",
        "alreadyrolled": "Käyttäjän [[User:$2|$2]] ([[User talk:$2|keskustelu]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) tekemiä muutoksia sivuun [[:$1]] ei voida kumota, koska joku toinen käyttäjä on joko muuttanut sivua tai palauttanut muokkauksen.\n\nViimeisimmän muokkauksen on tehnyt käyttäjä [[User:$3|$3]] ([[User talk:$3|keskustelu]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Muokkauksen yhteenveto oli: ''$1''.",
+       "editcomment": "Muokkauksen yhteenveto oli: <em>$1</em>.",
        "revertpage": "Käyttäjän [[Special:Contributions/$2|$2]] ([[User talk:$2|keskustelu]]) muokkaukset kumottiin ja sivu palautettiin viimeisimpään käyttäjän [[User:$1|$1]] tekemään versioon.",
        "revertpage-nouser": "Käyttäjän (käyttäjänimi poistettu) muokkaukset kumottiin ja sivu palautettiin viimeisimpään käyttäjän {{GENDER:$1|[[User:$1|$1]]}} tekemään versioon",
        "rollback-success": "Käyttäjän $1 tekemät muokkaukset kumottiin ja sivu palautettiin käyttäjän $2 versioon.",
        "changecontentmodel-title-label": "Sivun otsikko",
        "changecontentmodel-model-label": "Uusi sisältömalli",
        "changecontentmodel-reason-label": "Syy:",
+       "changecontentmodel-submit": "Tee muutos",
        "changecontentmodel-success-title": "Sisältömallia on muutettu",
        "changecontentmodel-success-text": "Sisältötyyppiä kohteessa [[:$1]] on muutettu.",
        "changecontentmodel-cannot-convert": "Sisältöä sivulla [[:$1]] ei voida muuntaa tyypiksi $2.",
        "changecontentmodel-nodirectediting": "Sisältömalli $1 ei tue suoraa muokkaamista",
        "log-name-contentmodel": "Sisältömallin muutosloki",
        "log-description-contentmodel": "Tapahtumat, jotka liittyvät sivun sisältömalleihin",
+       "logentry-contentmodel-new": "$1 {{GENDER:$2|loi}} sivun $3 käyttäen normaalista poikkeavaa sisältömallia \"$5\"",
        "logentry-contentmodel-change": "$1 {{GENDER:$2|muutti}} sivun $3 sisältömallia muodosta \"$4\" muotoon \"$5\"",
        "logentry-contentmodel-change-revertlink": "kumoa",
        "logentry-contentmodel-change-revert": "kumottu",
        "patrol-log-page": "Muutostentarkastusloki",
        "patrol-log-header": "Tämä on loki tarkastetuista muutoksista.",
        "log-show-hide-patrol": "$1 muutostentarkastusloki",
-       "log-show-hide-tag": "$1 merkkausten loki",
+       "log-show-hide-tag": "$1 merkkausloki",
        "deletedrevision": "Poistettiin vanha versio $1",
        "filedeleteerror-short": "Tiedoston $1 poistaminen epäonnistui",
        "filedeleteerror-long": "Tiedoston poistaminen epäonnistui:\n\n$1",
        "tags-delete-not-allowed": "Sellaisia merkkauksia, jotka tulevat erityisestä ohjelmistolaajennuksesta, ei voi poistaa ennen kuin tämä laajennus erityisesti sallii sen.",
        "tags-delete-not-found": "Merkkausta \"$1\" ei ole olemassa.",
        "tags-delete-too-many-uses": "Tämä merkkaus \"$1\" on käytössä useammassa kuin $2 sivuversiossa, joten sitä ei voi poistaa.",
-       "tags-delete-warnings-after-delete": "Merkkaus \"$1\" poistettiin onnistuneesta, mutta {{PLURAL:$2|seuraava varoitus|seuraavat varoitukset}} ilmeni samalla:",
+       "tags-delete-warnings-after-delete": "Merkkaus \"$1\" poistettiin, mutta toimenpide sai aikaan {{PLURAL:$2|seuraavan varoituksen|seuraavat varoitukset}}:",
        "tags-activate-title": "Aktivoi merkkaus",
        "tags-activate-question": "Olet nyt aktivoimassa merkkausta \"$1\".",
        "tags-activate-reason": "Syy:",
        "tags-edit-revision-legend": "Lisää tai poista merkkauksia {{PLURAL:$1|tässä versiossa|kaikissa $1 versiossa}}",
        "tags-edit-logentry-legend": "Lisää tai poista merkkauksia {{PLURAL:$1|tässä lokimerkinnässä|kaikissa $1 lokimerkinnässä}}",
        "tags-edit-existing-tags": "Tämänhetkiset merkkaukset:",
-       "tags-edit-existing-tags-none": "''Ei mitään''",
+       "tags-edit-existing-tags-none": "<em>Ei mitään</em>",
        "tags-edit-new-tags": "Uudet merkkaukset:",
        "tags-edit-add": "Lisää nämä merkkaukset:",
        "tags-edit-remove": "Poista nämä merkkaukset:",
        "tags-edit-reason": "Syy:",
        "tags-edit-revision-submit": "Toteuta muutokset {{PLURAL:$1|tähän versioon|$1 versioon}}",
        "tags-edit-logentry-submit": "Lähetä muutoksesi {{PLURAL:$1|tähän lokimerkintään|$1 lokimerkintään}}",
-       "tags-edit-success": "Muutokset on onnistuneesti toteutettu.",
+       "tags-edit-success": "Muutokset on tehty.",
        "tags-edit-failure": "Muutoksia ei voitu toteuttaa: $1",
        "tags-edit-nooldid-title": "Kohdeversio ei ole kelvollinen",
        "tags-edit-nooldid-text": "Et ole joko määrittänyt sitä kohdeversiota, johon tämä toimenpide kohdistuu, tai sitten määrättyä versiota ei ole olemassa.",
        "expand_templates_generate_xml": "Näytä XML-jäsennyspuu",
        "expand_templates_generate_rawhtml": "Näytä raaka HTML",
        "expand_templates_preview": "Esikatselu",
-       "expand_templates_preview_fail_html": "<em>Koska sivustolla {{SITENAME}} on käytössä puhdas HTML-koodi ja koska istunnon tiedot ovat kadonneet, esikatselu on piilotettu JavaScript-hyökkäyksien torjumiseksi.</em>\n\n<strong>Jos olet oikealla asialla, yritä uudestaan.</strong>\nJos esikatselu ei vieläkään toimi, yritä [[Special:UserLogout|kirjautua ulos]] ja sitten kirjautua uudestaan sisään. Tarkista myös, että selaimesi sallii evästeet tältä sivustolta.",
+       "expand_templates_preview_fail_html": "<em>Koska sivustolla {{SITENAME}} on käytössä suodattamaton HTML-koodi ja koska istunnon tiedot ovat kadonneet, esikatselu on piilotettu JavaScript-hyökkäyksien torjumiseksi.</em>\n\n<strong>Jos yritit esikatsella sivua, yritä uudestaan.</strong>\nJos esikatselu ei vieläkään toimi, yritä [[Special:UserLogout|kirjautua ulos]] ja sitten kirjautua uudestaan sisään. Tarkista myös, että selaimesi sallii evästeet tältä sivustolta.",
        "expand_templates_preview_fail_html_anon": "<em>Koska sivustolla {{SITENAME}} on käytössä puhdas HTML-koodi ja koska et ole kirjautunut sisään, esikatselu on piilotettu JavaScript-hyökkäyksien torjumiseksi.</em>\n\n<strong>Jos olet oikealla asialla, [[Special:UserLogin|kirjaudu sisään]] ja yritä uudestaan.</strong>",
        "expand_templates_input_missing": "Sinun on annettava edes jotakin tekstiä syötteeksi.",
        "pagelanguage": "Sivun kielen vaihto",
        "default-skin-not-found": "Hupsista! Oletuksena tuleva ulkoasu sinun wikillesi, joka on määritelty koodissa <code dir=\"ltr\">$wgDefaultSkin</code> muotoon <code>$1</code>, ei ole saatavilla.\n\nAlla on ohjeet englannin kielellä:\n\nYour installation seems to include the following {{PLURAL:$4|skin|skins}}. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable {{PLURAL:$4|it|them and choose the default}}.\n\n$2\n\n; If you have just installed MediaWiki:\n: You probably installed from git, or directly from the source code using some other method. This is expected. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by:\n:* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* Downloading individual skin tarballs from [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Using Git to download skins].\n: Doing this should not interfere with your git repository if you're a MediaWiki developer.\n\n; If you have just upgraded MediaWiki:\n: MediaWiki 1.24 and newer no longer automatically enables installed skins (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). You can paste the following {{PLURAL:$5|line|lines}} into <code>LocalSettings.php</code> to enable {{PLURAL:$5|the|all}} installed {{PLURAL:$5|skin|skins}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; If you have just modified <code>LocalSettings.php</code>:\n: Double-check the skin names for typos.",
        "default-skin-not-found-no-skins": "Hupsista! Oletusulkoasua sinun wikillesi ei ole saatavilla. Se on määritelty ulkoasuksi <code>$1</code> kohteessa <code>$wgDefaultSkin</code>.\n\nAlla on ohjeet englannin kielellä:\n\nYou have no installed skins.\n\n; If you have just installed or upgraded MediaWiki:\n: You probably installed from git, or directly from the source code using some other method. This is expected. MediaWiki 1.24 and newer doesn't include any skins in the main repository. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by:\n:* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* Downloading individual skin tarballs from [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Using Git to download skins].\n: Doing this should not interfere with your git repository if you're a MediaWiki developer. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable skins and choose the default.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (käytössä)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ei käytössä''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>ei käytössä</strong>)",
        "mediastatistics": "Median tilastotiedot",
        "mediastatistics-summary": "Tietoja tallennettujen tiedostojen tyypeistä. Luettelossa ovat ainoastaan tiedostojen uusimmat versiot eikä lainkaan vanhoja tai poistettuja versioita.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 tavu|$1 tavua}} ($2; $3%)",
index ce67f3e..d12e340 100644 (file)
@@ -18,6 +18,7 @@
        "tog-hideminor": "Krógva minni broytingar í seinastu broytingum",
        "tog-hidepatrolled": "Krógva eftirkannaðar rættingar í seinastu broytingum",
        "tog-newpageshidepatrolled": "Goym eftirkannaðar síður frá listanum yvir nýggjar síður",
+       "tog-hidecategorization": "Fjal bólking av síðum",
        "tog-extendwatchlist": "Víðka eftirlitslistan fyri at vísa allar broytingar, ikki bara tær seinastu",
        "tog-usenewrc": "Bólka broytingar eftir síðu í seinastu broytingum og eftirlitslita",
        "tog-numberheadings": "Sjálvvirkandi talmerking av yvirskriftum",
@@ -46,6 +47,7 @@
        "tog-watchlisthideliu": "Goym broytingar sum eru gjørdar av brúkarum, sum eru loggaðir á, frá hyggjaralistanum",
        "tog-watchlisthideanons": "Krógva broytingar sum eru gjørdar av dulnevndum brúkarum frá eftirlitslistanum",
        "tog-watchlisthidepatrolled": "Fjal eftirhugdar broytingar frá eftirlitslistanum",
+       "tog-watchlisthidecategorization": "Fjal bólking av síðum",
        "tog-ccmeonemails": "Send mær avrit av teldubrøvum, sum eg sendi til aðrar brúkarar",
        "tog-diffonly": "Vís ikki innihaldið av síðuni undir broytingum",
        "tog-showhiddencats": "Vís goymdir bólkar",
        "morenotlisted": "Hesin listin er ikki liðugur.",
        "mypage": "Síða",
        "mytalk": "Kjak",
-       "anontalk": "Kjak til hesa IP-adressuna",
+       "anontalk": "Kjak",
        "navigation": "Navigatión",
        "and": "&#32;og",
        "qbfind": "Finn",
        "pool-timeout": "Støðgur, bíða verður eftir lásinum",
        "pool-queuefull": "Køin til \"hylin\" er full",
        "pool-errorunknown": "Ókend villa",
+       "pool-servererror": "Pool counter-tænastan er ikki tøk ($1).",
+       "poolcounter-usage-error": "Nýtslufeilur: $1",
        "aboutsite": "Um {{SITENAME}}",
        "aboutpage": "Project:Um",
        "copyright": "Innihaldið er tøkt undir $1, um ikki annað er viðmerkt.",
        "nstab-template": "Fyrimynd",
        "nstab-help": "Hjálp",
        "nstab-category": "Bólkur",
+       "mainpage-nstab": "Forsíða",
        "nosuchaction": "Ongin slík gerð",
        "nosuchactiontext": "Gerðin, ið tilskilað er í url, virkar ikki.\nMøguliga hevur tú stava urlin skeivt, ella fylgt einari skeivari leinkju.\nHetta kann eisini benda á ein feil í software'ini sum {{SITENAME}} brúkar.",
        "nosuchspecialpage": "Ongin slík serlig síða",
        "filerenameerror": "Kundi ikki umdoypa fílu \"$1\" til \"$2\".",
        "filedeleteerror": "Kundi ikki strika fíluna \"$1\".",
        "directorycreateerror": "Kundi ikki upprætta mappuna \"$1\".",
+       "directoryreadonlyerror": "Faldarin \"$1\" er vardur móti skriving.",
+       "directorynotreadableerror": "Faldarin \"$1\" er ikki lesbarur.",
        "filenotfound": "Kundi ikki finna fílu \"$1\".",
        "unexpected": "Óvæntað virði: \"$1\"=\"$2\".",
        "formerror": "Villa: Kundi ikki senda skránna.",
        "viewsource": "Vís keldu",
        "viewsource-title": "Sí keldu fyri $1",
        "actionthrottled": "Hendingin kvaldist",
-       "actionthrottledtext": "↓ Fyri at mótvirka spam, er tað ikki møguligt at gera hetta alt ov nógvar ferðir uppá stutta tíð, og tú ert farin yvir tað markið.\nVinarliga royn aftur um fáir minuttir.",
+       "actionthrottledtext": "Fyri at mótvirka spam, er tað ikki møguligt at gera hetta alt ov nógvar ferðir uppá stutta tíð, og tú ert farin yvir tað markið.\nVinarliga royn aftur um fáir minuttir.",
        "protectedpagetext": "Hendan síða er blivin vard fyri at steðga rættingum ella øðrum handlingum.",
-       "viewsourcetext": "Tú kanst síggja og avrita kelduna til hesa grein:",
-       "viewyourtext": "Tú kanst síggja og avrita kelduna fyri '''tínar rættingar''' til hesa síðuna:",
+       "viewsourcetext": "Tú kanst síggja og avrita kelduna til hesa grein.",
+       "viewyourtext": "Tú kanst síggja og avrita kelduna til <strong>tínar rættingar</strong> til hesa síðuna.",
        "protectedinterface": "↓ Henda síðan gevur markamóts tekst til ritbúnaðin (software), og er vard fyri at fyribyrgja misnýtslu.\nFyri at gera rættingar ella broyta týðingar á øllum wiki'um, vinarliga nýt [//translatewiki.net/ translatewiki.net], MediaWiki verkætlanina.",
-       "editinginterface": "↓ '''Ávaring:''' Tú rættar eina síðu sum verður brúkt til at geva markamóts tekst til ritbúnaðin (software).\nBroytingar á hesi síðu fara at ávirka útsjóndina á brúkara markamótinum (interface) fyri aðrar brúkarar á hesi wiki.\nFyri at gera týðingar ella broyta týðingar á øllum wiki, vinarliga nýt [//translatewiki.net/ translatewiki.net],  sum er ein MediaWiki verkætlan.",
-       "cascadeprotected": "Henda síðan er vard fyri rættingum, tí hon er í fylgjandi {{PLURAL:$1|síðu, sum er|síðum, sum eru}}\nvardar við \"arvaðari síðuverjing\"\n$2",
+       "editinginterface": "<strong>Ávaring:</strong> Tú rættar eina síðu sum verður brúkt til at geva markamóts tekst til ritbúnaðin (software).\nBroytingar á hesi síðu fara at ávirka útsjóndina á brúkara markamótinum (interface) fyri aðrar brúkarar á hesi wiki.",
+       "translateinterface": "Fyri at gera ella broyta týðingar fyri allar wikiir, vinarliga nýt [//translatewiki.net/ translatewiki.net], the MediaWiki staðsetingar verkætlan.",
+       "cascadeprotected": "Henda síðan er vard fyri rættingum, tí hon er í fylgjandi {{PLURAL:$1|síðu, sum er|síðum, sum eru}}\nvardar við \"niðurarvan\" møguleikanum tendraðum:\n$2",
        "namespaceprotected": "Tú hevur ikki loyvi til at rætta síður í $1 navnateiginum.",
        "customcssprotected": "Tú hevur ikki loyvi til at rætta hesa CSS síðuna, tí hon inniheldur persónligar innstillingar hjá øðrum brúkara.",
        "customjsprotected": "Tú hevur ikki loyvir til at rætta hesa JavaScript síðuna, tí hon inniheldur persónligar innstillingar hjá øðrum brúkara.",
        "myprivateinfoprotected": "Tú hevur ikki loyvi til at rætta tína privatu kunning.",
        "mypreferencesprotected": "Tú hevur ikki loyvi til at rætta tínar preferensur.",
        "ns-specialprotected": "Serstakar síður kunnu ikki rættast.",
-       "titleprotected": "[[User:$1|$1]] hevur vart hetta heitið frá skapan.\nGivin orsøk er \"''$2''\".",
-       "filereadonlyerror": "Tað var ikki møguligt at broyta fíluna \"$1\" tí at fílugoymslan \"$2\" er í bara-lesa støðu.\n\nUmboðsstjórin sum stongdi hana, gav hesa frágreiðing: \"$3\".",
+       "titleprotected": "[[User:$1|$1]] hevur vart hetta heitið frá skapan.\nGivin orsøk er <em>$2</em>.",
+       "filereadonlyerror": "Tað var ikki møguligt at broyta fíluna \"$1\" tí at fílugoymslan \"$2\" er skrivivard.\n\nSkipanaradministratorurin sum stongdi hana, gav hesa frágreiðing: \"$3\".",
        "invalidtitle-knownnamespace": "Ógyldugt heiti við navnaøki \"$2\" og teksti \"$3\"",
        "invalidtitle-unknownnamespace": "Ógyldigt heiti við ókendum navnaøkis tali $1 og teksti \"$2\"",
        "exception-nologin": "Tú ert ikki loggað/ur inn",
-       "exception-nologin-text": "Vinarliga [[Special:Userlogin|rita inn]] fyri at fáa atgongd til hesa síðu ella handling.",
+       "exception-nologin-text": "Vinarliga rita inn fyri at fáa atgongd til hesa síðu ella handling.",
        "exception-nologin-text-manual": "Vinarliga $1 fyri at fáa atgongd til hesa síðu ella handling.",
        "virus-badscanner": "Konfiguratións villa: Ókendur virus skannari: ''$1''",
        "virus-scanfailed": "↓  skanning virkaði ikki (kota $1)",
        "virus-unknownscanner": "ókent antivirus:",
        "logouttext": "'''Tú hevur nú ritað út.'''\n \nLegg til merkis, at summar síður framvegis vera vístar, sum um tú enn vart loggað/ur á, til tú hevur reinsað tín brovsara fyri \"cache\".",
+       "cannotlogoutnow-title": "Tað ber ikki til at rita út nú",
        "welcomeuser": "Vælkomin, $1!",
        "welcomecreation-msg": "Tín konta er nú stovnað.\nGloym ikki at broyta tínar [[Special:Preferences|{{SITENAME}}-innstillingar]].",
        "yourname": "Títt brúkaranavn:",
        "createaccountreason": "Orsøk:",
        "createacct-reason": "Orsøk",
        "createacct-reason-ph": "Hví upprættar tú eina nýggja kontu",
-       "createacct-captcha": "Trygdarkekk",
-       "createacct-imgcaptcha-ph": "Skriva tekstin ið tú sært omanfyri",
        "createacct-submit": "Upprætta tína kontu",
        "createacct-another-submit": "Upprætta eina aðra kontu",
        "createacct-benefit-heading": "{{SITENAME}} er gjørd av fólki sum tær.",
        "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.\nVinarliga bíða $1 áðrenn tú roynir aftur.",
+       "botpasswords-label-create": "Upprætta",
+       "botpasswords-label-update": "Dagfør",
+       "botpasswords-label-cancel": "Avbrót",
+       "botpasswords-label-delete": "Strika",
+       "botpasswords-label-resetpassword": "Nullstilla loyniorðið",
        "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ð",
        "passwordreset-emailtext-ip": "Onkur (óiva tú, frá IP adressu $1) hevur biðið um nullstillan av tínum loyniorði til {{SITENAME}} ($4). Fylgjandi brúkara {{PLURAL:$3|konta er|kontur eru}}\nsettar í samband við hesa t-post adressu:\n\n$2\n\n{{PLURAL:$3|Hetta fyribils loyniorðið|Hesi fyribils loyniorðini}} ganga út um {{PLURAL:$5|ein dag|$5 dagar}}.\nTú eigur at rita inn og velja eitt nýtt loyniorð nú. Um onkur annar hevur gjørt hesa umbønina, ella um tú ert komin í tankar um títt uppruna loyniorð, og tú ikki longur ynskir at broyta tað, so kanst tú síggja burtur frá hesum boðum og halda fram at brúka títt gamla loyniorð.",
        "passwordreset-emailtext-user": "Brúkari $1 á {{SITENAME}} hevur biðið um eina nullstillan av tínum loyniorði til {{SITENAME}} \n($4). Fylgjandi brúkara {{PLURAL:$3|konta er|kontur eru}} settar í samband við hesa t-post adressuna:\n\n$2\n\n{{PLURAL:$3|Hetta fyribils loyniorðið|Hesi fyribils loyniorðini}} ganga út um {{PLURAL:$5|ein dag|$5 dagar}}.\nTú eigur at rita inn og velja eitt nýtt loyniorð nú. Um onkur annar hevur gjørt hesa umbøn, ella um tú ert komin í tankar um títt uppruna loyniorð, og tú ikki longur ynskir at broyta tað, so kanst tú síggja burtur frá hesum boðum og halda fram at brúka títt gamla loyniorð.",
        "passwordreset-emailelement": "Brúkaranavn: \n$1\n\nFyribils loyniorð: \n$2",
-       "passwordreset-emailsent": "Ein teldupostur har tú kanst nullstillað loyniorðið er blivin sendur.",
+       "passwordreset-emailsentemail": "Ein teldupostur har tú kanst nullstillað loyniorðið er blivin sendur.",
        "passwordreset-emailsent-capture": "Ein teldupostur, har ið tú kanst nullstilla loyniorðið, er blivin sendur, sum víst niðanfyri.",
        "passwordreset-emailerror-capture": "Ein teldupostur við nullstillaðum loyniorði var gjørdur, sum víst niðanfyri, men tað miseydnaðist at senda til {{GENDER:$2|brúkaran}}: $1",
        "changeemail": "Broyt teldupost adressu",
        "sig_tip": "Tín undirskrift við tíðarstempli",
        "hr_tip": "Vatnrøtt linja (vera sparin við)",
        "summary": "Samandráttur:",
-       "subject": "Evni/heiti:",
+       "subject": "Evni:",
        "minoredit": "Hetta er smábroyting",
        "watchthis": "Hav eftirlit við hesi síðuni",
        "savearticle": "Goym síðu",
        "undo-summary-username-hidden": "Angra versjón $1 sum ein fjaldur brúkari hevur gjørt",
        "cantcreateaccounttitle": "Tað ber ikki til at upprætta konto",
        "cantcreateaccount-text": "Upprættan frá hesi IP adressuni ('''$1''') er blivin sperrað av [[User:$3|$3]]. Orsøkin til sperringina sigst vera ''$2''\n\n$3 sigur orsøkina vera ''$2''",
-       "cantcreateaccount-range-text": "IP adressur í intervallinum '''$1''', sum fevnir um tína IP adressu ('''$4'''), eru sperraðar fyri upprættan av nýggjari konto av [[User:$3|$3]].\n\n$3 segði orsøkina vera ''$2''",
+       "cantcreateaccount-range-text": "IP adressur í intervallinum <strong>$1</strong>, sum fevnir um tína IP adressu (<strong>$4</strong>), eru sperraðar fyri upprættan av nýggjari konto av [[User:$3|$3]].\n\n$3 segði orsøkina vera <em>$2</em>",
        "viewpagelogs": "Sí logg fyri hesa grein",
        "nohistory": "Eingin broytisøga er til hesa síðuna.",
        "currentrev": "Núverandi endurskoðan",
        "notextmatches": "Ongin síðutekstur samsvarar",
        "prevn": "undanfarnu {{PLURAL:$1|$1}}",
        "nextn": "næstu {{PLURAL:$1|$1}}",
+       "prev-page": "undanfarna síða",
        "next-page": "næsta síða",
        "prevn-title": "Gomul $1 {{PLURAL:$1|úrslit|úrslit}}",
        "nextn-title": "Næstu $1 {{PLURAL:$1|úrslit|úrslit}}",
        "search-redirect": "(umstilling $1)",
        "search-section": "(sektión $1)",
        "search-category": "(bólkur $1)",
+       "search-file-match": "(svarar til innihaldið av fíluni)",
        "search-suggest": "Meinti tú: $1",
+       "search-rewritten": "Vísir úrslit fyri $1. Leita í staðin eftir $2.",
        "search-interwiki-caption": "Líknandi verkætlanir",
        "search-interwiki-default": "Úrslit frá $1:",
        "search-interwiki-more": "(meira)",
        "showingresultsinrange": "Niðanfyri verða víst upp til {{PLURAL:$1|<strong>1</strong> úrslit|<strong>$1</strong> úrslit}} í økinum #<strong>$2</strong> til #<strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Úrslit <strong>$1</strong> av <strong>$3</strong>|Úrslit <strong>$1 - $2</strong> av <strong>$3</strong>}}",
        "search-nonefound": "Leitingin gav onki úrslit.",
+       "search-nonefound-thiswiki": "Ongi úrslit passaðu til fyrispurningin á hesi síðu.",
        "powersearch-legend": "Víðkað leitan",
        "powersearch-ns": "Leita í navnaøkinum:",
        "powersearch-togglelabel": "Kanna eftir:",
        "preferences": "Innstillingar",
        "mypreferences": "Innstillingar",
        "prefs-edits": "Tal av rættingum:",
-       "prefsnologintext2": "Vinarliga $1 fyri at broyta tínar innstillingat.",
+       "prefsnologintext2": "Vinarliga rita inn fyri at broyta tínar innstillingar.",
        "prefs-skin": "Hamur",
        "skin-preview": "Forskoðan",
        "datedefault": "Ongi serlig ynskir",
        "prefs-personal": "Brúkaradáta",
        "prefs-rc": "Nýkomnar broytingar og stubbaskoðan",
        "prefs-watchlist": "Eftirlit",
+       "prefs-editwatchlist": "Rætta eftirlitslistan",
+       "prefs-editwatchlist-clear": "Rudda tín eftirlitslista",
        "prefs-watchlist-days": "Tal av døgum, sum skula vísast í eftirliti:",
        "prefs-watchlist-days-max": "Í mesta lagi $1 {{PLURAL:$1|dagur|dagar}}",
        "prefs-watchlist-edits": "Tal av rættingum, sum skula vísast í víðkaðum eftirliti:",
        "prefs-watchlist-token": "Lykil til eftirlitslistan:",
        "prefs-misc": "Ymiskar innstillingar",
        "prefs-resetpass": "Broyt loyniorð",
-       "prefs-changeemail": "Broyt t-post adressu",
+       "prefs-changeemail": "Broyt ella tak burtur t-post adressu",
        "prefs-setemail": "Skriva tína t-post adressu",
        "prefs-email": "T-post møguleikar",
        "prefs-rendering": "Útsjónd",
        "rows": "Røð:",
        "columns": "Teigar:",
        "searchresultshead": "Leita",
-       "stub-threshold": "Avmarkað til <a href=\"#\" class=\"stub\">stubba leinki</a> formatering (bytes):",
+       "stub-threshold": "Avmarkað til stubba leinki formatering $1:",
+       "stub-threshold-sample-link": "dømi",
        "stub-threshold-disabled": "Er gjørt óvirki",
        "recentchangesdays": "Dagar av vísa í seinastu broytingum:",
        "recentchangesdays-max": "Í mesta lagi $1 {{PLURAL:$1|dagur|dagar}}",
        "prefs-displaywatchlist": "Vís møguleikar",
        "prefs-tokenwatchlist": "Lykil",
        "prefs-diffs": "Munir",
-       "email-address-validity-valid": "T-post adressan sær út til at vera í gildi",
-       "email-address-validity-invalid": "Skriva eina gylduga t-post adressu",
        "userrights": "Handtering av brúkara rættindum",
        "userrights-lookup-user": "Stýr brúkarabólkum",
        "userrights-user-editname": "Skriva eitt brúkaranavn:",
        "recentchanges-label-bot": "Henda rætting varð gjørd av einum botti",
        "recentchanges-label-unpatrolled": "Henda rætting er ikki blivin eftirkannað enn",
        "recentchanges-label-plusminus": "Støddin á síðuni broyttist við hesum talinum av bytes",
-       "recentchanges-legend-heading": "'''Teknfrágreiðing:'''",
+       "recentchanges-legend-heading": "<strong>Teknfrágreiðing:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sí eisini [[Special:NewPages|yvirlit yvir nýggjar síður]])",
        "rcnotefrom": "Niðanfyri verða broytingar síðan <strong>$2</strong> (upp til <strong>$1</strong> vístar).",
        "rclistfrom": "Sýn nýggjar broytingar byrjandi við $3 $2",
        "watchthisupload": "Halt eyga við hesi fílu",
        "filewasdeleted": "Ein fíla við hesum heitinum hevur fyrr verið upplóta og er seinni blivin strikað.\nTú eigur at eftirkanna $1 áðrenn tú heldur á við at upplóta fíluna enn einaferð.",
        "filename-bad-prefix": "Navnið á fíluni ið tú leggur út byrjar við '''\"$1\"''', sum er eitt ikki-frágreiðandi navn, slík verða ofta givin sjálvvirkandi av talgildm myndatólum.\nVinarliga vel eitt navn ið greiður eitt sindur frá til tína fílu.",
-       "upload-success-subj": "Upplegging væleydnað",
-       "upload-success-msg": "Tín útlegging frá [$2] eydnaðist væl. Hon er tøk her: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Trupulleiki við útlegging",
-       "upload-failure-msg": "Har var ein trupulleiki við tínari útleggin frá [$2]:\n\n$1",
-       "upload-warning-subj": "Ávaring um upplótan",
-       "upload-warning-msg": "Tað var ein trupulleiki við at leggja út frá [$2]. Tú kanst venda aftur til [[Special:Upload/stash/$1|upload formularin]] fyri at rætta henda trupulleikan.",
        "upload-proto-error": "Skeiv protokol",
        "upload-proto-error-text": "Fjarútleggjan krevur netadressur sum byrja við <code>http://</code> ella <code>ftp://</code>.",
        "upload-file-error": "Innvortis brek",
        "pager-newer-n": "{{PLURAL:$1|nýggjari 1|nýggjari $1}}",
        "pager-older-n": "{{PLURAL:$1|eldri 1|eldri $1}}",
        "suppress": "Yvirlit",
+       "apisandbox": "API sandkassin",
+       "apisandbox-api-disabled": "API er ikki virkið á hesi heimasíðuni.",
+       "apisandbox-intro": "Nýt hesa síðu til at royna teg við '''MediaWiki web service API'''.\nVíst verður til [//www.mediawiki.org/wiki/API:Main_page API documentasjónina] fyri smálutir um nýtslu av API.\nDømi: [//www.mediawiki.org/wiki/API#A_simple_example heinta innihaldið frá einari høvuðssíðu].  Vel eina handling fyri at síggja fleiri dømi.\n\nLegg til merkis, at sjálvt um hetta er ein sandkassi, so kunnu broytingar ið tú gert her, broyta wiki'ina.",
+       "apisandbox-submit": "Kom við fyrispurningi",
+       "apisandbox-reset": "Rudda",
+       "apisandbox-examples": "Dømi",
+       "apisandbox-results": "Úrslit",
+       "apisandbox-request-url-label": "Bið um URL:",
+       "apisandbox-request-time": "Fyrispurningurin tók so langa tíð: $1",
        "booksources": "Bókakeldur",
        "booksources-search-legend": "Leita eftir bókum",
        "booksources-search": "Leita",
        "rollbackfailed": "Afturrulling miseydnað",
        "cantrollback": "Tað ber ikki til at afturstilla rættingina;\ntann seinasti ið skrivaði her er eisini tann einasti høvundurin á hesi síðu.",
        "alreadyrolled": "Tað ber ikki til at rulla aftur seinastu rætting av [[:$1]] hjá [[User:$2|$2]] ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nonkur annar hevur longu rættað ella rullað síðuna aftur.\n\nSeinasta broytingin á síðuni var av [[User:$3|$3]] ([[User talk:$3|kjak]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Rættingarfrágreiðingin var: \"''$1''\".",
+       "editcomment": "Rættingarfrágreiðingin var: <em>$1</em>.",
        "revertpage": "Tók burtur rættingar hjá [[Special:Contributions/$2|$2]] ([[User talk:$2|kjak]]) til seinastu versjón hjá [[User:$1|$1]]",
        "revertpage-nouser": "Tók burtur rættingar hjá einum fjaldum brúkara til seinastu versjón hjá  {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Tók burtur rættingar hjá $1;\nbroytti tað aftur til seinastu versjón hjá $2.",
        "movenosubpage": "Henda síðan hevur ongar undirsíður.",
        "movereason": "Orsøk:",
        "revertmove": "endurstovna",
-       "delete_and_move": "Strika og flyt",
        "delete_and_move_text": "==Striking krevst==\n\nGrein við navninum \"[[:$1]]\" finst longu. Ynskir tú at strika hana til tess at skapa pláss til flytingina?",
        "delete_and_move_confirm": "Ja, strika hesa síðuna",
        "delete_and_move_reason": "Er strikað fyri at gera pláss til flyting frá \"[[$1]]\"",
index a884eb0..bcea637 100644 (file)
                        "StevenJ81",
                        "The RedBurn",
                        "Fredlefred",
-                       "Lbayle"
+                       "Lbayle",
+                       "Cl3m3n7",
+                       "C13m3n7",
+                       "Gnangbade"
                ]
        },
        "tog-underline": "Soulignement des liens :",
        "myprivateinfoprotected": "Vous n’avez pas les droits pour modifier vos informations personnelles.",
        "mypreferencesprotected": "Vous n’avez pas les droits pour modifier vos préférences.",
        "ns-specialprotected": "Les pages dans l'espace de noms « {{ns:special}} » ne peuvent pas être modifiées.",
-       "titleprotected": "Ce titre a été protégé à la création par [[User:$1|$1]].\nLe motif avancé est « ''$2'' ».",
+       "titleprotected": "Ce titre a été protégé à la création par [[User:$1|$1]].\nLe motif fourni est <em>$2</em>.",
        "filereadonlyerror": "Impossible de modifier le fichier « $1 » parce que le répertoire de fichiers « $2 » est en lecture seule.\n\nL'administrateur système 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",
        "nocookieslogin": "{{SITENAME}} utilise des cookies pour la connexion mais vous les avez désactivés. Veuillez les activer et vous reconnecter.",
        "nocookiesfornew": "Le compte utilisateur n'a pas été créé, car nous n'avons pas pu identifier son origine.\nVérifiez que vous avez activé les cookies, rechargez la page et réessayez.",
        "noname": "Vous n'avez pas saisi un nom d'utilisateur valide.",
-       "loginsuccesstitle": "Connexion réussie",
+       "loginsuccesstitle": "Connecté",
        "loginsuccess": "Vous êtes maintenant connecté{{GENDER:$1||e}} à {{SITENAME}} en tant que « $1 ».",
        "nosuchuser": "L'utilisateur « $1 » n'existe pas.\nLes noms d'utilisateurs sont sensibles à la casse.\nVérifiez l'orthographe, ou [[Special:UserLogin/signup|créez un nouveau compte]].",
        "nosuchusershort": "Il n'y a pas de contributeur avec le nom « $1 ». Veuillez vérifier l'orthographe.",
        "newpassword": "Nouveau mot de passe :",
        "retypenew": "Confirmer le nouveau mot de passe :",
        "resetpass_submit": "Changer le mot de passe et se connecter",
-       "changepassword-success": "Votre mot de passe a été changé avec succès !",
+       "changepassword-success": "Votre mot de passe a été modifié !",
        "changepassword-throttled": "Vous avez fait trop de tentatives de connexion récemment.\nVeuillez attendre $1 avant de réessayer.",
        "botpasswords": "Mots de passe de robots",
        "botpasswords-summary": "<em>Mots de passe de robots</em> permet d’accéder à un compte utilisateur via l’API sans utiliser les identifiants de connexion principaux. Les droits utilisateur disponibles en étant connecté avec un mot de passe robot peuvent être réduits.\n\nSi vous ne voyez pas pourquoi vous voudriez faire cela, c’est que vous n’en avez pas besoin. Personne ne devrait jamais vous demander d’en générer un et de le lui donner.",
        "botpasswords-insert-failed": "Échec de l’ajout du nom de robot « $1 ». A-t-il déjà été ajouté ?",
        "botpasswords-update-failed": "Échec à la mise à jour du nom de robot « $1 ». A-t-il déjà été supprimé ?",
        "botpasswords-created-title": "Mot de passe de robots créé",
-       "botpasswords-created-body": "Le mot de passe de robots « $1 » a bien été créé.",
+       "botpasswords-created-body": "Le mot de passe pour le robot « $1 » de l'utilisateur « $2 » a été créé.",
        "botpasswords-updated-title": "Mot de passe de robots mis à jour",
-       "botpasswords-updated-body": "Le mot de passe de robots « $1 » a bien été mis à jour.",
+       "botpasswords-updated-body": "Le mot de passe pour le robot « $1 » de l'utilisateur « $2 » a été mis à jour.",
        "botpasswords-deleted-title": "Mot de passe de robots supprimé",
-       "botpasswords-deleted-body": "Le mot de passe de robots « $1 » a été supprimé.",
+       "botpasswords-deleted-body": "Le mot de passe pour le robot « $1 » de l'utilisateur « $2 » a été supprimé.",
        "botpasswords-newpassword": "Le nouveau mot de passe pour se connecter avec <strong>$1</strong> est <strong>$2</strong>. <em>Veuillez l’enregistrer pour y faire référence ultérieurement.</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider n’est pas disponible.",
        "botpasswords-restriction-failed": "Les restrictions de mot de passe de robots empêchent cette connexion.",
        "undo-summary-username-hidden": "Annuler la révision $1 par un utilisateur masqué",
        "cantcreateaccounttitle": "Vous ne pouvez pas créer de compte.",
        "cantcreateaccount-text": "La création de compte depuis cette adresse IP (<b>$1</b>) a été bloquée par [[User:$3|$3]].\n\nLa raison donnée était ''$2''.",
-       "cantcreateaccount-range-text": "La création de compte depuis les adresses IP dans la plage '''$1''', qui comprend votre adresse IP ('''$4'''), ont été bloquées par [[User:$3|$3]].\n\nLe motif fourni par $3 est ''$2''",
+       "cantcreateaccount-range-text": "La création de compte depuis les adresses IP dans la plage <strong>$1</strong>, qui comprend votre adresse IP (<strong>$4</strong>), ont été bloquées par [[User:$3|$3]].\n\nLe motif fourni par $3 est <em>$2</em>",
        "viewpagelogs": "Voir les opérations sur cette page",
        "nohistory": "Il n'existe pas d'historique pour cette page.",
        "currentrev": "Version actuelle",
        "revdelete-unsuppress": "Enlever les restrictions sur les versions restaurées",
        "revdelete-log": "Motif :",
        "revdelete-submit": "Appliquer {{PLURAL:$1|à la révision sélectionnée|aux révisions sélectionnées}}",
-       "revdelete-success": "'''Visibilité des versions mise à jour avec succès.'''",
+       "revdelete-success": "Visibilité des versions mise à jour.",
        "revdelete-failure": "'''La visibilité de la version n'a pas pu être mise à jour :'''\n$1",
-       "logdelete-success": "'''Visibilité du journal paramétrée avec succès.'''",
+       "logdelete-success": "Visibilité du journal modifiée.",
        "logdelete-failure": "'''La visibilité du journal n'a pas pu être définie :'''\n$1",
        "revdel-restore": "modifier la visibilité",
        "pagehist": "Historique de la page",
        "userrights-changeable-col": "Les groupes que vous pouvez modifier",
        "userrights-unchangeable-col": "Les groupes que vous ne pouvez pas modifier",
        "userrights-conflict": "Conflit de modification de droits utilisateur ! Veuillez relire et confirmer vos modifications.",
-       "userrights-removed-self": "Vous avez bien supprimé vos propres droits. Du coup, vous ne pouvez plus accéder à cette page.",
+       "userrights-removed-self": "Vous avez supprimé vos propres droits. Par conséquent, vous ne pouvez plus accéder à cette page.",
        "group": "Groupe :",
        "group-user": "Utilisateurs",
        "group-autoconfirmed": "Utilisateurs autoconfirmés",
        "recentchanges-label-bot": "Cette modification a été effectuée par un robot.",
        "recentchanges-label-unpatrolled": "Cette modification n’a pas encore été relue.",
        "recentchanges-label-plusminus": "La taille de la page a changé de ce nombre d’octets.",
-       "recentchanges-legend-heading": "'''Légende :'''",
+       "recentchanges-legend-heading": "<strong>Légende :</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (voir aussi la [[Special:NewPages|liste des nouvelles pages]]).",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Lister",
        "recentchangeslinked-page": "Nom de la page :",
        "recentchangeslinked-to": "Afficher les modifications des pages qui comportent un lien vers la page donnée plutôt que l'inverse",
        "recentchanges-page-added-to-category": "[[:$1]] ajouté à la catégorie",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] et {{PLURAL:$2|une page ajoutée|$2 pages ajoutées}} à la catégorie",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] et [[Special:WhatLinksHere/$1|{{PLURAL:$2|une page ajoutée|$2 pages ajoutées}}]] à la catégorie",
        "recentchanges-page-removed-from-category": "[[:$1]] supprimé de la catégorie",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] et {{PLURAL:$2|une page retirée|$2 pages retirées}} de la catégorie",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] et [[Special:WhatLinksHere/$1|{{PLURAL:$2|une page|$2 pages}}]] {{PLURAL:$2|retirée|retirées}} de la catégorie",
        "autochange-username": "Modification automatique de MédiaWiki",
        "upload": "Importer un fichier",
        "uploadbtn": "Importer le fichier",
        "upload-foreign-cant-upload": "Ce wiki n’est pas configuré pour télécharger des fichiers vers le dépôt de fichiers externe demandé.",
        "upload-dialog-title": "Téléverser un fichier",
        "upload-dialog-button-cancel": "Annuler",
-       "upload-dialog-button-done": "Fait",
+       "upload-dialog-button-done": "Terminé",
        "upload-dialog-button-save": "Enregistrer",
        "upload-dialog-button-upload": "Téléverser",
        "upload-form-label-infoform-title": "Détails",
        "backend-fail-read": "Impossible de lire le fichier $1.",
        "backend-fail-create": "Impossible d’écrire le fichier $1.",
        "backend-fail-maxsize": "Impossible d’écrire le fichier $1 parce qu’il est plus grand {{PLURAL:$2|qu’un octet|que $2 octets}}.",
-       "backend-fail-readonly": "Le support de stockage « $1 » est actuellement en lecture seule. La raison indiquée est : « <em>$2</em> »",
+       "backend-fail-readonly": "Le support de stockage « $1 » est actuellement en lecture seule. La raison indiquée est : <em>$2</em>",
        "backend-fail-synced": "Le fichier « $1 » est dans un état incohérent dans les supports de stockage internes",
        "backend-fail-connect": "Impossible de se connecter au support de stockage « $1 ».",
        "backend-fail-internal": "Une erreur inconnue s’est produite dans le support de stockage « $1 ».",
        "uploadstash-summary": "Cette page donne accès aux fichiers qui sont importés (ou en cours d’importation), mais ne sont pas encore publiés dans le wiki. Ces fichiers ne sont pas encore visibles, sauf pour l’utilisateur qui les a importés.",
        "uploadstash-clear": "Effacer les fichiers en cache",
        "uploadstash-nofiles": "Vous n’avez pas de fichiers en cache d’import.",
-       "uploadstash-badtoken": "L’exécution de cette action a échoué, peut-être parce que vos informations d’identification ont expiré. Réessayez.",
+       "uploadstash-badtoken": "L’exécution de cette action a échoué, peut-être parce que vos informations d’identification ont expiré. Veuillez réessayer.",
        "uploadstash-errclear": "La suppression des fichiers a échoué.",
        "uploadstash-refresh": "Actualiser la liste des fichiers",
        "invalid-chunk-offset": "Offset de segment non valide",
        "delete-toobig": "Cette page possède un historique important de modifications, dépassant $1 version{{PLURAL:$1||s}}.\nLa suppression de telles pages a été restreinte pour prévenir des perturbations accidentelles de {{SITENAME}}.",
        "delete-warning-toobig": "Cette page possède un historique important de modifications, dépassant $1 version{{PLURAL:$1||s}}.\nLa supprimer peut perturber le fonctionnement de la base de données de {{SITENAME}} ;\nveuiller ne procéder qu'avec prudence.",
        "deleteprotected": "Vous ne pouvez pas supprimer cette page car elle a été protégée.",
-       "deleting-backlinks-warning": "'''Attention :''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|D’autres pages]] ont un lien vers ou incorporent la page que vous allez supprimer.",
+       "deleting-backlinks-warning": "<strong>Attention :</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|D’autres pages]] ont un lien vers ou incorporent la page que vous allez supprimer.",
        "rollback": "Révoquer les modifications",
        "rollbacklink": "révoquer",
        "rollbacklinkcount": "révoquer $1 {{PLURAL:$1|modification|modifications}}",
        "rollbackfailed": "La révocation a échoué",
        "cantrollback": "Impossible de révoquer la modification ;\nle dernier contributeur est le seul auteur de cette page.",
        "alreadyrolled": "Impossible de révoquer la dernière modification de la page « [[:$1]] » effectuée par [[User:$2|$2]] ([[User talk:$2|Discuter]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ;\nquelqu'un d'autre a déjà modifié ou révoqué la page.\n\nLa dernière modification de la page a été effectuée par [[User:$3|$3]] ([[User talk:$3|Discuter]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Le résumé de la modification était : « ''$1'' ».",
+       "editcomment": "Le résumé de la modification était : <em>$1</em>.",
        "revertpage": "Révocation des modifications de [[Special:Contributions/$2|$2]] ([[User talk:$2|discussion]]) vers la dernière version de [[User:$1|$1]]",
        "revertpage-nouser": "Révocation des modifications par un utilisateur masqué à la dernière version par {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Révocation des modifications effectuées par $1 ;\nrétablissement de la dernière version par $2.",
        "changecontentmodel-title-label": "Titre de la page",
        "changecontentmodel-model-label": "Nouveau modèle de contenu",
        "changecontentmodel-reason-label": "Motif :",
+       "changecontentmodel-submit": "Modifier",
        "changecontentmodel-success-title": "Le modèle de contenu a été modifié",
        "changecontentmodel-success-text": "Le modèle de contenu de [[:$1]] a été modifié.",
        "changecontentmodel-cannot-convert": "Le contenu sur [[:$1]] n’a pas pu être converti en un type de $2.",
        "changecontentmodel-nodirectediting": "Le modèle de contenu $1 ne permet pas la modification directe",
        "log-name-contentmodel": "Journal de modification de modèle de contenu",
        "log-description-contentmodel": "Événements relatifs aux modèles de contenu d’une page",
+       "logentry-contentmodel-new": "$1 {{GENDER:$2|a créé}} la page $3 en utilisant un modèle de contenu « $5 » autre que celui par défaut",
        "logentry-contentmodel-change": "$1 {{GENDER:$2|a modifié}} le modèle de contenu de la page $3 de « $4 » en « $5 »",
        "logentry-contentmodel-change-revertlink": "rétablir",
        "logentry-contentmodel-change-revert": "rétablir",
        "tags-delete-not-allowed": "Les balises définies par une extension ne peuvent pas être supprimées, à moins que l'extension ne le permette spécifiquement.",
        "tags-delete-not-found": "La balise « $1 » n’existe pas.",
        "tags-delete-too-many-uses": "La balise « $1 » est appliquée à plus de $2 {{PLURAL:$2|révision|révisions}}, ce qui signifie qu'elle ne peut pas être supprimée.",
-       "tags-delete-warnings-after-delete": "La balise « $1 » a été supprimée avec succès, mais {{PLURAL:$2|l' avertissement suivant a|avertissements suivants ont}} été rencontré{{PLURAL:$2||s}} :",
+       "tags-delete-warnings-after-delete": "La balise « $1 » a été supprimée, mais {{PLURAL:$2|l’avertissement suivant a|les avertissements suivants ont}} été rencontré{{PLURAL:$2||s}} :",
        "tags-activate-title": "Activer la balise",
        "tags-activate-question": "Vous êtes sur le point d'activer la balise « $1 ».",
        "tags-activate-reason": "Motif :",
        "tags-edit-revision-legend": "Ajouter ou enlever des balises de {{PLURAL:$1|cette révision|toutes les $1 révisions}}",
        "tags-edit-logentry-legend": "Ajouter ou enlever les balises de {{PLURAL:$1|cette entrée de journal|toutes les $1 entrées de journal}}",
        "tags-edit-existing-tags": "Balises existantes :",
-       "tags-edit-existing-tags-none": "''Aucun''",
+       "tags-edit-existing-tags-none": "<em>Aucun</em>",
        "tags-edit-new-tags": "Nouvelles balises :",
        "tags-edit-add": "Ajouter ces balises :",
        "tags-edit-remove": "Enlever ces balises :",
        "tags-edit-reason": "Motif :",
        "tags-edit-revision-submit": "Appliquer les modifications à {{PLURAL:$1|cette révision|$1 révisions}}",
        "tags-edit-logentry-submit": "Appliquer les modifications à {{PLURAL:$1|cette entrée de journal|$1 entrées de journal}}",
-       "tags-edit-success": "Les modifications ont été appliquées avec succès.",
+       "tags-edit-success": "Les modifications ont été appliquées.",
        "tags-edit-failure": "Les modifications n’ont pas pu être appliquées :\n$1",
        "tags-edit-nooldid-title": "Révision cible non valide",
        "tags-edit-nooldid-text": "Vous n’avez soit pas spécifié de révision cible sur laquelle exécuter cette fonction, soit la révision spécifiée n’existe pas.",
        "feedback-bugnew": "J'ai vérifié. Signaler un nouveau bogue",
        "feedback-bugornote": "Si vous êtes prêt à décrire un problème technique en détail, veuillez [$1 signaler un bogue].\nSinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentaire sera ajouté à la page « [$3 $2] », avec votre nom d'utilisateur.",
        "feedback-cancel": "Annuler",
-       "feedback-close": "Fait",
+       "feedback-close": "Terminé",
        "feedback-external-bug-report-button": "Signaler un bogue technique",
        "feedback-dialog-title": "Soumettre un commentaire",
        "feedback-dialog-intro": "Vous pouvez utiliser le simple formulaire ci-dessous pour faire parvenir vos commentaires. Votre commentaire sera ajouté à la page « $1 », ainsi que votre nom d’utilisateur.",
        "default-skin-not-found": "Oups ! L’habillage par défaut pour votre wiki, défini par <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, n’est pas disponible.\n\nVotre installation semble inclure {{PLURAL:$4|l’habillage suivant|les habillages suivants}}. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de configuration des habillages] pour savoir comment {{PLURAL:$4|l’|les }}activer et choisir celui par défaut.\n\n$2\n\n; Si vous venez juste d’installer MediaWiki :\n: Vous l’avez probablement installé depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en:\n:* Téléchargeant le [https://www.mediawiki.org/wiki/Download fichier tar de l’installeur], qui comprend plusieurs habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:* Téléchargeant les fichiers tar d’habillage individuel depuis [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Téléchargeant des habillages avec Git].\n: Faire ainsi ne devrait pas interférer avec votre dépôt git, si vous êtes un développeur de MediaWiki.\n\n; Si vous venez juste de mettre à jour MediaWiki :\n: MediaWiki 1.24 et au-delà n’active plus automatiquement les habillages installés (voyez [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery le manuel sur la découverte automatique des habillages]). Vous pouvez coller {{PLURAL:$5|la ligne suivante|les lignes suivantes}} dans <code>LocalSettings.php</code> pour activer {{PLURAL:$5|l’habillage actuellement installé|tous les habillages actuellement installés}} :\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si vous venez de modifier <code>LocalSettings.php</code> :\n: Vérifiez deux fois le nom des habillages pour éviter les erreurs de frappe.",
        "default-skin-not-found-no-skins": "Oups ! L’habillage par défaut pour votre wiki , défini par <code>$wgDefaultSkin</code> comme <code>$1</code>, n’est pas disponible.\n\nVous n’avez aucun habillage d’installé.\n\n; Si vous venez juste d’installer ou de mettre à jour MediaWiki :\n: Vous l’avez sans doute fait depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. MediaWiki 1.24 et au-delà n’inclut aucun habillage dans le dépôt principal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en :\n:* Téléchargeant [https://www.mediawiki.org/wiki/Download le fichier tar de l’installeur], qui comprend différents habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:* Téléchargeant les fichiers tar d’habillage individuel depuis [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Utiliser Git pour télécharger des habillages].\n: Faire ainsi ne devrait pas interférer avec votre dépôt git si vous êtes un développeur de MediaWiki. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de la configuration des habillages] pour des instructions sur la manière d’activer les habillages et choisir celui par défaut.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activé)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''désactivé''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>désactivé</strong>)",
        "mediastatistics": "Statistiques sur les médias",
        "mediastatistics-summary": "Statistiques sur les types de fichier téléchargés. Elles ne prennent en compte que la version la plus récente d’un fichier. Les versions anciennes ou supprimées des fichiers sont exclues.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 octet|$1 octets}} ($2 ; $3%)",
index be92a64..89cc1a1 100644 (file)
        "nchanges": "$1 changement{{PLURAL:$1||s}}",
        "enhancedrc-history": "changements",
        "recentchanges": "Changements récent",
-       "recentchanges-legend-heading": "'''Légende:'''",
+       "recentchanges-legend-heading": "<strong>Légende:</strong>",
        "rcshowhideminor-hide": "Cacher",
        "rcshowhidebots": "$1 les robots",
        "rcshowhidebots-show": "Afficher",
index 081306a..f58c6f2 100644 (file)
        "tog-underline": "Solegnér los lims :",
        "tog-hideminor": "Cachiér los petiôts changements dedens los dèrriérs changements",
        "tog-hidepatrolled": "Cachiér los changements gouardâs dedens los dèrriérs changements",
-       "tog-newpageshidepatrolled": "Cachiér les pâges gouardâyes entre-mié la lista de les pâges novèles",
-       "tog-extendwatchlist": "Ètendre la lista de siuvu por montrar tôs los changements et pas ren que los ples novéls",
-       "tog-usenewrc": "Rassemblar los changements per pâge dedens los dèrriérs changements et la lista de siuvu",
+       "tog-newpageshidepatrolled": "Cachiér les pâges gouardâyes dedens la lista de les pâges novèles",
+       "tog-hidecategorization": "Cachiér la catègorisacion de les pâges",
+       "tog-extendwatchlist": "Èpatar la lista de gouârda por montrar tôs los changements et pas ren que los ples novéls",
+       "tog-usenewrc": "Rassemblar los changements per pâge dedens los dèrriérs changements et la lista de gouârda",
        "tog-numberheadings": "Numerotar ôtomaticament los titros de sèccion",
        "tog-showtoolbar": "Montrar la bârra d’outils de changement",
-       "tog-editondblclick": "Changiér des pâges sur doblo-clic",
-       "tog-editsectiononrightclick": "Activar lo changement de sèccions per clic drêt sur lors titros",
-       "tog-watchcreations": "Apondre les pâges que fé et pués los fichiérs que tèlèchârjo a ma lista de siuvu",
-       "tog-watchdefault": "Apondre les pâges et los fichiérs que chanjo a ma lista de siuvu",
-       "tog-watchmoves": "Apondre les pâges et los fichiérs que dèplaço a ma lista de siuvu",
-       "tog-watchdeletion": "Apondre les pâges et los fichiérs que suprimo a ma lista de siuvu",
-       "tog-watchrollback": "Apondre a ma lista de siuvu les pâges que j’é fêt na rèvocacion",
+       "tog-editondblclick": "Changiér de pâges avouéc un doblo-cllic",
+       "tog-editsectiononrightclick": "Activar lo changement de sèccions per un cllic drêt dessus lors titros",
+       "tog-watchcreations": "Apondre a ma lista de gouârda les pâges que fé et pués los fichiérs que tèlèchârjo",
+       "tog-watchdefault": "Apondre a ma lista de gouârda les pâges et los fichiérs que chanjo",
+       "tog-watchmoves": "Apondre a ma lista de gouârda les pâges et los fichiérs que dèplaço",
+       "tog-watchdeletion": "Apondre a ma lista de gouârda les pâges et los fichiérs que suprimo",
+       "tog-watchrollback": "Apondre a ma lista de gouârda les pâges que j’é fêt na rèvocacion",
        "tog-minordefault": "Marcar per dèfôt tôs los changements coment petiôts",
        "tog-previewontop": "Montrar l’apèrçu d’amont la zona de changement",
        "tog-previewonfirst": "Montrar l’apèrçu pendent lo premiér changement",
-       "tog-enotifwatchlistpages": "Mè mandar un mèssâjo quand na pâge un fichiér de ma lista de siuvu est changiê(e)",
+       "tog-enotifwatchlistpages": "Mè mandar un mèssâjo quand na pâge un fichiér de ma lista de gouârda est changiê(e)",
        "tog-enotifusertalkpages": "Mè mandar un mèssâjo quand ma pâge de discussion est changiêe",
-       "tog-enotifminoredits": "Mè mandar un mèssâjo mémo en câs de petiôts changements de les pâges et des fichiérs",
+       "tog-enotifminoredits": "Mè mandar un mèssâjo tot-pariér en câs de petiôts changements de les pâges et des fichiérs",
        "tog-enotifrevealaddr": "Rèvèlar mon adrèce èlèctronica dedens los mèssâjos de notificacion",
        "tog-shownumberswatching": "Montrar lo nombro d’utilisators que siuvont na pâge",
        "tog-oldsig": "Signatura ègzistenta :",
        "tog-fancysig": "Trètar la signatura coment de vouiquitèxto (sen lim ôtomatico)",
        "tog-uselivepreview": "Empleyér l’apèrçu rapido",
        "tog-forceeditsummary": "Mè balyér na semonce quand j’é pas buchiê de rèsumâ de changement",
-       "tog-watchlisthideown": "Cachiér los mins changements dedens la lista de siuvu",
-       "tog-watchlisthidebots": "Cachiér los changements fêts per des robots dedens la lista de siuvu",
-       "tog-watchlisthideminor": "Cachiér los petiôts changements dedens la lista de siuvu",
-       "tog-watchlisthideliu": "Cachiér los changements fêts per des utilisators branchiês dedens la lista de siuvu",
-       "tog-watchlisthideanons": "Cachiér los changements fêts per des utilisators anonimos dedens la lista de siuvu",
-       "tog-watchlisthidepatrolled": "Cachiér los changements gouardâs dedens la lista de siuvu",
+       "tog-watchlisthideown": "Cachiér mos changements dedens la lista de gouârda",
+       "tog-watchlisthidebots": "Cachiér los changements fêts per des robots dedens la lista de gouârda",
+       "tog-watchlisthideminor": "Cachiér los petiôts changements dedens la lista de gouârda",
+       "tog-watchlisthideliu": "Cachiér los changements fêts per des utilisators branchiês dedens la lista de gouârda",
+       "tog-watchlistreloadautomatically": "Rechargiér ôtomaticament la lista de gouârda quand los chouèx de filtrâjo sont changiês (JavaScript nècèssèro)",
+       "tog-watchlisthideanons": "Cachiér los changements fêts per des utilisators anonimos dedens la lista de gouârda",
+       "tog-watchlisthidepatrolled": "Cachiér los changements gouardâs dedens la lista de gouârda",
+       "tog-watchlisthidecategorization": "Cachiér la catègorisacion de les pâges",
        "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-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",
-       "tog-prefershttps": "Empleyér tojorn un branchement sècurisâ en étent branchiê",
-       "underline-always": "Tojorn",
+       "tog-norollbackdiff": "Pas fâre vêre la dif sur na rèvocacion",
+       "tog-useeditwarning": "Mè balyér na semonce quand quito na pâge de changement sen encartar los changements",
+       "tog-prefershttps": "Empleyér tot lo temps un branchement sècurisâ en étent branchiê(e)",
+       "underline-always": "Tot lo temps",
        "underline-never": "Jamés",
-       "underline-default": "Valor de l’habelyâjo du navigator per dèfôt",
+       "underline-default": "Valor per dèfôt de l’habelyâjo du navegator",
        "editfont-style": "Stilo de police de la zona de changement :",
-       "editfont-default": "Police du navigator per dèfôt",
-       "editfont-monospace": "Police de chace fixa",
+       "editfont-default": "Police per dèfôt du navegator",
+       "editfont-monospace": "Police a chace fixa",
        "editfont-sansserif": "Police sen empiotament",
        "editfont-serif": "Police avouéc empiotament",
        "sunday": "demenge",
        "thu": "dj",
        "fri": "dv",
        "sat": "ds",
-       "january": "janviér",
-       "february": "fevriér",
-       "march": "mârs",
+       "january": "de janviér",
+       "february": "de fevriér",
+       "march": "de mârs",
        "april": "d’avril",
        "may_long": "de mê",
        "june": "de jouen",
-       "july": "julyèt",
-       "august": "oût",
-       "september": "septembro",
-       "october": "octobro",
-       "november": "novembro",
-       "december": "dècembro",
+       "july": "de julyèt",
+       "august": "d’oût",
+       "september": "de septembro",
+       "october": "d’octobro",
+       "november": "de novembro",
+       "december": "de dècembro",
        "january-gen": "de janviér",
        "february-gen": "de fevriér",
        "march-gen": "de mârs",
        "october-gen": "d’octobro",
        "november-gen": "de novembro",
        "december-gen": "de dècembro",
-       "jan": "jan",
-       "feb": "fev",
-       "mar": "mâr",
-       "apr": "avr",
-       "may": "mê",
-       "jun": "jou",
-       "jul": "jul",
-       "aug": "oût",
-       "sep": "sep",
-       "oct": "oct",
-       "nov": "nov",
-       "dec": "dèc",
+       "jan": "de jan",
+       "feb": "de fev",
+       "mar": "de mâr",
+       "apr": "d’avr",
+       "may": "de mê",
+       "jun": "de jou",
+       "jul": "de jul",
+       "aug": "d’oût",
+       "sep": "de sep",
+       "oct": "d’oct",
+       "nov": "de nov",
+       "dec": "de dèc",
        "january-date": "$1 de janviér",
        "february-date": "$1 de fevriér",
        "march-date": "$1 de mârs",
        "october-date": "$1 d’octobro",
        "november-date": "$1 de novembro",
        "december-date": "$1 de dècembro",
-       "pagecategories": "Catègorie{{PLURAL:$1||s}}",
-       "category_header": "Pâges dedens la catègorie « $1 »",
+       "period-am": "AM",
+       "period-pm": "PM",
+       "pagecategories": "Catègori{{PLURAL:$1|a|es}}",
+       "category_header": "Pâges dedens la catègoria « $1 »",
        "subcategories": "Sot-catègories",
-       "category-media-header": "Fichiérs mèdia dedens la catègorie « $1 »",
-       "category-empty": "''Ora ceta catègorie contint gins de pâge de fichiér mèdia.''",
-       "hidden-categories": "{{PLURAL:$1|Catègorie cachiêe|Catègories cachiêes}}",
+       "category-media-header": "Fichiérs multimèdiâ dedens la catègoria « $1 »",
+       "category-empty": "<em>Ora cela catègoria contint gins de pâge de fichiér multimèdiâ.</em>",
+       "hidden-categories": "{{PLURAL:$1|Catègoria cachiêe|Catègories cachiêes}}",
        "hidden-category-category": "Catègories cachiêes",
-       "category-subcat-count": "Cela catègorie-que at {{PLURAL:$2|ren que ceta sot-catègorie.|{{PLURAL:$1|ceta sot-catègorie|cetes $1 sot-catègories}}, sur na soma de $2.}}",
-       "category-subcat-count-limited": "Cela catègorie-que at {{PLURAL:$1|ceta sot-catègorie|cetes $1 sot-catègories}}.",
-       "category-article-count": "{{PLURAL:$2|Cela catègorie-que contint ren que ceta pâge.|{{PLURAL:$1|Ceta pâge est|Cetes $1 pâges sont}} a cela catègorie-que, sur na soma de $2.}}",
-       "category-article-count-limited": "{{PLURAL:$1|Ceta pâge figure|Cetes $1 pâges figuront}} dedens la presenta catègorie.",
-       "category-file-count": "{{PLURAL:$2|Cela catègorie-que contint ren que ceti fichiér.|{{PLURAL:$1|Ceti fichiér est|Cetos $1 fichiérs sont}} a cela catègorie-que, sur na soma de $2.}}",
-       "category-file-count-limited": "{{PLURAL:$1|Ceti fichiér figure|Cetos $1 fichiérs figuront}} dedens la presenta catègorie.",
+       "category-subcat-count": "Cela catègoria at {{PLURAL:$2|mas que cela sot-catègoria-que.|{{PLURAL:$1|cela sot-catègoria|celes $1 sot-catègories}}-que, sur na soma de $2.}}",
+       "category-subcat-count-limited": "Cela catègoria at {{PLURAL:$1|cela sot-catègoria|celes $1 sot-catègories}}-que.",
+       "category-article-count": "{{PLURAL:$2|Cela catègoria contint mas que cela pâge-que.|{{PLURAL:$1|Cela pâge-que est|Celes $1 pâges-que sont}} a cela catègoria, sur na soma de $2.}}",
+       "category-article-count-limited": "{{PLURAL:$1|Cela pâge-que figure|Celes $1 pâges-que figuront}} dedens la presenta catègoria.",
+       "category-file-count": "{{PLURAL:$2|Cela catègoria contint mas que cél fichiér-que.|{{PLURAL:$1|Cél fichiér-que est|Celos $1 fichiérs-que sont}} a cela catègoria, sur na soma de $2.}}",
+       "category-file-count-limited": "{{PLURAL:$1|Cél fichiér-que figure|Celos $1 fichiérs-que figuront}} dedens la presenta catègoria.",
        "listingcontinuesabbrev": "(suita)",
        "index-category": "Pâges endèxâyes",
        "noindex-category": "Pâges pas endèxâyes",
        "newwindow": "(ôvre na fenétra novèla)",
        "cancel": "Anular",
        "moredotdotdot": "Més...",
-       "morenotlisted": "Ceta lista est pas complèta.",
+       "morenotlisted": "Cela lista est pas complèta.",
        "mypage": "Pâge",
        "mytalk": "Discussion",
-       "anontalk": "Discussion avouéc cet’adrèce IP",
-       "navigation": "Navigacion",
+       "anontalk": "Discussion",
+       "navigation": "Navegacion",
        "and": "&#32;et",
        "qbfind": "Trovar",
        "qbbrowse": "Fâre dèfelar",
        "qbedit": "Changiér",
-       "qbpageoptions": "Ceta pâge",
+       "qbpageoptions": "Cela pâge",
        "qbmyoptions": "Mes pâges",
        "faq": "Quèstions sovent posâyes",
        "faqpage": "Project:Quèstions sovent posâyes",
        "actions": "Accions",
        "namespaces": "Èspâços de noms",
-       "variants": "Variantes",
-       "navigation-heading": "Menu de navigacion",
+       "variants": "Vèrsions",
+       "navigation-heading": "Menu de navegacion",
        "errorpagetitle": "Fôta",
        "returnto": "Tornar a la pâge $1.",
        "tagline": "De {{SITENAME}}",
        "help": "Éde",
        "search": "Rechèrche",
        "searchbutton": "Rechèrchiér",
-       "go": "Alar trovar",
+       "go": "Emmodar",
        "searcharticle": "Liére",
        "history": "Historico de la pâge",
        "history_short": "Historico",
-       "updatedmarker": "betâye a jorn dês la mina dèrriére visita",
+       "updatedmarker": "betâye a jorn dês ma dèrriére vesita",
        "printableversion": "Vèrsion emprimâbla",
        "permalink": "Lim fixo",
        "print": "Emprimar",
        "view": "Liére",
-       "view-foreign": "Vêde sur $1",
+       "view-foreign": "Vêre dessus $1",
        "edit": "Changiér",
        "edit-local": "Changiér la dèscripcion locâla",
        "create": "Fâre",
        "create-local": "Apondre na dèscripcion locâla",
-       "editthispage": "Changiér ceta pâge",
+       "editthispage": "Changiér cela pâge",
        "create-this-page": "Fâre cela pâge",
        "delete": "Suprimar",
-       "deletethispage": "Suprimar ceta pâge",
+       "deletethispage": "Suprimar cela pâge",
        "undeletethispage": "Refâre cela pâge",
        "undelete_short": "Refâre {{PLURAL:$1|un changement|$1 changements}}",
        "viewdeleted_short": "Vêre {{PLURAL:$1|un changement suprimâ|$1 changements suprimâs}}",
        "protect": "Protègiér",
        "protect_change": "changiér",
-       "protectthispage": "Protègiér ceta pâge",
+       "protectthispage": "Protègiér cela pâge",
        "unprotect": "Changiér la protèccion",
-       "unprotectthispage": "Changiér la protèccion de ceta pâge",
+       "unprotectthispage": "Changiér la protèccion de cela pâge",
        "newpage": "Pâge novèla",
-       "talkpage": "Discussion sur ceta pâge",
-       "talkpagelinktext": "discutar",
+       "talkpage": "Discussion sur cela pâge",
+       "talkpagelinktext": "discussion",
        "specialpage": "Pâge spèciâla",
        "personaltools": "Outils a sè",
-       "articlepage": "Vêde la pâge de contegnu",
+       "articlepage": "Vêre la pâge de contegnu",
        "talk": "Discussion",
-       "views": "Vues",
+       "views": "Viues",
        "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",
-       "mediawikipage": "Vêde la pâge du mèssâjo",
-       "templatepage": "Vêde la pâge du modèlo",
-       "viewhelppage": "Vêde la pâge d’éde",
-       "categorypage": "Vêde la pâge de catègorie",
-       "viewtalkpage": "Vêde la pâge de discussion",
-       "otherlanguages": "Ôtres lengoues",
-       "redirectedfrom": "(Redirigiêe dês $1)",
+       "userpage": "Vêre la pâge utilisator",
+       "projectpage": "Vêre la pâge projèt",
+       "imagepage": "Vêre la pâge du fichiér",
+       "mediawikipage": "Vêre la pâge du mèssâjo",
+       "templatepage": "Vêre la pâge du modèlo",
+       "viewhelppage": "Vêre la pâge d’éde",
+       "categorypage": "Vêre la pâge de catègoria",
+       "viewtalkpage": "Vêre la pâge de discussion",
+       "otherlanguages": "En ôtres lengoues",
+       "redirectedfrom": "(Redirigiê dês $1)",
        "redirectpagesub": "Pâge de redirèccion",
        "redirectto": "Redirigiér vers :",
-       "lastmodifiedat": "Dèrriér changement de ceta pâge lo $1 a $2.",
-       "viewcount": "Ceta pâge est étâye vua {{PLURAL:$1|un côp|$1 côps}}.",
+       "lastmodifiedat": "Dèrriér changement de cela pâge lo $1 a $2.",
+       "viewcount": "Cela pâge est étâye viua {{PLURAL:$1|un côp|$1 côps}}.",
        "protectedpage": "Pâge protègiêe",
        "jumpto": "Alar vers :",
-       "jumptonavigation": "navigacion",
+       "jumptonavigation": "navegacion",
        "jumptosearch": "rechèrche",
-       "view-pool-error": "Dèconsolâ, los sèrviors sont lapidâs d’ôvra cetos temps.\nTrop d’utilisators èprôvont de vêre ceta pâge.\nSe vos plét, atende un moment devant que tornar èprovar d’arrevar a ceta pâge.\n\n$1",
+       "view-pool-error": "Dèsolâ, los sèrviors sont lapidâs d’ôvra cetos temps.\nTrop d’utilisators èprôvont de vêre cela pâge.\nSe vos plét, atende-vos un petiôt moment devant que tornar èprovar d’arrevar a ceta.\n\n$1",
+       "generic-pool-error": "Dèsolâ, los sèrviors sont lapidâs d’ôvra cetos temps.\nTrop d’utilisators èprôvont de vêre cela ressôrsa.\nSe vos plét, atende-vos un petiôt moment devant que tornar èprovar d’arrevar a ceta.",
        "pool-timeout": "Dèlê dèpassâ pendent l’atenta du vèrroly",
        "pool-queuefull": "La renche d’ôvra est plêna",
        "pool-errorunknown": "Fôta encognua",
+       "pool-servererror": "Lo sèrviço de comptâjo de la resèrva est pas disponiblo ($1).",
+       "poolcounter-usage-error": "Fôta d’usâjo : $1",
        "aboutsite": "Sur {{SITENAME}}",
        "aboutpage": "Project:A propôs",
-       "copyright": "Lo contegnu est disponiblo desot licence $1.",
+       "copyright": "Lo contegnu est disponiblo desot licence $1 betâ a pârt mencion contrèra.",
        "copyrightpage": "{{ns:project}}:Drêts d’ôtor",
        "currentevents": "Novèles",
        "currentevents-url": "Project:Novèles",
        "disclaimers": "Semonces",
-       "disclaimerpage": "Project:Semonces g·ènèrales",
+       "disclaimerpage": "Project:Semonces g·ènèrâles",
        "edithelp": "Éde",
+       "helppage-top-gethelp": "Éde",
        "mainpage": "Reçua",
        "mainpage-description": "Reçua",
-       "policy-url": "Project:Règlles de dedens",
-       "portal": "Comunôtât",
+       "policy-url": "Project:Politiques",
+       "portal": "Reçua de la comunôtât",
        "portal-url": "Project:Reçua de la comunôtât",
        "privacy": "Politica de confidencialitât",
        "privacypage": "Project:Politica de confidencialitât",
        "badaccess-group0": "Vos éte pas ôtorisâ a fâre l’accion demandâye.",
        "badaccess-groups": "L’accion demandâye est limitâye ux utilisators de {{PLURAL:$2|la tropa|yona de les tropes}} : $1.",
        "versionrequired": "Vèrsion $1 de MediaWiki nècèssèra",
-       "versionrequiredtext": "La vèrsion $1 de MediaWiki est nècèssèra por empleyér ceta pâge.\nVêde la [[Special:Version|pâge de les vèrsions]].",
+       "versionrequiredtext": "La vèrsion $1 de MediaWiki est nècèssèra por empleyér cela pâge.\nVêde la [[Special:Version|pâge de les vèrsions]].",
        "ok": "D’acôrd",
        "retrievedfrom": "Rècupèrâye de « $1 »",
-       "youhavenewmessages": "Vos éd de $1 ($2).",
-       "youhavenewmessagesfromusers": "Vos éd $1 {{PLURAL:$3|d’un ôtr’utilisator|de $3 ôtros utilisators}} ($2).",
+       "youhavenewmessages": "{{PLURAL:$3|Vos éd}} $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Vos éd}} $1 {{PLURAL:$3|d’un ôtr’utilisator|de $3 ôtros utilisators}} ($2).",
        "youhavenewmessagesmanyusers": "Vos éd $1 d’un mouél d’utilisators ($2).",
-       "newmessageslinkplural": "{{PLURAL:$1|un mèssâjo novél|de mèssâjos novéls}}",
-       "newmessagesdifflinkplural": "{{PLURAL:$1|dèrriér changement|dèrriérs changements}}",
-       "youhavenewmessagesmulti": "Vos éd de mèssâjos novéls sur $1",
+       "newmessageslinkplural": "{{PLURAL:$1|un mèssâjo novél|999=de mèssâjos novéls}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|dèrriér changement|999=dèrriérs changements}}",
+       "youhavenewmessagesmulti": "Vos éd de mèssâjos novéls dessus $1",
        "editsection": "changiér",
        "editold": "changiér",
        "viewsourceold": "vêre lo tèxto sôrsa",
        "hidetoc": "cachiér",
        "collapsible-collapse": "repleyér",
        "collapsible-expand": "dèpleyér",
-       "thisisdeleted": "Est-o que vos voléd vêre ou ben refâre $1 ?",
-       "viewdeleted": "Est-o que vos voléd vêre $1 ?",
+       "confirmable-confirm": "{{GENDER:$1|Vos}} éte de sûr  ?",
+       "confirmable-yes": "Ouè",
+       "confirmable-no": "Nan",
+       "thisisdeleted": "Vos voléd vêre refâre $1 ?",
+       "viewdeleted": "Vos voléd vêre $1 ?",
        "restorelink": "{{PLURAL:$1|un changement suprimâ|$1 changements suprimâs}}",
        "feedlinks": "Flux :",
        "feed-invalid": "Tipo d’abonement du flux pas justo.",
        "site-atom-feed": "Flux Atom de $1",
        "page-rss-feed": "Flux RSS de « $1 »",
        "page-atom-feed": "Flux Atom de « $1 »",
-       "red-link-title": "$1 (pâge pas ègzistenta)",
-       "sort-descending": "Betar per ôrdre dèscendent",
-       "sort-ascending": "Betar per ôrdre montent",
+       "red-link-title": "$1 (pâge inègzistenta)",
+       "sort-descending": "Betar en ôrdre dècrèssent",
+       "sort-ascending": "Betar en ôrdre crèssent",
        "nstab-main": "Pâge",
        "nstab-user": "Pâge utilisator",
-       "nstab-media": "Fichiér mèdia",
+       "nstab-media": "Fichiér multimèdiâ",
        "nstab-special": "Pâge spèciâla",
        "nstab-project": "Pâge projèt",
        "nstab-image": "Fichiér",
        "nstab-mediawiki": "Mèssâjo",
        "nstab-template": "Modèlo",
        "nstab-help": "Éde",
-       "nstab-category": "Catègorie",
+       "nstab-category": "Catègoria",
+       "mainpage-nstab": "Reçua",
        "nosuchaction": "Accion encognua",
-       "nosuchactiontext": "L’accion spècifiâye dens l’URL est pas justa.\nPôt-étre vos éd mâl-buchiê l’URL ou ben siuvu un lim fôx.\nPôt asse-ben étre na cofierie dedens la programeria empleyêe per {{SITENAME}}.",
-       "nosuchspecialpage": "Pâge spèciâla pas ègzistenta",
-       "nospecialpagetext": "<strong>Vos éd demandâ na pâge spèciâla qu’ègziste pas.</strong>\n\nNa lista de les pâges spèciâles justes sè trôve dessus [[Special:SpecialPages|{{int:specialpages}}]].",
+       "nosuchactiontext": "L’accion spècifiâye dens l’URL est pas justa.\nPôt-étre vos éd mâl-buchiê l’URL ou ben siuvu un lim fôx.\nPôt asse-ben étre na cofieria dedens la programeria empleyêe per {{SITENAME}}.",
+       "nosuchspecialpage": "Pâge spèciâla inègzistenta",
+       "nospecialpagetext": "<strong>Vos éd demandâ na pâge spèciâla pas justa.</strong>\n\nNa lista de les pâges spèciâles justes sè trôve dessus [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Fôta",
        "databaseerror": "Fôta de la bâsa de balyês",
-       "laggedslavemode": "'''Atencion :''' cela pâge pôt pas contegnir tôs los dèrriérs changements fêts.",
-       "readonly": "Bâsa de balyês vèrrolyêe",
-       "enterlockreason": "Buchiéd na rêson du vèrroly et pués un’èstimacion de la sina durâ",
-       "readonlytext": "Ora la bâsa de balyês est vèrrolyêe por les entrâs novèles et los ôtros changements, de sûr por pèrmetre la sina mantegnence, dês cen tot tornerat en ôrdre.\n\nL’administrator que l’at vèrrolyê at balyê cet’èxplicacion : $1",
-       "missing-article": "La bâsa de balyês at pas trovâ lo tèxto d’una pâge qu’el arêt diu trovar, apelâye « $1 » $2.\n\nEn g·ènèral cen arreve en siuvent un lim d’una dif d’un historico dèpassâ(ye) de vers na pâge qu’est étâye suprimâye.\n\nS’o est pas lo câs, pôt étre na cofierie dedens la programeria.\nSe vos plét, signalâd-la a un [[Special:ListUsers/sysop|administrator]] sen oubliar de lui endicar l’URL du lim.",
+       "databaseerror-text": "Na fôta de demanda de bâsa de balyês est arrevâye.\nCen pôt vegnir d’una cofieria dedens la programeria.",
+       "databaseerror-textcl": "Na fôta de demanda de bâsa de balyês est arrevâye.",
+       "databaseerror-query": "Demanda : $1",
+       "databaseerror-function": "Fonccion : $1",
+       "databaseerror-error": "Fôta : $1",
+       "transaction-duration-limit-exceeded": "Por èvitar na trop fôrt’ôgmentacion du dèlê de rèplicacion, cela transaccion est étâye anulâye, lo temps d’ècritura ($1) at dèpassâ la limita de $2 second{{PLURAL:$2|a|es}}.\nSe vos chèrchiéd a changiér un mouél de piéces en mémo temps, pletout èprovâd de fâre l’opèracion en doux-três ètapes.",
+       "laggedslavemode": "<strong>Atencion :</strong> cela pâge pôt pas contegnir los fins dèrriérs changements fêts.",
+       "readonly": "Bâsa de balyês cotâye",
+       "enterlockreason": "Buchiéd na rêson du vèrroly et pués un’èstimacion de son temps",
+       "readonlytext": "Ora la bâsa de balyês est cotâye por de novèles entrês et d’ôtros changements, de sûr por na rotina d’entretin, dês cen tot tornerat en ôrdre.\n\nL’administrator sistèmo que l’at cotâ at balyê cel’èxplicacion : $1",
+       "missing-article": "La bâsa de balyês at pas trovâ lo tèxto d’una pâge qu’arêt diu trovar, apelâye « $1 » $2.\n\nEn g·ènèrâl cen arreve en siuvent un lim dèpassâ d’una dif d’un historico de vers na pâge suprimâye.\n\nS’o est pas lo câs, pôt étre na cofieria dedens la programeria.\nSe vos plét, signalâd-la a un [[Special:ListUsers/sysop|administrator]] sen oubliar de lui endicar l’URL du lim.",
        "missingarticle-rev": "(numerô de vèrsion : $1)",
        "missingarticle-diff": "(dif : $1, $2)",
-       "readonly_lag": "La bâsa de balyês est étâye vèrrolyêe ôtomaticament pendent que los sèrviors secondèros ratrapont lor retârd sur lo sèrvior principâl.",
+       "readonly_lag": "La bâsa de balyês est étâye cotâye ôtomaticament pendent que los sèrviors secondèros ratrapont lor retârd sur lo sèrvior principâl.",
+       "nonwrite-api-promise-error": "L’en-téta HTTP 'Promise-Non-Write-API-Action' est étâye mandâye mas la demanda est étâye fêta a un modulo d’ècritura de l’API.",
        "internalerror": "Fôta de dedens",
        "internalerror_info": "Fôta de dedens : $1",
+       "internalerror-fatal-exception": "Fôta fatala de tipo « $1 »",
        "filecopyerror": "Y at pas moyen de copiyér lo fichiér « $1 » vers « $2 ».",
        "filerenameerror": "Y at pas moyen de renomar lo fichiér « $1 » en « $2 ».",
        "filedeleteerror": "Y at pas moyen de suprimar lo fichiér « $1 ».",
        "directorycreateerror": "Y at pas moyen de fâre lo rèpèrtouèro « $1 ».",
+       "directoryreadonlyerror": "Lo rèpèrtouèro « $1 » est mas qu’en lèctura.",
+       "directorynotreadableerror": "Lo rèpèrtouèro « $1 » est pas liésiblo.",
        "filenotfound": "Y at pas moyen de trovar lo fichiér « $1 ».",
-       "unexpected": "Valor emprèvua : « $1 » = « $2 ».",
+       "unexpected": "Valor emprèviua : « $1 » = « $2 ».",
        "formerror": "Fôta : y at pas moyen de mandar lo formulèro.",
-       "badarticleerror": "Cel’accion pôt pas étre fêta sur ceta pâge.",
+       "badarticleerror": "Cel’accion pôt pas étre fêta sur cela pâge.",
        "cannotdelete": "Y at pas moyen de suprimar la pâge lo fichiér « $1 ».\nPôt-étre la suprèssion est ja étâye fêta per un ôtro.",
        "cannotdelete-title": "Y at pas moyen de suprimar la pâge « $1 »",
-       "delete-hook-aborted": "Suprèssion anulâye per un grèfon.\nNion’èxplicacion est étâye balyêe.",
+       "delete-hook-aborted": "Suprèssion anulâye per un’èxtension.\nNion’èxplicacion est étâye balyêe.",
+       "no-null-revision": "Y at pas moyen de fâre na novèla vèrsion voueda por la pâge « $1 »",
        "badtitle": "Crouyo titro",
-       "badtitletext": "Lo titro de la pâge demandâye est pas justo, vouedo ou ben o est un titro entèrlengoua ou entèrvouiqui mâl-liyê.\nContint de sûr yon ou ben un mouél de caractèros que pôvont pas étre empleyês dedens los titros.",
-       "perfcached": "Cetes balyês sont en cacho et pôvont pas étre a jorn. Por lo més {{PLURAL:$1|un rèsultat est disponiblo|$1 rèsultats sont disponiblos}} dedens lo cacho.",
-       "perfcachedts": "Cetes balyês sont en cacho et sont étâyes betâyes a jorn por lo dèrriér côp a $1. Por lo més {{PLURAL:$1|un rèsultat est disponiblo|$1 rèsultats sont disponiblos}} dedens lo cacho.",
-       "querypage-no-updates": "Ora les mêses a jorn por ceta pâge sont dèsactivâyes.\nLes balyês ique seront pas betâyes a jorn.",
+       "badtitletext": "Lo titro de la pâge demandâye est pas justo, vouedo ou ben o est un titro entèrlengoua entèrvouiqui mâl-liyê.\nContint de sûr yon ou ben un mouél de caractèros que pôvont pas étre empleyês dedens los titros.",
+       "title-invalid-empty": "Lo titro de la pâge demandâye est vouedo ou ben contint mas que lo nom d’un èspâço de noms.",
+       "title-invalid-utf8": "Lo titro de la pâge demandâye contint na cobla UTF-8 pas justa.",
+       "title-invalid-interwiki": "Lo titro de la pâge demandâye contint un lim entèrvouiqui que pôt pas étre empleyê dedens los titros.",
+       "title-invalid-talk-namespace": "Lo titro de la pâge demandâye s’en rèfère a na pâge de discussion que pôt pas ègzistar.",
+       "title-invalid-characters": "Lo titro de la pâge demandâye contint de caractèros pas justos : « $1 ».",
+       "title-invalid-relative": "Lo titro contint un chemin relatif. Los titros que rèferençont de pâges relatives (./, ../) sont pas justos, seront sovent inaccèssiblos dês los navegators des utilisators.",
+       "title-invalid-magic-tilde": "Lo titro de la pâge demandâye contint na cobla de tildes magicos pas justa (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "Lo titro de la pâge demandâye est trop long. Dêt pas dèpassar $1 octèt{{PLURAL:$1||s}} dens l’encodâjo UTF-8.",
+       "title-invalid-leading-colon": "Lo titro de la pâge demandâye contint un doux-pouents pas justo u comencement.",
+       "perfcached": "Celes balyês-que sont en cacho et pôvont pas étre a jorn. Por lo més {{PLURAL:$1|un rèsultat est disponiblo|$1 rèsultats sont disponiblos}} dedens lo cacho.",
+       "perfcachedts": "Celes balyês-que sont en cacho et sont étâyes betâyes a jorn por lo dèrriér côp lo $1. Por lo més {{PLURAL:$4|un rèsultat est disponiblo|$4 rèsultats sont disponiblos}} dedens lo cacho.",
+       "querypage-no-updates": "Ora les mêses a jorn por cela pâge sont dèsactivâyes.\nLes balyês ique seront pas betâyes a jorn.",
        "viewsource": "Vêre lo tèxto sôrsa",
        "viewsource-title": "Vêre lo tèxto sôrsa de $1",
        "actionthrottled": "Accion limitâye",
-       "actionthrottledtext": "Por combatre lo spame, l’usâjo de cel’accion est limitâ a doux-três côps dens un moment prod côrt. S’acomplét que vos éd dèpassâ ceta limita.\nSe vos plét, tornâd èprovar dens un tôrn.",
-       "protectedpagetext": "Ceta pâge est étâye protègiêe por empachiér son changement ou ben d’ôtres accions.",
-       "viewsourcetext": "Vos pouede vêre et copiyér lo tèxto sôrsa de ceta pâge :",
-       "viewyourtext": "Vos pouede vêre et copiyér lo tèxto sôrsa de '''voutros changements''' a ceta pâge :",
-       "protectedinterface": "Cela pâge-que balye de tèxto d’entèrface por la programeria sur ceti vouiqui et est vêr protègiêe por èvitar los abus.\nPor apondre ou ben changiér des traduccions sur tôs los vouiquis, se vos plét empleyéd [//translatewiki.net/ translatewiki.net], lo projèt de localisacion de MediaWiki.",
-       "editinginterface": "'''Atencion :''' vos éte aprés changiér na pâge empleyêe por fâre lo tèxto d’entèrface de la programeria.\nLos changements sè cognetront sur l’aparence de l’entèrface utilisator por los ôtros utilisators de ceti vouiqui.\nPor apondre ou ben changiér des traduccions sur tôs los vouiquis, se vos plét empleyéd [//translatewiki.net/ translatewiki.net], lo projèt de localisacion de MediaWiki.",
-       "cascadeprotected": "Cela pâge-que est protègiêe, el est entrebetâye dedens {{PLURAL:$1|ceta pâge qu’est étâye protègiêe|cetes pâges que sont étâyes protègiêes}} avouéc lo chouèx « protèccion en cascâda » activâ :\n$2",
-       "namespaceprotected": "Vos éd pas la pèrmission de changiér les pâges de l’èspâço de noms « '''$1''' ».",
+       "actionthrottledtext": "Por combatre los abus, l’usâjo de cel’accion est limitâ a doux-três côps dens un moment prod côrt. S’acomplét que vos éd dèpassâ cela limita.\nSe vos plét, tornâd èprovar dens un tôrn.",
+       "protectedpagetext": "Cela pâge est étâye protègiêe por empachiér son changement ou ben d’ôtres accions.",
+       "viewsourcetext": "Vos pouede vêre et copiyér lo tèxto sôrsa de cela pâge.",
+       "viewyourtext": "Vos pouede vêre et copiyér lo tèxto sôrsa de <strong>voutros changements</strong> a cela pâge.",
+       "protectedinterface": "Cela pâge balye de tèxto d’entèrface por la programeria sur cél vouiqui et est vêr protègiêe por èvitar los abus.\nPor apondre ou ben changiér de traduccions sur tôs los vouiquis, se vos plét empleyéd [//translatewiki.net/ translatewiki.net], lo projèt de localisacion de MediaWiki.",
+       "editinginterface": "<strong>Atencion :</strong> vos éte aprés changiér na pâge empleyêe por fâre lo tèxto d’entèrface de la programeria.\nLos changements sè cognetront sur l’aparence de l’entèrface utilisator por los ôtros utilisators de cél vouiqui.",
+       "translateinterface": "Por apondre changiér de traduccions sur tôs los vouiquis, se vos plét empleyéd [//translatewiki.net/ translatewiki.net], lo projèt de localisacion de MediaWiki.",
+       "cascadeprotected": "Cela pâge est protègiêe contre los changements, el est transcllua per {{PLURAL:$1|cela pâge-que qu’est étâye protègiêe|celes pâges-que que sont étâyes protègiêes}} avouéc lo chouèx « protèccion en cascâda » activâ :\n$2",
+       "namespaceprotected": "Vos éd pas la pèrmission de changiér les pâges de l’èspâço de noms « <strong>$1</strong> ».",
        "customcssprotected": "Vos éd pas la pèrmission de changiér cela pâge CSS, contint la configuracion a sè d’un ôtr’utilisator.",
        "customjsprotected": "Vos éd pas la pèrmission de changiér cela pâge JavaScript, contint la configuracion a sè d’un ôtr’utilisator.",
        "mycustomcssprotected": "Vos éd pas la pèrmission de changiér cela pâge CSS.",
        "mycustomjsprotected": "Vos éd pas la pèrmission de changiér cela pâge JavaScript.",
-       "myprivateinfoprotected": "Vos éd pas la pèrmission de changiér voutres enformacions a .",
+       "myprivateinfoprotected": "Vos éd pas la pèrmission de changiér voutres enformacions a vos.",
        "mypreferencesprotected": "Vos éd pas la pèrmission de changiér voutres prèferences.",
        "ns-specialprotected": "Les pâges spèciâles pôvont pas étre changiêes.",
-       "titleprotected": "Cél titro est étâ protègiê a la crèacion per [[User:$1|$1]].\nLa rêson balyêe est « ''$2'' ».",
-       "filereadonlyerror": "Y at pas moyen de changiér lo fichiér « $1 » perce que lo dèpôt de fichiérs « $2 » est justo en lèctura.\n\nL’administrator que l’at vèrrolyê at balyê cet’èxplicacion : « $3 ».",
+       "titleprotected": "Cél titro est étâ protègiê a la crèacion per [[User:$1|$1]].\nLa rêson balyêe est « <em>$2</em> ».",
+       "filereadonlyerror": "Y at pas moyen de changiér lo fichiér « $1 », lo dèpôt de fichiérs « $2 » est mas qu’en lèctura.\n\nL’administrator sistèmo que l’at cotâ at balyê cel’èxplicacion : « $3 ».",
        "invalidtitle-knownnamespace": "Titro pas justo avouéc l’èspâço de noms « $2 » et lo tèxto « $3 »",
        "invalidtitle-unknownnamespace": "Titro pas justo avouéc lo numerô d’èspâço de noms encognu $1 et lo tèxto « $2 »",
        "exception-nologin": "Pas branchiê",
-       "exception-nologin-text": "Cela pâge cel’accion at fôta d’étre branchiê sur ceti vouiqui.",
-       "virus-badscanner": "Crouye configuracion : scanor de virus encognu : ''$1''",
-       "virus-scanfailed": "Falyita de la rechèrche (code $1)",
+       "exception-nologin-text": "Se vos plét, branchiéd-vos por povêr arrevar a cela pâge cel’accion.",
+       "exception-nologin-text-manual": "Se vos plét, vos vos dête $1 por povêr arrevar a cela pâge cel’accion.",
+       "virus-badscanner": "Crouye configuracion : scanor de virus encognu : <em>$1</em>",
+       "virus-scanfailed": "falyita du scan (code $1)",
        "virus-unknownscanner": "antivirus encognu :",
-       "logouttext": "'''Ora vos éte dèbranchiê{{GENDER:||e|(e)}}.'''\n\nVos pouede continuar a empleyér {{SITENAME}} de façon anonima ou ben <span class='plainlinks'>[$1 vos tornar branchiér]</span> desot lo mémo nom ou un ôtro.\nNotâd qu’y at des pâges que pôvont étre oncor fêtes vêre coment se vos érâd adés branchiê{{GENDER:||e|(e)}}, tant que vos èfaciéd lo cacho de voutron navigator.",
-       "welcomeuser": "Benvegnua, $1 !",
-       "welcomecreation-msg": "Voutron compto est étâ fêt.\nOubliâd pas de changiér voutres [[Special:Preferences|prèferences dessus {{SITENAME}}]].",
+       "logouttext": "<strong>Ora vos éte dèbranchiê{{GENDER:||e}}.</strong>\n\nNotâd qu’y at de pâges que pôvont étre oncor fêtes vêre coment se vos érâd adés branchiê{{GENDER:||e}}, tant que vos vouedâd lo cacho de voutron navegator.",
+       "cannotlogoutnow-title": "Ora y at pas moyen de sè dèbranchiér",
+       "cannotlogoutnow-text": "Lo dèbranchement est pas possiblo en empleyent $1.",
+       "welcomeuser": "Benvegnua, $1&nbsp;!",
+       "welcomecreation-msg": "Voutron comptio est étâ fêt.\nVos pouede changiér voutres [[Special:Preferences|prèferences]] por {{SITENAME}} se vos o voléd.",
        "yourname": "Nom d’utilisator :",
        "userlogin-yourname": "Nom d’utilisator",
        "userlogin-yourname-ph": "Buchiéd voutron nom d’utilisator",
        "yourpasswordagain": "Confirmâd lo contresegno :",
        "createacct-yourpasswordagain": "Confirmâd lo contresegno",
        "createacct-yourpasswordagain-ph": "Tornâd buchiér lo contresegno",
-       "remembermypassword": "Sè rapelar de mon contresegno sur ceti navigator (por lo més $1 jorn{{PLURAL:$1||s}})",
-       "userlogin-remembermypassword": "Gouardar ma sèance activa",
+       "remembermypassword": "Sè rapelar de mon contresegno sur cél navegator (por lo més $1 jorn{{PLURAL:$1||s}})",
+       "userlogin-remembermypassword": "Gouardar ma sèssion activa",
        "userlogin-signwithsecure": "Empleyér un branchement sècurisâ",
+       "cannotloginnow-title": "Ora y at pas moyen de sè branchiér",
+       "cannotloginnow-text": "Lo branchement est pas possiblo en empleyent $1.",
        "yourdomainname": "Voutron domêno :",
-       "password-change-forbidden": "Vos pouede pas changiér los contresegnos sur ceti vouiqui.",
-       "externaldberror": "Ou ben na fôta est arrevâye avouéc la bâsa de balyês d’ôtentificacion de defôr ou ben vos éte pas ôtorisâ{{GENDER:||ye|(ye)}} a betar a jorn voutron compto de defôr.",
+       "password-change-forbidden": "Vos pouede pas changiér los contresegnos sur cél vouiqui.",
+       "externaldberror": "Ou ben na fôta est arrevâye avouéc la bâsa de balyês d’ôtentificacion de defôr ou ben vos éte pas ôtorisâ{{GENDER:||ye}} a betar a jorn voutron comptio de defôr.",
        "login": "Branchement",
-       "nav-login-createaccount": "Sè branchiér / fâre un compto",
-       "userlogin": "Sè branchiér / fâre un compto",
+       "nav-login-createaccount": "Sè branchiér ou ben fâre un comptio",
+       "userlogin": "Sè branchiér ou ben fâre un comptio",
        "userloginnocreate": "Sè branchiér",
        "logout": "Sè dèbranchiér",
        "userlogout": "Dèbranchement",
        "notloggedin": "Pas branchiê",
-       "userlogin-noaccount": "Vos éd p’oncor un compto ?",
+       "userlogin-noaccount": "Vos éd p’oncor un comptio ?",
        "userlogin-joinproject": "Rejuegnéd {{SITENAME}}",
-       "nologin": "Vos éd p’oncor un compto ? '''$1.'''",
-       "nologinlink": "Féte un compto",
-       "createaccount": "Fâre un compto",
-       "gotaccount": "Vos éd ja un compto ? '''$1.'''",
+       "nologin": "Vos éd p’oncor un comptio ? $1.",
+       "nologinlink": "Féte un comptio",
+       "createaccount": "Fâre un comptio",
+       "gotaccount": "Vos éd ja un comptio ? $1.",
        "gotaccountlink": "Branchiéd-vos",
        "userlogin-resetlink": "Vos éd oubliâ voutros dètalys de branchement ?",
-       "userlogin-resetpassword-link": "Rebetar a zérô lo contresegno",
+       "userlogin-resetpassword-link": "Contresegno oubliâ ?",
+       "userlogin-helplink2": "Éde u branchement",
+       "userlogin-loggedin": "Vos éte ja branchiê{{GENDER:$1||e}} coment {{GENDER:$1|$1}}.\nEmpleyéd lo formulèro ce-desot por vos branchiér coment un ôtr’utilisator.",
+       "userlogin-createanother": "Fâre un ôtro comptio",
        "createacct-emailrequired": "Adrèce èlèctronica",
        "createacct-emailoptional": "Adrèce èlèctronica (u chouèx)",
        "createacct-email-ph": "Buchiéd voutron adrèce èlèctronica",
        "createacct-another-email-ph": "Buchiéd l’adrèce èlèctronica",
-       "createaccountmail": "Empleyér un contresegno temporèro fêt per hasârd et lo mandar a l’adrèce èlèctronica spècifiâye ce-desot",
+       "createaccountmail": "Empleyér un contresegno temporèro pas de sûr et lo mandar a l’adrèce èlèctronica spècifiâye",
        "createacct-realname": "Veré nom (u chouèx)",
        "createaccountreason": "Rêson :",
        "createacct-reason": "Rêson",
-       "createacct-reason-ph": "Porquè féte-vos un ôtro compto",
-       "createacct-captcha": "Contrôlo de sècuritât",
-       "createacct-imgcaptcha-ph": "Buchiéd lo tèxto que vos vêde ce-dessus",
-       "createacct-submit": "Féte voutron compto",
-       "createacct-another-submit": "Féte un ôtro compto",
+       "createacct-reason-ph": "Porquè vos féte un ôtro comptio",
+       "createacct-submit": "Féte voutron comptio",
+       "createacct-another-submit": "Fâre un comptio",
        "createacct-benefit-heading": "{{SITENAME}} est ècrit per des coment vos.",
        "createacct-benefit-body1": "changement{{PLURAL:$1||s}}",
        "createacct-benefit-body2": "pâge{{PLURAL:$1||s}}",
        "createacct-benefit-body3": "{{PLURAL:$1|novél contributor|novéls contributors}}",
        "badretype": "Los contresegnos que vos éd buchiês sont pas pariérs.",
+       "usernameinprogress": "Na crèacion de comptio por cél nom d’utilisator est ja en cors.\nSe vos plét, portâd pacience.",
        "userexists": "Lo nom d’utilisator buchiê est ja empleyê.\nSe vos plét, chouèsésséd-nen un ôtro.",
        "loginerror": "Fôta de branchement",
-       "createacct-error": "Fôta pendent la crèacion du compto",
-       "createaccounterror": "Y at pas moyen de fâre lo compto : $1",
-       "nocookiesnew": "Lo compto utilisator est étâ fêt, mas vos éte pas branchiê{{GENDER:||e|(e)}}.\n{{SITENAME}} emplèye des tèmouens (''cookies'') por lo branchement mas vos los éd dèsactivâs.\nSe vos plét, activâd-los et pués tornâd-vos branchiér avouéc voutron novél nom d’utilisator et voutron contresegno.",
-       "nocookieslogin": "{{SITENAME}} emplèye des tèmouens (''cookies'') por lo branchement mas vos los éd dèsactivâs.\nSe vos plét, activâd-los et pués tornâd èprovar.",
-       "nocookiesfornew": "Lo compto utilisator est pas étâ fêt, nos ens pas possu confirmar la sina sôrsa.\nControlâd que vos éd activâ los tèmouens (''cookies''), rechargiéd la pâge et pués tornâd èprovar.",
+       "createacct-error": "Fôta pendent la crèacion du comptio",
+       "createaccounterror": "Y at pas moyen de fâre lo comptio : $1",
+       "nocookiesnew": "Lo comptio utilisator est étâ fêt, mas vos éte pas branchiê{{GENDER:||e}}.\n{{SITENAME}} emplèye de raportiors (<em>cookies</em>) por lo branchement mas vos los éd dèsactivâs.\nSe vos plét, activâd-los et pués tornâd-vos branchiér avouéc voutron novél nom d’utilisator et voutron contresegno.",
+       "nocookieslogin": "{{SITENAME}} emplèye de raportiors (<em>cookies</em>) por lo branchement mas vos los éd dèsactivâs.\nSe vos plét, activâd-los et pués tornâd èprovar.",
+       "nocookiesfornew": "Lo comptio utilisator est pas étâ fêt, nos ens pas possu confirmar son origina.\nControlâd que vos éd activâ los raportiors (<em>cookies</em>), rechargiéd la pâge et pués tornâd èprovar.",
        "noname": "Vos éd pas spècifiâ un nom d’utilisator justo.",
-       "loginsuccesstitle": "Branchement reussi",
-       "loginsuccess": "'''Ora vos éte branchiê{{GENDER:||e|(e)}} a {{SITENAME}} por « $1 ».'''",
-       "nosuchuser": "L’utilisator « $1 » ègziste pas.\nLos noms d’utilisator sont sensiblos a la câssa.\nControlâd l’ortografia ou ben [[Special:UserLogin/signup|féte un compto novél]].",
-       "nosuchusershort": "Y at pas un utilisator avouéc lo nom « $1 ».\nSe vos plét, controlâd l’ortografia.",
+       "loginsuccesstitle": "Branchiê(e)",
+       "loginsuccess": "<strong>Ora vos éte branchiê{{GENDER:$1||e}} a {{SITENAME}} coment « $1 ».</strong>",
+       "nosuchuser": "Y at gins d’utilisator avouéc lo nom « $1 ».\nLos noms d’utilisator sont sensiblos a la câssa.\nSe vos plét, controlâd l’ortografia ou ben [[Special:UserLogin/signup|féte un comptio novél]].",
+       "nosuchusershort": "Y at gins d’utilisator avouéc lo nom « $1 ».\nSe vos plét, controlâd l’ortografia.",
        "nouserspecified": "Vos dête spècifiar un nom d’utilisator.",
-       "login-userblocked": "Cet’utilisator est blocâ. Branchement pas ôtorisâ.",
+       "login-userblocked": "Cél utilisator est blocâ. Branchement pas ôtorisâ.",
        "wrongpassword": "Lo contresegno buchiê est fôx.\nSe vos plét, tornâd èprovar.",
-       "wrongpasswordempty": "Vos éd pas buchiê de contresegno.\nSe vos plét, tornâd èprovar.",
+       "wrongpasswordempty": "Lo contresegno buchiê ére vouedo.\nSe vos plét, tornâd èprovar.",
        "passwordtooshort": "Voutron contresegno dêt contegnir por lo muens $1 caractèro{{PLURAL:$1||s}}.",
+       "passwordtoolong": "Los contresegnos pôvont pas dèpassar {{PLURAL:$1|1 caractèro|$1 caractèros}}.",
+       "passwordtoopopular": "Los contresegnos trop corents pôvont pas étre empleyês. Se vos plét, chouèsésséd-nen yon ples originâl.",
        "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": "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\nnovél por {{SITENAME}} ($4). Un contresegno temporèro est étâ fêt por\nl’utilisator « $2 » et est « $3 ». S’o ére voutron entencion, vos vos devréd\nbranchiér et pués chouèsir un contresegno novél.\nVoutron contresegno temporèro èxpirerat dens {{PLURAL:$5|un jorn|$5 jorns}}.\n\nSe cela demanda vint pas de vos ou ben que vos vos éte rapelâ\nde voutron contresegno et que vos souhètâd pas més lo changiér, vos\npouede ignorar ceti mèssâjo et continuar a empleyér voutron viely contresegno.",
+       "passwordremindertext": "Yon (de sûr vos, avouéc l’adrèce IP $1) at demandâ un contresegno\nnovél por {{SITENAME}} ($4). Un contresegno temporèro est étâ fêt por\nl’utilisator « $2 » et est « $3 ». S’o ére voutron entencion, vos vos devréd\nbranchiér et pués chouèsir un contresegno novél.\nVoutron contresegno temporèro èxpirerat dens {{PLURAL:$5|un jorn|$5 jorns}}.\n\nSe cela demanda vint pas de vos ou ben se vos vos éte rapelâ\nde voutron contresegno et que vos en voléd pas més changiér, vos\npouede ignorar cél mèssâjo et continuar a empleyér voutron viely contresegno.",
        "noemail": "Nion’adrèce èlèctronica est étâye encartâye por l’utilisator « $1 ».",
-       "noemailcreate": "Vos dête balyér un’adrèce èlèctronica justa",
+       "noemailcreate": "Vos dête balyér un’adrèce èlèctronica justa.",
        "passwordsent": "Un contresegno novél est étâ mandâ a l’adrèce èlèctronica de l’utilisator « $1 ».\nSe vos plét, tornâd-vos branchiér aprés l’avêr reçu.",
        "blocked-mailpassword": "Voutron adrèce IP est blocâye en ècritura, la fonccion de sovegnence du contresegno est vêr dèsactivâye por èvitar los abus.",
-       "eauthentsent": "Un mèssâjo de confirmacion est étâ mandâ a l’adrèce èlèctronica endicâye.\nDevant qu’un ôtro mèssâjo seye mandâ a ceti compto, vos devréd siuvre les enstruccions du mèssâjo et pués confirmar que lo compto est franc lo voutro.",
+       "eauthentsent": "Un mèssâjo de confirmacion est étâ mandâ a l’adrèce èlèctronica spècifiâye.\nDevant qu’un ôtro mèssâjo seye mandâ a cél comptio, vos devréd siuvre les enstruccions du mèssâjo et pués confirmar que lo comptio est franc lo voutro.",
        "throttled-mailpassword": "Un mèssâjo de remês’a zérô de voutron contresegno est ja étâ mandâ pendent {{PLURAL:$1|l’hora passâye|les $1 hores passâyes}}.\nPor èvitar los abus, ren que yon serat mandâ per {{PLURAL:$1|hora|entèrvalo de $1 hores}}.",
        "mailerror": "Fôta pendent l’èxpèdicion du mèssâjo : $1",
-       "acct_creation_throttle_hit": "Des visitors de cél vouiqui-que qu’emplèyont voutron adrèce IP ant fêt $1 compto{{PLURAL:$1||s}} pendent lo jorn passâ, cen qu’est lo més ôtorisâ dens ceti temps.\nDu côp los visitors qu’emplèyont cel’adrèce IP pôvont fâre gins de compto por lo moment.",
-       "emailauthenticated": "Voutron adrèce èlèctronica est étâye ôtentifiâye lo $2 a $3.",
-       "emailnotauthenticated": "Voutron adrèce èlèctronica est p’oncor ôtentifiâye.\nNion mèssâjo serat mandâ por châcuna de cetes fonccionalitâts.",
-       "noemailprefs": "Spècifiâd un’adrèce èlèctronica dens voutres prèferences por empleyér cetes fonccionalitâts.",
+       "acct_creation_throttle_hit": "Des vesitors de cél vouiqui qu’emplèyont voutron adrèce IP ant fêt $1 comptio{{PLURAL:$1||s}} pendent lo jorn passâ, cen qu’est lo més ôtorisâ dens ceti temps.\nDu côp los vesitors qu’emplèyont cel’adrèce IP pôvont fâre gins de comptio por lo moment.",
+       "emailauthenticated": "Voutron adrèce èlèctronica est étâye confirmâye lo $2 a $3.",
+       "emailnotauthenticated": "Voutron adrèce èlèctronica est p’oncor confirmâye.\nNion mèssâjo serat mandâ por châcuna de celes fonccionalitâts-que.",
+       "noemailprefs": "Spècifiâd un’adrèce èlèctronica dens voutres prèferences por empleyér celes fonccionalitâts.",
        "emailconfirmlink": "Confirmâd voutron adrèce èlèctronica",
-       "invalidemailaddress": "Cet’adrèce èlèctronica pôt pas étre accèptâye, semble avêr un format pas justo.\nSe vos plét, buchiéd un’adrèce bien formatâye ou ben lèssiéd cél champ vouedo.",
-       "cannotchangeemail": "Les adrèces èlèctroniques des comptos pôvont pas étre changiêes sur ceti vouiqui.",
-       "emaildisabled": "Ceti seto pôt pas mandar des mèssâjos.",
-       "accountcreated": "Compto fêt",
-       "accountcreatedtext": "Lo compto utilisator por [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|discussion]]) est étâ fêt.",
-       "createaccount-title": "Crèacion d’un compto por {{SITENAME}}",
-       "createaccount-text": "Yon at fêt un compto por voutron adrèce èlèctronica dessus {{SITENAME}} ($4) apelâ « $2 », avouéc lo contresegno « $3 ».\nVos vos devriâd branchiér et pués changiér dês ora voutron contresegno.\n\nIgnorâd ceti mèssâjo se cél compto est étâ fêt per fôta.",
-       "login-throttled": "Dês pou vos éd èprovâ un mouél de branchements.\nSe vos plét, atende devant que tornar èprovar.",
-       "login-abort-generic": "Voutra tentativa de branchement at pas reussi - Anulâye",
+       "invalidemailaddress": "Cel’adrèce èlèctronica pôt pas étre accèptâye, semble avêr un format pas justo.\nSe vos plét, buchiéd un’adrèce ben formatâye ou ben lèssiéd cél champ vouedo.",
+       "cannotchangeemail": "Les adrèces èlèctroniques des comptios pôvont pas étre changiêes sur cél vouiqui.",
+       "emaildisabled": "Cél seto pôt pas mandar de mèssâjos.",
+       "accountcreated": "Comptio fêt",
+       "accountcreatedtext": "Lo comptio utilisator por [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|discussion]]) est étâ fêt.",
+       "createaccount-title": "Crèacion d’un comptio por {{SITENAME}}",
+       "createaccount-text": "Yon at fêt un comptio por voutron adrèce èlèctronica dessus {{SITENAME}} ($4) apelâ « $2 », avouéc lo contresegno « $3 ».\nVos vos devriâd branchiér et pués changiér dês ora voutron contresegno.\n\nIgnorâd cél mèssâjo se cél comptio est étâ fêt per fôta.",
+       "login-throttled": "Dês pou vos éd èprovâ un mouél de branchements.\nSe vos plét, atende-vos $1 devant que tornar èprovar.",
+       "login-abort-generic": "Voutron branchement at pas reussi - Anulâ",
+       "login-migrated-generic": "Voutron comptio est étâ migrâ, et pués voutron nom d’utilisator ègziste pas més sur cél vouiqui.",
        "loginlanguagelabel": "Lengoua : $1",
-       "suspicious-userlogout": "Voutra demanda de dèbranchement est étâye refusâye, semble qu’el est étâye mandâye per un navigator câsso ou ben la mêsa en cacho d’un proxi.",
+       "suspicious-userlogout": "Voutra demanda de dèbranchement est étâye refusâye, semble qu’el est étâye mandâye per un navegator câsso ou ben la mêsa en cacho d’un sèrvior mandatèro (<em>proxy</em>).",
+       "createacct-another-realname-tip": "Lo veré nom est u chouèx.\nSe vos dècidâd de lo balyér, serat empleyê por atribuar a l’utilisator ses ôvres.",
        "pt-login": "Sè branchiér",
        "pt-login-button": "Sè branchiér",
-       "pt-createaccount": "Fâre un compto",
+       "pt-createaccount": "Fâre un comptio",
        "pt-userlogout": "Sè dèbranchiér",
-       "php-mail-error-unknown": "Fôta encognua dens la fonccion mail() de PHP.",
+       "php-mail-error-unknown": "Fôta encognua dedens la fonccion mail() de PHP.",
        "user-mail-no-addy": "Èprôva de mandar un mèssâjo sen adrèce èlèctronica.",
        "user-mail-no-body": "Èprôva de mandar un mèssâjo avouéc un côrp vouedo ou ben dèrêsonâblament côrt.",
        "changepassword": "Changiér lo contresegno",
-       "resetpass_announce": "Vos vos éte branchiê{{GENDER:||e|(e)}} avouéc un contresegno temporèro mandâ per mèssageria èlèctronica.\nPor chavonar lo branchement, vos dête buchiér un contresegno novél ique :",
+       "resetpass_announce": "Por chavonar lo branchement, vos dête dèfenir un contresegno novél.",
        "resetpass_text": "<!-- Apondéd lo tèxto ique -->",
-       "resetpass_header": "Changiér lo contresegno du compto",
+       "resetpass_header": "Changiér lo contresegno du comptio",
        "oldpassword": "Viely contresegno :",
        "newpassword": "Contresegno novél :",
        "retypenew": "Confirmar lo contresegno novél :",
        "resetpass_submit": "Changiér lo contresegno et pués sè branchiér",
-       "changepassword-success": "Voutron contresegno est étâ changiê avouéc reusséta !\nBranchement en côrs...",
+       "changepassword-success": "Voutron contresegno est étâ changiê !",
+       "changepassword-throttled": "Dês pou vos éd èprovâ un mouél de branchements.\nSe vos plét, atende-vos $1 devant que tornar èprovar.",
+       "botpasswords": "Contresegnos de robots",
+       "botpasswords-summary": "<em>Contresegnos de robots</em> pèrmèt d’arrevar a un comptio utilisator avouéc l’API sen empleyér los identifients de branchement principâls. Los drêts d’utilisator disponiblos en étent branchiê avouéc un contresegno de robot pôvont étre rèduits.\n\nSe vos vêde pas porquè vos vodriâd cen fâre, o est que vos en éd pas fôta. Nion vos devrêt jamés demandar de nen fâre yon et pués de lo y balyér.",
+       "botpasswords-disabled": "Los contresegnos de robots sont dèsactivâs.",
+       "botpasswords-no-central-id": "Por empleyér los contresegnos de robots, vos dête étre branchiê a un comptio centralisâ.",
+       "botpasswords-existing": "Contresegnos de robots ègzistents",
+       "botpasswords-createnew": "Fâre un contresegno de robot novél",
+       "botpasswords-editexisting": "Changiér un contresegno de robot ègzistent",
+       "botpasswords-label-appid": "Nom du robot :",
+       "botpasswords-label-create": "Fâre",
+       "botpasswords-label-update": "Betar a jorn",
+       "botpasswords-label-cancel": "Anular",
+       "botpasswords-label-delete": "Suprimar",
+       "botpasswords-label-resetpassword": "Rebetar a zérô lo contresegno",
+       "botpasswords-label-grants": "Drêts aplicâblos :",
+       "botpasswords-help-grants": "Châque drêt balye accès ux drêts d’utilisator listâs qu’at ja un comptio. Vêde la [[Special:ListGrants|grelye des drêts]] por més d’enformacions.",
+       "botpasswords-label-restrictions": "Rèstriccions d’usâjo :",
+       "botpasswords-label-grants-column": "Acordâ",
+       "botpasswords-bad-appid": "Lo nom de robot « $1 » est pas justo.",
+       "botpasswords-insert-failed": "Falyita de l’aponsa du nom de robot « $1 ». Est-o qu’il est ja étâ apondu ?",
+       "botpasswords-update-failed": "Falyita a la mês’a jorn du nom de robot « $1 ». Est-o qu’il est ja étâ suprimâ ?",
+       "botpasswords-created-title": "Contresegno de robot fêt",
+       "botpasswords-created-body": "Lo contresegno de robot por lo nom de robot « $1 » a l’utilisator « $2 » est étâ fêt.",
+       "botpasswords-updated-title": "Contresegno de robot betâ a jorn",
+       "botpasswords-updated-body": "Lo contresegno de robot por lo nom de robot « $1 » a l’utilisator « $2 » est étâ betâ a jorn.",
+       "botpasswords-deleted-title": "Contresegno de robot suprimâ",
+       "botpasswords-deleted-body": "Lo contresegno de robot por lo nom de robot « $1 » a l’utilisator « $2 » est étâ suprimâ.",
+       "botpasswords-newpassword": "Lo contresegno novél por sè branchiér avouéc <strong>$1</strong> est <strong>$2</strong>. <em>Se vos plét, encartâd-lo por y fâre rèference ples târd.</em>",
+       "botpasswords-no-provider": "BotPasswordsSessionProvider est pas disponiblo.",
+       "botpasswords-restriction-failed": "Les rèstriccions de contresegno de robot empachont cél branchement.",
+       "botpasswords-invalid-name": "Lo nom d’utilisator spècifiâ contint gins de sèparator de contresegno de robot (« $1 »).",
+       "botpasswords-not-exist": "L’utilisator « $1 » at gins de contresegno de robot apelâ « $2 ».",
        "resetpass_forbidden": "Los contresegnos pôvont pas étre changiês",
        "resetpass-no-info": "Vos dête étre branchiê por arrevar tot drêt a cela pâge.",
        "resetpass-submit-loggedin": "Changiér lo contresegno",
        "resetpass-submit-cancel": "Anular",
-       "resetpass-wrong-oldpass": "Contresegno temporèro ou ben d’ora pas justo.\nPôt-étre vos éd ja changiê voutron contresegno avouéc reusséta ou ben demandâ un contresegno temporèro novél.",
+       "resetpass-wrong-oldpass": "Contresegno temporèro ou ben d’ora pas justo.\nPôt-étre vos éd ja changiê voutron contresegno ou ben demandâ un contresegno temporèro novél.",
+       "resetpass-recycled": "Se vos plét, rebetâd voutron contresegno a quârque-ren d’ôtro que celi d’ora.",
+       "resetpass-temp-emailed": "Vos éte branchiê{{GENDER:||e}} avouéc un code temporèro mandâ per mèssageria èlèctronica.\nPor chavonar lo branchement, vos dête dèfenir un contresegno novél ique :",
        "resetpass-temp-password": "Contresegno temporèro :",
        "resetpass-abort-generic": "Lo changement du contresegno est étâ anulâ per un’èxtension.",
+       "resetpass-expired": "Voutron contresegno at èxpirâ. Se vos plét, dèfenésséd-nen un novél por vos branchiér.",
+       "resetpass-expired-soft": "Voutron contresegno at èxpirâ et dêt étre rebetâ a zérô. Se vos plét, chouèsésséd-nen un novél ora ou ben cllicâd dessus « {{int:resetpass-submit-cancel}} » por o fâre ples târd.",
+       "resetpass-validity-soft": "Voutron contresegno est pas justo : $1\n\nSe vos plét, chouèsésséd-nen un novél ora ou ben cllicâd dessus « {{int:resetpass-submit-cancel}} » por o fâre ples târd.",
        "passwordreset": "Remês’a zérô du contresegno",
-       "passwordreset-text-one": "Rempléd ceti formulèro por rebetar a zérô voutron contresegno.",
-       "passwordreset-text-many": "{{PLURAL:$1|Rempléd yon des champs por rebetar a zérô voutron contresegno.}}",
-       "passwordreset-disabled": "La remês’a zérô des contresegnos est étâye dèsactivâye sur ceti vouiqui.",
-       "passwordreset-emaildisabled": "Les fonccionalitâts de mèssageria èlèctronica sont étâyes dèsactivâyes sur ceti vouiqui.",
+       "passwordreset-text-one": "Empléd cél formulèro por recêvre un contresegno temporèro per mèssageria èlèctronica.",
+       "passwordreset-text-many": "{{PLURAL:$1|Empléd yon des champs por recêvre un contresegno temporèro per mèssageria èlèctronica.}}",
+       "passwordreset-disabled": "La remês’a zérô des contresegnos est étâye dèsactivâye sur cél vouiqui.",
+       "passwordreset-emaildisabled": "Les fonccionalitâts de mèssageria èlèctronica sont étâyes dèsactivâyes sur cél vouiqui.",
        "passwordreset-username": "Nom d’utilisator :",
        "passwordreset-domain": "Domêno :",
-       "passwordreset-capture": "Est-o que vos voléd vêre lo mèssâjo que rèsulte ?",
+       "passwordreset-capture": "Vos voléd vêre lo mèssâjo rèsultent ?",
        "passwordreset-capture-help": "Se vos pouentâd cela câsa, lo mèssâjo (avouéc lo contresegno temporèro) vos serat montrâ quand serat mandâ a l’utilisator.",
        "passwordreset-email": "Adrèce èlèctronica :",
-       "passwordreset-emailtitle": "Dètalys du compto dessus {{SITENAME}}",
-       "passwordreset-emailtext-ip": "Yon (probâblament vos, dês l’adrèce IP $1) at demandâ na remês’a zérô de voutron\ncontresegno por {{SITENAME}} ($4). {{PLURAL:$3|Ceti compto utilisator est associyê|Cetos comptos utilisators sont associyês}}\na cel’adrèce èlèctronica :\n\n$2\n\n{{PLURAL:$3|Cél contresegno temporèro èxpirerat|Celos contresegnos temporèros èxpireront}} dens {{PLURAL:$5|un jorn|$5 jorns}}.\nOra vos vos dête branchiér et pués chouèsir un contresegno novél. Se cela demanda vint pas de vos\nou ben que vos vos éte rapelâ de voutron contresegno originâl et que vos souhètâd pas més lo changiér,\nvos pouede ignorar ceti mèssâjo et continuar a empleyér voutron viely contresegno.",
-       "passwordreset-emailtext-user": "L’utilisator $1 dessus {{SITENAME}} at demandâ na remês’a zérô de voutron contresegno por {{SITENAME}}\n($4). {{PLURAL:$3|Ceti compto utilisator est associyê|Cetos comptos utilisators sont associyês}}\na cel’adrèce èlèctronica :\n\n$2\n\n{{PLURAL:$3|Cél contresegno temporèro èxpirerat|Celos contresegnos temporèros èxpireront}} dens {{PLURAL:$5|un jorn|$5 jorns}}.\nOra vos vos dête branchiér et pués chouèsir un contresegno novél. Se cela demanda vint pas de vos\nou ben que vos vos éte rapelâ de voutron contresegno originâl et que vos souhètâd pas més lo changiér,\nvos pouede ignorar ceti mèssâjo et continuar a empleyér voutron viely contresegno.",
-       "passwordreset-emailelement": "Nom d’utilisator : \n$1\n\nContresegno temporèro : \n$2",
-       "passwordreset-emailsent": "Un mèssâjo de remês’a zérô de contresegno est étâ mandâ.",
-       "passwordreset-emailsent-capture": "Un mèssâjo de remês’a zérô de contresegno est étâ mandâ, qu’est montrâ ce-desot.",
-       "passwordreset-emailerror-capture": "Un mèssâjo de remês’a zérô de contresegno est étâ fêt, qu’est montrâ ce-desot, mas l’èxpèdicion a l’utilisat{{GENDER:$2|or|rice}} at pas reussi : $1",
-       "changeemail": "Changiér l’adrèce èlèctronica",
-       "changeemail-header": "Changiér l’adrèce èlèctronica du compto",
+       "passwordreset-emailtitle": "Dètalys du comptio dessus {{SITENAME}}",
+       "passwordreset-emailtext-ip": "Yon (de sûr vos, avouéc l’adrèce IP $1) at demandâ na remês’a zérô de voutron\ncontresegno por {{SITENAME}} ($4). {{PLURAL:$3|Cél comptio utilisator-que est associyê|Celos comptios utilisators-que sont associyês}}\na cel’adrèce èlèctronica :\n\n$2\n\n{{PLURAL:$3|Cél contresegno temporèro èxpirerat|Celos contresegnos temporèros èxpireront}} dens {{PLURAL:$5|un jorn|$5 jorns}}.\nOra vos vos dête branchiér et pués chouèsir un contresegno novél. Se cela demanda vint pas de vos\nou ben se vos vos éte rapelâ de voutron contresegno originâl et que vos en voléd pas més changiér,\nvos pouede ignorar cél mèssâjo et continuar a empleyér voutron viely contresegno.",
+       "passwordreset-emailtext-user": "L’utilisator $1 dessus {{SITENAME}} at demandâ na remês’a zérô de voutron contresegno por {{SITENAME}}\n($4). {{PLURAL:$3|Cél comptio utilisator-que est associyê|Celos comptios utilisators-que sont associyês}}\na cel’adrèce èlèctronica :\n\n$2\n\n{{PLURAL:$3|Cél contresegno temporèro èxpirerat|Celos contresegnos temporèros èxpireront}} dens {{PLURAL:$5|un jorn|$5 jorns}}.\nOra vos vos dête branchiér et pués chouèsir un contresegno novél. Se cela demanda vint pas de vos\nou ben se vos vos éte rapelâ de voutron contresegno originâl et que vos en voléd pas més changiér,\nvos pouede ignorar cél mèssâjo et continuar a empleyér voutron viely contresegno.",
+       "passwordreset-emailelement": "Nom d’utilisator :\n$1\n\nContresegno temporèro :\n$2",
+       "passwordreset-emailsentemail": "Se cel’adrèce èlèctronica est associyêe a voutron comptio, adonc un mèssâjo de remês’a zérô de contresegno serat mandâ.",
+       "passwordreset-emailsentusername": "S’y at un’adrèce èlèctronica associyêe a cél nom d’utilisator, adonc un mèssâjo de remês’a zérô de contresegno serat mandâ.",
+       "passwordreset-emailsent-capture": "Un mèssâjo de remês’a zérô de contresegno est étâ mandâ, qu’il est montrâ ce-desot.",
+       "passwordreset-emailerror-capture": "Un mèssâjo de remês’a zérô de contresegno est étâ fêt, qu’il est montrâ ce-desot, mas l’èxpèdicion a l’utilisat{{GENDER:$2|or|rice}} at pas reussi : $1",
+       "changeemail": "Changiér enlevar l’adrèce èlèctronica",
+       "changeemail-header": "Complètâd cél formulèro por changiér voutron adrèce èlèctronica. Se vos voléd enlevar l’associacion d’un’adrèce èlèctronica avouéc voutron comptio, lèssiéd la novèl’adrèce èlèctronica voueda pendent la somission du formulèro.",
+       "changeemail-passwordrequired": "Vos devréd buchiér voutron contresegno por confirmar cél changement.",
        "changeemail-no-info": "Vos dête étre branchiê por arrevar tot drêt a cela pâge.",
        "changeemail-oldemail": "Adrèce èlèctronica d’ora :",
        "changeemail-newemail": "Novèl’adrèce èlèctronica :",
+       "changeemail-newemail-help": "Lèssiéd cél champ vouedo se vos voléd enlevar voutron adrèce èlèctronica. Sen adrèce èlèctronica rensègnêe, vos porréd pas més rebetar a zérô voutron contresegno en câs d’oubli ni recêvre de mèssâjos dês cél vouiqui.",
        "changeemail-none": "(pas yona)",
        "changeemail-password": "Voutron contresegno dessus {{SITENAME}} :",
        "changeemail-submit": "Changiér l’adrèce èlèctronica",
-       "bold_sample": "Tèxto grâs",
-       "bold_tip": "Tèxto grâs",
+       "changeemail-throttled": "Vos éd èprovâ un mouél de branchements.\nSe vos plét, atende-vos $1 devant que tornar èprovar.",
+       "changeemail-nochange": "Se vos plét, buchiéd na novèl’adrèce èlèctronica difèrenta.",
+       "resettokens": "Rebetar a zérô los jetons",
+       "resettokens-text": "Ique, vos pouede rebetar a zérô los jetons que pèrmètont d’arrevar a quârques balyês privâyes associyêes a voutron comptio.\n\nVos o devriâd fâre se vos los éd partagiês per accident avouéc yon ou ben se voutron comptio est étâ comprometu.",
+       "resettokens-no-tokens": "Y at gins de jeton a rebetar a zérô.",
+       "resettokens-tokens": "Jetons :",
+       "resettokens-token-label": "$1 (valor d’ora : $2)",
+       "resettokens-watchlist-token": "Jeton por lo flux (Atom/RSS) Vouèbe de [[Special:Watchlist|changements de pâges de voutra lista de gouârda]]",
+       "resettokens-done": "Jetons rebetâs a zérô.",
+       "resettokens-resetbutton": "Rebetar los jetons chouèsis",
+       "bold_sample": "Grôs tèxto",
+       "bold_tip": "Grôs tèxto",
        "italic_sample": "Tèxto étalico",
        "italic_tip": "Tèxto étalico",
        "link_sample": "Titro du lim",
        "image_sample": "Ègzemplo.jpg",
        "image_tip": "Fichiér apondu",
        "media_sample": "Ègzemplo.ogg",
-       "media_tip": "Lim de vers un fichiér",
+       "media_tip": "Lim de vers un fichiér multimèdiâ",
        "sig_tip": "Voutra signatura avouéc l’horodatâjo",
        "hr_tip": "Legne plana (pas nen abusar)",
        "summary": "Rèsumâ :",
-       "subject": "Chousa / titro :",
+       "subject": "Chousa :",
        "minoredit": "O est un petiôt changement",
-       "watchthis": "Siuvre ceta pâge",
+       "watchthis": "Siuvre cela pâge",
        "savearticle": "Encartar la pâge",
        "preview": "Apèrçu",
        "showpreview": "Montrar un apèrçu",
        "showdiff": "Montrar los changements",
-       "anoneditwarning": "'''Atencion :''' vos éte pas branchiê(e).\nVoutron adrèce IP serat encartâye dedens l’historico des changements de ceta pâge.",
-       "anonpreviewwarning": "''Vos éte pas branchiê(e). Sôvar encarterat voutron adrèce IP dedens l’historico des changements de ceta pâge.''",
-       "missingsummary": "'''Sovegnence :''' vos éd balyê gins de rèsumâ de changement.\nSe vos tornâd clicar sur lo boton « {{int:savearticle}} », voutron changement serat encartâ sen rèsumâ.",
+       "blankarticle": "<strong>Atencion :</strong> la pâge que vos éte aprés fâre est voueda.\nSe vos tornâd cllicar dessus « {{int:savearticle}} », la pâge serat fêta sen gins de contegnu.",
+       "anoneditwarning": "<strong>Atencion :</strong> vos éte pas branchiê. Voutron adrèce IP serat visibla devant tot lo mondo se vos féte de changements. Se vos vos <strong>[$1 branchiéd]</strong> ou ben <strong>[$2 féte un comptio]</strong>, voutros changements seront atribuâs a voutron nom d’utilisator, entre-mié ôtros avantâjos.",
+       "anonpreviewwarning": "<em>Vos éte pas branchiê{{GENDER:||e}}. En encartent, voutron adrèce IP serat encartâye dedens l’historico des changements de cela pâge.</em>",
+       "missingsummary": "<strong>Sovegnence :</strong> vos éd balyê gins de rèsumâ de changement.\nSe vos tornâd cllicar dessus « {{int:savearticle}} », voutron changement serat encartâ sen rèsumâ.",
+       "selfredirect": "<strong>Atencion :</strong> vos éte aprés redirigiér la pâge vers lyé-méma.\nVos pouede avêr spècifiâ na crouye ciba por la redirèccion ou ben pôt-étre vos changiéd na crouye pâge.\nSe vos tornâd cllicar dessus « {{int:savearticle}} », la redirèccion serat fêta tot-un.",
        "missingcommenttext": "Se vos plét, buchiéd un comentèro ce-desot.",
-       "missingcommentheader": "'''Sovegnence :''' vos éd balyê gins de chousa / titro a ceti comentèro.\nSe vos tornâd clicar sur lo boton « {{int:savearticle}} », voutron changement serat encartâ sen chousa / titro.",
+       "missingcommentheader": "<strong>Sovegnence :</strong> vos éd balyê gins de chousa por cél comentèro.\nSe vos tornâd cllicar dessus « {{int:savearticle}} », voutron changement serat encartâ sen chousa.",
        "summary-preview": "Apèrçu du rèsumâ :",
-       "subject-preview": "Apèrçu de la chousa / du titro :",
+       "subject-preview": "Apèrçu de la chousa :",
+       "previewerrortext": "Na fôta est arrevâye pendent l’èprôva d’apèrçu de voutros changements.",
        "blockedtitle": "L’utilisator est blocâ",
-       "blockedtext": "'''Voutron nom d’utilisator voutron adrèce IP est étâ(ye) blocâ(ye).'''\n\nLo blocâjo est étâ fêt per $1.\nLa rêson balyêe est ''$2''.\n\n* Comencement du blocâjo : $8\n* Èxpiracion du blocâjo : $6\n* Compto blocâ : $7\n\nVos vos pouede veriér vers $1 ou ben un ôtr’[[{{MediaWiki:Grouppage-sysop}}|administrator]] por nen discutar.\nVos pouede pas empleyér la fonccionalitât « Lui mandar un mèssâjo » du muens qu’un’adrèce èlèctronica justa seye spècifiâye dens voutres [[Special:Preferences|prèferences]] et que vos seyâd pas étâ blocâ de l’empleyér.\nVoutron adrèce IP d’ora est $3, et l’identifient de blocâjo est $5.\nSe vos plét, entrebetâd tôs los dètalys ce-dessus dedens na demanda la quinta que seye que vos faréd.",
-       "autoblockedtext": "Voutron adrèce IP est étâye blocâye ôtomaticament, el est étâye empleyêe per un ôtr’utilisator, lui-mémo blocâ per $1.\nLa rêson balyêe est :\n\n:''$2''\n\n* Comencement du blocâjo : $8\n* Èxpiracion du blocâjo : $6\n* Compto blocâ : $7\n\nVos vos pouede veriér vers $1 ou ben yon des ôtros [[{{MediaWiki:Grouppage-sysop}}|administrators]] por nen discutar.\n\nNotâd que vos porréd pas empleyér la fonccionalitât « Lui mandar un mèssâjo » du muens que vos èyâd un’adrèce èlèctronica justa encartâye dens voutres [[Special:Preferences|prèferences]] et que vos seyâd pas étâ blocâ de l’empleyér.\n\nVoutron adrèce IP d’ora est $3, et l’identifient de blocâjo est $5.\nSe vos plét, entrebetâd tôs los dètalys ce-dessus dedens na demanda la quinta que seye que vos faréd.",
+       "blockedtext": "<strong>Voutron nom d’utilisator voutron adrèce IP est étâ(ye) blocâ(ye).</strong>\n\nLo blocâjo est étâ fêt per $1.\nLa rêson balyêe est <em>$2</em>.\n\n* Comencement du blocâjo : $8\n* Èxpiracion du blocâjo : $6\n* Comptio blocâ : $7\n\nVos vos pouede veriér vers $1 ou ben un ôtr’[[{{MediaWiki:Grouppage-sysop}}|administrator]] por nen discutar.\nVos pouede pas empleyér la fonccionalitât « Y mandar un mèssâjo » a muens qu’un’adrèce èlèctronica justa seye spècifiâye dens voutres [[Special:Preferences|prèferences]] et que vos seyéd pas étâ blocâ de l’empleyér.\nVoutron adrèce IP d’ora est $3 et l’identifient de blocâjo est $5.\nSe vos plét, rapondéd tôs los dètalys ce-dessus dedens totes les demandes que vos faréd.",
+       "autoblockedtext": "Voutron adrèce IP est étâye blocâye ôtomaticament, el est étâye empleyêe per un ôtr’utilisator, lui-mémo blocâ per $1.\nLa rêson balyêe est :\n\n:<em>$2</em>\n\n* Comencement du blocâjo : $8\n* Èxpiracion du blocâjo : $6\n* Comptio blocâ : $7\n\nVos vos pouede veriér vers $1 ou ben yon des ôtros [[{{MediaWiki:Grouppage-sysop}}|administrators]] por nen discutar.\n\nNotâd que vos porréd pas empleyér la fonccionalitât « Y mandar un mèssâjo » a muens que vos èyéd un’adrèce èlèctronica justa encartâye dens voutres [[Special:Preferences|prèferences]] et que vos seyéd pas étâ blocâ de l’empleyér.\n\nVoutron adrèce IP d’ora est $3 et l’identifient de blocâjo est $5.\nSe vos plét, rapondéd tôs los dètalys ce-dessus dedens totes les demandes que vos faréd.",
        "blockednoreason": "niona rêson balyêe",
-       "whitelistedittext": "Vos vos dête $1 por povêr changiér les pâges.",
+       "whitelistedittext": "Se vos plét, vos vos dête $1 por povêr changiér les pâges.",
        "confirmedittext": "Vos dête confirmar voutron adrèce èlèctronica devant que changiér les pâges.\nSe vos plét, buchiéd et pués validâd voutron adrèce èlèctronica dens voutres [[Special:Preferences|prèferences]].",
        "nosuchsectiontitle": "Y at pas moyen de trovar la sèccion",
-       "nosuchsectiontext": "Vos éd èprovâ de changiér na sèccion qu’ègziste pas.\nPôt-étre el est étâye dèplaciêe ou ben ôtâye dês que vos éd liesu cela pâge.",
+       "nosuchsectiontext": "Vos éd èprovâ de changiér na sèccion qu’ègziste pas.\nPôt-étre el est étâye dèplaciêe ôtâye dês que vos éd liesu cela pâge.",
        "loginreqtitle": "Branchement nècèssèro",
        "loginreqlink": "branchiér",
-       "loginreqpagetext": "Vos vos dête $1 por povêr vêre les ôtres pâges.",
-       "accmailtitle": "Contresegno mandâ.",
-       "accmailtext": "Un contresegno fêt per hasârd por [[User talk:$1|$1]] est étâ mandâ a $2.\n\nLo contresegno por cél compto novél pôt étre changiê sur la pâge de ''[[Special:ChangePassword|changement de contresegno]]'' aprés s’étre branchiê.",
+       "loginreqpagetext": "Se vos plét, vos vos dête $1 por povêr vêre les ôtres pâges.",
+       "accmailtitle": "Contresegno mandâ",
+       "accmailtext": "Un contresegno fêt a l’hasârd por [[User talk:$1|$1]] est étâ mandâ a $2. Pôt étre changiê dessus la pâge de <em>[[Special:ChangePassword|changement de contresegno]]</em> aprés branchement.",
        "newarticle": "(Novél)",
-       "newarticletext": "Vos éd siuvu un lim de vers na pâge qu’ègziste p’oncor.\nPor fâre cela pâge, buchiéd voutron tèxto dedens la bouèta ce-desot (vêde la [$1 pâge d’éde] por més d’enformacions).\nSe vos éte arrevâ{{GENDER:||ye|(ye)}} ice per fôta, clicâd sur lo boton '''Devant''' de voutron navigator.",
-       "anontalkpagetext": "----''O est la pâge de discussion d’un utilisator anonimo qu’at p’oncor fêt un compto ou ben que nen emplèye pas.\nPor cen nos devens empleyér la sin’adrèce IP numerica por lo recognetre.\nUn’adrèce IP d’ense pôt étre partagiêe per un mouél d’utilisators.\nSe vos éte {{GENDER:|un utilisator|un’utilisatrice|un utilisator}} anonim{{GENDER:|o|a|o}} et pués se vos constatâd que des comentèros que vos regârdont pas vos sont étâs adrèciês, se vos plét [[Special:UserLogin/signup|féte un compto]] ou ben [[Special:UserLogin|branchiéd-vos]] por èvitar tota confusion que vint avouéc d’ôtros utilisators anonimos.''",
-       "noarticletext": "Ora y at gins de tèxto dedens cela pâge.\nVos pouede [[Special:Search/{{PAGENAME}}|fâre na rechèrche sur cél titro]] dedens les ôtres pâges,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rechèrchiér dedens los jornals liyês]\nou ben [{{fullurl:{{FULLPAGENAME}}|action=edit}} fâre cela pâge]</span>.",
-       "noarticletext-nopermission": "Ora y at gins de tèxto dedens cela pâge.\nVos pouede [[Special:Search/{{PAGENAME}}|fâre na rechèrche sur cél titro]] dedens les ôtres pâges ou ben <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rechèrchiér dedens los jornals liyês]</span>, mas vos éd pas la pèrmission de fâre cela pâge.",
-       "missing-revision": "La vèrsion numerô $1 de la pâge apelâye « {{FULLPAGENAME}} » ègziste pas.\n\nEn g·ènèral cen arreve en siuvent un lim d’un historico dèpassâ de vers na pâge qu’est étâye suprimâye.\nVos pouede trovar més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
-       "userpage-userdoesnotexist": "Lo compto utilisator « $1 » est pas encartâ.\nSe vos plét, controlâd que vos voléd fâre / changiér cela pâge.",
-       "userpage-userdoesnotexist-view": "Lo compto utilisator « $1 » est pas encartâ.",
-       "blocked-notice-logextract": "{{GENDER:$1|Cél utilisator|Cel’utilisatrice|Cél utilisator}} est ora blocâ{{GENDER:$1||ye|}}.\nLa dèrriére entrâ du jornal des blocâjos est disponibla ce-desot :",
-       "clearyourcache": "'''Nota :''' aprés avêr encartâ, vos devréd forciér lo rechargement complèt du cacho de voutron navigator por vêre los changements.\n* '''Firefox / Safari :''' mantegnéd la toche ''Granta Lètra'' (''Shift'') en cliquent sur lo boton ''Rechargiér'' (''Reload'') ou ben prèssâd ''Ctrl-F5'' ou ''Ctrl-R'' (''⌘-R'' sur un Mac)\n* '''Google Chrome :''' prèssâd ''Ctrl-Shift-R'' (''⌘-Shift-R'' sur un Mac)\n* '''Internet Explorer :''' mantegnéd la toche ''Ctrl'' en cliquent sur lo boton ''Rafrèchir'' (''Refresh'') ou ben prèssâd ''Ctrl-F5''\n* '''Opera :''' èfaciéd lo cacho dedens ''Outils → Prèferences''",
-       "usercssyoucanpreview": "'''Combina :''' empleyéd lo boton « {{int:showpreview}} » por èprovar voutra fôlye CSS novèla devant que l’encartar.",
-       "userjsyoucanpreview": "'''Combina :''' empleyéd lo boton « {{int:showpreview}} » por èprovar voutra fôlye JavaScript novèla devant que l’encartar.",
-       "usercsspreview": "'''Rapelâd-vos que vos éte ren qu’aprés prèvêre voutra prôpra fôlye CSS.'''\n'''El est p’oncor étâye encartâye !'''",
-       "userjspreview": "'''Rapelâd-vos que vos éte ren qu’aprés èprovar / prèvêre voutron code JavaScript.'''\n'''Il est p’oncor étâ encartâ !'''",
-       "sitecsspreview": "'''Rapelâd-vos que vos éte ren qu’aprés prèvêre cela fôlye CSS.'''\n'''El est p’oncor étâye encartâye !'''",
-       "sitejspreview": "'''Rapelâd-vos que vos éte ren qu’aprés prèvêre cél code JavaScript.'''\n'''Il est p’oncor étâ encartâ !'''",
-       "userinvalidcssjstitle": "'''Atencion :''' ègziste gins d’habelyâjo « $1 ».\nRapelâd-vos que les pâges a sè avouéc èxtensions .css et .js emplèyont des titros en petiôtes lètres, per ègzemplo {{ns:user}}:Foo/vector.css et pas {{ns:user}}:Foo/Vector.css.",
+       "newarticletext": "Vos éd siuvu un lim de vers na pâge qu’ègziste p’oncor.\nPor fâre cela pâge, buchiéd voutron tèxto dedens la bouèta ce-desot (vêde la [$1 pâge d’éde] por més d’enformacions).\nSe vos éte arrevâ{{GENDER:||ye}} ique per fôta, cllicâd dessus lo boton <strong>Devant</strong> de voutron navegator.",
+       "anontalkpagetext": "----\n<em>O est la pâge de discussion d’un utilisator anonimo qu’at p’oncor fêt un comptio ou ben que nen emplèye pas.</em>\nPor cen, nos devens empleyér son adrèce IP numerica por o identifiar.\nUn’adrèce IP d’ense pôt étre partagiêe per un mouél d’utilisators.\nSe vos éte {{GENDER:|un utilisator|un’utilisatrice}} anonim{{GENDER:|o|a}} et pués se vos constatâd que de comentèros que vos regârdont pas vos sont étâs adrèciês, se vos plét [[Special:UserLogin/signup|féte un comptio]] ou ben [[Special:UserLogin|branchiéd-vos]] por èvitar tota confusion que vint avouéc d’ôtros utilisators anonimos.",
+       "noarticletext": "Ora y at gins de tèxto dedens cela pâge.\nVos pouede [[Special:Search/{{PAGENAME}}|fâre na rechèrche sur cél titro]] dedens les ôtres pâges,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rechèrchiér dedens los jornâls liyês]\nou ben [{{fullurl:{{FULLPAGENAME}}|action=edit}} fâre cela pâge]</span>.",
+       "noarticletext-nopermission": "Ora y at gins de tèxto dedens cela pâge.\nVos pouede [[Special:Search/{{PAGENAME}}|fâre na rechèrche sur cél titro]] dedens les ôtres pâges ou ben <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rechèrchiér dedens los jornâls liyês]</span>, mas vos éd pas la pèrmission de fâre cela pâge.",
+       "missing-revision": "La vèrsion n° $1 de la pâge apelâye « {{FULLPAGENAME}} » ègziste pas.\n\nEn g·ènèrâl cen arreve en siuvent un lim dèpassâ d’un historico de vers na pâge qu’est étâye suprimâye.\nVos pouede trovar més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornâl de les suprèssions].",
+       "userpage-userdoesnotexist": "Lo comptio utilisator « $1 » est pas encartâ.\nSe vos plét, controlâd se vos voléd fâre changiér cela pâge.",
+       "userpage-userdoesnotexist-view": "Lo comptio utilisator « $1 » est pas encartâ.",
+       "blocked-notice-logextract": "Ora {{GENDER:$1|cél utilisator|cel’utilisatrice}} est blocâ{{GENDER:$1||ye}}.\nLa dèrriére entrâ du jornâl des blocâjos est balyêe ce-desot coment rèference :",
+       "clearyourcache": "<strong>Nota :</strong> aprés avêr encartâ, sè pôt que vos deveyéd forciér lo rechargement complèt du cacho de voutron navegator por vêre los changements.\n* <strong>Firefox / Safari :</strong> mantegnéd la toche <em>Granta Lètra</em> (<em>Shift</em>) en clliquent dessus <em>Rechargiér</em> (<em>Reload</em>) ou ben apoyéd dessus <em>Ctrl-F5</em> <em>Ctrl-R</em> (<em>⌘-R</em> sur un Mac)\n* <strong>Google Chrome :</strong> apoyéd dessus <em>Ctrl-Shift-R</em> (''⌘-Shift-R</em> sur un Mac)\n* <strong>Internet Explorer :</strong> mantegnéd la toche <em>Ctrl</em> en clliquent dessus <em>Rafrèchir</em> (<em>Refresh</em>) ou ben apoyéd dessus <em>Ctrl-F5</em>\n* <strong>Opera :</strong> vouedâd lo cacho dedens <em>Outils → Prèferences</em>",
+       "usercssyoucanpreview": "<strong>Combina :</strong> empleyéd lo boton « {{int:showpreview}} » por èprovar voutra fôlye CSS novèla devant que l’encartar.",
+       "userjsyoucanpreview": "<strong>Combina :</strong> empleyéd lo boton « {{int:showpreview}} » por èprovar voutra fôlye JavaScript novèla devant que l’encartar.",
+       "usercsspreview": "<strong>Rapelâd-vos que vos éte ren qu’aprés prèvêre voutra fôlye CSS.\nEl est p’oncor étâye encartâye !</strong>",
+       "userjspreview": "<strong>Rapelâd-vos que vos éte ren qu’aprés èprovar prèvêre voutron code JavaScript.\nIl est p’oncor étâ encartâ !</strong>",
+       "sitecsspreview": "<strong>Rapelâd-vos que vos éte ren qu’aprés prèvêre cela fôlye CSS.\nEl est p’oncor étâye encartâye !</strong>",
+       "sitejspreview": "<strong>Rapelâd-vos que vos éte ren qu’aprés prèvêre cél code JavaScript.\nIl est p’oncor étâ encartâ !</strong>",
+       "userinvalidcssjstitle": "<strong>Atencion :</strong> ègziste gins d’habelyâjo « $1 ».\nRapelâd-vos que les pâges a sè avouéc èxtensions .css et .js emplèyont de titros en petiôtes lètres, per ègzemplo {{ns:user}}:Foo/vector.css et pas {{ns:user}}:Foo/Vector.css.",
        "updated": "(Betâ a jorn)",
-       "note": "'''Nota :'''",
-       "previewnote": "'''Rapelâd-vos qu’o est ren qu’un apèrçu.'''\nVoutros changements sont p’oncor étâs encartâs !",
+       "note": "<strong>Nota :</strong>",
+       "previewnote": "<strong>Rapelâd-vos qu’o est ren qu’un apèrçu.</strong>\nVoutros changements sont p’oncor étâs encartâs !",
        "continue-editing": "Alar vers la zona de changement",
-       "previewconflict": "Cet’apèrçu fât vêre lo tèxto de la zona de changement de d’amont coment aparêtrat se vos chouèsésséd de l’encartar.",
-       "session_fail_preview": "'''Dèconsolâ ! Nos povens pas encartar voutron changement a côsa d’una pèrta d’enformacions sur voutra sèance.'''\nSe vos plét, tornâd èprovar.\nSe cen tôrne pas reussir, [[Special:UserLogout|dèbranchiéd-vos]] et pués tornâd-vos branchiér.",
-       "session_fail_preview_html": "'''Dèconsolâ ! Nos povens pas encartar voutron changement a côsa d’una pèrta d’enformacions sur voutra sèance.'''\n\n''Perce que {{SITENAME}} at activâ l’HTML bruto, l’apèrçu est étâ cachiê por prèvegnir les ataques per JavaScript.''\n\n'''Se la tentativa de changement ére lèg·itima, se vos plét tornâd èprovar.'''\nSe cen tôrne pas reussir, [[Special:UserLogout|dèbranchiéd-vos]] et pués tornâd-vos branchiér.",
-       "token_suffix_mismatch": "'''Voutron changement est pas étâ accèptâ, voutron cliant at mècllâ los caractèros de ponctuacion dedens lo jeton de changement.'''\nLo changement est étâ refusâ por empachiér la corrupcion du tèxto de la pâge.\nDes côps ceti problèmo arreve quand vos empleyéd un sèrviço de proxi Vouèbe anonimo qu’est pas de sûr.",
-       "edit_form_incomplete": "'''Quârques parties du formulèro de changement ant pas avengiê lo sèrvior ; controlâd que voutros changements sont entiérs et pués tornâd èprovar.'''",
+       "previewconflict": "Cél apèrçu fât vêre lo tèxto de la zona de changement de d’amont coment aparêtrat se vos chouèsésséd de l’encartar.",
+       "session_fail_preview": "Dèsolâ ! Nos povens pas encartar voutron changement a côsa d’una pèrda d’enformacions sur voutra sèssion.\n\nPôt-étre vos éte étâ dèbranchiê. <strong>Se vos plét, controlâd que vos éte adés branchiê et pués tornâd èprovar.</strong>\nSe cen tôrne pas reussir, èprovâd de vos [[Special:UserLogout|dèbranchiér]] et pués de vos tornar branchiér, et controlâd que voutron navegator accèpte los raportiors (<em>cookies</em>) de cél seto.",
+       "session_fail_preview_html": "Dèsolâ ! Nos povens pas encartar voutron changement a côsa d’una pèrda d’enformacions sur voutra sèssion.\n\n<em>Perce que {{SITENAME}} at activâ l’HTML bruto, l’apèrçu est étâ cachiê por prèvegnir les ataques per JavaScript.</em>\n\n<strong>Se l’èprôva de changement est lèg·itima, se vos plét tornâd èprovar.</strong>\nSe cen tôrne pas reussir, èprovâd de vos [[Special:UserLogout|dèbranchiér]] et pués de vos tornar branchiér, et controlâd que voutron navegator accèpte los raportiors (<em>cookies</em>) de cél seto.",
+       "token_suffix_mismatch": "<strong>Voutron changement est pas étâ accèptâ, voutron cliant at mècllâ los caractèros de ponctuacion dedens lo jeton de changement.</strong>\nLo changement est étâ refusâ por empachiér la corrupcion du tèxto de la pâge.\nDes côps cél problèmo arreve quand vos empleyéd un sèrviço de sèrvior mandatèro (<em>proxy</em>) Vouèbe anonimo qu’est pas de sûr.",
+       "edit_form_incomplete": "<strong>Doux-três parties du formulèro de changement ant pas avengiê lo sèrvior ; controlâd que voutros changements sont entactos et pués tornâd èprovar.</strong>",
        "editing": "Changement de $1",
        "creating": "Crèacion de $1",
        "editingsection": "Changement de $1 (sèccion)",
        "editingcomment": "Changement de $1 (novèla sèccion)",
-       "editconflict": "Conflit de changement : $1",
-       "explainconflict": "Un ôtro at changiê ceta pâge aprés que vos vos seyâd betâ a la changiér.\nLa zona de changement de d’amont contint lo tèxto de la pâge coment ègziste orendrêt.\nVoutros changements aparèssont dedens la zona de changement de desot.\nVos voléd devêr fusionar voutros changements dedens lo tèxto ègzistent.\n'''Solament''' lo tèxto de la zona de changement de d’amont serat encartâ se vos clicâd dessus « {{int:savearticle}} ».",
+       "editconflict": "Disputa de changement : $1",
+       "explainconflict": "Un ôtro at changiê cela pâge aprés que vos vos seyéd betâ a la changiér.\nLa zona de changement de d’amont contint lo tèxto de la pâge coment ègziste orendrêt.\nVoutros changements aparèssont dedens la zona de changement de desot.\nVos voléd devêr fusionar voutros changements dedens lo tèxto ègzistent.\n<strong>Solament</strong> lo tèxto de la zona de changement de d’amont serat encartâ se vos cllicâd dessus « {{int:savearticle}} ».",
        "yourtext": "Voutron tèxto",
        "storedversion": "Vèrsion encartâye",
-       "nonunicodebrowser": "'''Atencion : voutron navigator recognêt pas l’Unicode.'''\nNa solucion de rechanjo est étâye trovâye por vos pèrmetre de changiér en tota suretât na pâge : los caractèros nan-ASCII aparêtront dedens la zona de changement por codes hègzadècimâls.",
-       "editingold": "'''Atencion : vos éte aprés changiér na vèrsion dèpassâye de cela pâge.'''\nSe vos l’encartâd, tôs los changements fêts dês ceta vèrsion seront pèrdus.",
+       "nonunicodebrowser": "<strong>Atencion : voutron navegator recognêt pas l’Unicode.</strong>\nNa solucion de rechanjo est étâye trovâye por vos pèrmetre de changiér en tota suretât na pâge : los caractèros nan-ASCII aparêtront dedens la zona de changement coment codes hègzadècimâls.",
+       "editingold": "<strong>Atencion : vos éte aprés changiér na vèrsion dèpassâye de cela pâge.</strong>\nSe vos l’encartâd, tôs los changements fêts dês cela vèrsion seront pèrdus.",
        "yourdiff": "Difèrences",
-       "copyrightwarning": "Se vos plét, notâd que totes les contribucions a {{SITENAME}} sont considèrâyes coment publeyêes desot los tèrmos de la $2 (vêde $1 por més de dètalys).\nSe vos voléd pas que voutros ècrits seyont changiês sen pouent de rèstriccion et rebalyês a volontât, adonc mandâd-los pas ique.<br />\nVos nos assurâd asse-ben que vos éd cen ècrit vos-mémo ou ben que vos l’éd copiyê d’una sôrsa que vint du domêno publico ou d’un’ôtra ressôrsa libra.\n'''Empleyéd gins d’ôvra desot drêt d’ôtor sen pèrmission èxprèssa !'''",
-       "copyrightwarning2": "Se vos plét, notâd que totes les contribucions a {{SITENAME}} pôvont étre changiêes ou ben enlevâyes per d’ôtros contributors.\nSe vos voléd pas que voutros ècrits seyont changiês sen pouent de rèstriccion, adonc mandâd-los pas ique.<br />\nVos nos assurâd asse-ben que vos éd cen ècrit vos-mémo ou ben que vos l’éd copiyê d’una sôrsa que vint du domêno publico ou d’un’ôtra ressôrsa libra (vêde $1 por més de dètalys).\n'''Empleyéd gins d’ôvra desot drêt d’ôtor sen pèrmission èxprèssa !'''",
-       "longpageerror": "'''Fôta : lo tèxto que vos éd mandâ fât {{PLURAL:$1|un Kio|$1 Kio}}, cen que dèpâsse la limita fixâye a {{PLURAL:$2|un Kio|$2 Kio}}.'''\nPôt pas étre encartâ.",
-       "readonlywarning": "'''Atencion : la bâsa de balyês est étâye vèrrolyêe por mantegnence, vos porréd vêr pas encartar voutros changements d’abôrd.'''\nVos pouede copiyér et côlar voutron tèxto dedens un fichiér tèxto et pués l’encartar por ples târd.\n\nL’administrator qu’at vèrrolyê la bâsa de balyês at balyê cet’èxplicacion : $1",
-       "protectedpagewarning": "'''Atencion : ceta pâge est étâye protègiêe de façon que solament los utilisators qu’ant lo statut d’administrator la pouessont changiér.'''\nPor refèrence, la dèrriére entrâ du jornal est balyêe ce-desot :",
-       "semiprotectedpagewarning": "'''Nota :''' ceta pâge est étâye protègiêe de façon que solament los utilisators encartâs la pouessont changiér.\nPor refèrence, la dèrriére entrâ du jornal est balyêe ce-desot :",
-       "cascadeprotectedwarning": "'''Atencion :''' cela pâge-que est étâye protègiêe de façon que solament los utilisators qu’ant lo statut d’administrator la pouessont changiér, perce qu’el est entrebetâye dedens {{PLURAL:$1|ceta pâge protègiêe|cetes pâges protègiêes}} avouéc la « protèccion en cascâda » activâye :",
-       "titleprotectedwarning": "'''Atencion : ceta pâge est étâye protègiêe de façon que des [[Special:ListGroupRights|drêts spècificos]] sont nècèssèros por la povêr fâre.'''\nPor refèrence, la dèrriére entrâ du jornal est balyêe ce-desot :",
-       "templatesused": "{{PLURAL:$1|Modèlo empleyê|Modèlos empleyês}} per ceta pâge :",
-       "templatesusedpreview": "{{PLURAL:$1|Modèlo empleyê|Modèlos empleyês}} dedens cet’apèrçu :",
-       "templatesusedsection": "{{PLURAL:$1|Modèlo empleyê|Modèlos empleyês}} dedens ceta sèccion :",
+       "copyrightwarning": "Se vos plét, notâd que totes les contribucions a {{SITENAME}} sont considèrâyes coment publeyêes desot los tèrmos de la $2 (vêde $1 por més de dètalys).\nSe vos voléd pas que voutros ècrits seyont changiês sen pediêt et pués redistribuâs a volontât, adonc mandâd-los pas ique.<br />\nVos nos assurâd asse-ben que vos éd cen ècrit vos-mémo ou ben que vos l’éd copiyê d’una sôrsa que vint du domêno publico ou d’un’ôtra ressôrsa libra.\n<strong>Empleyéd gins d’ôvra desot drêt d’ôtor sen pèrmission èxprèssa !</strong>",
+       "copyrightwarning2": "Se vos plét, notâd que totes les contribucions a {{SITENAME}} pôvont étre changiêes enlevâyes per d’ôtros contributors.\nSe vos voléd pas que voutros ècrits seyont changiês sen pediêt, adonc mandâd-los pas ique.<br />\nVos nos assurâd asse-ben que vos éd cen ècrit vos-mémo ou ben que vos l’éd copiyê d’una sôrsa que vint du domêno publico ou d’un’ôtra ressôrsa libra (vêde $1 por més de dètalys).\n<strong>Empleyéd gins d’ôvra desot drêt d’ôtor sen pèrmission èxprèssa !</strong>",
+       "editpage-cannot-use-custom-model": "Lo modèlo de contegnu de cela pâge pôt pas étre changiê.",
+       "longpageerror": "<strong>Fôta : lo tèxto que vos éd mandâ fât {{PLURAL:$1|un Kio|$1 Kio}}, cen que dèpâsse la limita fixâye a {{PLURAL:$2|un Kio|$2 Kio}}.</strong>\nPôt pas étre encartâ.",
+       "readonlywarning": "<strong>Atencion : la bâsa de balyês est étâye cotâye por na rotina d’entretin, cen fât que vos porréd vêr pas encartar voutros changements orendrêt.</strong>\nVos pouede copiyér et côlar voutron tèxto dedens un fichiér tèxto et pués l’encartar por ples târd.\n\nL’administrator sistèmo que l’at cotâ at balyê cel’èxplicacion : $1",
+       "protectedpagewarning": "<strong>Atencion : cela pâge est étâye protègiêe por que solament los utilisators qu’ant los drêts d’administrator la pouessont changiér.</strong>\nLa dèrriére entrâ du jornâl est balyêe ce-desot coment rèference :",
+       "semiprotectedpagewarning": "<strong>Nota :</strong> cela pâge est étâye protègiêe por que solament los utilisators encartâs la pouessont changiér.\nLa dèrriére entrâ du jornâl est balyêe ce-desot coment rèference :",
+       "cascadeprotectedwarning": "<strong>Atencion :</strong> cela pâge est étâye protègiêe por que solament los utilisators qu’ant los drêts d’administrator la pouessont changiér, el est transcllua dedens {{PLURAL:$1|cela pâge protègiêe|celes pâges protègiêes}}-que avouéc la « protèccion en cascâda » activâye :",
+       "titleprotectedwarning": "<strong>Atencion : cela pâge est étâye protègiêe por que de [[Special:ListGroupRights|drêts spècificos]] sont nècèssèros por la povêr fâre.</strong>\nLa dèrriére entrâ du jornâl est balyêe ce-desot coment rèference :",
+       "templatesused": "{{PLURAL:$1|Modèlo empleyê|Modèlos empleyês}} per cela pâge :",
+       "templatesusedpreview": "{{PLURAL:$1|Modèlo empleyê|Modèlos empleyês}} dedens cél apèrçu :",
+       "templatesusedsection": "{{PLURAL:$1|Modèlo empleyê|Modèlos empleyês}} dedens cela sèccion :",
        "template-protected": "(protègiê)",
        "template-semiprotected": "(mié-protègiê)",
-       "hiddencategories": "{{PLURAL:$1|Catègorie cachiêe|Catègories cachiêes}} que ceta pâge est avouéc :",
+       "hiddencategories": "{{PLURAL:$1|Catègoria cachiêe|Catègories cachiêes}} que cela pâge est avouéc :",
        "edittools": "<!-- Tot tèxto buchiê ique serat montrâ desot les bouètes d’èdicion ou ben los formulèros de tèlèchargement de fichiér. -->",
-       "nocreatetext": "{{SITENAME}} at rètrent la possibilitât de fâre de pâges novèles.\nVos pouede tornar arriér et pués changiér na pâge ègzistenta ou ben [[Special:UserLogin|vos branchiér ou fâre un compto]].",
+       "nocreatetext": "{{SITENAME}} at rètrent la possibilitât de fâre de pâges novèles.\nVos pouede tornar arriér et pués changiér na pâge ègzistenta ou ben [[Special:UserLogin|vos branchiér ou fâre un comptio]].",
        "nocreate-loggedin": "Vos éd pas la pèrmission de fâre de pâges novèles.",
        "sectioneditnotsupported-title": "Changement de sèccion pas recognu",
        "sectioneditnotsupported-text": "Lo changement d’una sèccion est pas recognu dens cela pâge.",
        "permissionserrors": "Fôta de pèrmission",
-       "permissionserrorstext": "Vos éd pas la pèrmission de fâre l’accion demandâye por {{PLURAL:$1|ceta rêson|cetes rêsons}} :",
-       "permissionserrorstext-withaction": "Vos éd pas la pèrmission de $2 por {{PLURAL:$1|ceta rêson|cetes rêsons}} :",
-       "recreate-moveddeleted-warn": "'''Atencion : vos éte aprés refâre na pâge qu’est étâye suprimâye dês devant.'''\n\nDemandâd-vos se fôt franc continuar son changement.\nPor comoditât, lo jornal de les suprèssions et des dèplacements de cela pâge est balyê ce-desot :",
-       "moveddeleted-notice": "Ceta pâge est étâye suprimâye.\nPor refèrence, lo jornal de les suprèssions et des dèplacements de cela pâge est balyê ce-desot.",
-       "log-fulllog": "Vêre lo jornal complèt",
-       "edit-hook-aborted": "Changement anulâ per un grèfon.\nNion’èxplicacion est étâye balyêe.",
+       "permissionserrorstext": "Vos éd pas la pèrmission de fâre l’accion demandâye por {{PLURAL:$1|cela rêson|celes rêsons}}-que :",
+       "permissionserrorstext-withaction": "Vos éd pas la pèrmission de $2 por {{PLURAL:$1|cela rêson|celes rêsons}}-que :",
+       "contentmodelediterror": "Vos pouede pas changiér cela vèrsion, son modèlo de contegnu est <code>$1</code>, cen que sè difèrence du modèlo de contegnu d’ora de la pâge <code>$2</code>.",
+       "recreate-moveddeleted-warn": "<strong>Atencion : vos éte aprés refâre na pâge qu’est étâye suprimâye dês devant.</strong>\n\nDemandâd-vos se fôt franc continuar son changement.\nLo jornâl de les suprèssions et des dèplacements de cela pâge est balyê ce-desot por comoditât :",
+       "moveddeleted-notice": "Cela pâge est étâye suprimâye.\nLo jornâl de les suprèssions et des dèplacements de cela pâge est balyê ce-desot coment rèference.",
+       "moveddeleted-notice-recent": "Dèsolâ, dês pou cela pâge est étâye suprimâye (dens les 24 hores passâyes).\nLo jornâl de les suprèssions et des dèplacements de cela pâge est balyê ce-desot coment rèference.",
+       "log-fulllog": "Vêre lo jornâl complèt",
+       "edit-hook-aborted": "Changement anulâ per un’èxtension.\nNion’èxplicacion est étâye balyêe.",
        "edit-gone-missing": "Y at pas moyen de betar a jorn la pâge.\nSemble que seye étâye suprimâye.",
-       "edit-conflict": "Conflit de changement.",
+       "edit-conflict": "Disputa de changement.",
        "edit-no-change": "Voutron changement est étâ ignorâ, nion changement est étâ fêt u tèxto.",
+       "postedit-confirmation-created": "La pâge est étâye fêta.",
+       "postedit-confirmation-restored": "La pâge est étâye refêta.",
        "postedit-confirmation-saved": "Voutron changement est étâ encartâ.",
        "edit-already-exists": "Y at pas moyen de fâre na pâge novèla.\nÈgziste ja.",
        "defaultmessagetext": "Mèssâjo per dèfôt",
-       "content-failed-to-parse": "Falyita de l’analisa du contegnu de $2 por lo modèlo $1 : $3",
+       "content-failed-to-parse": "Falyita de l’analise du contegnu de $2 por lo modèlo $1 : $3",
        "invalid-content-data": "Balyês du contegnu pas justes",
-       "content-not-allowed-here": "Lo contegnu « $1 » est pas ôtorisâ sur la pâge [[$2]]",
-       "editwarning-warning": "Quitar ceta pâge vos farat pèrdre tôs los changements que vos éd fêts.\nSe vos éte branchiê, vos pouede enlevar ceti avèrtissement dens la sèccion « Fenétra d’èdicion » de voutres prèferences.",
+       "content-not-allowed-here": "Lo contegnu « $1 » est pas ôtorisâ dessus la pâge [[$2]]",
+       "editwarning-warning": "Quitar cela pâge vos farat pèrdre tôs los changements que vos éd fêts.\nSe vos éte branchiê{{GENDER:||e}}, vos pouede dèsactivar cela semonce dedens la sèccion « {{int:prefs-editing}} » de voutres prèferences.",
+       "editpage-notsupportedcontentformat-title": "Format de contegnu pas recognu",
+       "editpage-notsupportedcontentformat-text": "Lo format de contegnu $1 est pas recognu per lo modèlo de contegnu $2.",
        "content-model-wikitext": "vouiquitèxto",
        "content-model-text": "tèxto bruto",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
-       "expensive-parserfunction-warning": "'''Atencion :''' cela pâge contint trop d’apèls a des fonccions du parsor que revegnont chieres.\n\nY devrêt avêr muens de $2 apèl{{PLURAL:$2||s}}, pendent qu’y en at ora $1.",
-       "expensive-parserfunction-category": "Pâges avouéc trop d’apèls a des fonccions du parsor que revegnont chieres",
-       "post-expand-template-inclusion-warning": "'''Atencion :''' la talye des modèlos entrebetâs est trop grôssa.\nQuârques modèlos seront pas entrebetâs.",
-       "post-expand-template-inclusion-category": "Pâges yô que la talye des modèlos entrebetâs est dèpassâye",
-       "post-expand-template-argument-warning": "'''Atencion :''' cela pâge contint por lo muens un argument de modèlo qu’at na talye d’èxpension trop grôssa.\nCelos arguments sont pas étâs betâs.",
-       "post-expand-template-argument-category": "Pâges que contegnont des arguments de modèlo pas betâs",
-       "parser-template-loop-warning": "Modèlo en boclla dècelâ : [[$1]]",
+       "content-json-empty-object": "Chousa voueda",
+       "content-json-empty-array": "Grelye voueda",
+       "duplicate-args-warning": "<strong>Atencion :</strong> [[:$1]] apèle [[:$2]] avouéc més d’una valor por lo paramètro « $3 ». Solament la dèrriére valor balyêe serat empleyêe.",
+       "duplicate-args-category": "Pâges qu’emplèyont d’arguments doblos dedens los apèls de modèlo",
+       "duplicate-args-category-desc": "La pâge contint d’apèls de modèlo qu’emplèyont d’arguments doblos, coment <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ou ben <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
+       "expensive-parserfunction-warning": "<strong>Atencion :</strong> cela pâge contint trop d’apèls a des fonccions parsiors que revegnont chieres.\n\nY devrêt avêr muens de $2 apèl{{PLURAL:$2||s}}, pendent qu’y en at ora $1.",
+       "expensive-parserfunction-category": "Pâges avouéc trop d’apèls a des fonccions parsiors que revegnont chieres",
+       "post-expand-template-inclusion-warning": "<strong>Atencion :</strong> la talye des modèlos rapondus est trop grôssa.\nDoux-três modèlos seront pas rapondus.",
+       "post-expand-template-inclusion-category": "Pâges yô que la talye des modèlos rapondus est dèpassâye",
+       "post-expand-template-argument-warning": "<strong>Atencion :</strong> cela pâge contint por lo muens un argument de modèlo qu’at na talye d’èxpension trop grôssa.\nCelos arguments sont pas étâs betâs.",
+       "post-expand-template-argument-category": "Pâges que contegnont d’arguments de modèlo pas betâs",
+       "parser-template-loop-warning": "Modèlo bocllo dècelâ : [[$1]]",
        "parser-template-recursion-depth-warning": "Limita de provondior des apèls de modèlos dèpassâye ($1)",
-       "language-converter-depth-warning": "Limita de provondior du convèrtissor de lengoua dèpassâye ($1)",
+       "language-converter-depth-warning": "Limita de provondior du convèrtior de lengoua dèpassâye ($1)",
        "node-count-exceeded-category": "Pâges yô que lo nombro de nuods est dèpassâ",
+       "node-count-exceeded-category-desc": "Cela pâge dèpâsse lo nombro maximon de nuods.",
        "node-count-exceeded-warning": "Pâge que dèpâsse lo nombro de nuods",
        "expansion-depth-exceeded-category": "Pâges yô que la provondior d’èxpension est dèpassâye",
+       "expansion-depth-exceeded-category-desc": "La pâge dèpâsse la provondior maximon d’èxpension.",
        "expansion-depth-exceeded-warning": "Pâge que dèpâsse la provondior d’èxpension",
        "parser-unstrip-loop-warning": "Boclla pas dèmontâbla dècelâye",
        "parser-unstrip-recursion-limit": "Limita de rècursion pas dèmontâbla dèpassâye ($1)",
-       "converter-manual-rule-error": "Fôta dècelâye dens la règlla de convèrsion de lengoua manuèla",
-       "undo-success": "Lo changement pôt étre dèfêt.\nSe vos plét, controlâd la comparèson ce-desot por vos assurar qu’o est franc cen que vos voléd fâre et pués encartâd los changements ce-desot por chavonar la sina dèfêta.",
-       "undo-failure": "Lo changement at pas possu étre dèfêt a côsa d’un conflit avouéc des changements entèrmèdièros.",
-       "undo-norev": "Lo changement at pas possu étre dèfêt perce qu’il est pas ègzistent ou ben qu’il est étâ suprimâ.",
+       "converter-manual-rule-error": "Fôta dècelâye dedens la règlla de convèrsion manuâla de lengoua",
+       "undo-success": "Lo changement pôt étre dèfêt.\nSe vos plét, controlâd la comparèson ce-desot por vos assurar qu’o est franc cen que vos voléd fâre, et pués encartâd los changements por chavonar sa dèfêta.",
+       "undo-failure": "Lo changement at pas possu étre dèfêt a côsa d’una disputa avouéc des changements entèrmèdièros.",
+       "undo-norev": "Lo changement at pas possu étre dèfêt, il est inègzistent ou ben il est étâ suprimâ.",
+       "undo-nochange": "Semble que lo changement seye ja étâ dèfêt.",
        "undo-summary": "Dèfêta du changement $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|discutar]])",
        "undo-summary-username-hidden": "Dèfêta du changement $1 d’un utilisator cachiê",
-       "cantcreateaccounttitle": "Y at pas moyen de fâre lo compto",
-       "cantcreateaccount-text": "La crèacion de compto dês cet’adrèce IP ('''$1''') est étâye blocâye per [[User:$3|$3]].\n\nLa rêson balyêe per $3 ére ''$2''.",
-       "viewpagelogs": "Vêde los jornals de ceta pâge",
-       "nohistory": "Ègziste gins d’historico por ceta pâge.",
+       "cantcreateaccounttitle": "Y at pas moyen de fâre lo comptio",
+       "cantcreateaccount-text": "La crèacion de comptio dês cel’adrèce IP (<strong>$1</strong>) est étâye blocâye per [[User:$3|$3]].\n\nLa rêson balyêe per $3 ére <em>$2</em>",
+       "cantcreateaccount-range-text": "La crèacion de comptio dês les adrèces IP dedens la plage <strong>$1</strong>, que comprend voutron adrèce IP (<strong>$4</strong>), sont étâye blocâyes per [[User:$3|$3]].\n\nLa rêson balyêe per $3 ére <em>$2</em>",
+       "viewpagelogs": "Vêde los jornâls de cela pâge",
+       "nohistory": "Ègziste gins d’historico por cela pâge.",
        "currentrev": "Vèrsion d’ora",
-       "currentrev-asof": "Vèrsion d’ora du $2 a $3",
-       "revisionasof": "Vèrsion du $2 a $3",
-       "revision-info": "Vèrsion du $4 a $5 per $2",
+       "currentrev-asof": "Vèrsion d’ora en dâta du $1",
+       "revisionasof": "Vèrsion en dâta du $1",
+       "revision-info": "Vèrsion en dâta du $1 per {{GENDER:$6|$2}}$7",
        "previousrevision": "← Vèrsion ples vielye",
        "nextrevision": "Vèrsion ples novèla →",
        "currentrevisionlink": "Vèrsion d’ora",
        "last": "devant",
        "page_first": "premiére",
        "page_last": "dèrriére",
-       "histlegend": "Chouèx de difs : pouentâd les câses de les vèrsions a comparar et pués apoyéd dessus « Entrâ » ou ben lo boton d’avâl.<br />\nLègenda : '''({{int:cur}})''' = difèrence avouéc la vèrsion d’ora, '''({{int:last}})''' = difèrence avouéc la vèrsion devant, '''{{int:minoreditletter}}''' = petiôt changement.",
+       "histlegend": "Chouèx de difs : pouentâd les câses de les vèrsions a comparar et pués apoyéd dessus « Entrâ » ou ben lo boton d’avâl.<br />\nLègenda : <strong>({{int:cur}})</strong> = difèrence avouéc la vèrsion d’ora, <strong>({{int:last}})</strong> = difèrence avouéc la vèrsion devant, <strong>{{int:minoreditletter}}</strong> = petiôt changement.",
        "history-fieldset-title": "Fâre dèfelar l’historico",
-       "history-show-deleted": "Ren que les suprimâyes",
-       "histfirst": "la ples vielye",
-       "histlast": "La ples novèla",
+       "history-show-deleted": "Mas que les suprimâyes",
+       "histfirst": "les ples vielyes",
+       "histlast": "Les ples novèles",
        "historysize": "($1 octèt{{PLURAL:$1||s}})",
        "historyempty": "(voueda)",
        "history-feed-title": "Historico de les vèrsions",
-       "history-feed-description": "Historico por ceta pâge sur lo vouiqui",
-       "history-feed-item-nocomment": "$1 lo $3 a $4",
-       "history-feed-empty": "La pâge demandâye ègziste pas.\nPôt-étre el est étâye suprimâye du vouiqui ou ben renomâye.\nÈprovâd de [[Special:Search|rechèrchiér sur lo vouiqui]] por trovar des pâges novèles que vant avouéc.",
+       "history-feed-description": "Historico de les vèrsions por cela pâge sur lo vouiqui",
+       "history-feed-item-nocomment": "$1 lo $2",
+       "history-feed-empty": "La pâge demandâye ègziste pas.\nPôt-étre el est étâye suprimâye du vouiqui ou ben renomâye.\nÈprovâd de [[Special:Search|rechèrchiér sur lo vouiqui]] por trovar de pâges novèles que vant avouéc.",
+       "history-edit-tags": "Changiér les balises de les vèrsions chouèsies",
        "rev-deleted-comment": "(rèsumâ de changement enlevâ)",
        "rev-deleted-user": "(nom d’utilisator enlevâ)",
-       "rev-deleted-event": "(accion du jornal enlevâye)",
+       "rev-deleted-event": "(dètalys du jornâl enlevâs)",
        "rev-deleted-user-contribs": "[nom d’utilisator ou ben adrèce IP enlevâ(ye) - changement cachiê sur les contribucions]",
-       "rev-deleted-text-permission": "Ceta vèrsion de la pâge est étâye '''suprimâye'''.\nY pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
-       "rev-deleted-text-unhide": "Ceta vèrsion de la pâge est étâye '''suprimâye'''.\nY pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].\nVos pouede adés [$1 vêre cela vèrsion] se vos o voléd.",
-       "rev-suppressed-text-unhide": "Ceta vèrsion de la pâge est étâye '''rèprimâye'''.\nY pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les rèprèssions].\nVos pouede adés [$1 vêre cela vèrsion] se vos o voléd.",
-       "rev-deleted-text-view": "Ceta vèrsion de la pâge est étâye '''suprimâye'''.\nVos la pouede vêre ; y pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
-       "rev-suppressed-text-view": "Ceta vèrsion de la pâge est étâye '''rèprimâye'''.\nVos la pouede vêre ; y pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornal de les rèprèssions].",
-       "rev-deleted-no-diff": "Vos pouede pas vêre ceta dif perce que yona de les vèrsions est étâye '''suprimâye'''.\nY pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
-       "rev-suppressed-no-diff": "Vos pouede pas vêre ceta dif, yona de les vèrsions est étâye '''suprimâye'''.",
-       "rev-deleted-unhide-diff": "Yona de les vèrsions de ceta dif est étâye '''suprimâye'''.\nY pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].\nVos pouede adés [$1 vêre cela dif] se vos o voléd.",
-       "rev-suppressed-unhide-diff": "Yona de les vèrsions de ceta dif est étâye '''rèprimâye'''.\nY pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les rèprèssions].\nVos pouede adés [$1 vêre cela dif] se vos o voléd.",
-       "rev-deleted-diff-view": "Yona de les vèrsions de ceta dif est étâye '''suprimâye'''.\nVos pouede vêre ceta dif ; y pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
-       "rev-suppressed-diff-view": "Yona de les vèrsions de ceta dif est étâye '''rèprimâye'''.\nVos pouede vêre ceta dif ; y pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornal de les rèprèssions].",
-       "rev-delundel": "montrar / cachiér",
+       "rev-deleted-text-permission": "Cela vèrsion de la pâge est étâye <strong>suprimâye</strong>.\nY pôt avêr més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornâl de les suprèssions].",
+       "rev-suppressed-text-permission": "Cela vèrsion de la pâge est étâye <strong>rèprimâye</strong>.\nY pôt avêr més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornâl de les rèprèssions].",
+       "rev-deleted-text-unhide": "Cela vèrsion de la pâge est étâye <strong>suprimâye</strong>.\nY pôt avêr més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornâl de les suprèssions].\nVos pouede adés [$1 vêre cela vèrsion] se vos o voléd.",
+       "rev-suppressed-text-unhide": "Cela vèrsion de la pâge est étâye <strong>rèprimâye</strong>.\nY pôt avêr més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornâl de les rèprèssions].\nVos pouede adés [$1 vêre cela vèrsion] se vos o voléd.",
+       "rev-deleted-text-view": "Cela vèrsion de la pâge est étâye <strong>suprimâye</strong>.\nVos la pouede vêre ; y pôt avêr més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornâl de les suprèssions].",
+       "rev-suppressed-text-view": "Cela vèrsion de la pâge est étâye <strong>rèprimâye</strong>.\nVos la pouede vêre ; y pôt avêr més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornâl de les rèprèssions].",
+       "rev-deleted-no-diff": "Vos pouede pas vêre cela dif, yona de les vèrsions est étâye <strong>suprimâye</strong>.\nY pôt avêr més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornâl de les suprèssions].",
+       "rev-suppressed-no-diff": "Vos pouede pas vêre cela dif, yona de les vèrsions est étâye <strong>suprimâye</strong>.",
+       "rev-deleted-unhide-diff": "Yona de les vèrsions de cela dif est étâye <strong>suprimâye</strong>.\nY pôt avêr més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornâl de les suprèssions].\nVos pouede adés [$1 vêre cela dif] se vos o voléd.",
+       "rev-suppressed-unhide-diff": "Yona de les vèrsions de cela dif est étâye <strong>rèprimâye</strong>.\nY pôt avêr més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornâl de les rèprèssions].\nVos pouede adés [$1 vêre cela dif] se vos o voléd.",
+       "rev-deleted-diff-view": "Yona de les vèrsions de cela dif est étâye <strong>suprimâye</strong>.\nVos pouede vêre cela dif ; y pôt avêr més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornâl de les suprèssions].",
+       "rev-suppressed-diff-view": "Yona de les vèrsions de cela dif est étâye <strong>rèprimâye</strong>.\nVos pouede vêre cela dif ; y pôt avêr més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornâl de les rèprèssions].",
+       "rev-delundel": "changiér la visibilitât",
        "rev-showdeleted": "montrar",
-       "revisiondelete": "Suprimar / refâre des vèrsions",
+       "revisiondelete": "Suprimar refâre de vèrsions",
        "revdelete-nooldid-title": "Vèrsion ciba pas justa",
-       "revdelete-nooldid-text": "Vos éd pas spècifiâ na vèrsion ciba (des vèrsions cibes) por fâre cela\nfonccion, la vèrsion spècifiâye ègziste pas ou ben vos èprovâd de cachiér la vèrsion d’ora.",
+       "revdelete-nooldid-text": "Vos éd spècifiâ gins de vèrsion ciba por y fâre cela fonccion, ou ben la vèrsion spècifiâye ègziste pas ou ben vos èprovâd de cachiér la vèrsion d’ora.",
        "revdelete-no-file": "Lo fichiér spècifiâ ègziste pas.",
-       "revdelete-show-file-confirm": "Est-o que vos éte de sûr de volêr vêre na vèrsion suprimâye du fichiér « <nowiki>$1</nowiki> » du $2 a $3 ?",
+       "revdelete-show-file-confirm": "Vos éte de sûr de volêr vêre na vèrsion suprimâye du fichiér « <nowiki>$1</nowiki> » que dâte du $2 a $3 ?",
        "revdelete-show-file-submit": "Ouè",
-       "logdelete-selected": "{{PLURAL:$1|Èvènement du jornal chouèsi|Èvènements du jornal chouèsis}} :",
-       "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 :\n* Enformacions que pôvont étre difamatouères\n* Enformacions a sè que vant pas avouéc\n*: ''adrèces et numerôs de tèlèfono, numerôs de sècuritât sociâla, et tot cen que vat avouéc''",
-       "revdelete-legend": "Dèfenir des rèstriccions de visibilitât",
-       "revdelete-hide-text": "Cachiér lo tèxto de la vèrsion",
+       "revdelete-selected-text": "{{PLURAL:$1|Vèrsion chouèsia|Vèrsions chouèsies}} de [[:$2]] :",
+       "revdelete-selected-file": "{{PLURAL:$1|Vèrsion de fichiér chouèsia|Vèrsions de fichiér chouèsies}} de [[:$2]] :",
+       "logdelete-selected": "{{PLURAL:$1|Èvènement du jornâl chouèsi|Èvènements du jornâl chouèsis}} :",
+       "revdelete-text-text": "Les vèrsions suprimâyes continueront a aparêtre dedens l’historico de la pâge, mas na partia de lor contegnu serat inaccèssibla u publico.",
+       "revdelete-text-file": "Les vèrsions de fichiér suprimâyes continueront a aparêtre dedens l’historico du fichiér, mas na partia de lor contegnu serat inaccèssibla u publico.",
+       "logdelete-text": "Los èvènements du jornâl suprimâs continueront a aparêtre dedens los jornâls, mas na partia de lor contegnu serat inaccèssibla u publico.",
+       "revdelete-text-others": "Los ôtros administrators porront adés arrevar u contegnu cachiê et lo refâre, a muens que des rèstriccions de més seyont 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}}|politiques]].",
+       "revdelete-suppress-text": "La rèprèssion dêt étre empleyêe <strong>ren que</strong> dens celos câs-que :\n* Enformacions que pôvont étre difamatouères\n* Enformacions a sè que vant pas avouéc\n*: <em>adrèce, numerô de tèlèfono, numerô d’identificacion nacionâl, et tot cen que vat avouéc</em>",
+       "revdelete-legend": "Dèfenir de rèstriccions de visibilitât",
+       "revdelete-hide-text": "Tèxto de la vèrsion",
        "revdelete-hide-image": "Cachiér lo contegnu du fichiér",
-       "revdelete-hide-name": "Cachiér l’accion et la ciba",
-       "revdelete-hide-comment": "Cachiér lo rèsumâ de changement",
-       "revdelete-hide-user": "Cachiér lo nom d’utilisator / l’adrèce IP du contributor",
-       "revdelete-hide-restricted": "Rèprimar celes balyês ux administrators et pués ux ôtros",
+       "revdelete-hide-name": "Cachiér la ciba et los paramètros",
+       "revdelete-hide-comment": "Rèsumâ du changement",
+       "revdelete-hide-user": "Nom d’utilisator ou ben adrèce IP du changior",
+       "revdelete-hide-restricted": "Rèprimar les balyês ux administrators et pués ux ôtros",
        "revdelete-radio-same": "(pas changiér)",
-       "revdelete-radio-set": "Ouè",
-       "revdelete-radio-unset": "Nan",
-       "revdelete-suppress": "Rèprimar celes balyês ux administrators et pués ux ôtros",
+       "revdelete-radio-set": "Cachiê",
+       "revdelete-radio-unset": "Visiblo",
+       "revdelete-suppress": "Rèprimar les balyês ux administrators et pués ux ôtros",
        "revdelete-unsuppress": "Enlevar les rèstriccions sur les vèrsions refêtes",
        "revdelete-log": "Rêson :",
        "revdelete-submit": "Aplicar a {{PLURAL:$1|la vèrsion chouèsia|les vèrsions chouèsies}}",
-       "revdelete-success": "'''Visibilitât de la vèrsion betâye a jorn avouéc reusséta.'''",
-       "revdelete-failure": "'''La visibilitât de la vèrsion at pas possu étre betâye a jorn :'''\n$1",
-       "logdelete-success": "'''Visibilitât du jornal dèfenia avouéc reusséta.'''",
-       "logdelete-failure": "'''La visibilitât du jornal at pas possu étre dèfenia :'''\n$1",
+       "revdelete-success": "Visibilitât de la vèrsion betâye a jorn.",
+       "revdelete-failure": "La visibilitât de la vèrsion at pas possu étre betâye a jorn :\n$1",
+       "logdelete-success": "Visibilitât du jornâl dèfenia.",
+       "logdelete-failure": "La visibilitât du jornâl at pas possu étre dèfenia :\n$1",
        "revdel-restore": "changiér la visibilitât",
        "pagehist": "Historico de la pâge",
        "deletedhist": "Historico suprimâ",
        "revdelete-hide-current": "Fôta en cachient la piéce datâye du $1 a $2 : o est la vèrsion d’ora.\nPôt pas étre cachiêe.",
        "revdelete-show-no-access": "Fôta en montrent la piéce datâye du $1 a $2 : el est marcâye coment « rètrenta ».\nVos y éd pas accès.",
        "revdelete-modify-no-access": "Fôta en changient la piéce datâye du $1 a $2 : el est marcâye coment « rètrenta ».\nVos y éd pas accès.",
-       "revdelete-modify-missing": "Fôta en changient la piéce avouéc l’identifient $1 : el est manquenta dedens la bâsa de balyês !",
-       "revdelete-no-change": "'''Atencion :''' la piéce datâye du $1 a $2 at ja la configuracion de visibilitât demandâye.",
-       "revdelete-concurrent-change": "Fôta en changient la piéce datâye du $1 a $2 : lo sin statut semble étre étâ changiê per un ôtro justo que vos èprovâvâd d’o changiér.\nSe vos plét, controlâd los jornals.",
-       "revdelete-only-restricted": "Fôta en cachient la piéce datâye du $1 a $2 : vos pouede pas rèprimar celes piéces de la vua ux administrators sen chouèsir avouéc des ôtros chouèx de visibilitât.",
-       "revdelete-reason-dropdown": "*Rêsons corentes de suprèssion\n** Violacion du drêt d’ôtor\n** Comentèros ou ben enformacions a sè que vant pas avouéc\n** Nom d’utilisator que vat pas avouéc\n** Enformacions que pôvont étre difamatouères",
-       "revdelete-otherreason": "Ôtra rêson / rêson de ples :",
+       "revdelete-modify-missing": "Fôta en changient la piéce avouéc l’ID $1 : el est entrovâbla dedens la bâsa de balyês !",
+       "revdelete-no-change": "<strong>Atencion :</strong> la piéce datâye du $1 a $2 at ja la configuracion de visibilitât demandâye.",
+       "revdelete-concurrent-change": "Fôta en changient la piéce datâye du $1 a $2 : son statut semble étre étâ changiê per un ôtro justo que vos èprovâvâd d’o changiér.\nSe vos plét, controlâd los jornâls.",
+       "revdelete-only-restricted": "Fôta en cachient la piéce datâye du $1 a $2 : vos pouede pas rèprimar de piéces de la viua ux administrators sen chouèsir avouéc d’ôtros chouèx de visibilitât.",
+       "revdelete-reason-dropdown": "*Rêsons corentes de suprèssion\n** Violacion du drêt d’ôtor\n** Comentèros enformacions a sè que vant pas avouéc\n** Nom d’utilisator que vat pas avouéc\n** Enformacions que pôvont étre difamatouères",
+       "revdelete-otherreason": "Ôtra rêson ou ben rêson de més :",
        "revdelete-reasonotherlist": "Ôtra rêson",
        "revdelete-edit-reasonlist": "Changiér les rêsons de suprèssion",
        "revdelete-offender": "Ôtor de la vèrsion :",
-       "suppressionlog": "Jornal de les suprèssions",
+       "suppressionlog": "Jornâl de les rèprèssions",
        "suppressionlogtext": "Vê-que na lista de les suprèssions et des blocâjos qu’ant de contegnu cachiê ux administrators.\nVêde la [[Special:BlockList|lista des blocâjos]] por la lista des banissements et des blocâjos que sont ora actifs.",
        "mergehistory": "Fusionar los historicos de les pâges",
-       "mergehistory-header": "Ceta pâge vos pèrmèt de fusionar des vèrsions de l’historico d’una pâge d’origina vers na pâge novèla.\nAssurâd-vos que cél changement consèrverat la continuitât de l’historico de la pâge.",
+       "mergehistory-header": "Cela pâge vos pèrmèt de fusionar de vèrsions de l’historico d’una pâge d’origina vers na pâge novèla.\nAssurâd-vos que cél changement consèrverat la continuitât de l’historico de la pâge.",
        "mergehistory-box": "Fusionar les vèrsions de doves pâges :",
        "mergehistory-from": "Pâge d’origina :",
        "mergehistory-into": "Pâge de dèstinacion :",
        "mergehistory-list": "Historico des changements que pôvont étre fusionâs",
-       "mergehistory-merge": "Cetes vèrsions de [[:$1]] pôvont étre fusionâyes dedens [[:$2]].\nEmpleyéd la colona de botons de chouèx por fusionar ren que les vèrsions fêtes du comencement tant qu’a la dâta spècifiâye.\nNotâd que l’usâjo des lims de navigacion rebeterat a zérô cela colona.",
+       "mergehistory-merge": "Celes vèrsions-que de [[:$1]] pôvont étre fusionâyes dedens [[:$2]].\nEmpleyéd la colona de botons de chouèx por fusionar mas que les vèrsions fêtes dês lo comencement tant qu’a la dâta spècifiâye.\nNotâd que l’usâjo des lims de navegacion rebeterat a zérô cela colona.",
        "mergehistory-go": "Montrar los changements que pôvont étre fusionâs",
        "mergehistory-submit": "Fusionar les vèrsions",
        "mergehistory-empty": "Niona vèrsion pôt étre fusionâye.",
-       "mergehistory-done": "$3 vèrsion{{PLURAL:$3||s}} de $1 fusionâye{{PLURAL:$3||s}} avouéc reusséta dedens [[:$2]].",
-       "mergehistory-fail": "Y at pas moyen de fâre la fusion des historicos, se vos plét tornâd chouèsir la pâge et pués los paramètros de dâta.",
+       "mergehistory-done": "$3 vèrsion{{PLURAL:$3||s}} de $1 {{PLURAL:$3|est étâye fusionâye|sont étâye fusionâyes}} dedens [[:$2]].",
+       "mergehistory-fail": "Y at pas moyen de fâre la fusion des historicos, se vos plét tornâd chouèsir la pâge et pués los paramètros de temps.",
+       "mergehistory-fail-bad-timestamp": "L’horodatâjo est pas justo.",
+       "mergehistory-fail-invalid-source": "La pâge d’origina est pas justa.",
+       "mergehistory-fail-invalid-dest": "La pâge de dèstinacion est pas justa.",
+       "mergehistory-fail-no-change": "La fusion des historicos at fusionâ gins de vèrsion. Se vos plét, tornâd chouèsir la pâge et pués los paramètros de temps.",
+       "mergehistory-fail-permission": "Drêts ensufisents por fusionar los historicos.",
+       "mergehistory-fail-self-merge": "Les pâges d’origina et de dèstinacion sont pariéres.",
+       "mergehistory-fail-timestamps-overlap": "Les vèrsions d’origina cavalont siuvont les vèrsions de dèstinacion.",
+       "mergehistory-fail-toobig": "Y at pas moyen de fâre la fusion des historicos, un nombro de {{PLURAL:$1|vèrsions}} d’amont la limita de $1 devrêt étre dèplaciê.",
        "mergehistory-no-source": "La pâge d’origina $1 ègziste pas.",
        "mergehistory-no-destination": "La pâge de dèstinacion $1 ègziste pas.",
        "mergehistory-invalid-source": "La pâge d’origina dêt avêr un titro justo.",
        "mergehistory-comment": "[[:$1]] fusionâye dedens [[:$2]] : $3",
        "mergehistory-same-destination": "Les pâges d’origina et de dèstinacion pôvont pas étre la méma",
        "mergehistory-reason": "Rêson :",
-       "mergelog": "Jornal de les fusions",
+       "mergelog": "Jornâl de les fusions",
        "revertmerge": "Sèparar",
        "mergelogpagetext": "Vê-que na lista de les fusions les ples novèles de l’historico d’una pâge dedens celi d’un’ôtra.",
        "history-title": "Historico de les vèrsions de « $1 »",
        "difference-multipage": "(Difèrences entre les pâges)",
        "lineno": "Legne $1 :",
        "compareselectedversions": "Comparar les vèrsions chouèsies",
-       "showhideselectedversions": "Montrar / cachiér les vèrsions chouèsies",
+       "showhideselectedversions": "Changiér la visibilitât de les vèrsions chouèsies",
        "editundo": "dèfâre",
        "diff-empty": "(Niona difèrence)",
-       "diff-multi-manyusers": "({{PLURAL:$1|Na vèrsion entèrmèdièra|$1 vèrsions entèrmèdières}} per més de $2 utilisator{{PLURAL:$2||s}} {{PLURAL:$1|est pas montrâye|sont pas montrâyes}})",
-       "difference-missing-revision": "{{PLURAL:$2|Na vèrsion|$2 vèrsions}} de cela difèrence ($1) {{PLURAL:$2|est pas étâye trovâye|sont pas étâyes trovâyes}}.\n\nEn g·ènèral cen arreve en siuvent un lim d’una dif dèpassâye de vers na pâge qu’est étâye suprimâye.\nVos pouede trovar més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
+       "diff-multi-sameuser": "({{PLURAL:$1|Na vèrsion entèrmèdièra per lo mém’utilisator pas montrâye|$1 vèrsions entèrmèdières per lo mém’utilisator pas montrâyes}})",
+       "diff-multi-otherusers": "({{PLURAL:$1|Na vèrsion entèrmèdièra|$1 vèrsions entèrmèdières}} per {{PLURAL:$2|un ôtr’utilisator|$2 utilisators}} pas montrâye{{PLURAL:$1||s}})",
+       "diff-multi-manyusers": "({{PLURAL:$1|Na vèrsion entèrmèdièra|$1 vèrsions entèrmèdières}} per més {{PLURAL:$2|d’un utilisator|de $2 utilisators}} {{PLURAL:$1|est pas montrâye|sont pas montrâyes}})",
+       "difference-missing-revision": "{{PLURAL:$2|Na vèrsion|$2 vèrsions}} de cela difèrence ($1) {{PLURAL:$2|est pas étâye trovâye|sont pas étâyes trovâyes}}.\n\nEn g·ènèrâl cen arreve en siuvent un lim dèpassâ d’una dif de vers na pâge qu’est étâye suprimâye.\nVos pouede trovar més de dètalys dessus lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornâl de les suprèssions].",
        "searchresults": "Rèsultats de la rechèrche",
        "searchresults-title": "Rèsultats de la rechèrche por « $1 »",
        "titlematches": "Corrèspondances dedens los titros de les pâges",
        "notextmatches": "Niona corrèspondance dedens lo tèxto de les pâges",
        "prevn": "{{PLURAL:$1|$1}} devant",
        "nextn": "{{PLURAL:$1|$1}} aprés",
+       "prev-page": "pâge devant",
+       "next-page": "pâge aprés",
        "prevn-title": "$1 rèsultat{{PLURAL:$1||s}} devant",
        "nextn-title": "$1 rèsultat{{PLURAL:$1||s}} aprés",
        "shown-title": "Montrar $1 rèsultat{{PLURAL:$1||s}} per pâge",
        "viewprevnext": "Vêre ($1 {{int:pipe-separator}} $2) ($3)",
-       "searchmenu-exists": "'''Y at na pâge apelâye « [[:$1]] » sur ceti vouiqui.'''",
-       "searchmenu-new": "'''Fâre la pâge « [[:$1|$1]] » sur ceti vouiqui !'''",
+       "searchmenu-exists": "<strong>Y at na pâge apelâye « [[:$1]] » sur cél vouiqui.</strong> {{PLURAL:$2|0=|Vêde avouéc los ôtros rèsultats de voutra rechèrche.}}",
+       "searchmenu-new": "<strong>Fâre la pâge « [[:$1|$1]] » sur cél vouiqui !</strong> {{PLURAL:$2|0=|Vêde asse-ben la pâge trovâye avouéc voutra rechèrche.|Vêde avouéc los rèsultats de voutra rechèrche.}}",
        "searchprofile-articles": "Pâges de contegnu",
-       "searchprofile-images": "Multimèdia",
+       "searchprofile-images": "Multimèdiâ",
        "searchprofile-everything": "Tot",
-       "searchprofile-advanced": "Rechèrche avanciêe",
+       "searchprofile-advanced": "Avanciê",
        "searchprofile-articles-tooltip": "Rechèrchiér dedens $1",
-       "searchprofile-images-tooltip": "Rechèrchiér des fichiérs",
+       "searchprofile-images-tooltip": "Rechèrchiér de fichiérs",
        "searchprofile-everything-tooltip": "Rechèrchiér dedens tot lo contegnu (les pâges de discussion avouéc)",
        "searchprofile-advanced-tooltip": "Chouèsir los èspâços de noms por la rechèrche",
        "search-result-size": "$1 ($2 mot{{PLURAL:$2||s}})",
-       "search-result-category-size": "$1 membro{{PLURAL:$1||s}} ($2 sot-catègorie{{PLURAL:$2||s}}, $3 fichiér{{PLURAL:$3||s}})",
+       "search-result-category-size": "$1 membro{{PLURAL:$1||s}} ($2 sot-catègori{{PLURAL:$2|a|es}}, $3 fichiér{{PLURAL:$3||s}})",
        "search-redirect": "(redirèccion dês $1)",
        "search-section": "(sèccion $1)",
-       "search-suggest": "Voléd-vos dére : $1",
+       "search-category": "(catègoria $1)",
+       "search-file-match": "(corrèspond u contegnu du fichiér)",
+       "search-suggest": "Vos voléd dére : $1",
+       "search-rewritten": "Viua des rèsultats por $1. Rechèrchiér $2 per contre.",
        "search-interwiki-caption": "Projèts frâres",
-       "search-interwiki-default": "Rèsultats dessus $1 :",
+       "search-interwiki-default": "Rèsultats de $1 :",
        "search-interwiki-more": "(més)",
-       "search-relatedarticle": "Aparentâ",
-       "searchrelated": "aparentâ",
+       "search-relatedarticle": "Rapondu",
+       "searchrelated": "rapondu",
        "searchall": "tot",
-       "showingresults": "Vua de '''$1''' rèsultat{{PLURAL:$1||s}} dês lo numerô '''$2'''.",
+       "showingresults": "Viua de <strong>$1</strong> rèsultat{{PLURAL:$1||s}} dês lo n° <strong>$2</strong>.",
+       "showingresultsinrange": "Viua de <strong>$1</strong> rèsultat{{PLURAL:$1||s}} dedens la sèria n° <strong>$2</strong> a n° <strong>$3</strong>.",
+       "search-showingresults": "{{PLURAL:$4|Rèsultat <strong>$1</strong> entre-mié <strong>$3</strong>|Rèsultats <strong>$1 a $2</strong>entre-mié <strong>$3</strong>}}",
        "search-nonefound": "Y at gins de rèsultat que corrèspond a la rechèrche.",
+       "search-nonefound-thiswiki": "Y at gins de rèsultat que corrèspond a la rechèrche sur cél seto.",
        "powersearch-legend": "Rechèrche avanciêe",
        "powersearch-ns": "Rechèrchiér dedens los èspâços de noms :",
        "powersearch-togglelabel": "Chouèsir :",
        "powersearch-toggleall": "Tôs",
        "powersearch-togglenone": "Pas yon",
+       "powersearch-remember": "Sè rapelar du chouèx por les rechèrches que vegnont",
        "search-external": "Rechèrche de defôr",
        "searchdisabled": "La rechèrche dessus {{SITENAME}} est dèsactivâye.\nPendent cél temps, vos pouede fâre na rechèrche avouéc Google.\nNotâd que lor endèxacion du contegnu de {{SITENAME}} pôt pas étre a jorn.",
        "search-error": "Na fôta est arrevâye en rechèrchient : $1",
        "preferences": "Prèferences",
        "mypreferences": "Prèferences",
        "prefs-edits": "Nombro de changements :",
+       "prefsnologintext2": "Se vos plét, branchiéd-vos por changiér voutres prèferences.",
        "prefs-skin": "Habelyâjo",
        "skin-preview": "Prèvêre",
        "datedefault": "Niona prèference",
        "prefs-user-pages": "Pâges utilisator",
        "prefs-personal": "Enformacions a sè",
        "prefs-rc": "Dèrriérs changements",
-       "prefs-watchlist": "Lista de siuvu",
-       "prefs-watchlist-days": "Nombro de jorns a montrar dedens la lista de siuvu :",
+       "prefs-watchlist": "Lista de gouârda",
+       "prefs-editwatchlist": "Changiér la lista de gouârda",
+       "prefs-editwatchlist-label": "Changiér d’entrês de voutra lista de gouârda",
+       "prefs-editwatchlist-edit": "Vêre et enlevar de titros de voutra lista de gouârda",
+       "prefs-editwatchlist-raw": "Changiér la lista de gouârda en fôrma bruta",
+       "prefs-editwatchlist-clear": "Vouedar voutra lista de gouârda",
+       "prefs-watchlist-days": "Nombro de jorns a montrar dedens la lista de gouârda :",
        "prefs-watchlist-days-max": "Por lo més $1 jorn{{PLURAL:$1||s}}",
-       "prefs-watchlist-edits": "Nombro maximon de changements a montrar dedens la lista de siuvu ètendua :",
+       "prefs-watchlist-edits": "Nombro maximon de changements a montrar dedens la lista de gouârda èpatâye :",
        "prefs-watchlist-edits-max": "Nombro maximon : 1000",
-       "prefs-watchlist-token": "Jeton por la lista de siuvu :",
+       "prefs-watchlist-token": "Jeton por la lista de gouârda :",
        "prefs-misc": "De totes sôrtes",
        "prefs-resetpass": "Changiér lo contresegno",
-       "prefs-changeemail": "Changiér l’adrèce èlèctronica",
+       "prefs-changeemail": "Changiér enlevar l’adrèce èlèctronica",
        "prefs-setemail": "Dèfenir un’adrèce èlèctronica",
        "prefs-email": "Chouèx de mèssageria èlèctronica",
        "prefs-rendering": "Aparence",
        "saveprefs": "Encartar",
-       "restoreprefs": "Rètablir tota la configuracion per dèfôt",
+       "restoreprefs": "Rètablir tota la configuracion per dèfôt (dedens totes les sèccions)",
        "prefs-editing": "Changement",
        "rows": "Renches :",
        "columns": "Colones :",
        "searchresultshead": "Rechèrche",
-       "stub-threshold": "Limita d’amont por los <a href=\"#\" class=\"stub\">lims de vers los començons</a> (octèts) :",
+       "stub-threshold": "Lendâr por lo formatâjo des lims de vers los començons ($1) :",
+       "stub-threshold-sample-link": "ègzemplo",
        "stub-threshold-disabled": "Dèsactivâ",
        "recentchangesdays": "Nombro de jorns a montrar dedens los dèrriérs changements :",
        "recentchangesdays-max": "Por lo més $1 jorn{{PLURAL:$1||s}}",
        "recentchangescount": "Nombro de changements a montrar per dèfôt :",
-       "prefs-help-recentchangescount": "Los dèrriérs changements, los historicos de pâges et los jornals avouéc.",
+       "prefs-help-recentchangescount": "Los dèrriérs changements, los historicos de les pâges et los jornâls avouéc.",
+       "prefs-help-watchlist-token2": "Vê-que la cllâf secrèta du flux Vouèbe de voutra lista de gouârda.\nTôs celos que la cognessont porront liére voutra lista de gouârda, la comunicâd vêr pas.\n[[Special:ResetTokens|Cllicâd ique se vos la dête rebetar a zérô]].",
        "savedprefs": "Voutres prèferences sont étâyes encartâyes.",
+       "savedrights": "Los drêts d’utilisator de {{GENDER:$1|$1}} sont étâs encartâs.",
        "timezonelegend": "Fus horèro :",
        "localtime": "Hora locâla :",
-       "timezoneuseserverdefault": "Empleyér la valor du vouiqui per dèfôt ($1)",
+       "timezoneuseserverdefault": "Empleyér la valor per dèfôt du vouiqui ($1)",
        "timezoneuseoffset": "Ôtro (spècifiar lo dècalâjo)",
        "servertime": "Hora du sèrvior :",
-       "guesstimezone": "Empleyér la valor du navigator",
+       "guesstimezone": "Empleyér la valor du navegator",
        "timezoneregion-africa": "Africa",
        "timezoneregion-america": "Amèriques",
-       "timezoneregion-antarctica": "Antartica",
+       "timezoneregion-antarctica": "Antartico",
        "timezoneregion-arctic": "Artico",
        "timezoneregion-asia": "Asia",
-       "timezoneregion-atlantic": "Ocèan atlantico",
-       "timezoneregion-australia": "Ôstralie",
+       "timezoneregion-atlantic": "Ocèan Atlantico",
+       "timezoneregion-australia": "Ôstralia",
        "timezoneregion-europe": "Eropa",
-       "timezoneregion-indian": "Ocèan endien",
-       "timezoneregion-pacific": "Ocèan pacifico",
+       "timezoneregion-indian": "Ocèan Endien",
+       "timezoneregion-pacific": "Ocèan Pacefico",
        "allowemail": "Activar l’èxpèdicion de mèssâjos que vegnont d’ôtros utilisators",
        "prefs-searchoptions": "Rechèrche",
        "prefs-namespaces": "Èspâços de noms",
        "prefs-files": "Fichiérs",
        "prefs-custom-css": "CSS pèrsonalisâ",
        "prefs-custom-js": "JavaScript pèrsonalisâ",
-       "prefs-common-css-js": "CSS / JS partagiê por tôs los habelyâjos :",
-       "prefs-reset-intro": "Vos pouede empleyér ceta pâge por rètablir voutres prèferences a les valors du seto per dèfôt.\nCen pôt pas étre dèfêt.",
+       "prefs-common-css-js": "CSS et JavaScript partagiê por tôs los habelyâjos :",
+       "prefs-reset-intro": "Vos pouede empleyér cela pâge por rètablir voutres prèferences a les valors per dèfôt du seto.\nCen pôt pas étre dèfêt.",
        "prefs-emailconfirm-label": "Confirmacion de l’adrèce èlèctronica :",
        "youremail": "Adrèce èlèctronica :",
        "username": "Nom d’utilisat{{GENDER:$1|or|rice}} :",
        "prefs-registration": "Dâta d’encartâjo :",
        "yourrealname": "Veré nom :",
        "yourlanguage": "Lengoua :",
-       "yourvariant": "Varianta de la lengoua du contegnu :",
-       "prefs-help-variant": "Voutra varianta voutron ortografia prèferâye por fâre vêre les pâges de contegnu de ceti vouiqui.",
+       "yourvariant": "Vèrsion de la lengoua du contegnu :",
+       "prefs-help-variant": "Voutra vèrsion voutron ortografia prèferâye por fâre vêre les pâges de contegnu de cél vouiqui.",
        "yournick": "Signatura novèla :",
-       "prefs-help-signature": "Los comentèros sur les pâges de discussion dêvont étre signês avouéc « <nowiki>~~~~</nowiki> » que serat convèrti per voutra signatura et un horodatâjo.",
+       "prefs-help-signature": "Los comentèros dessus les pâges de discussion dêvont étre signês avouéc « <nowiki>~~~~</nowiki> » que serat convèrti per voutra signatura et un horodatâjo.",
        "badsig": "Signatura bruta pas justa.\nControlâd les balises HTML.",
        "badsiglength": "Voutra signatura est trop longe.\nDêt pas dèpassar $1 caractèro{{PLURAL:$1||s}}.",
-       "yourgender": "Sèxo :",
-       "gender-unknown": "Pas rensègnê",
-       "gender-male": "Masculin",
-       "gender-female": "Femenin",
-       "prefs-help-gender": "U chouèx : empleyê por acordar en sèxo los mèssâjos de la programeria.\nCel’enformacion serat publica.",
+       "yourgender": "Coment vos prèferâd étre dècrit ?",
+       "gender-unknown": "Quand farat mencion de vos, la programeria empleyerat de mots de genro netro, quand o est possiblo",
+       "gender-male": "Il est un utilisator",
+       "gender-female": "El est un’utilisatrice",
+       "prefs-help-gender": "Dèfenir cela prèference est u chouèx.\nLa programeria emplèye sa valor por s’adrèciér a vos et pués vos mencionar ux ôtros en empleyent lo bon genro gramaticâl.\nCel’enformacion serat publica.",
        "email": "Mèssageria èlèctronica",
-       "prefs-help-realname": "L’endicacion du veré nom est u chouèx.\nSe vos chouèsésséd de lo balyér, serat empleyê por vos atribuar voutres ôvres.",
-       "prefs-help-email": "L’endicacion de l’adrèce èlèctronica est u chouèx, mas el est nècèssèra por rebetar a zérô voutron contresegno, se vos vegnévâd a l’oubliar.",
-       "prefs-help-email-others": "Vos porriâd asse-ben chouèsir de lèssiér los ôtros sè veriér vers vos per mèssageria èlèctronica avouéc un lim sur voutra pâge utilisator ou ben de discussion sen que seye nècèssèro de rèvèlar voutron identitât.",
+       "prefs-help-realname": "Lo veré nom est u chouèx.\nS’il est balyê, serat empleyê por vos atribuar voutres ôvres.",
+       "prefs-help-email": "L’adrèce èlèctronica est u chouèx, mas el est nècèssèra por rebetar a zérô voutron contresegno, se vos vegnévâd a l’oubliar.",
+       "prefs-help-email-others": "Vos porriâd asse-ben chouèsir de lèssiér los ôtros lor veriér vers vos per mèssageria èlèctronica avouéc un lim sur voutra pâge utilisator ou ben de discussion sen que seye nècèssèro de rèvèlar voutron adrèce èlèctronica.",
        "prefs-help-email-required": "Un’adrèce èlèctronica est nècèssèra.",
        "prefs-info": "Enformacions de bâsa",
        "prefs-i18n": "Entèrnacionalisacion",
        "prefs-signature": "Signatura",
        "prefs-dateformat": "Format de la dâta",
        "prefs-timeoffset": "Dècalâjo horèro",
-       "prefs-advancedediting": "Chouèx avanciês",
+       "prefs-advancedediting": "Chouèx g·ènèrâls",
+       "prefs-editor": "Èditor",
+       "prefs-preview": "Apèrçu",
        "prefs-advancedrc": "Chouèx avanciês",
        "prefs-advancedrendering": "Chouèx avanciês",
        "prefs-advancedsearchoptions": "Chouèx avanciês",
        "prefs-advancedwatchlist": "Chouèx avanciês",
-       "prefs-displayrc": "Chouèx de vua",
-       "prefs-displaywatchlist": "Chouèx de vua",
+       "prefs-displayrc": "Chouèx de viua",
+       "prefs-displaywatchlist": "Chouèx de viua",
+       "prefs-tokenwatchlist": "Jeton",
        "prefs-diffs": "Difèrences",
-       "email-address-validity-valid": "L’adrèce èlèctronica semble justa",
-       "email-address-validity-invalid": "Buchiéd un’adrèce èlèctronica justa",
-       "userrights": "Administracion des drêts d’utilisator",
-       "userrights-lookup-user": "Administracion de les tropes d’utilisators",
+       "prefs-help-prefershttps": "Cela prèference serat èfèctiva pendent voutron branchement que vint.",
+       "prefswarning-warning": "Vos éd fêt de changements dens voutres prèferences que sont p’oncor étâs encartâs.\nSe vos quitâd cela pâge sen cllicar dessus « $1 », voutres prèferences seront pas betâyes a jorn.",
+       "prefs-tabs-navigation-hint": "Combina : vos pouede empleyér les fllèches de gôche et de drêta por navegar entre les ongllètes.",
+       "userrights": "Maneyance des drêts d’utilisator",
+       "userrights-lookup-user": "Maneyance de les tropes d’utilisators",
        "userrights-user-editname": "Buchiéd un nom d’utilisator :",
-       "editusergroup": "Changiér les tropes d’utilisators",
-       "editinguser": "Changement des drêts d’utilisator de l’utilisat{{GENDER:$1|or|rice}} '''[[User:$1|$1]]''' $2",
+       "editusergroup": "Changiér les tropes d’{{GENDER:$1|utilisators}}",
+       "editinguser": "Changement des drêts d’utilisator de l’utilisat{{GENDER:$1|or|rice}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Changiér les tropes d’utilisators",
-       "saveusergroups": "Encartar les tropes d’utilisators",
-       "userrights-groupsmember": "Membr{{GENDER:$2|o|a}} de :",
-       "userrights-groupsmember-auto": "{{GENDER:$2|Membro tacito|Membra tacita}} de :",
-       "userrights-groups-help": "Vos pouede changiér les tropes a lesquintes est cet’utilisat{{GENDER:$1|or|rice}} :\n* Na câsa pouentâye vôt dére que l’utilisat{{GENDER:$1|or|rice}} sè trôve dedens cela tropa.\n* Na câsa pas pouentâye vôt dére qu’y sè trôve pas.\n* Na petiôt’ètêla (*) endique que vos pouede pas enlevar cela tropa setout que vos l’éd apondua ou ben l’una l’ôtra.",
+       "saveusergroups": "Encartar les tropes d’{{GENDER:$1|utilisators}}",
+       "userrights-groupsmember": "Membro de :",
+       "userrights-groupsmember-auto": "Membro tacito de :",
+       "userrights-groups-help": "Vos pouede changiér les tropes que lor est {{GENDER:$1|cél utilisator|cel’utilisatrice}} :\n* Na câsa pouentâye vôt dére que l’utilisat{{GENDER:$1|or|rice}} sè trôve dedens cela tropa.\n* Na câsa pas pouentâye vôt dére qu’y sè trôve pas.\n* Na petiôt’ètêla (*) endique que vos pouede pas enlevar cela tropa setout que vos l’éd apondua ou ben l’una l’ôtra.",
        "userrights-reason": "Rêson :",
-       "userrights-no-interwiki": "Vos éd pas la pèrmission de changiér des drêts d’utilisator dessus d’ôtros vouiquis.",
+       "userrights-no-interwiki": "Vos éd pas la pèrmission de changiér de drêts d’utilisator sur d’ôtros vouiquis.",
        "userrights-nodatabase": "La bâsa de balyês « $1 » ègziste pas ou ben est pas locâla.",
-       "userrights-nologin": "Vos vos dête [[Special:UserLogin|branchiér]] avouéc un compto d’administrator por balyér des drêts d’utilisator.",
-       "userrights-notallowed": "Voutron compto at pas la pèrmission de balyér ou ben enlevar des drêts d’utilisator.",
+       "userrights-nologin": "Vos vos dête [[Special:UserLogin|branchiér]] avouéc un comptio d’administrator por balyér de drêts d’utilisator.",
+       "userrights-notallowed": "Vos éd pas la pèrmission de balyér enlevar de drêts d’utilisator.",
        "userrights-changeable-col": "Les tropes que vos pouede changiér",
        "userrights-unchangeable-col": "Les tropes que vos pouede pas changiér",
+       "userrights-conflict": "Disputa de changement de drêts d’utilisator ! Se vos plét, controlâd et pués confirmâd voutros changements.",
+       "userrights-removed-self": "Vos éd enlevâ los voutros drêts. Cen fât que vos pouede pas més arrevar a cela pâge.",
        "group": "Tropa :",
        "group-user": "Utilisators",
        "group-autoconfirmed": "Utilisators ôtoconfirmâs",
        "group-bot": "Robots",
        "group-sysop": "Administrators",
        "group-bureaucrat": "Grata-papiérs",
-       "group-suppress": "Supèrvisors",
+       "group-suppress": "Rèprèssiors",
        "group-all": "(tôs)",
        "group-user-member": "utilisat{{GENDER:$1|or|rice}}",
        "group-autoconfirmed-member": "utilisat{{GENDER:$1|or ôtoconfirmâ|rice ôtoconfirmâye}}",
        "group-bot-member": "{{GENDER:$1|robot}}",
        "group-sysop-member": "administrat{{GENDER:$1|or|rice}}",
        "group-bureaucrat-member": "{{GENDER:$1|grata-papiér}}",
-       "group-suppress-member": "supèrviso{{GENDER:$1|r|sa}}",
+       "group-suppress-member": "rèprèssio{{GENDER:$1|r|sa}}",
        "grouppage-user": "{{ns:project}}:Utilisators",
        "grouppage-autoconfirmed": "{{ns:project}}:Utilisators ôtoconfirmâs",
        "grouppage-bot": "{{ns:project}}:Robots",
-       "grouppage-sysop": "{{ns:project}}:Администраторар",
+       "grouppage-sysop": "{{ns:project}}:Administrators",
        "grouppage-bureaucrat": "{{ns:project}}:Grata-papiérs",
-       "grouppage-suppress": "{{ns:project}}:Supèrvisors",
+       "grouppage-suppress": "{{ns:project}}:Rèprèssiors",
        "right-read": "Liére les pâges",
        "right-edit": "Changiér les pâges",
-       "right-createpage": "Fâre des pâges (que sont pas des pâges de discussion)",
-       "right-createtalk": "Fâre des pâges de discussion",
-       "right-createaccount": "Fâre des comptos utilisator novéls",
-       "right-minoredit": "Marcar los changements coment petiôts",
-       "right-move": "Dèplaciér des pâges",
-       "right-move-subpages": "Dèplaciér des pâges avouéc lors sot-pâges",
-       "right-move-rootuserpages": "Dèplaciér des pâges utilisator principâles",
-       "right-movefile": "Dèplaciér des fichiérs",
+       "right-createpage": "Fâre de pâges (que sont pas de pâges de discussion)",
+       "right-createtalk": "Fâre de pâges de discussion",
+       "right-createaccount": "Fâre de comptios utilisator novéls",
+       "right-autocreateaccount": "Sè branchiér ôtomaticament avouéc un comptio utilisator de defôr",
+       "right-minoredit": "Marcar de changements coment petiôts",
+       "right-move": "Dèplaciér de pâges",
+       "right-move-subpages": "Dèplaciér de pâges avouéc lors sot-pâges",
+       "right-move-rootuserpages": "Dèplaciér de pâges utilisator principâles",
+       "right-move-categorypages": "Dèplaciér de pâges de catègoria",
+       "right-movefile": "Dèplaciér de fichiérs",
        "right-suppressredirect": "Pas fâre de redirèccion dês la pâge d’origina en dèplacient na pâge",
-       "right-upload": "Tèlèchargiér des fichiérs",
+       "right-upload": "Tèlèchargiér de fichiérs",
        "right-reupload": "Ècllafar un fichiér ègzistent",
        "right-reupload-own": "Ècllafar un fichiér ègzistent tèlèchargiê per sè-mémo",
-       "right-reupload-shared": "Ècllafar localament un fichiér present sur un dèpôt de fichiérs mèdia partagiê",
+       "right-reupload-shared": "Ècllafar localament un fichiér present sur un dèpôt de fichiérs multimèdiâ partagiê",
        "right-upload_by_url": "Tèlèchargiér un fichiér dês un’URL",
        "right-purge": "Purgiér lo cacho du seto d’una pâge sen confirmacion",
-       "right-autoconfirmed": "Changiér les pâges mié-protègiêes",
-       "right-bot": "Étre trètâ coment na mètoda ôtomatisâye",
-       "right-nominornewtalk": "Pas dècllenchiér la notificacion de mèssâjo novél quand fant un petiôt changement sur la pâge de discussion d’un utilisator",
-       "right-apihighlimits": "Empleyér des limites ples hôtes dedens les demandes API",
+       "right-autoconfirmed": "Pas étre afèctâ per les limitacions de dèbit liyêes a les adrèces IP",
+       "right-bot": "Étre trètâ coment un mècanismo ôtomatisâ",
+       "right-nominornewtalk": "Pas dècllenchiér la notificacion de mèssâjo novél quand fant un petiôt changement dessus la pâge de discussion d’un utilisator",
+       "right-apihighlimits": "Empleyér de limites ples hôtes dedens les demandes API",
        "right-writeapi": "Empleyér l’API d’ècritura",
-       "right-delete": "Suprimar des pâges",
-       "right-bigdelete": "Suprimar des pâges qu’ant un grôs historico",
-       "right-deletelogentry": "Suprimar et refâre un’entrâ spècifica du jornal",
+       "right-delete": "Suprimar de pâges",
+       "right-bigdelete": "Suprimar de pâges qu’ant un grôs historico",
+       "right-deletelogentry": "Suprimar et refâre un’entrâ spècifica du jornâl",
        "right-deleterevision": "Suprimar et refâre na vèrsion spècifica d’una pâge",
-       "right-deletedhistory": "Vêre les entrâs suprimâyes de l’historico sen lor tèxto",
+       "right-deletedhistory": "Vêre les entrês suprimâyes de l’historico sen lor tèxto",
        "right-deletedtext": "Vêre lo tèxto suprimâ et los changements entre les vèrsions suprimâyes",
-       "right-browsearchive": "Rechèrchiér des pâges suprimâyes",
+       "right-browsearchive": "Rechèrchiér de pâges suprimâyes",
        "right-undelete": "Refâre na pâge",
-       "right-suppressrevision": "Revêre et refâre les vèrsions cachiêes ux administrators",
-       "right-suppressionlog": "Vêre los jornals privâs",
+       "right-suppressrevision": "Vêre, cachiér et pas més cachiér de vèrsions spècifiques de pâges por un utilisator quint que seye",
+       "right-viewsuppressed": "Vêre les vèrsions cachiêes por un utilisator quint que seye",
+       "right-suppressionlog": "Vêre los jornâls privâs",
        "right-block": "Blocar en ècritura d’ôtros utilisators",
-       "right-blockemail": "Empachiér un utilisator de mandar des mèssâjos",
+       "right-blockemail": "Empachiér un utilisator de mandar de mèssâjos",
        "right-hideuser": "Blocar un utilisator en cachient son nom u publico",
-       "right-ipblock-exempt": "Èvitar los blocâjos d’adrèces IP, los blocâjos ôtomaticos et los blocâjos de plages d’adrèces IP",
-       "right-proxyunbannable": "Èvitar los blocâjos ôtomaticos de proxis",
-       "right-unblockself": "Sè dèblocar lor-mémos",
-       "right-protect": "Changiér lo nivél de protèccion et pués changiér les pâges protègiêes",
-       "right-editprotected": "Changiér les pâges protègiêes (sen protèccion en cascâda)",
+       "right-ipblock-exempt": "Èvitar los blocâjos d’IP, los blocâjos ôtomaticos et los blocâjos de plages IP",
+       "right-unblockself": "Sè dèblocar sè-mémo",
+       "right-protect": "Changiér los nivéls de protèccion et pués changiér les pâges protègiêes en cascâda",
+       "right-editprotected": "Changiér les pâges protègiêes avouéc « {{int:protect-level-sysop}} »",
+       "right-editsemiprotected": "Changiér les pâges protègiêes avouéc « {{int:protect-level-autoconfirmed}} »",
+       "right-editcontentmodel": "Changiér lo modèlo de contegnu d’una pâge",
        "right-editinterface": "Changiér l’entèrface utilisator",
        "right-editusercssjs": "Changiér los fichiérs CSS et JavaScript d’ôtros utilisators",
        "right-editusercss": "Changiér los fichiérs CSS d’ôtros utilisators",
        "right-edituserjs": "Changiér los fichiérs JavaScript d’ôtros utilisators",
+       "right-editmyusercss": "Changiér los voutros fichiérs CSS utilisator",
+       "right-editmyuserjs": "Changiér los voutros fichiérs JavaScript utilisator",
+       "right-viewmywatchlist": "Vêre la voutra lista de gouârda",
+       "right-editmywatchlist": "Changiér la voutra lista de gouârda. Notâd que quârques accions apondront adés de pâges sen cél drêt.",
+       "right-viewmyprivateinfo": "Vêre les voutres balyês privâyes (per ègzemplo adrèce èlèctronica, veré nom)",
+       "right-editmyprivateinfo": "Changiér les voutres balyês privâyes (per ègzemplo adrèce èlèctronica, veré nom)",
+       "right-editmyoptions": "Changiér les voutres prèferences",
        "right-rollback": "Rèvocar rêdo los changements du dèrriér utilisator qu’at changiê na pâge particuliére",
-       "right-markbotedits": "Marcar des changements rèvocâs coment étent étâs fêts per un robot",
+       "right-markbotedits": "Marcar de changements rèvocâs coment étent étâs fêts per un robot",
        "right-noratelimit": "Pas étre afèctâ per les limites de quota",
-       "right-import": "Importar des pâges dês d’ôtros vouiquis",
-       "right-importupload": "Importar des pâges dês un fichiér tèlèchargiê",
-       "right-patrol": "Marcar los changements des ôtros coment gouardâs",
+       "right-import": "Importar de pâges dês d’ôtros vouiquis",
+       "right-importupload": "Importar de pâges dês un fichiér tèlèchargiê",
+       "right-patrol": "Marcar de changements des ôtros coment gouardâs",
        "right-autopatrol": "Avêr los sins changements marcâs ôtomaticament coment gouardâs",
-       "right-patrolmarks": "Vêre les mârques de gouârda dedens los dèrriérs changements",
+       "right-patrolmarks": "Vêre los marcâjos de gouârda dedens los dèrriérs changements",
        "right-unwatchedpages": "Vêre na lista de les pâges pas siuvues",
        "right-mergehistory": "Fusionar los historicos de les pâges",
        "right-userrights": "Changiér tôs los drêts d’un utilisator",
-       "right-userrights-interwiki": "Changiér los drêts d’utilisator des utilisators que sont sur un ôtro vouiqui",
-       "right-siteadmin": "Vèrrolyér et dèvèrrolyér la bâsa de balyês",
+       "right-userrights-interwiki": "Changiér los drêts d’utilisator dutilisators que sont sur un ôtro vouiqui",
+       "right-siteadmin": "Cotar et dècotar la bâsa de balyês",
        "right-override-export-depth": "Èxportar les pâges avouéc les pâges liyêes tant qu’a na provondior de 5 nivéls",
        "right-sendemail": "Mandar un mèssâjo ux ôtros utilisators",
        "right-passwordreset": "Vêre los mèssâjos de remês’a zérô des contresegnos",
-       "newuserlogpage": "Jornal de les crèacions d’utilisators",
-       "newuserlogpagetext": "O est un jornal de les crèacions d’utilisators.",
-       "rightslog": "Jornal des drêts d’utilisator",
-       "rightslogtext": "O est un jornal des changements des drêts d’utilisator.",
+       "right-managechangetags": "Fâre et suprimar de [[Special:Tags|balises]] de la bâsa de balyês",
+       "right-applychangetags": "Aplicar les [[Special:Tags|balises]] avouéc los sins changements",
+       "right-changetags": "Apondre et enlevar de façon arbitrèra de [[Special:Tags|balises]] sur des vèrsions endividuèles et des entrês de jornâl",
+       "grant-generic": "Ensemblo de drêts « $1 »",
+       "grant-group-page-interaction": "Entèrag·ir avouéc de pâges",
+       "grant-group-file-interaction": "Entèrag·ir avouéc de fichiérs multimèdiâ",
+       "grant-group-watchlist-interaction": "Entèrag·ir avouéc voutra lista de gouârda",
+       "grant-group-email": "Mandar un mèssâjo",
+       "grant-group-high-volume": "Fâre un’activitât de grôs volumo",
+       "grant-group-customization": "Pèrsonalisacion et prèferences",
+       "grant-group-administration": "Fâre d’accions administratives",
+       "grant-group-other": "Activitâts de totes sôrtes",
+       "grant-blockusers": "Blocar et dèblocar d’utilisators",
+       "grant-createaccount": "Fâre de comptios",
+       "grant-createeditmovepage": "Fâre, changiér et dèplaciér de pâges",
+       "grant-delete": "Suprimar les pâges, les vèrsions et les entrês du jornâl",
+       "grant-editinterface": "Changiér l’èspâço de noms MediaWiki et pués lo CSS et JavaScript utilisator",
+       "grant-editmycssjs": "Changiér voutron CSS et JavaScript utilisator",
+       "grant-editmyoptions": "Changiér voutres prèferences utilisator",
+       "grant-editmywatchlist": "Changiér voutra lista de gouârda",
+       "grant-editpage": "Changiér de pâges ègzistentes",
+       "grant-editprotected": "Changiér de pâges protègiêes",
+       "grant-highvolume": "Changement de grôs volumo",
+       "grant-oversight": "Cachiér los utilisators et rèprimar les vèrsions",
+       "grant-patrol": "Gouardar los changements a les pâges",
+       "grant-protect": "Protègiér et enlevar la protèccion de pâges",
+       "grant-rollback": "Rèvocar de changements sur des pâges",
+       "grant-sendemail": "Mandar un mèssâjo ux ôtros utilisators",
+       "grant-uploadeditmovefile": "Tèlèchargiér, remplaciér et dèplaciér de fichiérs",
+       "grant-uploadfile": "Tèlèchargiér de novéls fichiérs",
+       "grant-basic": "Drêts de bâsa",
+       "grant-viewdeleted": "Vêre los fichiérs et les pâges suprimâs",
+       "grant-viewmywatchlist": "Vêre voutra lista de gouârda",
+       "newuserlogpage": "Jornâl de les crèacions de comptios utilisator",
+       "newuserlogpagetext": "O est un jornâl de les crèacions de comptios utilisator.",
+       "rightslog": "Jornâl des drêts d’utilisator",
+       "rightslogtext": "O est un jornâl des changements des drêts d’utilisator.",
        "action-read": "liére cela pâge",
        "action-edit": "changiér cela pâge",
-       "action-createpage": "fâre des pâges",
-       "action-createtalk": "fâre des pâges de discussion",
-       "action-createaccount": "fâre cél compto utilisator",
+       "action-createpage": "fâre de pâges",
+       "action-createtalk": "fâre de pâges de discussion",
+       "action-createaccount": "fâre cél comptio utilisator",
+       "action-autocreateaccount": "fâre ôtomaticament cél comptio utilisator de defôr",
+       "action-history": "vêre l’historico de cela pâge",
        "action-minoredit": "marcar cél changement coment petiôt",
        "action-move": "dèplaciér cela pâge",
-       "action-move-subpages": "dèplaciér cela pâge et les sines sot-pâges",
+       "action-move-subpages": "dèplaciér cela pâge et ses sot-pâges",
        "action-move-rootuserpages": "dèplaciér les pâges utilisator principâles",
+       "action-move-categorypages": "dèplaciér de pâges de catègoria",
        "action-movefile": "dèplaciér cél fichiér",
        "action-upload": "tèlèchargiér cél fichiér",
        "action-reupload": "ècllafar cél fichiér ègzistent",
        "action-delete": "suprimar cela pâge",
        "action-deleterevision": "suprimar cela vèrsion",
        "action-deletedhistory": "vêre l’historico suprimâ de cela pâge",
-       "action-browsearchive": "rechèrchiér des pâges suprimâyes",
+       "action-browsearchive": "rechèrchiér de pâges suprimâyes",
        "action-undelete": "refâre cela pâge",
        "action-suppressrevision": "revêre et refâre cela vèrsion cachiêe",
-       "action-suppressionlog": "vêre cél jornal privâ",
+       "action-suppressionlog": "vêre cél jornâl privâ",
        "action-block": "blocar en ècritura cél utilisator",
        "action-protect": "changiér los nivéls de protèccion por cela pâge",
        "action-rollback": "rèvocar rêdo los changements du dèrriér utilisator qu’at changiê na pâge particuliére",
-       "action-import": "importar cela pâge dês un ôtro vouiqui",
-       "action-importupload": "importar cela pâge dês un fichiér tèlèchargiê",
-       "action-patrol": "marcar lo changement des ôtros coment gouardâ",
+       "action-import": "importar de pâges dês un ôtro vouiqui",
+       "action-importupload": "importar de pâges dês un fichiér tèlèchargiê",
+       "action-patrol": "marcar de changements des ôtros coment gouardâs",
        "action-autopatrol": "avêr voutron changement marcâ coment gouardâ",
        "action-unwatchedpages": "vêre la lista de les pâges pas siuvues",
        "action-mergehistory": "fusionar l’historico de cela pâge",
        "action-userrights": "changiér tôs los drêts d’utilisator",
-       "action-userrights-interwiki": "changiér los drêts d’utilisator des utilisators que sont sur un ôtro vouiqui",
-       "action-siteadmin": "vèrrolyér ou ben dèvèrrolyér la bâsa de balyês",
-       "action-sendemail": "mandar des mèssâjos",
+       "action-userrights-interwiki": "changiér los drêts d’utilisator d’utilisators que sont sur d’ôtros vouiquis",
+       "action-siteadmin": "cotar dècotar la bâsa de balyês",
+       "action-sendemail": "mandar de mèssâjos",
+       "action-editmywatchlist": "changiér voutra lista de gouârda",
+       "action-viewmywatchlist": "vêre voutra lista de gouârda",
+       "action-viewmyprivateinfo": "vêre voutres enformacions privâyes",
+       "action-editmyprivateinfo": "changiér voutres enformacions privâyes",
+       "action-editcontentmodel": "changiér lo modèlo de contegnu d’una pâge",
+       "action-managechangetags": "fâre et suprimar de balises de la bâsa de balyês",
+       "action-applychangetags": "aplicar les balises avouéc voutros changements",
+       "action-changetags": "apondre et enlevar de façon arbitrèra de balises sur des vèrsions endividuèles et des entrês de jornâl",
        "nchanges": "$1 changement{{PLURAL:$1||s}}",
+       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|dês la dèrriére vesita}}",
        "enhancedrc-history": "historico",
        "recentchanges": "Dèrriérs changements",
        "recentchanges-legend": "Chouèx des dèrriérs changements",
-       "recentchanges-summary": "Siude los dèrriérs changements du vouiqui sur ceta pâge.",
-       "recentchanges-feed-description": "Siude los dèrriérs changements du vouiqui dedens ceti flux.",
-       "recentchanges-label-newpage": "Ceti changement at fêt na pâge novèla",
+       "recentchanges-summary": "Siude los dèrriérs changements du vouiqui sur cela pâge.",
+       "recentchanges-noresult": "Nion changement que corrèspond a celos critèros sur lo temps balyê.",
+       "recentchanges-feed-description": "Siude los dèrriérs changements du vouiqui dedens cél flux.",
+       "recentchanges-label-newpage": "Cél changement at fêt na pâge novèla",
        "recentchanges-label-minor": "O est un petiôt changement",
-       "recentchanges-label-bot": "Ceti changement est étâ fêt per un robot",
-       "recentchanges-label-unpatrolled": "Ceti changement est p’oncor étâ gouardâ",
-       "recentchanges-legend-newpage": "$1 - pâge novèla",
-       "rcnotefrom": "Vê-que los changements fêts dês lo '''$2''' (tant qu’a '''$1''' montrâs).",
-       "rclistfrom": "Montrar los novéls changements dês lo $3 $2",
+       "recentchanges-label-bot": "Cél changement est étâ fêt per un robot",
+       "recentchanges-label-unpatrolled": "Cél changement est p’oncor étâ gouardâ",
+       "recentchanges-label-plusminus": "La talye de la pâge at changiê de cél nombro d’octèts.",
+       "recentchanges-legend-heading": "<strong>Lègenda :</strong>",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vêde avouéc la [[Special:NewPages|lista de les pâges novèles]]).",
+       "recentchanges-submit": "Montrar",
+       "rcnotefrom": "Vê-que {{PLURAL:$5|lo changement fêt|los changements fêts}} dês lo <strong>$3 a $4</strong> (tant qu’a <strong>$1</strong> montrâs).",
+       "rclistfrom": "Montrar los novéls changements dês lo $3 a $2",
        "rcshowhideminor": "$1 los petiôts changements",
        "rcshowhideminor-show": "Montrar",
        "rcshowhideminor-hide": "Cachiér",
        "rcshowhidebots": "$1 los robots",
        "rcshowhidebots-show": "Montrar",
        "rcshowhidebots-hide": "Cachiér",
-       "rcshowhideliu": "$1 los utilisators branchiês",
+       "rcshowhideliu": "$1 los utilisators encartâs",
+       "rcshowhideliu-show": "Montrar",
        "rcshowhideliu-hide": "Cachiér",
        "rcshowhideanons": "$1 los utilisators anonimos",
        "rcshowhideanons-show": "Montrar",
        "rcshowhideanons-hide": "Cachiér",
        "rcshowhidepatr": "$1 los changements gouardâs",
-       "rcshowhidemine": "$1 los mins changements",
+       "rcshowhidepatr-show": "Montrar",
+       "rcshowhidepatr-hide": "Cachiér",
+       "rcshowhidemine": "$1 mos changements",
        "rcshowhidemine-show": "Montrar",
        "rcshowhidemine-hide": "Cachiér",
-       "rclinks": "Montrar los $1 dèrriérs changements fêts pendent los $2 jorns passâs<br />$3",
+       "rcshowhidecategorization": "$1 la catègorisacion de les pâges",
+       "rcshowhidecategorization-show": "Montrar",
+       "rcshowhidecategorization-hide": "Cachiér",
+       "rclinks": "Montrar los $1 dèrriérs changements fêts pendent los $2 jorns passâs<br />$3.",
        "diff": "dif",
        "hist": "hist",
        "hide": "Cachiér",
        "newpageletter": "N",
        "boteditletter": "r",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|utilisator qu’est|utilisators que sont}} aprés siuvre]",
-       "rc_categories": "Limita de les catègories (sèparacion avouéc « | »)",
-       "rc_categories_any": "Totes",
+       "rc_categories": "Limitar a les catègories (sèparâyes per « | ») :",
+       "rc_categories_any": "Yona de les chouèsies",
        "rc-change-size-new": "$1 octèt{{PLURAL:$1||s}} aprés changement",
        "newsectionsummary": "/* $1 */ novèla sèccion",
-       "rc-enhanced-expand": "Fâre vêre los dètalys",
+       "rc-enhanced-expand": "Montrar los dètalys",
        "rc-enhanced-hide": "Cachiér los dètalys",
        "rc-old-title": "fêta avouéc lo titro originâl « $1 »",
-       "recentchangeslinked": "Changements liyês",
-       "recentchangeslinked-feed": "Changements liyês",
-       "recentchangeslinked-toolbox": "Changements liyês",
-       "recentchangeslinked-title": "Changements liyês a « $1 »",
-       "recentchangeslinked-summary": "O est na lista des dèrriérs changements sur les pâges liyêes a na pâge spècifiâye (sur los membros d’una catègorie spècifiâye).\nLes pâges de voutra [[Special:Watchlist|lista de siuvu]] sont en '''grâs'''.",
+       "recentchangeslinked": "Changements rapondus",
+       "recentchangeslinked-feed": "Changements rapondus",
+       "recentchangeslinked-toolbox": "Changements rapondus",
+       "recentchangeslinked-title": "Changements rapondus a « $1 »",
+       "recentchangeslinked-summary": "O est na lista des dèrriérs changements sur les pâges que sont liyêes a na pâge spècifiâye (ou ben sur los membros d’una catègoria spècifiâye).\nLes pâges de voutra [[Special:Watchlist|lista de gouârda]] sont en <strong>grôs</strong>.",
        "recentchangeslinked-page": "Nom de la pâge :",
-       "recentchangeslinked-to": "Montrar pletout los changements sur les pâges liyêes a la pâge balyêe",
+       "recentchangeslinked-to": "Montrar per contre los changements de les pâges qu’ant un lim de vers la pâge balyêe",
+       "recentchanges-page-added-to-category": "[[:$1]] apondua a la catègoria",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] et {{PLURAL:$2|na pâge apondua|$2 pâges apondues}} a la catègoria",
+       "recentchanges-page-removed-from-category": "[[:$1]] enlevâye de la catègoria",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] et {{PLURAL:$2|na pâge enlevâye|$2 pâges enlevâyes}} de la catègoria",
+       "autochange-username": "Changement ôtomatico de MediaWiki",
        "upload": "Tèlèchargiér un fichiér",
        "uploadbtn": "Tèlèchargiér lo fichiér",
        "reuploaddesc": "Anular lo tèlèchargement et pués tornar u formulèro de tèlèchargement",
        "upload-tryagain": "Mandar la dèscripcion du fichiér changiê",
        "uploadnologin": "Pas branchiê(ye)",
-       "uploadnologintext": "Vos dête étre [[Special:UserLogin|branchiê(ye)]] por povêr tèlèchargiér des fichiérs.",
-       "upload_directory_missing": "Lo rèpèrtouèro de tèlèchargement ($1) est manquent et at pas possu étre fêt per lo sèrvior Vouèbe.",
-       "upload_directory_read_only": "Lo rèpèrtouèro de tèlèchargement ($1) est pas accèssiblo en ècritura dês lo sèrvior Vouèbe.",
+       "uploadnologintext": "Se vos plét, vos vos dête $1 por povêr tèlèchargiér de fichiérs.",
+       "upload_directory_missing": "Lo rèpèrtouèro de tèlèchargement ($1) est entrovâblo et at pas possu étre fêt per lo sèrvior Vouèbe.",
+       "upload_directory_read_only": "Lo rèpèrtouèro de tèlèchargement ($1) est pas enscriptiblo dês lo sèrvior Vouèbe.",
        "uploaderror": "Fôta pendent lo tèlèchargement",
-       "upload-recreate-warning": "'''Atencion : un fichiér avouéc cél nom est étâ suprimâ ou ben dèplaciê.'''\n\nPor comoditât, lo jornal de les suprèssions et des dèplacements de cela pâge est balyê ce-desot :",
-       "uploadtext": "Empleyéd lo formulèro ce-desot por tèlèchargiér des fichiérs.\nPor vêre ou ben rechèrchiér des fichiérs tèlèchargiês dês devant, vêde la [[Special:FileList|lista des fichiérs tèlèchargiês]]. Los (re-)tèlèchargements sont asse-ben encartâs sur lo [[Special:Log/upload|jornal des tèlèchargements]], et les suprèssions sur lo [[Special:Log/delete|jornal de les suprèssions]].\n\nPor entrebetar un fichiér dedens na pâge, empleyéd un lim de yona de cetes fôrmes :\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichiér.jpg]]</nowiki></code>''' por empleyér la vèrsion en plêna largior du fichiér\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichiér.png|200px|thumb|left|tèxto dèscriptif]]</nowiki></code>''' por empleyér na figura de 200 pixèls de lârjo dedens na bouèt’a gôche avouéc « tèxto dèscriptif » coment dèscripcion\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Fichiér.ogg]]</nowiki></code>''' por liyér tot drêt vers lo fichiér sen lo fâre vêre",
-       "upload-permitted": "Tipos de fichiérs ôtorisâs : $1.",
-       "upload-preferred": "Tipos de fichiérs prèferâs : $1.",
-       "upload-prohibited": "Tipos de fichiérs dèfendus : $1.",
-       "uploadlogpage": "Jornal des tèlèchargements",
-       "uploadlogpagetext": "Vê-que na lista des dèrriérs fichiérs tèlèchargiês.\nVêde la [[Special:NewFiles|galerie des novéls fichiérs]] por un apèrçu ples visuâl.",
+       "upload-recreate-warning": "<strong>Atencion : un fichiér avouéc cél nom est étâ suprimâ dèplaciê.</strong>\n\nLo jornâl de les suprèssions et des dèplacements de cela pâge est balyê ique por comoditât :",
+       "uploadtext": "Empleyéd lo formulèro ce-desot por tèlèchargiér de fichiérs.\nPor vêre rechèrchiér de fichiérs tèlèchargiês dês devant, vêde la [[Special:FileList|lista des fichiérs tèlèchargiês]]. Los (re-)tèlèchargements sont asse-ben encartâs dessus lo [[Special:Log/upload|jornâl des tèlèchargements]], et les suprèssions dessus lo [[Special:Log/delete|jornâl de les suprèssions]].\n\nPor rapondre un fichiér dedens na pâge, empleyéd un lim de yona de celes fôrmes-que :\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichiér.jpg]]</nowiki></code></strong> por empleyér la vèrsion en plêna largior du fichiér\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichiér.png|200px|thumb|left|tèxto dèscriptif]]</nowiki></code></strong> por empleyér na miniatura de 200 pixèls de lârjo dedens na bouèt’a gôche avouéc « tèxto dèscriptif » coment dèscripcion\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Fichiér.ogg]]</nowiki></code></strong> por liyér tot drêt vers lo fichiér sen lo fâre vêre",
+       "upload-permitted": "Tipo{{PLURAL:$2||s}} de fichiérs ôtorisâ{{PLURAL:$2||s}} : $1.",
+       "upload-preferred": "Tipo{{PLURAL:$2||s}} de fichiérs prèferâ{{PLURAL:$2||s}} : $1.",
+       "upload-prohibited": "Tipo{{PLURAL:$2||s}} de fichiérs dèfendu{{PLURAL:$2||s}} : $1.",
+       "uploadlogpage": "Jornâl des tèlèchargements",
+       "uploadlogpagetext": "Vê-que na lista des dèrriérs fichiérs tèlèchargiês.\nVêde la [[Special:NewFiles|galeria des novéls fichiérs]] por un apèrçu ples visuâl.",
        "filename": "Nom du fichiér",
        "filedesc": "Dèscripcion",
        "fileuploadsummary": "Dèscripcion :",
        "filestatus": "Statut du drêt d’ôtor :",
        "filesource": "Sôrsa :",
        "ignorewarning": "Ignorar la semonce et pués encartar lo fichiér dens tôs los câs",
-       "ignorewarnings": "Ignorar totes les semonces",
+       "ignorewarnings": "Ignorar les semonces quintes que seyont",
        "minlength1": "Los noms de fichiérs dêvont contegnir por lo muens na lètra.",
-       "illegalfilename": "Lo nom de fichiér « $1 » contint des caractèros dèfendus dedens los titros de pâges.\nSe vos plét, renomâd-lo et pués tornâd-lo tèlèchargiér.",
+       "illegalfilename": "Lo nom de fichiér « $1 » contint de caractèros dèfendus dedens los titros de pâges.\nSe vos plét, renomâd-lo et pués tornâd-lo tèlèchargiér.",
        "filename-toolong": "Los noms de fichiérs pôvont pas dèpassar 240 octèts.",
        "badfilename": "Lo nom du fichiér est étâ changiê en « $1 ».",
        "filetype-mime-mismatch": "L’èxtension du fichiér « .$1 » corrèspond pas u tipo MIME dècelâ du fichiér ($2).",
        "filetype-badmime": "Los fichiérs du tipo MIME « $1 » pôvont pas étre tèlèchargiês.",
-       "filetype-bad-ie-mime": "Lo fichiér pôt pas étre tèlèchargiê perce que serêt dècelâ coment « $1 » per Internet Explorer, cen que corrèspond a un tipo de fichiér dèfendu et pués pôt-étre dangerox.",
-       "filetype-unwanted-type": "'''« .$1 »''' est un tipo de fichiér pas volu.\n{{PLURAL:$3|Lo tipo de fichiér prèferâ est|Los tipos de fichiérs prèferâs sont}} $2.",
-       "filetype-banned-type": "'''« .$1 »''' {{PLURAL:$4|est pas un tipo de fichiér ôtorisâ|sont pas des tipos de fichiérs ôtorisâs}}.\n{{PLURAL:$3|Lo tipo de fichiér ôtorisâ est|Los tipos de fichiérs ôtorisâs sont}} $2.",
+       "filetype-bad-ie-mime": "Lo fichiér pôt pas étre tèlèchargiê, serêt dècelâ coment « $1 » per Internet Explorer, cen que corrèspond a un tipo de fichiér dèfendu et pués pôt-étre dangerox.",
+       "filetype-unwanted-type": "<strong>« .$1 »</strong> est un tipo de fichiér pas volu.\n{{PLURAL:$3|Lo tipo de fichiér prèferâ est|Los tipos de fichiérs prèferâs sont}} $2.",
+       "filetype-banned-type": "<strong>« .$1 »</strong> {{PLURAL:$4|est pas un tipo de fichiér ôtorisâ|sont pas de tipos de fichiérs ôtorisâs}}.\n{{PLURAL:$3|Lo tipo de fichiér ôtorisâ est|Los tipos de fichiérs ôtorisâs sont}} $2.",
        "filetype-missing": "Lo fichiér at gins d’èxtension (coment « .jpg » per ègzemplo).",
        "empty-file": "Lo fichiér que vos éd mandâ ére vouedo.",
        "file-too-large": "Lo fichiér que vos éd mandâ ére trop grôs.",
        "hookaborted": "Lo changement que vos éd èprovâ de fâre est étâ anulâ per un’èxtension.",
        "illegal-filename": "Lo nom du fichiér est pas ôtorisâ.",
        "overwrite": "Ècllafar un fichiér ègzistent est pas ôtorisâ.",
-       "unknown-error": "Na fôta encognua est arrevâ.",
+       "unknown-error": "Na fôta encognua est arrevâye.",
        "tmp-create-error": "Y at pas moyen de fâre lo fichiér temporèro.",
        "tmp-write-error": "Fôta d’ècritura du fichiér temporèro.",
        "large-file": "O est recomandâ que los fichiérs seyont pas ples grôs que $1 ;\ncél fichiér fât $2.",
        "largefileserver": "Cél fichiér est ples grôs que lo sèrvior est configurâ por l’ôtorisar.",
        "emptyfile": "Lo fichiér que vos éd tèlèchargiê semble étre vouedo.\nCen pôt étre diu a na fôta dedens lo nom du fichiér.\nSe vos plét, controlâd que vos voléd franc tèlèchargiér cél fichiér.",
-       "windows-nonascii-filename": "Ceti vouiqui recognêt pas los noms de fichiérs avouéc des caractèros spèciâls.",
-       "fileexists": "Un fichiér avouéc cél nom ègziste ja, se vos plét controlâd <strong>[[:$1]]</strong> se vos éte pas de sûr de lo volêr changiér.\n[[$1|thumb]]",
-       "filepageexists": "La pâge de dèscripcion por cél fichiér est ja étâye fêta ique <strong>[[:$1]]</strong>, mas nion fichiér avouéc cél nom ègziste ora.\nLo rèsumâ que vos voléd buchiér aparêtrat pas sur la pâge de dèscripcion.\nPor o fâre, vos la devréd changiér a la man.\n[[$1|thumb]]",
-       "fileexists-extension": "Un fichiér avouéc un nom d’ense ègziste ja : [[$2|thumb]]\n* Nom du fichiér a tèlèchargiér : <strong>[[:$1]]</strong>\n* Nom du fichiér ègzistent : <strong>[[:$2]]</strong>\nSe vos plét, chouèsésséd-nen un ôtro.",
-       "fileexists-thumbnail-yes": "Lo fichiér semble étre un’émâge en talye rèduita ''(figura)''.\n[[$1|thumb]]\nSe vos plét, controlâd lo fichiér <strong>[[:$1]]</strong>.\nSe lo fichiér controlâ est la mém’émâge avouéc la talye originâla, y at pas fôta de tèlèchargiér na figura.",
-       "file-thumbnail-no": "Lo nom du fichiér comence per <strong>$1</strong>.\nSemble étre un’émâge en talye rèduita ''(figura)''.\nSe vos éd cel’émâge en plêna rèsolucion, tèlèchargiéd-la, ôtrament changiéd lo sin nom, se vos plét.",
+       "windows-nonascii-filename": "Cél vouiqui recognêt pas los noms de fichiérs avouéc des caractèros spèciâls.",
+       "fileexists": "Un fichiér avouéc cél nom ègziste ja, se vos plét controlâd <strong>[[:$1]]</strong> se {{GENDER:|vos}} éte pas de sûr d’o volêr changiér.\n[[$1|thumb]]",
+       "filepageexists": "La pâge de dèscripcion por cél fichiér est ja étâye fêta ique <strong>[[:$1]]</strong>, mas nion fichiér avouéc cél nom ègziste ora.\nLo rèsumâ que vos voléd buchiér aparêtrat pas dessus la pâge de dèscripcion.\nPor o fâre, vos la devréd changiér a la man.\n[[$1|thumb]]",
+       "fileexists-extension": "Un fichiér avouéc un nom d’ense ègziste ja : [[$2|thumb]]\n* Nom du fichiér a tèlèchargiér : <strong>[[:$1]]</strong>\n* Nom du fichiér ègzistent : <strong>[[:$2]]</strong>\nPôt-étre vos voléd empleyér un nom ples prôpro ?",
+       "fileexists-thumbnail-yes": "Lo fichiér semble étre un’émâge en talye rèduita <em>(miniatura)</em>.\n[[$1|thumb]]\nSe vos plét, controlâd lo fichiér <strong>[[:$1]]</strong>.\nSe lo fichiér controlâ est la mém’émâge avouéc la talye originâla, y at pas fôta de tèlèchargiér na miniatura de més.",
+       "file-thumbnail-no": "Lo nom du fichiér comence per <strong>$1</strong>.\nSemble étre un’émâge en talye rèduita <em>(miniatura)</em>.\nSe vos éd cel’émâge en hôta rèsolucion, tèlèchargiéd-la, ôtrament changiéd son nom, se vos plét.",
        "fileexists-forbidden": "Un fichiér avouéc cél nom ègziste ja et pôt pas étre ècllafâ.\nSe vos voléd adés tèlèchargiér voutron fichiér, se vos plét tornâd arriér et pués empleyéd un novél nom.\n[[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "Un fichiér avouéc cél nom ègziste ja dedens lo dèpôt de fichiérs partagiê.\nSe vos voléd adés tèlèchargiér voutron fichiér, se vos plét tornâd arriér et pués empleyéd un novél nom.\n[[File:$1|thumb|center|$1]]",
-       "file-exists-duplicate": "Cél fichiér est un doblo {{PLURAL:$1|de ceti fichiér|de cetos fichiérs}} :",
-       "file-deleted-duplicate": "Un fichiér pariér a ceti ([[:$1]]) est ja étâ suprimâ.\nVos devriâd controlar lo jornal de les suprèssions de cél fichiér devant que lo tornar tèlèchargiér.",
-       "uploadwarning": "Semonce pendent lo tèlèchargement",
+       "file-exists-duplicate": "Cél fichiér est un doblo de {{PLURAL:$1|cél fichiér|celos fichiérs}}-que :",
+       "file-deleted-duplicate": "Un fichiér pariér a ceti ([[:$1]]) est ja étâ suprimâ.\nVos devriâd controlar lo jornâl de les suprèssions de cél fichiér devant que lo tornar tèlèchargiér.",
+       "file-deleted-duplicate-notitle": "Un fichiér pariér a ceti est ja étâ suprimâ et pués lo titro rèprimâ.\nVos devriâd demandar a quârqu’un avouéc la possibilitât de vêre les balyês du fichiér rèprimâ por ègzamenar la situacion devant que lo tornar tèlèchargiér.",
+       "uploadwarning": "Atencion !",
        "uploadwarning-text": "Se vos plét, changiéd la dèscripcion du fichiér ce-desot et pués tornâd èprovar.",
        "savefile": "Encartar lo fichiér",
        "uploaddisabled": "Tèlèchargements dèsactivâs.",
        "copyuploaddisabled": "Tèlèchargement per URL dèsactivâ.",
        "uploaddisabledtext": "Los tèlèchargements de fichiérs sont dèsactivâs.",
        "php-uploaddisabledtext": "Los tèlèchargements de fichiérs sont dèsactivâs dedens PHP.\nSe vos plét, controlâd la configuracion de « file_uploads ».",
-       "uploadscripted": "Cél fichiér contint de code HTML ou ben un scripte que porrêt étre entèrprètâ a tôrt per un navigator Vouèbe.",
+       "uploadscripted": "Cél fichiér contint de code HTML ou ben un scripte que porrêt étre entèrprètâ a tôrt per un navegator Vouèbe.",
+       "upload-scripted-pi-callback": "Y at pas moyen de tèlèchargiér un fichiér que contint d’enstruccions de trètament de fôlye de stilo XML.",
+       "uploaded-script-svg": "Na piéce ècrivâbla « $1 » est étâye trovâye dedens lo fichiér SVG tèlèchargiê.",
+       "uploaded-hostile-svg": "CSS pas de sûr est étâ trovâ dens la piéce de stilo d’un fichiér SVG tèlèchargiê.",
+       "uploaded-event-handler-on-svg": "La dèfinicion d’atributs de maneyor d’èvènement <code>$1=\"$2\"</code> est pas ôtorisâye dedens los fichiérs SVG.",
+       "uploaded-href-attribute-svg": "Los atributs href dedens los fichiérs SVG sont ôtorisâs ren que por s’en rèferar a de cibes http:// ou ben https://, <code>&lt;$1 $2=\"$3\"&gt;</code> est étâ trovâ.",
+       "uploaded-href-unsafe-target-svg": "href de vers des balyês pas de sûr est étâ trovâ dedens lo fichiér SVG tèlèchargiê : URI ciba <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-animate-svg": "La balisa « animate » est étâye trovâye que porrêt changiér lo href en empleyent l’atribut « from » <code>&lt;$1 $2=\"$3\"&gt;</code> dedens lo fichiér SVG tèlèchargiê.",
+       "uploaded-setting-event-handler-svg": "La dèfinicion d’atributs de maneyor d’èvènement est dèfendua, <code>&lt;$1 $2=\"$3\"&gt;</code> est étâ trovâ dedens lo fichiér SVG tèlèchargiê.",
+       "uploaded-setting-href-svg": "L’usâjo de la balisa « set » por apondre un atribut « href » a la piéce parenta est dèfendu.",
+       "uploaded-wrong-setting-svg": "L’usâjo de la balisa « set » por apondre na ciba distanta/balyês/scripte a un atribut quint que seye est dèfendu. <code>&lt;set to=\"$1\"&gt;</code> est étâ trovâ dedens lo fichiér SVG tèlèchargiê.",
+       "uploaded-setting-handler-svg": "Los SVG que dèfenéssont l’atribut « handler » avouéc distant/balyês/scripte sont dèfendus. <code>$1=\"$2\"</code> est étâ trovâ dedens lo fichiér SVG tèlèchargiê.",
+       "uploaded-remote-url-svg": "Los SVG que dèfenéssont un atribut de stilo quint que seye avouéc un’URL distanta sont dèfendus. <code>$1=\"$2\"</code> est étâ trovâ dedens lo fichiér SVG tèlèchargiê.",
+       "uploaded-image-filter-svg": "Un filtro d’émâge avouéc URL est étâ trovâ : <code>&lt;$1 $2=\"$3\"&gt;</code> dedens lo fichiér SVG tèlèchargiê.",
+       "uploadscriptednamespace": "Cél fichiér SVG contint un èspâço de noms « $1 » pas ôtorisâ.",
+       "uploadinvalidxml": "Lo XML dedens lo fichiér tèlèchargiê at pas possu étre analisâ.",
        "uploadvirus": "Cél fichiér contint un virus !\nDètalys : $1",
-       "uploadjava": "O est un fichiér ZIP que contint un fichiér Java « .class ».\nLo tèlèchargement de fichiérs Java est pas ôtorisâ, pôvont èvitar des rèstriccions de sècuritât.",
+       "uploadjava": "O est un fichiér ZIP que contint un fichiér Java « .class ».\nLo tèlèchargement de fichiérs Java est pas ôtorisâ, pôvont èvitar de rèstriccions de sècuritât.",
        "upload-source": "Fichiér sôrsa",
        "sourcefilename": "Nom du fichiér sôrsa :",
        "sourceurl": "URL sôrsa :",
        "upload-maxfilesize": "Talye maximon du fichiér : $1",
        "upload-description": "Dèscripcion du fichiér",
        "upload-options": "Chouèx de tèlèchargement",
-       "watchthisupload": "Siuvre ceti fichiér",
+       "watchthisupload": "Siuvre cél fichiér",
        "filewasdeleted": "Un fichiér avouéc cél nom est ja étâ tèlèchargiê et pués suprimâ.\nVos devriâd controlar lo $1 devant que lo tornar tèlèchargiér.",
-       "filename-bad-prefix": "Lo nom du fichiér que vos tèlèchargiéd comence per '''« $1 »''' qu’est en g·ènèral un nom pas dèscriptif balyê ôtomaticament per los aparèlys-fotô numericos.\nSe vos plét, chouèsésséd un nom ples dèscriptif por voutron fichiér.",
+       "filename-thumb-name": "Cen ressemble a un titro de miniatura. Se vos plét, tèlèchargiéd gins de miniatura ja presenta sur lo mémo vouiqui. Ôtrament, se vos plét corregiéd lo nom du fichiér por que seye ples significatif et pués qu’il èye pas lo prèfixo de miniatura.",
+       "filename-bad-prefix": "Lo nom du fichiér que vos tèlèchargiéd comence per <strong>« $1 »</strong> qu’o est en g·ènèrâl un nom pas dèscriptif balyê ôtomaticament per los aparèlys-fotô numericos.\nSe vos plét, chouèsésséd-nen un nom ples dèscriptif.",
        "filename-prefix-blacklist": " #<!-- lèssiéd ceta legne justo d’ense --> <pre>\n# La sintaxa est ceta :\n#  * Tot tèxto que siut un « # » tant qu’a la fin de la legne est un comentèro.\n#  * Tota legne pas voueda est un prèfixo tipico de nom de fichiér balyê ôtomaticament per los aparèlys-fotô numericos :\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # quârques enfatâblos\nIMG # g·ènèrico\nJD # Jenoptik\nMGP # Pentax\nPICT # de totes sôrtes\n #</pre> <!-- lèssiéd ceta legne justo d’ense -->",
-       "upload-success-subj": "Tèlèchargement fêt avouéc reusséta",
-       "upload-success-msg": "Voutron tèlèchargement dês [$2] at reussi. Il est disponiblo ique : [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Problèmo pendent lo tèlèchargement",
-       "upload-failure-msg": "Y at avu un problèmo avouéc voutron tèlèchargement dês [$2] :\n\n$1",
-       "upload-warning-subj": "Semonce pendent lo tèlèchargement",
-       "upload-warning-msg": "Y at avu un problèmo avouéc voutron tèlèchargement dês [$2]. Vos pouede tornar u [[Special:Upload/stash/$1|formulèro de tèlèchargement]] por trovar la sina solucion.",
        "upload-proto-error": "Protocolo fôx",
        "upload-proto-error-text": "Lo tèlèchargement a distance at fôta d’URLs que començont per <code>http://</code> ou ben <code>ftp://</code>.",
        "upload-file-error": "Fôta de dedens",
        "upload-misc-error-text": "Na fôta encognua est arrevâye pendent lo tèlèchargement.\nSe vos plét, controlâd que l’URL est justa et accèssibla et pués tornâd èprovar.\nSe lo problèmo continue, veriéd-vos vers un [[Special:ListUsers/sysop|administrator]].",
        "upload-too-many-redirects": "L’URL contint trop de redirèccions",
        "upload-http-error": "Na fôta HTTP est arrevâye : $1",
-       "upload-copy-upload-invalid-domain": "Los tèlèchargements de copies sont pas disponiblos dês ceti domêno.",
+       "upload-copy-upload-invalid-domain": "La copia des tèlèchargements est pas disponibla dês cél domêno.",
+       "upload-foreign-cant-upload": "Cél vouiqui est pas configurâ por tèlèchargiér de fichiérs vers lo dèpôt de fichiérs de defôr demandâ.",
+       "upload-dialog-title": "Tèlèchargiér un fichiér",
+       "upload-dialog-button-cancel": "Anular",
+       "upload-dialog-button-done": "Fêt",
+       "upload-dialog-button-save": "Encartar",
+       "upload-dialog-button-upload": "Tèlèchargiér",
+       "upload-form-label-infoform-title": "Dètalys",
+       "upload-form-label-infoform-name": "Nom",
+       "upload-form-label-infoform-name-tooltip": "Un titro dèscriptif sen pariér por lo fichiér, que sèrvirat coment nom de fichiér. Vos pouede empleyér de lengâjo corent avouéc des èspâços. Pas rapondre l’èxtension du fichiér.",
+       "upload-form-label-infoform-description": "Dèscripcion",
+       "upload-form-label-infoform-description-tooltip": "Dècrire vito tot cen qu’y at de particuliér por cel’ôvra.\nPor na fotô, mencionar les chouses principâles que sont semondues, l’ocasion ou ben l’endrêt.",
+       "upload-form-label-usage-title": "Usâjo",
+       "upload-form-label-usage-filename": "Nom du fichiér",
+       "foreign-structured-upload-form-label-own-work": "Su l’ôtor de cel’ôvra",
+       "foreign-structured-upload-form-label-infoform-categories": "Catègories",
+       "foreign-structured-upload-form-label-infoform-date": "Dâta",
+       "foreign-structured-upload-form-label-own-work-message-local": "Confirmo que tèlèchârjo cél fichiér d’aprés les condicions d’usâjo et les politiques de licence de {{SITENAME}}.",
+       "foreign-structured-upload-form-label-not-own-work-message-local": "Se vos pouede pas tèlèchargiér cél fichiér d’aprés les politiques de {{SITENAME}}, se vos plét cllôde cela bouèta de dialogo et pués èprovâd un’ôtra mètoda.",
+       "foreign-structured-upload-form-label-not-own-work-local-local": "Vos pouede asse-ben èprovar la [[Special:Upload|pâge de tèlèchargement per dèfôt]].",
+       "foreign-structured-upload-form-label-own-work-message-default": "Compregno que tèlèchârjo cél fichiér vers un dèpôt partagiê. Confirmo qu’o fé d’aprés les condicions d’usâjo et les politiques de licence de ceti.",
+       "foreign-structured-upload-form-label-not-own-work-message-default": "Se vos pouede pas tèlèchargiér cél fichiér d’aprés les politiques du dèpôt partagiê, se vos plét cllôde cela bouèta de dialogo et pués èprovâd un’ôtra mètoda.",
+       "foreign-structured-upload-form-label-not-own-work-local-default": "Vos pouede asse-ben èprovar d’empleyér la [[Special:Upload|pâge de tèlèchargement de {{SITENAME}}]], se cél fichiér y pôt étre tèlèchargiê d’aprés lors politiques.",
+       "foreign-structured-upload-form-label-own-work-message-shared": "Cèrtifio étre lo dètentior des drêts d’ôtor sur cél fichiér, et j’accèpto de publeyér cél fichiér dessus Wikimedia Commons en lo betent irrèvocâblament desot licence [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Atribucion - Partâjo dens les Mémes Condicions 4.0] et pués j’accèpto les [https://wikimediafoundation.org/wiki/Terms_of_Use condicions d’usâjo].",
+       "foreign-structured-upload-form-label-not-own-work-message-shared": "Se vos éte pas lo dètentior des drêts d’ôtor sur cél fichiér ou ben que vos lo voléd publeyér desot na licence difèrenta, vos pouede empleyér l’[https://commons.wikimedia.org/wiki/Special:UploadWizard assistent de tèlèchargement de Commons].",
+       "foreign-structured-upload-form-label-not-own-work-local-shared": "Vos pouede asse-ben èprovar d’empleyér la [[Special:Upload|pâge de tèlèchargement de {{SITENAME}}]], se cél fichiér y pôt étre tèlèchargiê d’aprés lors politiques.",
        "backend-fail-stream": "Y at pas moyen de tramandar lo fichiér « $1 ».",
        "backend-fail-backup": "Y at pas moyen d’encartar lo fichiér « $1 ».",
        "backend-fail-notexists": "Lo fichiér $1 ègziste pas.",
        "backend-fail-copy": "Y at pas moyen de copiyér lo fichiér « $1 » vers « $2 ».",
        "backend-fail-move": "Y at pas moyen de dèplaciér lo fichiér « $1 » vers « $2 ».",
        "backend-fail-opentemp": "Y at pas moyen d’uvrir lo fichiér temporèro.",
-       "backend-fail-writetemp": "Y at pas moyen d’ècrire dedens lo fichiér temporèro.",
+       "backend-fail-writetemp": "Y at pas moyen d’ècrire sur lo fichiér temporèro.",
        "backend-fail-closetemp": "Y at pas moyen de cllôre lo fichiér temporèro.",
        "backend-fail-read": "Y at pas moyen de liére lo fichiér « $1 ».",
        "backend-fail-create": "Y at pas moyen d’ècrire lo fichiér « $1 ».",
-       "backend-fail-maxsize": "Y at pas moyen d’ècrire lo fichiér « $1 » perce qu’il est ples grôs {{PLURAL:$2|qu’un octèt|que $2 octèts}}.",
-       "backend-fail-readonly": "Ora lo sistèmo de stocâjo « $1 » est justo en lèctura. La rêson balyêe est : « ''$2'' »",
+       "backend-fail-maxsize": "Y at pas moyen d’ècrire lo fichiér « $1 »il est ples grôs {{PLURAL:$2|qu’un octèt|que $2 octèts}}.",
+       "backend-fail-readonly": "Ora lo sistèmo de stocâjo « $1 » est mas qu’en lèctura. La rêson balyêe est : <em>$2</em>",
        "backend-fail-synced": "Lo fichiér « $1 » est dens un ètat dèsordonâ dedens los sistèmos de stocâjo de dedens",
        "backend-fail-connect": "Y at pas moyen de sè branchiér u sistèmo de stocâjo « $1 ».",
        "backend-fail-internal": "Na fôta encognua est arrevâye dedens lo sistèmo de stocâjo « $1 ».",
        "backend-fail-contenttype": "Y at pas moyen de dètèrmenar lo tipo de contegnu du fichiér a stocar dedens « $1 ».",
        "backend-fail-batchsize": "Lo sistèmo de stocâjo at balyê na pârt de $1 {{PLURAL:$1|opèracion|opèracions}} de fichiér ; la limita est $2 {{PLURAL:$2|opèracion|opèracions}}.",
-       "backend-fail-usable": "Y at pas moyen de liére d’ècrire lo fichiér « $1 » a côsa de pèrmissions ensufisentes ou ben de rèpèrtouèros / conteniors manquents.",
-       "filejournal-fail-dbconnect": "Y at pas moyen de sè branchiér a la bâsa de balyês du jornal por lo sistèmo de stocâjo « $1 ».",
-       "filejournal-fail-dbquery": "Y at pas moyen de betar a jorn la bâsa de balyês du jornal por lo sistèmo de stocâjo « $1 ».",
-       "lockmanager-notlocked": "Y at pas moyen de dèvèrrolyér « $1 » ; il est pas vèrrolyê.",
+       "backend-fail-usable": "Y at pas moyen de liére d’ècrire lo fichiér « $1 » a côsa de drêts ensufisents ou ben de rèpèrtouèros de conteniors entrovâblos.",
+       "filejournal-fail-dbconnect": "Y at pas moyen de sè branchiér a la bâsa de balyês du jornâl por lo sistèmo de stocâjo « $1 ».",
+       "filejournal-fail-dbquery": "Y at pas moyen de betar a jorn la bâsa de balyês du jornâl por lo sistèmo de stocâjo « $1 ».",
+       "lockmanager-notlocked": "Y at pas moyen de dècotar « $1 » ; o est pas cotâ.",
        "lockmanager-fail-closelock": "Y at pas moyen de cllôre lo fichiér de vèrroly por « $1 ».",
        "lockmanager-fail-deletelock": "Y at pas moyen de suprimar lo fichiér de vèrroly por « $1 ».",
        "lockmanager-fail-acquirelock": "Y at pas moyen d’avêr lo vèrroly por « $1 ».",
        "lockmanager-fail-releaselock": "Y at pas moyen de relâchiér lo vèrroly por « $1 ».",
        "lockmanager-fail-db-bucket": "Y at pas moyen de sè veriér vers prod de bâses de balyês de vèrroly dedens la sèlye $1.",
        "lockmanager-fail-db-release": "Y at pas moyen de relâchiér los vèrrolys sur la bâsa de balyês $1.",
-       "lockmanager-fail-svr-acquire": "Y at pas moyen d’avêr des vèrrolys sur lo sèrvior $1.",
+       "lockmanager-fail-svr-acquire": "Y at pas moyen d’avêr de vèrrolys sur lo sèrvior $1.",
        "lockmanager-fail-svr-release": "Y at pas moyen de relâchiér los vèrrolys sur lo sèrvior $1.",
        "zip-file-open-error": "Na fôta est arrevâye pendent l’uvèrtura du fichiér por los contrôlos ZIP.",
        "zip-wrong-format": "Lo fichiér spècifiâ est pas un fichiér ZIP.",
        "zip-bad": "Lo fichiér est un fichiér ZIP corrompu ou ben ôtrament iliésiblo.\nPôt pas étre controlâ coment fôt por la sècuritât.",
-       "zip-unsupported": "Lo fichiér est un fichiér ZIP qu’emplèye des fonccionalitâts ZIP pas recognues per MediaWiki.\nPôt pas étre controlâ coment fôt por la sècuritât.",
+       "zip-unsupported": "Lo fichiér est un fichiér ZIP qu’emplèye de fonccionalitâts ZIP pas recognues per MediaWiki.\nPôt pas étre controlâ coment fôt por la sècuritât.",
        "uploadstash": "Cacho de tèlèchargement",
-       "uploadstash-summary": "Ceta pâge balye accès ux fichiérs que sont tèlèchargiês ou ben en côrs de tèlèchargement, mas sont p’oncor publeyês dedens lo vouiqui. Celos fichiérs sont p’oncor visiblos, solament por l’utilisator que los at tèlèchargiês.",
-       "uploadstash-clear": "Èfaciér los fichiérs en cacho",
+       "uploadstash-summary": "Cela pâge balye accès ux fichiérs que sont tèlèchargiês ou ben en cors de tèlèchargement, mas sont p’oncor publeyês dedens lo vouiqui. Celos fichiérs sont p’oncor visiblos, solament por l’utilisator que los at tèlèchargiês.",
+       "uploadstash-clear": "Vouedar los fichiérs en cacho",
        "uploadstash-nofiles": "Vos éd gins de fichiér en cacho.",
-       "uploadstash-badtoken": "L’ègzécucion de cel’accion at pas reussi, pôt-étre perce que voutros identifients de changement ant èxpirâ. Tornâd èprovar.",
-       "uploadstash-errclear": "L’èfacement des fichiérs at pas reussi.",
+       "uploadstash-badtoken": "L’ègzécucion de cel’accion at pas reussi. Pôt-étre perce que voutros identifients de changement ant èxpirâ. Se vos plét, tornâd èprovar.",
+       "uploadstash-errclear": "La vouegiê des fichiérs at pas reussi.",
        "uploadstash-refresh": "Rafrèchir la lista des fichiérs",
        "invalid-chunk-offset": "Dèplacement de bocon pas justo",
        "img-auth-accessdenied": "Accès refusâ",
-       "img-auth-nopathinfo": "PATH_INFO manquenta.\nVoutron sèrvior est pas configurâ por passar cel’enformacion.\nPôt étre bâsâye sur CGI et vêr pas recognetre « img_auth ».\nVêde https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
+       "img-auth-nopathinfo": "PATH_INFO entrovâblo.\nVoutron sèrvior est pas configurâ por passar cel’enformacion.\nPôt-étre que fonccione en CGI et recognêt vêr pas img_auth.\nVêde https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "img-auth-notindir": "Lo chemin demandâ est pas lo rèpèrtouèro de tèlèchargement configurâ.",
        "img-auth-badtitle": "Y at pas moyen de construire un titro justo dês « $1 ».",
        "img-auth-nologinnWL": "Vos éte pas branchiê et pués « $1 » est pas dedens la lista blanche.",
        "img-auth-nofile": "Lo fichiér « $1 » ègziste pas.",
-       "img-auth-isdir": "Vos èprovâd d’arrevar u rèpèrtouèro « $1 ».\nSolament l’accès ux fichiérs est pèrmês.",
+       "img-auth-isdir": "Vos èprovâd d’arrevar u rèpèrtouèro « $1 ».\nSolament l’accès ux fichiérs est pèrmetu.",
        "img-auth-streaming": "Lèctura en continu de « $1 ».",
-       "img-auth-public": "La fonccion de img_auth.php est de sortir des fichiérs d’un vouiqui privâ.\nCeti vouiqui est configurâ coment un vouiqui publico.\nPor na sècuritât pèrfèta, img_auth.php est dèsactivâ.",
-       "img-auth-noread": "L’utilisator at pas accès a la lèctura de « $1 ».",
+       "img-auth-public": "La fonccion d’img_auth.php est de sortir de fichiérs d’un vouiqui privâ.\nCél vouiqui est configurâ coment un vouiqui publico.\nPor na sècuritât parfèta, img_auth.php est dèsactivâ.",
+       "img-auth-noread": "L’utilisator at pas accès en lèctura de « $1 ».",
        "http-invalid-url": "URL pas justa : $1",
        "http-invalid-scheme": "Les URLs avouéc lo plan « $1 » sont pas recognues.",
        "http-request-error": "La demanda HTTP at pas reussi a côsa d’una fôta encognua.",
        "upload-curl-error6": "Y at pas moyen d’avengiér l’URL",
        "upload-curl-error6-text": "L’URL balyêe pôt pas étre avengiêe.\nSe vos plét, tornâd controlar que l’URL est justa et pués que lo seto est en legne.",
        "upload-curl-error28": "Dèlê dèpassâ pendent lo tèlèchargement",
-       "upload-curl-error28-text": "Lo seto at tardâ bien a rèpondre.\nSe vos plét, controlâd que lo seto est en legne, atende un pou et pués tornâd èprovar.\nVos pouede asse-ben èprovar a un’hora de muendra afluence.",
+       "upload-curl-error28-text": "Lo seto at tardâ ben a rèpondre.\nSe vos plét, controlâd que lo seto est en legne, atende-vos un petiôt moment et pués tornâd èprovar.\nVos pouede asse-ben èprovar a un’hora de muendra borrâ.",
        "license": "Licence :",
        "license-header": "Licence",
        "nolicense": "Pas yona chouèsia",
+       "licenses-edit": "Changiér los chouèx de licence",
        "license-nopreview": "(Apèrçu pas disponiblo)",
-       "upload_source_url": " (un’URL justa et accèssibla publicament)",
-       "upload_source_file": " (un fichiér sur voutron ordenator)",
-       "listfiles-summary": "Ceta pâge spèciâla montre tôs los fichiérs tèlèchargiês.\nQuand el est filtrâye per utilisator, solament los fichiérs que la vèrsion la ples novèla est étâye tèlèchargiêe per cél utilisator sont montrâs.",
-       "listfiles_search_for": "Rechèrchiér un nom de fichiér mèdia :",
+       "upload_source_url": "(lo fichiér que vos éd chouèsi dês un’URL justa et accèssibla publicament)",
+       "upload_source_file": "(lo fichiér que vos éd chouèsi dês voutron ordenator)",
+       "listfiles-delete": "suprimar",
+       "listfiles-summary": "Cela pâge spèciâla montre tôs los fichiérs tèlèchargiês.",
+       "listfiles_search_for": "Rechèrchiér un nom de fichiér multimèdiâ :",
+       "listfiles-userdoesnotexist": "Lo comptio utilisator « $1 » est pas encartâ.",
        "imgfile": "fichiér",
        "listfiles": "Lista de fichiérs",
-       "listfiles_thumb": "Figura",
+       "listfiles_thumb": "Miniatura",
        "listfiles_date": "Dâta",
        "listfiles_name": "Nom",
        "listfiles_user": "Utilisator",
        "listfiles_size": "Talye",
        "listfiles_description": "Dèscripcion",
        "listfiles_count": "Vèrsions",
+       "listfiles-show-all": "Rapondre les vielyes vèrsions de les émâges",
+       "listfiles-latestversion": "Vèrsion d’ora",
+       "listfiles-latestversion-yes": "Ouè",
+       "listfiles-latestversion-no": "Nan",
        "file-anchor-link": "Fichiér",
        "filehist": "Historico du fichiér",
-       "filehist-help": "Clicar sur na dâta / hora por vêre lo fichiér coment il ére a cél moment.",
+       "filehist-help": "Cllicar dessus na dâta et hora por vêre lo fichiér coment il ére a cél moment.",
        "filehist-deleteall": "suprimar tot",
        "filehist-deleteone": "suprimar",
        "filehist-revert": "rèvocar",
        "filehist-current": "d’ora",
-       "filehist-datetime": "Dâta / hora",
-       "filehist-thumb": "Figura",
-       "filehist-thumbtext": "Figura por la vèrsion du $2 a $3",
-       "filehist-nothumb": "Niona figura",
+       "filehist-datetime": "Dâta et hora",
+       "filehist-thumb": "Miniatura",
+       "filehist-thumbtext": "Miniatura por la vèrsion du $1",
+       "filehist-nothumb": "Niona miniatura",
        "filehist-user": "Utilisator",
        "filehist-dimensions": "Dimensions",
        "filehist-filesize": "Talye du fichiér",
        "filehist-comment": "Comentèro",
        "imagelinks": "Usâjo du fichiér",
-       "linkstoimage": "{{PLURAL:$1|Cela pâge-que emplèye|Celes $1 pâges-que emplèyont}} ceti fichiér :",
-       "linkstoimage-more": "Més {{PLURAL:$1|d’una pâge emplèye|de $1 pâges emplèyont}} ceti fichiér.\nCeta lista montre ren que {{PLURAL:$1|la premiére pâge qu’emplèye|les $1 premiéres pâges qu’emplèyont}} ceti fichiér.\nNa [[Special:WhatLinksHere/$2|lista complèta]] est disponibla.",
-       "nolinkstoimage": "Niona pâge emplèye ceti fichiér.",
-       "morelinkstoimage": "Vêde [[Special:WhatLinksHere/$1|més de lims]] de vers ceti fichiér.",
+       "linkstoimage": "{{PLURAL:$1|Cela pâge-que emplèye|Celes $1 pâges-que emplèyont}} cél fichiér :",
+       "linkstoimage-more": "Més {{PLURAL:$1|d’una pâge emplèye|de $1 pâges emplèyont}} cél fichiér.\nCela lista-que montre mas que {{PLURAL:$1|la premiére pâge qu’emplèye|les $1 premiéres pâges qu’emplèyont}} cél fichiér.\nNa [[Special:WhatLinksHere/$2|lista complèta]] est disponibla.",
+       "nolinkstoimage": "Niona pâge emplèye cél fichiér.",
+       "morelinkstoimage": "Vêde [[Special:WhatLinksHere/$1|més de lims]] de vers cél fichiér.",
        "linkstoimage-redirect": "$1 (redirèccion de fichiér) $2",
-       "duplicatesoffile": "{{PLURAL:$1|Cél fichiér-que est un doblo|Celos $1 fichiérs-que sont des doblos}} de ceti ([[Special:FileDuplicateSearch/$2|més de dètalys]]) :",
-       "sharedupload": "Ceti fichiér vint de $1 et pôt étre empleyê per d’ôtros projèts.",
-       "sharedupload-desc-there": "Ceti fichiér vint de $1 et pôt étre empleyê per d’ôtros projèts.\nSe vos plét, vêde la sina [$2 pâge de dèscripcion] por més d’enformacions.",
-       "sharedupload-desc-here": "Ceti fichiér vint de $1 et pôt étre empleyê per d’ôtros projèts.\nLa dèscripcion de la sina [$2 pâge de dèscripcion] est montrâye ce-desot.",
-       "sharedupload-desc-edit": "Ceti fichiér vint de $1 et pôt étre empleyê per d’ôtros projèts.\nPôt-étre vos voléd changiér la dèscripcion sur la sina [$2 pâge de dèscripcion].",
-       "sharedupload-desc-create": "Ceti fichiér vint de $1 et pôt étre empleyê per d’ôtros projèts.\nPôt-étre vos voléd changiér la dèscripcion sur la sina [$2 pâge de dèscripcion].",
+       "duplicatesoffile": "{{PLURAL:$1|Cél fichiér-que est un doblo|Celos $1 fichiérs-que sont de doblos}} de ceti ([[Special:FileDuplicateSearch/$2|més de dètalys]]) :",
+       "sharedupload": "Cél fichiér vint de $1 et pôt étre empleyê per d’ôtros projèts.",
+       "sharedupload-desc-there": "Cél fichiér vint de $1 et pôt étre empleyê per d’ôtros projèts.\nSe vos plét, vêde sa [$2 pâge de dèscripcion] por més d’enformacions.",
+       "sharedupload-desc-here": "Cél fichiér vint de $1 et pôt étre empleyê per d’ôtros projèts.\nLa dèscripcion dessus sa [$2 pâge de dèscripcion] est montrâye ce-desot.",
+       "sharedupload-desc-edit": "Cél fichiér vint de $1 et pôt étre empleyê per d’ôtros projèts.\nPôt-étre vos voléd changiér la dèscripcion dessus sa [$2 pâge de dèscripcion].",
+       "sharedupload-desc-create": "Cél fichiér vint de $1 et pôt étre empleyê per d’ôtros projèts.\nPôt-étre vos voléd changiér la dèscripcion dessus sa [$2 pâge de dèscripcion].",
        "filepage-nofile": "Nion fichiér de cél nom ègziste.",
        "filepage-nofile-link": "Nion fichiér de cél nom ègziste, mas vos en pouede [$1 tèlèchargiér yon].",
-       "uploadnewversion-linktext": "Tèlèchargiér na novèla vèrsion de ceti fichiér",
+       "uploadnewversion-linktext": "Tèlèchargiér na novèla vèrsion de cél fichiér",
        "shared-repo-from": "de : $1",
        "shared-repo": "un dèpôt partagiê",
        "filepage.css": "/* Lo code CSS betâ ique est encllu dens la pâge de dèscripcion du fichiér, et pués dens los vouiquis cliants ètrangiérs. */",
-       "upload-disallowed-here": "Vos pouede pas ècllafar ceti fichiér.",
+       "upload-disallowed-here": "Vos pouede pas ècllafar cél fichiér.",
        "filerevert": "Rèvocar $1",
        "filerevert-legend": "Rèvocar lo fichiér",
-       "filerevert-intro": "Vos éte prèst a rèvocar lo fichiér '''[[Media:$1|$1]]''' a la [$4 vèrsion du $2 a $3].",
+       "filerevert-intro": "Vos éte prèst a rèvocar lo fichiér <strong>[[Media:$1|$1]]</strong> a la [$4 vèrsion du $2 a $3].",
        "filerevert-comment": "Rêson :",
        "filerevert-defaultcomment": "Rèvocâ a la vèrsion du $1 a $2 ($3)",
        "filerevert-submit": "Rèvocar",
-       "filerevert-success": "'''[[Media:$1|$1]]''' est étâ rèvocâ a la [$4 vèrsion du $2 a $3].",
+       "filerevert-success": "<strong>[[Media:$1|$1]]</strong> est étâ rèvocâ a la [$4 vèrsion du $2 a $3].",
        "filerevert-badversion": "Y at gins de vèrsion locâla devant de cél fichiér avouéc l’horodatâjo balyê.",
        "filedelete": "Suprimar $1",
        "filedelete-legend": "Suprimar lo fichiér",
-       "filedelete-intro": "Vos éte prèst a suprimar lo fichiér '''[[Media:$1|$1]]''' et pués tot lo sin historico.",
-       "filedelete-intro-old": "Vos éte aprés suprimar la vèrsion de '''[[Media:$1|$1]]''' du [$4 $2 a $3].",
+       "filedelete-intro": "Vos éte prèst a suprimar lo fichiér <strong>[[Media:$1|$1]]</strong> et pués tot son historico.",
+       "filedelete-intro-old": "Vos éte aprés suprimar la vèrsion de <strong>[[Media:$1|$1]]</strong> du [$4 $2 a $3].",
        "filedelete-comment": "Rêson :",
        "filedelete-submit": "Suprimar",
-       "filedelete-success": "'''$1''' est étâ suprimâ.",
-       "filedelete-success-old": "La vèrsion de '''[[Media:$1|$1]]''' du $2 a $3 est étâye suprimâye.",
-       "filedelete-nofile": "'''$1''' ègziste pas.",
-       "filedelete-nofile-old": "Ègziste gins de vèrsion arch·ivâye de '''$1''' avouéc los atributs spècifiâs.",
-       "filedelete-otherreason": "Ôtra rêson / rêson de ples :",
+       "filedelete-success": "<strong>$1</strong> est étâ suprimâ.",
+       "filedelete-success-old": "La vèrsion de <strong>[[Media:$1|$1]]</strong> du $2 a $3 est étâye suprimâye.",
+       "filedelete-nofile": "<strong>$1</strong> ègziste pas.",
+       "filedelete-nofile-old": "Ègziste gins de vèrsion arch·ivâye de <strong>$1</strong> avouéc los atributs spècifiâs.",
+       "filedelete-otherreason": "Ôtra rêson ou ben rêson de més :",
        "filedelete-reason-otherlist": "Ôtra rêson",
-       "filedelete-reason-dropdown": "*Rêsons corentes de suprèssion\n** Violacion du drêt d’ôtor\n** Fichiér en doblo",
+       "filedelete-reason-dropdown": "*Rêsons comenes de suprèssion\n** Violacion du drêt d’ôtor\n** Fichiér en doblo",
        "filedelete-edit-reasonlist": "Changiér les rêsons de suprèssion",
-       "filedelete-maintenance": "La suprèssion et la rèstoracion de fichiérs est dèsactivâye por un moment pendent la mantegnence.",
+       "filedelete-maintenance": "La suprèssion et la rèstoracion de fichiérs est pas dèsactivâye por grant-temps pendent l’entretin.",
        "filedelete-maintenance-title": "Y at pas moyen de suprimar lo fichiér",
        "mimesearch": "Rechèrche per tipo MIME",
-       "mimesearch-summary": "Ceta pâge pèrmèt de filtrar los fichiérs per lor tipo MIME.\nEntrâ : ''tipodecontegnu''/''sot-tipo'', per ègzemplo <code>image/jpeg</code>.",
+       "mimesearch-summary": "Cela pâge vos pèrmèt de filtrar los fichiérs per lor tipo MIME.\nEntrâ : tipo_de_contegnu/sot-tipo ou ben tipo_de_contegnu/*, per ègzemplo <code>image/jpeg</code>.",
        "mimetype": "Tipo MIME :",
        "download": "tèlèchargiér",
        "unwatchedpages": "Pâges pas siuvues",
        "listredirects": "Lista de les redirèccions",
+       "listduplicatedfiles": "Lista de fichiérs en doblo",
+       "listduplicatedfiles-summary": "O est na lista de fichiérs yô que la vèrsion la ples novèla du fichiér est na copia de la vèrsion la ples novèla d’un ôtro fichiér. Solament los fichiérs locâls sont ègzamenâs.",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]] at [[$3|{{PLURAL:$2|un doblo|$2 doblos}}]].",
        "unusedtemplates": "Modèlos pas empleyês",
-       "unusedtemplatestext": "Ceta pâge liste totes les pâges de l’èspâço de noms « {{ns:template}} » que sont pas entrebetâyes dedens nion’ôtra pâge.\nOubliâd pas de controlar s’y at gins d’ôtro lim de vers los modèlos devant que los suprimar.",
+       "unusedtemplatestext": "Cela pâge liste totes les pâges de l’èspâço de noms « {{ns:template}} » que sont pas rapondues dedens nion’ôtra pâge.\nOubliâd pas de controlar s’y at gins d’ôtro lim de vers los modèlos devant que los suprimar.",
        "unusedtemplateswlh": "ôtros lims",
-       "randompage": "Pâge per hasârd",
-       "randompage-nopages": "Y at gins de pâge dedens {{PLURAL:$2|cet’èspâço|cetos èspâços}} de noms : $1.",
+       "randompage": "Pâge a l’hasârd",
+       "randompage-nopages": "Y at gins de pâge dedens {{PLURAL:$2|cél èspâço|celos èspâços}} de noms-que : $1.",
+       "randomincategory": "Pâge a l’hasârd dedens la catègoria",
+       "randomincategory-invalidcategory": "« $1 » est pas un nom de catègoria justo.",
+       "randomincategory-nopages": "Y at gins de pâge dedens la catègoria [[:Category:$1|$1]].",
+       "randomincategory-category": "Catègoria :",
+       "randomincategory-legend": "Pâge a l’hasârd dedens la catègoria",
        "randomincategory-submit": "Emmodar",
-       "randomredirect": "Redirèccion per hasârd",
-       "randomredirect-nopages": "Y at gins de pâge de redirèccion dedens l’èspâço de noms « $1 ».",
+       "randomredirect": "Redirèccion a l’hasârd",
+       "randomredirect-nopages": "Y at gins de redirèccion dedens l’èspâço de noms « $1 ».",
        "statistics": "Statistiques",
        "statistics-header-pages": "Statistiques de les pâges",
        "statistics-header-edits": "Statistiques des changements",
        "statistics-users-active-desc": "Utilisators qu’ant fêt por lo muens un’accion pendent {{PLURAL:$1|lo jorn passâ|los $1 jorns passâs}}",
        "pageswithprop": "Pâges avouéc na propriètât de pâge",
        "pageswithprop-legend": "Pâges avouéc na propriètât de pâge",
-       "pageswithprop-text": "Ceta pâge liste les pâges qu’emplèyont na propriètât de pâge particuliére.",
+       "pageswithprop-text": "Cela pâge liste les pâges qu’emplèyont na propriètât de pâge particuliére.",
        "pageswithprop-prop": "Nom de la propriètât :",
-       "pageswithprop-submit": "Alar trovar",
+       "pageswithprop-submit": "Emmodar",
+       "pageswithprop-prophidden-long": "valor de propriètât de tèxto long cachiêe ($1)",
+       "pageswithprop-prophidden-binary": "valor de propriètât binèra cachiêe ($1)",
        "doubleredirects": "Redirèccions dobles",
-       "doubleredirectstext": "Ceta pâge liste les pâges que redirijont vers d’ôtres pâges de redirèccion.\nChâque renche contint des lims de vers la premiére et la seconda redirèccion, et pués la ciba de la seconda redirèccion, cen que balye habituèlament la « veré » pâge ciba, de vers laquinta la premiére redirèccion devrêt pouentar.\nLes entrâs <del>barrâyes</del> sont étâyes solucionâyes.",
-       "double-redirect-fixed-move": "[[$1]] est étâye dèplaciêe.\nOra redirige vers [[$2]].",
-       "double-redirect-fixed-maintenance": "Correge la redirèccion dobla de [[$1]] vers [[$2]].",
+       "doubleredirectstext": "Cela pâge liste les pâges que redirijont vers d’ôtres pâges de redirèccion.\nChâque renche contint de lims de vers la premiére et la seconda redirèccion, et pués la ciba de la seconda redirèccion, cen que balye per habituda la « veré » pâge ciba que la premiére redirèccion devrêt pouentar.\nLes entrês <del>barrâyes</del> sont étâyes solucionâyes.",
+       "double-redirect-fixed-move": "[[$1]] est étâ dèplaciê.\nIl est étâ betâ a jorn ôtomaticament et redirige ora vers [[$2]].",
+       "double-redirect-fixed-maintenance": "Corrèccion ôtomatica de la redirèccion dobla de [[$1]] de vers [[$2]] dens un ovrâjo d’entretin.",
        "double-redirect-fixer": "Corrèctor de redirèccion",
        "brokenredirects": "Redirèccions câsses",
-       "brokenredirectstext": "Cetes redirèccions mènont vers des pâges pas ègzistentes :",
+       "brokenredirectstext": "Celes redirèccions-que mènont vers de pâges inègzistentes :",
        "brokenredirects-edit": "changiér",
        "brokenredirects-delete": "suprimar",
        "withoutinterwiki": "Pâges sen lims entèrlengoues",
-       "withoutinterwiki-summary": "Cetes pâges ant gins de lim de vers d’ôtres lengoues.",
+       "withoutinterwiki-summary": "Celes pâges-que ant gins de lim de vers des vèrsions en ôtres lengoues.",
        "withoutinterwiki-legend": "Prèfixo",
        "withoutinterwiki-submit": "Montrar",
-       "fewestrevisions": "Pâges avouéc lo muens de vèrsions",
+       "fewestrevisions": "Pâges les muens changiêes",
        "nbytes": "$1 octèt{{PLURAL:$1||s}}",
-       "ncategories": "$1 catègorie{{PLURAL:$1||s}}",
+       "ncategories": "$1 catègori{{PLURAL:$1|a|es}}",
        "ninterwikis": "$1 {{PLURAL:$1|lim entèrvouiqui|lims entèrvouiquis}}",
        "nlinks": "$1 lim{{PLURAL:$1||s}}",
        "nmembers": "$1 membro{{PLURAL:$1||s}}",
+       "nmemberschanged": "$1 → $2 membro{{PLURAL:$2||s}}",
        "nrevisions": "$1 vèrsion{{PLURAL:$1||s}}",
        "nimagelinks": "Empleyê dessus $1 pâge{{PLURAL:$1||s}}",
        "ntransclusions": "empleyê dessus $1 pâge{{PLURAL:$1||s}}",
        "specialpage-empty": "Y at gins de rèsultat a fâre vêre.",
        "lonelypages": "Pâges orfenes",
-       "lonelypagestext": "Cetes pâges sont ni pouentâyes ni entrebetâyes per d’ôtres pâges de {{SITENAME}}.",
+       "lonelypagestext": "Celes pâges-que sont ni liyêes ni transcllues per d’ôtres pâges de {{SITENAME}}.",
        "uncategorizedpages": "Pâges sen catègories",
        "uncategorizedcategories": "Catègories sen catègories",
        "uncategorizedimages": "Fichiérs sen catègories",
        "unusedimages": "Fichiérs pas empleyês",
        "wantedcategories": "Catègories demandâyes",
        "wantedpages": "Pâges demandâyes",
+       "wantedpages-summary": "Lista de les pâges inègzistentes qu’ant lo més de lims de vers lor, en èxcllusent les pâges qu’ant ren que de redirèccions pouentent vers lor. Por avêr na lista de les pâges inègzistentes qu’ant de redirèccions pouentent vers lor, vêde la [[{{#special:BrokenRedirects}}|lista de les redirèccions câsses]].",
        "wantedpages-badtitle": "Titro pas justo dedens l’ensemblo de rèsultats : $1",
        "wantedfiles": "Fichiérs demandâs",
-       "wantedfiletext-cat": "Cetos fichiérs sont empleyês, mas ègzistont pas. Los fichiérs de dèpôts de defôr pôvont étre listâs mémo s’ègzistont. Tôs celos fôx positifs seront <del>barrâs</del>. Et pués les pâges qu’apondont des fichiérs qu’ègzistont pas sont listâs dedens [[:$1]].",
-       "wantedfiletext-nocat": "Cetos fichiérs sont empleyês, mas ègzistont pas. Los fichiérs de dèpôts de defôr pôvont étre listâs mémo s’ègzistont. Tôs celos fôx positifs seront <del>barrâs</del>.",
+       "wantedfiletext-cat": "Celos fichiérs-que sont empleyês, mas ègzistont pas. Los fichiérs de dèpôts de defôr pôvont étre listâs mémo s’ègzistont. Tôs celos fôx positifs seront <del>barrâs</del>. Et pués les pâges qu’apondont de fichiérs qu’ègzistont pas sont listâs dedens [[:$1]].",
+       "wantedfiletext-cat-noforeign": "Celos fichiérs-que sont empleyês, mas ègzistont pas. Et pués les pâges qu’apondont de fichiérs qu’ègzistont pas sont listâs dedens [[:$1]].",
+       "wantedfiletext-nocat": "Celos fichiérs-que sont empleyês, mas ègzistont pas. Los fichiérs de dèpôts de defôr pôvont étre listâs mémo s’ègzistont. Tôs celos fôx positifs seront <del>barrâs</del>.",
+       "wantedfiletext-nocat-noforeign": "Celos fichiérs-que sont empleyês, mas ègzistont pas.",
        "wantedtemplates": "Modèlos demandâs",
        "mostlinked": "Pâges les ples liyêes",
        "mostlinkedcategories": "Catègories les ples liyêes",
-       "mostlinkedtemplates": "Modèlos los ples liyês",
+       "mostlinkedtemplates": "Modèlos los ples transcllus",
        "mostcategories": "Pâges avouéc lo més de catègories",
        "mostimages": "Fichiérs los ples liyês",
        "mostinterwikis": "Pâges avouéc lo més de lims entèrvouiquis",
-       "mostrevisions": "Pâges avouéc lo més de vèrsions",
+       "mostrevisions": "Pâges les ples changiêes",
        "prefixindex": "Totes les pâges que començont per...",
        "prefixindex-namespace": "Totes les pâges avouéc prèfixo (èspâço de noms $1)",
+       "prefixindex-submit": "Montrar",
+       "prefixindex-strip": "Enlevar lo prèfixo dedens la lista",
        "shortpages": "Pâges côrtes",
        "longpages": "Pâges longes",
-       "deadendpages": "Pâges en cul-de-sac",
-       "deadendpagestext": "Cetes pâges contegnont gins de lim de vers d’ôtres pâges de {{SITENAME}}.",
+       "deadendpages": "Pâges en charriére borgne",
+       "deadendpagestext": "Celes pâges-que contegnont gins de lim de vers d’ôtres pâges de {{SITENAME}}.",
        "protectedpages": "Pâges protègiêes",
-       "protectedpages-indef": "Ren que les protèccions sen fin",
-       "protectedpages-cascade": "Ren que les protèccions en cascâda",
+       "protectedpages-indef": "Mas que les protèccions sen fin",
+       "protectedpages-summary": "Cela pâge liste les pâges ègzistentes que sont ora protègiêes. Por na lista des titros protègiês contre la crèacion, vêde [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
+       "protectedpages-cascade": "Mas que les protèccions en cascâda",
+       "protectedpages-noredirect": "Cachiér les redirèccions",
        "protectedpagesempty": "Ora niona pâge est protègiêe avouéc celos paramètros.",
+       "protectedpages-timestamp": "Dâta et hora",
+       "protectedpages-page": "Pâge",
+       "protectedpages-expiry": "Èxpire lo",
+       "protectedpages-performer": "Protèccion per l’utilisator",
+       "protectedpages-params": "Paramètros de protèccion",
+       "protectedpages-reason": "Rêson",
+       "protectedpages-submit": "Fâre vêre les pâges",
+       "protectedpages-unknown-timestamp": "Encognua",
+       "protectedpages-unknown-performer": "Utilisator encognu",
        "protectedtitles": "Titros protègiês",
+       "protectedtitles-summary": "Cela pâge liste los titros que sont ora protègiês contre la crèacion. Por na lista de les pâges ègzistentes protègiêes, vêde [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
        "protectedtitlesempty": "Ora nion titro est protègiê avouéc celos paramètros.",
+       "protectedtitles-submit": "Fâre vêre los titros",
        "listusers": "Lista des utilisators",
        "listusers-editsonly": "Montrar ren que los utilisators avouéc des contribucions",
        "listusers-creationsort": "Betar per dâta de crèacion",
+       "listusers-desc": "Betar en ôrdre dècrèssent",
        "usereditcount": "$1 changement{{PLURAL:$1||s}}",
        "usercreated": "Fêt{{GENDER:$3||a}} lo $1 a $2",
        "newpages": "Pâges novèles",
+       "newpages-submit": "Montrar",
        "newpages-username": "Nom d’utilisator :",
        "ancientpages": "Pâges les ples vielyes",
        "move": "Dèplaciér",
-       "movethispage": "Dèplaciér ceta pâge",
-       "unusedimagestext": "Cetos fichiérs ègzistont, mas sont pas entrebetâs dedens niona pâge.\nSe vos plét, notâd que d’ôtros setos Vouèbe pôvont avêr un lim de vers un fichiér avouéc un’URL drêta, donc un fichiér pôt adés étre listâ ique pendent qu’il est en usâjo actif.",
-       "unusedcategoriestext": "Cetes catègories ègzistont, mas nion’ôtra pâge niona catègorie les emplèye.",
+       "movethispage": "Dèplaciér cela pâge",
+       "unusedimagestext": "Celos fichiérs-que ègzistont, mas sont pas apondus a niona pâge.\nSe vos plét, notâd que d’ôtros setos Vouèbe pôvont avêr un lim de vers un fichiér avouéc un’URL drêta, adonc un fichiér pôt adés étre listâ ique pendent qu’il est en usâjo actif.",
+       "unusedcategoriestext": "Celes catègories-que ègzistont, mas nion’ôtra pâge niona catègoria les emplèye.",
        "notargettitle": "Niona ciba",
-       "notargettext": "Vos éd pas spècifiâ na pâge un utilisator ciba sur laquinta / loquint vos souhètâd fâre cel’accion.",
+       "notargettext": "Vos éd pas spècifiâ na pâge un utilisator ciba que vos voléd fâre cel’accion.",
        "nopagetitle": "Niona pâge ciba d’ense",
        "nopagetext": "La pâge ciba que vos éd spècifiâye ègziste pas.",
        "pager-newer-n": "{{PLURAL:$1|ples novèla|$1 ples novèles}}",
        "pager-older-n": "{{PLURAL:$1|ples vielye|$1 ples vielyes}}",
-       "suppress": "Ôtar",
-       "querypage-disabled": "Ceta pâge spèciâla est dèsactivâye por des rêsons de capacitât.",
-       "booksources": "Ôvres de refèrence",
-       "booksources-search-legend": "Rechèrchiér entre-mié les ôvres de refèrence",
+       "suppress": "Rèprimar",
+       "querypage-disabled": "Cela pâge spèciâla est dèsactivâye por de rêsons de capacitât.",
+       "apihelp": "Éde de l’API",
+       "apihelp-no-such-module": "Lo modulo « $1 » est entrovâblo.",
+       "apisandbox": "Bouèta de sabla API",
+       "apisandbox-jsonly": "La bouèta de sabla API at fôta de JavaScript.",
+       "apisandbox-api-disabled": "L’API est dèsactivâ sur cél seto.",
+       "apisandbox-intro": "Empleyéd cela pâge por èprovar lo <strong>sèrviço Vouèbe API de MediaWiki</strong>.\nNen rèferâd-vos a la [[mw:API:Main page|documentacion de l’API]] por més de dètalys dessus l’usâjo de l’API. Ègzemplo : [//www.mediawiki.org/wiki/API#A_simple_example avêr lo contegnu d’una pâge principâla]. Chouèsésséd un’accion por vêre d’ôtros ègzemplos.\n\nNotâd que, quand ben qu’o est na bouèta de sabla, les accions que vos féte sur cela pâge pôvont changiér lo vouiqui.",
+       "apisandbox-fullscreen": "Èpatar la banche",
+       "apisandbox-fullscreen-tooltip": "Èpatar la banche de la bouèta de sabla por emplir la fenétra du navegator.",
+       "apisandbox-unfullscreen": "Montrar la pâge",
+       "apisandbox-unfullscreen-tooltip": "Rèduire la banche de la bouèta de sabla, por que los lims de navegacion de MediaWiki seyont disponiblos.",
+       "apisandbox-submit": "Fâre la demanda",
+       "apisandbox-reset": "Vouedar",
+       "apisandbox-retry": "Tornar èprovar",
+       "apisandbox-loading": "Chargement de les enformacions du modulo « $1 » de l’API...",
+       "apisandbox-load-error": "Na fôta est arrevâye pendent lo chargement de les enformacions du modulo « $1 » de l’API : $2",
+       "apisandbox-no-parameters": "Cél modulo de l’API at gins de paramètro.",
+       "apisandbox-helpurls": "Lims d’éde",
+       "apisandbox-examples": "Ègzemplos",
+       "apisandbox-dynamic-parameters": "Paramètros de més",
+       "apisandbox-dynamic-parameters-add-label": "Aponsa du paramètro :",
+       "apisandbox-dynamic-parameters-add-placeholder": "Nom du paramètro",
+       "apisandbox-dynamic-error-exists": "Un paramètro apelâ « $1 » ègziste ja.",
+       "apisandbox-deprecated-parameters": "Paramètros dèpassâs",
+       "apisandbox-fetch-token": "Ôtô-remplissâjo du jeton",
+       "apisandbox-submit-invalid-fields-title": "Doux-três champs sont pas justos",
+       "apisandbox-submit-invalid-fields-message": "Se vos plét, corregiéd los champs marcâs et pués tornâd èprovar.",
+       "apisandbox-results": "Rèsultats",
+       "apisandbox-sending-request": "Èxpèdicion de la demanda a l’API...",
+       "apisandbox-loading-results": "Rècèpcion des rèsultats de l’API...",
+       "apisandbox-results-error": "Na fôta est arrevâye pendent lo chargement de la rèponsa a la demanda de l’API : $1.",
+       "apisandbox-request-url-label": "URL de la demanda :",
+       "apisandbox-request-time": "Temps de la demanda : {{PLURAL:$1|$1 ms}}",
+       "apisandbox-results-fixtoken": "Corregiéd lo jeton et pués remandâd",
+       "apisandbox-results-fixtoken-fail": "Y at pas moyen de rècupèrar lo jeton « $1 ».",
+       "apisandbox-alert-page": "Los champs de cela pâge sont pas justos.",
+       "apisandbox-alert-field": "La valor de cél champ est pas justa.",
+       "booksources": "Ôvres de rèference",
+       "booksources-search-legend": "Rechèrchiér entre-mié d’ôvres de rèference",
        "booksources-isbn": "ISBN :",
        "booksources-search": "Rechèrchiér",
-       "booksources-text": "Vê-que na lista de lims de vers d’ôtros setos que vendont des lévros nôfs et d’ocasion, et pués pôvont avêr des enformacions de ples sur les ôvres que vos chèrchiéd :",
+       "booksources-text": "Vê-que na lista de lims de vers d’ôtros setos que vendont de lévros nôvos et d’ocasion, et pués que pôvont asse-ben avêr d’enformacions de més sur les ôvres que vos chèrchiéd :",
        "booksources-invalid-isbn": "L’ISBN balyê semble pas étre justo ; controlâd se vos éd fêt na fôta en copiyent la sôrsa originâla.",
        "specialloguserlabel": "Ôtor :",
-       "speciallogtitlelabel": "Ciba (titro ou ben utilisator) :",
-       "log": "Jornals",
-       "all-logs-page": "Tôs los jornals publicos",
-       "alllogstext": "Vua combinâye de tôs los jornals disponiblos dessus {{SITENAME}}.\nVos pouede rètrendre la vua en chouèséssent un tipo de jornal, lo nom d’utilisator (sensiblo a la câssa) la pâge regardâye (sensibl’a la câssa avouéc).",
-       "logempty": "Niona piéce que corrèspond sur lo jornal.",
-       "log-title-wildcard": "Chèrchiér entre-mié los titros que començont per cél tèxto",
-       "showhideselectedlogentries": "Montrar / cachiér les entrâs de jornal chouèsies",
+       "speciallogtitlelabel": "Ciba (titro ou ben {{ns:user}}:nom d’utilisator por un utilisator) :",
+       "log": "Jornâls",
+       "logeventslist-submit": "Montrar",
+       "all-logs-page": "Tôs los jornâls publicos",
+       "alllogstext": "Viua combinâye de tôs los jornâls disponiblos dessus {{SITENAME}}.\nVos pouede rètrendre la viua en chouèséssent un tipo de jornâl, lo nom d’utilisator (sensiblo a la câssa) ou ben la pâge regardâye (sensibl’a la câssa avouéc).",
+       "logempty": "Niona piéce d’ense sur lo jornâl.",
+       "log-title-wildcard": "Rechèrchiér entre-mié los titros que començont per cél tèxto",
+       "showhideselectedlogentries": "Changiér la visibilitât de les entrês de jornâl chouèsies",
+       "log-edit-tags": "Changiér les balises de les entrês de jornâl chouèsies",
+       "checkbox-select": "Chouèsir : $1",
+       "checkbox-all": "Totes",
+       "checkbox-none": "Pas yona",
+       "checkbox-invert": "Envèrsar",
        "allpages": "Totes les pâges",
        "nextpage": "Pâge aprés ($1)",
        "prevpage": "Pâge devant ($1)",
        "allpagesfrom": "Fâre vêre les pâges dês :",
        "allpagesto": "Fâre vêre les pâges tant qu’a :",
        "allarticles": "Totes les pâges",
-       "allinnamespace": "Totes les pâges (dedens l’èspâço de noms « $1 »)",
-       "allpagessubmit": "Listar",
+       "allinnamespace": "Totes les pâges (dedens l’èspâço de noms $1)",
+       "allpagessubmit": "Emmodar",
        "allpagesprefix": "Fâre vêre les pâges que començont per lo prèfixo :",
-       "allpagesbadtitle": "Lo titro de la pâge balyêe est pas justo ou ben contint un prèfixo entèrlengoua ou entèrvouiqui resèrvâ.\nContint de sûr yon ou ben un mouél de caractèros que pôvont pas étre empleyês dedens los titros.",
+       "allpagesbadtitle": "Lo titro de la pâge balyêe est pas justo ou ben contint un prèfixo entèrlengoua entèrvouiqui resèrvâ.\nContint de sûr yon ou ben un mouél de caractèros que pôvont pas étre empleyês dedens los titros.",
        "allpages-bad-ns": "{{SITENAME}} at gins d’èspâço de noms « $1 ».",
        "allpages-hide-redirects": "Cachiér les redirèccions",
        "cachedspecial-viewing-cached-ttl": "Vos vêde na vèrsion betâye en cacho de cela pâge, que pôt étre vielye por lo més $1.",
-       "cachedspecial-viewing-cached-ts": "Vos vêde na vèrsion betâye en cacho de cela pâge, que porrêt pas étre tot a fêt a jorn.",
+       "cachedspecial-viewing-cached-ts": "Vos vêde na vèrsion betâye en cacho de cela pâge, que porrêt pas étre a chavon a jorn.",
        "cachedspecial-refresh-now": "Vêre la ples novèla.",
        "categories": "Catègories",
-       "categoriespagetext": "{{PLURAL:$1|Ceta catègorie contint|Cetes catègories contegnont}} des pâges des fichiérs mèdia.\nLes [[Special:UnusedCategories|catègories pas empleyêes]] sont pas montrâyes ique.\nVêde asse-ben les [[Special:WantedCategories|catègories demandâyes]].",
+       "categories-submit": "Montrar",
+       "categoriespagetext": "{{PLURAL:$1|Cela catègoria-que contint|Celes catègories-que contegnont}} de pâges de fichiérs multimèdiâ.\nLes [[Special:UnusedCategories|catègories pas empleyêes]] sont pas montrâyes ique.\nVêde avouéc les [[Special:WantedCategories|catègories demandâyes]].",
        "categoriesfrom": "Fâre vêre les catègories dês :",
-       "special-categories-sort-count": "tri per nombro de piéces",
-       "special-categories-sort-abc": "tri alfabètico",
+       "special-categories-sort-count": "chouèx per comptâjo",
+       "special-categories-sort-abc": "chouèx alfabètico",
        "deletedcontributions": "Contribucions suprimâyes",
        "deletedcontributions-title": "Contribucions suprimâyes",
        "sp-deletedcontributions-contribs": "contribucions",
        "linksearch": "Rechèrche de lims de defôr",
-       "linksearch-pat": "Modèlo de rechèrche :",
+       "linksearch-pat": "Plan de rechèrche :",
        "linksearch-ns": "Èspâço de noms :",
        "linksearch-ok": "Rechèrchiér",
-       "linksearch-text": "Des caractèros j·oquères coment « *.wikipedia.org » pôvont étre empleyês.\nIls ant fôta de por lo muens un domêno de nivél de dessus, per ègzemplo « *.org ».<br />\n{{PLURAL:$2|Protocolo recognu|Protocolos recognus}} : $1 (http:// per dèfôt se nion protocolo est spècifiâ).",
+       "linksearch-text": "Des mètacaractèros coment « *.wikipedia.org » pôvont étre empleyês.\nIls ant fôta d’u muens un domêno de nivél de dessus, per ègzemplo « *.org ».<br />\n{{PLURAL:$2|Protocolo recognu|Protocolos recognus}} : $1 (http:// per dèfôt se nion protocolo est spècifiâ).",
        "linksearch-line": "$1 est liyê dês $2",
-       "linksearch-error": "Los caractèros j·oquères pôvont étre empleyês ren qu’u comencement du nom de domêno de l’hôto.",
+       "linksearch-error": "Los mètacaractèros pôvont étre empleyês ren qu’u comencement du nom de domêno de l’hôto.",
        "listusersfrom": "Fâre vêre los utilisators dês :",
-       "listusers-submit": "Listar",
-       "listusers-noresult": "Nion utilisator trovâ.",
-       "listusers-blocked": "(blocâ{{GENDER:$1||ye|(ye)}})",
+       "listusers-submit": "Montrar",
+       "listusers-noresult": "Nion utilisator est étâ trovâ.",
+       "listusers-blocked": "(blocâ{{GENDER:$1||ye}})",
        "activeusers": "Lista des utilisators actifs",
-       "activeusers-intro": "O est na lista des utilisators qu’ant ègzèrciê un’activitât la quinta que seye pendent {{PLURAL:$1|lo jorn passâ|los $1 jorns passâs}}.",
+       "activeusers-intro": "O est na lista des utilisators qu’ant ègzèrciê un’activitât quinta que seye pendent {{PLURAL:$1|lo jorn passâ|los $1 jorns passâs}}.",
        "activeusers-count": "$1 accion{{PLURAL:$1||s}} pendent {{PLURAL:$3|lo jorn passâ|los $3 jorns passâs}}",
        "activeusers-from": "Fâre vêre los utilisators dês :",
        "activeusers-hidebots": "Cachiér los robots",
        "activeusers-hidesysops": "Cachiér los administrators",
-       "activeusers-noresult": "Nion utilisator trovâ.",
+       "activeusers-noresult": "Nion utilisator est étâ trovâ.",
+       "activeusers-submit": "Fâre vêre los utilisators actifs",
        "listgrouprights": "Drêts de les tropes d’utilisators",
-       "listgrouprights-summary": "Vê-que na lista de les tropes d’utilisators dèfenies sur ceti vouiqui et pués los sins drêts d’accès.\nY pôt avêr [[{{MediaWiki:Listgrouprights-helppage}}|més d’enformacions]] sur los drêts endividuèls.",
-       "listgrouprights-key": "* <span class=\"listgrouprights-granted\">Drêt balyê</span>\n* <span class=\"listgrouprights-revoked\">Drêt cassâ</span>",
+       "listgrouprights-summary": "Vê-que na lista de les tropes d’utilisators dèfenies sur cél vouiqui et pués lors drêts d’accès associyês.\nY pôt avêr [[{{MediaWiki:Listgrouprights-helppage}}|més d’enformacions]] sur los drêts endividuèls.",
+       "listgrouprights-key": "Lègenda :\n* <span class=\"listgrouprights-granted\">Drêt balyê</span>\n* <span class=\"listgrouprights-revoked\">Drêt cassâ</span>",
        "listgrouprights-group": "Tropa",
        "listgrouprights-rights": "Drêts",
        "listgrouprights-helppage": "Help:Drêts de les tropes",
        "listgrouprights-removegroup": "Enlevar de {{PLURAL:$2|la tropa|les tropes}} : $1",
        "listgrouprights-addgroup-all": "Apondre a totes les tropes",
        "listgrouprights-removegroup-all": "Enlevar de totes les tropes",
-       "listgrouprights-addgroup-self": "Sè pôt apondre {{PLURAL:$2|la tropa|les tropes}} a son prôpro compto : $1",
-       "listgrouprights-removegroup-self": "Sè pôt enlevar {{PLURAL:$2|la tropa|les tropes}} de son prôpro compto : $1",
-       "listgrouprights-addgroup-self-all": "Sè pôt apondre totes les tropes a son prôpro compto",
-       "listgrouprights-removegroup-self-all": "Sè pôt enlevar totes les tropes de son prôpro compto",
+       "listgrouprights-addgroup-self": "Sè pôt apondre {{PLURAL:$2|la tropa|les tropes}} u sin comptio : $1",
+       "listgrouprights-removegroup-self": "Sè pôt enlevar {{PLURAL:$2|la tropa|les tropes}} du sin comptio : $1",
+       "listgrouprights-addgroup-self-all": "Sè pôt apondre totes les tropes u sin comptio",
+       "listgrouprights-removegroup-self-all": "Sè pôt enlevar totes les tropes du sin comptio",
+       "listgrouprights-namespaceprotection-header": "Rèstriccions d’èspâço de noms",
+       "listgrouprights-namespaceprotection-namespace": "Èspâço de noms",
+       "listgrouprights-namespaceprotection-restrictedto": "Drêt(s) que pèrmèt(ont) a l’utilisator de changiér",
+       "listgrants": "Ôtorisacions",
+       "listgrants-summary": "Vê-que na lista des drêts avouéc lor accès associyê ux drêts d’utilisator. Los utilisators pôvont ôtorisar les aplicacions a empleyér lor comptio, mas avouéc des drêts limitâs d’aprés los drêts que l’utilisator at balyê a l’aplicacion. Portant un’aplicacion fassent u nom d’un utilisator pôt pas ben empleyér de drêts que l’utilisator at pas.\nY pôt avêr [[{{MediaWiki:Listgrouprights-helppage}}|més d’enformacions]] sur los drêts endividuèls.",
+       "listgrants-grant": "Ôtorisacion",
+       "listgrants-rights": "Drêts",
+       "trackingcategories": "Catègories de gouârda",
+       "trackingcategories-summary": "Cela pâge liste les catègories de gouârda que sont emplies ôtomaticament per MediaWiki. Lors noms pôvont étre changiês en changient los mèssâjos sistèmo que corrèspondont dedens l’èspâço de noms {{ns:8}}.",
+       "trackingcategories-msg": "Catègoria de gouârda",
+       "trackingcategories-name": "Nom du mèssâjo",
+       "trackingcategories-desc": "Critèros de raponsa de la catègoria",
+       "noindex-category-desc": "La pâge est pas endèxâye per los robots, contint lo mot magico <code><nowiki>__NOINDEX__</nowiki></code> et est dedens un èspâço de noms yô que cél marcâjo est ôtorisâ.",
+       "index-category-desc": "La pâge contint un <code><nowiki>__INDEX__</nowiki></code> (et est dedens un èspâço de noms yô que cél marcâjo est ôtorisâ), et pués serat vêr endèxâye per los robots pendent qu’o serêt pas étâ normalament.",
+       "post-expand-template-inclusion-category-desc": "La talye de la pâge dèpâsse <code>$wgMaxArticleSize</code> aprés l’èxpension de tôs los modèlos, cen fât que doux-três modèlos ant vêr pas étâ èpatâs.",
+       "post-expand-template-argument-category-desc": "La pâge dèpâsse <code>$wgMaxArticleSize</code> aprés l’èxpension d’un argument de modèlo (quârque-ren entre-mié colâdes triples, coment <code>{{{Foo}}}</code>).",
+       "expensive-parserfunction-category-desc": "La pâge emplèye trop de fonccions parsiors que revegnont chieres (coment <code>#ifexist</code>). Vêde [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "La pâge contint un lim de fichiér câsso (un lim por apondre un fichiér pendent que ceti ègziste pas).",
+       "hidden-category-category-desc": "La catègoria contint <code><nowiki>__HIDDENCAT__</nowiki></code> dedens son contegnu, cen qu’empache per dèfôt sa viua dens la bouèta des lims de catègoria sur les pâges.",
+       "trackingcategories-nodesc": "Niona dèscripcion disponibla.",
+       "trackingcategories-disabled": "La catègoria est dèsactivâye",
        "mailnologin": "Nion’adrèce d’èxpèdior",
-       "mailnologintext": "Vos dête étre [[Special:UserLogin|branchiê]] et avêr spècifiâ un’adrèce èlèctronica justa dens voutres [[Special:Preferences|prèferences]] por povêr mandar des mèssâjos a d’ôtros utilisators.",
-       "emailuser": "Lui mandar un mèssâjo",
-       "emailuser-title-target": "Mandar un mèssâjo a cet’utilisat{{GENDER:$1|or|rice}}",
+       "mailnologintext": "Vos dête étre [[Special:UserLogin|branchiê]] et pués avêr un’adrèce èlèctronica justa dens voutres [[Special:Preferences|prèferences]] por povêr mandar de mèssâjos a d’ôtros utilisators.",
+       "emailuser": "Y mandar un mèssâjo",
+       "emailuser-title-target": "Mandar un mèssâjo a {{GENDER:$1|cél utilisator|cel’utilisatrice}}",
        "emailuser-title-notarget": "Mandar un mèssâjo a l’utilisator",
-       "emailpagetext": "Vos pouede empleyér lo formulèro ce-desot por mandar un mèssâjo a cet’utilisat{{GENDER:$1|or|rice}}.\nL’adrèce èlèctronica que vos éd buchiêe dens voutres [[Special:Preferences|prèferences]] aparêtrat dedens lo champ « Èxpèdior » de voutron mèssâjo ; d’ense, lo dèstinatèro vos porrat rèpondre tot drêt.",
+       "emailpagetext": "Vos pouede empleyér lo formulèro ce-desot por mandar un mèssâjo a {{GENDER:$1|cél utilisator|cel’utilisatrice}}.\nL’adrèce èlèctronica que vos éd buchiêe dens voutres [[Special:Preferences|prèferences]] aparêtrat dedens lo champ « Èxpèdior » de voutron mèssâjo, cen fât que lo dèstinatèro vos porrat rèpondre tot drêt.",
        "defemailsubject": "Mèssâjo de {{SITENAME}} de l’utilisator « $1 »",
        "usermaildisabled": "L’èxpèdicion de mèssâjos entre utilisators est dèsactivâye",
-       "usermaildisabledtext": "Vos pouede pas mandar de mèssâjos a d’ôtros utilisators sur ceti vouiqui",
+       "usermaildisabledtext": "Vos pouede pas mandar de mèssâjos a d’ôtros utilisators sur cél vouiqui",
        "noemailtitle": "Nion’adrèce èlèctronica",
-       "noemailtext": "Cet’utilisator at pas spècifiâ un’adrèce èlèctronica justa.",
+       "noemailtext": "Cél utilisator at pas spècifiâ un’adrèce èlèctronica justa.",
        "nowikiemailtext": "Cél utilisator at chouèsi de pas recêvre de mèssâjos de la pârt d’ôtros utilisators.",
        "emailnotarget": "Nom d’utilisator du dèstinatèro pas ègzistent pas justo.",
        "emailtarget": "Buchiéd lo nom d’utilisator du dèstinatèro",
        "emailccsubject": "Copia de voutron mèssâjo a $1 : $2",
        "emailsent": "Mèssâjo mandâ",
        "emailsenttext": "Voutron mèssâjo est étâ mandâ per mèssageria èlèctronica.",
-       "emailuserfooter": "Ceti mèssâjo est étâ mandâ per « $1 » a « $2 » per la fonccion « Lui mandar un mèssâjo » de {{SITENAME}}.",
+       "emailuserfooter": "Cél mèssâjo est étâ {{GENDER:$1|mandâ}} per « $1 » a « {{GENDER:$2|$2}} » per la fonccion « {{int:emailuser}} » de {{SITENAME}}.",
        "usermessage-summary": "At lèssiê un mèssâjo sistèmo.",
        "usermessage-editor": "Mèssagiér du sistèmo",
        "usermessage-template": "MediaWiki:MèssâjoUtilisator",
-       "watchlist": "Lista de siuvu",
-       "mywatchlist": "Lista de siuvu",
+       "watchlist": "Lista de gouârda",
+       "mywatchlist": "Lista de gouârda",
        "watchlistfor2": "Por $1 $2",
-       "nowatchlist": "Vos éd gins de piéce dedens voutra lista de siuvu.",
-       "watchlistanontext": "Se vos plét, vos vos dête $1 por povêr vêre ou ben changiér les piéces de voutra lista de siuvu.",
+       "nowatchlist": "Vos éd gins de piéce dedens voutra lista de gouârda.",
+       "watchlistanontext": "Se vos plét, branchiéd-vos por vêre changiér les piéces de voutra lista de gouârda.",
        "watchnologin": "Pas branchiê",
-       "addwatch": "Apondre a la lista de siuvu",
-       "addedwatchtext": "La pâge « [[:$1]] » est étâye apondua a voutra [[Special:Watchlist|lista de siuvu]].\nLos changements que vegnont de ceta pâge et de la sina pâge de discussion y seront listâs.",
-       "removewatch": "Enlevar de la lista de siuvu",
-       "removedwatchtext": "La pâge « [[:$1]] » est étâye enlevâye de voutra [[Special:Watchlist|lista de siuvu]].",
+       "addwatch": "Apondre a la lista de gouârda",
+       "addedwatchtext": "« [[:$1]] » et sa pâge de discussion sont étâyes apondues a voutra [[Special:Watchlist|lista de gouârda]].",
+       "addedwatchtext-short": "La pâge « $1 » est étâye apondua a voutra lista de gouârda.",
+       "removewatch": "Enlevar de la lista de gouârda",
+       "removedwatchtext": "« [[:$1]] » et sa pâge de discussion sont étâyes enlevâyes de voutra [[Special:Watchlist|lista de gouârda]].",
+       "removedwatchtext-short": "La pâge « $1 » est étâye enlevâye de voutra lista de gouârda.",
        "watch": "Siuvre",
-       "watchthispage": "Siuvre ceta pâge",
+       "watchthispage": "Siuvre cela pâge",
        "unwatch": "Pas més siuvre",
        "unwatchthispage": "Pas més siuvre",
        "notanarticle": "O est pas na pâge de contegnu",
        "notvisiblerev": "La dèrriére vèrsion per un ôtr’utilisator est étâye suprimâye",
-       "watchlist-details": "Y at $1 pâge{{PLURAL:$1||s}} dedens voutra lista de siuvu, sen comptar les pâges de discussion.",
+       "watchlist-details": "Y at $1 pâge{{PLURAL:$1||s}} dedens voutra lista de gouârda, sen comptar a pârt les pâges de discussion.",
        "wlheader-enotif": "La notificacion per mèssageria èlèctronica est activâye.",
-       "wlheader-showupdated": "Les pâges que sont étâyes changiêes dês voutra dèrriére visita sont montrâyes en '''grâs'''.",
-       "wlnote": "Vê-que {{PLURAL:$1|lo dèrriér changement fêt|los '''$1''' dèrriérs changements fêts}} pendent {{PLURAL:$2|l’hora passâye|les '''$2''' hores passâyes}}, dês $3 a $4.",
-       "wlshowlast": "Montrar les $1 hores passâyes, los $2 jorns passâs ou ben",
-       "watchlist-options": "Chouèx de la lista de siuvu",
-       "watching": "Siuvu...",
-       "unwatching": "Fin du siuvu...",
-       "watcherrortext": "Na fôta est arrevâye pendent lo changement de la configuracion de voutra lista de siuvu por « $1 ».",
-       "enotif_reset": "Marcar totes les pâges coment visitâyes",
+       "wlheader-showupdated": "Les pâges que sont étâyes changiêes dês voutra dèrriére vesita sont montrâyes en <strong>grôs</strong>.",
+       "wlnote": "Vê-que {{PLURAL:$1|lo dèrriér changement fêt|los <strong>$1</strong> dèrriérs changements fêts}} pendent {{PLURAL:$2|l’hora passâye|les <strong>$2</strong> hores passâyes}}, tant qu’u $3 a $4.",
+       "wlshowlast": "Montrar les $1 hores passâyes, los $2 jorns passâs",
+       "watchlist-hide": "Cachiér",
+       "watchlist-submit": "Montrar",
+       "wlshowtime": "Temps a fâre vêre :",
+       "wlshowhideminor": "petiôts changements",
+       "wlshowhidebots": "robots",
+       "wlshowhideliu": "utilisators encartâs",
+       "wlshowhideanons": "utilisators anonimos",
+       "wlshowhidepatr": "changements gouardâs",
+       "wlshowhidemine": "mos changements",
+       "wlshowhidecategorization": "catègorisacion de les pâges",
+       "watchlist-options": "Chouèx de la lista de gouârda",
+       "watching": "Comencement de la gouârda...",
+       "unwatching": "Fin de la gouârda...",
+       "watcherrortext": "Na fôta est arrevâye pendent lo changement de la configuracion de voutra lista de gouârda por « $1 ».",
+       "enotif_reset": "Marcar totes les pâges coment vesitâyes",
        "enotif_impersonal_salutation": "Utilisator de {{SITENAME}}",
-       "enotif_subject_deleted": "La pâge $1 dessus {{SITENAME}} est étâye suprimâye per {{GENDER:$2|$2}}",
-       "enotif_subject_created": "La pâge $1 dessus {{SITENAME}} est étâye fêta per {{GENDER:$2|$2}}",
-       "enotif_subject_moved": "La pâge $1 dessus {{SITENAME}} est étâye dèplaciêe per {{GENDER:$2|$2}}",
-       "enotif_subject_restored": "La pâge $1 dessus {{SITENAME}} est étâye refêta per {{GENDER:$2|$2}}",
-       "enotif_subject_changed": "La pâge $1 dessus {{SITENAME}} est étâye changiêe per {{GENDER:$2|$2}}",
-       "enotif_body_intro_deleted": "La pâge $1 dessus {{SITENAME}} est étâye suprimâye lo $PAGEEDITDATE per {{GENDER:$2|$2}}, vêde $3.",
-       "enotif_body_intro_created": "La pâge $1 dessus {{SITENAME}} est étâye fêta lo $PAGEEDITDATE per {{GENDER:$2|$2}}, vêde $3 por la vèrsion d’ora.",
-       "enotif_body_intro_moved": "La pâge $1 dessus {{SITENAME}} est étâye dèplaciêe lo $PAGEEDITDATE per {{GENDER:$2|$2}}, vêde $3 por la vèrsion d’ora.",
-       "enotif_body_intro_restored": "La pâge $1 dessus {{SITENAME}} est étâye refêta lo $PAGEEDITDATE per {{GENDER:$2|$2}}, vêde $3 por la vèrsion d’ora.",
-       "enotif_body_intro_changed": "La pâge $1 dessus {{SITENAME}} est étâye changiêe lo $PAGEEDITDATE per {{GENDER:$2|$2}}, vêde $3 por la vèrsion d’ora.",
-       "enotif_lastvisited": "Vêde $1 por tôs los changements dês voutra dèrriére visita.",
+       "enotif_subject_deleted": "La pâge $1 dessus {{SITENAME}} est étâye {{GENDER:$2|suprimâye}} per $2",
+       "enotif_subject_created": "La pâge $1 dessus {{SITENAME}} est étâye {{GENDER:$2|fêta}} per $2",
+       "enotif_subject_moved": "La pâge $1 dessus {{SITENAME}} est étâye {{GENDER:$2|dèplaciêe}} per $2",
+       "enotif_subject_restored": "La pâge $1 dessus {{SITENAME}} est étâye {{GENDER:$2|refêta}} per $2",
+       "enotif_subject_changed": "La pâge $1 dessus {{SITENAME}} est étâye {{GENDER:$2|changiêe}} per $2",
+       "enotif_body_intro_deleted": "La pâge $1 dessus {{SITENAME}} est étâye {{GENDER:$2|suprimâye}} lo $PAGEEDITDATE per $2, vêde $3.",
+       "enotif_body_intro_created": "La pâge $1 dessus {{SITENAME}} est étâye {{GENDER:$2|fêta}} lo $PAGEEDITDATE per $2, vêde $3 por la vèrsion d’ora.",
+       "enotif_body_intro_moved": "La pâge $1 dessus {{SITENAME}} est étâye {{GENDER:$2|dèplaciêe}} lo $PAGEEDITDATE per $2, vêde $3 por la vèrsion d’ora.",
+       "enotif_body_intro_restored": "La pâge $1 dessus {{SITENAME}} est étâye {{GENDER:$2|refêta}} lo $PAGEEDITDATE per $2, vêde $3 por la vèrsion d’ora.",
+       "enotif_body_intro_changed": "La pâge $1 dessus {{SITENAME}} est étâye {{GENDER:$2|changiêe}} lo $PAGEEDITDATE per $2, vêde $3 por la vèrsion d’ora.",
+       "enotif_lastvisited": "Vêde $1 por tôs los changements dês voutra dèrriére vesita.",
        "enotif_lastdiff": "Vêde $1 por vêre cél changement.",
        "enotif_anon_editor": "utilisator anonimo $1",
-       "enotif_body": "Chier(a) $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nRèsumâ du contributor : $PAGESUMMARY $PAGEMINOREDIT\n\nVeriéd-vos vers lo contributor :\nmèl. : $PAGEEDITOR_EMAIL\nvouiqui : $PAGEEDITOR_WIKI\n\nY arat gins d’ôtra notificacion en câs de changements a vegnir, du muens que vos visiteyâd cela pâge. Vos pouede asse-ben rebetar a zérô los segnalements de notificacion por totes les pâges de voutra lista de siuvu.\n\nVoutron sistèmo de notificacion de {{SITENAME}}\n\n--\nPor changiér la configuracion de notificacion per mèssageria èlèctronica, visitâd\n{{canonicalurl:{{#special:Preferences}}}}\n\nPor changiér la configuracion de voutra lista de siuvu, visitâd\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPor suprimar la pâge de voutra lista de siuvu, visitâd\n$UNWATCHURL\n\nAvis et assistance de ples :\n$HELPPAGE",
+       "enotif_body": "Chier{{GENDER:$WATCHINGUSERNAME||a}} $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nRèsumâ du contributor : $PAGESUMMARY $PAGEMINOREDIT\n\nVeriéd-vos vers lo contributor :\nmèl. : $PAGEEDITOR_EMAIL\nvouiqui : $PAGEEDITOR_WIKI\n\nY arat gins d’ôtra notificacion en câs de changements a vegnir, a muens que vos vesiteyéd cela pâge a pêna branchiê. Vos pouede asse-ben rebetar a zérô los marcâjos de notificacion por totes les pâges de voutra lista de gouârda.\n\nVoutron sistèmo de notificacion de {{SITENAME}}\n\n--\nPor changiér la configuracion de notificacion per mèssageria èlèctronica, vesitâd\n{{canonicalurl:{{#special:Preferences}}}}\n\nPor changiér la configuracion de voutra lista de gouârda, vesitâd\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPor suprimar la pâge de voutra lista de gouârda, vesitâd\n$UNWATCHURL\n\nAvis et éde de més :\n$HELPPAGE",
        "created": "fêta",
        "changed": "changiê",
        "deletepage": "Suprimar la pâge",
        "confirm": "Confirmar",
        "excontent": "lo contegnu ére : « $1 »",
-       "excontentauthor": "lo contegnu ére : « $1 » (et lo solèt contributor ére « [[Special:Contributions/$2|$2]] »)",
+       "excontentauthor": "lo contegnu ére : « $1 », et lo solèt contributor « [[Special:Contributions/$2|$2]] » ([[User talk:$2|discutar]])",
        "exbeforeblank": "lo contegnu devant blanchiment ére : « $1 »",
        "delete-confirm": "Suprimar « $1 »",
        "delete-legend": "Suprimar",
-       "historywarning": "'''Atencion :''' la pâge que vos éte prèst a suprimar at un historico avouéc a pou prés $1 vèrsion{{PLURAL:$1||s}} :",
-       "confirmdeletetext": "Vos éte prèst a suprimar na pâge et pués tot lo sin historico.\nSe 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]].",
+       "historywarning": "<strong>Atencion :</strong> la pâge que vos éte prèst a suprimar at un historico avouéc $1 vèrsion{{PLURAL:$1||s}} :",
+       "historyaction-submit": "Montrar",
+       "confirmdeletetext": "Vos éte prèst a suprimar na pâge et pués tot son historico.\nSe 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}}|politiques]].",
        "actioncomplete": "Accion fêta",
        "actionfailed": "L’accion at pas reussi",
        "deletedtext": "« $1 » est étâye suprimâye.\nVêde lo $2 por na lista de les novèles suprèssions.",
-       "dellogpage": "Jornal de les suprèssions",
+       "dellogpage": "Jornâl de les suprèssions",
        "dellogpagetext": "Vê-que na lista de les suprèssions les ples novèles.",
-       "deletionlog": "jornal de les suprèssions",
-       "reverted": "Vèrsion devant rètablia",
+       "deletionlog": "jornâl de les suprèssions",
+       "reverted": "Rèvocâ a la vèrsion devant",
        "deletecomment": "Rêson :",
-       "deleteotherreason": "Ôtra rêson / rêson de ples :",
+       "deleteotherreason": "Ôtra rêson ou ben rêson de més :",
        "deletereasonotherlist": "Ôtra rêson",
-       "deletereason-dropdown": "*Rêsons corentes de suprèssion\n** Demanda de l’ôtor\n** Violacion du drêt d’ôtor\n** Vandalismo",
+       "deletereason-dropdown": "* Rêsons corentes de suprèssion\n** Mèssâjo cofo\n** Vandalismo\n** Violacion du drêt d’ôtor\n** Demanda de l’ôtor\n** Redirèccion câssa",
        "delete-edit-reasonlist": "Changiér les rêsons de suprèssion",
-       "delete-toobig": "Ceta pâge at un grôs historico de changements avouéc més de $1 vèrsion{{PLURAL:$1||s}}.\nLa suprèssion de pâges d’ense est étâye rètrenta por prèvegnir des pèrturbacions emprèvues de {{SITENAME}}.",
-       "delete-warning-toobig": "Ceta pâge at un grôs historico de changements avouéc més de $1 vèrsion{{PLURAL:$1||s}}.\nLa suprimar pôt troblar la mârche de la bâsa de balyês de {{SITENAME}} ;\na fâre avouéc prudence.",
+       "delete-toobig": "Cela pâge at un grôs historico de changements avouéc més de $1 vèrsion{{PLURAL:$1||s}}.\nLa suprèssion de pâges d’ense est étâye rètrenta por prèvegnir de pèrturbacions emprèviues de {{SITENAME}}.",
+       "delete-warning-toobig": "Cela pâge at un grôs historico de changements avouéc més de $1 vèrsion{{PLURAL:$1||s}}.\nLa suprimar pôt troblar la mârche de la bâsa de balyês de {{SITENAME}} ;\na fâre avouéc prudence.",
+       "deleteprotected": "Vos pouede pas suprimar cela pâge, el est étâye protègiêe.",
+       "deleting-backlinks-warning": "<strong>Atencion :</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|D’ôtres pâges]] ant un lim de vers ou ben transcllusont la pâge que vos voléd suprimar.",
        "rollback": "Rèvocar los changements",
        "rollbacklink": "rèvocar",
        "rollbacklinkcount": "rèvocar $1 changement{{PLURAL:$1||s}}",
        "rollbacklinkcount-morethan": "rèvocar més de $1 changement{{PLURAL:$1||s}}",
        "rollbackfailed": "La rèvocacion at pas reussi",
-       "cantrollback": "Y at pas moyen de rèvocar lo changement ;\nlo dèrriér contributor est lo solèt ôtor de ceta pâge.",
-       "alreadyrolled": "Y at pas moyen de rèvocar lo dèrriér changement de la pâge « [[:$1]] » fêt per [[User:$2|$2]] ([[User talk:$2|discutar]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ;\nun ôtro at ja changiê ou ben rèvocâ la pâge.\n\nLo dèrriér changement de la pâge est étâ fêt per [[User:$3|$3]] ([[User talk:$3|discutar]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Lo rèsumâ de changement ére : « ''$1'' ».",
+       "cantrollback": "Y at pas moyen de rèvocar lo changement ;\nlo dèrriér contributor est lo solèt ôtor de cela pâge.",
+       "alreadyrolled": "Y at pas moyen de rèvocar lo dèrriér changement de la pâge « [[:$1]] » fêt per [[User:$2|$2]] ([[User talk:$2|discutar]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ;\nun ôtro at ja changiê rèvocâ la pâge.\n\nLo dèrriér changement de la pâge est étâ fêt per [[User:$3|$3]] ([[User talk:$3|discutar]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+       "editcomment": "Lo rèsumâ de changement ére : <em>$1</em>.",
        "revertpage": "Rèvocacion des changements de [[Special:Contributions/$2|$2]] ([[User talk:$2|discutar]]) de vers la dèrriére vèrsion de [[User:$1|$1]]",
-       "revertpage-nouser": "Rèvocacion des changements de (nom d’utilisator enlevâ) de vers la dèrriére vèrsion de [[User:$1|$1]]",
+       "revertpage-nouser": "Rèvocacion des changements per un utilisator cachiê de vers la dèrriére vèrsion de {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Rèvocacion des changements de $1 ;\nrèstoracion de la dèrriére vèrsion de $2.",
-       "sessionfailure-title": "Falyita de sèance",
-       "sessionfailure": "Voutra sèance de branchement semble avêr des problèmos ;\ncel’accion est étâye anulâye en prèvencion d’un piratâjo de sèance.\nSe vos plét, clicâd dessus « Devant », rechargiéd la pâge de yô que vos vegnéd et pués tornâd èprovar.",
-       "protectlogpage": "Jornal de les protèccions",
+       "sessionfailure-title": "Falyita de sèssion",
+       "sessionfailure": "Voutra sèssion de branchement semble avêr de problèmos ;\ncel’accion est étâye anulâye en prèvencion d’un piratâjo de sèssion.\nSe vos plét, cllicâd dessus « Devant », rechargiéd la pâge de yô que vos vegnéd et pués tornâd èprovar.",
+       "changecontentmodel": "Changiér lo modèlo de contegnu d’una pâge",
+       "changecontentmodel-legend": "Changiér lo modèlo de contegnu",
+       "changecontentmodel-title-label": "Titro de la pâge",
+       "changecontentmodel-model-label": "Novél modèlo de contegnu",
+       "changecontentmodel-reason-label": "Rêson :",
+       "changecontentmodel-submit": "Changiér",
+       "changecontentmodel-success-title": "Lo modèlo de contegnu est étâ changiê",
+       "changecontentmodel-success-text": "Lo tipo de contegnu de [[:$1]] est étâ changiê.",
+       "changecontentmodel-cannot-convert": "Lo contegnu dessus [[:$1]] at pas possu étre convèrti en un tipo de $2.",
+       "changecontentmodel-nodirectediting": "Lo modèlo de contegnu $1 recognêt pas lo changement drêt",
+       "log-name-contentmodel": "Jornâl des changements de modèlo de contegnu",
+       "log-description-contentmodel": "Èvènements sur los modèlos de contegnu d’una pâge",
+       "logentry-contentmodel-new": "$1 at {{GENDER:$2|fêt}} la pâge $3 en empleyent un modèlo de contegnu « $5 » ôtro que celi per dèfôt",
+       "logentry-contentmodel-change": "$1 at {{GENDER:$2|changiê}} lo modèlo de contegnu de la pâge $3 de « $4 » en « $5 »",
+       "logentry-contentmodel-change-revertlink": "rèvocar",
+       "logentry-contentmodel-change-revert": "rèvocar",
+       "protectlogpage": "Jornâl de les protèccions",
        "protectlogtext": "Vê-que na lista des changements de les protèccions de pâges.\nVêde la [[Special:ProtectedPages|lista de les pâges protègiêes]] por la lista de les protèccions que sont ora actives.",
        "protectedarticle": "at protègiê « [[$1]] »",
        "modifiedarticleprotection": "at changiê lo nivél de protèccion de « [[$1]] »",
        "protect-title-notallowed": "Vêre lo nivél de protèccion de « $1 »",
        "prot_1movedto2": "at dèplaciê [[$1]] vers [[$2]]",
        "protect-badnamespace-title": "Èspâço de noms pas protèjâblo",
-       "protect-badnamespace-text": "Les pâges dedens cet’èspâço de noms pôvont pas étre protègiêes.",
+       "protect-badnamespace-text": "Les pâges dedens cél èspâço de noms pôvont pas étre protègiêes.",
        "protect-norestrictiontypes-text": "Cela pâge pôt pas étre protègiêe, y at gins de tipo de rèstriccion disponiblo.",
        "protect-norestrictiontypes-title": "Pâge pas protèjâbla",
        "protect-legend": "Confirmar la protèccion",
        "protectcomment": "Rêson :",
        "protectexpiry": "Dâta d’èxpiracion :",
-       "protect_expiry_invalid": "La dâta d’èxpiracion est pas justa.",
-       "protect_expiry_old": "La dâta d’èxpiracion est ja passâye.",
-       "protect-unchain-permissions": "Dèvèrrolyér adés més de chouèx de protèccion",
-       "protect-text": "Ique vos pouede vêre et changiér lo nivél de protèccion de la pâge '''$1'''.",
-       "protect-locked-blocked": "Vos pouede pas changiér los nivéls de protèccion tant que vos éte blocâ{{GENDER:||ye|(ye)}}.\nVê-que la configuracion d’ora de la pâge '''$1''' :",
-       "protect-locked-dblock": "Los nivéls de protèccion pôvont pas étre changiês, la bâsa de balyês est vèrrolyêe.\nVê-que la configuracion d’ora de la pâge '''$1''' :",
-       "protect-locked-access": "Voutron compto at pas los drêts nècèssèros por changiér los nivéls de protèccion de pâges.\nVê-que la configuracion d’ora de la pâge '''$1''' :",
-       "protect-cascadeon": "Ora cela pâge-que est protègiêe, el est entrebetâye dedens {{PLURAL:$1|ceta pâge qu’est étâye protègiêe|cetes pâges que sont étâyes protègiêes}} avouéc lo chouèx « protèccion en cascâda » activâ.\nVos pouede changiér lo nivél de protèccion de cela pâge sen que cen afècte la protèccion en cascâda.",
+       "protect_expiry_invalid": "Lo temps d’èxpiracion est pas justo.",
+       "protect_expiry_old": "Lo temps d’èxpiracion est ja passâ.",
+       "protect-unchain-permissions": "Dècotar adés més de chouèx de protèccion",
+       "protect-text": "Ique vos pouede vêre et changiér lo nivél de protèccion de la pâge <strong>$1</strong>.",
+       "protect-locked-blocked": "Vos pouede pas changiér los nivéls de protèccion tant que vos éte blocâ{{GENDER:||ye}}.\nVê-que la configuracion d’ora de la pâge <strong>$1</strong> :",
+       "protect-locked-dblock": "Los nivéls de protèccion pôvont pas étre changiês, la bâsa de balyês est cotâye.\nVê-que la configuracion d’ora de la pâge <strong>$1</strong> :",
+       "protect-locked-access": "Voutron comptio at pas los drêts nècèssèros por changiér los nivéls de protèccion de pâges.\nVê-que la configuracion d’ora de la pâge <strong>$1</strong> :",
+       "protect-cascadeon": "Ora cela pâge est protègiêe, el est transcllua dedens {{PLURAL:$1|cela pâge-que qu’est étâye protègiêe|celes pâges-que que sont étâyes protègiêes}} avouéc lo chouèx « protèccion en cascâda » activâ.\nLos changements du nivél de protèccion de cela pâge afècteront pas la protèccion en cascâda.",
        "protect-default": "Ôtorisar tôs los utilisators",
-       "protect-fallback": "Ôtorisar ren que los utilisators avouéc lo drêt « $1 »",
-       "protect-level-autoconfirmed": "Ôtorisar ren que los utilisators ôtoconfirmâs",
-       "protect-level-sysop": "Ôtorisar ren que los administrators",
+       "protect-fallback": "Ôtorisar mas que los utilisators avouéc lo drêt « $1 »",
+       "protect-level-autoconfirmed": "Ôtorisar mas que los utilisators ôtoconfirmâs",
+       "protect-level-sysop": "Ôtorisar mas que los administrators",
        "protect-summary-cascade": "protèccion en cascâda",
-       "protect-expiring": "èxpire lo $2 a $3 (UTC)",
+       "protect-expiring": "èxpire lo $1 (UTC)",
        "protect-expiring-local": "èxpire lo $1",
        "protect-expiry-indefinite": "sen fin",
-       "protect-cascade": "Protègiér les pâges entrebetâyes dedens ceta (protèccion en cascâda)",
-       "protect-cantedit": "Vos pouede pas changiér los nivéls de protèccion de ceta pâge, vos éd pas la pèrmission de la changiér.",
-       "protect-othertime": "Ôtra dâta d’èxpiracion :",
-       "protect-othertime-op": "ôtra dâta d’èxpiracion",
-       "protect-existing-expiry": "Dâta d’èxpiracion ègzistenta : $2 a $3",
-       "protect-otherreason": "Ôtra rêson / rêson de ples :",
+       "protect-cascade": "Protègiér les pâges rapondues dedens ceta (protèccion en cascâda)",
+       "protect-cantedit": "Vos pouede pas changiér los nivéls de protèccion de cela pâge, vos éd pas la pèrmission de la changiér.",
+       "protect-othertime": "Ôtro temps :",
+       "protect-othertime-op": "ôtro temps",
+       "protect-existing-expiry": "Temps d’èxpiracion ègzistent : $2 a $3",
+       "protect-existing-expiry-infinity": "Temps d’èxpiracion ègzistent : sen fin",
+       "protect-otherreason": "Ôtra rêson ou ben rêson de més :",
        "protect-otherreason-op": "Ôtra rêson",
-       "protect-dropdown": "*Rêsons corentes de protèccion\n** Vandalismo èxcèssif\n** Spame èxcèssif\n** Guèrres de changements contre-productives\n** Pâge a trafic fôrt",
+       "protect-dropdown": "*Rêsons corentes de protèccion\n** Vandalismo afrox\n** Mèssâjos cofos afrox\n** Disputes de changement vouedes\n** Pâge a trafic fôrt",
        "protect-edit-reasonlist": "Changiér les rêsons de protèccion",
        "protect-expiry-options": "1 hora:1 hour,1 jorn:1 day,1 semana:1 week,2 semanes:2 weeks,1 mês:1 month,3 mês:3 months,6 mês:6 months,1 an:1 year,sen fin:infinite",
        "restriction-type": "Pèrmission :",
        "restriction-level-autoconfirmed": "mié-protèccion",
        "restriction-level-all": "tôs los nivéls",
        "undelete": "Vêre les pâges suprimâyes",
-       "undeletepage": "Vêre et refâre des pâges suprimâyes",
-       "undeletepagetitle": "'''Ceta lista contint des vèrsions suprimâyes de [[:$1|$1]].'''",
+       "undeletepage": "Vêre et refâre de pâges suprimâyes",
+       "undeletepagetitle": "<strong>Cela lista-que contint de vèrsions suprimâyes de [[:$1|$1]].</strong>",
        "viewdeletedpage": "Vêre les pâges suprimâyes",
-       "undeletepagetext": "{{PLURAL:$1|Ceta pâge est étâye suprimâye et pués sè trôve|Cetes pâges sont étâyes suprimâyes et pués sè trôvont}} adés dedens les arch·ives, de yô que pô{{PLURAL:$1||von}}t étre refêt{{PLURAL:$1|a|es}}.\nLes arch·ives pôvont étre èfaciêes règuliérement.",
+       "undeletepagetext": "{{PLURAL:$1|Cela pâge-que est étâye suprimâye et pués sè trôve|Celes pâges-que sont étâyes suprimâyes et pués sè trôvont}} adés dedens les arch·ives, de yô que pô{{PLURAL:$1||von}}t étre refêt{{PLURAL:$1|a|es}}.\nLes arch·ives pôvont étre neteyêes règuliérement.",
        "undelete-fieldset-title": "Refâre les vèrsions",
-       "undeleteextrahelp": "Por refâre l’historico complèt de la pâge, lèssiéd totes les câses pas pouentâyes et pués clicâd dessus '''''{{int:undeletebtn}}'''''.\nPor fâre na rèstoracion a mêtiêt, pouentâd les câses que corrèspondont a les vèrsions a refâre et pués clicâd dessus '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "$1 {{PLURAL:$1|vèrsion arch·ivâye|vèrsions arch·ivâyes}}",
+       "undeleteextrahelp": "Por refâre l’historico complèt de la pâge, lèssiéd totes les câses pas pouentâyes et pués cllicâd dessus <strong><em>{{int:undeletebtn}}</em></strong>.\nPor fâre na rèstoracion a mêtiêt, pouentâd les câses que corrèspondont a les vèrsions a refâre et pués cllicâd dessus <strong><em>{{int:undeletebtn}}</em></strong>.",
+       "undeleterevisions": "$1 {{PLURAL:$1|vèrsion suprimâye|vèrsions suprimâyes}}",
        "undeletehistory": "Se vos reféte la pâge, totes les vèrsions seront rebetâyes dedens l’historico.\nS’una pâge novèla avouéc lo mémo nom est étâye fêta dês la suprèssion, les vèrsions refêtes aparêtront dedens l’historico devant.",
-       "undeleterevdel": "La rèstoracion serat pas fêta s’a la fin la vèrsion la ples novèla de la pâge du fichiér réste a mêtiêt suprimâye.\nDens celos câs, vos dête pas pouentar ou ben cachiér la vèrsion suprimâye la ples novèla.",
-       "undeletehistorynoadmin": "Ceta pâge est étâye suprimâye.\nLa rêson de la suprèssion est montrâye dens lo rèsumâ ce-desot, avouéc los dètalys des utilisators que l’ant changiê devant la sina suprèssion.\nLo contegnu èfèctif de celes vèrsions suprimâyes est accèssiblo ren qu’ux administrators.",
+       "undeleterevdel": "La rèstoracion serat pas fêta se finalament la vèrsion la ples novèla de la pâge du fichiér réste a mêtiêt suprimâye.\nDens celos câs, vos dête pas pouentar cachiér la vèrsion suprimâye la ples novèla.",
+       "undeletehistorynoadmin": "Cela pâge est étâye suprimâye.\nLa rêson de la suprèssion est montrâye dens lo rèsumâ ce-desot, avouéc los dètalys des utilisators que l’ant changiê devant sa suprèssion.\nLo contegnu èfèctif de celes vèrsions suprimâyes est accèssiblo ren qu’ux administrators.",
        "undelete-revision": "Vèrsion suprimâye de $1 (du $4 a $5) per $3 :",
-       "undeleterevision-missing": "Vèrsion pas justa ou ben manquenta.\nPôt-étre vos éd un crouyo lim ou ben la vèrsion at possu étre refêta ou enlevâye de les arch·ives.",
+       "undeleterevision-missing": "Vèrsion pas justa ou ben entrovâbla.\nPôt-étre vos éd un crouyo lim ou ben la vèrsion at possu étre refêta enlevâye de les arch·ives.",
        "undelete-nodiff": "Niona vèrsion devant trovâye.",
        "undeletebtn": "Refâre",
        "undeletelink": "vêre / refâre",
        "undeletedrevisions-files": "$1 vèrsion{{PLURAL:$1||s}} et $2 fichiér{{PLURAL:$2||s}} refêts",
        "undeletedfiles": "$1 {{PLURAL:$1|fichiér refêt|fichiérs refêts}}",
        "cannotundelete": "Falyita de la rèstoracion :\n$1",
-       "undeletedpage": "'''$1 est étâye refêta'''\n\nVêde lo [[Special:Log/delete|jornal de les suprèssions]] por avêr na lista de les novèles suprèssions et rèstoracions.",
-       "undelete-header": "Vêde lo [[Special:Log/delete|jornal de les suprèssions]] por avêr les pâges suprimâyes dês pou.",
-       "undelete-search-title": "Rechèrchiér des pâges suprimâs",
-       "undelete-search-box": "Rechèrchiér des pâges suprimâs",
+       "undeletedpage": "<strong>$1 est étâye refêta</strong>\n\nVêde lo [[Special:Log/delete|jornâl de les suprèssions]] por avêr na lista de les novèles suprèssions et rèstoracions.",
+       "undelete-header": "Vêde lo [[Special:Log/delete|jornâl de les suprèssions]] por avêr les pâges suprimâyes dês pou.",
+       "undelete-search-title": "Rechèrchiér de pâges suprimâyes",
+       "undelete-search-box": "Rechèrchiér de pâges suprimâyes",
        "undelete-search-prefix": "Montrar les pâges que començont per :",
        "undelete-search-submit": "Rechèrchiér",
-       "undelete-no-results": "Niona pâge d’ense at étâ trovâ dens les arch·ives de suprèssion.",
-       "undelete-filename-mismatch": "Empossiblo de refâre la vèrsion du fichiér datâ du $1 : lo nom de fichiér corrèspond pas.",
-       "undelete-bad-store-key": "Empossiblo de refâre la vèrsion du fichiér datâ du $1 : lo fichiér ére absent devant la suprèssion.",
-       "undelete-cleanup-error": "Èrror pendent la suprèssion du fichiér de les arch·ives inutilisâ « $1 ».",
-       "undelete-missing-filearchive": "Empossiblo de refâre lo fichiér de les arch·ives avouéc lo numerô $1 perce qu’il est pas dens la bâsa de balyês.\nIl at pôt-étre ja étâ refêt.",
-       "undelete-error": "Èrror pendent la rèstoracion de la pâge",
-       "undelete-error-short": "Èrror pendent la rèstoracion du fichiér : $1",
-       "undelete-error-long": "Des èrrors ont étâ rencontrâs pendent la rèstoracion du fichiér :\n\n$1",
-       "undelete-show-file-confirm": "Éte-vos de sûr de volêr vêre una vèrsion suprimâ du fichiér « <nowiki>$1</nowiki> » que dâte du $2 a $3 ?",
+       "undelete-no-results": "Niona pâge d’ense est étâye trovâye dedens les arch·ives de suprèssion.",
+       "undelete-filename-mismatch": "Y at pas moyen de refâre la vèrsion du fichiér datâye du $1 : lo nom de fichiér corrèspond pas.",
+       "undelete-bad-store-key": "Y at pas moyen de refâre la vèrsion du fichiér datâye du $1 : lo fichiér ére entrovâblo devant la suprèssion.",
+       "undelete-cleanup-error": "Fôta pendent la suprèssion du fichiér de les arch·ives pas empleyê « $1 ».",
+       "undelete-missing-filearchive": "Y at pas moyen de refâre lo fichiér de les arch·ives avouéc l’ID $1, il est pas dedens la bâsa de balyês.\nPôt-étre il est ja étâ refêt.",
+       "undelete-error": "Fôta pendent la rèstoracion de la pâge",
+       "undelete-error-short": "Fôta pendent la rèstoracion du fichiér : $1",
+       "undelete-error-long": "Des fôtes sont arrevâyes pendent la rèstoracion du fichiér :\n\n$1",
+       "undelete-show-file-confirm": "Vos éte de sûr de volêr vêre na vèrsion suprimâye du fichiér « <nowiki>$1</nowiki> » que dâte du $2 a $3 ?",
        "undelete-show-file-submit": "Ouè",
        "namespace": "Èspâço de noms :",
        "invert": "Envèrsar lo chouèx",
-       "tooltip-invert": "Pouentâd ceta câsa por cachiér los changements de les pâges dens l’èspâço de noms chouèsi (et l’èspâço de noms associyê avouéc se pouentâ)",
+       "tooltip-invert": "Pouentâd cela câsa por cachiér los changements de les pâges dedens l’èspâço de noms chouèsi (et l’èspâço de noms associyê avouéc se pouentâ)",
+       "tooltip-whatlinkshere-invert": "Pouentâd cela câsa por cachiér los lims de les pâges dedens l’èspâço de noms chouèsi.",
        "namespace_association": "Èspâço de noms associyê",
-       "tooltip-namespace_association": "Pouentâd ceta câsa por encllure avouéc l’èspâço de noms de discussion associyê a l’èspâço de noms chouèsi",
+       "tooltip-namespace_association": "Pouentâd cela câsa por rapondre avouéc l’èspâço de noms de discussion de chousa associyê a l’èspâço de noms chouèsi",
        "blanknamespace": "(Principâl)",
        "contributions": "Contribucions de l’utilisat{{GENDER:$1|or|rice}}",
-       "contributions-title": "Lista de les contribucions a l’usanciér $1",
+       "contributions-title": "Contribucions de l’utilisat{{GENDER:$1|or|rice}} $1",
        "mycontris": "Contribucions",
+       "anoncontribs": "Contribucions",
        "contribsub2": "Por {{GENDER:$3|$1}} ($2)",
-       "nocontribs": "Y at gins de changement que corrèspond a cetos critèros.",
+       "contributions-userdoesnotexist": "Lo comptio utilisator « $1 » est pas encartâ.",
+       "nocontribs": "Y at gins de changement que corrèspond a celos critèros.",
        "uctop": "(d’ora)",
        "month": "Dês lo mês (et devant) :",
        "year": "Dês l’an (et devant) :",
        "sp-contributions-newbies": "Montrar ren que les contribucions des novéls utilisators",
-       "sp-contributions-newbies-sub": "Permié los comptos novéls",
-       "sp-contributions-newbies-title": "Contribucions d’usanciérs permié los comptos novéls",
-       "sp-contributions-blocklog": "jornal des blocâjos",
-       "sp-contributions-deleted": "contribucions suprimâs",
+       "sp-contributions-newbies-sub": "Entre-mié los comptios novéls",
+       "sp-contributions-newbies-title": "Contribucions d’utilisators entre-mié los comptios novéls",
+       "sp-contributions-blocklog": "jornâl des blocâjos",
+       "sp-contributions-suppresslog": "contribucions d’utilisators rèprimâyes",
+       "sp-contributions-deleted": "contribucions d’utilisators suprimâyes",
        "sp-contributions-uploads": "tèlèchargements",
-       "sp-contributions-logs": "jornals",
+       "sp-contributions-logs": "jornâls",
        "sp-contributions-talk": "discutar",
-       "sp-contributions-userrights": "administrar los drêts d’usanciér",
-       "sp-contributions-blocked-notice": "Ceti usanciér est ora blocâ.\nLa dèrriére entrâ du jornal des blocâjos est disponibla ce-desot :",
-       "sp-contributions-blocked-notice-anon": "Ceta adrèce IP est ora blocâ.\nLa dèrriére entrâ du jornal des blocâjos est disponibla ce-desot :",
+       "sp-contributions-userrights": "maneyér los drêts d’utilisator",
+       "sp-contributions-blocked-notice": "Ora cél utilisator est blocâ.\nLa dèrriére entrâ du jornâl des blocâjos est balyêe ce-desot coment rèference :",
+       "sp-contributions-blocked-notice-anon": "Ora cel’adrèce IP est blocâye.\nLa dèrriére entrâ du jornâl des blocâjos est balyêe ce-desot coment rèference :",
        "sp-contributions-search": "Rechèrchiér les contribucions",
-       "sp-contributions-username": "Adrèce IP ou ben nom d’usanciér :",
-       "sp-contributions-toponly": "Montrar ren que les novèles vèrsions",
+       "sp-contributions-username": "Adrèce IP ou ben nom d’utilisator :",
+       "sp-contributions-toponly": "Montrar ren que los changements que sont les dèrriéres vèrsions",
+       "sp-contributions-newonly": "Montrar ren que los changements que sont de crèacions de pâge",
        "sp-contributions-submit": "Rechèrchiér",
-       "whatlinkshere": "Pâges liyês",
+       "whatlinkshere": "Pâges liyêes",
        "whatlinkshere-title": "Pâges que pouentont vers « $1 »",
        "whatlinkshere-page": "Pâge :",
-       "linkshere": "Les pâges ce-desot contegnont un lim de vers '''[[:$1]]''' :",
-       "nolinkshere": "Niona pâge contint de lim de vers '''[[:$1]]'''.",
-       "nolinkshere-ns": "Niona pâge contint de lim de vers '''[[:$1]]''' dens l’èspâço de noms chouèsi.",
+       "linkshere": "Celes pâges-que contegnont un lim de vers <strong>[[:$1]]</strong> :",
+       "nolinkshere": "Niona pâge contint de lim de vers <strong>[[:$1]]</strong>.",
+       "nolinkshere-ns": "Niona pâge contint de lim de vers <strong>[[:$1]]</strong> dedens l’èspâço de noms chouèsi.",
        "isredirect": "pâge de redirèccion",
-       "istemplate": "encllusion",
+       "istemplate": "transcllusion",
        "isimage": "lim de vers lo fichiér",
        "whatlinkshere-prev": "{{PLURAL:$1|devant|$1 devant}}",
        "whatlinkshere-next": "{{PLURAL:$1|aprés|$1 aprés}}",
        "whatlinkshere-links": "← lims",
        "whatlinkshere-hideredirs": "$1 les redirèccions",
-       "whatlinkshere-hidetrans": "$1 les encllusions",
+       "whatlinkshere-hidetrans": "$1 les transcllusions",
        "whatlinkshere-hidelinks": "$1 los lims",
-       "whatlinkshere-hideimages": "$1 los fichiérs liyês",
+       "whatlinkshere-hideimages": "$1 los lims de vers lo fichiér",
        "whatlinkshere-filters": "Filtros",
-       "autoblockid": "Blocâjo ôtomatico #$1",
-       "block": "Blocar l’usanciér",
-       "unblock": "Dèblocar l’usanciér",
-       "blockip": "Blocar l’usanciér",
-       "blockip-legend": "Blocar l’usanciér",
-       "blockiptext": "Utilisâd lo formulèro ce-desot por blocar l’accès en ècritura dês una adrèce IP spècefica ou ben un nom d’usanciér.\nUna tâla mesera devrêt étre prêsa ren que por empachiér lo vandalismo et en acôrd avouéc les [[{{MediaWiki:Policy-url}}|règlles de dedens]].\nBalyéd ce-desot una rêson justa (per ègzemplo en citent les pâges qu’ont étâ vandalisâs).",
-       "ipaddressorusername": "Adrèce IP ou ben nom d’usanciér :",
+       "whatlinkshere-submit": "Emmodar",
+       "autoblockid": "Blocâjo ôtomatico n° $1",
+       "block": "Blocar l’utilisator",
+       "unblock": "Dèblocar l’utilisator",
+       "blockip": "Blocar l’utilisat{{GENDER:$1|or|rice}}",
+       "blockip-legend": "Blocar l’utilisator",
+       "blockiptext": "Empleyéd lo formulèro ce-desot por blocar l’accès en ècritura dês un’adrèce IP spècifica un nom d’utilisator spècifico.\nNa mesera d’ense devrêt étre prêsa ren que por empachiér lo vandalismo et pués en acôrd avouéc les [[{{MediaWiki:Policy-url}}|politiques]].\nBalyéd ce-desot na rêson prècisa (per ègzemplo en citent les pâges que sont étâyes vandalisâyes).\nVos pouede blocar de plages IP en empleyent la sintaxa [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] ; la ples granta plage ôtorisâye est /$1 por IPv4 et /$2 por IPv6.",
+       "ipaddressorusername": "Adrèce IP ou ben nom d’utilisator :",
        "ipbexpiry": "Temps devant èxpiracion :",
        "ipbreason": "Rêson :",
-       "ipbreason-dropdown": "*Rêsons corentes de blocâjo\n** Entrebetâ d’enformacions fôsses\n** Suprèssion de contegnu de les pâges\n** Entrebetâ de lims de defôr publicitèros (spame)\n** Entrebetâ de contegnu sen gins de significacion et d’ècovelyes dedens les pâges\n** Tentativa d’entimidacion ou ben de torment\n** Abus d’usâjo d’un mouél de comptos\n** Nom d’utilisator pas accèptâblo",
-       "ipb-hardblock": "Empache los changements des usanciérs encartâs qu’utilisont cela adrèce IP",
-       "ipbcreateaccount": "Empachiér la crèacion de compto",
-       "ipbemailban": "Empachiér l’usanciér de mandar des mèssâjos",
-       "ipbenableautoblock": "Blocar ôtomaticament la dèrriére adrèce IP utilisâ per l’usanciér et pués totes ses adrèces IP a vegnir que porrêt èprovar",
-       "ipbsubmit": "Blocar ceti usanciér",
+       "ipbreason-dropdown": "*Rêsons corentes de blocâjo\n** Entrebetâ d’enformacions fôsses\n** Suprèssion de contegnu de les pâges\n** Raponsa de lims de defôr cofos (recllâma)\n** Entrebetâ de contegnu sen gins de significacion et d’ècovelyes dedens les pâges\n** Èprôva d’entimidacion de pèrsècucion\n** Abus d’usâjo d’un mouél de comptios\n** Nom d’utilisator pas accèptâblo",
+       "ipb-hardblock": "Empachiér los utilisators branchiês de changiér en empleyent cel’adrèce IP",
+       "ipbcreateaccount": "Empachiér la crèacion de comptio",
+       "ipbemailban": "Empachiér l’utilisator de mandar de mèssâjos",
+       "ipbenableautoblock": "Blocar ôtomaticament la dèrriére adrèce IP empleyêe per l’utilisator et pués totes ses adrèces IP a vegnir que porrêt èprovar",
+       "ipbsubmit": "Blocar cél utilisator",
        "ipbother": "Ôtro temps :",
        "ipboptions": "2 hores:2 hours,1 jorn:1 day,3 jorns:3 days,1 semana:1 week,2 semanes:2 weeks,1 mês:1 month,3 mês:3 months,6 mês:6 months,1 an:1 year,sen fin:infinite",
-       "ipbhidename": "Cachiér lo nom d’usanciér des changements et de les listes",
-       "ipbwatchuser": "Siuvre les pâges usanciér et de discussion a ceti usanciér",
-       "ipb-disableusertalk": "Empache cél usanciér de changiér sa prôpra pâge de discussion pendent lo temps de son blocâjo",
-       "ipb-change-block": "Tornar blocar ceti usanciér avouéc celos paramètres",
+       "ipbhidename": "Cachiér lo nom d’utilisator des changements et de les listes",
+       "ipbwatchuser": "Siuvre les pâges utilisator et de discussion a cél utilisator",
+       "ipb-disableusertalk": "Empachiér cél utilisator de changiér la sina pâge de discussion pendent lo blocâjo",
+       "ipb-change-block": "Tornar blocar l’utilisator avouéc cela configuracion",
        "ipb-confirm": "Confirmar lo blocâjo",
-       "badipaddress": "L’adrèce IP est fôssa.",
+       "badipaddress": "L’adrèce IP est pas justa.",
        "blockipsuccesssub": "Blocâjo reussi",
-       "blockipsuccesstext": "[[Special:Contributions/$1|$1]] at étâ blocâ.<br />\nVêde la [[Special:BlockList|lista des blocâjos]] por revêre los blocâjos.",
-       "ipb-blockingself": "Vos éte prèst a vos blocar vos-mémo !  Éte-vos de sûr de lo volêr fâre ?",
-       "ipb-confirmhideuser": "Vos éte prèst a blocar un usanciér avouéc « cachiér l’usanciér » activâ.  Cen suprime lo nom a l’usanciér dens totes les listes et les entrâs du jornal.  Éte-vos de sûr de lo volêr fâre ?",
+       "blockipsuccesstext": "[[Special:Contributions/$1|$1]] est {{GENDER:$1|étâ blocâ|étâye blocâye}}.<br />\nVêde la [[Special:BlockList|lista des blocâjos]] por revêre los blocâjos.",
+       "ipb-blockingself": "Vos éte prèst a vos blocar vos-mémo ! Vos éte de sûr d’o volêr fâre ?",
+       "ipb-confirmhideuser": "Vos éte prèst a blocar un utilisator avouéc « cachiér l’utilisator » activâ. Cen rèprime lo nom a l’utilisator dedens totes les listes et les entrês du jornâl. Vos éte de sûr d’o volêr fâre ?",
+       "ipb-confirmaction": "Se vos éte de sûr d’o volêr franc fâre, se vos plét pouentâd lo champ « {{int:ipb-confirm}} » d’avâl.",
        "ipb-edit-dropdown": "Changiér les rêsons de blocâjo",
        "ipb-unblock-addr": "Dèblocar $1",
-       "ipb-unblock": "Dèblocar un usanciér ou ben una adrèce IP",
-       "ipb-blocklist": "Vêde los blocâjos ègzistents",
-       "ipb-blocklist-contribs": "Contribucions por $1",
-       "unblockip": "Dèblocar l’usanciér",
-       "unblockiptext": "Utilisâd lo formulèro ce-desot por rètablir l’accès en ècritura dês una adrèce IP spècefica ou ben un nom d’usanciér.",
-       "ipusubmit": "Enlevar ceti blocâjo",
-       "unblocked": "[[User:$1|$1]] at étâ dèblocâ",
-       "unblocked-range": "$1 at étâ dèblocâ",
-       "unblocked-id": "Lo blocâjo $1 at étâ enlevâ",
-       "blocklist": "Usanciérs blocâs",
-       "ipblocklist": "Usanciérs blocâs",
-       "ipblocklist-legend": "Chèrchiér un usanciér blocâ",
-       "blocklist-userblocks": "Cachiér los blocâjos de comptos",
+       "ipb-unblock": "Dèblocar un nom d’utilisator un’adrèce IP",
+       "ipb-blocklist": "Vêre los blocâjos ègzistents",
+       "ipb-blocklist-contribs": "Contribucions por {{GENDER:$1|$1}}",
+       "unblockip": "Dèblocar un utilisator",
+       "unblockiptext": "Empleyéd lo formulèro ce-desot por rètablir l’accès en ècritura dês un’adrèce IP blocâye un nom d’utilisator blocâ los côps devant.",
+       "ipusubmit": "Enlevar cél blocâjo",
+       "unblocked": "[[User:$1|$1]] est {{GENDER:$1|étâ dèblocâ|étâye dèblocâye}}.",
+       "unblocked-range": "$1 est étâ dèblocâ.",
+       "unblocked-id": "Lo blocâjo $1 est étâ enlevâ.",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] est étâ dèblocâ.",
+       "blocklist": "Utilisators blocâs",
+       "ipblocklist": "Utilisators blocâs",
+       "ipblocklist-legend": "Trovar un utilisator blocâ",
+       "blocklist-userblocks": "Cachiér los blocâjos de comptios",
        "blocklist-tempblocks": "Cachiér los blocâjos temporèros",
-       "blocklist-addressblocks": "Cachiér los blocâjos d’adrèces IP solètes",
-       "blocklist-rangeblocks": "Cachiér los blocos de portâ",
+       "blocklist-addressblocks": "Cachiér los blocâjos de mas qu’un’adrèce IP",
+       "blocklist-rangeblocks": "Cachiér los blocâjos de plages IP",
        "blocklist-timestamp": "Dâta et hora",
        "blocklist-target": "Ciba",
-       "blocklist-expiry": "Dâta d’èxpiracion",
+       "blocklist-expiry": "Èxpiracion",
        "blocklist-by": "Administrator qu’at fêt lo blocâjo",
-       "blocklist-params": "Paramètres de blocâjo",
+       "blocklist-params": "Paramètros de blocâjo",
        "blocklist-reason": "Rêson",
        "ipblocklist-submit": "Rechèrchiér",
        "ipblocklist-localblock": "Blocâjo locâl",
        "ipblocklist-otherblocks": "{{PLURAL:$1|Ôtro blocâjo|Ôtros blocâjos}}",
        "infiniteblock": "sen fin",
        "expiringblock": "èxpire lo $1 a $2",
-       "anononlyblock": "solament los usanciérs pas encartâs",
+       "anononlyblock": "mas que los utilisators anonimos",
        "noautoblockblock": "blocâjo ôtomatico dèsactivâ",
-       "createaccountblock": "crèacion de compto dèfendua",
-       "emailblock": "mèssageria èlèctronica blocâ",
-       "blocklist-nousertalk": "pôt pas changiér sa prôpra pâge de discussion",
-       "ipblocklist-empty": "Ora, la lista a les adrèces IP blocâs est voueda.",
-       "ipblocklist-no-results": "L’adrèce IP ou ben l’usanciér demandâ est pas blocâ.",
+       "createaccountblock": "crèacion de comptio dèsactivâye",
+       "emailblock": "mèssageria èlèctronica dèsactivâye",
+       "blocklist-nousertalk": "pôt pas changiér la sina pâge de discussion",
+       "ipblocklist-empty": "La lista des blocâjos est voueda.",
+       "ipblocklist-no-results": "L’adrèce IP demandâye lo nom d’utilisator demandâ est pas blocâ(ye).",
        "blocklink": "blocar",
        "unblocklink": "dèblocar",
        "change-blocklink": "changiér lo blocâjo",
        "contribslink": "contribucions",
        "emaillink": "mandar un mèssâjo",
-       "autoblocker": "Vos avéd étâ blocâ ôtomaticament perce que voutra adrèce IP at étâ utilisâ dèrriérement per « [[User:$1|$1]] ».\nLa rêson balyê por lo blocâjo a $1 est : « $2 ».",
-       "blocklogpage": "Jornal des blocâjos",
-       "blocklog-showlog": "Ceti usanciér at étâ blocâ dês devant.\nLo jornal des blocâjos est disponiblo ce-desot :",
-       "blocklog-showsuppresslog": "Ceti usanciér at étâ blocâ et pués cachiê dês devant.\nLo jornal de les suprèssions est disponiblo ce-desot :",
-       "blocklogentry": "at blocâ [[$1]] ; èxpiracion : $2 $3",
-       "reblock-logentry": "at changiê los paramètres du blocâjo a [[$1]] avouéc una èxpiracion u $2 $3",
-       "blocklogtext": "O est lo jornal de les accions de blocâjo et dèblocâjo d’utilisators.\nLes adrèces IP blocâyes ôtomaticament sont pas listâyes.\nVêde la [[Special:BlockList|lista des blocâjos]] por la lista des banissements et des blocâjos que sont ora actifs.",
+       "autoblocker": "Vos éte étâ blocâ ôtomaticament, voutron adrèce IP est étâye empleyêe dês pou per « [[User:$1|$1]] ».\nLa rêson balyêe por lo blocâjo de $1 est « $2 ».",
+       "blocklogpage": "Jornâl des blocâjos",
+       "blocklog-showlog": "Cél utilisator est étâ blocâ los côps devant.\nLo jornâl des blocâjos est balyê ce-desot coment rèference :",
+       "blocklog-showsuppresslog": "Cél utilisator est étâ blocâ et pués cachiê los côps devant.\nLo jornâl de les rèprèssions est balyê ce-desot coment rèference :",
+       "blocklogentry": "at blocâ [[$1]] avouéc un temps d’èxpiracion de $2 $3",
+       "reblock-logentry": "at changiê la configuracion du blocâjo de [[$1]] avouéc un temps d’èxpiracion de $2 $3",
+       "blocklogtext": "O est lo jornâl de les accions de blocâjo et dèblocâjo d’utilisators.\nLes adrèces IP blocâyes ôtomaticament sont pas listâyes.\nVêde la [[Special:BlockList|lista des blocâjos]] por la lista des banissements et des blocâjos que sont ora actifs.",
        "unblocklogentry": "at dèblocâ $1",
-       "block-log-flags-anononly": "solament los usanciérs pas encartâs",
-       "block-log-flags-nocreate": "crèacion de compto dèfendua",
-       "block-log-flags-noautoblock": "ôtoblocâjo a les adrèces IP dèsactivâ",
-       "block-log-flags-noemail": "èxpèdicion de mèssâjo dèfendua",
-       "block-log-flags-nousertalk": "pôt pas changiér sa prôpra pâge de discussion",
-       "block-log-flags-angry-autoblock": "ôtoblocâjo mèlyorâ activâ",
-       "block-log-flags-hiddenname": "nom d’usanciér cachiê",
-       "range_block_disabled": "Lo povêr d’administrator de fâre des blocâjos de plages d’adrèces IP est dèsactivâ.",
-       "ipb_expiry_invalid": "Temps d’èxpiracion fôx.",
-       "ipb_expiry_temp": "Los blocâjos de noms d’usanciér cachiês dêvont étre sen fin.",
-       "ipb_hide_invalid": "Empossiblo de suprimar ceti compto ; semble avêr trop de changements.",
+       "block-log-flags-anononly": "mas que los utilisators anonimos",
+       "block-log-flags-nocreate": "crèacion de comptio dèsactivâye",
+       "block-log-flags-noautoblock": "blocâjo ôtomatico dèsactivâ",
+       "block-log-flags-noemail": "mèssageria èlèctronica dèsactivâye",
+       "block-log-flags-nousertalk": "pôt pas changiér la sina pâge de discussion",
+       "block-log-flags-angry-autoblock": "blocâjo ôtomatico bônâ activâ",
+       "block-log-flags-hiddenname": "nom d’utilisator cachiê",
+       "range_block_disabled": "Lo moyen d’administrator de fâre de blocâjos de plages IP est dèsactivâ.",
+       "ipb_expiry_invalid": "Temps d’èxpiracion pas justo.",
+       "ipb_expiry_old": "Lo temps d’èxpiracion est ja passâ.",
+       "ipb_expiry_temp": "Los blocâjos de noms d’utilisator cachiês dêvont étre sen fin.",
+       "ipb_hide_invalid": "Y at pas moyen de rèprimar cél comptio ; semble avêr més {{PLURAL:$1|d’un changement|de $1 changements}}.",
        "ipb_already_blocked": "« $1 » est ja blocâ",
-       "ipb-needreblock": "$1 est ja blocâ.\nVoléd-vos changiér los paramètres ?",
+       "ipb-needreblock": "$1 est ja blocâ.\nVos voléd changiér la configuracion ?",
        "ipb-otherblocks-header": "{{PLURAL:$1|Ôtro blocâjo|Ôtros blocâjos}}",
-       "unblock-hideuser": "Vos pouede pas dèblocar cél usanciér, perce que son nom d’usanciér at étâ cachiê.",
-       "ipb_cant_unblock": "Èrror : numerô de blocâjo $1 pas trovâ.\nO est possiblo qu’un dèblocâjo èye ja étâ fêt.",
-       "ipb_blocked_as_range": "Èrror : l’adrèce IP $1 est pas blocâ tot drêt et pôt vêr pas étre dèblocâ.\nPortant, el est avouéc la plage $2 que pôt étre dèblocâ.",
-       "ip_range_invalid": "Plage d’adrèces IP fôssa.",
-       "ip_range_toolarge": "Los blocâjos de plages d’adrèces IP ples grantes que /$1 sont pas ôtorisâs.",
-       "proxyblocker": "Bloquior de sèrvors mandatèros (''proxies'')",
-       "proxyblockreason": "Voutra adrèce IP at étâ blocâ perce qu’o est un sèrvor mandatèro (''proxy'') uvèrt.\nVos volyéd veriér vers voutron fornissor d’accès u Malyâjo ou ben voutra assistance tècnica et l’enformar de cél problèmo de sècuritât sèriox.",
-       "sorbsreason": "Voutra adrèce IP est listâ coment sèrvor mandatèro (''proxy'') uvèrt dens lo DNSBL utilisâ per {{SITENAME}}.",
-       "sorbs_create_account_reason": "Voutra adrèce IP est listâ coment sèrvor mandatèro (''proxy'') uvèrt dens lo DNSBL utilisâ per {{SITENAME}}.\nVos pouede pas fâre un compto.",
-       "cant-see-hidden-user": "L’usanciér que vos tâchiéd de blocar at ja étâ blocâ et cachiê.\nPas èyent lo drêt hideuser, vos pouede pas vêre ou ben changiér lo blocâjo a l’usanciér.",
-       "ipbblocked": "Vos pouede pas blocar ou ben dèblocar d’ôtros usanciérs, perce que vos éte vos-mémo blocâ",
-       "ipbnounblockself": "Vos éte pas ôtorisâ a vos dèblocar vos-mémo",
-       "lockdb": "Vèrrolyér la bâsa de balyês",
-       "unlockdb": "Dèvèrrolyér la bâsa de balyês",
-       "lockdbtext": "Lo vèrrolyâjo de la bâsa de balyês empachierat tôs los usanciérs de changiér des pâges, d’encartar lors prèferences, de changiér lor lista de survelyence et pués de fâre totes les ôtres opèracions qu’ont fôta des changements dens la bâsa de balyês.\nVolyéd confirmar qu’o est franc cen que vos voléd fâre et que vos dèvèrrolyeréd la bâsa setout que voutra opèracion de mantegnence serat chavonâ.",
-       "unlockdbtext": "Lo dèvèrrolyâjo de la bâsa de balyês tornerat pèrmetre a tôs los usanciérs de changiér des pâges, d’encartar lors prèferences, de changiér lor lista de survelyence et pués de fâre totes les ôtres opèracions qu’ont fôta des changements dens la bâsa de balyês.\nVolyéd confirmar qu’o est franc cen que vos voléd fâre.",
-       "lockconfirm": "Ouè, confirmo que souhèto vèrrolyér la bâsa de balyês.",
-       "unlockconfirm": "Ouè, confirmo que souhèto dèvèrrolyér la bâsa de balyês.",
-       "lockbtn": "Vèrrolyér la bâsa de balyês",
-       "unlockbtn": "Dèvèrrolyér la bâsa de balyês",
+       "unblock-hideuser": "Vos pouede pas dèblocar cél utilisator, son nom d’utilisator est étâ cachiê.",
+       "ipb_cant_unblock": "Fôta : identifient de blocâjo $1 pas trovâ. O est possiblo qu’un dèblocâjo èye ja étâ fêt.",
+       "ipb_blocked_as_range": "Fôta : l’adrèce IP $1 est pas blocâye tot drêt et pués pôt vêr pas étre dèblocâye.\nPortant el est avouéc la plage IP $2 que pôt étre dèblocâye.",
+       "ip_range_invalid": "Plage IP pas justa.",
+       "ip_range_toolarge": "Los blocâjos de plages IP ples grantes que /$1 sont pas ôtorisâs.",
+       "proxyblocker": "Bloquior de sèrviors mandatèros (<em>proxies</em>)",
+       "proxyblockreason": "Voutron adrèce IP est étâye blocâye, o est un sèrvior mandatèro (<em>proxy</em>) uvèrt.\nSe vos plét, veriéd-vos vers voutron fornissor d’accès u Malyâjo voutron supôrt tècnico et pués enformâd-los de cél problèmo de sècuritât sèriox.",
+       "sorbsreason": "Voutron adrèce IP est listâye coment sèrvior mandatèro (<em>proxy</em>) uvèrt dedens lo DNSBL empleyê per {{SITENAME}}.",
+       "sorbs_create_account_reason": "Voutron adrèce IP est listâye coment sèrvior mandatèro (<em>proxy</em>) uvèrt dedens lo DNSBL empleyê per {{SITENAME}}.\nVos pouede pas fâre un comptio.",
+       "xffblockreason": "Un’adrèce IP dedens l’en-téta X-Forwarded-For, ou ben la voutra ou ben cela d’un sèrvior mandatèro (<em>proxy</em>) que vos empleyéd, est étâye blocâye. La rêson originâla du blocâjo ére : $1",
+       "cant-see-hidden-user": "L’utilisator que vos èprovâd de blocar est ja étâ blocâ et cachiê.\nSen lo drêt « hideuser », vos pouede pas vêre changiér lo blocâjo de l’utilisator.",
+       "ipbblocked": "Vos pouede pas blocar dèblocar d’ôtros utilisators, vos éte vos-mém{{GENDER:|o|a}} blocâ{{GENDER:||ye}}.",
+       "ipbnounblockself": "Vos éte pas ôtorisâ{{GENDER:||ye}} a vos dèblocar vos-mém{{GENDER:|o|a}}.",
+       "lockdb": "Cotar la bâsa de balyês",
+       "unlockdb": "Dècotar la bâsa de balyês",
+       "lockdbtext": "Lo vèrroly de la bâsa de balyês empachierat tôs los utilisators de changiér de pâges, d’encartar lors prèferences, de changiér lor lista de gouârda et pués de fâre totes les ôtres opèracions qu’ant fôta de changements dedens la bâsa de balyês.\nSe vos plét, confirmâd qu’o est franc cen que vos voléd fâre et que vos la dècoteréd setout que voutra rotina d’entretin serat chavonâye.",
+       "unlockdbtext": "La fin du vèrroly de la bâsa de balyês tornerat pèrmetre a tôs los utilisators de changiér de pâges, d’encartar lors prèferences, de changiér lor lista de gouârda et pués de fâre totes les ôtres opèracions qu’ant fôta de changements dedens la bâsa de balyês.\nSe vos plét, confirmâd qu’o est franc cen que vos voléd fâre.",
+       "lockconfirm": "Ouè, confirmo que vuel cotar la bâsa de balyês.",
+       "unlockconfirm": "Ouè, confirmo que vuel dècotar la bâsa de balyês.",
+       "lockbtn": "Cotar la bâsa de balyês",
+       "unlockbtn": "Dècotar la bâsa de balyês",
        "locknoconfirm": "Vos éd pas pouentâ la câsa de confirmacion.",
-       "lockdbsuccesssub": "Vèrrolyâjo de la bâsa de balyês reussi",
-       "unlockdbsuccesssub": "Vèrrolyâjo de la bâsa de balyês enlevâ",
-       "lockdbsuccesstext": "La bâsa de donâs est étâye vèrrolyêye.<br />\nOubliâd pas de [[Special:UnlockDB|la dèvèrrolyér]] quand vos aréd chavonâ voutra opèracion de mantegnence.",
-       "unlockdbsuccesstext": "La bâsa de balyês at étâ dèvèrrolyê.",
-       "lockfilenotwritable": "Lo fichiér de vèrrolyâjo de la bâsa de balyês est pas enscriptiblo.\nPor vèrrolyér ou ben dèvèrrolyér la bâsa de balyês, dêt étre accèssiblo en ècritura dês lo sèrvor vouèbe.",
-       "databasenotlocked": "La bâsa de balyês est pas vèrrolyê.",
-       "lockedbyandtime": "(per $1 lo $2 a $3)",
-       "move-page": "Renomar $1",
-       "move-page-legend": "Renomar una pâge",
-       "movepagetext": "Utilisâd lo formulèro ce-desot por renomar una pâge, en dèplacient tot son historico vers lo novél nom.\nLo viely titro vindrat una pâge de redirèccion de vers lo titro novél.\nVos pouede betar a jorn ôtomaticament les redirèccions d’ora que pouentont vers lo titro originâl.\nSe vos chouèsésséd de pas lo fâre, assurâd-vos de controlar tota [[Special:DoubleRedirects|redirèccion dobla]] ou ben [[Special:BrokenRedirects|câssa]].\nVos avéd la rèsponsabilitât de vos assurar que los lims continuont de pouentar vers lor dèstinacion suposâ.\n\nNotâd que la pâge serat '''pas''' dèplaciê s’y at ja una pâge avouéc lo titro novél, a muens que cela dèrriére seye voueda ou ben seye ren qu’una redirèccion et que son historico des changements seye vouedo.\nCen vôt dére que vos pouede renomar una pâge vers sa posicion d’origina se vos éd fêt una èrror, mas que vos pouede pas ècllafar una pâge ja ègzistenta.\n\n'''ATENCION !'''\nCen pôt provocar un changement fôrt et emprèvu por una pâge sovent vua ;\nassurâd-vos de nen avêr comprês les consèquences devant que continuar.",
-       "movepagetext-noredirectfixer": "Utilisâd lo formulèro ce-desot por renomar una pâge, en dèplacient tot son historico vers lo novél nom.\nLo viely titro vindrat una pâge de redirèccion de vers lo titro novél.\nControlâd bien les [[Special:DoubleRedirects|redirèccions dobles]] ou ben [[Special:BrokenRedirects|câsses]].\nVos avéd la rèsponsabilitât de vos assurar que los lims continuont de pouentar vers lor dèstinacion suposâ.\n\nNotâd que la pâge serat '''pas''' dèplaciê s’y at ja una pâge avouéc lo titro novél, a muens que cela dèrriére seye voueda ou ben seye ren qu’una redirèccion et que son historico des changements seye vouedo.\nCen vôt dére que vos pouede renomar una pâge vers sa posicion d’origina se vos éd fêt una èrror, mas que vos pouede pas ècllafar una pâge ja ègzistenta.\n\n'''ATENCION !'''\nCen pôt provocar un changement fôrt et emprèvu por una pâge sovent vua ;\nassurâd-vos de nen avêr comprês les consèquences devant que continuar.",
-       "movepagetalktext": "La pâge de discussion associyê, se presente, serat renomâ ôtomaticament avouéc '''a muens que :'''\n* una pâge de discussion pas voueda ègziste ja avouéc lo novél nom, ou ben\n* vos pouentâd pas la câsa ce-desot.\n\nDens celos câs, vos devréd renomar ou ben fusionar la pâge a la man se vos lo voléd.",
-       "moveuserpage-warning": "'''Atencion :''' vos éte prèst a renomar una pâge usanciér. Volyéd notar que solament la pâge serat renomâ et que l’usanciér serat '''pas''' renomâ.",
-       "movenologintext": "Por povêr renomar una pâge, vos dête étre [[Special:UserLogin|branchiê]] coment usanciér encartâ.",
-       "movenotallowed": "Vos avéd pas la pèrmission de renomar les pâges.",
-       "movenotallowedfile": "Vos avéd pas la pèrmission de renomar los fichiérs.",
-       "cant-move-user-page": "Vos avéd pas la pèrmission de renomar les pâges principâles d’usanciérs (en defôr de lors sot-pâges).",
-       "cant-move-to-user-page": "Vos avéd pas la pèrmission de renomar una pâge vers una pâge usanciér (a l’èxcèpcion d’una sot-pâge).",
-       "newtitle": "De vers lo titro novél :",
+       "lockdbsuccesssub": "Vèrroly de la bâsa de balyês reussi",
+       "unlockdbsuccesssub": "Vèrroly de la bâsa de balyês enlevâ",
+       "lockdbsuccesstext": "La bâsa de balyês est étâye cotâye.<br />\nOubliâd pas de la [[Special:UnlockDB|dècotar]] quand vos aréd chavonâ voutra rotina d’entretin.",
+       "unlockdbsuccesstext": "La bâsa de balyês est étâye dècotâye.",
+       "lockfilenotwritable": "Lo fichiér de vèrroly de la bâsa de balyês est pas enscriptiblo.\nPor cotar dècotar la bâsa de balyês, dêt étre enscriptiblo dês lo sèrvior Vouèbe.",
+       "databasenotlocked": "La bâsa de balyês est pas cotâye.",
+       "lockedbyandtime": "(per {{GENDER:$1|$1}} lo $2 a $3)",
+       "move-page": "Dèplaciér $1",
+       "move-page-legend": "Dèplaciér na pâge",
+       "movepagetext": "Empleyéd lo formulèro ce-desot por renomar na pâge, en dèplacient tot son historico vers lo novél nom.\nLo viely titro vindrat na pâge de redirèccion de vers lo titro novél.\nVos pouede betar a jorn ôtomaticament les redirèccions d’ora que pouentont vers lo titro originâl.\nSe vos chouèsésséd de pas o fâre, assurâd-vos de controlar tota [[Special:DoubleRedirects|redirèccion dobla]] [[Special:BrokenRedirects|câssa]].\nVos éd la rèsponsabilitât de vos assurar que los lims continuont de pouentar vers lor dèstinacion suposâye.\n\nNotâd que la pâge serat <strong>pas</strong> dèplaciêe s’y at ja na pâge avouéc lo titro novél, a muens que cela dèrriére seye na simpla redirèccion avouéc un historico de changements vouedo.\nCen vôt dére que vos pouede renomar na pâge vers sa posicion d’origina se vos éd fêt na fôta, mas que vos pouede pas ècllafar na pâge ja ègzistenta.\n\n<strong>Nota :</strong>\nCen pôt côsar un changement radicâl et emprèviu por na pâge sovent viua ;\nse vos plét assurâd-vos de nen avêr comprês les consèquences devant que continuar.",
+       "movepagetext-noredirectfixer": "Empleyéd lo formulèro ce-desot por renomar na pâge, en dèplacient tot son historico vers lo novél nom.\nLo viely titro vindrat na pâge de redirèccion de vers lo titro novél.\nAssurâd-vos de controlar tota [[Special:DoubleRedirects|redirèccion dobla]] [[Special:BrokenRedirects|câssa]].\nVos éd la rèsponsabilitât de vos assurar que los lims continuont de pouentar vers lor dèstinacion suposâye.\n\nNotâd que la pâge serat <strong>pas</strong> dèplaciêe s’y at ja na pâge avouéc lo titro novél, a muens que cela dèrriére seye na simpla redirèccion avouéc un historico de changements vouedo.\nCen vôt dére que vos pouede renomar na pâge vers sa posicion d’origina se vos éd fêt na fôta, mas que vos pouede pas ècllafar na pâge ja ègzistenta.\n\n<strong>Nota :</strong>\nCen pôt côsar un changement radicâl et emprèviu por na pâge sovent viua ;\nse vos plét assurâd-vos de nen avêr comprês les consèquences devant que continuar.",
+       "movepagetalktext": "Se vos pouentâd cela câsa, la pâge de discussion associyêe serat asse-ben dèplaciêe ôtomaticament, a muens qu’una pâge de discussion pas voueda ègzisteye ja desot lo novél nom.\n\nDens cél câs, vos devréd dèplaciér fusionar la pâge a la man se vos o voléd.",
+       "moveuserpage-warning": "<strong>Atencion :</strong> vos éte prèst a dèplaciér na pâge utilisator. Se vos plét, notâd que solament la pâge serat dèplaciêe et que l’utilisator serat <em>pas</em> renomâ.",
+       "movecategorypage-warning": "<strong>Atencion :</strong> vos éte prèst a dèplaciér na pâge de catègoria. Se vos plét, notâd que solament la pâge serat dèplaciêe et que <em>pas yona</em> de les pâges de la vielye catègoria serat betâye dedens la novèla.",
+       "movenologintext": "Vos dête étre un utilisator encartâ et [[Special:UserLogin|branchiê]] por povêr dèplaciér na pâge.",
+       "movenotallowed": "Vos éd pas la pèrmission de dèplaciér de pâges.",
+       "movenotallowedfile": "Vos éd pas la pèrmission de dèplaciér de fichiérs.",
+       "cant-move-user-page": "Vos éd pas la pèrmission de dèplaciér de pâges utilisator (en defôr de sot-pâges).",
+       "cant-move-to-user-page": "Vos éd pas la pèrmission de dèplaciér na pâge vers na pâge utilisator (mas pas vers na sot-pâge utilisator).",
+       "cant-move-category-page": "Vos éd pas la pèrmission de dèplaciér de pâges de catègoria.",
+       "cant-move-to-category-page": "Vos éd pas la pèrmission de dèplaciér na pâge vers na pâge de catègoria.",
+       "newtitle": "Titro novél :",
        "move-watch": "Siuvre les pâges sôrsa et ciba",
-       "movepagebtn": "Renomar la pâge",
+       "movepagebtn": "Dèplaciér la pâge",
        "pagemovedsub": "Changement de nom reussi",
-       "movepage-moved": "'''« $1 » at étâ renomâ en « $2 »'''",
-       "movepage-moved-redirect": "Una redirèccion dês lo viely nom at étâ fêta.",
-       "movepage-moved-noredirect": "La crèacion d’una redirèccion dês lo viely nom at étâ anulâ.",
-       "articleexists": "Ègziste ja una pâge que pôrte cél titro, ou ben lo titro que vos éd chouèsi est fôx.\nNen volyéd chouèsir un ôtro.",
-       "cantmove-titleprotected": "Vos pouede pas dèplaciér una pâge vers cél emplacement perce que lo titro novél at étâ protègiê a la crèacion.",
-       "movetalk": "Renomar avouéc la pâge de discussion associyê",
-       "move-subpages": "Renomar les sot-pâges (tant qu’a $1 pâges)",
-       "move-talk-subpages": "Renomar les sot-pâges de la pâge de discussion (tant qu’a $1 pâges)",
-       "movepage-page-exists": "La pâge $1 ègziste ja et pôt pas étre ècrasâ ôtomaticament.",
-       "movepage-page-moved": "La pâge $1 at étâ renomâ en $2.",
-       "movepage-page-unmoved": "La pâge $1 at pas possu étre renomâ en $2.",
-       "movepage-max-pages": "Lo més de $1 {{PLURAL:$1|pâge at étâ renomâ|pâges ont étâ renomâs}} et niona ôtra pâge serat renomâ ôtomaticament.",
-       "movelogpage": "Jornal des changements de nom",
-       "movelogpagetext": "Vê-que la lista de totes les pâges renomâs ou dèplaciês.",
+       "movepage-moved": "<strong>« $1 » est étâ dèplaciê vers « $2 »</strong>",
+       "movepage-moved-redirect": "Na redirèccion est étâye fêta.",
+       "movepage-moved-noredirect": "La crèacion d’una redirèccion est étâye rèprimâye.",
+       "articleexists": "Ègziste ja na pâge avouéc cél nom, ou ben lo nom que vos éd chouèsi est pas justo.\nSe vos plét, chouèsésséd-nen un ôtro.",
+       "cantmove-titleprotected": "Vos pouede pas dèplaciér na pâge vers cél endrêt, lo titro novél est étâ protègiê a la crèacion.",
+       "movetalk": "Dèplaciér avouéc la pâge de discussion associyêe",
+       "move-subpages": "Dèplaciér les sot-pâges (tant qu’a $1)",
+       "move-talk-subpages": "Dèplaciér les sot-pâges de la pâge de discussion (tant qu’a $1)",
+       "movepage-page-exists": "La pâge $1 ègziste ja et pués pôt pas étre ècllafâye ôtomaticament.",
+       "movepage-page-moved": "La pâge $1 est étâye dèplaciêe vers $2.",
+       "movepage-page-unmoved": "La pâge $1 at pas possu étre dèplaciêe vers $2.",
+       "movepage-max-pages": "Lo més de $1 pâge{{PLURAL:$1||s}} est étâ dèplaciê et pués pas yona de més serat dèplaciêe ôtomaticament.",
+       "movelogpage": "Jornâl des changements de nom",
+       "movelogpagetext": "Vê-que na lista de totes les pâges dèplaciêes.",
        "movesubpage": "Sot-pâge{{PLURAL:$1||s}}",
-       "movesubpagetext": "Cela pâge at $1 {{PLURAL:$1|sot-pâge montrâ|sot-pâges montrâs}} ce-desot.",
-       "movenosubpage": "Ceta pâge at gins de sot-pâge.",
+       "movesubpagetext": "Cela pâge at $1 {{PLURAL:$1|sot-pâge montrâye|sot-pâges montrâyes}} ce-desot.",
+       "movenosubpage": "Cela pâge at gins de sot-pâge.",
        "movereason": "Rêson :",
-       "revertmove": "rètablir",
-       "delete_and_move": "Suprimar et renomar",
-       "delete_and_move_text": "== Suprèssion nècèssèra ==\nLa pâge de dèstinacion « [[:$1]] » ègziste ja.\nLa voléd-vos suprimar por pèrmetre lo changement de nom ?",
-       "delete_and_move_confirm": "Ouè, j’accèpto de suprimar la pâge de dèstinacion por pèrmetre lo changement de nom.",
-       "delete_and_move_reason": "Pâge suprimâ por pèrmetre lo changement de nom dês « [[$1]] »",
-       "selfmove": "Los titros d’origina et de dèstinacion sont los mémos ;\nempossiblo de renomar una pâge sur lyé-méma.",
-       "immobile-source-namespace": "Vos pouede pas renomar les pâges dens l’èspâço de noms « $1 »",
-       "immobile-target-namespace": "Vos pouede pas renomar des pâges vers l’èspâço de noms « $1 »",
-       "immobile-target-namespace-iw": "Los lims entèrvouiquis sont pas una ciba valida por los changements de nom.",
-       "immobile-source-page": "Cela pâge est pas renomâbla.",
-       "immobile-target-page": "Empossiblo de renomar la pâge vers cél titro.",
-       "imagenocrossnamespace": "Empossiblo de renomar un fichiér vers un èspâço de noms ôtro que « {{ns:file}} ».",
-       "nonfile-cannot-move-to-file": "Empossiblo de renomar quârque-ren d’ôtro qu’un fichiér vers l’èspâço de noms « {{ns:file}} ».",
-       "imagetypemismatch": "La novèla èxtension de cél fichiér corrèspond pas a son tipo.",
-       "imageinvalidfilename": "Lo nom du fichiér ciba est fôx",
-       "fix-double-redirects": "Betar a jorn les redirèccions que pouentont vers lo titro originâl",
-       "move-leave-redirect": "Lèssiér una redirèccion de vers lo titro novél",
-       "protectedpagemovewarning": "'''ATENCION :''' ceta pâge at étâ protègiê de façon que solament los usanciérs qu’ont lo statut d’administrator la pouessont renomar.\nLa dèrriére entrâ du jornal est montrâ ce-desot coment refèrence :",
-       "semiprotectedpagemovewarning": "'''Nota :''' ceta pâge at étâ protègiê de façon que solament los usanciérs encartâs la pouessont renomar.\nLa dèrriére entrâ du jornal est montrâ ce-desot coment refèrence :",
-       "move-over-sharedrepo": "== Lo fichiér ègziste ==\n[[:$1]] ègziste ja sur un dèpôt partagiê. Renomar cél fichiér rendrat lo fichiér sur lo dèpôt partagiê pas accèssiblo.",
-       "file-exists-sharedrepo": "Lo nom chouèsi est ja utilisâ per un fichiér sur un dèpôt partagiê.\nNen volyéd chouèsir un ôtro.",
-       "export": "Èxportar des pâges",
-       "exporttext": "Vos pouede èxportar en XML lo tèxto et l’historico d’una pâge ou ben d’un ensemblo de pâges ;\nlo rèsultat pôt adonc étre importâ dens un ôtro vouiqui qu’utilise la programeria MediaWiki avouéc la [[Special:Import|pâge d’importacion]].\n\nPor èxportar des pâges, buchiéd lors titros dens la bouèta de tèxto ce-desot, yon titro per legne, et pués chouèsésséd se vos voléd ou pas la vèrsion d’ora avouéc totes les vielyes vèrsions, avouéc les legnes de l’historico de la pâge, ou ben simplament la pâge d’ora avouéc des enformacions sur lo dèrriér changement.\n\nDens cél dèrriér câs, vos pouede asse-ben utilisar un lim, coment [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] por la pâge « [[{{MediaWiki:Mainpage}}]] ».",
+       "revertmove": "rèvocar",
+       "delete_and_move_text": "La pâge de dèstinacion « [[:$1]] » ègziste ja.\nVos la voléd suprimar por pèrmetre lo changement de nom ?",
+       "delete_and_move_confirm": "Ouè, suprimar la pâge",
+       "delete_and_move_reason": "Suprimâye por pèrmetre lo changement de nom dês « [[$1]] »",
+       "selfmove": "Los titros d’origina et de dèstinacion sont los mémos ;\ny at pas moyen de dèplaciér na pâge vers lyé-méma.",
+       "immobile-source-namespace": "Vos pouede pas dèplaciér les pâges dedens l’èspâço de noms « $1 ».",
+       "immobile-target-namespace": "Vos pouede pas dèplaciér de pâges vers l’èspâço de noms « $1 ».",
+       "immobile-target-namespace-iw": "Los lims entèrvouiquis sont pas na ciba justa por los changements de nom.",
+       "immobile-source-page": "Cela pâge est pas dèplaçâbla.",
+       "immobile-target-page": "Y at pas moyen de dèplaciér vers cél titro de dèstinacion.",
+       "bad-target-model": "La dèstinacion volua emplèye un ôtro modèlo de contegnu. Y at pas moyen de convèrtir de $1 vers $2.",
+       "imagenocrossnamespace": "Y at pas moyen de dèplaciér un fichiér vers un èspâço de noms ôtro que « {{ns:file}} ».",
+       "nonfile-cannot-move-to-file": "Y at pas moyen de dèplaciér quârque-ren d’ôtro qu’un fichiér vers l’èspâço de noms « {{ns:file}} ».",
+       "imagetypemismatch": "La novèla èxtension du fichiér corrèspond pas a son tipo.",
+       "imageinvalidfilename": "Lo nom du fichiér ciba est pas justo.",
+       "fix-double-redirects": "Betar a jorn totes les redirèccions que pouentont vers lo titro originâl",
+       "move-leave-redirect": "Lèssiér na redirèccion",
+       "protectedpagemovewarning": "<strong>Atencion :</strong> cela pâge est étâye protègiêe por que solament los utilisators qu’ant los drêts d’administrator la pouessont dèplaciér.\nLa dèrriére entrâ du jornâl est balyêe ce-desot coment rèference :",
+       "semiprotectedpagemovewarning": "<strong>Nota :</strong> cela pâge est étâye protègiêe por que solament los utilisators encartâs la pouessont dèplaciér.\nLa dèrriére entrâ du jornâl est balyêe ce-desot coment rèference :",
+       "move-over-sharedrepo": "[[:$1]] ègziste ja sur un dèpôt partagiê. Dèplaciér un fichiér vers cél titro ècllaferat lo fichiér partagiê.",
+       "file-exists-sharedrepo": "Lo nom de fichiér chouèsi est ja empleyê sur un dèpôt partagiê.\nSe vos plét, chouèsésséd-nen un ôtro.",
+       "export": "Èxportar de pâges",
+       "exporttext": "Vos pouede èxportar en XML lo tèxto et l’historico d’una pâge d’un ensemblo de pâges.\nAdonc lo rèsultat pôt étre importâ dens un ôtro vouiqui qu’emplèye la programeria MediaWiki avouéc la [[Special:Import|pâge d’importacion]].\n\nPor èxportar de pâges, buchiéd lors titros dedens la bouèta de tèxto ce-desot, un titro per legne, et pués chouèsésséd se vos voléd la vèrsion d’ora avouéc totes les vielyes vèrsions, avouéc les legnes de l’historico de la pâge, ou ben simplament la pâge d’ora avouéc des enformacions sur lo dèrriér changement.\n\nDens cél dèrriér câs, vos pouede asse-ben empleyér un lim, coment [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] por la pâge « [[{{MediaWiki:Mainpage}}]] ».",
        "exportall": "Èxportar totes les pâges",
-       "exportcuronly": "Èxportar ren que la vèrsion d’ora, sen l’historico complèt",
-       "exportnohistory": "----\n'''Nota :''' l’èxportacion de l’historico complèt de les pâges avouéc ceti formulèro at étâ dèsactivâ por des rêsons de capacitât.",
-       "exportlistauthors": "Encllure una lista complèta ux contributors por châque pâge",
+       "exportcuronly": "Rapondre mas que la vèrsion d’ora, sen l’historico complèt",
+       "exportnohistory": "----\n<strong>Nota :</strong> l’èxportacion de l’historico complèt de les pâges avouéc cél formulèro est étâye dèsactivâye por des rêsons de capacitât.",
+       "exportlistauthors": "Rapondre na lista complèta des contributors por châque pâge",
        "export-submit": "Èxportar",
-       "export-addcattext": "Apondre les pâges de la catègorie :",
+       "export-addcattext": "Apondre de pâges de la catègoria :",
        "export-addcat": "Apondre",
-       "export-addnstext": "Apondre des pâges dens l’èspâço de noms :",
+       "export-addnstext": "Apondre de pâges de l’èspâço de noms :",
        "export-addns": "Apondre",
-       "export-download": "Encartar dens un fichiér",
-       "export-templates": "Encllure los modèlos",
-       "export-pagelinks": "Encllure les pâges liyês a una provondior de :",
+       "export-download": "Encartar dedens un fichiér",
+       "export-templates": "Rapondre los modèlos",
+       "export-pagelinks": "Rapondre les pâges liyêes a na provondior de :",
+       "export-manual": "Apondre de pâges a la man :",
        "allmessages": "Mèssâjos sistèmo",
-       "allmessagesname": "Nom du mèssâjo",
-       "allmessagesdefault": "Mèssâjo per dèfôt",
-       "allmessagescurrent": "Tèxto d’ora",
-       "allmessagestext": "O est la lista des mèssâjos sistèmo disponiblos dens l’èspâço MediaWiki.\nVolyéd visitar la [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation localisacion de MediaWiki] et pués [//translatewiki.net translatewiki.net] se vos voléd contribuar a la localisacion g·ènèrica de MediaWiki.",
-       "allmessagesnotsupportedDB": "Ceta pâge '''{{ns:special}}:Allmessages''' est inutilisâbla perce que '''$wgUseDatabaseMessages''' at étâ dèsactivâ.",
+       "allmessagesname": "Nom",
+       "allmessagesdefault": "Tèxto du mèssâjo per dèfôt",
+       "allmessagescurrent": "Tèxto du mèssâjo d’ora",
+       "allmessagestext": "O est na lista des mèssâjos sistèmo disponiblos dedens l’èspâço de noms MediaWiki.\nSe vos plét, vesitâd la [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation localisacion de MediaWiki] et pués [//translatewiki.net translatewiki.net] se vos voléd contribuar a la localisacion g·ènèrâla de MediaWiki.",
+       "allmessagesnotsupportedDB": "Cela pâge est pas empleyâbla, <strong>$wgUseDatabaseMessages</strong> est étâ dèsactivâ.",
        "allmessages-filter-legend": "Filtro",
-       "allmessages-filter": "Filtrar per ètat de changement :",
+       "allmessages-filter": "Filtrar per ètat de pèrsonalisacion :",
        "allmessages-filter-unmodified": "Pas changiê",
        "allmessages-filter-all": "Tôs",
        "allmessages-filter-modified": "Changiê",
        "allmessages-prefix": "Filtrar per prèfixo :",
        "allmessages-language": "Lengoua :",
-       "allmessages-filter-submit": "Aplicar",
+       "allmessages-filter-submit": "Emmodar",
+       "allmessages-filter-translate": "Traduire",
        "thumbnail-more": "Agrantir",
-       "filemissing": "Fichiér manquent",
-       "thumbnail_error": "Èrror pendent la crèacion de la figura : $1",
-       "djvu_page_error": "Pâge DjVu en defôr de les limites",
-       "djvu_no_xml": "Empossiblo de rècupèrar lo XML por lo fichiér DjVu",
-       "thumbnail-temp-create": "Empossiblo de fâre lo fichiér de figura temporèra",
-       "thumbnail-dest-create": "Empossiblo d’encartar la figura sur la dèstinacion",
-       "thumbnail_invalid_params": "Paramètres de la figura fôx",
-       "thumbnail_dest_directory": "Empossiblo de fâre lo rèpèrtouèro de dèstinacion",
+       "filemissing": "Fichiér entrovâblo",
+       "thumbnail_error": "Fôta pendent la crèacion de la miniatura : $1",
+       "thumbnail_error_remote": "Mèssâjo de fôta de $1 :\n$2",
+       "djvu_page_error": "Pâge DjVu en defôr de portâ",
+       "djvu_no_xml": "Y at pas moyen de rècupèrar lo XML por lo fichiér DjVu",
+       "thumbnail-temp-create": "Y at pas moyen de fâre lo fichiér de miniatura temporèro",
+       "thumbnail-dest-create": "Y at pas moyen d’encartar la miniatura sur la dèstinacion",
+       "thumbnail_invalid_params": "Paramètros de la miniatura pas justos",
+       "thumbnail_toobigimagearea": "Fichiér avouéc des dimensions d’amont $1",
+       "thumbnail_dest_directory": "Y at pas moyen de fâre lo rèpèrtouèro de dèstinacion",
        "thumbnail_image-type": "Tipo d’émâge pas recognu",
        "thumbnail_gd-library": "Configuracion encomplèta de la bibliotèca GD : fonccion $1 entrovâbla",
-       "thumbnail_image-missing": "Ceti fichiér est entrovâblo : $1",
-       "import": "Importar des pâges",
-       "importinterwiki": "Importacion entèrvouiqui",
-       "import-interwiki-text": "Chouèsésséd un vouiqui et un titro de pâge a importar.\nLes dâtes de les vèrsions et los noms ux contributors seront presèrvâs.\nTotes les accions d’importacion entèrvouiqui sont consignês dens lo [[Special:Log/import|jornal de les importacions]].",
-       "import-interwiki-history": "Copiyér totes les vèrsions de l’historico de ceta pâge",
-       "import-interwiki-templates": "Encllure tôs los modèlos",
+       "thumbnail_image-missing": "Lo fichiér semble étre entrovâblo : $1",
+       "thumbnail_image-failure-limit": "Dês pou y at avu un mouél d’èprôves pas reussies ($1 ou ben més) por rèstituar cela miniatura. Se vos plét, tornâd èprovar ples târd.",
+       "import": "Importar de pâges",
+       "importinterwiki": "Importar dês un ôtro vouiqui",
+       "import-interwiki-text": "Chouèsésséd un vouiqui et pués un titro de pâge a importar.\nLes dâtes de les vèrsions et los noms des contributors seront presèrvâs.\nTotes les importacions dês d’ôtros vouiquis sont encartâyes dessus lo [[Special:Log/import|jornâl de les importacions]].",
+       "import-interwiki-sourcewiki": "Vouiqui d’origina :",
+       "import-interwiki-sourcepage": "Pâge d’origina :",
+       "import-interwiki-history": "Copiyér totes les vèrsions de l’historico de cela pâge",
+       "import-interwiki-templates": "Rapondre tôs los modèlos",
        "import-interwiki-submit": "Importar",
+       "import-mapping-default": "Importar ux endrêts per dèfôt",
+       "import-mapping-namespace": "Importar vers un èspâço de noms :",
+       "import-mapping-subpage": "Importar coment sot-pâges de cela pâge-que :",
        "import-upload-filename": "Nom du fichiér :",
        "import-comment": "Comentèro :",
-       "importtext": "Volyéd èxportar lo fichiér dês lo vouiqui d’origina en utilisent son [[Special:Export|outil d’èxportacion]].\nSôvâd-lo sur voutron ordenator et pués tèlèchargiéd-lo ique.",
+       "importtext": "Se vos plét, èxportâd lo fichiér dês lo vouiqui d’origina en empleyent son [[Special:Export|outil d’èxportacion]].\nEncartâd-lo sur voutron ordenator et pués tèlèchargiéd-lo ique.",
        "importstart": "Importacion de les pâges...",
        "import-revision-count": "$1 vèrsion{{PLURAL:$1||s}}",
-       "importnopages": "Gins de pâge a importar.",
-       "imported-log-entries": "$1 entrâ{{PLURAL:$1||s}} du jornal importâ{{PLURAL:$1||s}}.",
+       "importnopages": "Niona pâge a importar.",
+       "imported-log-entries": "$1 entr{{PLURAL:$1|â|ês}} du jornâl importâye{{PLURAL:$1||s}}.",
        "importfailed": "Falyita de l’importacion : <nowiki>$1</nowiki>",
        "importunknownsource": "Tipo de la sôrsa a importar encognu",
-       "importcantopen": "Empossiblo d’uvrir lo fichiér a importar",
+       "importcantopen": "Y at pas moyen d’uvrir lo fichiér a importar",
        "importbadinterwiki": "Crouyo lim entèrvouiqui",
-       "importsuccess": "L’importacion at reussia !",
-       "importnosources": "Niona sôrsa d’importacion entèrvouiqui at étâ dèfenia et los tèlèchargements drêts d’historicos sont dèsactivâs.",
-       "importnofile": "Nion fichiér a importar at étâ tèlèchargiê.",
-       "importuploaderrorsize": "Lo tèlèchargement du fichiér a importar at pas reussi.\nSa talye est ples granta que cela ôtorisâ.",
-       "importuploaderrorpartial": "Lo tèlèchargement du fichiér a importar at pas reussi.\nSon contegnu at étâ tèlèchargiê ren qu’a mêtiêt.",
-       "importuploaderrortemp": "Lo tèlèchargement du fichiér a importar at pas reussi.\nUn dossiér temporèro est manquent.",
+       "importsuccess": "L’importacion at reussi !",
+       "importnosources": "Nion vouiqui d’origina est étâ dèfeni et pués los tèlèchargements drêts d’historicos sont dèsactivâs.",
+       "importnofile": "Nion fichiér a importar est étâ tèlèchargiê.",
+       "importuploaderrorsize": "Lo tèlèchargement du fichiér a importar at pas reussi.\nSa talye est ples granta que cela ôtorisâye.",
+       "importuploaderrorpartial": "Lo tèlèchargement du fichiér a importar at pas reussi.\nSon contegnu est étâ tèlèchargiê ren qu’a mêtiêt.",
+       "importuploaderrortemp": "Lo tèlèchargement du fichiér a importar at pas reussi.\nUn dossiér temporèro est entrovâblo.",
        "import-parse-failure": "Falyita pendent l’analise du XML a importar",
-       "import-noarticle": "Gins de pâge a importar !",
-       "import-nonewrevisions": "Totes les vèrsions ont étâ importâs dês devant.",
+       "import-noarticle": "Niona pâge a importar !",
+       "import-nonewrevisions": "Niona vèrsion importâye (totes érant ja presentes ou ben ignorâyes a côsa de fôtes).",
        "xml-error-string": "$1 a la legne $2, colona $3 (octèt $4) : $5",
        "import-upload": "Tèlèchargement de balyês XML",
-       "import-token-mismatch": "Pèrta de les balyês de sèance.\nVolyéd tornar èprovar.",
-       "import-invalid-interwiki": "Empossiblo d’importar dês lo vouiqui spècefiâ.",
-       "import-error-edit": "La pâge « $1 » est pas importâ perce que vos éte pas ôtorisâ a la changiér.",
-       "import-error-create": "La pâge « $1 » est pas importâ perce que vos éte pas ôtorisâ a la fâre.",
+       "import-token-mismatch": "Pèrda de les balyês de sèssion.\n\nPôt-étre vos éte étâ dèbranchiê. <strong>Se vos plét, controlâd que vos éte adés branchiê et pués tornâd èprovar.</strong>\nSe cen tôrne pas reussir, èprovâd de vos [[Special:UserLogout|dèbranchiér]] et pués de vos tornar branchiér, et controlâd que voutron navegator accèpte los raportiors (<em>cookies</em>) de cél seto.",
+       "import-invalid-interwiki": "Y at pas moyen d’importar dês lo vouiqui spècifiâ.",
+       "import-error-edit": "La pâge « $1 » est pas étâye importâye, vos éte pas ôtorisâ a la changiér.",
+       "import-error-create": "La pâge « $1 » est pas étâye importâye, vos éte pas ôtorisâ a la fâre.",
+       "import-error-interwiki": "La pâge « $1 » est pas étâye importâye, son nom est resèrvâ por un lim de defôr (entèrvouiqui).",
+       "import-error-special": "La pâge « $1 » est pas étâye importâye, el est a un èspâço de noms spèciâl qu’ôtorise gins de pâge.",
+       "import-error-invalid": "La pâge « $1 » est pas étâye importâye, lo nom que lyé serêt étâye importâye desot est pas justo sur cél vouiqui.",
+       "import-error-unserialize": "La vèrsion $2 de la pâge « $1 » pôt pas étre dèssèrialisâye. La vèrsion ére raportâye coment empleyent lo modèlo de contegnu $3 sèrialisâ en $4.",
+       "import-error-bad-location": "La vèrsion $2 qu’emplèye lo modèlo de contegnu $3 at pas possu étre stocâye dessus « $1 » sur cél vouiqui-que, cél modèlo est pas recognu sur cela pâge.",
        "import-options-wrong": "{{PLURAL:$2|Crouyo chouèx|Crouyos chouèx}} : <nowiki>$1</nowiki>",
-       "importlogpage": "Jornal de les importacions",
+       "import-rootpage-invalid": "La pâge racena balyêe est un titro pas justo.",
+       "import-rootpage-nosubpage": "L’èspâço de noms « $1 » de la pâge racena ôtorise pas les sot-pâges.",
+       "importlogpage": "Jornâl de les importacions",
        "importlogpagetext": "Importacions administratives de pâges avouéc lor historico de changements dês d’ôtros vouiquis.",
-       "import-logentry-upload-detail": "$1 vèrsion{{PLURAL:$1||s}}",
-       "import-logentry-interwiki-detail": "$1 vèrsion{{PLURAL:$1||s}} dês $2",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|vèrsion importâye|vèrsions importâyes}}",
+       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|vèrsion importâye|vèrsions importâyes}} dês $2",
        "javascripttest": "Èprôva de JavaScript",
+       "javascripttest-pagetext-noframework": "Cela pâge est resèrvâye por l’ègzécucion de les èprôves de JavaScript.",
+       "javascripttest-pagetext-unknownframework": "Câdro d’èprôva « $1 » encognu.",
+       "javascripttest-pagetext-unknownaction": "Accion « $1 » encognua.",
+       "javascripttest-pagetext-frameworks": "Se vos plét, chouèsésséd yon de celos câdros d’èprôva-que : $1",
+       "javascripttest-pagetext-skins": "Chouèsésséd un habelyâjo por emmodar les èprôves :",
        "javascripttest-qunit-intro": "Vêde la [$1 documentacion de les èprôves] dessus mediawiki.org.",
-       "tooltip-pt-userpage": "Voutra pâge usanciér",
-       "tooltip-pt-anonuserpage": "La pâge usanciér de l’adrèce IP avouéc laquinta vos contribuâd",
-       "tooltip-pt-mytalk": "Voutra pâge de discussion",
-       "tooltip-pt-anontalk": "La pâge de discussion por les contribucions dês cela adrèce IP",
-       "tooltip-pt-preferences": "Voutres prèferences",
-       "tooltip-pt-watchlist": "La lista de les pâges que vos siude los changements",
-       "tooltip-pt-mycontris": "La lista de voutres contribucions",
-       "tooltip-pt-login": "Vos éte encoragiê a vos branchiér ; portant, o est pas oblegatouèro.",
+       "tooltip-pt-userpage": "{{GENDER:|Voutra}} pâge utilisator",
+       "tooltip-pt-anonuserpage": "La pâge utilisator por l’adrèce IP que vos empleyéd",
+       "tooltip-pt-mytalk": "{{GENDER:|Voutra}} pâge de discussion",
+       "tooltip-pt-anontalk": "Discussion sur los changements fêts dês cel’adrèce IP",
+       "tooltip-pt-preferences": "{{GENDER:|Voutres}} prèferences",
+       "tooltip-pt-watchlist": "Na lista de les pâges que vos gouardâd los changements",
+       "tooltip-pt-mycontris": "Na lista de {{GENDER:|voutres}} contribucions",
+       "tooltip-pt-anoncontribs": "Na lista des changements fêts dês cel’adrèce IP",
+       "tooltip-pt-login": "Vos éte encoragiê a vos branchiér ; portant o est pas oblegatouèro",
        "tooltip-pt-logout": "Sè dèbranchiér",
-       "tooltip-ca-talk": "Discussion sur ceta pâge de contegnu",
-       "tooltip-ca-edit": "Vos pouede changiér ceta pâge.\nVolyéd utilisar lo boton de prèvisualisacion devant que sôvar.",
-       "tooltip-ca-addsection": "Comenciér una novèla sèccion",
-       "tooltip-ca-viewsource": "Ceta pâge est protègiêye.\nPortant vos en pouede vêre lo sin tèxto sôrsa",
-       "tooltip-ca-history": "Les vèrsions passâs de ceta pâge (avouéc lors contributors)",
-       "tooltip-ca-protect": "Protègiér ceta pâge",
-       "tooltip-ca-unprotect": "Changiér la protèccion de ceta pâge",
-       "tooltip-ca-delete": "Suprimar ceta pâge",
-       "tooltip-ca-undelete": "Refâre los changements fêts sur ceta pâge devant sa suprèssion",
-       "tooltip-ca-move": "Renomar ceta pâge",
-       "tooltip-ca-watch": "Apondre ceta pâge a voutra lista de survelyence",
-       "tooltip-ca-unwatch": "Enlevar ceta pâge de voutra lista de survelyence",
-       "tooltip-search": "Rechèrchiér dens {{SITENAME}}",
-       "tooltip-search-go": "Alar vers una pâge que pôrte justo ceti nom s’ègziste.",
-       "tooltip-search-fulltext": "Rechèrchiér les pâges que presentont ceti tèxto.",
-       "tooltip-p-logo": "Pâge principâla",
-       "tooltip-n-mainpage": "Visitar la pâge de reçua du seto",
-       "tooltip-n-mainpage-description": "Alar a la reçua",
-       "tooltip-n-portal": "Sur lo projèt, cen que vos pouede fâre, yô que trovar les chouses",
-       "tooltip-n-currentevents": "Trovar les enformacions de fond sur les dèrriéres novèles",
-       "tooltip-n-recentchanges": "Lista des dèrriérs changements sur lo vouiqui",
-       "tooltip-n-randompage": "Fâre vêre na pâge a l’hasârd",
-       "tooltip-n-help": "Éde",
-       "tooltip-t-whatlinkshere": "Lista de les pâges liyês a ceta",
-       "tooltip-t-recentchangeslinked": "Lista des dèrriérs changements de les pâges liyês a ceta",
-       "tooltip-feed-rss": "Flux RSS por ceta pâge",
-       "tooltip-feed-atom": "Flux Atom por ceta pâge",
-       "tooltip-t-contributions": "Vêre la lista de les contribucions de cet’utilisator",
-       "tooltip-t-emailuser": "Mandar un mèssâjo a ceti usanciér",
-       "tooltip-t-upload": "Tèlèchargiér des fichiérs",
-       "tooltip-t-specialpages": "Lista de totes les pâges spèciâles",
-       "tooltip-t-print": "Vèrsion emprimâbla de ceta pâge",
-       "tooltip-t-permalink": "Lim fixo de vers ceta vèrsion de la pâge",
+       "tooltip-pt-createaccount": "Vos éte encoragiê a fâre un comptio et pués a vos branchiér ; portant o est pas oblegatouèro",
+       "tooltip-ca-talk": "Discussion sur lo contegnu de la pâge",
+       "tooltip-ca-edit": "Changiér cela pâge",
+       "tooltip-ca-addsection": "Comenciér na novèla sèccion",
+       "tooltip-ca-viewsource": "Cela pâge est protègiêe.\nPortant vos en pouede vêre son tèxto sôrsa",
+       "tooltip-ca-history": "Vèrsions passâyes de cela pâge",
+       "tooltip-ca-protect": "Protègiér cela pâge",
+       "tooltip-ca-unprotect": "Changiér la protèccion de cela pâge",
+       "tooltip-ca-delete": "Suprimar cela pâge",
+       "tooltip-ca-undelete": "Refâre los changements fêts sur cela pâge devant sa suprèssion",
+       "tooltip-ca-move": "Dèplaciér cela pâge",
+       "tooltip-ca-watch": "Apondre cela pâge a voutra lista de gouârda",
+       "tooltip-ca-unwatch": "Enlevar cela pâge de voutra lista de gouârda",
+       "tooltip-search": "Rechèrchiér dedens {{SITENAME}}",
+       "tooltip-search-go": "Emmodar vers na pâge que pôrte justo cél nom s’ègziste",
+       "tooltip-search-fulltext": "Rechèrchiér les pâges que presentont cél tèxto",
+       "tooltip-p-logo": "Vesitar la pâge principâla",
+       "tooltip-n-mainpage": "Vesitar la pâge principâla",
+       "tooltip-n-mainpage-description": "Vesitar la pâge principâla",
+       "tooltip-n-portal": "Sur lo projèt, cen que vos pouede fâre, yô que trovar de chouses",
+       "tooltip-n-currentevents": "Trovar les enformacions de fond sur les novèles d’ora",
+       "tooltip-n-recentchanges": "Na lista des dèrriérs changements sur lo vouiqui",
+       "tooltip-n-randompage": "Chargiér na pâge a l’hasârd",
+       "tooltip-n-help": "L’endrêt por nen savêr més",
+       "tooltip-t-whatlinkshere": "Na lista de totes les pâges du vouiqui liyêes a ceta",
+       "tooltip-t-recentchangeslinked": "Dèrriérs changements de les pâges liyêes a ceta",
+       "tooltip-feed-rss": "Flux RSS por cela pâge",
+       "tooltip-feed-atom": "Flux Atom por cela pâge",
+       "tooltip-t-contributions": "Na lista de les contribucions de {{GENDER:$1|cél utilisator|cel’utilisatrice}}",
+       "tooltip-t-emailuser": "Mandar un mèssâjo a {{GENDER:$1|cél utilisator|cel’utilisatrice}}",
+       "tooltip-t-info": "Més d’enformacions sur cela pâge",
+       "tooltip-t-upload": "Tèlèchargiér de fichiérs",
+       "tooltip-t-specialpages": "Na lista de totes les pâges spèciâles",
+       "tooltip-t-print": "Vèrsion emprimâbla de cela pâge",
+       "tooltip-t-permalink": "Lim fixo de vers cela vèrsion de la pâge",
        "tooltip-ca-nstab-main": "Vêre la pâge de contegnu",
        "tooltip-ca-nstab-user": "Vêre la pâge utilisator",
-       "tooltip-ca-nstab-media": "Vêre la pâge du fichiér mèdia",
-       "tooltip-ca-nstab-special": "O est una pâge spèciâla, vos la pouede pas changiér.",
+       "tooltip-ca-nstab-media": "Vêre la pâge du fichiér multimèdiâ",
+       "tooltip-ca-nstab-special": "O est na pâge spèciâla que pôt pas étre changiêe",
        "tooltip-ca-nstab-project": "Vêre la pâge projèt",
        "tooltip-ca-nstab-image": "Vêre la pâge du fichiér",
        "tooltip-ca-nstab-mediawiki": "Vêre lo mèssâjo sistèmo",
        "tooltip-ca-nstab-template": "Vêre lo modèlo",
        "tooltip-ca-nstab-help": "Vêre la pâge d’éde",
-       "tooltip-ca-nstab-category": "Vêre la pâge de la catègorie",
+       "tooltip-ca-nstab-category": "Vêre la pâge de la catègoria",
        "tooltip-minoredit": "Marcar mos changements coment petiôts",
-       "tooltip-save": "Sôvar voutros changements",
-       "tooltip-preview": "Volyéd prèvisualisar voutros changements devant que los sôvar !",
-       "tooltip-diff": "Pèrmèt de montrar los changements que vos éd fêts",
-       "tooltip-compareselectedversions": "Fâre ressortir les difèrences entre doves vèrsions de ceta pâge",
-       "tooltip-watch": "Apondre ceta pâge a voutra lista de survelyence",
+       "tooltip-save": "Encartar voutros changements",
+       "tooltip-preview": "Prèvêde voutros changements. Se vos plét, empleyéd-lo devant qu’encartar.",
+       "tooltip-diff": "Montrar los changements que vos éd aportâs u tèxto",
+       "tooltip-compareselectedversions": "Fâre ressortir les difèrences entre les doves vèrsions chouèsies de cela pâge",
+       "tooltip-watch": "Apondre cela pâge a voutra lista de gouârda",
        "tooltip-watchlistedit-normal-submit": "Enlevar los titros",
-       "tooltip-watchlistedit-raw-submit": "Betar a jorn la lista de survelyence",
-       "tooltip-recreate": "Refâre la pâge mémo se ceta at étâ suprimâ",
+       "tooltip-watchlistedit-raw-submit": "Betar a jorn la lista de gouârda",
+       "tooltip-recreate": "Refâre la pâge quand ben que ceta est étâye suprimâye",
        "tooltip-upload": "Emmodar lo tèlèchargement",
-       "tooltip-rollback": "« Rèvocar » anule en yon clic lo ou ben los changement(s) de ceta pâge per son dèrriér contributor.",
-       "tooltip-undo": "« Dèfâre » rèvoque ceti changement et ôvre la fenétra d’èdicion en fôrma de prèvisualisacion.\nPèrmèt de rètablir la vèrsion devant et pués d’apondre una rêson dens la bouèta de rèsumâ.",
+       "tooltip-rollback": "« Rèvocar » anule tot d’un côp lo(s) changement(s) de cela pâge per lo dèrriér contributor",
+       "tooltip-undo": "« Dèfâre » anule cél changement et pués ôvre la fenétra de changement en fôrma d’apèrçu. Pèrmèt d’apondre na rêson dens lo rèsumâ.",
        "tooltip-preferences-save": "Encartar les prèferences",
        "tooltip-summary": "Buchiéd un côrt rèsumâ",
        "common.css": "/* Lo code CSS betâ ique serat aplicâ a tôs los habelyâjos. */",
        "group-bot.js": "/* Tot code JavaScript betâ ique serat chargiê ren que por los bots. */",
        "group-sysop.js": "/* Tot code JavaScript betâ ique serat chargiê ren que por los administrators. */",
        "group-bureaucrat.js": "/* Tot code JavaScript betâ ique serat chargiê ren que por los grata-papiérs. */",
-       "anonymous": "{{PLURAL:$1|Usanciér pas encartâ|Usanciérs pas encartâs}} dessus {{SITENAME}}",
-       "siteuser": "l’usanciér{{GENDER:$2||e}} $1 de {{SITENAME}}",
-       "anonuser": "l’usanciér pas encartâ $1 de {{SITENAME}}",
-       "lastmodifiedatby": "Ceta pâge at étâ changiê por lo dèrriér côp lo $1 a $2 per $3.",
+       "anonymous": "{{PLURAL:$1|Utilisator anonimo|Utilisators anonimos}} dessus {{SITENAME}}",
+       "siteuser": "l’utilisat{{GENDER:$2|or|rice}} $1 de {{SITENAME}}",
+       "anonuser": "l’utilisator anonimo $1 de {{SITENAME}}",
+       "lastmodifiedatby": "Cela pâge est étâye changiêe por lo dèrriér côp lo $1 a $2 per $3.",
        "othercontribs": "Basâ sur l’ôvra a $1.",
        "others": "ôtros",
-       "siteusers": "{{PLURAL:$2|l’usanciér|los usanciérs}} $1 de {{SITENAME}}",
-       "anonusers": "{{PLURAL:$2|l’usanciér pas encartâ|los usanciérs pas encartâs}} $1 de {{SITENAME}}",
-       "creditspage": "Crèdits de la pâge",
-       "nocredits": "Y at gins d’enformacion d’atribucion disponibla por ceta pâge.",
-       "spamprotectiontitle": "Pâge protègiê ôtomaticament a côsa de spame",
-       "spamprotectiontext": "La pâge que vos éd tâchiê de sôvar at étâ blocâ per lo filtro anti-spame.\nO est probâblament diu a un lim de vers un seto de defôr qu’aparêt sur la lista nêre.",
-       "spamprotectionmatch": "La chêna de caractèros « '''$1''' » at dècllenchiê lo dècelior de spame.",
-       "spambot_username": "Neteyâjo de spame per MediaWiki",
+       "siteusers": "{{PLURAL:$2|{{GENDER:$1|l’utilisator|l’utilisatrice}}|{{Gender:$1|los utilisators|les utilisatrices}}}} $1 de {{SITENAME}}",
+       "anonusers": "{{PLURAL:$2|l’utilisator anonimo|los utilisators anonimos}} $1 de {{SITENAME}}",
+       "creditspage": "Atribucions de la pâge",
+       "nocredits": "Y at gins d’enformacion d’atribucion disponibla por cela pâge.",
+       "spamprotectiontitle": "Filtro de protèccion contre los mèssâjos cofos",
+       "spamprotectiontext": "Lo tèxto que vos éd volu encartar est étâ blocâ per lo filtro contre los mèssâjos cofos.\nO est probâblament diu a un lim de vers un seto de defôr qu’aparêt sur la lista nêre.",
+       "spamprotectionmatch": "Cél tèxto-que est cen qu’at dècllenchiê noutron filtro contre los mèssâjos cofos : $1",
+       "spambot_username": "Neteyâjo de mèssâjos cofos per MediaWiki",
        "spam_reverting": "Rètablissement de la dèrriére vèrsion que contint gins de lim de vers $1",
-       "spam_blanking": "Totes les vèrsions que contegnont des lims de vers $1 sont blanchies",
-       "spam_deleting": "Totes les vèrsions que contegnont des lims de vers $1 sont suprimâs",
-       "simpleantispam-label": "Contrôlo anti-spame.\nEnscrîde '''REN''' ique !",
+       "spam_blanking": "Totes les vèrsions que contegnont de lims de vers $1 sont blanchies",
+       "spam_deleting": "Totes les vèrsions que contegnont de lims de vers $1 sont suprimâyes",
+       "simpleantispam-label": "Contrôlo contre los mèssâjos cofos.\nEmpléd <strong>ren</strong> ique !",
        "pageinfo-title": "Enformacions por « $1 »",
+       "pageinfo-not-current": "Dèsolâ, y at pas moyen de balyér cel’enformacion por les vielyes vèrsions.",
        "pageinfo-header-basic": "Enformacions de bâsa",
        "pageinfo-header-edits": "Historico des changements",
        "pageinfo-header-restrictions": "Protèccion de la pâge",
        "pageinfo-header-properties": "Propriètâts de la pâge",
        "pageinfo-display-title": "Titro montrâ",
-       "pageinfo-default-sort": "Cllâf de tri per dèfôt",
+       "pageinfo-default-sort": "Cllâf de chouèx per dèfôt",
        "pageinfo-length": "Talye de la pâge (en octèts)",
-       "pageinfo-article-id": "Numerô de la pâge",
+       "pageinfo-article-id": "Identifient de la pâge",
        "pageinfo-language": "Lengoua du contegnu de la pâge",
-       "pageinfo-robot-policy": "Statut de motor de rechèrche",
-       "pageinfo-robot-index": "Endèxâblo",
-       "pageinfo-robot-noindex": "Pas endèxâblo",
-       "pageinfo-watchers": "Nombro de contributors qu’ont la pâge dedens lor lista de survelyence",
-       "pageinfo-redirects-name": "Redirèccions de vers ceta pâge",
-       "pageinfo-subpages-name": "Sot-pâges de ceta pâge",
+       "pageinfo-content-model": "Modèlo de contegnu de la pâge",
+       "pageinfo-robot-policy": "Endèxacion per robots",
+       "pageinfo-robot-index": "Ôtorisâye",
+       "pageinfo-robot-noindex": "Dèfendua",
+       "pageinfo-watchers": "Nombro d’obsèrvators de la pâge",
+       "pageinfo-visiting-watchers": "Nombro d’obsèrvators de la pâge qu’ant vesitâ los dèrriérs changements",
+       "pageinfo-few-watchers": "Muens de $1 obsèrvator{{PLURAL:$1||s}}",
+       "pageinfo-few-visiting-watchers": "Y pôt ou ben pas avêr un obsèrvator que vesite los dèrriérs changements",
+       "pageinfo-redirects-name": "Nombro de redirèccions de vers cela pâge",
+       "pageinfo-subpages-name": "Nombro de sot-pâges de cela pâge",
        "pageinfo-subpages-value": "$1 ($2 redirèccion{{PLURAL:$2||s}} ; $3 nan-redirèccion{{PLURAL:$3||s}})",
        "pageinfo-firstuser": "Crèator de la pâge",
        "pageinfo-firsttime": "Dâta de crèacion de la pâge",
        "pageinfo-lasttime": "Dâta du dèrriér changement",
        "pageinfo-edits": "Soma totâla de changements",
        "pageinfo-authors": "Soma totâla d’ôtors difèrents",
-       "pageinfo-recent-edits": "Nombro de novéls changements (dedens los $1 passâs)",
+       "pageinfo-recent-edits": "Nombro de novéls changements (dens los $1 passâs)",
        "pageinfo-recent-authors": "Nombro de novéls ôtors difèrents",
        "pageinfo-magic-words": "{{PLURAL:$1|Mot magico|Mots magicos}} ($1)",
-       "pageinfo-hidden-categories": "{{PLURAL:$1|Catègorie cachiêye|Catègories cachiêyes}} ($1)",
-       "pageinfo-templates": "{{PLURAL:$1|Modèlo encllu|Modèlos encllus}} ($1)",
+       "pageinfo-hidden-categories": "{{PLURAL:$1|Catègoria cachiêe|Catègories cachiêes}} ($1)",
+       "pageinfo-templates": "{{PLURAL:$1|Modèlo transcllu|Modèlos transcllus}} ($1)",
+       "pageinfo-transclusions": "Pâge{{PLURAL:$1||s}} yô qu’el est transcllua ($1)",
        "pageinfo-toolboxlink": "Enformacions sur la pâge",
        "pageinfo-redirectsto": "Redirige vers",
        "pageinfo-redirectsto-info": "enfô",
        "pageinfo-contentpage": "Comptâ coment pâge de contegnu",
        "pageinfo-contentpage-yes": "Ouè",
+       "pageinfo-protect-cascading": "Les protèccions sont en cascâda dês ique",
        "pageinfo-protect-cascading-yes": "Ouè",
-       "markaspatrolleddiff": "Marcar coment survelyê",
-       "markaspatrolledtext": "Marcar ceta pâge coment survelyê",
-       "markedaspatrolled": "Marcâye coment survelyêye",
-       "markedaspatrolledtext": "La vèrsion chouèsia de [[:$1]] est étâye marcâye coment survelyêye.",
-       "rcpatroldisabled": "La fonccion de survelyence des dèrriérs changements est pas activâ.",
-       "rcpatroldisabledtext": "La fonccionalitât de survelyence des dèrriérs changements est pas activâ.",
-       "markedaspatrollederror": "Pôt pas étre marcâye coment survelyêye",
-       "markedaspatrollederrortext": "Vos dête chouèsir una vèrsion por la povêr marcar coment survelyê.",
-       "markedaspatrollederror-noautopatrol": "Vos avéd pas lo drêt de marcar voutros prôpros changements coment survelyês.",
-       "patrol-log-page": "Jornal de les vèrsions survelyês",
-       "patrol-log-header": "Vê-que un jornal de les vèrsions survelyês.",
-       "log-show-hide-patrol": "$1 lo jornal de les vèrsions survelyês",
+       "pageinfo-protect-cascading-from": "Les protèccions sont en cascâda dês",
+       "pageinfo-category-info": "Enformacions sur la catègoria",
+       "pageinfo-category-total": "Soma totâla de membros",
+       "pageinfo-category-pages": "Nombro de pâges",
+       "pageinfo-category-subcats": "Nombro de sot-catègories",
+       "pageinfo-category-files": "Nombro de fichiérs",
+       "markaspatrolleddiff": "Marcar coment gouardâ",
+       "markaspatrolledtext": "Marcar cela pâge coment gouardâye",
+       "markaspatrolledtext-file": "Marcar cela vèrsion de fichiér coment gouardâye",
+       "markedaspatrolled": "Marcâ coment gouardâ",
+       "markedaspatrolledtext": "La vèrsion chouèsia de [[:$1]] est étâye marcâye coment gouardâye.",
+       "rcpatroldisabled": "La gouârda des dèrriérs changements est dèsactivâye",
+       "rcpatroldisabledtext": "Ora la fonccionalitât de gouârda des dèrriérs changements est dèsactivâye.",
+       "markedaspatrollederror": "Pôt pas étre marcâ coment gouardâ",
+       "markedaspatrollederrortext": "Vos dête spècifiar na vèrsion por la povêr marcar coment gouardâye.",
+       "markedaspatrollederror-noautopatrol": "Vos éd pas lo drêt de marcar los voutros changements coment gouardâs.",
+       "markedaspatrollednotify": "Cél changement de $1 est étâ marcâ coment gouardâ.",
+       "markedaspatrollederrornotify": "Falyita du marcâjo du changement coment gouardâ.",
+       "patrol-log-page": "Jornâl de gouârda",
+       "patrol-log-header": "Vê-que un jornâl de les vèrsions gouardâyes.",
+       "log-show-hide-patrol": "$1 lo jornâl de gouârda",
        "deletedrevision": "La vielye vèrsion $1 at étâ suprimâ.",
        "filedeleteerror-short": "Èrror pendent la suprèssion du fichiér : $1",
        "filedeleteerror-long": "Des èrrors ont étâ rencontrâs pendent la suprèssion du fichiér :\n\n$1",
        "metadata-help": "Ceti fichiér contint des enformacions de ples, probâblament apondues per l’aparèly-fotô numerico ou ben lo scanor utilisâ por lo fâre.\nSe lo fichiér at étâ changiê dês son ètat originâl, quârques dètalys pôvont pas reflètar a chavon l’émâge changiê.",
        "metadata-expand": "Montrar los dètalys ètendus",
        "metadata-collapse": "Cachiér los dètalys ètendus",
-       "metadata-fields": "Los champs de mètabalyês d’émâge listâs dens ceti mèssâjo seront encllus dens la pâge de dèscripcion de l’émâge quand la trâbla de mètabalyês serat rèduita.\nLos ôtros champs seront cachiês per dèfôt.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-fields": "Los champs de mètabalyês d’émâge listâs dens cél mèssâjo seront betâs dedens la pâge de dèscripcion de l’émâge quand la trâbla de mètabalyês serat rèduita.\nLos ôtros champs seront cachiês per dèfôt.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "metadata-langitem": "'''$2 :''' $1",
        "exif-imagewidth": "Largior",
        "exif-imagelength": "Hôtior",
        "exif-urgency-low": "Fêbla ($1)",
        "exif-urgency-high": "Hôta ($1)",
        "exif-urgency-other": "Prioritât dèfenia per l’usanciér ($1)",
-       "namespacesall": "tôs",
+       "namespacesall": "Tôs",
        "monthsall": "tôs",
        "confirmemail": "Confirmar l’adrèce èlèctronica",
        "confirmemail_noemail": "Vos éd pas dèfeni una adrèce èlèctronica valida dens voutres [[Special:Preferences|prèferences]].",
        "percent": "$1&#160;%",
        "imgmultipageprev": "← pâge devant",
        "imgmultipagenext": "pâge aprés →",
-       "imgmultigo": "Listar !",
+       "imgmultigo": "Emmodar !",
        "imgmultigoto": "Alar a la pâge $1",
+       "img-lang-go": "Emmodar",
        "ascending_abbrev": "que crêt",
        "descending_abbrev": "que dècrêt",
        "table_pager_next": "Pâge aprés",
        "table_pager_last": "Dèrriére pâge",
        "table_pager_limit": "Montrar $1 èlèment{{PLURAL:$1||s}} per pâge",
        "table_pager_limit_label": "Rèsultats per pâge :",
-       "table_pager_limit_submit": "Listar",
+       "table_pager_limit_submit": "Emmodar",
        "table_pager_empty": "Gins de rèsultat",
        "autosumm-blank": "Pâge blanchia",
        "autosumm-replace": "Contegnu remplaciê per « $1 »",
        "version-hook-name": "Nom du grèfon",
        "version-hook-subscribedby": "Soscrit per",
        "version-version": "($1)",
-       "version-svn-revision": "(v$2)",
        "version-license": "Licence",
        "version-poweredby-credits": "Ceti vouiqui fonccione grâce a '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "version-poweredby-others": "ôtros",
        "version-entrypoints": "URL de pouent d’entrâ",
        "version-entrypoints-header-entrypoint": "Pouent d’entrâ",
        "version-entrypoints-header-url": "URL",
+       "redirect-submit": "Emmodar",
        "fileduplicatesearch": "Rechèrche des fichiérs en doblo",
        "fileduplicatesearch-summary": "Rechèrche des fichiérs en doblo d’aprés lor mârca de chaplâjo.",
        "fileduplicatesearch-legend": "Rechèrche d’un doblo",
        "tags": "Balises des changements valides",
        "tag-filter": "Filtrar les [[Special:Tags|balises]] :",
        "tag-filter-submit": "Filtrar",
+       "tag-list-wrapper": "([[Special:Tags|Balis{{PLURAL:$1|a|es}}]] : $2)",
        "tags-title": "Balises",
        "tags-intro": "Ceta pâge liste les balises que la programeria pôt utilisar por marcar un changement et lor significacion.",
        "tags-tag": "Nom de la balisa",
        "logentry-patrol-patrol": "$1 at marcâ la vèrsion $4 de la pâge $3 coment controlâye",
        "logentry-patrol-patrol-auto": "$1 at marcâ ôtomaticament la vèrsion $4 de la pâge $3 coment controlâye",
        "logentry-newusers-newusers": "Lo compto utilisator $1 est étâ fêt",
-       "logentry-newusers-create": "Lo compto utilisator $1 est étâ fêt",
+       "logentry-newusers-create": "Lo comptio utilisator $1 {{GENDER:$2|est étâ fêt}}",
        "logentry-newusers-create2": "Lo compto utilisator $3 est étâ fêt per $1",
        "logentry-newusers-autocreate": "Lo compto $1 at étâ fêt ôtomaticament",
        "logentry-rights-rights": "$1 at changiê l’apartegnence a la tropa por « $3 » de $4 a $5",
        "special-characters-title-minus": "segno muens",
        "mw-widgets-dateinput-placeholder-day": "AAAA-MM-JJ",
        "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
-       "api-error-blacklisted": "Volyéd chouèsir un ôtro titro dèscriptif."
+       "api-error-blacklisted": "Volyéd chouèsir un ôtro titro dèscriptif.",
+       "randomrootpage": "Pâge racena a l’hasârd"
 }
index f48ddca..0306e65 100644 (file)
        "myprivateinfoprotected": "Dü heest ei det brükerrocht, am din priwoot dooten tu feranrin.",
        "mypreferencesprotected": "Dü heest ei det brükerrocht, am din iinstelangen tu feranrin.",
        "ns-specialprotected": "Spezial-sidjen kön ei bewerket wurd.",
-       "titleprotected": "En sidj mä didiar nööm koon ei uunlaanj wurd.\nDi brüker [[User:$1|$1]] hää det sidj speret, an di grünj as: \"''$2''\".",
+       "titleprotected": "En sidj mä didiar nööm koon ei uunlaanj wurd.\nDi brüker [[User:$1|$1]] hää det sidj speret, an di grünj as: <em>$2</em>.",
        "filereadonlyerror": "Det datei „$1“ koon ei feranert wurd, auer uun det fertiaknis „$2“ bluas leesen wurd koon.\nDi grünj faan di süsteem-administraator as: „$3“.",
        "invalidtitle-knownnamespace": "Ferkiard auerskraft uun di nöömrüm „$2“ an tekst „$3“",
        "invalidtitle-unknownnamespace": "Ferkiard auerskraft uun di ünbekäänd nöömrüm „$1“ an tekst „$2“",
        "undo-summary-username-hidden": "Feranrang $1 faan en ferbürgenen brüker turagsaat",
        "cantcreateaccounttitle": "Det brükerkonto koon ei iinracht wurd",
        "cantcreateaccount-text": "Det iinrachten faan en brükerkonto faan det IP-adres '''($1)''' as faan [[User:$3|$3]] speret wurden.\n\nGrünj för det sper: ''$2''",
-       "cantcreateaccount-range-text": "Det iinrachten faan brükerkontos uun det IP-adresfial '''$1''', huar uk din IP ('''$4''') uun as, as faan [[User:$3|$3]] speret wurden.\n\nDi grünj faan $3 wiar: ''$2''",
+       "cantcreateaccount-range-text": "Det iinrachten faan brükerkontos uun det IP-adresfial <strong>$1</strong>, huar uk din IP (<strong>$4</strong>) uun as, as faan [[User:$3|$3]] speret wurden.\n\nDi grünj faan $3 wiar: <em>$2</em>",
        "viewpagelogs": "Logbuken faan detdiar sidj uunwise",
        "nohistory": "Detdiar sidj hää nään ferluup faan werjuunen.",
        "currentrev": "Leetst werjuun",
        "recentchanges-label-bot": "Feranrang faan en bot",
        "recentchanges-label-unpatrolled": "Detdiar feranrang as noch ei efterluket wurden",
        "recentchanges-label-plusminus": "Feranert sidjengrate (am soföl bytes)",
-       "recentchanges-legend-heading": "'''Ferklaarang:'''",
+       "recentchanges-legend-heading": "<strong>Ferklaarang:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (luke uk bi't [[Special:NewPages|list mä nei sidjen]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Diar {{PLURAL:$5|woort det feranrang|wurd a feranrangen}} sant <strong>$3,$4</strong>uunwiset (ei muar üs <strong>$1</strong> feranrangen).",
        "rollbackfailed": "Bi't turagsaaten as wat skiaf gingen.",
        "cantrollback": "Det feranrang koon ei turagsaat wurd, diar san nian ööder skriiwern weesen.",
        "alreadyrolled": "A feranrangen faan [[User:$2|$2]] ([[User talk:$2|Diskuschuun]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) bi [[:$1]] kön ei turagsaat wurd. Diar hää uuntesken en öödern brüker det sidj feranert.\n\nDet leetst feranrang as faan [[User:$3|$3]] ([[User talk:$3|Diskuschuun]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Tuupfaadet feranrang: ''„$1“''.",
+       "editcomment": "Tuupfaadet feranrang: <em>$1</em>.",
        "revertpage": "Feranrangen faan [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskuschuun]]) san üüb di leetst stant faan [[User:$1|$1]] turagsaat wurden.",
        "revertpage-nouser": "Feranrangen faan en ferbürgenen brüker turagsaat an det leetst werjuun faan {{GENDER:$1|[[User:$1|$1]]}} weder iinsteld.",
        "rollback-success": "Feranrangen faan $1 turagsaat an det leetst werjuun faan $2 weder iinsteld.",
        "default-skin-not-found": "Uuha! Uun <code dir=\"ltr\">$wgDefaultSkin</code> as fäästlaanj, dat <code>$1</code> dan standard-skak as. Man hi as ei diar!\n\nDin instalatjuun hää wel jodiar {{PLURAL:$4|skak|skaker}}. Luke uk uun't [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de brüker-hoonbuk], am {{PLURAL:$4|di skak|a skaker}} tu aktiwiarin an standards iinturachten.\n\n$2\n\n; Wan dü MediaWiki jüst instaliaret heest:\n: Dü heest was faan Git of direkt faan a kwelcode instaliaret. Do as det nian woner. Dü könst skaker ütj det [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Skakfertiaknis] instaliare. Diarför skel dü:\n:* Di [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] deelloose, hi komt mä ünlik skaker an ütjwidjangen. Dü könst det  <code>skins/</code>-fertiaknis kopiare an iinsaat.\n:* Enkelt skak-tarballs faan [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] deelloose.\n:* Ian faan a <code>mediawiki/skins/*</code>-fertiaknissen auer Git iin uun det <code dir=\"ltr\">skins/</code>-fertiaknis faan din MediaWiki-Instalatjuun auerskriiw.\n: Det skul din Git-fertiaknis ei uunstaken maage, wan dü en MediaWiki-ütjwerker beest.\n\n; Wan dü jüst MediaWiki aktualisiaret heest:\n: MediaWiki 1.24 an neier werjuunen aktiwiare instaliaret skaker ei muar faan salew (luke uk iin uun det [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery brüker-hoonbuk]). Dü könst {{PLURAL:$5|detdiar rä|jodiar räen}} uun det datei <code>LocalSettings.php</code> iinsaat, am {{PLURAL:$5|di|aal a}} instaliaret {{PLURAL:$5|skak|skaker}} tu aktiwiarin:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Wan dü jüst <code>LocalSettings.php</code> feranert heest:\n: Heest dü a skaker uk aaltumaal rocht skrewen?",
        "default-skin-not-found-no-skins": "Uuha! Uun <code>$wgDefaultSkin</code> as fäästlaanj, dat <code>$1</code> dan standard-skak as. Man hi as ei diar!\n\nDü heest goor nian skak instaliaret.\n\n; Wan dü MediaWiki jüst instaliaret of aktualisiaret heest:\n: Dü heest was faan Git of direkt faan a kwelcode instaliaret. Do as det nian woner. MediaWiki 1.24 an neier werjuunen haa nian skak uun't hood-fertiaknis. Dü könst skaker ütj det [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Skakfertiaknis] instaliare. Diarför skel dü:\n:* Di [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] deelloose, hi komt mä ünlik skaker an ütjwidjangen. Dü könst det  <code>skins/</code>-fertiaknis kopiare an iinsaat.\n:* Enkelt skak-tarballs faan [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] deelloose.\n:* Ian faan a <code>mediawiki/skins/*</code>-fertiaknissen auer Git iin uun det <code dir=\"ltr\">skins/</code>-fertiaknis faan din MediaWiki-Instalatjuun auerskriiw.\n: Det skul din Git-fertiaknis ei uunstaken maage, wan dü en MediaWiki-ütjwerker beest. Luke uk uun't [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de brüker-hoonbuk], am skaker tu aktiwiarin an standards iinturachten.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiwiaret)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ufsteld''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>ufsteld</strong>)",
        "mediastatistics": "Statistik faan meedien",
        "mediastatistics-summary": "Statistiken faan huuchschüürd dateitypen. Diar woort bluas det leetst werjuun uunwiset. Ual of stregen werjuunen san diar ei bi.",
        "mediastatistics-nbytes": "{{PLURAL:$1|Ian byte|$1 bytes}} ($2; $3%)",
index 551586e..42da004 100644 (file)
        "recentchanges-label-bot": "Chest cambiament al è stât eseguît di un bot",
        "recentchanges-label-unpatrolled": "Chest cambiament nol è stât ancjemò verificât",
        "recentchanges-label-plusminus": "La dimension de pagjine e je cambiade di chest numar di byte",
-       "recentchanges-legend-heading": "'''Lejende:'''",
+       "recentchanges-legend-heading": "<strong>Lejende:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (cjale lis [[Special:NewPages|gnovis pagjinis]])",
        "rcnotefrom": "Ca sot i cambiaments dal '''$2''' (fintremai al '''$1''').",
        "rclistfrom": "Mostre i ultins cambiaments dal $3 $2",
index 514fe08..80329a0 100644 (file)
        "cascadeprotected": "Dizze side is skoattele tsjin wizigjen, om't der in ûnderdiel útmakket fan de neikommende {{PLURAL:$1|side|siden}}, dy't skoattele {{PLURAL:$1|is|binne}} mei de \"ûnderlizzende siden\" opsje ynskeakele: $2",
        "namespaceprotected": "Jo hawwe gjin rjochten om siden yn'e nammerûmte '''$1''' te bewurkjen.",
        "ns-specialprotected": "Siden yn'e nammerûmte {{ns:special}} kinne net bewurke wurde.",
-       "titleprotected": "It oanmeitsjen fan dizze side is befeilige troch [[User:$1|$1]].\nDe oanfierde reden is ''$2''.",
+       "titleprotected": "It oanmeitsjen fan dizze side is befeilige troch [[User:$1|$1]].\nDe oanfierde reden is <em>$2</em>.",
        "exception-nologin": "Net oanmeld",
        "virus-badscanner": "Minne konfiguraasje: ûnbekende virusscanner: ''$1''",
        "virus-scanfailed": "scannen is mislearre (koade $1)",
        "right-blockemail": "In brûker it rjocht ta it ferstjoeren fan e-mail ôfnimme",
        "right-hideuser": "In brûkersnamme foar oare brûkers ferskûlje",
        "right-ipblock-exempt": "IP-blokkades út 'e wei gean",
-       "right-proxyunbannable": "Blokkades foar proxy's jilde net",
        "right-protect": "Befeiligingsnivo's feroarje en beskerme siden bewurkje",
        "right-editprotected": "Befeilige siden bewurkje (sûnder cascading-befeiliging)",
        "right-editinterface": "Brûkersinterface bewurkje",
        "right-userrights-interwiki": "Wizigje meidoggerrjochten fan meidoggers yn oare wiki's",
        "right-siteadmin": "De database blokkearje en wer frij jaan",
        "right-override-export-depth": "Alle siden oant en mei in keppelingsdjipte fan fiif fuortskriuwe",
+       "grant-group-email": "E-mail stjoere",
        "newuserlogpage": "Ynskriuwingsloch",
        "newuserlogpagetext": "Dit is in loch fan meidoggers dy't de lêste tiid ynskreaun binne.",
        "rightslog": "Rjochten-loch",
        "recentchanges-label-minor": "Dit is in tekstwiziging",
        "recentchanges-label-bot": "Dizze wiziging is troch in robot makke",
        "recentchanges-label-unpatrolled": "Dizze wiziging is noch net neisjûn",
-       "recentchanges-legend-heading": "'''Leginda:'''",
+       "recentchanges-legend-heading": "<strong>Leginda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sjoch ek de [[Special:NewPages|list mei nije siden]])",
        "rcnotefrom": "Dit binne de feroarings sûnt <b>$2</b> (maksimaal <b>$1</b>).",
        "rclistfrom": "Jou nije feroarings, begjinnende mei $3 $2",
        "filewasdeleted": "Der is earder in triem mei dizze namme fuorthelle.\nRieplachtsje it $1 foar't jo him op'e nij tafoegje.",
        "filename-bad-prefix": "De namme fan de triem dy't jo oanbiede begjint mei '''\"$1\"''', dit wiist op in namme dy't automatysk troch in digitale kamera oanmakke wurdt. Feroarje de namme as jo wolle yn ien dy't in omskriuwing jout fan de triem.",
        "filename-prefix-blacklist": " #<!-- lit dizze line exakt sa't er is --> <pre>\n# Syntax is as folget:\n#   * Alles fan in \"#\"-teken oan't de ein fan de line is in kommintaar\n#   * Elke net blanke line is a foarheaksel foar triemnammen sa't dy automatysk jûn wurde troch digitale kamera's\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # guon mobile tillefoanen\nIMG # algemien\nJD # Jenoptik\nMGP # Pentax\nPICT # ferskaat\n #</pre> <!-- lit dizze line exakt sa't er is -->",
-       "upload-success-subj": "Oanbieden slagge.",
-       "upload-failure-subj": "Uploadprobleem",
-       "upload-warning-subj": "Uploadwarskôging",
        "upload-proto-error": "Ferkeard protokol",
        "upload-proto-error-text": "Oanbieden mei dizze metoade freget URL's dy't begjinne mei <code>http://</code> of <code>ftp://</code>.",
        "upload-file-error": "Ynterne fout",
        "pager-older-n": "{{PLURAL:$1|1 âlder|$1 âlder}}",
        "suppress": "Tafersjoch",
        "apihelp": "API-help",
+       "apisandbox-reset": "Wiskje",
+       "apisandbox-examples": "Foarbyld",
+       "apisandbox-results": "Resultaat",
        "booksources": "Boekynformaasje",
        "booksources-search-legend": "Boarnen en ynformaasje oer in boek sykje",
        "booksources-search": "Sykje",
        "watchlist-details": "Jo folchlist hat {{PLURAL:$1|$1 side|$1 siden}}, oerlissiden net meiteld.",
        "wlnote": "Dit {{PLURAL:$1|is de lêste feroaring|binne de lêste '''$1''' feroarings}} yn de lêste {{PLURAL:$2|oer|'''$2''' oeren}}.",
        "wlshowlast": "Lit feroarings sjen fan de lêste $1 oeren $2 dagen",
-       "watchlistall2": "alles",
        "watching": "Dwaande mei op'e folchlist te setten ...",
        "unwatching": "Dwaande mei fan'e folchlist ôf te heljen ...",
        "enotif_impersonal_salutation": "meidogger fan {{SITENAME}}",
        "rollbackfailed": "Feroaring werom sette net slagge",
        "cantrollback": "Dizze feroaring kin net werom setten wurde, om't der mar ien skriuwer is.",
        "alreadyrolled": "Kin de feroaring fan [[:$1]]\ntroch [[User:$2|$2]] ([[User talk:$2|Oerlis]]) net werom sette;\nin oar hat de feroaring werom set, of oars wat oan de side feroare.\n\nDe lêste feroaring wie fan [[User:$3|$3]] ([[User talk:$3|Oerlis]]).",
-       "editcomment": "De gearfetting wie: \"''$1''\".",
+       "editcomment": "De gearfetting wie: <em>$1</em>.",
        "revertpage": "Bewurkings fan [[Special:Contributions/$2|$2]] ([[User talk:$2|Oerlis]]) werom set ta de ferzje fan [[User:$1|$1]]",
        "rollback-success": "Feroarings werom set fan $1; werom set nei de lêste ferzje fan $2.",
        "protectlogpage": "Skoattelloch",
        "pagelang-use-default": "Standerttaal brûken",
        "pagelang-select-lang": "Taal selektearje",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (ynskeakele)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''útskeakele''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>útskeakele</strong>)",
        "mediastatistics": "Mediastatistiken",
        "mediastatistics-nfiles": "$1 ($2%)",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
index 05d0420..fce0339 100644 (file)
@@ -19,7 +19,8 @@
                        "පසිඳු කාවින්ද",
                        "아라",
                        "SeoMac",
-                       "Macofe"
+                       "Macofe",
+                       "Tem"
                ]
        },
        "tog-underline": "Folínte faoi naisc:",
        "articlepage": "Féach ar an alt",
        "talk": "Plé",
        "views": "Radhairc",
-       "toolbox": "Bosca uirlisí",
+       "toolbox": "Uirlisí",
        "userpage": "Féach ar lch úsáideora",
        "projectpage": "Féach ar lch thionscadail",
        "imagepage": "Féach ar lch comhaid",
        "editinginterface": "'''Rabhadh:''' Tá tú ag athrú leathanaigh a bhfuil téacs comhéadain do na bogearraí air. Cuirfear athruithe ar an leathanach seo i bhfeidhm ar an gcomhéadan úsáideora.\nMás maith leat MediaWiki a aistriú, cuimhnigh ar [//translatewiki.net/wiki/Main_Page?setlang=ga translatewiki.net] (tionscadal logánaithe MediaWiki) a úsáid.",
        "namespaceprotected": "Ní chead agat leathanaigh a chur in eagar san ainmspás '''$1'''.",
        "ns-specialprotected": "Ní féidir leathanaigh speisialta a chur in eagar.",
-       "titleprotected": "Tá an teideal seo cosanta ar chruthú le [[User:$1|$1]].\nAn fáth ná ''$2''.",
+       "titleprotected": "Tá an teideal seo cosanta ar chruthú le [[User:$1|$1]].\nAn fáth ná <em>$2</em>.",
        "virus-scanfailed": "theip an scan (cód $1)",
        "virus-unknownscanner": "frithvíreas anaithnid:",
        "logouttext": "'''Tá tú logáilte amach anois.'''\n\nIs féidir leat an {{SITENAME}} a úsáid fós gan ainm, nó is féidir leat <span class='plainlinks'>[$1 logáil isteach arís]</span> mar an úsáideoir céanna, nó mar úsáideoir eile.\nTabhair faoi deara go taispeáinfear roinnt leathanaigh mar atá tú logáilte isteach fós, go dtí go ghlanfá amach do taisce líonleitheora.",
        "destfilename": "Comhadainm sprice:",
        "upload-maxfilesize": "Méad comhad is mó: $1",
        "watchthisupload": "Déan faire ar an leathanach seo",
-       "upload-success-subj": "D'éirigh leis an uaslódáil",
        "upload-proto-error": "Prótacal mícheart",
        "upload-file-error": "Earráid inmheánach",
        "license": "Ceadúnas:",
        "rollbackfailed": "Theip an rolladh siar",
        "cantrollback": "Ní féidir an athrú a athúsáid; ba é údar an ailt an t-aon duine a rinne athrú dó.",
        "alreadyrolled": "Ní féidir eagrán níos luaí an leathanaigh [[:$1]] le [[User:$2|$2]] ([[User talk:$2|Plé]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) a athúsáid; d'athraigh duine eile é cheana fein, nó d'athúsáid duine eile eagrán níos luaí cheana féin.\n\n[[User:$3|$3]] ([[User talk:$3|Plé]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) an té a rinne an athrú is déanaí.",
-       "editcomment": "Seo a raibh an achoimre eagarthóireacht: \"''$1''\".",
+       "editcomment": "Seo a raibh an achoimre eagarthóireacht: <em>$1</em>.",
        "revertpage": "Cealaíodh athruithe [[Special:Contributions/$2|$2]] ([[User talk:$2|Plé]]); ar ais chuig leagan le [[User:$1|$1]]",
        "protectlogpage": "Log cosanta",
        "protectlogtext": "Seo é liosta de glais a cuireadh ar / baineadh de leathanaigh.\nFéach ar [[Special:ProtectedPages|Leathanach glasáilte]] chun a thuilleadh eolais a fháil.",
        "movelogpagetext": "Liosta is ea seo thíos de leathanaigh athainmnithe.",
        "movereason": "Fáth:",
        "revertmove": "athúsáid",
-       "delete_and_move": "Scrios agus athainmnigh",
        "delete_and_move_text": "==Tá scriosadh riachtanach==\nTá an leathanach sprice (\"[[:$1]]\") ann cheana féin.\nAr mhaith leat é a scriosadh chun áit a dhéanamh don athainmniú?",
        "delete_and_move_confirm": "Tá, scrios an leathanach",
        "delete_and_move_reason": "Scriosta chun áit a dhéanamh d'athainmniú",
index ba298f5..10a15b7 100644 (file)
@@ -15,7 +15,8 @@
                        "Mywood",
                        "Duolaimi",
                        "Impersonator 1",
-                       "Babanwalia"
+                       "Babanwalia",
+                       "Macofe"
                ]
        },
        "tog-underline": "下划链接",
        "watchthisupload": "眏到个页",
        "filewasdeleted": "先前有只同名档案上传后又拖删吥嘞。上传个只档案之前倷非要检查$1。",
        "filename-bad-prefix": "倷上传𠮶档案名系以'''\"$1\"'''做开头𠮶,通常个种冇意义𠮶名字系数码相机度𠮶自动编排。请到倷𠮶档案拣过只更加有意义𠮶名字。",
-       "upload-success-subj": "上传正嘞",
        "upload-proto-error": "协定错误",
        "upload-proto-error-text": "远程上传要求 URL 用 <code>http://</code> 或 <code>ftp://</code> 开头。",
        "upload-file-error": "内部错误",
        "nlinks": "$1只链接",
        "nmembers": "$1只成员",
        "nrevisions": "$1只改动",
-       "nviews": "$1回浏览",
        "specialpage-empty": "个只报告𠮶结果系空𠮶。",
        "lonelypages": "孤立𠮶页面",
        "lonelypagestext": "底下页面冇链接到{{SITENAME}}个别𠮶页面。",
        "mailnologin": "冇email地址",
        "mailnologintext": "倷要[[Special:UserLogin|登入]] 起同到倷𠮶[[Special:Preferences|参数设置]] 有只有效𠮶email才发得正email到别𠮶用户。",
        "emailuser": "发email到个只用户",
-       "emailpage": "发email到用户",
        "emailpagetext": "要系个只用户到佢𠮶参数设置页填哩有效𠮶email位置,下底𠮶表格会寄只信息到个只用户。\n倷到倷参数设置填𠮶email位置会显到email𠮶“发信人”个栏,咁样个只用户就回得正倷啰。",
        "defemailsubject": "{{SITENAME}} 电子邮件",
        "noemailtitle": "冇电子邮件地址",
        "rollbackfailed": "还原失败",
        "cantrollback": "还原伓正;最末𠮶贡献人系文章𠮶唯一作者。",
        "alreadyrolled": "还原伓正由[[User:$2|$2]] ([[User talk:$2|讨论]])做𠮶[[$1]]𠮶最晏编写;\n别𠮶人编辑过或系恢复嘞个页。\n\n最晏编辑人: [[User:$3|$3]] ([[User talk:$3|讨论]])。",
-       "editcomment": "编辑介绍: \"''$1''\"。",
+       "editcomment": "编辑介绍: <em>$1</em>。",
        "revertpage": "返回由[[Special:Contributions/$2|$2]] ([[User talk:$2|对话]])𠮶编辑;恢复到[[User:$1|$1]]𠮶最末一只版本",
        "rollback-success": "返回由$1𠮶编辑;恢复到$2𠮶最末一只版本。",
        "sessionfailure": "倷𠮶登入好像有嚸问题,为到防范未然,个只动作拖取消嘞。\n\n请按吖“后退”再试过啰!",
        "move-page-legend": "换动页面",
        "movepagetext": "用下底𠮶表格拿一只页面改名,跟到拿佢𠮶历史一齐般到新页面。\n旧𠮶页面就系新页𠮶重定向页。\n连到旧页面𠮶链接伓会自动更改;\n劳烦检查吖双重或坏𠮶重定向链接。\n倷有责任确保全部链接会连到指正𠮶页面。\n\n注意如果新页面早就有𠮶话,页面'''伓会'''搬过去,要不新页面就系冇内容或系重定向页,也冇修订历史。\n啖就系话必要时倷能等换到新页面之后再又回到旧𠮶页面,跟到倷也覆盖不正目前页面。\n\n'''警告!'''\n对一只访问得多𠮶页面啖会系一只重要同关键𠮶改动;\n请扤之前了解正佢啖可能𠮶后果。",
        "movepagetalktext": "相关𠮶讨论页会自动同个页一齐搬走,'''除非''':\n*新页面有嘞只有内容𠮶讨论页,或\n*倷伓选下底𠮶选择方块。\n啖倷就非要手工移动或合并页面。",
-       "movearticle": "换动页面:",
        "movenologintext": "倷要系登记用户接到[[Special:UserLogin|登入]]后才移动得正页面。",
        "movenotallowed": "倷到{{SITENAME}}冇权移动页面。",
        "newtitle": "新标题:",
        "movelogpagetext": "下底系移动嘞𠮶页面列表:",
        "movereason": "原因:",
        "revertmove": "恢复",
-       "delete_and_move": "删除跟到移动",
        "delete_and_move_text": "==需要删除==\n\n目标文章\"[[:$1]]\"存在嘞。为到移动佢,倷要删卟旧页面?",
        "delete_and_move_confirm": "系𠮶,删卟个页",
        "delete_and_move_reason": "为到移动删卟佢",
index 1634938..3894997 100644 (file)
@@ -11,7 +11,8 @@
                        "아라",
                        "Mywood",
                        "Impersonator 1",
-                       "LNDDYL"
+                       "LNDDYL",
+                       "Macofe"
                ]
        },
        "tog-underline": "下劃連結",
        "watchthisupload": "眏到箇頁",
        "filewasdeleted": "先前有隻同名檔案上傳後又拕刪吥嘞。上傳箇隻檔案之前倷非要檢查$1。",
        "filename-bad-prefix": "倷上傳嗰檔案名係以'''\"$1\"'''做開頭嗰,通常箇種冇意義嗰名字係數碼相機度嗰自動編排。請到倷嗰檔案揀過隻更加有意義嗰名字。",
-       "upload-success-subj": "上傳正哩",
        "upload-proto-error": "協定錯誤",
        "upload-proto-error-text": "遠程上傳要求 URL 用 <code>http://</code> 或 <code>ftp://</code> 開頭。",
        "upload-file-error": "內部錯誤",
        "nlinks": "$1隻連結",
        "nmembers": "$1隻成員",
        "nrevisions": "$1隻改動",
-       "nviews": "$1回瀏覽",
        "specialpage-empty": "箇隻報告嗰結果係空嗰。",
        "lonelypages": "孤立嗰頁面",
        "lonelypagestext": "底下頁面冇連結到{{SITENAME}}箇別嗰頁面。",
        "mailnologin": "冇email地址",
        "mailnologintext": "倷要[[Special:UserLogin|登入]] 起同到倷嗰[[Special:Preferences|參數設置]] 有隻有效嗰email才發得正email到別嗰用戶。",
        "emailuser": "發email到箇隻用戶",
-       "emailpage": "發email到用戶",
        "emailpagetext": "要係箇隻用戶到佢嗰參數設置頁填哩有效嗰email位置,下底嗰表格會寄隻信息到箇隻用戶。\n倷到倷參數設置填嗰email位置會顯到email嗰「發信人」箇欄,咁樣箇隻用戶就回得正倷囉。",
        "defemailsubject": "{{SITENAME}} 電子郵件",
        "noemailtitle": "冇電子郵件地址",
        "rollbackfailed": "還原失敗",
        "cantrollback": "還原伓正;頂晏嗰貢獻人係文章嗰唯一作者。",
        "alreadyrolled": "還原伓正由[[User:$2|$2]] ([[User talk:$2|討論]])做嗰[[$1]]嗰最晏編寫;\n別嗰人編輯過或係恢復嘞箇頁。\n\n最晏編輯人: [[User:$3|$3]] ([[User talk:$3|討論]])。",
-       "editcomment": "編輯介紹: \"''$1''\"。",
+       "editcomment": "編輯介紹: <em>$1</em>。",
        "revertpage": "返回由[[Special:Contributions/$2|$2]] ([[User talk:$2|對話]])嗰編輯;恢復到[[User:$1|$1]]嗰最末一隻版本",
        "rollback-success": "返回由$1嗰編輯;恢復到$2嗰頂晏一隻版本。",
        "sessionfailure": "倷嗰登入好像有嚸問題,為到防範未然,箇隻動作拕取消嘞。\n\n請按吖“後退”再試過囉!",
        "move-page-legend": "換動頁面",
        "movepagetext": "用下底嗰表格拿一隻頁面改名,跟到拿佢嗰歷史一齊般到新頁面。\n舊嗰頁面就系新頁嗰重定向頁。\n連到舊頁面嗰鏈接伓會自動更改;\n勞煩檢查吖雙重或壞嗰重定向鏈接。\n倷有責任確保全部鏈接會連到指正嗰頁面。\n\n注意如果新頁面早就有嗰話,頁面'''伓會'''搬過去,要不新頁面就系冇內容或系重定向頁,也冇修訂歷史。\n啖就系話必要時倷能等換到新頁面之後再又回到舊嗰頁面,跟到倷也覆蓋不正目前頁面。\n\n'''警告!'''\n對一隻訪問得多嗰頁面啖會系一隻重要同關鍵嗰改動;\n請扤之前了解正佢啖可能嗰後果。",
        "movepagetalktext": "相關嗰討論頁會自動同箇頁一齊搬走,'''除非''':\n*新頁面有嘞隻有內容嗰討論頁,或\n*倷伓選下底嗰選擇方塊。\n噉倷就非要手工移動或合併頁面。",
-       "movearticle": "換動頁面:",
        "movenologintext": "倷要係登記用戶接到[[Special:UserLogin|登入]]後才移動得正頁面。",
        "movenotallowed": "倷到{{SITENAME}}冇權移動頁面。",
        "newtitle": "新標題:",
        "movelogpagetext": "下底係移動哩嗰頁面列表:",
        "movereason": "原因:",
        "revertmove": "舞還原",
-       "delete_and_move": "刪除跟到移動",
        "delete_and_move_text": "==需要刪除==\n\n目標文章\"[[:$1]]\"存在嘞。為到移動佢,倷要刪卟舊頁面?",
        "delete_and_move_confirm": "係嗰,刪卟箇頁",
        "delete_and_move_reason": "為到移動刪卟佢",
index 8364baa..1bb1745 100644 (file)
        "myprivateinfoprotected": "Chan eil cead agad am fiosrachadh prìobhaideach agad a dheasachadh.",
        "mypreferencesprotected": "Chan eil cead agad na roghainnean agad a dheasachadh.",
        "ns-specialprotected": "Chan ghabh duilleagan sònraichte a dheasachadh.",
-       "titleprotected": "Chaidh an duilleag seo a dhìon o chruthachadh le [[User:$1|$1]].\nSeo am mìneachadh: \"<em>$2</em>\".",
+       "titleprotected": "Chaidh an duilleag seo a dhìon o chruthachadh le [[User:$1|$1]].\nSeo am mìneachadh: <em>$2</em>.",
        "filereadonlyerror": "Cha ghabh am faidhle \"$1\" atharrachadh a chionn 's gu bheil ionad-tasgaidh fhaidhlichean \"$2\" ri leughadh a-mhàin.\nThug an rianaire a ghlais e seachad an t-adhbhar a leanas: \"$3\".",
        "invalidtitle-knownnamespace": "Tiotal mì-dhligheach leis an ainm-spàs \"$2\" agus an teacsa \"$3\"",
        "invalidtitle-unknownnamespace": "Tiotal mì-dhligheach leis an àireamh ainm-spàis $1 agus an teacsa \"$2\"",
        "undo-summary-username-hidden": "Neo-dhèan am mùthadh $1 le cleachdaiche falaichte",
        "cantcreateaccounttitle": "Cha ghabh an cunntas a chruthachadh",
        "cantcreateaccount-text": "Chuir [[User:$3|$3]] bacadh air cruthachadh chunntasan on t-seòladh IP seo (<strong>$1</strong>).\n\nDh'innis $3 gun do rinn {{GENDER:$3|e|i}} seo air sgàth: <em>$2</em>",
-       "cantcreateaccount-range-text": "Chuir [[User:$3|$3]] casg air daoine a tha airson cunntasan a chruthachadh on sheòlaidhean IP taobh a-staigh na rainse '''$1''' agus tha sin a' gabhail a-steach an t-seòlaidh IP agad-sa ('''$4''').\n\nDh'innis $3 gun do {{GENDER:$1|rinn e|rinn i|rinneadh}} seo air sgàth an adhbhair seo: ''$2''",
+       "cantcreateaccount-range-text": "Chuir [[User:$3|$3]] casg air daoine a tha airson cunntasan a chruthachadh on sheòlaidhean IP taobh a-staigh na rainse <strong>$1</strong> agus tha sin a' gabhail a-steach an t-seòlaidh IP agad-sa (<strong>$4</strong>).\n\nDh'innis $3 gun do {{GENDER:$1|rinn e|rinn i|rinneadh}} seo air sgàth an adhbhair seo: <em>$2</em>",
        "viewpagelogs": "Seall logaichean na duilleige seo",
        "nohistory": "Chan eil eachdraidh deasachaidh aig an duilleag seo.",
        "currentrev": "Am mùthadh mu dheireadh",
        "recentchanges-label-bot": "'S e bot a rinn an deasachadh seo",
        "recentchanges-label-unpatrolled": "Cha do chuir freiceadan comharra ris an deasachadh seo fhathast",
        "recentchanges-label-plusminus": "Seo meud atharrachadh na duilleige ann am byte",
-       "recentchanges-legend-heading": "'''Treòir:'''",
+       "recentchanges-legend-heading": "<strong>Treòir:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (faic [[Special:NewPages|liosta nan duilleagan ùra]] cuideachd)",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "rcnotefrom": "Chì thu {{PLURAL:$5|am mùthadh|na mùthaidhean|na mùthaidhean|na mùthaidhean}} o <strong>$3 $4</strong> (gu ruige <strong>$1</strong> dhiubh) gu h-ìosal.",
        "rollbackfailed": "Dh'fhàillig leis an roladh air ais",
        "cantrollback": "Cha ghabh na chaidh a dheasachadh a thilleadh;\nis an deasaiche mu dheireadh an aon ùghdar aig an duilleag seo.",
        "alreadyrolled": "Cha ghabh an deasachadh mu dheireadh air [[:$1]] leis [[User:$2|$2]] ([[User talk:$2|an deasbaireachd]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) a roladh air ais on a rinn cuideigin eile deasachadh no roladh air ais air an duilleag mar-thà.\n\nChaidh an duilleag a dheasachadh an turas mu dheireadh leis [[User:$3|$3]] ([[User talk:$3|an deasbaireachd]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Seo gearr-chunntas an deasachaidh: \"''$1''\".",
+       "editcomment": "Seo gearr-chunntas an deasachaidh: <em>$1</em>.",
        "revertpage": "Deasachaidhean a chaidh a thilleadh leis [[Special:Contributions/$2|$2]] ([[User talk:$2|an deasbaireachd]]) dhan mhùthadh mu dheireadh le [[User:$1|$1]]",
        "revertpage-nouser": "Deasachaidhean a chaidh a thilleadh le cleachdaiche falaichte dhan mhùthadh mu dheireadh le [[User:$1|$1]]",
        "rollback-success": "Na deasachaidhean a chaidh a thilleadh le $1;\nchaidh an tilleadh gun mhùthadh mu dheireadh le $2.",
        "log-description-pagelang": "Seo loga dhe na h-atharraichean air cànanan nan duilleagan.",
        "logentry-pagelang-pagelang": "Dh'atharraich $1 cànan nan duilleagan airson $3 o $4 gu $5.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (an comas)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''à comas''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>à comas</strong>)",
        "mediastatistics": "Stadastaireachd nam meadhanan",
        "mediastatistics-summary": "Stadastaireachd air na seòrsaichean faidhle a chaidh a luchdadh suas. Cha ghabh seo a-steach ach an tionndadh as ùire de gach faidhle. Tha seann-tionndaidhean 's faidhlichean air an sguabadh às 'gan leigeil seachad.",
        "mediastatistics-nfiles": "$1 ($2%)",
index 81c3986..2a211ef 100644 (file)
@@ -21,7 +21,8 @@
                        "Breogan2008",
                        "VaiPolaSombra",
                        "Macofe",
-                       "Banjo"
+                       "Banjo",
+                       "Josep Maria Roca Peña"
                ]
        },
        "tog-underline": "Subliñar as ligazóns:",
        "myprivateinfoprotected": "Non ten os permisos necesarios para editar a súa información privada.",
        "mypreferencesprotected": "Non ten os permisos necesarios para editar as súas preferencias.",
        "ns-specialprotected": "Non se poden editar as páxinas no espazo de nomes \"{{ns:special}}\".",
-       "titleprotected": "Este título foi protexido da creación por [[User:$1|$1]].\nO motivo achegado é ''$2''.",
+       "titleprotected": "Este título foi protexido da creación por [[User:$1|$1]].\nO motivo achegado é <em>$2</em>.",
        "filereadonlyerror": "Non se puido modificar o ficheiro \"$1\" porque o repositorio \"$2\" está en modo de só lectura.\n\nO administrador de sistemas que bloqueou o repositorio achegou este motivo: \"$3\".",
        "invalidtitle-knownnamespace": "Título inválido co espazo de nomes \"$2\" e o texto \"$3\"",
        "invalidtitle-unknownnamespace": "Título inválido cun número de espazo de nomes, $1, descoñecido e o texto \"$2\"",
        "nocookieslogin": "{{SITENAME}} usa cookies para rexistrar os usuarios.\nVostede ten as cookies deshabilitadas.\nPor favor, habilíteas e inténteo de novo.",
        "nocookiesfornew": "Non se creou a conta de usuario porque non puidemos confirmar a súa orixe.\nAsegúrese de que ten as cookies habilitadas, volva cargar a páxina e inténteo de novo.",
        "noname": "Non especificou un nome de usuario válido.",
-       "loginsuccesstitle": "Accedeu correctamente",
+       "loginsuccesstitle": "Conectado",
        "loginsuccess": "<strong>Accedeu ao sistema de {{SITENAME}} como \"$1\".</strong>",
        "nosuchuser": "Non existe ningún usuario chamado \"$1\".\nOs nomes de usuario diferencian entre maiúsculas e minúsculas.\nVerifique o nome que inseriu ou [[Special:UserLogin/signup|cree unha nova conta]].",
        "nosuchusershort": "Non existe ningún usuario chamado \"$1\".\nVerifique o nome que inseriu.",
        "createaccount-title": "Creación dunha conta para {{SITENAME}}",
        "createaccount-text": "Alguén creou unha conta chamada \"$2\" para o seu enderezo de correo electrónico en {{SITENAME}} ($4), e con contrasinal \"$3\".\nDebe acceder ao sistema e mudar o contrasinal agora.\n\nPode facer caso omiso desta mensaxe se se creou esta conta por erro.",
        "login-throttled": "Fixo demasiados intentos de acceder ao sistema.\nPor favor, agarde $1 antes de probar outra vez.",
-       "login-abort-generic": "Acceso ao sistema incorrecto; abortado",
+       "login-abort-generic": "Fallou o inicio de sesión - Cancelado",
        "login-migrated-generic": "A súa conta foi migrada e o seu nome de usuario xa non existe neste wiki.",
        "loginlanguagelabel": "Lingua: $1",
        "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.",
        "newpassword": "Contrasinal novo:",
        "retypenew": "Insira outra vez o novo contrasinal:",
        "resetpass_submit": "Establecer o contrasinal e acceder ao sistema",
-       "changepassword-success": "O seu contrasinal modificouse correctamente!",
+       "changepassword-success": "O seu contrasinal foi modificado!",
        "changepassword-throttled": "Fixo demasiados intentos de acceder ao sistema.\nPor favor, agarde $1 antes de probar outra vez.",
        "botpasswords": "Contrasinais de Bot",
        "botpasswords-summary": "Os <em>contrasinais de Bot</em> permiten acceder a unha conta de usuario por medio da API sen usar as crecenciais de acceso da conta principal. Os dereitos de usuario dispoñibles cando se accede ao sistema cun contrasinal de bot poden estar restrinxidos.",
        "botpasswords-insert-failed": "Erro ao engadir o nome de bot \"$1\". Revise se xa foi engadido previamente.",
        "botpasswords-update-failed": "Erro ao actualizar o nome de bot \"$1\". Revise se foi borrado.",
        "botpasswords-created-title": "Contrasinal de bot creado",
-       "botpasswords-created-body": "O contrasinal de bot \"$1\" creouse con éxito.",
+       "botpasswords-created-body": "Creouse o contrasinal para o bot de nome \"$1\" do usuario \"$2\".",
        "botpasswords-updated-title": "Contrasinal de bot actualizado",
-       "botpasswords-updated-body": "O contrasinal de bot \"$1\" actualizouse con éxito.",
+       "botpasswords-updated-body": "O contrasinal de bot do bot de nome \"$1\" do usuario \"$2\" foi actualizado.",
        "botpasswords-deleted-title": "Contrasinal de bot borrado",
-       "botpasswords-deleted-body": "O contrasinal de bot \"$1\" foi borrado.",
+       "botpasswords-deleted-body": "O contrasinal de bot do bot de nome \"$1\" do usuario \"$2\" foi borrado.",
        "botpasswords-newpassword": "O novo contrasinal para acceder con strong>$1</strong> é <strong>$2</strong>. <em>Por favor, rexistra isto para referencia futura.</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider non está dispoñible.",
        "botpasswords-restriction-failed": "Restricións de contrasinal de bots evitaron esta conexión.",
        "newarticle": "(Novo)",
        "newarticletext": "Seguiu unha ligazón a unha páxina que aínda non existe.\nPara crear a páxina, comece a escribir na caixa inferior (consulte a [$1 páxina de axuda] para obter máis información).\nSe chegou aquí por erro, simplemente prema no botón '''atrás''' do seu navegador.",
        "anontalkpagetext": "----''Esta é a páxina de conversa dun usuario anónimo que aínda non creou unha conta ou que non a usa. Polo tanto, empregamos o enderezo IP para a súa identificación. Este enderezo IP pódeno compartir varios usuarios distintos. Se pensa que foron dirixidos contra a súa persoa comentarios inadecuados, por favor, [[Special:UserLogin/signup|cree unha conta]] ou [[Special:UserLogin|acceda ao sistema]] para evitar futuras confusións con outros usuarios anónimos.''",
-       "noarticletext": "Actualmente non hai ningún texto nesta páxina.\nPode [[Special:Search/{{PAGENAME}}|procurar polo título desta páxina]] noutras páxinas,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ollar os rexistros relacionados]\nou [{{fullurl:{{FULLPAGENAME}}|action=edit}} editar a páxina]</span>.",
+       "noarticletext": "Actualmente non hai ningún texto nesta páxina.\nPode [[Special:Search/{{PAGENAME}}|procurar polo título desta páxina]] noutras páxinas,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ollar os rexistros relacionados]\nou [{{fullurl:{{FULLPAGENAME}}|action=edit}} crear a páxina]</span>.",
        "noarticletext-nopermission": "Actualmente non hai ningún texto nesta páxina.\nPode [[Special:Search/{{PAGENAME}}|procurar polo título desta páxina]] noutras páxinas ou <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ollar os rexistros relacionados]</span>, pero non ten os permisos necesarios para crear esta páxina.",
        "missing-revision": "A revisión nº$1 da páxina chamada \"{{FULLPAGENAME}}\" non existe.\n\nA miúdo, isto está provocado por seguir unha ligazón de historial obsoleta cara a unha páxina que foi borrada.\nO [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rexistro de borrados] contén máis detalles.",
        "userpage-userdoesnotexist": "A conta de usuario \"$1\" non está rexistrada.\nComprobe se desexa crear/editar esta páxina.",
        "undo-summary-username-hidden": "Desfíxose a edición $1 dun usuario agochado",
        "cantcreateaccounttitle": "Non pode crear unha conta de usuario",
        "cantcreateaccount-text": "A creación de contas desde este enderezo IP ('''$1''') foi bloqueada por [[User:$3|$3]].\n\nA razón dada por $3 foi ''$2''",
-       "cantcreateaccount-range-text": "O usuario [[User:$3|$3]] bloqueou a creación de contas desde enderezos IP no rango '''$1''', no que se inclúe o seu enderezo IP ('''$4''').\n\nA razón que deu $3 foi ''$2''.",
+       "cantcreateaccount-range-text": "O usuario [[User:$3|$3]] bloqueou a creación de contas desde enderezos IP no rango <strong>$1</strong>, no que se inclúe o seu enderezo IP (<strong>$4</strong>).\n\nA razón que deu $3 foi <em>$2</em>.",
        "viewpagelogs": "Ver os rexistros desta páxina",
        "nohistory": "Esta páxina non posúe ningún historial de edicións.",
        "currentrev": "Revisión actual",
        "revdelete-unsuppress": "Retirar as restricións sobre as revisións restauradas",
        "revdelete-log": "Motivo:",
        "revdelete-submit": "Aplicar {{PLURAL:$1|á revisión seleccionada|ás revisións seleccionadas}}",
-       "revdelete-success": "'''Actualizouse sen problemas a visibilidade da revisión.'''",
+       "revdelete-success": "Actualizouse a visibilidade da revisión.",
        "revdelete-failure": "'''Non se puido actualizar a visibilidade da revisión:'''\n$1",
-       "logdelete-success": "'''Configurouse sen problemas a visibilidade do rexistro.'''",
+       "logdelete-success": "Configurouse a visibilidade do rexistro.",
        "logdelete-failure": "'''A visibilidade do rexistro non pode ser fixada:'''\n$1",
        "revdel-restore": "cambiar a visibilidade",
        "pagehist": "Historial da páxina",
        "userrights-changeable-col": "Os grupos que pode cambiar",
        "userrights-unchangeable-col": "Os grupos que non pode cambiar",
        "userrights-conflict": "Hai un conflito na modificación dos dereitos de usuario! Por favor, revíseo e confirme os seus cambios.",
-       "userrights-removed-self": "Retirou correctamente os seus propios dereitos. Polo tanto, xa non ten acceso a esta páxina.",
+       "userrights-removed-self": "Retirou os seus propios dereitos. Polo tanto, xa non ten acceso a esta páxina.",
        "group": "Grupo:",
        "group-user": "Usuarios",
        "group-autoconfirmed": "Usuarios autoconfirmados",
        "recentchanges-label-bot": "Esta edición foi realizada por un bot",
        "recentchanges-label-unpatrolled": "Esta edición aínda non foi comprobada",
        "recentchanges-label-plusminus": "O tamaño da páxina variou este número de bytes",
-       "recentchanges-legend-heading": "'''Lenda:'''",
+       "recentchanges-legend-heading": "<strong>Lenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (véxase tamén a [[Special:NewPages|lista de páxinas novas]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Mostrar",
        "recentchangeslinked-page": "Nome da páxina:",
        "recentchangeslinked-to": "Mostrar os cambios relacionados das páxinas que ligan coa dada",
        "recentchanges-page-added-to-category": "\"[[:$1]]\" engadiuse á categoría",
-       "recentchanges-page-added-to-category-bundled": "\"[[:$1]]\" e {{PLURAL:$2|unha páxina|$2 páxinas}} engadíronse á categoría",
+       "recentchanges-page-added-to-category-bundled": "\"[[:$1]]\" e [[Special:WhatLinksHere/$1|{{PLURAL:$2|unha páxina|$2 páxinas}}]] engadíronse á categoría",
        "recentchanges-page-removed-from-category": "\"[[:$1]]\" eliminouse da categoría",
-       "recentchanges-page-removed-from-category-bundled": "\"[[:$1]]\" e {{PLURAL:$2|unha páxina|$2 páxinas}} elimináronse da categoría",
+       "recentchanges-page-removed-from-category-bundled": "\"[[:$1]]\" e [[Special:WhatLinksHere/$1|{{PLURAL:$2|unha páxina|$2 páxinas}}]] elimináronse da categoría",
        "autochange-username": "Cambio automático de MediaWiki",
        "upload": "Subir un ficheiro",
        "uploadbtn": "Subir un ficheiro",
        "backend-fail-read": "Non se puido ler o ficheiro \"$1\".",
        "backend-fail-create": "Non se puido escribir o ficheiro \"$1\".",
        "backend-fail-maxsize": "Non se puido escribir o ficheiro \"$1\" porque {{PLURAL:$2|é de máis de $2 byte|supera os $2 bytes}}.",
-       "backend-fail-readonly": "Nestes intres, o sistema de almacenamento \"$1\" está en modo de só lectura. A razón dada é: \"$2\"",
+       "backend-fail-readonly": "Nestes intres, o sistema de almacenamento \"$1\" está en modo de só lectura. A razón dada é: <em>$2</em>",
        "backend-fail-synced": "O ficheiro \"$1\" está nun estado inconsistente dentro do sistema de almacenamento interno",
        "backend-fail-connect": "Non se puido conectar co sistema de almacenamento \"$1\".",
        "backend-fail-internal": "Houbo un erro descoñecido no sistema de almacenamento \"$1\".",
        "uploadstash-summary": "Esta páxina proporciona acceso a ficheiros que xa están cargados (ou en proceso de carga), pero que aínda non están publicados no wiki. Estes ficheiros non son visibles para ninguén, agás para o usuario que os cargou.",
        "uploadstash-clear": "Borrar os ficheros agochados",
        "uploadstash-nofiles": "Non ten ningún ficheiro agochado.",
-       "uploadstash-badtoken": "A acción non se puido completar, seica porque caducou a información de acceso. Inténteo de novo.",
+       "uploadstash-badtoken": "A acción fallou, probablemente porque caducou a información de acceso. Por favor, inténteo de novo.",
        "uploadstash-errclear": "Fallou o borrado de ficheiros.",
        "uploadstash-refresh": "Actualizar a lista de ficheiros",
        "invalid-chunk-offset": "Desprazamento inválido do fragmento",
        "delete-toobig": "Esta páxina conta cun historial longo, de máis {{PLURAL:$1|dunha revisión|de $1 revisións}}.\nLimitouse a eliminación destas páxinas para previr problemas de funcionamento accidentais en {{SITENAME}}.",
        "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}}.\nAo eliminala pódense provocar problemas de funcionamento nas operacións da base de datos de {{SITENAME}};\nproceda con coidado.",
        "deleteprotected": "Non pode borrar esta páxina porque está protexida.",
-       "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.",
+       "deleting-backlinks-warning": "<strong>Atención:</strong>[[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": "Reverter as edicións",
        "rollbacklink": "reverter",
        "rollbacklinkcount": "reverter $1 {{PLURAL:$1|edición|edicións}}",
        "rollbackfailed": "Houbo un erro ao reverter as edicións",
        "cantrollback": "Non se pode desfacer a edición; o último colaborador é o único autor desta páxina.",
        "alreadyrolled": "Non se pode desfacer a edición en \"[[:$1]]\" feita por [[User:$2|$2]] ([[User talk:$2|conversa]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); alguén máis editou ou desfixo os cambios desta páxina.\n\nA última edición fíxoa [[User:$3|$3]] ([[User talk:$3|conversa]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "O resumo de edición foi: \"''$1''\".",
+       "editcomment": "O resumo de edición foi: <em>$1</em>.",
        "revertpage": "Desfixéronse as edicións de [[Special:Contributions/$2|$2]] ([[User talk:$2|conversa]]); cambiado á última versión feita por [[User:$1|$1]]",
        "revertpage-nouser": "Desfixéronse as edicións dun usuario agochado; cambiado á última versión feita por {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Desfixéronse as edicións de $1;\nvolveuse á última edición, feita por $2.",
        "changecontentmodel-title-label": "Título da páxina",
        "changecontentmodel-model-label": "Novo modelo de contido",
        "changecontentmodel-reason-label": "Motivo:",
+       "changecontentmodel-submit": "Cambiar",
        "changecontentmodel-success-title": "O modelo de contido foi modificado",
        "changecontentmodel-success-text": "O tipo de contido de [[:$1]] foi modificado.",
        "changecontentmodel-cannot-convert": "O contido en [[:$1]] non pode converterse ó tipo de $2.",
        "changecontentmodel-nodirectediting": "O modelo de contido $1 non permite a modificación directa",
        "log-name-contentmodel": "Rexistro de cambios de modelo de contido",
        "log-description-contentmodel": "Eventos relacinados cos modelos de contido dunha páxina",
+       "logentry-contentmodel-new": "$1 {{GENDER:$2|creou}} a páxina $3 usando un modelo de contido non predeterminado \"$5\"",
        "logentry-contentmodel-change": "$1 {{GENDER:$2|cambiou}} o modelo de contido da páxina $3 de \"$4\" a \"$5\"",
        "logentry-contentmodel-change-revertlink": "reverter",
        "logentry-contentmodel-change-revert": "reverter",
        "tags-delete-not-allowed": "As etiquetas definidas por unha extensión non se poden borrar, agás que a extensión específica o permita.",
        "tags-delete-not-found": "A páxina \"$1\" non existe.",
        "tags-delete-too-many-uses": "A etiqueta \"$1\" aplícase a máis de $2 {{PLURAL:$2|revisión|revisións}}; isto significa que non se pode borrar.",
-       "tags-delete-warnings-after-delete": "A etiqueta \"$1\" borrouse correctamente; con todo, {{PLURAL:$2|atopouse o seguinte erro|atopáronse os seguintes erros}}:",
+       "tags-delete-warnings-after-delete": "A etiqueta \"$1\" borrouse; con todo, {{PLURAL:$2|atopouse o seguinte aviso|atopáronse os seguintes avisos}}:",
        "tags-activate-title": "Activar unha etiqueta",
        "tags-activate-question": "Está a piques de activar a etiqueta\"$1\".",
        "tags-activate-reason": "Motivo:",
        "tags-edit-revision-legend": "Engadir ou quitar etiquetas de {{PLURAL:$1|esta revisión|todas as $1 revisións}}",
        "tags-edit-logentry-legend": "Engadir ou quitar etiquetas de {{PLURAL:$1|esta entrada do rexistro|todas as $1 entradas do rexistro}}",
        "tags-edit-existing-tags": "Etiquetas existentes:",
-       "tags-edit-existing-tags-none": "''Ningunha''",
+       "tags-edit-existing-tags-none": "<em>Ningunha</em>",
        "tags-edit-new-tags": "Novas etiquetas:",
        "tags-edit-add": "Engadir estas etiquetas:",
        "tags-edit-remove": "Eliminar estas etiquetas:",
        "tags-edit-reason": "Motivo:",
        "tags-edit-revision-submit": "Aplicar os cambios a {{PLURAL:$1|esta revisión|$1 revisións}}",
        "tags-edit-logentry-submit": "Aplicar os cambios a {{PLURAL:$1|esta entrada do rexistro|$1 entradas do rexistro}}",
-       "tags-edit-success": "Os cambios aplicáronse con éxito.",
+       "tags-edit-success": "Aplicáronse os cambios.",
        "tags-edit-failure": "Non se puideron aplicar os cambios:\n$1",
        "tags-edit-nooldid-title": "Revisión inválida",
        "tags-edit-nooldid-text": "Non indicou a revisión sobre a que realizar esta función, ou a revisión especificada non existe.",
        "default-skin-not-found": "Ups! O aspecto predeterminado do wiki, definido en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, non está dispoñíbel.\n\nA súa instalación parece incluír {{PLURAL:$4|o seguinte aspecto|os seguintes aspectos}}. Lea o [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual de configuración dos aspectos] para obter información sobre como {{PLURAL:$4|activalo|activalos}} e escoller o predeterminado.\n\n$2\n\n; Se acaba de instalar MediaWiki:\n: Probablemente instalou MediaWiki a partir de Git, ou directamente a partir do código fonte mediante algún outro método. En tal caso, este problema é normal. Probe a instalar algúns aspectos do [https://www.mediawiki.org/wiki/Category:All_skins cartafol de aspectos de mediawiki.org]. Para instalar aspectos, siga calquera destes pasos:\n:* Descargue o [https://www.mediawiki.org/wiki/Download arquivo do instalador], que inclúe varios aspectos e complementos. Pode copiar e pegar o cartafol <code>skins/</code> que atopará no arquivo.\n:* Descargue arquivos de aspectos individuais de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Usando Git para descargar aspectos].\n: Isto non debería interferir co seu repositorio Git se é vostede un desenvolvedor de MediaWiki.\n\n; Se acaba de anovar MediaWiki:\n: MediaWiki 1.24 e versións posteriores xa non activan aspectos de maneira automática (lea o [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual de descubrimento automático de aspectos]). Pode pegar {{PLURAL:$5|a seguinte liña|as seguintes liñas}} no seu ficheiro <code>LocalSettings.php</code> para activar {{PLURAL:$5|o|todos os}} {{PLURAL:$5|aspecto instalado|aspectos instalados}} actualmente:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Se acaba de modificar <code>LocalSettings.php</code>:\n: Asegúrese de que os nomes dos aspectos están escritos correctamente.",
        "default-skin-not-found-no-skins": "Ups! O aspecto predeterminado do wiki, definido en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, non está dispoñíbel.\n\nNon ten aspectos instalados.\n\n; Se acaba de instalar MediaWiki:\n: Probablemente instalou MediaWiki a partir de Git, ou directamente a partir do código fonte mediante algún outro método. En tal caso, este problema é normal. Probe a instalar algúns aspectos do [https://www.mediawiki.org/wiki/Category:All_skins cartafol de aspectos de mediawiki.org]. Para instalar aspectos, siga calquera destes pasos:\n:* Descargue o [https://www.mediawiki.org/wiki/Download arquivo do instalador], que inclúe varios aspectos e complementos. Pode copiar e pegar o cartafol <code>skins/</code> que atopará no arquivo.\n:* Descargue arquivos de aspectos individuais de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Use Git para descargar aspectos individuais].\n: Isto non debería interferir co seu repositorio Git se é vostede un desenvolvedor de MediaWiki. Lea o [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual de configuración de aspectos] para obter información sobre como activar aspectos e escoller o aspecto predeterminado.",
        "default-skin-not-found-row-enabled": "* <code>$1</code>/$2 (activada)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code>/$2 ('''desactivada''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code>/$2 (<strong>desactivada</strong>)",
        "mediastatistics": "Estatísticas do contido multimedia",
        "mediastatistics-summary": "Estatísticas sobre os tipos de ficheiros enviados. Isto inclúe unicamente a última versión de cada ficheiro. As versións vellas ou borradas dos ficheiros quedan excluídas.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
index 832a2c6..b48844d 100644 (file)
                        "Supriya kankumbikar",
                        "Vaishali Parab",
                        "The Discoverer",
-                       "Cliffa fernandes"
+                       "Cliffa fernandes",
+                       "Rxy"
                ]
        },
        "tog-hideminor": "हालींच बदल केल्ल्यांतले बारीक संपादन लिपय",
        "tog-numberheadings": "माथाळे स्वंय क्रमांकित कर",
        "tog-showtoolbar": "संपादन उपकरणाची पट्टी दाखय",
        "tog-editondblclick": "दोट्टी क्लिकाचेर पानां संपादीत कर",
-       "tog-watchdefault": "हाà¤\82वà¥\87à¤\82 à¤¸à¤\82पादà¥\80त à¤\95à¥\87लà¥\8dलà¥\80à¤\82 à¤ªà¤¾à¤¨à¤¾à¤\82 à¤\86नà¥\80 à¤«à¤¾à¤¯à¤² à¤®à¥\8dहà¤\9cà¥\87 à¤§à¥\8dयानसà¥\82à¤\9aीक जोड",
+       "tog-watchdefault": "हाà¤\82वà¥\87à¤\82 à¤¸à¤\82पादà¥\80त à¤\95à¥\87लà¥\8dलà¥\80à¤\82 à¤ªà¤¾à¤¨à¤¾à¤\82 à¤\86नà¥\80 à¤«à¤¾à¤¯à¤² à¤®à¥\8dहà¤\9cà¥\87 à¤¸à¤¾à¤¦à¥\81रवळà¥\87रीक जोड",
        "tog-previewontop": "संपादन पेटीच्या मुखार प्रीव्यु दाखय",
        "tog-previewonfirst": "पयल्याच संपादनाचेर पुर्वनियाळ दाखय",
-       "tog-enotifwatchlistpages": "मà¥\8dहà¤\9cà¥\8dया à¤²à¤\95à¥\8dषवळेरेंतलें पान वा फायल बदल्ली जाल्यार म्हाका इमेल करात",
+       "tog-enotifwatchlistpages": "मà¥\8dहà¤\9cà¥\8dया à¤¸à¤¾à¤¦à¥\81रवळेरेंतलें पान वा फायल बदल्ली जाल्यार म्हाका इमेल करात",
        "tog-shownumberswatching": "ध्यान दवरपी वांगड्यांची संख्या दाखय",
        "tog-oldsig": "सद्याची निशाणी",
-       "tog-uselivepreview": "लायव à¤ªà¥\81रà¥\8dवनियाळाà¤\9aà¥\8b à¤\89पà¥\87à¤\97 à¤\95र",
-       "tog-watchlisthideown": "धà¥\8dयानसà¥\81à¤\9aीतलें म्हजे संपादन लिपय",
+       "tog-uselivepreview": "लायव à¤ªà¥\81रà¥\8dवनियाळाà¤\9aà¥\8b à¤µà¤¾à¤ªर",
+       "tog-watchlisthideown": "सादà¥\81रवळà¥\87रीतलें म्हजे संपादन लिपय",
        "tog-watchlisthidebots": "ध्यानसुचीतले रोबोट संपादन लिपय",
-       "tog-watchlisthideminor": "धà¥\8dयानसà¥\81à¤\9aीतले ल्हान संपादन लिपय",
+       "tog-watchlisthideminor": "सादà¥\81रवळà¥\87रीतले ल्हान संपादन लिपय",
        "tog-showhiddencats": "लिपोवन दवरिल्ले विभाग दाखय",
        "underline-always": "सदा (केधन्नय) (केन्नय)",
        "underline-never": "केधन्नयना (केन्नना)",
        "and": "&#32;आनीक",
        "qbfind": "सोदात",
        "qbbrowse": "ब्राउज",
-       "qbedit": "सà¤\82सà¥\8dà¤\95रण",
+       "qbedit": "बदल",
        "qbpageoptions": "हें पान",
        "qbmyoptions": "म्हजी पानां",
        "faq": "परत परत विचारिल्ले प्रस्न",
        "errorpagetitle": "चूक",
        "returnto": "$1 चेर परत येयात.",
        "tagline": "{{SITENAME}} कडल्यान",
-       "help": "मà¤\9cत",
+       "help": "à¤\86दार",
        "search": "सोद",
        "searchbutton": "सोद",
        "go": "वचात",
        "print": "छाप",
        "view": "पळय",
        "view-foreign": " $1 चेर पळयात",
-       "edit": "सà¤\82पादन",
+       "edit": "बदल",
        "edit-local": "थळाव्या संपादनाचें वर्णन",
        "create": "निर्माण कर",
        "create-local": "थळावे वर्णन जोडात",
        "newpage": "नवें पान",
        "talkpage": "ह्या पानाचेर चर्चा करात",
        "talkpagelinktext": "चर्चा",
-       "specialpage": "à¤\96ाशà¥\87लà¥\87à¤\82 पान",
+       "specialpage": "विशà¥\87श पान",
        "personaltools": "खाजगी साधनां",
        "articlepage": "मजकूर पान पळयात",
        "talk": "भासाभास",
        "mediawikipage": "संदेशाचें पान पळयात",
        "templatepage": "टेंपलॅट पान पळयात",
        "viewhelppage": "आदार दिवपी पान पळयात",
-       "categorypage": "शà¥\8dरà¥\87णà¥\80à¤\82à¤\9aà¥\87à¤\82 à¤ªà¤¾à¤¨ à¤ªà¤³यात",
+       "categorypage": "वरà¥\8dà¤\97ाà¤\82à¤\9aà¥\87 à¤ªà¤¾à¤¨ à¤ªà¤³à¥\87यात",
        "viewtalkpage": "चर्चा पळय",
        "otherlanguages": "हेर भासांनी",
        "redirectedfrom": "($1 सून पुनर्निर्देशित)",
        "redirectpagesub": "पान परतून निर्देशीत करचें",
        "redirectto": "हांगां पुनर्निर्देशित:",
-       "lastmodifiedat": " ह्या पानांत निमाणो बदल,$1 वेर $2 वेळार केल्लो",
+       "lastmodifiedat": "ह्या पानांत निमाणो बदल,$1 वेर $2 वेळार केल्लो",
        "protectedpage": "राखून दवरिल्लें पान",
        "jumpto": "हुपून वचात:",
        "jumptonavigation": "दिशा-नियंत्रण",
        "disclaimers": "न्हयकारणी",
        "disclaimerpage": "Project:सामान्य न्हयकारणी",
        "edithelp": "संपादकीय आदार",
-       "helppage-top-gethelp": "मà¤\9cत कर",
+       "helppage-top-gethelp": "à¤\86दार कर",
        "mainpage": "मुखेल पान",
        "mainpage-description": "मुखेल पान",
        "portal": "समुदाईक प्रवेस-द्वार",
        "ok": "बरें",
        "retrievedfrom": "\"$1\" चे कडल्यान परतून मेळयलें",
        "youhavenewmessagesmulti": "$1 चेर तुका नवो संदेश आसा",
-       "editsection": "सà¤\82सà¥\8dà¤\95रण",
-       "editold": "सà¤\82सà¥\8dà¤\95रण",
+       "editsection": "बदल",
+       "editold": "बदल",
        "viewsourceold": "उगम पळेयात",
        "editlink": "बदल",
        "viewsourcelink": "उगम पळयात",
-       "editsectionhint": "विभाà¤\97 à¤¸à¤\82सà¥\8dà¤\95रण: $1",
+       "editsectionhint": "विभाà¤\97 à¤¸à¤\82पादन: $1",
        "toc": "विशय सुची",
        "showtoc": "दाखयात",
        "hidetoc": "लिपयात",
        "sort-descending": "देवत्या क्रमाचेर क्रमबध्द कर",
        "sort-ascending": "चडत्या क्रमाचेर क्रमबध्द कर",
        "nstab-main": "पान",
-       "nstab-user": "à¤\89पà¥\87à¤\97 à¤\95रà¥\8dतà¥\8dयाà¤\9aà¥\87à¤\82 पान",
-       "nstab-media": "मिडिया पान",
-       "nstab-special": "à¤\96ाशà¥\87लà¥\87à¤\82 पान",
+       "nstab-user": "वापरपà¥\80 पान",
+       "nstab-media": "माधà¥\8dयमाà¤\9aà¥\87à¤\82 पान",
+       "nstab-special": "विशà¥\87श पान",
        "nstab-project": "प्रकल्पाचें पान",
        "nstab-image": "फायल",
        "nstab-mediawiki": "संदेश",
        "nstab-help": "आदाराचें पान",
        "nstab-category": "वर्ग",
        "nosuchaction": "असले तरेचे कार्य ना",
-       "nosuchspecialpage": "à¤\85सलà¥\87 à¤\95ाà¤\82यà¤\9a à¤\96ाशà¥\87लà¥\87à¤\82 पान ना",
+       "nosuchspecialpage": "à¤\85सलà¥\87 à¤\95ाà¤\82यà¤\9a à¤µà¤¿à¤¶à¥\87श पान ना",
        "error": "चूक",
        "databaseerror": "डॅटाबॅज त्रुटी",
        "databaseerror-textcl": "डॅटाबेज विरोध त्रुटी आयिल्ली आसा",
        "image_tip": "अंत: स्थापीत फायल",
        "media_tip": "फायलीची जोडणी",
        "sig_tip": "वेळ-छाप सयत तुमची निशाणी",
-       "hr_tip": "à¤\86डवà¥\80 à¤µà¤³ (à¤\89णà¥\8b à¤\89पà¥\87à¤\97 à¤\95रचो)",
+       "hr_tip": "à¤\86डवà¥\80 à¤µà¤³ (à¤\89णà¥\8b à¤µà¤¾à¤ªरचो)",
        "summary": "आपरोस:",
        "subject": "विशय/माथाळो",
-       "minoredit": "हà¥\87à¤\82 à¤¦à¤¾à¤\95à¤\9fà¥\87à¤\82 à¤¸à¤\82सà¥\8dà¤\95रण",
+       "minoredit": "हà¥\87à¤\82 à¤¦à¤¾à¤\95à¤\9fà¥\87à¤\82 à¤¸à¤\82पादन",
        "watchthis": "हें पानार नदर दवरात",
        "savearticle": "पान सांभाळ",
        "preview": "पूर्वनियाळ",
        "loginreqlink": "सत्रारंभ करात",
        "accmailtitle": "गुपीत उतर धाडलां",
        "newarticle": "(नवें)",
-       "newarticletext": "à¤\9cà¥\87à¤\82 à¤ªà¤¾à¤¨ à¤\85à¤\9cà¥\82न à¤\85सà¥\8dतितà¥\8dवाà¤\82त à¤¨à¤¾ à¤\85शा à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\87 à¤\9cà¥\8bडणà¥\87 à¤«à¤¾à¤\9fलà¥\8dयान à¤¤à¥\81मà¥\80 à¤\86सात. à¤ªà¤¾à¤¨ à¤°à¤\9aपाà¤\95 à¤¸à¤\95यलà¥\87 à¤\9aà¥\8cà¤\95à¤\9fà¥\80à¤\82त à¤\9fायप à¤\95रपाà¤\95 à¤¸à¥\81रà¥\81 à¤\95रात (à¤\9aड à¤®à¥\8dहायतà¥\80 à¤\96ातà¥\80र [$1 à¤®à¤\9cत पान] पळेयात) जर ह्या पानार तुमी चुकून पावल्यात तर ब्रावजराचो बॅक (<strong>फटीं</strong>) हो बटन दामात",
+       "newarticletext": "à¤\9cà¥\87à¤\82 à¤ªà¤¾à¤¨ à¤\85à¤\9cà¥\82न à¤\85सà¥\8dतितà¥\8dवाà¤\82त à¤¨à¤¾ à¤\85शा à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\87 à¤\9cà¥\8bडणà¥\87 à¤«à¤¾à¤\9fलà¥\8dयान à¤¤à¥\81मà¥\80 à¤\86सात. à¤ªà¤¾à¤¨ à¤°à¤\9aपाà¤\95 à¤¸à¤\95यलà¥\87 à¤\9aà¥\8cà¤\95à¤\9fà¥\80à¤\82त à¤\9fायप à¤\95रपाà¤\95 à¤¸à¥\81रà¥\81 à¤\95रात (à¤\9aड à¤®à¥\8dहायतà¥\80 à¤\96ातà¥\80र [$1 à¤\86दाराà¤\9aà¥\87à¤\82 पान] पळेयात) जर ह्या पानार तुमी चुकून पावल्यात तर ब्रावजराचो बॅक (<strong>फटीं</strong>) हो बटन दामात",
        "noarticletext": "सद्या ह्या पानाचेर कसलीच मजकूर ना. \nतुमी हेर पानांचेर [[Special:Search/{{PAGENAME}}|हो माथाळो]] सोदूं शकतात,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} संबंदीत लॉग सोदूं शकतात],\nवा ह्या पानाक [{{fullurl:{{FULLPAGENAME}}|action=edit}} संपादीत] करूं शकतात</span>।",
        "noarticletext-nopermission": "तुर्ताक ह्या पानाचेर कसलोच मजकूर ना. तुमी हेर पानांचेर [[Special:Search/{{PAGENAME}}|ह्या माथाळ्याचो सोद]] घेवं शकतात,\nवा <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} संबंदीत लॉग सोदूं शकतात]</span>, पूण तुमकां हें पानाची रचणूक करपाची परवानगी ना।",
        "userpage-userdoesnotexist-view": "\"$1\" ह्या वापरप्याच्या खात्याची नोंदणी करूंक ना.",
        "previewnote": "'''ही फकत एक दाखवण हें मतींत दवरात.'''\nतुमचें बदल आडून राखून दवरूंक ना!",
        "editing": "संपादता $1",
        "creating": "$1 रोचता",
-       "editingsection": "(विभाà¤\97) $1 à¤¸à¤\82सà¥\8dà¤\95रण",
+       "editingsection": "(विभाà¤\97) $1 à¤¸à¤\82पादन",
        "yourtext": "तुमचो मजकूर",
        "templatesused": "ह्या पानाचेर {{PLURAL:$1|वापरिल्लें}} प्रारूप",
        "template-protected": "(राखिल्लें)",
        "shown-title": "दर एका पानार {{PLURAL:$1|निकाल}} दाखय",
        "viewprevnext": "पळयात ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "ह्या'''विकीचेर \"[[:$1]]\" ह्या नांवाचें पान आसा .''' {{PLURAL:$2|0=|See also the other search results found.}}",
-       "searchmenu-new": "<strong>ह्या विकीचेर \"[[:$1]]\" हें पान रोचात!<strong> {{PLURAL:$2|सोदून मेळिल्लें पानय पळेयात.|सोदून मेळिल्ले निकाळय पळेयात.}}",
+       "searchmenu-new": "<strong>ह्या विकीचेर \"[[:$1]]\" हें पान रोचात!</strong> {{PLURAL:$2|सोदून मेळिल्लें पानय पळेयात.|सोदून मेळिल्ले निकाळय पळेयात.}}",
        "searchprofile-articles": "मजकूराचीं पानां",
        "searchprofile-images": "भोवमाध्यम",
        "searchprofile-everything": "सगळें",
        "preferences": "पसंती",
        "mypreferences": "पसंती",
        "prefs-edits": "संपादन केल्लें क्रम",
-       "prefs-user-pages": "à¤\89पà¥\87à¤\97 à¤\95रà¥\8dतà¥\8dयाà¤\9aà¥\87à¤\82 पान",
+       "prefs-user-pages": "वापरपà¥\80 पान",
        "prefs-rc": "हालींचे बदल",
-       "prefs-watchlist": "लà¤\95à¥\8dष वळेरी",
+       "prefs-watchlist": "सादà¥\81रवळेरी",
        "youremail": "इमेल",
        "yourrealname": "खरें नांवः",
-       "right-writeapi": "बरà¥\8bवपाà¤\9aà¥\87 API à¤\9aà¥\8b à¤\89पà¥\87à¤\97 à¤\95रात",
-       "newuserlogpage": "à¤\89पà¥\87à¤\97à¤\95रà¥\8dतà¥\8dयà¥\87 रोचनेचे वळेरी",
+       "right-writeapi": "बरà¥\8bवपाà¤\9aà¥\87 API à¤µà¤¾à¤ªरात",
+       "newuserlogpage": "वापरपà¥\80 रोचनेचे वळेरी",
        "action-edit": "हें पान संपादीत कर",
        "nchanges": "$1 {{PLURAL:$1|बदल|बदल}}",
        "enhancedrc-history": "इतिहास",
        "recentchanges-label-bot": "हें संपादन रोबॉटान केला.",
        "recentchanges-label-unpatrolled": "हें संपादन आजून तपासूंक ना",
        "recentchanges-label-plusminus": "ह्या पानाचो आकार इतल्या बाइट्सन बदललो",
-       "recentchanges-legend-heading": "'''कुंजी:'''",
+       "recentchanges-legend-heading": "<strong>कुंजी:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages| नव्या पानांची सुची]] पळयात)",
        "rcnotefrom": "$2 पासून केल्ले बदल सकयल दिल्यात ($1 मेरेन दाखयल्यात)",
        "rclistfrom": "$3 $2 साकून नवें बदल दाखयात",
        "rcshowhidebots": "$1 रोबॉट",
        "rcshowhidebots-show": "दाखयात",
        "rcshowhidebots-hide": "लिपयात",
-       "rcshowhideliu": "$1 à¤\85धिà¤\95à¥\83त à¤¨à¥\8bà¤\82दà¥\80à¤\9aà¥\87 à¤\89पà¥\87à¤\97 à¤\95रà¥\8dतà¥\87",
+       "rcshowhideliu": "$1 à¤\85धिà¤\95à¥\83त à¤¨à¥\8bà¤\82दà¥\80à¤\9aà¥\87 à¤µà¤¾à¤ªà¤°à¤ªà¥\80",
        "rcshowhideliu-hide": "लिपयात",
-       "rcshowhideanons": "$1 à¤¨à¤¿à¤¨à¤¾à¤\82वà¥\80 à¤\89पà¥\87à¤\97 à¤\95रà¥\8dतà¥\87",
+       "rcshowhideanons": "$1 à¤¨à¤¿à¤¨à¤¾à¤\82वà¥\80 à¤µà¤¾à¤ªà¤°à¤ªà¥\80",
        "rcshowhideanons-show": "दाखयात",
        "rcshowhideanons-hide": "लिपयात",
        "rcshowhidepatr-show": "दाखयात",
        "recentchangeslinked": "संबंदित बदल",
        "recentchangeslinked-toolbox": "संबंदीत बदल",
        "recentchangeslinked-title": "\"$1\" च्या संबंदातले बदल",
-       "recentchangeslinked-summary": "खाशेल्या पानां कडल्यान जोडणी मेळिल्ल्या पानांमदीं (वा विशिश्ट वर्गांच्या वांगड्यांमदीं) हालींच केल्ल्या बदलांची ही वळेरी. तुमच्या [[Special:Watchlist|लक्ष वळेरेंतलीं]] पाना '''ठळक''' दाखयल्यात",
+       "recentchangeslinked-summary": "खाशेल्या पानां कडल्यान जोडणी मेळिल्ल्या पानांमदीं (वा विशिश्ट वर्गांच्या वांगड्यांमदीं) हालींच केल्ल्या बदलांची ही वळेरी. [[Special:Watchlist|तुमच्या सादुरवळेरी]] पाना '''ठळक''' दाखयल्यात",
        "recentchangeslinked-page": "पानाचें नांव",
        "recentchangeslinked-to": "ह्या पाना बदला दिल्ल्या पानांक जुळून आशिल्ल्या पानांचे बदल दाखय",
        "upload": "फायल अपलोड करात",
        "imgfile": "फायल",
        "listfiles_date": "तारीख",
        "listfiles_name": "नांव",
-       "listfiles_user": "à¤\89पà¥\87à¤\97à¤\95रà¥\8dतà¥\8b",
+       "listfiles_user": "वापरपà¥\80",
        "listfiles_description": "वर्णन",
        "file-anchor-link": "फायल",
        "filehist": "फायलीचो इतिहास",
        "filehist-datetime": "दिस / वेळ",
        "filehist-thumb": "ल्हान-इमाज़",
        "filehist-thumbtext": " $1मेरेनचे आवृत्ती खातीर ल्हान-इमाज़",
-       "filehist-user": "à¤\89पà¥\87à¤\97à¤\95रà¥\8dतà¥\8b",
+       "filehist-user": "वापरपà¥\80",
        "filehist-dimensions": "परिमाण",
        "filehist-comment": "शेरो",
        "imagelinks": "फायलिचो वापर",
        "statistics": "संख्याशास्त्र",
        "statistics-pages": "पान:",
        "statistics-files": "फायल अपलोड करात",
-       "brokenredirects-edit": "सà¤\82सà¥\8dà¤\95रण",
+       "brokenredirects-edit": "बदल",
        "brokenredirects-delete": "काडून उडयात",
        "nbytes": "$1 {{PLURAL:$1|बाय्ट}}",
        "nmembers": "$1 {{PLURAL:$1|वांगडी}}",
        "listgrouprights-members": "सदस्यांची वळेरी",
        "emailuser": "ह्या वापरप्याक इमेल करात.",
        "emailusername": "वापरप्याचे नांव",
-       "watchlist": "लà¤\95à¥\8dष वळेरी",
-       "mywatchlist": "लà¤\95à¥\8dष वळेरी",
+       "watchlist": "सादà¥\81रवळेरी",
+       "mywatchlist": "सादà¥\81रवळेरी",
        "watchlistfor2": "$1 $2 खातीर",
        "addedwatchtext": "\"[[:$1]]\" आनी हाचे भासाभास पान तुमचें [[Special:Watchlist|सादुरवळेरेक]] जोडलां.",
        "watch": "नदर दवरात",
        "unwatch": "पळोवंक नासलें",
        "watchlist-details": "लक्ष {{PLURAL:$1|$1वळेरींतलें|$1 वळेंरींतली}} {{PLURAL:$1|$1पान|$1 पानां}} उलोवपाची पानां सोडून",
        "wlshowlast": "फाटलें $1 वरांचें $2 दिसांचें  दाखयात",
-       "watchlist-options": "लà¤\95à¥\8dषवळà¥\87à¤\82रींतलो पर्याय",
+       "watchlist-options": "सादà¥\81रवळà¥\87रींतलो पर्याय",
        "delete-legend": "काडून उडयात",
        "actioncomplete": "क्रिया पुराय जाल्या",
        "actionfailed": "क्रिया अपेस जाल्या",
        "changecontentmodel-reason-label": "कारण:",
        "protectlogpage": "सुरक्षितेचें सोत्र",
        "protectedarticle": "राखिल्ले\"[[$1]]\"",
-       "restriction-edit": "सà¤\82सà¥\8dà¤\95रण",
+       "restriction-edit": "बदल",
        "restriction-move": "दुसरेकडे व्हरात",
        "restriction-create": "निर्माण कर",
        "undeletelink": "पळेयात/परत हाडात",
        "namespace_association": "संबंदीत नांवथोळ",
        "tooltip-namespace_association": "चर्चा वा वेंचीक नांवाचें सुवातीक संबंदीत विशयाच्या नांवाची सुवात आस्पावन घेवपाखातीर ह्या बॉक्सांत पळयात",
        "blanknamespace": "(मुखेल)",
-       "contributions": "{{GENDER:$1|à¤\89पà¥\87à¤\97à¤\95रà¥\8dतà¥\8b}} योगदानां",
-       "contributions-title": "$1 à¤\96ातà¥\80र à¤\89पà¥\87à¤\97à¤\95रà¥\8dत्याचीं योगदानां",
+       "contributions": "{{GENDER:$1|वापरपà¥\80}} योगदानां",
+       "contributions-title": "$1 à¤\96ातà¥\80र à¤µà¤¾à¤ªà¤°à¤ª्याचीं योगदानां",
        "mycontris": "योगदान",
        "uctop": "(हालीचें)",
        "month": "ह्या म्हयन्या सावन (आनी आदलें):",
        "sp-contributions-logs": "लॉग",
        "sp-contributions-talk": "उलोवप",
        "sp-contributions-search": "योगदानां सोदात",
-       "sp-contributions-username": "à¤\86यपà¥\80 à¤¨à¤¾à¤®à¥\8b à¤µà¤¾ à¤\89पà¥\87à¤\97à¤\95रà¥\8dत्याचें नांव",
-       "sp-contributions-toponly": "फà¤\95त à¤¸à¤\97ळà¥\8dयाà¤\82त à¤¹à¤¾à¤²à¥\80à¤\82à¤\9aà¥\87 à¤ªà¥\81नरà¥\8dनियाळ à¤\86शिलà¥\8dलà¥\80à¤\82 à¤¸à¤\82सà¥\8dà¤\95रणाà¤\82 दाखयात",
+       "sp-contributions-username": "à¤\86यपà¥\80 à¤¨à¤¾à¤®à¥\8b à¤µà¤¾ à¤µà¤¾à¤ªà¤°à¤ª्याचें नांव",
+       "sp-contributions-toponly": "फà¤\95त à¤¸à¤\97ळà¥\8dयाà¤\82त à¤¹à¤¾à¤²à¥\80à¤\82à¤\9aà¥\87 à¤ªà¥\81नरà¥\8dनियाळ à¤\86शिलà¥\8dलà¥\80à¤\82 à¤¸à¤\82पादन दाखयात",
        "sp-contributions-submit": "सोद",
        "whatlinkshere": "हाका कितें जुळटा",
        "whatlinkshere-title": " \"$1\" हाका जोडणी आशिल्लीं पानां",
        "tooltip-ca-protect": "हें पान राखून दवर",
        "tooltip-ca-delete": "हें पान काडून उडयात",
        "tooltip-ca-move": "दुसरे कडे व्हरात",
-       "tooltip-ca-watch": "तà¥\81मà¤\9aà¥\87 à¤²à¤\95à¥\8dष वळेरेक हें पान जोडात",
+       "tooltip-ca-watch": "तà¥\81मà¤\9aà¥\87 à¤¸à¤¾à¤¦à¥\81रवळेरेक हें पान जोडात",
        "tooltip-ca-unwatch": "हें पान तुमच्या लक्षवळेरींतल्यान काडात",
        "tooltip-search": "{{SITENAME}}चेर सोदात",
        "tooltip-search-go": "ह्याच अचूक नांवाचें पान अस्तित्वांत आसल्यार थंय वचात",
        "tooltip-t-contributions": "ह्या वापरप्याची योगदानाची वळेरी",
        "tooltip-t-emailuser": "ह्या उपेगकर्त्याक इ-मेल धाडात",
        "tooltip-t-upload": "फायली अपलोड करात",
-       "tooltip-t-specialpages": "सà¤\97ळà¥\8dया à¤\96ाशà¥\87लà¥\8dया पानांची वळेरी",
+       "tooltip-t-specialpages": "सà¤\97ळà¥\8dया à¤µà¤¿à¤¶à¥\87श पानांची वळेरी",
        "tooltip-t-print": "ह्या पानाची छापपायोग्य आवृत्ती",
        "tooltip-t-permalink": "ह्या पानाच्या ह्या पुनर्नियाळाकडे सदांकाळ जोडणी",
        "tooltip-ca-nstab-main": "मजकूर पान पळेयात",
        "tooltip-preview": "तुमचे बदल परतून नियाळचे. हें राखून दवरचे पयलीं करचें",
        "tooltip-diff": "लिखीत मजकूरांत तुमी खंयचो बदल केला तो दाखयात",
        "tooltip-compareselectedversions": "ह्या पानाच्या दोन वेंचिल्ल्या पुनर्नियाळां मदलो फरक पळेयात.",
-       "tooltip-watch": "तà¥\81मà¤\9aà¥\8dया à¤²à¤\95à¥\8dषवळेरेंत हें पान जोडात",
-       "tooltip-rollback": "निमाणà¥\8dया à¤¯à¥\8bà¤\97दान à¤\95रपà¥\8dयान à¤¹à¥\8dया à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\87र à¤\95à¥\87लà¥\8dलà¥\87à¤\82 à¤¸à¤\82सà¥\8dà¤\95रण (â\80\8dणाà¤\82) रोलबॅक  (फाटीं घेयात) एकाच क्लीकान मूळ पदार हाडटा",
+       "tooltip-watch": "तà¥\81मà¤\9aà¥\8dया à¤¸à¤¾à¤¦à¥\81रवळेरेंत हें पान जोडात",
+       "tooltip-rollback": "निमाणà¥\8dया à¤¯à¥\8bà¤\97दान à¤\95रपà¥\8dयान à¤¹à¥\8dया à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\87र à¤\95à¥\87लà¥\8dलà¥\87à¤\82 à¤¸à¤\82पादन रोलबॅक  (फाटीं घेयात) एकाच क्लीकान मूळ पदार हाडटा",
        "tooltip-undo": "\"आदलें स्थितीर हाडचें\" ह्या बदलाक परत व्हरुन संपादन स्थितीन झलक रितीन दाखयतात.\nहाचेवरवीं सारांशान आदल्या स्थितीर हाडपाचें कारण बरोवं शकता.",
        "tooltip-summary": "आपरोसाची नोंदणी करात",
        "simpleantispam-label": "एन्टी-स्पैम तपासप.\nहे भरी<strong>नकाय</strong>!",
        "namespacesall": "सगळें",
        "monthsall": "सगळे",
        "watchlisttools-view": "प्रस्तूत बदल पळयात.",
-       "watchlisttools-edit": "लà¤\95à¥\8dष à¤µà¤³à¥\87à¤\82री पळय आनी संपादीत करात",
+       "watchlisttools-edit": "सादà¥\81रवळà¥\87री पळय आनी संपादीत करात",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|उलयात]])",
-       "specialpages": "à¤\96ाशà¥\87लà¥\80à¤\82 पानां",
+       "specialpages": "विशà¥\87श पानां",
        "tag-filter": "[[Special:Tags|कुर्वेचीट]] गाळणो:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|कुरवेचीट|कुरवेचीटी}}]]: $2)",
        "htmlform-title-not-exists": "$1 अस्तित्वांत ना.",
index 4028d1b..d2611fe 100644 (file)
@@ -15,7 +15,7 @@
        "tog-watchdefault": "Hanv bodolta tim panam moji sadurvollerint zod",
        "tog-previewontop": "Sonskoron petie mukhar zolok dakhoi",
        "tog-previewonfirst": "Poileach bodolacher zolok dakhoi",
-       "tog-enotifwatchlistpages": "Mhojea lokxvollerintlem pan vo fail bodol'li zalear mhaka email dhadd",
+       "tog-enotifwatchlistpages": "Mhojea sadurvollerintlem pan vo fail bodol'li zalear mhaka email dhadd",
        "tog-shownumberswatching": "Nodor dovorpi vangdianche sonkhya dakhoi",
        "tog-oldsig": "Sodheachi soy:",
        "tog-uselivepreview": "Boroitastana zolok dahkoi",
        "qbmyoptions": "Mhoji panam",
        "faq": "Porot porot vicharlele prosn",
        "faqpage": "Project:Porot porot vicharlele prosn",
-       "actions": "Karvaio",
+       "actions": "Kornnio",
        "namespaces": "Nanvthollam",
        "variants": "Dusre",
        "navigation-heading": "Dixa-niontron suchi",
        "create-local": "Thollavem vornon zod",
        "editthispage": "Hem pan bodol",
        "create-this-page": "Ho pan roch",
-       "delete": "Vogllai",
+       "delete": "Kadun udoi",
        "deletethispage": "Hem pan kad",
        "undeletethispage": "Hem pan punorsthapit kor",
        "undelete_short": "{{PLURAL:$1|Ek kadun udoil'lo bodol|$1 kadun udoil'le bodlopam}} portun had",
        "newpage": "Novem pan",
        "talkpage": "Hea panachem bhasabhas kor",
        "talkpagelinktext": "Bhasabhas",
-       "specialpage": "Khaxhel pan",
+       "specialpage": "Vixex pan",
        "personaltools": "Khasgi avtam",
        "articlepage": "Vixoi sombondhi pan poloi",
        "talk": "Bhasabhas",
        "portal-url": "Project:Somudaik proves-dar",
        "privacy": "Gupitaiechem dhoronn",
        "privacypage": "Project:Gupitachem dhoronn",
-       "badaccess-group0": "Tumi tillson kel'lem kary korunk tumkam permissanv na.",
-       "badaccess-groups": "Tumi tillson kel'lem kary mat {{PLURAL:$2|the group|one of the groups}}: $1 -ak permissanv asa.",
+       "badaccess-group0": "Tumi tillson kel'lem karya korunk tumkam permissanv na.",
+       "badaccess-groups": "Tumi tillson kel'lem karya mat {{PLURAL:$2|hea zomeache|hantuntle eke zomeache}} vaporpeank porvangi asa: $1.",
        "versionrequired": "MediaWikichem $1 version zai",
        "versionrequiredtext": "Hem pan vaprunk MediaWikichem $1 version zai.\n[[Special:Version|version page]] pan poloea.",
        "ok": "Zait",
        "sort-descending": "Devtea kromacher kromboddh kor",
        "sort-ascending": "Chodtea kromacher kromboddh kor",
        "nstab-main": "Pan",
-       "nstab-user": "Vapuddpeachem pan",
+       "nstab-user": "Vaporpeachem pan",
        "nstab-media": "Madheomachem pan",
-       "nstab-special": "Khaxelem pan",
+       "nstab-special": "Vixex pan",
        "nstab-project": "Prokolpache pan",
        "nstab-image": "Fail",
        "nstab-mediawiki": "Sondex",
        "nstab-category": "Vorg",
        "mainpage-nstab": "Mukhel pan",
        "nosuchaction": "Oslem torechem karya nam",
-       "nosuchspecialpage": "Oslem kaich khashellem pan na",
+       "nosuchspecialpage": "Oslem kaich vixex pan na",
        "error": "Chuk",
        "databaseerror": "Totv-kox chuk",
        "databaseerror-textcl": "Totv-kox (database) sodtana chuk ghodli",
        "databaseerror-query": "Anurodh: $1",
        "databaseerror-error": "Chuk: $1",
-       "missing-article": "Totv-kox (Database) hantun mellunk zai aslem tem mozkur \"$1\" $2 mellunk-nam.\n\nHorxim, oxem ek pornem frk vo eka panachem itihasachem zodd vogllailem, tedna zata.\n\nOxem nhoi zalear, tuka softwer-an chuk sampodlam zait.\nUpkar korun eka [[Special:ListUsers/sysop|karbhari]]chea nodrek hadd, Internet Zago Sodpi (URL) hachi nond gheun.",
+       "missing-article": "Totv-kox (Database) hantun mellunk zai aslem tem mozkur \"$1\" $2 mellunk-nam.\n\nHorxim, oxem ek pornem frk vo eka panachem itihasachem zodd kadun udoilem, tedna zata.\n\nOxem nhoi zalear, tuka softwer-an chuk sampodlam zait.\nUpkar korun eka [[Special:ListUsers/sysop|karbhari]]chea nodrek hadd, Internet Zago Sodpi (URL) hachi nond gheun.",
        "missingarticle-rev": "(uzollnni#: $1)",
        "missingarticle-diff": "(Frk: $1, $2)",
        "badtitle": "Chukichem nanv",
        "badtitletext": "Tuven maglelem panache nanv chukichem, rintem, vo ek sarkem zodunk-naslelem bhase-modlem vo wiki-modlem nanv.\n\nTantun ek vo sabaar okxor asot jenka nanvanim uzar korunk zainan.",
        "viewsource": "Mull polloi",
        "welcomeuser": "Ievkar, $1!",
-       "yourname": "Vapuddpeachem nanv:",
+       "yourname": "Vaporpeachem nanv:",
        "userlogin-yourname": "Vangdiachem nanv",
        "userlogin-yourname-ph": "Tujem 'vangdeachem nanv' boroi",
        "createacct-another-username-ph": "Vapurpeachem nanv boroi",
        "createacct-reason": "Karonn",
        "createacct-reason-ph": "Tum dusrem khatem kiteak rochtai",
        "createacct-submit": "Tujem khatem roch",
-       "createacct-another-submit": "Dusrem khatem roch",
+       "createacct-another-submit": "Khatem roch",
        "createacct-benefit-heading": "{{SITENAME}} tujea bhaxen lokani kel'la",
        "createacct-benefit-body1": "{{PLURAL:$1|bodol|bodlopam}}",
        "createacct-benefit-body2": "{{PLURAL:$1|pan|panam}}",
        "passwordreset-email": "Email potto:",
        "passwordreset-emailelement": "Vapurpeachem nanv: \n$1\n\nTatpurtem gupitutor: \n$2",
        "passwordreset-emailsentemail": "Gupitutor portun tharaipacho email dhadla.",
-       "changeemail": "Email potto bodol",
+       "changeemail": "Email potto bodol vo kad",
        "changeemail-oldemail": "Sodhyacho email potto:",
        "changeemail-newemail": "Novo email potto:",
        "changeemail-none": "(kai na)",
        "accmailtitle": "Gupitutor dhaddlea",
        "newarticle": "(Novem)",
        "newarticletext": "Tuven ek zoddneche patlav kelai, zachem pan azun rochunk na.\nPan rochunk, khallchea chovkottan boroi (anik mahitik [$1 adar pan] polloi).\nTu hangasor chukin pavlai zalear tujea internet browser-achi '''Fatim'' vo '''Back''' butao dab.",
-       "noarticletext": "Sodheak hem pan rinte asa.\nTujean dusrea panani [[Special:Search/{{PAGENAME}}|hea panache nanv sodunk zata]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sombondhi sotrani sodunk zata], vo [{{fullurl:{{FULLPAGENAME}}|action=edit}} hem pan sudharunk zata]</span>.",
+       "noarticletext": "Sodheak hem pan rinte asa.\nTujean dusrea panani [[Special:Search/{{PAGENAME}}|hea panache nanv sodunk zata]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sombondhi sotrani sodunk zata], vo [{{fullurl:{{FULLPAGENAME}}|action=edit}} hem pan rochunk zata]</span>.",
        "noarticletext-nopermission": "Sodheak hem pan rinte asa.\nTujean dusrea panani [[Special:Search/{{PAGENAME}}|hea panache nanv sodunk zata]], vo <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sombondhi sotrani sodunk zata], pun tuka hem pan rochunk porvangi na.",
        "userpage-userdoesnotexist-view": "\"$1\" hea vapurpeachea khateachi nondnni korunk na.",
        "previewnote": "'''Hi fokot ek zholok mhonn ugddas dhor.'''\nTujim bodolpam azun sambhallun dovrunk nant!",
        "template-semiprotected": "(ordhem rakhun dovorlelem)",
        "hiddencategories": "Hem pan {{PLURAL:$1|1 lipoilelea vorgacho vangddi|$1 lipoileleam vorgancho vangddi}}:",
        "permissionserrorstext-withaction": "$2, hem korpak tuka porvangi na, {{PLURAL:$1|hea karnnak lagon|hea karnnank lagun}}:",
-       "recreate-moveddeleted-warn": "'''Xittkavnni: Tum ek pan porot rochtai jem fattim vogllailelem .'''\n\nPanacho sudar korop sarkem zalear dhean di.\nPan vogllavpachem ani sotr halovpachem, sovloti khatir hangasor dilelem asa:",
-       "moveddeleted-notice": "Hem pan vogllailem asa.\nPanachea vogllaonechi ani hallonechi sotr mahiti khatir sokoil sondorba khatir dilea.",
+       "recreate-moveddeleted-warn": "<strong>Xittkavnni: Tum ek pan porot rochtai jem fattim kadun udoilelem.<strong>\n\nPanacho sudar korop sarkem zalear dhean di.\nPan kadoupachem ani halovpachem sotr, sovloti khatir hangasor dilelem asa:",
+       "moveddeleted-notice": "Hem pan kadun udoilelem asa.\nPanachea kadun udounechi ani hallovnechi sotr sondorba khatir sokoil dilea.",
        "content-model-wikitext": "wikimozkur",
        "content-model-text": "Sado mozkur",
        "post-expand-template-inclusion-warning": "'''Chotrai:''' Sacho zoddpacho akar chod vhodlem asa.\nThodde sache zoddchenant",
        "page_last": "akhirchem",
        "histlegend": "Frk nivoddni: Jeo uzollneo tuka comparar korunk zai, tenche fudle ''radio'' butao petoi ani ''Enter'' nazalear khalcho butao dab.<br />\nVivron: <strong>({{int:cur}})</strong> = halinchi uzollnie borobor forok, <strong>({{int:last}})</strong> = adli uzollnie borobor forok, <strong>{{int:minoreditletter}}</strong> = dhaktem bodol.",
        "history-fieldset-title": "Itihas chall",
-       "history-show-deleted": "Fokot vogllailelem",
+       "history-show-deleted": "Fokot kadun udoilelem",
        "histfirst": "sogleavon adhlem",
        "histlast": "sogleavon novem",
        "history-feed-item-nocomment": "$1 hannem $4, $3 hea vellar",
        "shown-title": "Dor eka panar {{PLURAL:$1|porinam}} dakhoi",
        "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) poloi",
        "searchmenu-exists": "'''Hea Wikicher \"[[:$1]]\" nanvanche pan asa.'''",
-       "searchmenu-new": "<strong>\"[[:$1]]\" hem pan hea vikint roch!<strong> {{PLURAL:$2|0=|Tujea sodan mellelem panui polloi.|Tujea sodan mellelem panamui polloi.}}",
+       "searchmenu-new": "<strong>\"[[:$1]]\" hem pan hea vikint roch!</strong> {{PLURAL:$2|0=|Tujea sodan mellelem panui polloi.|Tujea sodan mellelem panamui polloi.}}",
        "searchprofile-articles": "Mozkurachim panam",
        "searchprofile-images": "Bhovmadhiom",
        "searchprofile-everything": "Sogllem",
        "prefs-help-email": "Email potto sokticho na, pun tum gupitutor visroxi zalear gupitutor punorsthapon korunk email pottechi goroz podta.",
        "prefs-help-email-others": "Tujean dusreank tujea vapurpeacho panar vo bhasabhasache panar aslele eke email zodde vorvim tuje xim sompork korunk diunk zata.\nDusre tuje xim sompork kortat tednam tuzo email potto tankam kollchenam.",
        "group-all": "(soglle)",
-       "right-writeapi": "Borovpeache API-cho upeog",
+       "right-writeapi": "Borovpeache API-cho vapor",
        "newuserlogpage": "Vapurpi rochnnechem sotr",
        "action-edit": "hem pan sudar",
        "nchanges": "$1 {{PLURAL:$1|bodlop|bodlopam}}",
        "recentchanges-label-bot": "Hem bodol eka robotan kel'lem",
        "recentchanges-label-unpatrolled": "Hem sudharop azun topasunk nam",
        "recentchanges-label-plusminus": "Hea panacho akar itlea baitani bodol'lo",
-       "recentchanges-legend-heading": "\"Kunji:\"",
+       "recentchanges-legend-heading": "<strong>Kunji:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|nove pananchi suchi]]-ui polloi)",
        "rcnotefrom": "Sokoil <strong>$3, $4<strong> savnsavn {{PLURAL:$5|zalelem bodlop dilam|zalelim bodolpam dileant}} (<strong>$1<strong> meren {{PLURAL:$5|dakhoilam|dakhoileant}}).",
        "rclistfrom": "$3 $2 savn suru zatelim novim bodolpam dakhoi",
        "rcshowhidebots": "$1 robot",
        "rcshowhidebots-show": "Dakhoi",
        "rcshowhidebots-hide": "Lipoi",
-       "rcshowhideliu": "$1 nond zalele vapuddpi",
+       "rcshowhideliu": "$1 nond zalele vaporpi",
        "rcshowhideliu-hide": "Lipoi",
        "rcshowhideanons": "$1 nanv-naslelim vapurpi",
        "rcshowhideanons-show": "Dakhoi",
        "watchthisupload": "Hea faylar dixtt dovor",
        "license": "Porvangi",
        "license-header": "Porvangi",
-       "listfiles-delete": "Kadun udoi",
+       "listfiles-delete": "kadun udoi",
        "imgfile": "fail",
        "listfiles_date": "Tarikh",
        "listfiles_name": "Nanv",
-       "listfiles_user": "Upeogkorto",
+       "listfiles_user": "Vaporpi",
        "listfiles_description": "Vornon",
        "file-anchor-link": "Fail",
        "filehist": "Failicho itihas",
        "filehist-help": "Tea vellar aslelea rupan pollonvk tarikh/vellar click kor",
-       "filehist-deleteone": "Kadun udoi",
+       "filehist-deleteone": "kadun udoi",
        "filehist-revert": "Nimanea avruttik porot vor",
        "filehist-current": "chalont",
        "filehist-datetime": "Tarikh/Vell",
        "statistics-pages": "Panam",
        "statistics-files": "Upload kel'le faili",
        "brokenredirects-edit": "bodol",
-       "brokenredirects-delete": "Kadun udoi",
+       "brokenredirects-delete": "kadun udoi",
        "nbytes": "$1 {{PLURAL:$1|byte|byti}}",
        "nmembers": "$1 {{PLURAL:$1|vangddi}}",
        "prefixindex": "Panam jenche nanvache survatek asa...",
        "booksources": "Pustokachem mull",
        "booksources-search-legend": "Pustokachim mullam sod",
        "booksources-search": "Sod",
-       "speciallogtitlelabel": "Vishoi vo vapurpi:",
+       "speciallogtitlelabel": "Vishoi vo {{ns:user}}:vapurpeachem nanv:",
        "log": "Sotram",
        "allpages": "Sogllim panam",
        "nextpage": "Fuddlem pan ($1)",
        "linksearch-ok": "Sod",
        "linksearch-line": "$1 $2 savn zoddlelem asa",
        "listusers-submit": "Dakhoi",
-       "listgrouprights-members": "(vapuddpeanchi suchi)",
+       "listgrouprights-members": "(vaporpeanchi suchi)",
        "emailuser": "Email dhadd",
        "emailusername": "Vapurpeachem nanv:",
-       "watchlist": "Sadurachi volleri",
-       "mywatchlist": "Sadurachi volleri",
+       "watchlist": "Sadurvolleri",
+       "mywatchlist": "Sadurvolleri",
        "watchlistfor2": "$1 hache khatir $2",
        "addedwatchtext": "\"[[:$1]]\" ani hachem chorchechem pan tujea [[Special:Watchlist|sadurvollerek]] zoddlam.",
        "watch": "Nodor dovor",
        "delete-legend": "Kadun udoi",
        "actioncomplete": "Karvai sompurnn",
        "actionfailed": "Karvai oiesiesvi",
-       "dellogpage": "Vogllaoneche sotr",
+       "dellogpage": "Kadun udouneche sotr",
        "deleteotherreason": "Dusrem/aniki karon:",
        "rollbacklink": "kovoll",
        "rollbacklinkcount": "$1 {{PLURAL:$1|bodol|bodlopam}} kovoll",
        "restriction-edit": "Bodol",
        "restriction-move": "Haloi",
        "restriction-create": "Roch",
-       "undeletelink": "polloi/adlea zagear hadd",
+       "undeletelink": "polloi / porot hadd",
        "undeleteviewlink": "polloi",
        "namespace": "Nanv-tholl",
        "invert": "Nonddni urfattoi",
        "namespace_association": "Sombondhit nanvtholl",
        "tooltip-namespace_association": "Vinchlele nanvthollache sombondhit bhasabhas vo vixoiacho nanvthollakui gheupak hem boks khunnai",
        "blanknamespace": "(Mukhel)",
-       "contributions": "{{GENDER:$1|Vapuddpi}} yogdanam",
-       "contributions-title": "$1 hea vapuddpean kelelim yogdanam",
+       "contributions": "{{GENDER:$1|Vaporpi}} yogdanam",
+       "contributions-title": "$1 hea vaporpean kelelim yogdanam",
        "mycontris": "Yogdanam",
        "anoncontribs": "Yogdanam",
        "contribsub2": "{{GENDER:$3|$1}} hacheo ($2)",
        "sp-contributions-logs": "sotr",
        "sp-contributions-talk": "bhasabhas",
        "sp-contributions-search": "Yogdanam sod",
-       "sp-contributions-username": "Antorzall namo vo vapuddpeachem nanv:",
+       "sp-contributions-username": "Antorzall namo vo vaporpeachem nanv:",
        "sp-contributions-toponly": "Fokot halincheo uzollnneo dakhoi",
        "sp-contributions-submit": "Sod",
        "whatlinkshere": "Hanga kitem zoddta",
        "whatlinkshere-hideimages": "Failinchim zoddpam $1",
        "whatlinkshere-filters": "Challnio",
        "ipboptions": "2 voram:2 hours,1 dis:1 day,3 dis:3 days,1 satollo:1 week,2 satolle:2 weeks,1 mhoino:1 month,3 mhoine:3 months,6 mhoine:6 months,1 voros:1 year,sasnnank:infinite",
-       "ipblocklist": "Addhailele vapuddpi",
+       "ipblocklist": "Addhailele vaporpi",
        "blocklink": "addavnnni",
        "unblocklink": "Addavnni kadd",
        "change-blocklink": "Addavnnni bodol",
        "allmessagesdefault": "Falta sondex mozkur",
        "thumbnail-more": "Vhodlem kor",
        "thumbnail_error": "Lhan-imaz toiar kortana chuk zali. Karonn: $1",
-       "tooltip-pt-userpage": "{{GENDER:|Tujem vapuddpachem}} pan",
+       "tooltip-pt-userpage": "{{GENDER:|Tujem vaporpeachem}} pan",
        "tooltip-pt-mytalk": "{{GENDER:|Tumchem}} bhasabhasachem pan",
        "tooltip-pt-preferences": "{{GENDER:|Tumcheo}} avddi",
        "tooltip-pt-watchlist": "Bodlachea dekhrekh korpachea panachi volleri",
        "tooltip-ca-viewsource": "Hem pan rakhun dovorlam.\nTujean tachem mull pollovnk ieta",
        "tooltip-ca-history": "Hea panacheo adleo uzollnneo",
        "tooltip-ca-protect": "Hem pan rakh",
-       "tooltip-ca-delete": "Hem pan vogllai",
+       "tooltip-ca-delete": "Hem pan kadun udoi",
        "tooltip-ca-move": "Hem pan fuddem vhor",
        "tooltip-ca-watch": "Hem pan tujea sadurvollerint zodd",
-       "tooltip-ca-unwatch": "Hem pan tumchea sadurtaievelean kadd",
+       "tooltip-ca-unwatch": "Hem pan tumchea sadurvollerentlean kadd",
        "tooltip-search": "{{SITENAME}}cher sod",
        "tooltip-search-go": "Heach nanvachem pan ostitvant asa zalear thoim voch",
        "tooltip-search-fulltext": "Hea mozkura khatir pana sod",
        "tooltip-t-whatlinkshere": "Hanga zoddlelea sogllea wiki pananchi volleri",
        "tooltip-t-recentchangeslinked": "Hea panak-sun zoddlelea panachim halinche bodol",
        "tooltip-feed-atom": "Hea panak Atom purovnni",
-       "tooltip-t-contributions": "{{GENDER:$1|Hea vapuddpeachea}} yogdanachi suchi",
-       "tooltip-t-emailuser": "Hea vapuddpeak email patthoi",
+       "tooltip-t-contributions": "{{GENDER:$1|Hea vaporpeachea}} yogdanachi suchi",
+       "tooltip-t-emailuser": "{{GENDER:$1|Hea vaporpeak}} email dhadd",
        "tooltip-t-upload": "Faili upload kor",
-       "tooltip-t-specialpages": "Sogllea khaxelim pananchi volleri",
+       "tooltip-t-specialpages": "Sogllea vixex pananchi volleri",
        "tooltip-t-print": "Hea panachem chap'pakyogya avrutti",
        "tooltip-t-permalink": "Hea panache hea uzollnnek togpi zoddni",
        "tooltip-ca-nstab-main": "Mozkur pan polloi",
-       "tooltip-ca-nstab-user": "Vapuddpeachem pan polloi",
+       "tooltip-ca-nstab-user": "Vaporpeachem pan polloi",
        "tooltip-ca-nstab-special": "Hem ek kherit pan, ani hem bodlunk zaina",
        "tooltip-ca-nstab-project": "Prokolpachem pan polloi",
        "tooltip-ca-nstab-image": "Failichem pan polloi",
        "tooltip-preview": "Bodolanchi zholok polloi, upkar hem samballche adim vapor!",
        "tooltip-diff": "Tumi hea mozkurant kelelo bodol dakhoiat",
        "tooltip-compareselectedversions": "Hea panacheo don nivoddleleo uzollneo modem forok polloi",
-       "tooltip-watch": "Hem pan tujea xadurvollerint zodd",
+       "tooltip-watch": "Hem pan tujea sadurvollerint zodd",
        "tooltip-rollback": "\"Kovllop\" hea panak nimannea yogdan korpean kello (kelle) bodol eka kollant portota.",
        "tooltip-undo": "\"Rodd' kor\" sudharop portita ani sudharopak Zholok ritin ukodta. Tem saran karon zoddunk dita.",
        "tooltip-summary": "Mottvo sar ghal",
        "watchlisttools-raw": "Sadurvollerichi mull-an bodol kor",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|uloi]])",
        "duplicate-defaultsort": "'''Chotrai:''' Falta anukraman mukhel ''$2'' rodd korta adhlem falta anukraman mukhel ''$1'', haka.",
-       "specialpages": "Khaxelim Panam",
+       "specialpages": "Vixex panam",
        "external_image_whitelist": " #Hi voll asa toxich dovor<pre>\n#Khala sodpache sache (''regular expressions'') ghal (fokot // modem voita poi tem bhag)\n#Hanche borobor bhaile zodlele murt comparar kel'le zatele\n#Mell khatat tim murt koxeo distele, na zalear fokot mortek ek zodd distele\n#Jeo voll #-an suru zatele tem vivek mhunn manlele zatele\n#Hanga vhodle and dhakte okxora modem forok podona\n\n#Soglle sodpache sache hea volla voir ghal. Hi voll asa toxich dovor</pre>",
        "tag-filter": "[[Special:Tags|Kurvechit]] challni:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Kurvechit|Kurvechiti}}]]: $2)",
index 1931678..d3b1f94 100644 (file)
@@ -17,7 +17,8 @@
                        "아라",
                        "JoostBotman",
                        "Macofe",
-                       "Giorgos456"
+                       "Giorgos456",
+                       "Gts-tg"
                ]
        },
        "tog-underline": "Ὑπογραμμίζειν συνδέσμους:",
@@ -27,9 +28,9 @@
        "tog-extendwatchlist": "Ἐφοροδιαλογὴν ἐκτείνειν ἵνα φανῶσιν ἅπασαι αἱ ἀλλαγαὶ, οὐχὶ μόνον αἱ ἁρμόδιαι",
        "tog-usenewrc": "Χρῆσθαι προσκεκοσμημέναις προσφάτοις ἀλλαγαῖς (ἀπαιτεῖται JavaScript)",
        "tog-numberheadings": "Ἐξαριθμεῖν ἐπικεφαλίδας αὐτομάτως",
-       "tog-showtoolbar": "Δεικνύναι τὴν τῶν ἐργαλείων μεταγραφῆς μετώπην (ἀπαιτεῖται JavaScript)",
-       "tog-editondblclick": "Ἐπὶ δέλτων δὶς θλίψας, μετάγραψον αὐτάς (ἀπαιτεῖται JavaScript)",
-       "tog-editsectiononrightclick": "Καθιστάναι δυνατὸν τὸ μεταγράφειν τμήματα διὰ τοῦ ἐπὶ τῶν ἐπιγραφῶν τῶν τμημάτων θλίβειν δεξιῶς (ἀπαιτεῖται JavaScript)",
+       "tog-showtoolbar": "Δεικνύναι τὴν τῶν ἐργαλείων μεταγραφῆς μετώπην",
+       "tog-editondblclick": "Ἐπὶ δέλτων δὶς θλίψας, μετάγραψον αὐτάς",
+       "tog-editsectiononrightclick": "Καθιστάναι δυνατὸν τὸ μεταγράφειν τμήματα διὰ τοῦ ἐπὶ τῶν ἐπιγραφῶν τῶν τμημάτων θλίβειν δεξιῶς",
        "tog-watchcreations": "Προστιθέναι τὰς δέλτους ἃς ποιῶ τοῖς ἐφορωμένοις μου",
        "tog-watchdefault": "Προστιθέναι τὰς δέλτους ἃς μεταγράφω τοῖς ἐφορωμένοις μου",
        "tog-watchmoves": "Προστιθέναι τὰς δέλτους ἃς κινῶ τοῖς ἐφορωμένοις μου",
        "tog-previewonfirst": "Τῆς πρώτης μεταγραφῆς, δεικνύναι τὸ προεπισκοπεῖν",
        "tog-enotifwatchlistpages": "Ἄγγειλόν μοι ὅτε δέλτος τις ἐν τῇ ἐφοροδιαλογῇ μου μεταβάλληται",
        "tog-enotifusertalkpages": "Ἄγγειλόν μοι ὅτε ἡ δέλτος μου διαλέξεως χρωμένου μεταβάλληται",
-       "tog-enotifminoredits": "Ἄγγειλόν μοι ἐπἴσης τὰς ἥττονας ἀλλαγὰς δέλτων",
+       "tog-enotifminoredits": "Ἄγγειλόν μοι ἐπἴσης τὰς ἥττονας ἀλλαγὰς δέλτων και ὰρχείων",
        "tog-enotifrevealaddr": "Ἀποκαλύπτειν τὴν ταχυδρομικὴν μου διεύθυνσιν ἐν τῇ εἰδοποιητηρίᾳ ἀλληλογραφίᾳ",
        "tog-shownumberswatching": "Δεικνύναι τὸν ἀριθμὸν τῶν παρακολουθούντων χρωμένων",
-       "tog-oldsig": "Προθεώρησις τῆς ὑπαρχούσης ὑπογραφῆς:",
+       "tog-oldsig": "Ὺπάρχουσα ὑπογραφῆ:",
        "tog-fancysig": "Ἀκατέργασται ὑπογραφαί ἐν εἴδει βικι-κειμένου (ἄνευ αὐτομάτου συνδέσμου)",
-       "tog-uselivepreview": "Χρῆσθαι ἀμέσῳ προθεωρήσει (JavaScript) (Πειραστικόν)",
+       "tog-uselivepreview": "Χρῆσθαι ἀμέσῳ προθεωρήσει",
        "tog-forceeditsummary": "Προμήνυσόν με εἰ εἰσάγω κενὴν σύνοψιν μεταγραφῆς",
        "tog-watchlisthideown": "Οὐ δηλοῦν τὰς ἐμὰς μεταβολὰς ἐν τοῖς ἐφορωμένοις μου",
        "tog-watchlisthidebots": "Ἀποκρύπτειν τὰς αὐτόματους μεταγραφὰς ἐκ τῆς ἐφοροδιαλογῆς",
        "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|Ἥδε ἡ κατηγορία περιέχει μόνον τὴν ἑξῆς ὑποκατηγορίαν.|Ἥδε ἡ κατηγορία περιέχει {{PLURAL:$1|τὴν ἑξῆς|τὰς ἑξῆς}} {{PLURAL:$1|ὑποκατηγορίαν|$1 ὑποκατηγορίας}}, ἐκ συνόλου $2.}}",
        "newwindow": "(ἀνοίξεται ἐν νέᾳ θυρίδι)",
        "cancel": "Ἀκυροῦν",
        "moredotdotdot": "Πλέονα...",
-       "mypage": "Ἡ δέλτος μου",
-       "mytalk": "Ἡ διάλεξίς μου",
-       "anontalk": "Î\94ιάλεξιÏ\82 Ï\80εÏ\81ὶ Ï\84οῦδε Ï\84οῦ IP",
+       "mypage": "Δέλτος",
+       "mytalk": "Διαλέγεσθαι",
+       "anontalk": "Î\94ιαλέγεÏ\83θαι",
        "navigation": "Πλοήγησις",
        "and": "&#32;καὶ",
        "qbfind": "Εὑρίσκειν",
        "view-foreign": "Ὁρᾶν στο $1",
        "edit": "Μεταγράφειν",
        "create": "Ποιεῖν",
+       "create-local": "Προστιθέναι περιγραφήν τοπική",
        "editthispage": "Μεταγράφειν τήνδε τὴν δέλτον",
        "create-this-page": "Ποιεῖν τήνδε τὴν δέλτον",
        "delete": "Σβεννύναι",
        "unprotectthispage": "Ἀλλαξον τὴν προφύλαξιν τῆσδε τῆς δέλτου",
        "newpage": "Δέλτος νέα",
        "talkpage": "Διαλέγε τήνδε τὴν δέλτον",
-       "talkpagelinktext": "Î\94ιαλέγεσθαι",
+       "talkpagelinktext": "διαλέγεσθαι",
        "specialpage": "Εἰδικὴ δέλτος",
        "personaltools": "Ἴδια ἐργαλεῖα",
        "articlepage": "Χρήματος δέλτον ὁρᾶν",
        "viewsource-title": "Ὁρᾶν τὴν πηγήν για το $1",
        "actionthrottled": "Δρᾶσις ἠγχθεῖσα",
        "protectedpagetext": "Ἥδε ἡ δέλτος ἀποκεκλῃμένη ἐστὶν εἰς ἀποτροπὴν τοῦ μεταγράφειν.",
-       "viewsourcetext": "Ἔξεστί σοι ὁρᾶν τε καὶ ἀντιγράφειν τὴν τῆς δέλτου πηγήν:",
+       "viewsourcetext": "Ἔξεστί σοι ὁρᾶν τε καὶ ἀντιγράφειν τὴν τῆς δέλτου πηγήν.",
        "protectedinterface": "Ἥδε ἡ δέλτος παρέχει κείμενον διεπιφανείας διὰ τὸ λογισμικὸν καὶ κεκλῃσμένη ἐστὶ προς ἀποφυγὴν καταχρήσεων.",
        "cascadeprotected": "Ἥδε ἡ δέλτος πεφύλακται, διότι συμπεριλαμβάνεται ἐν {{PLURAL:$1|τῇ ἑξῆς δέλτῳ ἥπερ πεφυλαγμένη ἐστὶ|ταῖς ἑξῆς δέλτοις αἵπερ πεφυλαγμέναι εἰσὶ}} μέσῳ τῆς ἐνεργοποιηθεῖσας διαδοχικῆς προστασίας ἐν τῷ:\n$2",
        "namespaceprotected": "Οὐκ ἔξεστί σοι μεταγράφειν δέλτους ἐν τῷ ὀνοματείῳ '''$1'''.",
        "ns-specialprotected": "Αἱ εἰδικαὶ δέλτοι μὴ μεταγραπτέαι εἰσίν.",
-       "titleprotected": "Ἡ ποίησις τῆσδε τῆς ἐπιγραφῆς πεφύλακται ὑπὸ τοῦ [[User:$1|$1]].\nἩ δεδομένη αἰτιολογία ἐστὶ \"''$2''\".",
+       "titleprotected": "Ἡ ποίησις τῆσδε τῆς ἐπιγραφῆς πεφύλακται ὑπὸ τοῦ [[User:$1|$1]].\nἩ δεδομένη αἰτιολογία ἐστὶ <em>$2</em>.",
        "exception-nologin": "Μὴ συνδεδεμένος",
        "virus-badscanner": "Κακὸς σχηματισμός: ἄγνωτος σαρωτὴς ἰῶν: ''$1''",
        "virus-scanfailed": "Σάρωσις πταιστή (κῶδιξ $1)",
        "logouttext": "'''Νῦν γὰρ ἀποσυνδεδεμένος εἰ.'''\n\nἜξεστί σοι χρῆσθαι τῷ {{SITENAME}} ἀνωνύμως, ἢ ἔξεστί σοι <span class='plainlinks'>[$1 συνδεῖσθαι πάλιν]</span> ὡς ὁ αὐτὸς ἢ ὡς ἄλλος χρώμενος.\nΔέλτοι τινὲς δέ, ἐνδεχομένως, δειχθήσονται ὡς ἂν ἀκμὴν συνδεδεμένος ᾖς, μέχρι ὅτε καθαίρῃς τὴν λανθάνουσαν μνήμην τοῦ προγράμματος πλοηγήσεώς σου.",
        "yourname": "Ὄνομα χρωμένου:",
        "userlogin-yourname": "Ὄνομα χρωμένου",
+       "userlogin-yourname-ph": "Παρέχειν λογισμόν χρώμενου:",
        "yourpassword": "Σῆμα:",
        "userlogin-yourpassword": "Σῆμα",
+       "userlogin-yourpassword-ph": "Παρέχειν σῆμα σοι",
+       "createacct-yourpassword-ph": "Παρέχειν σῆμα",
        "yourpasswordagain": "Ἀνατυπῶσαι σύνθημα:",
+       "createacct-yourpasswordagain": "Ἐπιβεβαιώσειν σῆμα",
+       "createacct-yourpasswordagain-ph": "Παρέχειν σῆμα πάλιν",
        "remembermypassword": "Μίμνῃσκε ἐνθάδε συνδεῖσθαι (μέγιστον $1 {{PLURAL:$1|ἡμέρα|ἡμέραι}})",
+       "userlogin-remembermypassword": "Διατήρησις συνδέσεως",
        "yourdomainname": "Ὁ τομεύς σου:",
        "externaldberror": "Συνέβη εἴτε σφάλμα τι πιστοποιήσεως τῆς βάσεως δεδομένων εἴτε οὐκ ἔξεστί σοι ἐνημεροῦν τὸν ἐξωτερικὸν λογισμόν σου.",
        "login": "Συνδεῖσθαι",
        "userlogout": "Ἐξέρχεσθαι",
        "notloggedin": "Οὐ συνδεδεμένος",
        "userlogin-noaccount": "Ἆρα λογισμὸν οὐκ ἔχεις;",
+       "userlogin-joinproject": "Μετέχειν {{SITENAME}}",
        "nologin": "Ἆρα λογισμὸν οὐκ ἔχεις; '''$1'''.",
        "nologinlink": "Λογισμὸν ποιεῖν",
        "createaccount": "Λογισμὸν ποιεῖν",
        "gotaccount": "Ἆρα λογισμὸν ἤδη τινὰ ἔχεις; '''$1'''.",
        "gotaccountlink": "Συνδεῖσθαι",
+       "userlogin-resetpassword-link": "Λανθάνεσαι σήμα σοι;",
+       "userlogin-helplink2": "Βοήθεια δια σύνδεσιν",
+       "createacct-emailoptional": "Ἠλεκτρονική ἀλληλογραφίαν (προαιρετικόν)",
+       "createacct-email-ph": "Παρέχειν διεύθυνσην ἤλεκτρονικής ἀλληλογραφίας σου",
        "createaccountmail": "ἠλεκτρονικῇ ἐπιστολῇ",
        "createaccountreason": "Αἰτία",
+       "createacct-submit": "Λογισμὸν ποιεῖν",
+       "createacct-benefit-heading": "{{SITENAME}} ποιούται ὐπό ἀνθρώπων ἐσού ώς.",
+       "createacct-benefit-body1": "{{PLURAL:$1|μεταγραφή|μεταγραφαί}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|δέλτος|δέλτοι}}",
+       "createacct-benefit-body3": "πρόσφατος/οι {{PLURAL:$1|συμβάλλοντας|συμβάλλοντες}}",
        "badretype": "Τὰ εἰσηγμένα ὑπἐσοῦ συνθήματα οὐχ ἁρμόττουσιν.",
        "userexists": "Τὸ εἰσηγμένον ὄνομα ἤδη κεχρησμένον ἐστίν.\nἘπίλεξον ὄνομα διάφορόν τι.",
        "loginerror": "Ἡμάρτηκας περὶ τοῦ συνδεδεκαῖναι",
        "noemailprefs": "Καθόρισον ἠ-διεύθυνσιν τινὰ ἵνα τάδε τὰ λειτουργικὰ χαρακτηριστικὰ ὦσιν ἐνεργά.",
        "emailconfirmlink": "Ἐπιβεβαίωσον τὴν διεύθυνσιν ἠλ-ταχυδρομείου σου",
        "accountcreated": "Λογισμὸς ποιηθείς",
-       "accountcreatedtext": "Ὁ λογισμὸς χρωμένου διὰ τὸν/τὴν $1 πεποιημένος ἐστίν.",
+       "accountcreatedtext": "Ὁ λογισμὸς χρωμένου διὰ τὸν/τὴν [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) πεποιημένος ἐστίν.",
        "createaccount-title": "Ποίησις λογισμοῦ διὰ {{SITENAME}}",
        "loginlanguagelabel": "Γλῶσσα: $1",
+       "pt-login": "Συνδεῖσθαι",
+       "pt-login-button": "Συνδεῖσθαι",
+       "pt-createaccount": "Λογισμὸν ποιεῖν",
+       "pt-userlogout": "Ἐξέρχεσθαι",
        "changepassword": "Ἀλλάττειν σύνθημα",
        "resetpass_header": "Ἀναδιορισμὸς συνθήματος λογισμοῦ",
        "oldpassword": "Πρότερον σύνθημα:",
        "newpassword": "Νέον σύνθημα:",
        "retypenew": "Ἀνατύπωσις νέου συνθήματος:",
        "resetpass_submit": "Ἀναδιορισμὸς συνθήματος καὶ σύνδεσις",
-       "changepassword-success": "Τὸ σὸν σύνθημα εὖ μεταβεβλημένον ἐστίν! Νῦν συνδέῃ...",
+       "changepassword-success": "Τὸ σὸν σύνθημα εὖ μεταβεβλημένον ἐστίν!",
        "resetpass_forbidden": "Οὐκ ἔξεστι τοῖς συνθήμασιν ἀλλαγῆναι",
        "resetpass-no-info": "Ἐὰν μὴ συνδέῃ οὐκ ἔξεστί σοι εὐθέως δεῦρο βαίνειν.",
        "resetpass-submit-loggedin": "Ἀλλάττειν σύνθημα",
        "resetpass-submit-cancel": "Ἀκυροῦν",
        "resetpass-temp-password": "Προσωρινὸν σύνθημα:",
+       "passwordreset": "Ἀνανέωσις σῆματος",
        "passwordreset-username": "Ὄνομα χρωμένου:",
        "changeemail-none": "(οὐδέν)",
        "changeemail-submit": "Ἀλλάττειν ἠλ.-ταχυδρομεῖον",
        "sig_tip": "Ὑπογραφή σου μετὰ χρονοσφραγίδος",
        "hr_tip": "Ὁριζόντιος γραμμή (χρηστέα φειδωλώς)",
        "summary": "Σύνοψις:",
-       "subject": "Χρῆμα/ἐπικεφαλίς:",
+       "subject": "Χρῆμα:",
        "minoredit": "Μικρὰ ἥδε ἡ μεταβολή",
        "watchthis": "Ἐφορᾶν τήνδε τὴν δέλτον",
        "savearticle": "Γράφειν τὴν δέλτον",
        "preview": "Τὸ προεπισκοπεῖν",
        "showpreview": "Προεπισκοπεῖν",
        "showdiff": "Δεικνύναι τὰς μεταβολάς",
-       "anoneditwarning": "'''Προσοχή:''' Οὐ συνδεδεμένος εἶ.\nἩ διεύθυνσις IP σου καταγεγραμμένη ἔσται ἐν τῇδε δέλτου ἱστορίᾳ.",
+       "anoneditwarning": "<strong>Προσοχή:</strong> Οὐ συνδεδεμένος εἶ.\nΔιεύθυνσις IP σοι ἐπίδεικνύται δημοσίως εἰ μεταγραφές ποιούσις. Εἰ <strong>[$1 συνδεθήσας]</strong> εἰ <strong>[$2 λογισμὸν ποιήσας]</strong>, μεταγραφές σοι ἀποδιδόναι εἴς το ὄνομα χρώμενου σου, παρά άλλων προνομίων.",
        "missingcommenttext": "Εἰσάγαγε σχόλιον τι κατωτέρω.",
        "summary-preview": "Προθεώρησις συνόψεως:",
-       "subject-preview": "á¼\88νÏ\84ικειμένοÏ\85/á¼\90πικεφαλίδος προθεώρησις:",
+       "subject-preview": "á¿\88πικεφαλίδος προθεώρησις:",
        "blockedtitle": "Ἀποκεκλεισμένος ὁ χρώμενος",
        "blockedtext": "'''Τὸ ὄνομα χρωμένου σου ἢ ἡ διεύθυνσις IP σου πεφραγμένα εἰσίν.'''\n\nἩ φραγὴ γέγονε ὑπὸ τὸν/τὴν $1.\nἩ δεδομένη αἰτιολογία ἐστίν: ''$2''.\n\n* Ἔναρξις φραγῆς: $8\n* Λῆξις φραγῆς: $6\n* Ἡ φραγὴ προορίζεται διὰ τὸν χρώμενον: $7\n\nἈποτάθητι εἰς τὸν/τὴν $1 ἢ ὅντινα ἕτερον [[{{MediaWiki:Grouppage-sysop}}|γέροντα]] διὰ τὸ διαλέγεσθαι περὶ τῆς φραγῆς.\nΟὐ δύνασαι χρῆσθαι τῇ δυνατότητι «ἀποστολῆς ἠλεκτρονικῆς ἐπιστολῆς τῷδε τῷ χρωμένῳ» εἰ οὐχ ὁρίσεις ἔγκυρόν τινα ἠλεκτρονικὴν διεύθυνσιν ἐν ταῖς [[Special:Preferences|προκρίσεσί]] σου.\nἩ τρέχουσα διεύθυνσις IP σου $3 ἐστίν, καὶ ἡ ἀναγνώρισις τῆς φραγῆς #$5 ἐστίν.\nΠαρακαλοῦμεν σε περιλαμβάνειν οἱανδήποτε ἐξ αὐτῶν ἢ καὶ ἀμφοτέρας ἐν ταῖς ἐρωτήσεσί σου.",
        "autoblockedtext": "Ἡ διεύθυνσις IP σου ἐφράγη αὐτομάτως ἐπεὶ κεχρησμένη ἦν ὑπὸ ἑτέρου τινὸς χρωμένου, ὅπερ ἀποκεκλεισμένος ἐστὶν ἐκ τοῦ/τῆς $1.\nἩ δεδομένη αἰτία ἐστὶν ὡς ἑξῆς:\n\n:''$2''\n\n*Ἔναρξις φραγῆς: $8\n*Λῆξις φραγῆς: $6\n*Προκαθωρισμένος φραττόμενος: $7\n\nἈποτάθητι εἰς τὸν/τὴν $1 ἢ εἰς ἑτέρους τινὰς\n[[{{MediaWiki:Grouppage-sysop}}|γέροντας]] διὰ τὸ διαλέγεσθαι περὶ τῆς φραγῆς.\n\nΣημείωσον: οὐ δύνασαι χρῆσθαι τῇ ἐπιλογῇ «ἀποστολῆς ἠλεκτρονικῆς ἐπιστολῆς τῷδε τῷ χρωμένῳ» ἐὰν μὴ ἔχῃς ἔγκυρον τινὰ διεύθυνσιν ἠλεκτρονικοῦ ταχυδρομείου κατακεχωρημένην ἐν ταῖς [[Special:Preferences|προτιμήσεσι χρωμένου]] σου.\n\nἩ τρέχουσα διεύθυνσις IP σου $3 ἐστίν, καὶ ἡ ἀναγνώρισις τῆς φραγῆς #$5 ἐστίν.\nΠαρακαλοῦμεν σε περιλαμβάνειν οἱανδήποτε ἐξ αὐτῶν ἢ καὶ ἀμφοτέρας ἐν ταῖς ἐρωτήσεσί σου.",
        "loginreqlink": "συνδεῖσθαι",
        "loginreqpagetext": "Δεῖ σε $1 πρὸ τοῦ ὁρᾶν ἑτέρας δέλτους.",
        "accmailtitle": "Σύνθημα ἀπεστάλη.",
-       "accmailtext": "Τὸ τυχαίως παρηγμένον σύνθημα διὰ τὸν/τὴν [[User talk:$1|$1]] ἐστάλη τῷ $2.\n\nΤὸ σύνθημα τοῦδε τοῦ νέου λογισμοῦ ἔξεστί σοι ἀλλάξειν μέσῳ τῆς δέλτου ὀνόματι ''[[Special:ChangePassword|ἀλλάττειν σύνθημα]]'' κατὰ τὸ συνδεῖσθαι.",
+       "accmailtext": "Τὸ τυχαίως παρηγμένον σύνθημα διὰ τὸν/τὴν [[User talk:$1|$1]] ἐστάλη τῷ $2.\n\nΤὸ σύνθημα τοῦδε τοῦ νέου λογισμοῦ ἔξεστί σοι ἀλλάξειν μέσῳ τῆς δέλτου ὀνόματι <em>[[Special:ChangePassword|ἀλλάττειν σύνθημα]]</em> κατὰ τὸ συνδεῖσθαι.",
        "newarticle": "(Νέα)",
        "newarticletext": "Ἠκολούθησας σύνδεμόν τινα πρὸς δέλτον εἰσέτι μὴ ὑπάρχουσαν.\nΔύνασαι ποιῆσαι τὴν δέλτον, τυπῶν ἐν τῷ κυτίῳ κατωτέρω (ἴδε [$1 δέλτον βοηθείας] διά πλείονας πύστεις).\nΕἰ ὧδε εἶ ἐσφαλμένως, πίεσον τὸ κομβίον τοῦ πλοηγητηρίου σου ὀνόματι '''ὀπίσω (back)'''.",
-       "noarticletext": "Οὐδὲν ἐν τῇδε τῇ δέλτῳ γεγραμμένον, ἀλλὰ ἔξεστί σοι [[Special:Search/{{PAGENAME}}|δέλτον τινὰ οὕτως ὀνόματι ζητήσειν]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ζητήσειν τοὺς σχετικοὺς καταλόγους],\nἢ [{{fullurl:{{FULLPAGENAME}}|action=edit}} τήνδε τὴν δέλτον μεταγράψειν]</span>.",
+       "noarticletext": "Οὐδὲν ἐν τῇδε τῇ δέλτῳ γεγραμμένον. \nἜξεστί σοι [[Special:Search/{{PAGENAME}}|δέλτον τινὰ οὕτως ὀνόματι ζητήσειν]] ἐν ἔτερες δέλτους, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ζητήσειν τοὺς σχετικοὺς καταλόγους],\nἢ [{{fullurl:{{FULLPAGENAME}}|action=edit}} τήνδε τὴν δέλτον μεταγράψειν]</span>.",
+       "noarticletext-nopermission": "Οὐδὲν ἐν τῇδε τῇ δέλτῳ γεγραμμένον. \nἜξεστί σοι [[Special:Search/{{PAGENAME}}|δέλτον τινὰ οὕτως ὀνόματι ζητήσειν]] ἐν ἔτερες δέλτους, ἤ <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ζητήσειν τα συγγενή αρχεία καταγραφών],\nὄμως οὔ δύνασαι τήνδε τὴν δέλτον δημιουργήσειν.",
        "clearyourcache": "'''Ἐπισημείωσις - Μετὰ τὸ καταγράφειν, ἐνδεχομένως δεῖ σε παρακάμψειν τὴν λανθάνουσαν μνήμην τοῦ πλοηγητηρίου σου πρὸ τοῦ ὁρᾶν τὰς μεταβολάς.'''\n'''Mozilla Safari:''' ἐρητύειν τὸ ''Shift'' ἐνῷ θλίβεις τὸ ''Reload'', ἢ πίεσον εἴτε ''Ctrl-F5'' ἢ ''Ctrl-R'' (''Command-R'' ἐν Mac);\n'''Google Chrome:''' θλίψον ''Ctrl-Shift-R'' (''Command-Shift-R'' ἐν Mac)\n'''Konqueror: '''θλίψον τὸ ''Reload'' ἢ πίεσον ''F5''\n'''Opera:''' καθαίρειν τὴν λανθάνουσαν μνήμην ἐν ''Tools → Preferences''\n'''Internet Explorer:''' ἐρητύειν τὸ ''Ctrl'' ἐνῷ θλίβεις τὸ ''Refresh,'' ἢ πίεσον ''Ctrl-F5''.",
        "usercssyoucanpreview": "'''Βουλή:''' Χρῆσον τῷ κομβίῳ 'Δεικνύναι προθεώρησιν' ἵνα δοκιμάσῃς τὴν νέαν σου CSS πρὸ τοῦ καταγράφειν.",
        "userjsyoucanpreview": "'''Βουλή:''' Χρῆσον τῷ κομβίῳ 'Δεικνύναι προθεώρησιν' ἵνα δοκιμάσῃς τὴν νέαν σου JS πρὸ τοῦ καταγράφειν.",
        "previewconflict": "Ἥδε ἡ προθεώρησις ἀντανακλᾷ τὸ κείμενον πρὸς τὴν ἄνωθεν περιοχὴν μεταγραφῆς ὡς ἐμφανίσεται ἐάν ἐπιλέξῃς μεταγράψειν τοῦτο.",
        "session_fail_preview": "'''Ἀδύνατος ἦν ἡ διαδικασία τῆς μεταγραφῆς σου ἐξ αἰτίας τῆς ἀπωλείας συνοδῶν δεδομένων.\nΠείρασον πάλιν.\nΕἰ μὴ δύνατος ἐστὶ παρὰ ταῦτα, πείρασον [[Special:UserLogout|ἀποσυνδεῖσθαι]] καὶ ἐν συνεχείᾳ ἐπανασυνδεῖσθαι.'''",
        "editing": "Μεταγράφειν $1",
+       "creating": "Ποιεῖν $1",
        "editingsection": "Μεταγράφειν $1 (τμῆμα)",
        "editingcomment": "Μεταγράφειν $1 (νέον τμῆμα)",
        "editconflict": "Ἀντιμαχία μεταγραφῶν: $1",
        "currentrev": "Τὸ νῦν",
        "currentrev-asof": "Τρέχουσα ἀναθεώρησις μέχρι $1",
        "revisionasof": "Τὰ ἐπὶ $1",
-       "revision-info": "Τὸ á¼\90Ï\80ὶ $1 á½\91Ï\80ὸ $2",
+       "revision-info": "Î\91á¼± Ï\80Ï\81Ï\8cÏ\84εÏ\81αι Î¼ÎµÏ\84αγÏ\81αÏ\86αί Ï\84οÏ\8d $1 á½\91Ï\80ὸ {{GENDER:$6|$2}}$7",
        "previousrevision": "←Παλαιοτέρα ἀναθεώρησις",
        "nextrevision": "Νεωτέρα ἀναθεώρησις→",
        "currentrevisionlink": "Τὰ νῦν",
        "cur": "ἡ νῦν",
        "next": "ἡ ἑπομένη",
-       "last": "ἡ ὑστάτη",
+       "last": "ἡ πρώην",
        "page_first": "πρώτη",
        "page_last": "ἐσχάτη",
        "histlegend": "Σύγκρισις διαφορῶν: Ἐπιλέξατε τὰς συγκριτέας ἐκδόσεις καὶ πατήσατε enter ἢ τὸ κομβίον  \"Συγκρίνειν...\". <br />\nὙπόμνημα: (τρέχον) = διαφοραὶ ὡς πρὸς τὴν τρέχουσαν ἐκδοχήν,\n(ὕστατον) = διαφοραὶ ὡς πρὸς τὴν προηγουμένην ἔκδοσιν, μ = ἀλλαγαὶ μικρῆς κλίμακος.",
        "history-fieldset-title": "Ζήτησις ἐν ταῖς προτέραις",
        "history-show-deleted": "Διαγραφεῖσαι μόνον",
-       "histfirst": "πρώτη",
-       "histlast": "ἐσχάτη",
+       "histfirst": "ἐσχάτη",
+       "histlast": "νεωτέρα",
        "historysize": "({{PLURAL:$1|1 δυφίον|$1 δυφία}})",
        "historyempty": "(κενόν)",
        "history-feed-title": "Ἱστορία ἀναθεωρήσεων",
        "revertmerge": "Ἀποσυγχωνεύειν",
        "mergelogpagetext": "Κατωτέρω ἐστὶ διαλογή τις τῶν πλείω προσφάτων συγχωνεύσεων τοῦ ἱστορικοῦ δέλτου τινὸς μετὰ αὐτοῦ ἑτέρας τινός.",
        "history-title": "Αἱ πρότεραι ἐκδόσεις τῆς δέλτου \"$1\"",
+       "difference-title": "Διαφορές ἀναθεωρήσεων τού \"$1\"",
        "difference-multipage": "(Διαφορὰ μεταξὺ δέλτων)",
        "lineno": "Γραμμή $1:",
        "compareselectedversions": "Συγκρίνειν τὰς ἐπειλεγμένας δέλτους",
        "showhideselectedversions": "Δεικνύειν/κρύπτειν τὰς ἐπειλεγμένας ἐκδόσεις",
        "editundo": "ἀναίρεσις",
+       "diff-multi-sameuser": "({{PLURAL:$1|Μίαν ενδιάμεση ἔκδοσις|$1 ἐνδιάμεσες ἐκδόσεις}} ἐκ τού ἰδίου χρῆστη ὀυ δυκνείονται)",
        "searchresults": "Ἀποτελέσματα ἀναζητήσεως",
        "searchresults-title": "Ἀποτελέσματα ζητήσεως διὰ \"$1\"",
        "titlematches": "Ἡ ἐπιγραφὴ τῆς δέλτου ἀντιστοιχεῖ",
        "shown-title": "Δεικνύναι $1 {{PLURAL:$1|ἀποτέλεσμα|ἀποτελέσματα}} ἀνὰ δέλτον",
        "viewprevnext": "Ἐπισκοπεῖν ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''Ὑπάρχει δέλτος τις ὀνόματι \"[[:$1]]\" ἐν τῷδε τῷ βίκι'''",
-       "searchmenu-new": "'''Ποιεῖν τὴν δέλτον \"[[:$1]]\" ἐν τῷδε τῷ βίκι'''",
+       "searchmenu-new": "<strong>Ποιεῖν τὴν δέλτον \"[[:$1]]\" ἐν τῷδε τῷ βίκι</strong>\n{{PLURAL:$2|0=|Ὄραν καὶ δή τῆ δέλτον εὐρεθείσας υπό ζήτησης.|Ὄραν καὶ δή τά άποτελέσματα άνευρεθέντα ὐπό τῆ ζήτησην.}}",
        "searchprofile-articles": "Δέλτοι περιεχομένων",
        "searchprofile-images": "Πολυμέσα",
        "searchprofile-everything": "Ἅπαντα",
        "searchrelated": "σχετικά",
        "searchall": "ἅπασαι",
        "showingresults": "Δεικνύναι κατωτέρω μέχρι {{PLURAL:$1|'''1''' ἀποτέλεσμα|'''$1''' ἀποτελέσματα}}· ἐκκίνησις ἐκ τοῦ #'''$2'''.",
+       "search-showingresults": "{{PLURAL:$4|Ἀποτέλεσμα <strong>$1</strong> ἀπό <strong>$3</strong>|Ἀποτελέσματα <strong>$1 - $2</strong> ἀπό <strong>$3</strong>}}",
        "search-nonefound": "Οὐδὲν ἀποτέλεσμα ἀντίστοιχον τῆς πεύσεως.",
        "powersearch-legend": "Ἀνωτέρα ἀναζήτησις",
        "powersearch-ns": "Ζήτησις ἐν τοῖς ὀνοματείοις:",
        "powersearch-togglenone": "Οὐδέν",
        "search-external": "Ἐξωτέρα ἀναζήτησις",
        "preferences": "Προαιρέσεις",
-       "mypreferences": "Αἱ προαιρέσεις μου",
+       "mypreferences": "Αἱρέσεις",
        "prefs-edits": "Τοσοῦται αἱ μεταβολαί:",
        "prefs-skin": "Ἐμφάνισις",
        "skin-preview": "Προεπισκοπεῖν",
        "prefs-rc": "Αἱ νέαι μεταβολαί",
        "prefs-watchlist": "Τὰ ἐφορώμενα",
        "prefs-watchlist-days": "Ἡμέραι ἐμφανιστέαι ἐν τῇ ἐφοροδιαλογῇ:",
-       "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|day|days}}",
+       "prefs-watchlist-days-max": "(τὸ μέγιστον $1 {{PLURAL:$1|ἡμέρα|ἡμέραι}})",
        "prefs-watchlist-edits": "Μέγιστος ἀριθμὸς ἐμφανιστέων μεταβολῶν ἐν τῇ ἐπεκτεταμένῃ διαλογῇ:",
        "prefs-watchlist-edits-max": "Μέγιστος ἀριθμός: 1000",
        "prefs-watchlist-token": "Δεῖγμα ἐφοροδιαλογῆς:",
        "right-blockemail": "Ἀποτρέπειν τὴν ἀποστολὴν ἠλ-ἀγγελίας ὑπὸ τοῦ χρωμένου",
        "right-hideuser": "Φράττειν ὄνομα χρωμένου διὰ τοῦ ἀποκρύπτειν τόδε ὑπὸ τοῦ κοινοῦ",
        "right-ipblock-exempt": "Παρακάμπτειν φραγὰς IP, αὐτομάτους φραγὰς καὶ φραγὰς ἐμβελειῶν",
-       "right-proxyunbannable": "Παράκαμψις αὐτομάτων φραγῶν πληρεξουσίων",
        "right-protect": "Ἀλλάττειν κλίμακα προστασίας καὶ μεταγράφειν τὰς φυλαττομένας δέλτους",
        "right-editprotected": "Μεταγράφειν φυλαττομένας δέλτους (ἄνευ διαδοχικῆς προστασίας)",
        "right-editinterface": "Μεταγράφειν τὸ τοῦ χρωμένου περιβάλλον ἀλληλεπιδράσεως",
        "action-block": "φράττειν τὸ μεταγράφειν τοῦδε τοῦ χρωμένου",
        "action-protect": "ἀλλάττειν τὴν κλίμακα προστασίας τῆσδε τῆς δελτου",
        "action-import": "εἰσάγειν τήνδε τὴν δέλτον ἐξ ἑτέρου βίκι",
-       "action-importupload": "εἰσάγειν τήνδε τὴν δέλτον ἐξ ἐπιφορτίσεώς τινος ἀρχείου",
+       "action-importupload": "εἰσάγειν τήνδε τὴν δέλτον ἐξ ἐπιφορτίσεώς ἀρχείου",
        "action-patrol": "σημαίνειν τὰς μεταγραφὰς ἑτέρων ὡς φρουρουμένας",
        "action-autopatrol": "σήμανσις τῆς μεταγραφῆς σου ὡς περιπολουμένης",
        "action-unwatchedpages": "ὁρᾶν τὴν διαλογὴν τῶν μὴ ἐφορωμένων δέλτων",
        "action-userrights-interwiki": "μεταγράφειν τα δικαιώματα χρωμένου ἑτέρων βικι-χρωμένων",
        "action-siteadmin": "Κλῄειν ἢ ἐκκλῄειν τὴν βάσιν δεδομένων",
        "nchanges": "$1 {{PLURAL:$1|μεταβολή|μεταβολαί}}",
-       "recentchanges": "Αἱ νέαι μεταβολαί",
+       "enhancedrc-history": "Αἱ πρότεραι",
+       "recentchanges": "Νέαι μεταβολαί",
        "recentchanges-legend": "Ἐπιλογαὶ προσφάτων μεταβολῶν",
        "recentchanges-summary": "Ἀνιχνεύσειν τὰς πλείω πρόσφατους ἀλλαγὰς οῦ βίκι ἐν τῇδε τῇ δέλτῳ.",
        "recentchanges-feed-description": "Παρακολουθεῖν τὰς πλείω προσφάτους ἀλλαγὰς τοῦ βίκι ἐν ταύτῃ περιλήψει.",
-       "recentchanges-label-newpage": "Ἥδε á¼¡ Î¼ÎµÏ\84αγÏ\81αÏ\86á½´ á¼\90Ï\80οίηÏ\83εν Î½Î­Î±Î½ δέλτον τινά",
+       "recentchanges-label-newpage": "Ἥδε á¼¡ Î¼ÎµÏ\84αγÏ\81αÏ\86á½´ á¼\90Ï\80οίηÏ\83εν ÎºÎ±Î¹Î½Î® δέλτον τινά",
        "recentchanges-label-minor": "Ἥδε μικρὰ μεταγραφή ἐστιν",
        "recentchanges-label-bot": "Ἥδε ἡ μεταγραφὴ ἐτελέσθη ὑπὸ αὐτομάτου τινός",
        "recentchanges-label-unpatrolled": "Ἥδε ἡ μεταγραφὴ μὴ ἐλεγμένη ἐστίν",
-       "recentchanges-legend-newpage": "$1 - νέα δέλτος",
+       "recentchanges-label-plusminus": "Τό μέγεθος τῆς δέλτου μεταβλήθηκε παρά ταύτον τόν ἀριθμό δυφιολέξεων",
+       "recentchanges-legend-heading": "<strong>Ἐρμήνευμα:</strong>",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ἐπισκοπεῖν καί [[Special:NewPages|κατάλογον δέλτων καινών]])",
        "rcnotefrom": "Ἰδοῦ αἱ ἀλλαγαὶ ἐκ τοῦ '''$2''' (ἕως τὸ '''$1''').",
        "rclistfrom": "Δεικνύναι νέας ἀλλαγάς. Ἐκκίνησις ἐκ τοῦ $3 $2",
        "rcshowhideminor": "$1 μικραὶ μεταβολαὶ",
+       "rcshowhideminor-show": "Δεικνύναι",
+       "rcshowhideminor-hide": "Κρύπτειν",
        "rcshowhidebots": "$1 αὐτόματα",
-       "rcshowhideliu": "$1 χρωμένους συνδεδεμένους",
+       "rcshowhidebots-show": "Δεικνύναι",
+       "rcshowhidebots-hide": "Κρύπτειν",
+       "rcshowhideliu": "$1 ἐπιγεγραμμένοι χρώμενοι",
+       "rcshowhideliu-hide": "Κρύπτειν",
        "rcshowhideanons": "$1 χρώμενοι ἀνώνυμοι",
+       "rcshowhideanons-show": "Δεικνύναι",
+       "rcshowhideanons-hide": "Κρύπτειν",
        "rcshowhidepatr": "$1 τὰς περιπολουμένας μεταγραφάς",
-       "rcshowhidemine": "Ἐμφάνισις τῶν τελευταίων $1 ἀλλαγῶν τῷ χρονικῷ διαστήματι τῶν τελευταίων $2 ἡμερῶν <br />$3",
+       "rcshowhidemine": "$1 μεταγραφαί ἐμού",
+       "rcshowhidemine-show": "Δεικνύναι",
+       "rcshowhidemine-hide": "Κρύπτειν",
        "rclinks": "Ἐμφάνισις τῶν τελευταίων $1 ἀλλαγῶν τῷ χρονικῷ διαστήματι τῶν τελευταίων $2 ἡμερῶν <br />$3",
        "diff": "διαφ.",
-       "hist": "Προτ.",
+       "hist": "Ἰστ.",
        "hide": "Κρύπτειν",
        "show": "Δεικνύναι",
        "minoreditletter": "μ",
        "number_of_watching_users_pageview": "[$1 ἐφορᾶν {{PLURAL:$1|χρώμενον|χρωμένους}}]",
        "rc_categories": "Ὅριον κατηγοριῶν (σήμανσις διαχωρίσεως: \"|\")",
        "rc_categories_any": "Οἵα δήποτε",
+       "rc-change-size-new": "$1 {{PLURAL:$1|δυφιολέξις|δυφιολέξεις}} μεθύστερον μεταβολής",
        "newsectionsummary": "/* $1 */ νέον τμῆμα",
        "rc-enhanced-expand": "Δεικνύναι λεπτομέρειας (ἀπαιτεῖ JavaScript)",
        "rc-enhanced-hide": "Κρύπτειν λεπτότητας",
        "upload-description": "Περιγραφὴ ἀρχείου",
        "upload-options": "Ἐπιφόρτωσις ἐπιλογῶν",
        "watchthisupload": "Ἐφορᾶν τόδε τὸ ἀρχεῖον",
-       "upload-success-subj": "Ἐπιφόρτισις ἐπιτυχής",
-       "upload-warning-subj": "Ἐπιφορτίζειν εἴδησιν",
        "upload-proto-error": "Ἐσφαλμένον πρωθυπόμνημα",
        "upload-proto-error-text": "Ἡ ἀπόμακρος ἐπιφόρτισις ἀπαιτεῖ URL ἔχον πρόθεμα <code>http://</code> ἢ <code>ftp://</code>.",
        "upload-file-error": "Ἐσώτερον σφάλμα",
        "filehist-dimensions": "Διαστάσεις",
        "filehist-filesize": "Μέγεθος ἀρχείου",
        "filehist-comment": "Σχόλιον",
-       "imagelinks": "ΣÏ\8dνδεÏ\83μοι á¼\80Ï\81Ï\87είÏ\89ν",
+       "imagelinks": "Î\94ελÏ\84ίοÏ\85 Ï\87Ï\81εία",
        "linkstoimage": "{{PLURAL:$1|Ἡ ἀκόλουθος|Αἱ ἀκόλουθοι $1}} {{PLURAL:$1|δέλτος σύνδεσμος|δέλτοι σύνδεσμοι $1}} πρὸς τήνδε τὴν εἰκόνα {{PLURAL:$1|ἐστίν|εἰσίν $1}}.",
        "linkstoimage-more": "Πλείονες $1 {{PLURAL:$1|συνδέσμου|συνδέσμων}} συνδέονται μετὰ τοῦδε τοῦ ἀρχείου.\nἩ ἑξῆς διαλογὴ δεικνύει {{PLURAL:$1|τὴν πρώτη δέλτον ἥπερ συνδέεται|τὰς πρώτας $1 δέλτους αἵπερ συνδέονται}} μετὰ μετὰ τοῦδε μόνου τοῦ ἀρχείου.\nἩ [[Special:WhatLinksHere/$2|πλήρης διαλογὴ]] διαθέσιμός ἐστιν.",
        "nolinkstoimage": "Οὐδένα ἐστὶ προσάγον τόδε τὸ φορτίον.",
        "morelinkstoimage": "Ὁρᾶν [[Special:WhatLinksHere/$1|πλείονας συνδέσμους]] πρὸς τήνδε τὴν δέλτον.",
        "duplicatesoffile": "{{PLURAL:$1|Τὸ ἀκόλουθον ἀρχεῖον διπλότυπον ἐστὶ|$1 Τὰ ἀκόλουθα ἀρχεῖα διπλότυπα εἰσὶ}} τοῦδε τοῦ ἀρχείου ([[Special:FileDuplicateSearch/$2|πλείω]]):",
        "sharedupload": "Τόδε τὸ ἀρχεῖον ἀπὸ τὴν $1 ἐστὶ καὶ δύνασαι χρῆσθαι τούτῳ εἰς ἕτερα σχέδια ἐξἴσου.",
+       "sharedupload-desc-here": "Τόδε ἀρχεῖον ἐστὶν ἀπὸ τό $1 καί δύναται χρήσιν ἔτερων ἔργων. Ἠ περιγραφή ταύτου εν τῆ [$2 δέλτο περιγραφής] του ἐνδείκνυτε κάτω.",
        "filepage-nofile": "Οὐδέν ἐστὶν ἀρχεῖον ἔχον τόδε τὸ ὄνομα.",
        "filepage-nofile-link": "Οὐχ ὑπάρχει ἀρχεῖον ὀνομασθὲν τοιούτως, ἀλλὰ ἔξεστί σοι [$1 ἐπιφορτίσειν τόδε] πιέσας ὧδε.",
        "uploadnewversion-linktext": "Ἐπιφορτίζειν νέαν ἐκδοσίν τινα τοῦδε τοῦ ἀρχείου",
        "shared-repo-from": "ἀπὸ $1",
        "shared-repo": "διαμεμοιρασμένον ἀποθηκευτήριόν τι",
+       "upload-disallowed-here": "Οὐκ ἔξεστί σοι διαγράφειν ταύτο αρχείον.",
        "filerevert": "Ἐπαναφέρειν  $1",
        "filerevert-legend": "Ἐπαναφέρειν ἀρχεῖον",
        "filerevert-intro": "Ἀναστρέφεις τὴν '''[[Media:$1|$1]]''' εἰς τὴν [$4 ἔκδοσιν μέχρι $3, $2].",
        "listusers-creationsort": "Ταξινόμησις κατὰ χρονολογίαν ποιήσεως",
        "usereditcount": "$1 {{PLURAL:$1|μεταγραφή|μεταγραφαί}}",
        "usercreated": "Ποιηθεῖσα τῇ $1 ὥρᾳ $2",
-       "newpages": "Î\94έλÏ\84οι Î½Î­Î±Î¹",
+       "newpages": "Î\94έλÏ\84οι ÎºÎ±Î¹Î½Î¿Î¯",
        "newpages-username": "Ὄνομα χρωμένου:",
        "ancientpages": "Αἱ παλαιόταται δέλτοι",
        "move": "κινεῖν",
        "suppress": "Ἐπόπτης",
        "booksources": "Αἱ ἐν βίβλοις πηγαί",
        "booksources-search-legend": "Ζητεῖν πηγὰς βίβλων",
+       "booksources-search": "Ζητεῖν",
        "booksources-invalid-isbn": "Τὸ δοθὲν ISBN προφανῶς ἄκυρον ἐστίν· διεξάγαγε ἔλεγχον περὶ πιθανῶν σφαλμάτων προερχομένων ἐκ τῆς πρωτοτύπου πηγῆς.",
        "specialloguserlabel": "Χρώμενος:",
        "speciallogtitlelabel": "Ἐπιγραφή:",
        "emailsenttext": "Τὸ μήνυμα ἠλ-ταχυδρομείου σου ἐστάλη.",
        "emailuserfooter": "Ἥδε ἡ ἐπιστολὴ ἐστάλη ὑπὸ τοῦ/τῆς $1 εἰς τὸν/τὴν $2 κατὰ τὴν τέλεσιν \"Ἁποστολὴ ἠλ-μηνύματος\" ἐς τὸ {{SITENAME}}.",
        "watchlist": "Τὰ ἐφορώμενά μου",
-       "mywatchlist": "Τὰ á¼\90Ï\86οÏ\81Ï\8eμενά Î¼Î¿Ï\85",
+       "mywatchlist": "Τὰ á¼\90Ï\86οÏ\81Ï\8eμενα",
        "watchlistfor2": "Πρὸς $1 $2",
        "nowatchlist": "Οὐδὲν τεμάχιον ἐν τῇ ἐφοροδιαλογῇ σου.",
        "watchlistanontext": "$1 πρὸ τοῦ ὁρᾶν ἢ τοῦ μεταγράφειν τεμάχια τινὰ ἐν τῇ ἐφοροδιαλογῇ σου.",
        "wlheader-enotif": "Σύστημα εἰδήσεως μέσῳ ἠλ-ἐπιστολῶν ἐνεργόν.",
        "wlnote": "Κατωτέρω {{PLURAL:$1|ἐστὶν ἡ ὑστάτη μεταβολὴ|εἰσὶν αἱ ὑστάται  '''$1'''  μεταβολαὶ}} ἐν {{PLURAL:$2|τῇ ὑστάτῃ μίᾳ ὥρᾳ|ταῖς ὑστάταις '''$2''' ὥραις}}.",
        "wlshowlast": "Ἐμφάνισις τῶν τελευταίων $1 ὡρῶν $2 ἡμερῶν",
-       "watchlistall2": "ἅπασαι",
        "watchlist-options": "Ἐπιλογαὶ ἐφοροδιαλογῆς",
        "watching": "Ἐφορῶν...",
        "unwatching": "Ἀνεφορῶν...",
        "delete-edit-reasonlist": "Μεταγράφειν τὰς αἰτίας διαγραφῆς",
        "rollback": "Ἀναστρέφειν μεταγραφάς",
        "rollbacklink": "ἀναστροφή",
+       "rollbacklinkcount": "ἔπαναφορά $1 {{PLURAL:$1|ἐπεργασίας|ἐπεξεργασιών}}",
        "rollbackfailed": "Ἀναστροφὴ μὴ ἐπιτυχής",
        "cantrollback": "Μὴ δυνατὴ ἡ ἀναστροφὴ·\nὁ ὕστατος ἐρανιστὴς ἐστὶ μόνον δημιουργὸς τῆσδε τῆς δέλτου.",
-       "editcomment": "Ἡ σύνοψις τῆς μεταγραφῆς ἦν: \"''$1''\".",
+       "editcomment": "Ἡ σύνοψις τῆς μεταγραφῆς ἦν: <em>$1</em>.",
        "revertpage": "Ἐπαναφέρειν μεταγραφὰς ὑπὸ [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) εἰς τὴν ἐσχάτην ἔκδοσιν ὑπὸ [[User:$1|$1]]",
        "rollback-success": "Ἀναστρέφειν μεταγραφὰς ὑπὸ $1;\nἐπαναφορὰ εἰς τὴν προτέραν ἔκδοσιν ὑπὸ $2.",
        "protectlogpage": "Κατάλογος προφυλάξεων",
        "undelete-show-file-submit": "Ναί",
        "namespace": "Ὀνοματεῖον:",
        "invert": "Ἀντιστρέφειν ἐπιλογήν",
+       "tooltip-invert": "Σημάνειν ταύτο κυτίον διά αποκρύψειν ἀλλαγάς εἴς τας δελτούς ἐν τὼ εὔρους τού ἐπιλεχθέντος ὀνοματοχώρου (καί τού συσχετισθέντος ὀνοματοχώρου εἰ σημαινόμενον)",
+       "namespace_association": "Σύνοικος ὀνοματοχώρος",
+       "tooltip-namespace_association": "Σημάνειν τούτο κυτίον διά ἐπιπλέον συμπερίληψις τής συζητήσεως ή θέματος ὀνοματοχώρου συσχετιζομένου με τόν ἐπιλεγμένον ὀνοματοχώρον",
        "blanknamespace": "(Κύριον ὀνοματεῖον)",
-       "contributions": "Ἔρανοι χρωμένου",
+       "contributions": "Ἔρανοι {{GENDER:$1|χρωμένου}}",
        "contributions-title": "Ἔρανοι χρωμένου διὰ τὸ $1",
-       "mycontris": "Ὁ ἔρανός μου",
+       "mycontris": "Ἔρανoς",
+       "anoncontribs": "Ἔρανoς",
        "contribsub2": "Πρὸς $1 ($2)",
        "nocontribs": "Οὐδεμία ἀλλαγὴ ηὑρέθη προσήκουσα εἰς τάδε τὰ κριτήρια.",
        "uctop": "(ἄκρον)",
        "importlogpagetext": "Διαχειριστικαὶ εἰσαγωγαὶ δέλτων ἐχουσῶν ἱστορικὸν μεταγραφῶν προερχόμενον ἐξ ἑτέρων βίκι.",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|ἀναθεώρησις|ἀναθεωρήσεις}}",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|ἀναθεώρησις|ἀναθεωρήσεις}} ἐκ τοῦ $2",
-       "tooltip-pt-userpage": "Ἡ δέλτος χρωμένου σου",
+       "tooltip-pt-userpage": "Ἡ δέλτος {{GENDER:|χρωμένου σου}}",
        "tooltip-pt-anonuserpage": "Ἡ δέλτος χρωμένου περὶ τοῦ ip ὅνπερ μεταγράφεις ὡς",
-       "tooltip-pt-mytalk": "Ἡ διάλεξίς σου",
+       "tooltip-pt-mytalk": "Ἡ διάλεξίς {{GENDER:|σου}}",
        "tooltip-pt-anontalk": "Δίαλεξις περὶ τῶν μεταγραφῶν μέσῳ τῆσδε τῆς IP-διευθύνσεως",
-       "tooltip-pt-preferences": "Αἱ προαιρέσεις μου",
+       "tooltip-pt-preferences": "Αἱ προαιρέσεις {{GENDER:|μου}}",
        "tooltip-pt-watchlist": "Κατάλογος τῶν ἐφορωμένων μου",
-       "tooltip-pt-mycontris": "Κατάλογος τῶν ἐράνων σου",
+       "tooltip-pt-mycontris": "Κατάλογος τῶν ἐράνων {{GENDER:|σου}}",
        "tooltip-pt-login": "Ἐπιθυμητὸν τὸ συνδεῖσθαι, οὐχ ὑποχρεωτικόν.",
        "tooltip-pt-logout": "Ἐξέρχεσθαι",
+       "tooltip-pt-createaccount": "Ἐπιθυμητὸν τὸ συνδεῖσθαι, ὅμως, οὐχ ὑποχρεωτικόν",
        "tooltip-ca-talk": "Διάλεξις περὶ τῆς δέλτου",
-       "tooltip-ca-edit": "Ἔξεστί σοι μεταγράφειν τήνδε τὴν δέλτον. Προθεωρεῖν πρὶν ἂν γράφῃς τὴν δέλτον.",
+       "tooltip-ca-edit": "Μεταγράφειν τήνδε τὴν δέλτον",
        "tooltip-ca-addsection": "Ἄρχειν νέον τμῆμα",
        "tooltip-ca-viewsource": "Σῴζεται ἥδε ἡ δέλτος.\nἜξεστί σοι τὴν πηγήν ἐπισκοπεῖν.",
        "tooltip-ca-history": "Προηγούμεναι ἐκδόσεις τῆσδε τῆς δέλτου",
        "tooltip-t-recentchangeslinked": "Πρόσφατοι μεταβολαὶ ἐν δέλτοις συνεζευγμένοις μετὰ τῆσδε τῆς δέλτου",
        "tooltip-feed-rss": "RSS Ῥοὴ διὰ τήνδε δέλτον",
        "tooltip-feed-atom": "Atom Ῥοὴ διὰ τήνδε δέλτον",
-       "tooltip-t-contributions": "Ὁρᾶν τοὺς τοῦδε τοῦ χρωμένου ἐράνους",
+       "tooltip-t-contributions": "Ὁρᾶν τοὺς τοῦδε τοῦ {{GENDER:$1|χρωμένου}} ἐράνους",
        "tooltip-t-emailuser": "Ἠλεκτρονικὴν ἐπιστολὴν τῷδε τῷ χρωμένῳ πέμπειν",
        "tooltip-t-upload": "Φορτία ἐντιθέναι",
        "tooltip-t-specialpages": "Κατάλογος κατὰ πᾶσας τὰς εἰδικὰς δέλτους",
        "tooltip-rollback": "Ἡ \"Ἀναστροφὴ\" ἀναστρέφει τὰς μεταγραφὰς τῆσδε τῆς δέλτου ὑπὸ τοῦ ὑστάτου συμβάλλοντος μέσῳ ἑνὸς κλίκ",
        "tooltip-undo": "Ἡ \"Ἀναίρεσις\" ἀναιρεῖ τήνδε τὴν μεταγραφἢν καὶ ἀνοίγει τὸν τὐπον μεταγραφῆς ἐν καταστάσει προθεωρήσεως.\nἘπιτρέπει τὴν προσθήκην αἰτιολογίας ἐν τῇ συνόψει",
        "tooltip-preferences-save": "Τιθέναι τὰς προαιρέσεις",
+       "tooltip-summary": "Ἀπεργάζεσθαι μικρά σύνοψις.",
        "anonymous": "{{PLURAL:$1|Ἀνώνυμος χρώμενος|Ἀνώνυμοι χρώμενοι}} τῷ {{SITENAME}}",
        "siteuser": "Χρώμενος τῷ {{SITENAME}} $1",
        "anonuser": "ἀνώνυμος χρώμενος $1 τοῦ {{SITENAME}}",
        "nocredits": "Οὐδεμία πύστις περὶ πιστώσεως ἐράνου ἐν τῇδε τῇ δέλτῳ ἐστίν.",
        "spamprotectiontitle": "Διηθητήριον ἀνεπιθυμήτων ἀγγελιῶν",
        "spambot_username": "Κάθαρσις τῶν ἀνεπιθυμήτων ἀγγελιῶν τῆς MediaWiki",
+       "simpleantispam-label": "Ἔλεγχος ἄντι-spam\n<strong>Οὔ</strong> συμπληρώσετε ταύτο!",
        "pageinfo-title": "Πύστις περὶ \"$1\"",
        "pageinfo-header-edits": "Μεταγραφαί",
        "pageinfo-edits": "Ἀριθμὸς μεταγραφῶν",
+       "pageinfo-toolboxlink": "Μάθησις δέλτου",
        "markaspatrolleddiff": "Σεσημασμένη ὡς φρουρουμένη",
        "markaspatrolledtext": "Σημαίνειν τήνδε τὴν δέλτον ὡς φρουρούμενη",
        "markedaspatrolled": "Σεσημασμένη ὡς φρουρουμένη",
        "file-info-size": "$1 × $2 εἰκονοστοιχεῖα, μέγεθος ἀρχείου: $3, τύπος MIME: $4",
        "file-nohires": "Οὐ διατίθεται ὑψηλοτέρα ἀνάλυσις.",
        "svg-long-desc": "ἀρχεῖον SVG, ὀνομαστὶ $1 × $2 εἰκονοστοιχεῖα, μέγεθος ἀρχείου: $3",
-       "show-big-image": "Πλήρης ἀνάλυσις",
+       "show-big-image": "Ἔξ ἀρχῆς αρχείον",
+       "show-big-image-preview": "Μέγεθος προεπισκοπήσεως ταύτης: $1",
+       "show-big-image-other": "Ἔτερον/α {{PLURAL:$2|δόγμα|δόγματα}}: $1.",
        "show-big-image-size": "$1 × $2 εἰκονοστοιχεία",
        "file-info-gif-looped": "ἄπειρος βρόγχος",
        "file-info-gif-frames": "$1 {{PLURAL:$1|πλαίσιον|πλαίσια}}",
        "sp-newimages-showfrom": "Δεῖξις νέων ἀρχείων ἀρχομένη ἐκ $2, $1",
        "bad_image_list": "Ἡ μορφοποιία ὡς ἑξῆς ἐστίν:\n\nΜόνον ἀντικείμενα διαλογῆς (γραμμαὶ ἐκκινούμεναι μετὰ τοῦ *) δεκτὰ εἰσίν.\nὉ πρῶτος σύνδεσμος ἐν πάσῃ γραμμῇ ὀφείλει εἶναι σύνδεσμος πρὸς κακὸν ἀρχεῖόν τι.\nΟἷοι δήποτε ἐπακόλουθοι σύνδεσμοι ἐν τῇ αὐτῇ γραμμῇ θεωρούμενοι ὡς ἐξαιρέσεις εἰσίν, δῆλα δὴ δέλτοι ὅπου τὸ ἀρχεῖον φανῆναι ἐν συνδέσει δύναται.",
        "metadata": "Μεταδεδομένα",
-       "metadata-help": "ΤÏ\8cδε á¼\80Ï\81Ï\87εá¿\96ον Ï\80εÏ\81ιέÏ\87ει Ï\80Ï\81οÏ\83θέÏ\84οÏ\85Ï\82 Ï\80ληÏ\81οÏ\86οÏ\81ίαÏ\82, Ï\80ιθανῶÏ\82 Ï\80Ï\81οÏ\83Ï\84εθειμέναÏ\82 á¼\90κ Ï\84á¿\86Ï\82 Ï\88ηÏ\86ιακá¿\86Ï\82 Ï\86Ï\89Ï\84ογÏ\81αÏ\86ικá¿\86Ï\82 Î¼Î·Ï\87ανá¿\86Ï\82 á¼¢ Ï\84οῦ Ï\83αÏ\81Ï\89Ï\84οῦ Ï\87Ï\81ηÏ\83θένÏ\84οÏ\82 Ï\84á¿\87 Î´Î·Î¼Î¹Î¿Ï\85Ï\81γίᾳ á¼¢ Ï\84á¿\87 Ï\88ηÏ\86ιοÏ\80οιήÏ\83ει Î±á½\90Ï\84οῦ. Î\95á¼° Ï\84ὸ á¼\80Ï\81Ï\87εá¿\96ον á¼¤Î»Î»Î±ÎºÏ\84αι á¼\90κ Ï\84á¿\86Ï\82 á¼\91á¿\86Ï\82 á¼\80Ï\81Ï\87ικῆς καταστάσεως, ἀκρίβειαί τινες πιθανῶς μὴ πλήρως τὸ ἠλλαγμενον ἀρχεῖον ἀνακλοῦσιν.",
+       "metadata-help": "ΤÏ\8cδε á¼\80Ï\81Ï\87εá¿\96ον Ï\80εÏ\81ιέÏ\87ει Ï\80Ï\81οÏ\83θέÏ\84οÏ\85Ï\82 Ï\80ληÏ\81οÏ\86οÏ\81ίαÏ\82, Ï\80ιθανῶÏ\82 Ï\80Ï\81οÏ\83Ï\84εθειμέναÏ\82 á¼\90κ Ï\84á¿\86Ï\82 Ï\88ηÏ\86ιακá¿\86Ï\82 Ï\86Ï\89Ï\84ογÏ\81αÏ\86ικá¿\86Ï\82 Î¼Î·Ï\87ανá¿\86Ï\82 á¼¢ Ï\84οῦ Ï\83αÏ\81Ï\89Ï\84οῦ Ï\87Ï\81ηÏ\83θένÏ\84οÏ\82 Ï\84á¿\87 Î´Î·Î¼Î¹Î¿Ï\85Ï\81γίᾳ á¼¢ Ï\84á¿\87 Ï\88ηÏ\86ιοÏ\80οιήÏ\83ει Î±á½\90Ï\84οῦ. Î\95á¼° Ï\84ὸ á¼\80Ï\81Ï\87εá¿\96ον á¼¤Î»Î»Î±ÎºÏ\84αι á¼\90κ Ï\84á¿\86Ï\82 á¼\91á¿\86Ï\82 á¼\90ξ á¼\80Ï\81Ï\87ῆς καταστάσεως, ἀκρίβειαί τινες πιθανῶς μὴ πλήρως τὸ ἠλλαγμενον ἀρχεῖον ἀνακλοῦσιν.",
        "metadata-expand": "Δηλοῦν τὰς ἀκριβείας",
        "metadata-collapse": "Κρύπτειν τὰς ἀκριβείας",
-       "metadata-fields": "Τὰ πεδία μεταδεδομένων EXIF τοῦδε τοῦ μηνύματος περιλήψονται ἐν τῇ δέλτῳ ἐμφανίσεως εἰκόνος ὁπηνίκα ὁ πίναξ μεταδεδομένων ἀποκρύψηται. Τὰ ἕτερα πεδία ἔσονται κεκρυμμένα κατὰ προεπιλογήν.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-fields": "Τὰ πεδία μεταδεδομένων τοῦδε τοῦ μηνύματος περιλήψονται ἐν τῇ δέλτῳ ἐμφανίσεως εἰκόνος ὁπηνίκα ὁ πίναξ μεταδεδομένων ὀρατός. Τὰ ἕτερα πεδία ἔσονται κεκρυμμένα κατὰ προεπιλογήν.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-imagewidth": "Πλάτος",
        "exif-imagelength": "Ὕψος",
        "exif-bitspersample": "Δυφία ἀνὰ συνιστῶσαν",
        "watchlisttools-view": "Ὁρᾶν τὰς συναφεῖς μεταβολὰς",
        "watchlisttools-edit": "Ὁρᾶν τε καὶ μεταγράφειν τὰ ἐφορωμένα",
        "watchlisttools-raw": "Μεταγράφειν τὸν πρωτογενῆ κατάλογον ἐφορωμένων",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|διαλέγεσθαι]])",
        "duplicate-defaultsort": "Eἴδησις: Ἡ προκαθωρισμένη κλεὶς ταξινομήσεως \"$2\" ὑπερκαλύπτει προηγουμένην προκαθωρισμένην κλεῖδα ταξινομήσεως \"$1\".",
        "version": "Ἐπανόρθωμα",
        "version-extensions": "Ἐγκατεστημέναι ἐπεκτάσεις",
        "specialpages-note": "* Κανονικαὶ εἰδικαὶ δέλτοι.\n* <strong class=\"mw-specialpagerestricted\">Περιωρισμέναι εἰδικαὶ δἐλτοι.</strong>\n* <span class=\"mw-specialpagecached\">Μόναι δέλτοι ἀποτεταμιευμέναι.</span>",
        "specialpages-group-maintenance": "Ἀναφοραὶ συντηρήσεως",
        "specialpages-group-other": "Ἕτεραι εἰδικαὶ δέλτοι",
-       "specialpages-group-login": "Συνδεῖσθαι / ἐγγράφεσθαι",
+       "specialpages-group-login": "Συνδεῖσθαι/λογισμὸν ποιεῖν",
        "specialpages-group-changes": "Πρόσφατοι ἀλλαγαὶ καὶ κατάλογοι",
        "specialpages-group-media": "Ἀναφοραὶ μέσων καὶ ἐπιφορτίσεις",
        "specialpages-group-users": "Χρώμενοι καὶ δικαιώματα",
        "tags": "Ἔγκυρα προσαρτήματα μεταβολῆς",
        "tag-filter": "Διηθητήριον [[Special:Tags|προσαρτήματος]]:",
        "tag-filter-submit": "Διηθητήριον",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Ἐτικέτα|Ἐτικέται}}]]: $2)",
        "tags-title": "Προσαρτήματα",
        "tags-intro": "Ἥδε ἡ δέλτος προσαρτήματα συγκαταλέγει (οἷσπερ ἔξεστι τῷ λογισμικῷ χρῆσθαι πρὸς τὸ σημαίνειν μεταγραφὴν τινά) καὶ τὴν νοηματικὴν σήμανσιν σφῶν.",
        "tags-tag": "ὄνομα προσαρτήματος",
        "htmlform-submit": "Ὑποβάλλειν",
        "htmlform-reset": "Ἀναστρέφειν μεταβολάς",
        "htmlform-selectorother-other": "Ἄλλον",
+       "logentry-delete-delete": "$1 {{GENDER:$2|διαγεγραμμένη}} δέλτος $3",
        "revdelete-restricted": "ἐφηρμοσμένοι περιορισμοὶ διὰ τοὺς ἐπιτρόπους",
        "revdelete-unrestricted": "αἱρεθέντες περιορισμοὶ διὰ τοὺς ἐπιτρόπους",
+       "logentry-move-move": "$1 {{GENDER:$2|μετακίνησης}} δέλτου $3 στήν $4",
+       "logentry-newusers-create": "Ὀ λογισμός χρώμενου $1 {{GENDER:$2|created}} ἐποιεῖθηκε",
+       "logentry-upload-upload": "$1 {{GENDER:$2|μεταφόρτωσε}} $3",
        "rightsnone": "(Οὐδέν)",
        "revdelete-summary": "σύνοψις μεταγραφῶν",
        "feedback-cancel": "Ἀκυροῦν",
index 936af3f..77cfb9e 100644 (file)
        "myprivateinfoprotected": "Du derfsch Dyni privaten Informatione nit bearbeite.",
        "mypreferencesprotected": "Du derfsch Dyni Yystellige nit bearbeite.",
        "ns-specialprotected": "Spezialsyte chenne nid bearbeitet wäre.",
-       "titleprotected": "E Syte mit däm Name cha nid aaglait wäre.\nDie Sperri isch dur [[User:$1|$1]] yygrichtet wore mit dr Begrindig ''„$2“''.",
+       "titleprotected": "E Syte mit däm Name cha nid aaglait wäre.\nDie Sperri isch dur [[User:$1|$1]] yygrichtet wore mit dr Begrindig <em>$2</em>.",
        "filereadonlyerror": "D Datei „$1“ cha nit gänderet wäre, wel uf s Dateirepositorium „$2“ nume Läsezuegriff megli isch.\n\nDr Administrator, wu dr Schrybzuegriff gsperrt het, het dää Grund aagee: „$3“.",
        "invalidtitle-knownnamespace": "Nit-gültige Titel mit Namensruum „$2“ un Text „$3“",
        "invalidtitle-unknownnamespace": "Ungültige Titel mit unbekannte Namensruumnummer $1 un Text „$2“",
        "undo-summary-username-hidden": "Änderig $1 vun eme versteckte Benutzer ruckgängig gmacht.",
        "cantcreateaccounttitle": "Benutzerkonto cha nid aagleit wäre.",
        "cantcreateaccount-text": "S Aalege vu me Benutzerkonto vu dr IP-Adräss '''($1)''' isch dur [[User:$3|$3]] gsperrt wore.\n\nGrund vu dr Sperri: ''$2''",
-       "cantcreateaccount-range-text": "S Aalege vu Benutzerkonte vu IP-Adrässen im Berych '''$1''', wu s Dyni IP-Adräss ('''$4''') din het, isch vu [[User:$3|$3]] gsperrt wore.\n\nDr Grund, wu vu $3 aagee woren isch: ''$2''",
+       "cantcreateaccount-range-text": "S Aalege vu Benutzerkonte vu IP-Adrässen im Berych <strong>$1</strong>, wu s Dyni IP-Adräss (<strong>$4</strong>) din het, isch vu [[User:$3|$3]] gsperrt wore.\n\nDr Grund, wu vu $3 aagee woren isch: <em>$2</em>",
        "viewpagelogs": "Logbüecher für die Syten azeige",
        "nohistory": "S git kei Versionsgschicht fir die Syte.",
        "currentrev": "Itzigi Version",
        "recentchanges-label-bot": "Die Bearbeitig isch dur e Bott uusgfiert wore",
        "recentchanges-label-unpatrolled": "Die Bearbeitig isch nonig vun eme Fäldhieter aagluegt wore",
        "recentchanges-label-plusminus": "Di gänderet Sytegreßi (Aazahl in Byte)",
-       "recentchanges-legend-heading": "'''Legänd:'''",
+       "recentchanges-legend-heading": "<strong>Legänd:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (lueg au d [[Special:NewPages|Lischt vu neie Syte]])",
        "rcnotefrom": "Azeigt {{PLURAL:$5|isch d Änderig|sy maximal <strong>$1</strong> Änderige}} syt <strong>$3, $4</strong>.",
        "rclistfrom": "Nume Änderige syt $3, $2 Uhr zeige.",
        "upload-dialog-button-done": "Fertig",
        "upload-dialog-button-save": "Spychere",
        "upload-dialog-button-upload": "Ufelade",
-       "upload-form-label-select-file": "Datei ussueche",
        "upload-form-label-infoform-title": "Details",
        "upload-form-label-infoform-name": "Name",
        "upload-form-label-infoform-description": "Beschrybig",
        "rollbackfailed": "S Zrucksetze het nit funktioniert",
        "cantrollback": "D Änderig cha nit zruckgsetzt wäre, wel s keini friejere Autore git.",
        "alreadyrolled": "Cha d Änderig uf [[:$1]] wu vu [[User:$2|$2]] ([[User talk:$2|Diskussion]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) gmacht wore sin, zruckneh, wel e andere Benutzer in dr Zwischenzyt s scho zruckgsetzt het oder suscht ebis an däre Syte gänderet het.\n\nDi letscht Änderig het [[User:$3|$3]] ([[User talk:$3|Diskussion]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) gmacht.",
-       "editcomment": "D Änderigszämmefassig isch: „''$1''“.",
+       "editcomment": "D Änderigszämmefassig isch: <em>$1</em>.",
        "revertpage": "Ruckgängig gmacht zue dr letschte Änderig vo [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussion]]) mit de letzte Version vo [[User:$1|$1]] widerhergstellt",
        "revertpage-nouser": "Bearbeitige ruckgängig gmacht vu (Benutzername uusegnuu), letschti Fassig vu {{GENDER:$1|[[User:$1|$1]]}} widerhärgstellt",
        "rollback-success": "D Änderige vu $1 sin ruckgängig gmacht wore un di letscht Version vu $2 isch widerhärgstellt wore.",
        "default-skin-not-found": "He nu so de! Di vorygstellti Benutzeroberflächi für dys Wiki – definiert under <code dir=\"ltr\">$wgDefaultSkin</code> als <code>$1</code> – steit nid zur Verfüegig.\n\nI dyren Installation het’s schynt’s di {{PLURAL:$4|folgendi Benutzeroberflächi|folgende Benutzeroberflächine}}:\n\n$2\n\nLueg under [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] für Information drüber, wie d’se chasch {{PLURAL:$4|aktiviere|aktivieren und eini dervo chasch vorystelle}}.\n\n; Falls du MediaWiki grad installiert hesch:\n: Müglecherwys hesch es ab git installiert oder mit eren andere Methode diräkt ab em Quellcode. De isch es z erwarte. Probier [https://www.mediawiki.org/wiki/Category:All_skins Benutzeroberflächine us em Verzeichnis vo mediawiki.org] z installiere. Es git mehreri Müglechkeite derzue:\n:* Der [https://www.mediawiki.org/wiki/Download Installierer als tar.gz-Datei] abelade. Är het mehreri Benutzeroberflächinen und Erwyterige derby. Du chasch ds Benutzeroberflächine-Verzeichnis <code>skins/</code> druus use kopiere.\n:* tar.gz-Dateie für einzelni Benutzeroberflächine vo [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] abelade.\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Git zum Abelade vo MediaWiki-Benutzeroberflächine bruuche].\n: We du e MediaWiki-Entwickler/in bisch, söt’s derby nid zu Konflikte mit dym git repository cho.\n\n; Falls du MediaWiki grad ufe nöüst Stand hesch ’bracht:\n: MediaWiki ab 1.24 aktiviert di installierte Benutzeroberflächine nümm automatisch (lueg [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Für di {{PLURAL:$5|installierti Benutzeroberflächi|installierte Benutzeroberflächine}} z aktiviere, chasch di {{PLURAL:$5|folgendi Zyle|folgende Zyle}} i d Datei <code>LocalSettings.php</code> kopiere:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Falls du grad d Datei <code>LocalSettings.php</code> hesch g’änderet:\n: Lueg genau nache, öb’s vilech Tippfähler het i de Näme vo de Benutzeroberflächine.",
        "default-skin-not-found-no-skins": "He nu so de! Di vorygstellti Benutzeroberflächi für dys Wiki – definiert under <code dir=\"ltr\">$wgDefaultSkin</code> als <code>$1</code> – steit nid zur Verfüegig.\n\nDu hesch kener Benutzeroberflächinen installiert.\n\n; Falls du MediaWiki grad installiert oder ufe nöüst Stand ’bracht hesch:\n: Müglecherwys hesch es ab git installiert oder mit eren andere Methode diräkt ab em Quellcode. De isch es z erwarte. MediaWiki ab 1.24 het kener Benutzeroberflächinen im Houpt-Repository derby. Probier [https://www.mediawiki.org/wiki/Category:All_skins Benutzeroberflächine us em Verzeichnis vo mediawiki.org] z installiere. Es git mehreri Müglechkeite derzue:\n:* Der [https://www.mediawiki.org/wiki/Download Installierer als tar.gz-Datei] abelade. Är het mehreri Benutzeroberflächinen und Erwyterige derby. Du chasch ds Benutzeroberflächine-Verzeichnis <code>skins/</code> druus use kopiere.\n:* tar.gz-Dateie für einzelni Benutzeroberflächine vo [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] abelade.\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Git zum Abelade vo MediaWiki-Benutzeroberflächine bruuche].\n: We du e MediaWiki-Entwickler/in bisch, söt’s derby nid zu Konflikte mit dym Git-Repository cho. Lueg under [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] für Information drüber, wie du Benutzeroberflächi chasch aktivieren und vorystelle.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiviert)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''deaktiviert''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>deaktiviert</strong>)",
        "mediastatistics": "Statistike zu Dateitype",
        "mediastatistics-summary": "Statistiken über di ufegladnige Dateitype. Berücksichtiget isch jewyle nume di nöüsti Version von ere Datei. Alti oder glöschti Versione sy nid berücksichtiget.",
        "mediastatistics-nbytes": "{{PLURAL:$1|Eis|$1}} Byte ($2; $3 %)",
index 6b75f8f..804c4f9 100644 (file)
        "morenotlisted": "આ યાદી પૂર્ણ નથી.",
        "mypage": "પાનું",
        "mytalk": "ચર્ચા",
-       "anontalk": "àª\86 IP àª®àª¾àª\9fà«\87નà«\81àª\82 àª\9aરà«\8dàª\9aા àªªàª¾àª¨à«\81àª\82",
+       "anontalk": "àª\9aરà«\8dàª\9aા",
        "navigation": "ભ્રમણ",
        "and": "&#32;અને",
        "qbfind": "શોધો",
        "myprivateinfoprotected": "તમને તમારી અંગત માહિતીમાં ફેરફાર કરવાની પરવાનગી નથી.",
        "mypreferencesprotected": "તમને તમારી પ્રાથમિકતાઓમાં ફેરફાર કરવાની પરવાનગી નથી.",
        "ns-specialprotected": "ખાસ પાનાંમાં ફેરફાર ન થઇ શકે.",
-       "titleprotected": "આ મથાળું (વિષય) [[User:$1|$1]] બનાવવા માટે સુરક્ષિત કરવામાં આવ્યો છે.\nઆ માટેનું કારણ છે-- \"''$2''\".",
+       "titleprotected": "આ મથાળું (વિષય) [[User:$1|$1]] બનાવવા માટે સુરક્ષિત કરવામાં આવ્યો છે.\nઆ માટેનું કારણ છે-- <em>$2</em>.",
        "invalidtitle-knownnamespace": "નામસ્થળ \"$2\" અને લખાણ \"$3\" સાથે અમાન્ય મથાળું",
        "invalidtitle-unknownnamespace": "અજ્ઞાત નામસ્થળ ક્રમાંક $1 અને નામ \"$2\" વાળું અમાન્ય મથાળું",
        "exception-nologin": "પ્રવેશ કરેલ નથી",
        "createacct-reason": "કારણ",
        "createacct-reason-ph": "તમે કેમ બીજું ખાતું બનાવો છો",
        "createacct-submit": "તમારું ખાતું બનાવો",
-       "createacct-another-submit": "બà«\80àª\9cà«\81àª\82 àª\96ાતà«\81àª\82 àª¬àª¨àª¾àªµà«\8b",
+       "createacct-another-submit": "ખાતું બનાવો",
        "createacct-benefit-heading": "{{SITENAME}} એ તમારા જેવા લોકોએ બનાવેલ છે.",
        "createacct-benefit-body1": "{{PLURAL:$1|ફેરફાર|ફેરફારો}}",
        "createacct-benefit-body2": "{{PLURAL:$1|પાનું|પાનાં}}",
        "sig_tip": "સમયછાપ સાથે તમારા હસ્તાક્ષર",
        "hr_tip": "આડી લીટી (શક્ય તેટલો ઓછો ઉપયોગ કરો)",
        "summary": "સારાંશ:",
-       "subject": "વિષય/શીર્ષક:",
+       "subject": "વિષય:",
        "minoredit": "આ એક નાનો સુધારો છે",
        "watchthis": "આ પાનાને ધ્યાનમાં રાખો",
        "savearticle": "પાનું સાચવો",
        "recentchanges-label-bot": "આ ફેરફાર બોટ દ્વારા કરાયો છે",
        "recentchanges-label-unpatrolled": "આ ફેરફાર હજી ચકાસાયો નથી",
        "recentchanges-label-plusminus": "પાનાનું કદ આપેલા અંકો જેટલાં બાઈટ્સ જેટલું બદલ્યુ છે.",
-       "recentchanges-legend-heading": "'''કળ:'''",
+       "recentchanges-legend-heading": "<strong>કળ:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|નવા પાનાઓની યાદી]] પણ જુઓ)",
        "rcnotefrom": "નીચે <strong>$2</strong> થી ફેરફારો દર્શાવેલ છે (<strong>$1</strong> સુધી દર્શાવલે છે).",
        "rclistfrom": "$3 $2 બાદ થયેલા નવા ફેરફારો બતાવો",
        "upload-dialog-button-done": "સંપન્ન",
        "upload-dialog-button-save": "સાચવો",
        "upload-dialog-button-upload": "ચઢાવો",
-       "upload-form-label-select-file": "ફાઈલ પસંદ કરો",
        "upload-form-label-infoform-title": "વિગતો",
        "upload-form-label-infoform-name": "નામ",
        "upload-form-label-infoform-description": "વર્ણન",
        "apihelp-no-such-module": "સાધન જૂથ \"$1\" ન મળ્યું.",
        "apisandbox-submit": "વિનંતી કરો",
        "apisandbox-reset": "સાફ કરો",
-       "apisandbox-examples": "ઉદાહરણ",
-       "apisandbox-results": "પરિણામ",
+       "apisandbox-examples": "ઉદાહરણ",
+       "apisandbox-results": "પરિણામ",
        "booksources": "પુસ્તક સ્રોત",
        "booksources-search-legend": "પુસ્તક સ્રોત શોધો",
        "booksources-isbn": "આઇએસબીએન:",
        "rollbackfailed": "ઉલટાવવું નિષ્ફળ",
        "cantrollback": "આ ફેરફારો ઉલટાવી નહી શકાય\nછેલ્લો ફેરફાર આ પાના ના રચયિતા દ્વારા જ થયો હતો",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) દ્વારા થયેલ[[:$1]]ના  ફેરફારો ઉલટાવી ન શકાયા;\nકોઇક અન્ય સભ્યએ આ પાનાપર ફેરફાર કરી દીધા છે.\n\nઆ પાના પર ના છેલ્લા ફેરફારો [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) દ્વારા કરવામાં આવ્યાં હતાં.",
-       "editcomment": "ફેરફાર સારાંશ હતી: \"''$1''\".",
+       "editcomment": "ફેરફાર સારાંશ હતી: <em>$1</em>.",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|talk]]) દ્વારા કરેલ ફેરફારોને  [[User:$1|$1]] દ્વારા કરેલા છેલ્લા સુધારા સુધી ઉલટાવાયા.",
        "revertpage-nouser": "ગુપ્ત સભ્ય વડે કરાયેલ ફેરફારને {{GENDER:$1|[[User:$1|$1]]}} વડે કરેલ છેલ્લા પુનરાવર્તન પર પાછા લઇ જવાયું.",
        "rollback-success": "$1 દ્વારા થયેલા ફેરફારો ઉલટાવાયા\nતેને $2 દ્વારા થયેલ સંપાદન સુધી લઇ જવાયું",
        "movenotallowedfile": "તમને ફાઈલ ખસેડવાની પરવાનગી નથી.",
        "cant-move-user-page": "તમને સભ્ય પાના હટાવવાની પરવાનગી નથી (ઉપપાના સિવાય).",
        "cant-move-to-user-page": "તમને   કોઇ પાનાને સભ્ય પાનામાં ખસેડવાની પ્રવાનગી નથી (સિવાય કે સભ્ય ઉપપાના)",
-       "newtitle": "àª\86 àª¨àªµà«\81àª\82 àª¨àª¾àª® àª\86પà«\8b:",
+       "newtitle": "નવà«\81àª\82 àª¶à«\80રà«\8dષàª\95:",
        "move-watch": "આ પાનું ધ્યાનમાં રાખો",
        "movepagebtn": "પાનું ખસેડો",
        "pagemovedsub": "પાનું સફળતા પૂર્વક ખસેડવામાં આવ્યું છે",
        "tooltip-feed-rss": "આ પાના માટે આર.એસ.એસ. ફીડ",
        "tooltip-feed-atom": "આ પાના માટે એટમ ફીડ",
        "tooltip-t-contributions": "{{GENDER:$1|આ સભ્ય}} વડે કરાયેલા યોગદાનોની યાદી",
-       "tooltip-t-emailuser": "આ સભ્યને ઇ-મેલ મોકલો",
+       "tooltip-t-emailuser": "{{GENDER:$1|આ સભ્ય}}ને ઇમેલ મોકલો",
        "tooltip-t-info": "આ પાનાં વિષે વધુ માહિતી",
        "tooltip-t-upload": "ફાઇલ ચડાવો",
        "tooltip-t-specialpages": "બધા ખાસ પાનાંઓની યાદી",
        "expand_templates_ok": "મંજૂર",
        "expand_templates_remove_comments": "ટીપ્પણીઓ દૂર કરો",
        "expand_templates_preview": "પૂર્વાવલોકન",
-       "pagelanguage": "પાનાની ભાષાનો ચયનકર્તા",
+       "pagelanguage": "પાનાની ભાષા બદલો",
        "pagelang-name": "પાનું",
        "pagelang-language": "ભાષા",
        "pagelang-use-default": "(મૂળભુત ભાષા)",
        "action-pagelang": "પાનાની ભાષા બદલો",
        "log-name-pagelang": "ભાષા બદલો",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (સક્રિય)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''નિષ્ક્રિય''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>નિષ્ક્રિય</strong>)",
        "mediastatistics-table-mimetype": "MIME પ્રકાર",
        "mediastatistics-table-count": "ફાઇલ્સની સંખ્યા",
        "mediastatistics-header-unknown": "અજ્ઞાત",
index 8c2d845..679b35a 100644 (file)
@@ -6,7 +6,8 @@
                        "MacTire02",
                        "Shimmin Beg",
                        "아라",
-                       "Xð"
+                       "Xð",
+                       "Macofe"
                ]
        },
        "tog-underline": "Cur linnaghyn fo chianglaghyn:",
        "passwordreset-username": "Dt'ennym ymmydeyr:",
        "passwordreset-email": "Enmys post-L:",
        "passwordreset-emailelement": "Ennym ymmydeyr: \n$1\n\nFockle arrey shallidagh: \n$2",
-       "passwordreset-emailsent": "Ta post-l cur gys cooinaghtyn er ny chur dhyt.",
+       "passwordreset-emailsentemail": "Ta post-l cur gys cooinaghtyn er ny chur dhyt.",
        "passwordreset-emailsent-capture": "Ta post-l cur gys cooinaghtyn er ny chur dhyt, as eshyn heese.",
        "passwordreset-emailerror-capture": "Ta post-l cur gys cooinaghtyn er ny chur dhyt, as eshyn heese, agh cha rosh eh yn ymmydeyr: $1",
        "changeemail-none": "(gyn)",
        "deletereasonotherlist": "Fa elley",
        "deletereason-dropdown": "*Fa scryssey cadjin\n** Aghin yn ughtar\n** Brishey choip-chiart\n** Cragheydys",
        "rollbacklink": "aahogher",
-       "editcomment": "V'eh \"''$1''\" giare-choontys y reaghey.",
+       "editcomment": "V'eh <em>$1</em> giare-choontys y reaghey.",
        "protectlogpage": "Lioar choadee",
        "protectedarticle": "\"[[$1]]\" glast",
        "modifiedarticleprotection": "er gaghlaa keim coadee \"[[$1]]\"",
        "move-page-legend": "Duillag y scughey",
        "movepagetext": "Ta'n form heese lhiggey dhyt duillag y aa-enmys, as y shennaghys echey y scughey dys yn ennym noa.\nHig y shenn ennym y ve duillag aastiurey dys yn ennym noa.\nMy ta aastiuraghyn ayn hannah dys y shenn ennym, foddee oo adsyn y chaghlaa dy seyr-obbragh.  Mannagh nee oo shen, jean shickyr dy hirrey er [[Special:DoubleRedirects|dooble-aastiuraghyn]] as [[Special:BrokenRedirects|aastiuraghyn brishtey]].\nT'eh ort y yannoo shickyr dy bee kianglaghyn kiangley rish y dean kiart foast.\n\nGow tashtey '''nagh''' jed y duillag er scughey my ta duillag ayn as yn ennym noa echey hannah, '''mannagh''' nee duillag follym ny aastiurey t'ayn gyn shennaghys reaghey erbee.\nMyr shen, foddee oo duillag y chur erash 'syn chenn ynnyd echey my nee uss marrantys, as cha nod oo screeu harrish duillag t'ayn hannah.\n\n'''Raaue!'''\nShe caghlaa trome as doaltattym t'ayn er son duillag mie er enney.  Jean shickyr dy vel oo toiggal ny h-eiyrtyssyn roish my nee uss y caghlaa shoh.",
        "movepagetalktext": "Hed y duillag resooney eck er scughey lesh y duillag hene '''mannagh:'''\n*Vel duillag resooney ayn nagh vel follym as yn ennym noa er;\n*Nee uss jee-reih y kishtey heese.\n\nFoddee oo y duillag resooney y scughey er lheh ny yei shen.",
-       "movearticle": "Duillag y scughey:",
        "newtitle": "Gys ard-ennym noa:",
        "move-watch": "Freill arrey er y duillag shoh",
        "movepagebtn": "Yn duillag y scughey",
        "movelogpage": "Scugh y Lioar chooishyn",
        "movereason": "Fa:",
        "revertmove": "cur er ash",
-       "delete_and_move": "Scryss as scughey",
        "delete_and_move_confirm": "Ta, scryss magh y duillag",
        "export": "Assphurtal duillagyn",
        "export-submit": "Assphurtal",
index cc4438c..9f3e157 100644 (file)
@@ -14,7 +14,8 @@
                        "Impersonator 1",
                        "LNDDYL",
                        "唐吉訶德的侍從",
-                       "飞舞回堂前"
+                       "飞舞回堂前",
+                       "Macofe"
                ]
        },
        "tog-underline": "鏈接加底線:",
        "myprivateinfoprotected": "汝無權限編輯汝个個人信息。",
        "mypreferencesprotected": "汝無權限編輯汝个個人設定。",
        "ns-specialprotected": "邇兜特殊頁面係毋做得編輯嘅。",
-       "titleprotected": "邇隻標題已經分[[User:$1|$1]]保護來防止建立。理由係''$2''。",
+       "titleprotected": "邇隻標題已經分[[User:$1|$1]]保護來防止建立。理由係<em>$2</em>。",
        "filereadonlyerror": "無辦法修改文件「$1」因為文件庫「$2」處於唯讀模式。 !\n管理員鎖定其嘅解釋係:「$3」。",
        "invalidtitle-knownnamespace": "使用名字空間「$2」與文本「$3」嘅無效標題",
        "invalidtitle-unknownnamespace": "使用未知名字空間編號$1與文本“$2”嘅無效標題",
        "rollbackfailed": "無法倒轉頭",
        "cantrollback": "編寫無法打轉頭;最後嘅貢獻者人本文嘅唯一作者。",
        "alreadyrolled": "Mò-fap fî-fu̍k yù [[User:$2|$2]] ([[User talk:$2|thó-lun]]) chin-hàng ke [[$1]] ke chui-heu phiên-si̍p; khì-thâ ngìn yí-kîn phiên-siá fe̍t-he fî-fu̍k liáu ke-hong. Chui-heu phiên-si̍p-chá: [[User:$3|$3]] ([[User talk:$3|Thó-lun]])。",
-       "editcomment": "Phiên-siá sot-mìn he: \"''$1''\"。",
+       "editcomment": "Phiên-siá sot-mìn he: <em>$1</em>。",
        "revertpage": "Fî-fu̍k yù [[Special:Contributions/$2|$2]] ([[User talk:$2|tui-fa]]) ke phiên-cho; kiên-kói fì-fu̍k [[User:$1|$1]] ke chui-heu yit-ke pán-pún",
        "sessionfailure": "汝嘅登入會話好像有問題;\n為到防止會話劫持,邇次操作已經畀取消。\n請轉到先前嘅頁面,重新載入邇頁面,然後重試。",
        "protectlogpage": "保護日誌",
index dbd0314..3ae47f8 100644 (file)
        "myprivateinfoprotected": "אין לך הרשאה לערוך את המידע הפרטי שלך",
        "mypreferencesprotected": "אין לך הרשאה לערוך את ההעדפות שלך.",
        "ns-specialprotected": "לא ניתן לערוך דפים מיוחדים.",
-       "titleprotected": "[[User:$1|$1]] {{GENDER:$1|הפעיל|הפעילה}} הגנה על הדף הזה מפני יצירה.\nהסיבה שניתנה לכך היא \"<em>$2</em>\".",
+       "titleprotected": "[[User:$1|$1]] {{GENDER:$1|הפעיל|הפעילה}} הגנה על הדף הזה מפני יצירה.\nהסיבה שניתנה לכך היא <em>$2</em>.",
        "filereadonlyerror": "לא ניתן לשנות את הקובץ \"$1\" כיוון שמאגר הקבצים \"$2\" במצב קריאה בלבד.\n\nמנהל המערכת שנעל את המאגר סיפק את ההסבר הבא: \"'''$3'''\".",
        "invalidtitle-knownnamespace": "כותרת בלתי־תקינה עם מרחב השם \"$2\" ושם דף \"$3\"",
        "invalidtitle-unknownnamespace": "כותרת בלתי־תקינה עם מרחב שם בלתי־ידוע מספר $1 ושם דף \"$2\"",
        "nocookieslogin": "{{SITENAME}} משתמש בעוגיות כדי להכניס משתמשים למערכת.\nבדפדפן שלכם העוגיות מבוטלות.\nאנא הפעילו אותן מחדש ונסו שוב.",
        "nocookiesfornew": "חשבון המשתמש לא נוצר, כיוון שלא יכולנו לוודא את מקורו.\nודאו שהעוגיות מופעלות בדפדפן שלכם, העלו מחדש דף זה ונסו שוב.",
        "noname": "לא הכנסת שם משתמש תקין",
-       "loginsuccesstitle": "×\94×\9b× ×\99ס×\94 ×\94×\95ש×\9c×\9e×\94 ×\91×\94צ×\9c×\97×\94",
+       "loginsuccesstitle": "× ×\9bנסת ×\9c×\97ש×\91×\95×\9f",
        "loginsuccess": "'''נכנסת ל{{grammar:תחילית|{{SITENAME}}}} בשם \"$1\".'''",
        "nosuchuser": "אין משתמש בשם \"$1\".\nאנא ודאו שהאיות נכון (כולל אותיות רישיות וקטנות), או [[Special:UserLogin/signup|צרו חשבון חדש]].",
        "nosuchusershort": "אין משתמש בשם \"$1\".\nאנא ודאו שהאיות נכון.",
        "createaccount-title": "יצירת חשבון ב{{grammar:תחילית|{{SITENAME}}}}",
        "createaccount-text": "מישהו יצר חשבון בשם $2 ב{{grammar:תחילית|{{SITENAME}}}} ($4), והסיסמה הזמנית של החשבון היא \"$3\". עליכם להיכנס ולשנות עכשיו את הסיסמה.\n\nבאפשרותכם להתעלם מהודעה זו, אם החשבון נוצר בטעות.",
        "login-throttled": "ביצעתם לאחרונה ניסיונות רבים מדי להיכנס לחשבון זה.\nאנא המתינו $1 לפני שתנסו שוב.",
-       "login-abort-generic": "×\94×\9b× ×\99ס×\94 לחשבון לא הצליחה - היא הופסקה",
+       "login-abort-generic": "×\9b× ×\99סת×\9a לחשבון לא הצליחה - היא הופסקה",
        "login-migrated-generic": "חשבון המשתמש שלך הועבר, ושם המשתמש שלך כבר לא קיים באתר ויקי זה.",
        "loginlanguagelabel": "שפה: $1",
        "suspicious-userlogout": "בקשתך לצאת מהחשבון נדחתה כיוון שנראה שהיא נשלחה על־ידי דפדפן שבור או שרת פרוקסי עם זיכרון מטמון.",
        "newpassword": "סיסמה חדשה:",
        "retypenew": "חזרה על הסיסמה החדשה:",
        "resetpass_submit": "הגדרת הסיסמה וכניסה לחשבון",
-       "changepassword-success": "סיסמתך שונתה בהצלחה!",
+       "changepassword-success": "סיסמתך שונתה!",
        "changepassword-throttled": "ביצעתם לאחרונה ניסיונות רבים מדי להיכנס לחשבון זה.\nאנא המתינו $1 לפני שתנסו שוב.",
        "botpasswords": "ססמאות בוט",
        "botpasswords-summary": "<em>ססמאות בוט</em> מאפשרות כניסה לחשבון משתמש באמצעות API, ללא שימוש בנתוני ההזדהות הראשיים של החשבון. ניתן להגביל את הרשאות המשתמש הזמינות כאשר נכנסים עם ססמת בוט.",
        "botpasswords-insert-failed": "הוספת שם הבוט \"$1\" נכשלה. האם הוא כבר נוסף?",
        "botpasswords-update-failed": "לא היה אפשר לעדכן את שם הבוט \"$1\". האם הוא נמחק?",
        "botpasswords-created-title": "ססמת הבוט נוצרה",
-       "botpasswords-created-body": "ססמת הבוט \"$1\" נוצרה בהצלחה.",
+       "botpasswords-created-body": "ססמת הבוט עבור בוט בשם \"$1\" של המשתמש \"$2\" נוצרה.",
        "botpasswords-updated-title": "ססמת הבוט עודכנה",
-       "botpasswords-updated-body": "ססמת הבוט \"$1\" עודכנה בהצלחה.",
+       "botpasswords-updated-body": "ססמת הבוט עבור בוט בשם \"$1\" של המשתמש \"$2\" עודכנה.",
        "botpasswords-deleted-title": "ססמת הבוט נמחקה",
-       "botpasswords-deleted-body": "ססמת הבוט \"$1\" נמחקה.",
+       "botpasswords-deleted-body": "ססמת הבוט עבור בוט בשם \"$1\" של המשתמש \"$2\" נמחקה.",
        "botpasswords-newpassword": "הססמה החדשה לכניסה <strong>$1</strong> היא <strong>$2</strong>. <em>נא לשמור מידע זה לצורך עיון עתידי.</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider אינו זמין.",
        "botpasswords-restriction-failed": "כניסה זו נמנעה בשל הגבלות על ססמאות בוט.",
        "newarticle": "(חדש)",
        "newarticletext": "הגעתם לדף שעדיין איננו קיים.\nכדי ליצור את הדף הזה, התחילו להקליד בתיבת הטקסט למטה (ראו את [$1 דף העזרה] למידע נוסף).\nאם הגעתם לכאן בטעות, לחצו על כפתור ה<strong>חזרה</strong> (Back) בדפדפן שלכם.",
        "anontalkpagetext": "----\n<em>זהו דף שיחה של משתמש אנונימי שעדיין לא יצר חשבון במערכת, או שהוא לא משתמש בו.</em>\nלכן עלינו להשתמש בכתובת ה־IP המספרית כדי לזהותו.\nייתכן שכתובת IP זו תהיה משותפת למספר משתמשים.\nאם אתם משתמשים אנונימיים ומרגישים שקיבלתם הודעות בלתי רלוונטיות, אנא [[Special:UserLogin/signup|צרו חשבון]] או [[Special:UserLogin|היכנסו לחשבון]] כדי להימנע מבלבול עתידי עם משתמשים אנונימיים נוספים.",
-       "noarticletext": "×\90×\99×\9f ×\9bר×\92×¢ ×\98קס×\98 ×\91×\93×£ ×\96×\94.\n×\91×\90פשר×\95ת×\9b×\9d [[Special:Search/{{PAGENAME}}|×\9c×\97פש ×\90ת ×\9b×\95תרת ×\94×\93×£]] ×\91×\93פ×\99×\9d ×\90×\97ר×\99×\9d,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ×\9c×\97פש ×\91×\99×\95×\9e× ×\99×\9d ×\94ר×\9c×\95×\95× ×\98×\99×\99×\9d],\n×\90×\95 [{{fullurl:{{FULLPAGENAME}}|action=edit}} ×\9cער×\95×\9a ×\93×£ ×\96×\94]</span>.",
-       "noarticletext-nopermission": "×\90×\99×\9f ×\9bר×\92×¢ ×\98קס×\98 ×\91×\93×£ ×\96×\94.\n×\91×\90פשר×\95ת×\9b×\9d [[Special:Search/{{PAGENAME}}|×\9c×\97פש ×\90ת ×\9b×\95תרת ×\94×\93×£]] ×\91×\93פ×\99×\9d ×\90×\97ר×\99×\9d,\n×\90×\95 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ×\9c×\97פש ×\91×\99×\95×\9e× ×\99×\9d ×\94ר×\9c×\95×\95× ×\98×\99ים]</span>,\nאך אינכם מורשים ליצור את הדף.",
+       "noarticletext": "×\90×\99×\9f ×\9bר×\92×¢ ×\98קס×\98 ×\91×\93×£ ×\94×\96×\94.\n×\91×\90פשר×\95ת×\9b×\9d [[Special:Search/{{PAGENAME}}|×\9c×\97פש ×\90ת ×\9b×\95תרת ×\94×\93×£]] ×\91×\93פ×\99×\9d ×\90×\97ר×\99×\9d,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ×\9c×\97פש ×\90ת ×\94×\93×£ ×\91×\99×\95×\9e× ×\99×\9d],\n×\90×\95 [{{fullurl:{{FULLPAGENAME}}|action=edit}} ×\9c×\99צ×\95ר ×\90ת ×\94×\93×£]</span>.",
+       "noarticletext-nopermission": "×\90×\99×\9f ×\9bר×\92×¢ ×\98קס×\98 ×\91×\93×£ ×\94×\96×\94.\n×\91×\90פשר×\95ת×\9b×\9d [[Special:Search/{{PAGENAME}}|×\9c×\97פש ×\90ת ×\9b×\95תרת ×\94×\93×£]] ×\91×\93פ×\99×\9d ×\90×\97ר×\99×\9d,\n×\90×\95 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ×\9c×\97פש ×\90ת ×\94×\93×£ ×\91×\99×\95×\9e× ים]</span>,\nאך אינכם מורשים ליצור את הדף.",
        "missing-revision": "גרסה #$1 של הדף \"{{FULLPAGENAME}}\" אינה קיימת.\n\nזה נגרם בדרך כלל על־ידי לחיצה על קישור ישן לגרסה קודמת של דף שנמחק.\nאפשר למצוא פרטים ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].",
        "userpage-userdoesnotexist": "חשבון המשתמש \"$1\" אינו רשום.\nאנא בדקו אם ברצונכם ליצור/לערוך דף זה.",
        "userpage-userdoesnotexist-view": "חשבון המשתמש \"$1\" אינו רשום.",
        "undo-summary-username-hidden": "ביטול גרסה $1 של משתמש מוסתר",
        "cantcreateaccounttitle": "לא ניתן ליצור את החשבון",
        "cantcreateaccount-text": "אפשרות יצירת החשבונות מכתובת ה־IP הזאת (<strong>$1</strong>) נחסמה על־ידי [[User:$3|$3]].\n\nהסיבה שניתנה על־ידי $3 היא \"$2\".",
-       "cantcreateaccount-range-text": "אפשרות יצירת החשבונות מכתובות IP בתוך הטווח '''$1''', כולל כתובת ה־IP שלך ('''$4'''), נחסמה על־ידי [[User:$3|$3]].\n\nהסיבה שניתנה על־ידי $3 היא \"$2\".",
+       "cantcreateaccount-range-text": "אפשרות יצירת החשבונות מכתובות IP בתוך הטווח <strong>$1</strong>, כולל כתובת ה־IP שלך (<strong>$4</strong>), נחסמה על־ידי [[User:$3|$3]].\n\nהסיבה שניתנה על־ידי $3 היא \"$2\".",
        "viewpagelogs": "הצגת יומנים עבור דף זה",
        "nohistory": "אין היסטוריית שינויים עבור דף זה.",
        "currentrev": "גרסה אחרונה",
        "revdelete-unsuppress": "הסרת הגבלות בגרסאות המשוחזרות",
        "revdelete-log": "סיבה:",
        "revdelete-submit": "ביצוע על {{PLURAL:$1|הגרסה שנבחרה|הגרסאות שנבחרו}}",
-       "revdelete-success": "'''מצב הסתרת הגרסה עודכן בהצלחה.'''",
-       "revdelete-failure": "'''לא ניתן היה לעדכן את מצב הסתרת הגרסה:'''\n$1",
-       "logdelete-success": "'''הסתרת פעולת היומן הושלמה בהצלחה.'''",
-       "logdelete-failure": "'''לא ניתן היה לבצע את הסתרת פעולת היומן:'''\n$1",
+       "revdelete-success": "מצב הצגת הגרסה עודכן.",
+       "revdelete-failure": "לא ניתן היה לעדכן את מצב הצגת הגרסה:\n$1",
+       "logdelete-success": "מצב הצגת פעולת היומן עודכן.",
+       "logdelete-failure": "לא ניתן היה לעדכן את מצב הצגת פעולת היומן:\n$1",
        "revdel-restore": "שינוי ההצגה",
        "pagehist": "היסטוריית הדף",
        "deletedhist": "הגרסאות המחוקות",
        "userrights-changeable-col": "קבוצות שבאפשרותכם לשנות",
        "userrights-unchangeable-col": "קבוצות שאין באפשרותכם לשנות",
        "userrights-conflict": "התנגשות בין שינויי הרשאות משתמש! אנא בדקו את השינויים שלכם ואשרו אותם.",
-       "userrights-removed-self": "×\94סרת ×\91×\94צ×\9c×\97×\94 ×\90ת ×\94רש×\90×\95ת ×\94×\9eשת×\9eש ×©×\9cך. לכן אין לך כעת אפשרות לגשת לדף זה.",
+       "userrights-removed-self": "×\94סרת ×\90ת ×\94רש×\90×\95ת ×\94×\9eשת×\9eש ×©×\9c ×¢×¦×\9eך. לכן אין לך כעת אפשרות לגשת לדף זה.",
        "group": "קבוצה:",
        "group-user": "משתמשים",
        "group-autoconfirmed": "משתמשים ותיקים",
        "recentchanges-label-bot": "עריכה זו בוצעה על־ידי בוט",
        "recentchanges-label-unpatrolled": "עריכה זו טרם נבדקה",
        "recentchanges-label-plusminus": "גודל הדף השתנה במספר זה של בתים",
-       "recentchanges-legend-heading": "'''מקרא:'''",
+       "recentchanges-legend-heading": "<strong>מקרא:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ראו גם [[Special:NewPages|רשימת דפים חדשים]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "הצגה",
        "rcshowhidemine": "$1 עריכות שלי",
        "rcshowhidemine-show": "הצגת",
        "rcshowhidemine-hide": "הסתרת",
-       "rcshowhidecategorization": "$1 ×\94×\95ספ×\95ת ×\95×\94סר×\95ת ×©×\9c ×\93פ×\99×\9d ×\9eקטגוריות",
+       "rcshowhidecategorization": "$1 ×¡×\99×\95×\95×\92 ×\93פ×\99×\9d ×\9cקטגוריות",
        "rcshowhidecategorization-show": "הצגת",
        "rcshowhidecategorization-hide": "הסתרת",
        "rclinks": "הצגת $1 שינויים אחרונים ב־$2 הימים האחרונים.<br /> $3",
        "recentchangeslinked-page": "שם הדף:",
        "recentchangeslinked-to": "הצגת השינויים בדפים המקשרים לדף הנתון במקום זאת",
        "recentchanges-page-added-to-category": "הדף [[:$1]] נוסף לקטגוריה",
-       "recentchanges-page-added-to-category-bundled": "הדף [[:$1]] {{PLURAL:$2|ועוד דף אחד|ועוד $2 דפים}} נוספו לקטגוריה",
+       "recentchanges-page-added-to-category-bundled": "הדף [[:$1]] [[Special:WhatLinksHere/$1|{{PLURAL:$2|ועוד דף אחד|ועוד $2 דפים}}]] נוספו לקטגוריה",
        "recentchanges-page-removed-from-category": "הדף [[:$1]] הוסר מקטגוריה",
-       "recentchanges-page-removed-from-category-bundled": "הדף [[:$1]] {{PLURAL:$2|ועוד דף אחד|ועוד $2 דפים}} הוסרו מקטגוריה",
+       "recentchanges-page-removed-from-category-bundled": "הדף [[:$1]] [[Special:WhatLinksHere/$1|{{PLURAL:$2|ועוד דף אחד|ועוד $2 דפים}}]] הוסרו מקטגוריה",
        "autochange-username": "שינוי אוטומטי של מדיה־ויקי",
        "upload": "העלאת קובץ לשרת",
        "uploadbtn": "העלאה",
        "backend-fail-read": "לא ניתן היה לקרוא את הקובץ \"$1\".",
        "backend-fail-create": "לא ניתן היה לכתוב את הקובץ \"$1\".",
        "backend-fail-maxsize": "לא ניתן היה לכתוב את הקובץ \"$1\" כיוון שהוא גדול יותר {{PLURAL:$2|מבית אחד|מ־$2 בתים}}.",
-       "backend-fail-readonly": "מאגר האחסון לקבצים \"$1\" הוא כרגע במצב קריאה בלבד. הסיבה שניתנה לכך היא: \"'''$2'''\"",
+       "backend-fail-readonly": "מאגר האחסון לקבצים \"$1\" הוא כרגע במצב קריאה בלבד. הסיבה שניתנה לכך היא: <em>$2</em>",
        "backend-fail-synced": "הקובץ \"$1\" נמצא במצב לא עקבי בתוך מאגרי אחסון הקבצים הפנימיים",
        "backend-fail-connect": "לא ניתן היה להתחבר למאגר אחסון הקבצים הפנימי \"$1\".",
        "backend-fail-internal": "אירעה שגיאה בלתי־ידועה במאגר אחסון הקבצים הפנימי \"$1\".",
        "uploadstash-summary": "דף זה מאפשר גישה לקבצים שהועלו (או נמצאים בתהליך העלאה), אך טרם פורסמו באתר הוויקי. קבצים אלה אינם גלויים לאיש מלבד המשתמש שהעלה אותם.",
        "uploadstash-clear": "מחיקת הקבצים בסליק",
        "uploadstash-nofiles": "אין לכם קבצים בסליק.",
-       "uploadstash-badtoken": "×\91×\99צ×\95×¢ ×\94פע×\95×\9c×\94 × ×\9bש×\9c, ×\90×\95×\9c×\99 ×\91×\92×\9c×\9c ×¤×§×\99עת ×ª×\95קפ×\95 ×©×\9c ×\90ס×\99×\9e×\95×\9f ×\94ער×\99×\9b×\94 ×©×\9c×\9b×\9d. × ×¡×\95 שוב.",
+       "uploadstash-badtoken": "×\91×\99צ×\95×¢ ×\94פע×\95×\9c×\94 × ×\9bש×\9c, ×\90×\95×\9c×\99 ×\91×\92×\9c×\9c ×¤×§×\99עת ×ª×\95קפ×\95 ×©×\9c ×\90ס×\99×\9e×\95×\9f ×\94ער×\99×\9b×\94 ×©×\9c×\9b×\9d. × ×\90 ×\9cנס×\95ת שוב.",
        "uploadstash-errclear": "מחיקת הקבצים נכשלה.",
        "uploadstash-refresh": "רענון רשימת הקבצים",
        "invalid-chunk-offset": "היסט גוש לא תקין",
        "delete-toobig": "דף זה כולל מעל {{PLURAL:$1|גרסה אחת|$1 גרסאות}} בהיסטוריית העריכות שלו. מחיקת דפים כאלה הוגבלה כדי למנוע פגיעה בביצועי האתר.",
        "delete-warning-toobig": "דף זה כולל מעל {{PLURAL:$1|גרסה אחת|$1 גרסאות}} בהיסטוריית העריכות שלו. מחיקה שלו עלולה להפריע לפעולות בבסיס הנתונים; אנא שקלו שנית את המחיקה.",
        "deleteprotected": "אין באפשרותך למחוק את הדף כי הוא מוגן.",
-       "deleting-backlinks-warning": "'''אזהרה:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|דפים אחרים]] מקשרים לדף שאתם עומדים למחוק או מכלילים אותו.",
+       "deleting-backlinks-warning": "<strong>אזהרה:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|דפים אחרים]] מקשרים לדף שאתם עומדים למחוק או מכלילים אותו.",
        "rollback": "שחזור עריכות",
        "rollbacklink": "שחזור",
        "rollbacklinkcount": "שחזור {{PLURAL:$1|עריכה אחת|$1 עריכות}}",
        "rollbackfailed": "השחזור נכשל",
        "cantrollback": "לא ניתן לשחזר את העריכה;\nהתורם האחרון הוא היחיד שכתב בדף זה.",
        "alreadyrolled": "לא ניתן לשחזר את העריכה של [[User:$2|$2]] ([[User talk:$2|שיחה]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) בדף [[:$1]]; הדף כבר נערך או שוחזר.\n\nהעריכה האחרונה הייתה של [[User:$3|$3]] ([[User talk:$3|שיחה]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "תקציר העריכה היה: \"'''$1'''\".",
+       "editcomment": "תקציר העריכה היה: <em>$1</em>.",
        "revertpage": "שוחזר מעריכות של [[Special:Contributions/$2|$2]] ([[User talk:$2|שיחה]]) לעריכה האחרונה של [[User:$1|$1]]",
        "revertpage-nouser": "שוחזר מעריכות של משתמש מוסתר לעריכה האחרונה של {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "שוחזר מעריכות של $1 לעריכה האחרונה של $2",
        "changecontentmodel-title-label": "כותרת הדף",
        "changecontentmodel-model-label": "מודל התוכן החדש",
        "changecontentmodel-reason-label": "סיבה:",
+       "changecontentmodel-submit": "שינוי",
        "changecontentmodel-success-title": "מודל התוכן שוּנה",
        "changecontentmodel-success-text": "מודל התוכן של [[:$1]] שוּנה.",
        "changecontentmodel-cannot-convert": "התוכן בדף [[:$1]] אינו יכול להיות מומר לסוג של $2.",
        "changecontentmodel-nodirectediting": "מודל התוכן $1 אינו תומך בעריכה ישירה",
        "log-name-contentmodel": "יומן שינויי מודל תוכן",
        "log-description-contentmodel": "אירועים שקשורים למודל תוכן של דפים",
+       "logentry-contentmodel-new": "$1 {{GENDER:$2|יצר|יצרה}} את הדף $3 תוך שימוש במודל התוכן \"$5\" השונה ממודל ברירת המחדל",
        "logentry-contentmodel-change": "$1 {{GENDER:$2|שינה|שינתה}} את מודל התוכן של הדף $3 מ\"$4\" ל\"$5\"",
        "logentry-contentmodel-change-revertlink": "שחזור",
        "logentry-contentmodel-change-revert": "שחזור",
        "tags-delete-not-allowed": "תגיות שהוגדרו על־ידי הרחבה אינן ניתנות למחיקה אלא אם כן ההרחבה מתירה זאת במיוחד.",
        "tags-delete-not-found": "התגית \"$1\" אינה קיימת.",
        "tags-delete-too-many-uses": "התגית \"$1\" מוחלת על יותר {{PLURAL:$2|מגרסה אחת|מ־$2 גרסאות}}, ולכן לא ניתן למחוק אותה.",
-       "tags-delete-warnings-after-delete": "התגית \"$1\" נמחקה בהצלחה, אבל {{PLURAL:$2|התקבלה האזהרה הבאה|התקבלו האזהרות הבאות}}:",
+       "tags-delete-warnings-after-delete": "התגית \"$1\" נמחקה, אבל {{PLURAL:$2|התקבלה האזהרה הבאה|התקבלו האזהרות הבאות}}:",
        "tags-activate-title": "הפעלת תגית",
        "tags-activate-question": "אתם עומדים להפעיל את התגית \"$1\".",
        "tags-activate-reason": "הסבר:",
        "tags-edit-revision-legend": "הוספה של תגיות {{PLURAL:$1|לגרסה הזאת|לכל $1 הגרסאות}} או הסרתן",
        "tags-edit-logentry-legend": "הוספה של תגיות {{PLURAL:$1|לרשומת היומן הזאת|לכל $1 רשומות היומן}} או הסרתן",
        "tags-edit-existing-tags": "תגיות קיימות:",
-       "tags-edit-existing-tags-none": "''אין''",
+       "tags-edit-existing-tags-none": "<em>אין</em>",
        "tags-edit-new-tags": "תגיות חדשות:",
        "tags-edit-add": "הוספת התגיות הבאות:",
        "tags-edit-remove": "הסרת התגיות הבאות:",
        "tags-edit-reason": "סיבה:",
        "tags-edit-revision-submit": "החלת שינויים {{PLURAL:$1|לגרסה הזאת|ל־$1 גרסאות}}",
        "tags-edit-logentry-submit": "החלת שינויים {{PLURAL:$1|לרשומת היומן הזאת|ל־$1 רשומת היומן}}",
-       "tags-edit-success": "השינויים הוחלו בהצלחה.",
+       "tags-edit-success": "השינויים הוחלו.",
        "tags-edit-failure": "החלת השינויים נכשלה:\n$1",
        "tags-edit-nooldid-title": "גרסת היעד אינה תקינה",
        "tags-edit-nooldid-text": "או שלא ציינת שום גרסה שהפעולה תבוצע עליה, או שהגרסה שציינת אינה קיימת.",
        "default-skin-not-found": "אופס! עיצוב ברירת המחדל עבור אתר הוויקי שלכם, שמוגדר ב־<code dir=\"ltr\">$wgDefaultSkin</code> כ־<code>$1</code>, אינו זמין.\n\nנראה שההתקנה שלכם כוללת את {{PLURAL:$4|העיצוב|העיצובים}} הבאים. ראו מידע בדף [https://www.mediawiki.org/wiki/Manual:Skin_configuration \"הגדרת עיצובים\" במדריך] על האפשרות להפעיל {{PLURAL:$4|אותו|אותם ולבחור את עיצוב ברירת המחדל}}.\n\n$2\n\n; אם כרגע התקנתם את מדיה־ויקי:\n: נראה שזו התקנה מ־git, או ישירות מקוד המקור בשיטה אחרת כלשהי. במקרה הזה, בעיה זו צפויה. נסו להתקין כמה עיצובים מ[https://www.mediawiki.org/wiki/Category:All_skins ספריית העיצובים של mediawiki.org], על־ידי:\n:* הורדת [https://www.mediawiki.org/wiki/Download קובץ ה־tar להתקנה], שכולל מספר עיצובים והרחבות. באפשרותכם להעתיק ולהדביק מתוכו את תיקיית ה‏‏־<code>skins/</code>.\n:* הורדת קבצי tar של עיצובים ספציפיים מ־[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins שימוש ב־Git כדי להוריד עיצובים].\n: אם תעשו זאת, זה לא אמור להפריע ל‏‏מאגר ה־git שלכם אם אתם מפתחים של מדיה־ויקי.\n\n; אם כרגע שדרגתם את מדיה־ויקי:\n: מדיה־ויקי 1.24 וגרסאות חדשות יותר כבר לא מפעילות עיצובים מותקנים באופן אוטומטי (ראו [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery \"גילוי אוטומטי של עיצובים\" במדריך]). תוכלו להעתיק את {{PLURAL:$5|השורה הבאה|השורות הבאות}} לתוך הקובץ <code>LocalSettings.php</code> כדי להפעיל את {{PLURAL:$5|העיצוב המותקן|כל העיצובים המותקנים}}.\n\n<pre dir=\"ltr\">$3</pre>\n\n; אם כרגע שיניתם את <code>LocalSettings.php</code>:\n: בדקו שנית האם עשיתם שגיאות הקלדה בשמות העיצובים.",
        "default-skin-not-found-no-skins": "אופס! עיצוב ברירת המחדל עבור אתר הוויקי שלכם, שמוגדר ב־<code dir=\"ltr\">$wgDefaultSkin</code> כ־<code>$1</code>, אינו זמין.\n\nאין לכם עיצובים מותקנים.\n\n; אם כרגע התקנתם או שדרגתם את מדיה־ויקי:\n: נראה שזו התקנה מ־git, או ישירות מקוד המקור בשיטה אחרת כלשהי. במקרה הזה, בעיה זו צפויה. מדיה־ויקי 1.24 וגרסאות חדשות יותר אינן כוללות עיצובים ב־git repository הראשי. נסו להתקין כמה עיצובים מ[https://www.mediawiki.org/wiki/Category:All_skins ספריית העיצובים של mediawiki.org], על־ידי:\n:* הורדת [https://www.mediawiki.org/wiki/Download קובץ ה‏‏־tar להתקנה], שכולל מספר עיצובים והרחבות. באפשרותכם להעתיק ולהדביק מתוכו את תיקיית ה‏‏־<code>skins/</code>.\n:* הורדת קבצי tar של עיצובים ספציפיים מ־[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins שימוש ב־Git כדי להוריד עיצובים].\n: אם תעשו זאת, זה לא אמור להפריע ל‏‏מאגר ה־git שלכם (אם אתם מפתחים של מדיה־ויקי). ראו מידע בדף [https://www.mediawiki.org/wiki/Manual:Skin_configuration \"הגדרת עיצובים\" במדריך] על האפשרות להפעיל עיצובים ולבחור את עיצוב ברירת המחדל.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (מופעל)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''מבוטל''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>מבוטל</strong>)",
        "mediastatistics": "סטטיסטיקות קבצים",
        "mediastatistics-summary": "סטטיסטיקה על סוגי קבצים שהועלו. הסטטיסטיקה כוללת רק את הגרסה החדשה ביותר של הקובץ: גרסאות ישנות או מחוקות של קבצים אינן כלולות.",
        "mediastatistics-nbytes": "{{PLURAL:$1|בית אחד|$1 בתים}} ($2; $3%)",
index 9d85e4b..8477c66 100644 (file)
        "tog-watchlisthidebots": "मेरी ध्यानसूची से बॉट द्वारा किए परिवर्तन छिपाएँ",
        "tog-watchlisthideminor": "मेरी ध्यानसूची से छोटे परिवर्तन छिपाएँ",
        "tog-watchlisthideliu": "मेरी ध्यानसूची में सत्रारम्भित सदस्यों के सम्पादन न दिखाएँ",
+       "tog-watchlistreloadautomatically": "जब भी छननी बदलने पर ध्यानसूची को अपने आप ही लोड करें (जावास्क्रिप्ट अनिवार्य)",
        "tog-watchlisthideanons": "आई॰पी॰ सदस्यों द्वारा किए सम्पादनों को मेरी ध्यानसूची में न दिखायें",
        "tog-watchlisthidepatrolled": "परीक्षित सम्पादन मेरी ध्यानसूची में छुपाएँ",
        "tog-watchlisthidecategorization": "पृष्ठों का श्रेणीकरण छुपाएँ",
        "fri": "शुक्र",
        "sat": "शनि",
        "january": "जनवरी",
-       "february": "फ़रवरà¥\80",
+       "february": "फरवरी",
        "march": "मार्च",
        "april": "अप्रैल",
        "may_long": "मई",
        "november": "नवम्बर",
        "december": "दिसम्बर",
        "january-gen": "जनवरी",
-       "february-gen": "फ़रवरà¥\80",
+       "february-gen": "फरवरी",
        "march-gen": "मार्च",
        "april-gen": "अप्रैल",
        "may-gen": "मई",
        "november-gen": "नवम्बर",
        "december-gen": "दिसम्बर",
        "jan": "जन॰",
-       "feb": "फ़र॰",
+       "feb": "फर॰",
        "mar": "मार्च",
        "apr": "अप्रै॰",
        "may": "मई",
        "nov": "नव॰",
        "dec": "दिस॰",
        "january-date": "$1 जनवरी",
-       "february-date": "$1 à¤«à¤¼à¤°à¤µà¤°à¥\80",
+       "february-date": "$1 फरवरी",
        "march-date": "$1 मार्च",
        "april-date": "$1 अप्रैल",
        "may-date": "$1 मई",
        "versionrequired": "मीडीयाविकी का $1 अवतरण ज़रूरी है।",
        "versionrequiredtext": "यह पृष्ठ प्रयोग करने के लिये मीडियाविकी का $1 अवतरण ज़रूरी है।\nदेखें [[Special:Version|अवतरण पृष्ठ]]।",
        "ok": "ठीक है",
+       "pagetitle": "$1 - {{SITENAME}}",
+       "pagetitle-view-mainpage": "{{SITENAME}}",
+       "backlinksubtitle": "← $1",
        "retrievedfrom": "\"$1\" से लिया गया",
        "youhavenewmessages": "आपके लिए $1 हैं। ($2)",
        "youhavenewmessagesfromusers": "आपके लिये {{PLURAL:$3|एक अन्य सदस्य|$3 अन्य सदस्यों}} के $1 हैं। ($2)",
        "databaseerror-query": "अनुरोध: $1",
        "databaseerror-function": "फ़ंक्शन: $1",
        "databaseerror-error": "त्रुटि: $1",
+       "transaction-duration-limit-exceeded": "अत्यधिक बोझ को कम करने लिए यह कार्य रोक दिया गया है, क्योंकि यह लिखने की अवधि ($1) से बढ़ कर $2 {{PLURAL:$2|सेकंड|सेकंड}} को पार कर गया।\nIf यदि आप  बहुत सारे वस्तु को एक साथ बदल रहे हैं, तो कृपया छोटे होते रूप में बदलें।",
        "laggedslavemode": "'''चेतावनी:''' यह पृष्ठ अद्यतनीत जानकारी-युक्त ना होने की आशंका है।",
        "readonly": "डाटाबेस लॉक किया हुआ है",
        "enterlockreason": "लॉक करने का कारण दीजिए, साथ ही लॉक खुलने के समय का लगभग आकलन दीजिये।",
        "myprivateinfoprotected": "आपके पास अपनी व्यक्तिगत जानकारी बदलने की अनुमति नहीं है।",
        "mypreferencesprotected": "आपके पास अपनी वरीयताएँ बदलने की अनुमति नहीं है।",
        "ns-specialprotected": "विशेष पृष्ठ सम्पादित नहीं किये जा सकते।",
-       "titleprotected": "सदस्य [[User:$1|$1]] ने इस शीर्षक का पृष्ठ बनाने से सुरक्षित किया हुआ है।\nइसके लिये निम्न कारण दिया गया है: \"''$2''\"",
+       "titleprotected": "सदस्य [[User:$1|$1]] ने इस शीर्षक का पृष्ठ बनाने से सुरक्षित किया हुआ है।\nइसके लिये निम्न कारण दिया गया है: <em>$2</em>",
        "filereadonlyerror": "\"$1\" फ़ाइल को बदलने में असक्षम क्योंकि भण्डार \"$2\" इस समय 'केवल पाठन हेतु' (रीड ओनली) है।\n\nजिस प्रबंधक ने ये प्रबंध लगाया है उन्होंने निम्न विवरण प्रदान किया है: \"$3\"।",
        "invalidtitle-knownnamespace": "\"$2\" नामस्थान और \"$3\" नाम वाला गलत शीर्षक",
        "invalidtitle-unknownnamespace": "अज्ञात नामस्थान संख्या $1 और नाम \"$2\" वाला गलत शीर्षक",
        "virus-unknownscanner": "अज्ञात ऐंटीवायरस:",
        "logouttext": "'''अब आप लॉग आउट कर चुके हैं।'''\n\nध्यान दें कि जब तक आप अपनी ब्राउज़र कैशे खाली नहीं करते हैं, कुछ पृष्ठ अब भी ऐसे दिख सकते हैं जैसे कि आप अभी भी लॉगिन हैं।",
        "cannotlogoutnow-title": "अभी प्रस्थान नहीं हो रहा है",
+       "cannotlogoutnow-text": "$1 के उपयोग समय प्रस्थान नहीं किया जा सकता है।",
        "welcomeuser": "आपका स्वागत है, $1!",
        "welcomecreation-msg": "आपका खाता बना दिया गया है।\nअपनी [[Special:Preferences|{{SITENAME}} वरीयताएँ]] बदलना ना भूलियेगा।",
        "yourname": "सदस्यनाम:",
        "nav-login-createaccount": "सत्रारंभ / खाता खोलें",
        "userlogin": "सत्रारंभ / खाता खोलें",
        "userloginnocreate": "लॉग इन",
-       "logout": "सतà¥\8dराà¤\82त",
-       "userlogout": "सतà¥\8dराà¤\82त",
+       "logout": "पà¥\8dरसà¥\8dथान à¤\95रà¥\87à¤\82",
+       "userlogout": "पà¥\8dरसà¥\8dथान à¤\95रà¥\87à¤\82",
        "notloggedin": "लॉग इन नहीं किया है",
        "userlogin-noaccount": "खाता नहीं है?",
        "userlogin-joinproject": "{{SITENAME}} से जुड़ें",
        "nologinlink": "नया खाता बनाएँ",
        "createaccount": "खाता बनाएँ",
        "gotaccount": "पहले से आपका खाता है? '''$1''' करें।",
-       "gotaccountlink": "लà¥\89à¤\97 à¤\87न",
+       "gotaccountlink": "पà¥\8dरवà¥\87श à¤\95रà¥\87à¤\82",
        "userlogin-resetlink": "अपनी प्रवेश जानकारी भूल गए हैं?",
        "userlogin-resetpassword-link": "अपना पासवर्ड भूल गए?",
        "userlogin-helplink2": "लॉग इन करने में सहायता",
        "nocookieslogin": "{{SITENAME}} पर लॉग इन करने के लिये कुकीज़ का प्रयोग होता है।\nआपने कुकीज़ अक्षम कर रखी हैं।\nकृपया अपने ब्राउज़र में कुकीज़ सक्षम करें और फिर पुनः कोशिश करें।",
        "nocookiesfornew": "स्रोत की पुष्टि ना हो पाने के कारण यह खाता निर्मित नहीं किया गया। \nसुनिश्चित करें कि आपने कुकीज़ सक्षम की हैं, पृष्ठ को पुनः लोड करें और पुनः प्रयास करें।",
        "noname": "आपने वैध सदस्यनाम नहीं दिया है।",
-       "loginsuccesstitle": "लà¥\89à¤\97 à¤\87न à¤¹à¥\8b à¤\97या à¤¹à¥\88",
+       "loginsuccesstitle": "पà¥\8dरवà¥\87श à¤¹à¥\81à¤\86",
        "loginsuccess": "'''आप {{SITENAME}} में \"$1\" सदस्यनाम से लॉग इन हो {{GENDER:$1|चुके|चुकी|चुके}} हैं।'''",
        "nosuchuser": "\"$1\" नाम का कोई सदस्य नहीं है।\nसदस्यनाम में लघु और दीर्घ अक्षरों से फ़र्क पड़ता है।\nअपनी वर्तनी जाँचें, या [[Special:UserLogin/signup|नया खाता खोलें]]।",
        "nosuchusershort": "\"$1\" नाम का कोई सदस्य नहीं है।\nकृपया अपनी दी हुई वर्तनी जाँचें।",
        "wrongpasswordempty": "कूटशब्द खाली है।\nपुनः यत्न करें।",
        "passwordtooshort": "आपका कूटशब्द कम से कम {{PLURAL:$1|1 अक्षर|$1 अक्षरों}} का होना चाहिये।",
        "passwordtoolong": "पासवर्ड {{PLURAL:$1|1 वर्ण|$1 वर्णों}} से ज़्यादा लम्बे नही हो सकते।",
+       "passwordtoopopular": "आम पासवर्ड आप नहीं चुन सकते हैं। कृपया अनोखा पासवर्ड चुनें।",
        "password-name-match": "आपका कूटशब्द आपके सदस्यनाम से भिन्न होना चाहिए।",
        "password-login-forbidden": "इस सदस्यनाम और कूटशब्द का उपयोग वर्जित है।",
        "mailmypassword": "कूटशब्द पुनःस्थापित करें",
        "createaccount-title": "{{SITENAME}} के लिये खाता बनाएँ",
        "createaccount-text": "आपके ई-मेल पते के लिये किसी ने {{SITENAME}} ($4) पर \"$2\" सदस्य नाम से \"$3\" कूटशब्द (पासवर्ड) सहित खाता खोला है।\nआपको लॉग इन कर के अपना कूटशब्द (पासवर्ड) तुरंत बदल लेना चाहिये।\n\nयदि यह खाता गलती से खोला गया है, तो आप इस मेसेज को नज़रंदाज़ कर सकते हैं।",
        "login-throttled": "आपने हाल ही में कई बार लॉग इन करने के प्रयास किये हैं।\nपुनः प्रयास करने से पहले कृपया $1 प्रतीक्षा करें।",
-       "login-abort-generic": "à¤\86पà¤\95ा à¤¸à¤¤à¥\8dरारमà¥\8dभ à¤\85सफल à¤°à¤¹à¤¾ - à¤¨à¤¿à¤·à¥\8dफलित",
+       "login-abort-generic": "à¤\86पà¤\95ा à¤ªà¥\8dरवà¥\87श à¤\85सफल à¤¹à¥\81à¤\86 - à¤°à¥\8bà¤\95ा à¤\97या",
        "login-migrated-generic": "आपका खाता माइग्रेट हो गया है और आपका सदस्यनाम इस विकी पर अब मौजूद नहीं है।",
        "loginlanguagelabel": "भाषा: $1",
        "suspicious-userlogout": "अपका लॉग आउट करने का अनुरोध अस्वीकृत कर दिया गया है क्योंकि ऐसा प्रतीत होता है कि यह किसी खराब ब्राउज़र या कैश करने वाली प्रॉक्सी द्वारा भेजा गया था।",
        "changepassword-success": "आपका कूटशब्द बदल दिया गया है!",
        "changepassword-throttled": "आपने हाल ही में कई बार लॉग इन करने के प्रयास किये हैं।\nपुनः प्रयास करने से पहले कृपया $1 प्रतीक्षा करें।",
        "botpasswords": "बॉट पासवर्ड",
+       "botpasswords-summary": "<em>बॉट पासवर्ड</em> सदस्य खाते को एपीआई के द्वारा बिना मुख्य खाते के जानकारी के उपयोग करने देता है। बॉट पासवर्ड का उपयोग कर के प्रवेश करने पर यदि पाबंदी होने पर सदस्य अधिकार उपलब्ध रहेगा।\n\nयदि आपको इस बारे में कुछ नहीं पता तो इसका उपयोग न करें। कोई भी आपसे इसे निर्मित करने के लिए नहीं पूछेगा।",
        "botpasswords-disabled": "बॉट पासवर्ड अभी निष्क्रिय है।",
+       "botpasswords-no-central-id": "बॉट पासवर्ड का उपयोग करने के लिए आपको मुख्य खाते से प्रवेश करना होगा।",
        "botpasswords-existing": "वर्तमान बॉट पासवर्ड",
        "botpasswords-createnew": "बॉट के लिए नया पासवर्ड बनाएँ",
        "botpasswords-editexisting": "बॉट के वर्तमान पासवर्ड को बदलें",
        "botpasswords-label-cancel": "रद्द करें",
        "botpasswords-label-delete": "हटाएँ",
        "botpasswords-label-resetpassword": "पासवर्ड पुनः तय करें",
+       "botpasswords-label-grants": "अनुदान आवेदन:",
+       "botpasswords-help-grants": "हर अनुदान जो सदस्य अधिकार में  पहले से आता है, उसे अधिकार तक पहुँच देता है।  देखें : [[Special:ListGrants|अनुदान सारणी]]",
+       "botpasswords-label-restrictions": "उपयोग मनाही:",
+       "botpasswords-label-grants-column": "प्रदान किया",
+       "botpasswords-bad-appid": "बॉट नाम \"$1\" मान्य नहीं है।",
+       "botpasswords-insert-failed": "बॉट नाम \"$1\" को जोड़ने में विफल हुआ। क्या यह पहले से है?",
+       "botpasswords-update-failed": "बॉट नाम \"$1\" को अद्यतन करने में विफल हुआ। क्या ये हट गया?",
        "botpasswords-created-title": "बॉट पासवर्ड निर्मित हुआ",
-       "botpasswords-created-body": "बà¥\89à¤\9f à¤ªà¤¾à¤¸à¤µà¤°à¥\8dड \"$1\" à¤¸à¤«à¤²à¤¤à¤¾à¤ªà¥\82रà¥\8dवà¤\95 निर्मित हुआ।",
+       "botpasswords-created-body": "सदसà¥\8dय \"$2\" à¤\95à¥\87 à¤¬à¥\89à¤\9f à¤¨à¤¾à¤® \"$1\" à¤\95à¥\87 à¤²à¤¿à¤\8f à¤ªà¤¾à¤¸à¤µà¤°à¥\8dड निर्मित हुआ।",
        "botpasswords-updated-title": "बॉट पासवर्ड अद्यतन हुआ",
-       "botpasswords-updated-body": "बà¥\89à¤\9f à¤ªà¤¾à¤¸à¤µà¤°à¥\8dड \"$1\" सफलतापूर्वक अद्यतन हुआ।",
+       "botpasswords-updated-body": "सदसà¥\8dय \"$2\" à¤\95à¥\87 à¤¬à¥\89à¤\9f à¤¨à¤¾à¤® \"$1\" à¤\95ा à¤ªà¤¾à¤¸à¤µà¤°à¥\8dड सफलतापूर्वक अद्यतन हुआ।",
        "botpasswords-deleted-title": "बॉट पासवर्ड हट गया",
-       "botpasswords-deleted-body": "बॉट पासवर्ड \"$1\" हट गया।",
+       "botpasswords-deleted-body": "सदस्य \"$2\" के बॉट नाम \"$1\" का पासवर्ड हट गया।",
+       "botpasswords-newpassword": "आपका नया पासवर्ड आपके प्रवेश <strong>$1</strong> के साथ <strong>$2</strong> है। <em>भविष्य में उपयोग करने हेतु इसे याद रखें</em>",
+       "botpasswords-no-provider": "BotPasswordsSessionProvider उपलब्ध नहीं है।",
+       "botpasswords-restriction-failed": "इस प्रवेश में बॉट पासवर्ड रुकावट डाल रहा है।",
+       "botpasswords-invalid-name": "जो सदस्य नाम आप बता रहे हो, उसमें बॉट पासवर्ड अलग करने वाला (\"$1\") नहीं है।",
+       "botpasswords-not-exist": "सदस्य \"$1\" के आप बॉट पासवर्ड नहीं है, जिसका नाम \"$2\" है।",
        "resetpass_forbidden": "कूटशब्द बदले नहीं जा सकते",
        "resetpass-no-info": "इस पृष्ठ का सीधे प्रयोग करने के लिए आपको लॉग इन करना होगा।",
        "resetpass-submit-loggedin": "कूटशब्द बदलें",
        "resetpass-submit-cancel": "रद्द करें",
-       "resetpass-wrong-oldpass": "à¤\85वà¥\88ध à¤\85सà¥\8dथायà¥\80 à¤¯à¤¾ à¤µà¤°à¥\8dतमान à¤\95à¥\82à¤\9fशबà¥\8dद।\nसंभव है कि या तो आपने पहले ही सफलतापूर्वक अपना कूटशब्द बदल लिया हो, या आपने एक नए अस्थायी कूटशब्द का अनुरोध किया हो।",
+       "resetpass-wrong-oldpass": "à¤\85सà¥\8dथायà¥\80 à¤¯à¤¾ à¤µà¤°à¥\8dतमान à¤\95à¥\82à¤\9fशबà¥\8dद à¤\85वà¥\88ध à¤¹à¥\88।\nसंभव है कि या तो आपने पहले ही सफलतापूर्वक अपना कूटशब्द बदल लिया हो, या आपने एक नए अस्थायी कूटशब्द का अनुरोध किया हो।",
        "resetpass-recycled": "रीसेट करने के लिए नये पासवर्ड में कृपया अपने वर्तमान पासवर्ड के अलावा किसी अन्य पासवर्ड का प्रयोग करें।",
        "resetpass-temp-emailed": "आपने एक अस्थायी ईमेल किये गये कोड के साथ लॉग इन किया।\nलॉग इन सम्पूर्ण करने के लिए आपको यहाँ एक नया पासवर्ड सेट करना होगा:",
        "resetpass-temp-password": "अस्थायी कूटशब्द:",
        "passwordreset-emailtext-ip": "किसी ने (शायद आपने ही, $1 आइ॰पी पते से) {{SITENAME}} ($4) पर अपने {{PLURAL:$3|कूटशब्द|कूटशब्दों}} को रीसेट करने का अनुरोध किया है। इस ई-मेल पते से निम्न {{PLURAL:$3|खाता जुड़ा है|खाते जुड़े हैं}}:\n\n$2\n\n{{PLURAL:$3|यह|ये}} अस्थायी कूटशब्द {{PLURAL:$5|एक दिन|$5 दिनों}} के बाद काम नहीं करेंगे। आपको लॉग इन करके एक नया कूटशब्द अभी चुन लेना चाहिए। यदि यह अनुरोध किसी और ने किया है, या फिर आपको अपना मूल कूटशब्द याद आ गया है, और आप {{PLURAL:$3|अपना|अपने}} कूटशब्द नहीं बदलना चाहते, आप इस संदेश को अनदेखा कर के अपने पुराने कूटशब्द का प्रयोग जारी रख सकते हैं।",
        "passwordreset-emailtext-user": "{{SITENAME}} ($4) पर सदस्य $1 ने आपके {{PLURAL:$3|खाते|खातों}} के कूटशब्द को रीसेट करने का अनुरोध किया है। इस ई-मेल पते से निम्न {{PLURAL:$3|खाता जुड़ा है|खाते जुड़े हैं}}:\n\n$2\n\n{{PLURAL:$3|यह|ये}} अस्थायी कूटशब्द {{PLURAL:$5|एक दिन|$5 दिनों}} के बाद काम नहीं करेंगे।\nआपको लॉग इन करके एक नया कूटशब्द अभी चुन लेना चाहिए। यदि यह अनुरोध किसी और ने किया है, या फिर आपको अपना मूल कूटशब्द याद आ गया है, और आप {{PLURAL:$3|अपना|अपने}} कूटशब्द नहीं बदलना चाहते, आप इस संदेश को अनदेखा कर के अपने पुराने कूटशब्द का प्रयोग जारी रख सकते हैं।",
        "passwordreset-emailelement": "सदस्यनाम: \n$1\n\nअस्थायी कूटशब्द: \n$2",
-       "passwordreset-emailsentemail": "à¤\8fà¤\95 à¤\95à¥\82à¤\9fशबà¥\8dद à¤°à¥\80सà¥\87à¤\9f à¤\88-मà¥\87ल भेज दिया गया है।",
+       "passwordreset-emailsentemail": "यदि à¤\86पà¤\95ा à¤¯à¤¹ à¤\88मà¥\87ल à¤\86पà¤\95à¥\87 à¤\96ातà¥\87 à¤\95à¥\87 à¤¸à¤¾à¤¥ à¤\9cà¥\8bड़ा à¤\97या à¤¹à¥\88 à¤¤à¥\8b à¤ªà¤¾à¤¸à¤µà¤°à¥\8dड à¤¬à¤¦à¤²à¤¨à¥\87 à¤\95ा à¤\88मà¥\87ल à¤\87समà¥\87à¤\82 भेज दिया गया है।",
        "passwordreset-emailsentusername": "यदि कोई ईमेल इस खाते से जुड़ी है तो पासवर्ड आपके ईमेल में भेज दिया जाएगा।",
        "passwordreset-emailsent-capture": "नीचे दिखाया गया कूटशब्द रीसेट ई-मेल भेज दिया गया है।",
        "passwordreset-emailerror-capture": "नीचे दृष्टित कूटशब्द रीसेट ई-मेल उत्पन्न किया गया था, परंतु उसे {{GENDER:$2|सदस्य}} को भेजना असफल रहा।\nत्रुटि: $1",
        "resettokens-done": "टोकन रीसेट कर दिए गए।",
        "resettokens-resetbutton": "चुने हुए टोकन रीसेट करें",
        "bold_sample": "मोटा पाठ",
-       "bold_tip": "बà¥\8bलà¥\8dड पाठ",
+       "bold_tip": "à¤\97हरा पाठ",
        "italic_sample": "तिरछा पाठ",
-       "italic_tip": "à¤\87à¤\9fà¥\88लिà¤\95 पाठ",
+       "italic_tip": "तिरà¤\9bा पाठ",
        "link_sample": "कड़ी शीर्षक",
        "link_tip": "आंतरिक कड़ी",
        "extlink_sample": "http://www.example.com कड़ी शीर्षक",
        "previewnote": "'''याद रखें, यह केवल एक झलक है।'''\nआपके बदलाव अभी तक संजोये नहीं गए हैं!",
        "continue-editing": "संपादन क्षेत्र को जाएँ",
        "previewconflict": "यह झलक ऊपरी पाठ सम्पादन क्षेत्र में हुए बदलाव दिखाती है, और यदि आप अभी संजोते हैं तो यही पाठ संजोया जाएगा।",
-       "session_fail_preview": "'''क्षमा करें! सेशन डाटा के नष्ट होने के कारण आपके बदलाव संजोये नहीं जा सके।'''\nकृपया पुन: यत्न करें।\nअगर इसके बाद भी ऐसा ही होता है तो कृपया [[Special:UserLogout|लॉग आउट]] कर के पुनः लॉग इन करें।",
+       "session_fail_preview": "'''क्षमा करें! सेशन डाटा के नष्ट होने के कारण आपके बदलाव संजोये नहीं जा सके।'''\nकृपया पुन: यत्न करें। अगर इसके बाद भी ऐसा ही होता है तो कृपया [[Special:UserLogout|लॉग आउट]] कर के पुनः लॉग इन करें।",
        "session_fail_preview_html": "'''क्षमा करें! सेशन डाटा के नष्ट होने के कारण आपके बदलाव संजोये नहीं जा सके।'''\n\n''चूँकि {{SITENAME}} पर raw HTML सक्षम है, जावास्क्रिप्ट हमलों से बचाव के लिये झलक नहीं दिखाई गई है।''\n\n'''अगर यह आपका वैध संपादन यत्न था, तो कृपया पुनः यत्न करें।'''\nअगर इसके बाद भी ऐसा ही होता है तो कृपया [[Special:UserLogout|लॉग आउट]] कर के पुनः लॉग इन करें।",
        "token_suffix_mismatch": "'''आपके द्वारा किये गये बदलाव रद्द कर दिये गये हैं क्योंकि आपके क्लायंट ने आपके संपादन टोकन में दिये हुए विरामचिन्हों में बदलाव किये हैं।'''\nलेख के पाठ में खराबी ना आये इसलिये आपके बदलाव रद्द कर दिये गये हैं।\nऐसा तब भी हो सकता है यदि आप कोई खराब वेब-आधारित अनामक प्रौक्सी प्रयोग कर रहे हों।",
        "edit_form_incomplete": "'''सम्पादन फ़ॉर्म के कुछ भाग सर्वर तक नहीं पहुँच पाए; जाँच लें कि आपके द्वारा किये बदलाव अक्षुण्ण हैं, और सहेजने का पुनः यत्न करें।'''",
        "editwarning-warning": "इस पृष्ठ को छोड़ने पर आपके द्वारा किये गए कोई भी बदलाव गायब हो जाएँगे।\nयदि आपने लॉग इन किया हुआ है तो आप इस सूचना का दिखना अपनी वरीयताओं के \"{{int:prefs-editing}}\" भाग में बंद कर सकते हैं।",
        "editpage-notsupportedcontentformat-title": "सामग्री स्वरूप समर्थित नहीं है",
        "editpage-notsupportedcontentformat-text": "$1 सामग्री स्वरूप $2 सामग्री मॉडल द्वारा समर्थित नहीं है।",
-       "content-model-wikitext": "विà¤\95िà¤\9fà¥\87à¤\95à¥\8dसà¥\8dà¤\9f",
+       "content-model-wikitext": "विà¤\95िपाठà¥\8dय",
        "content-model-text": "सामान्य पाठ",
        "content-model-javascript": "जावास्क्रिप्ट",
        "content-model-css": "सी॰एस॰एस",
+       "content-model-json": "जेसन",
        "content-json-empty-object": "रिक्त ऑब्जेक्ट",
        "content-json-empty-array": "रिक्त ऐरे",
        "duplicate-args-warning": "<strong>चेतावनी:</strong> [[:$1]] प्राचल \"$3\" के लिए [[:$2]] को एक से अधिक बार काम में ले रहा है। केवल अन्त में दिया गया मान ही काम में लिया जायेगा।",
        "undo-summary-username-hidden": "छुपाए गए सदस्य द्वारा किये बदलाव $1 को पूर्ववत किया",
        "cantcreateaccounttitle": "खाता खोल नहीं सकते",
        "cantcreateaccount-text": "इस आइ॰पी पते ('''$1''') को खाता निर्मित करने से [[User:$3|$3]] ने प्रतिबंधित किया है।\n\nइसके लिये $3 ने ''$2'' कारण दिया है।",
-       "cantcreateaccount-range-text": "'''$1''' की श्रेणी में आने वाले आई॰पी पतों से, जिसमें आपका आई॰पी पता ('''$4''') शामिल है, नए खातों की रचना [[User:$3|$3]] द्वारा अवरोधित की गयी है। \n\n$3 द्वारा दिया गया कारण है: \"$2\"",
+       "cantcreateaccount-range-text": "<strong>$1</strong> की श्रेणी में आने वाले आई॰पी पतों से, जिसमें आपका आई॰पी पता (<strong>$4</strong>) शामिल है, नए खातों की रचना [[User:$3|$3]] द्वारा अवरोधित की गयी है। \n\n$3 द्वारा दिया गया कारण है: \"$2\"",
        "viewpagelogs": "इस पृष्ठ का लॉग देखें",
        "nohistory": "इस पृष्ठ का कोई इतिहास नहीं है।",
        "currentrev": "सद्य अवतरण",
        "revdelete-submit": "चयनित {{PLURAL:$1|अवतरण|अवतरणों}} पर लागू करें",
        "revdelete-success": "'''अवतरण दृश्यता सफलतापूर्वक अद्यातानीत की गई।'''",
        "revdelete-failure": "'''अवतरण दृश्यता अद्यातानीत नहीं की जा सकी:'''\n$1",
-       "logdelete-success": "'''लॉग दृष्यता बदली गई।'''",
+       "logdelete-success": "लॉग दृष्यता बदली गई।",
        "logdelete-failure": "'''लॉग दृश्यता का जमाव नहीं किया जा सका:'''\n$1",
        "revdel-restore": "दृश्यता बदलें",
        "pagehist": "पृष्ठ इतिहास",
        "mergehistory-empty": "कोई भी अवतरण एकत्रित नहीं कर सकते।",
        "mergehistory-done": "$1 {{PLURAL:$3|का|के}} $3 अवतरण [[:$2]] में एकत्रित कर {{PLURAL:$3|दिया गया है|दिये गए हैं}}।",
        "mergehistory-fail": "इतिहास एकत्रित नहीं कर सकते, कृपया पृष्ठ और समय की पुनः जाँच करें।",
+       "mergehistory-fail-bad-timestamp": "समय संख्या अमान्य",
        "mergehistory-fail-invalid-source": "अमान्य स्रोत पृष्ठ",
        "mergehistory-fail-invalid-dest": "अमान्य लक्ष्य पृष्ठ",
+       "mergehistory-fail-no-change": "इतिहास विलय किसी भी अवतरण को विलय नहीं कर पाया। कृपया लेख और समय को दोबारा देखें।",
+       "mergehistory-fail-permission": "इतिहास विलय हेतु अधिकार कम है।",
+       "mergehistory-fail-self-merge": "स्रोत और भेजने वाला पृष्ठ समान है।",
+       "mergehistory-fail-timestamps-overlap": "स्रोत अवतरण भेजने वाले अवतरण के बाद आ रहा है।",
        "mergehistory-fail-toobig": "इतिहास विलय करना संभव नहीं है क्योंकि अवतरण सीमा $1 से अधिक {{PLURAL:$1|अवतरण|अवतरणों}} को स्थानांतरित करना होगा।",
        "mergehistory-no-source": "स्रोत पृष्ठ $1 मौजूद नहीं है।",
        "mergehistory-no-destination": "लक्ष्य पृष्ठ $1 मौजूद नहीं है।",
        "savedrights": "प्रयोक्ता {{GENDER:$1|$1}} का सदस्य अधिकार सहेजा गया।",
        "timezonelegend": "समयमंडल:",
        "localtime": "स्थानीय समय:",
-       "timezoneuseserverdefault": "विà¤\95à¥\80 à¤¡à¤¿à¤«à¤¼à¥\89लà¥\8dà¤\9f का उपयोग करें ($1)",
+       "timezoneuseserverdefault": "विà¤\95ि à¤®à¥\82ल का उपयोग करें ($1)",
        "timezoneuseoffset": "अन्य (समयांतर निर्दिष्ट करें)",
        "servertime": "सर्वर का समय:",
        "guesstimezone": "ब्राउज़र से भरें",
        "userrights": "सदस्य अधिकार व्यवस्थापन",
        "userrights-lookup-user": "सदस्य समूहों का व्यवस्थापन करें",
        "userrights-user-editname": "सदस्यनाम दें:",
-       "editusergroup": "सदस्य समूहों का संपादन करें",
+       "editusergroup": "{{GENDER:$1|सदस्य}} समूहों का संपादन करें",
        "editinguser": "सदस्य '''[[User:$1|$1]]''' $2 के अधिकार बदलें\n{{GENDER:$1|सदस्य}} के सदस्य अधिकार बदले जा रहे हैं <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "सदस्य समूहों का संपादन करें",
-       "saveusergroups": "सदस्य समूह संजोएँ",
+       "saveusergroups": "{{GENDER:$1|सदस्य}} समूह सहेजें",
        "userrights-groupsmember": "निम्न {{PLURAL:$1|समूह|समूहों}} का सदस्य:",
        "userrights-groupsmember-auto": "निम्न {{PLURAL:$1|समूह|समूहों}} का अंतर्निहित सदस्य:",
        "userrights-groups-help": "आप इस सदस्य की समूह-सदस्यता बदल सकते हैं:\n* बक्से पर सही का निशान लगे होने का अर्थ है कि सदस्य उस समूह में है।\n* बक्से पर सही का निशान न लगे होने का अर्थ है कि सदस्य उस समूह में नहीं है।\n* एक * का अर्थ है कि एक बार जोड़ने के बाद वह समूह हटा नहीं सकते हैं, और हटाने के बाद जोड़ नहीं सकते हैं।",
        "group-bot": "बॉट",
        "group-sysop": "प्रबंधक",
        "group-bureaucrat": "प्रशासक",
-       "group-suppress": "à¤\93वरसाà¤\88à¤\9fà¥\8dस",
+       "group-suppress": "à¤\9bà¥\81पानà¥\87 à¤µà¤¾à¤²à¥\87",
        "group-all": "(सभी)",
        "group-user-member": "{{GENDER:$1|सदस्य}}",
        "group-autoconfirmed-member": "{{GENDER:$1|स्वतः स्थापित सदस्य}}",
        "group-bot-member": "{{GENDER:$1|बॉट}}",
        "group-sysop-member": "{{GENDER:$1|प्रबंधक}}",
        "group-bureaucrat-member": "{{GENDER:$1|प्रशासक}}",
-       "group-suppress-member": "{{GENDER:$1|à¤\93वरसाà¤\88à¤\9f}}",
+       "group-suppress-member": "{{GENDER:$1|à¤\9bà¥\81पानà¥\87 à¤µà¤¾à¤²à¥\87}}",
        "grouppage-user": "{{ns:project}}:सदस्य",
        "grouppage-autoconfirmed": "{{ns:project}}:स्वतः स्थापित सदस्य",
        "grouppage-bot": "{{ns:project}}:बॉट",
        "grouppage-sysop": "{{ns:project}}:प्रबंधक",
        "grouppage-bureaucrat": "{{ns:project}}:प्रशासक",
-       "grouppage-suppress": "{{ns:project}}:à¤\93वरसाà¤\88à¤\9f",
+       "grouppage-suppress": "{{ns:project}}:à¤\9bà¥\81पाना",
        "right-read": "पृष्ठ पढ़ें",
        "right-edit": "पृष्ठ सम्पादित करें",
        "right-createpage": "पृष्ठ बनाएँ (जो चर्चा पृष्ठ नहीं हैं)",
        "right-createtalk": "वार्ता पृष्ठ बनाएँ",
        "right-createaccount": "नये सदस्य खाते बनाएँ",
+       "right-autocreateaccount": "बाहरी खाते से स्वतः प्रवेश",
        "right-minoredit": "अपने बदलाव छोटे चिन्हित करें",
        "right-move": "पृष्ठ स्थानांतरित करें",
        "right-move-subpages": "पृष्ठ उपपृष्ठों सहित स्थानांतरीत करें",
        "right-managechangetags": "डेटाबेस से [[Special:Tags|चिप्पियाँ]] बनायें और हटायें",
        "right-applychangetags": "प्रयोग में लाइये [[Special:Tags|tags]] किसी के बदलाव के साथ।",
        "right-changetags": "जमा करो और हटाओ स्वतंत्र [[Special:Tags|टैग]] व्यक्तिगत अवतरणों और लॉग प्रविक्तियों पर",
+       "grant-generic": "\"$1\" अधिकार संग्रह",
+       "grant-group-page-interaction": "पृष्ठों से जुड़ें",
+       "grant-group-file-interaction": "मीडिया से जुड़ें",
+       "grant-group-watchlist-interaction": "ध्यानसूची से जुड़ें",
        "grant-group-email": "ई-मेल भेजें",
+       "grant-group-high-volume": "उच्च कार्य गतिविधि करें",
+       "grant-group-customization": "पसंद और तय",
+       "grant-group-administration": "प्रबंधकीय कार्य करें",
+       "grant-group-other": "अन्य गतिविधि",
+       "grant-blockusers": "प्रतिबंधित और अप्रतिबंधित करना",
        "grant-createaccount": "खाता बनाएँ",
+       "grant-createeditmovepage": "निर्माण, सम्पादन, और स्थानांतरण करना",
+       "grant-delete": "लेख, अवतरण और लॉग हटाना",
+       "grant-editinterface": "मीडियाविकि नामस्थान और सदस्य सीएसएस/जेएस को संपादित करना।",
+       "grant-editmycssjs": "अपने सदस्य सीएसएस/जेएस को संपादित करें",
+       "grant-editmyoptions": "अपने सदस्य पसंद को संपादित करें",
        "grant-editmywatchlist": "ध्यानसूची संपादित करें",
+       "grant-editpage": "बने पृष्ठ संपादित करें",
+       "grant-editprotected": "सुरक्षित पृष्ठ संपादित करें",
+       "grant-highvolume": "अत्यधिक तेजी से सम्पादन",
+       "grant-oversight": "सदस्य को छुपाना और अवतरण हटाना",
+       "grant-patrol": "पृष्ठों को जांचा हुआ चिन्हित करना",
+       "grant-protect": "पृष्ठों को सुरक्षित व असुरक्षित करना",
+       "grant-rollback": "पृष्ठ से सम्पादन वापस लेना",
+       "grant-sendemail": "अन्य सदस्यों को ई-मेल भेजें",
+       "grant-uploadeditmovefile": "फ़ाइल अपलोड, बदलना, स्थानांतरण करना",
+       "grant-uploadfile": "नए फ़ाइल डालें",
        "grant-basic": "सामान्य अधिकार",
+       "grant-viewdeleted": "हटाये गए फ़ाइल व पृष्ठ देखें",
        "grant-viewmywatchlist": "अपनी ध्यानसूची देखें",
        "newuserlogpage": "सदस्य खाता निर्माण लॉग",
        "newuserlogpagetext": "यह सदस्य खातों के निर्माण का लॉग है।",
        "action-createpage": "पृष्ठ बनाने",
        "action-createtalk": "वार्ता पृष्ठ बनाने",
        "action-createaccount": "यह सदस्य खाता खोलने",
+       "action-autocreateaccount": "स्वतः ही बाहरी सदस्य खाता बनायें",
        "action-history": "इस पृष्ठ का इतिहास देखने",
        "action-minoredit": "इस बदलाव को छोटा बदलाव चिन्हित करने",
        "action-move": "इस पृष्ठ को स्थानांतरित करने",
        "action-protect": "इस पृष्ठ के सुरक्षा स्तर बदलने",
        "action-rollback": "किसी पृष्ठ का अंतिम सम्पादन करने वाले सदस्य के सम्पादन वापिस लेने",
        "action-import": "किसी और विकि से पृष्ठ आयात करने",
-       "action-importupload": "फ़ाइल अपलोड द्वारा यह पृष्ठ आयात करे",
+       "action-importupload": "फ़ाइल अपलोड द्वारा यह पृष्ठ आयात करे",
        "action-patrol": "अन्य सदस्यों के सम्पादन परीक्षित करने",
        "action-autopatrol": "अपने सम्पादन स्वचालित रूप से परीक्षित करने",
        "action-unwatchedpages": "ऐसे पृष्ठ जो किसी की ध्यानसूची में नहीं हैं की सूची देखने",
        "recentchanges-label-bot": "यह संपादन एक बॉट द्वारा किया गया था",
        "recentchanges-label-unpatrolled": "यह संपादन अभी जाँचा नहीं गया है",
        "recentchanges-label-plusminus": "पृष्ठ आकार इस बाइट संख्या से बदला",
-       "recentchanges-legend-heading": "'''कुंजी:'''",
+       "recentchanges-legend-heading": "<strong>कुंजी:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नए पन्नों की सूची]] को भी देखें)",
        "recentchanges-submit": "दिखाएँ",
        "rcnotefrom": "नीचे <strong>$2</strong> के बाद से (<strong>$1</strong> तक) {{PLURAL:$5|हुआ बदलाव दर्शाया गया है|हुए बदलाव दर्शाए गये हैं}}।",
        "uploaded-script-svg": "अपलोड की गयी एसवीजी फ़ाइल में स्क्रीप्ट अवयव \"$1\" पाया गया।",
        "uploaded-hostile-svg": "अपलोड की गयी एसवीजी फाइल के शैली अवयव में असुरक्षित सीएसएस पायी गयी।",
        "uploaded-event-handler-on-svg": "सेटिंग ईवेंट हैंडलर (आयोजन प्रबन्धनकर्ता वरियता) <code>$1=\"$2\"</code> एसवीजी फ़ाइल में अनुमत नहीं है।",
+       "uploaded-href-attribute-svg": "href केवल एसवीजी फ़ाइल हेतु ही http:// या https:// उपयोग करने देता है। <code>&lt;$1 $2=\"$3\"&gt;</code>",
        "uploaded-href-unsafe-target-svg": "अपलोड की गयी फ़ाइल में असुरक्षित लक्ष्य <code>&lt;$1 $2=\"$3\"&gt;</code> पाये गए।",
        "uploaded-animate-svg": "चिप्पि \"animate\" पायी गई जिससे href परिवर्तित हो सकता है, अपलोड की गयी फ़ाइल में \"from\" विशेषता <code>&lt;$1 $2=\"$3\"&gt;</code> काम में ली जा रही है।",
        "uploaded-setting-event-handler-svg": "विकल्प आयोजन-संभालने वाला अवरोधित है, एसवीजी फ़ाइल में मिला <code>&lt;$1 $2=\"$3\"&gt;</code> है।",
        "upload-too-many-redirects": "इस यू॰आर॰एल में अत्यधिक पुनर्निर्देशन हैं",
        "upload-http-error": "एक एच॰टी॰टी॰पी त्रुटि आई: $1",
        "upload-copy-upload-invalid-domain": "कॉपी अपलोड इस डोमेन से उपलब्ध नहीं हैं।",
+       "upload-foreign-cant-upload": "यह विकि अन्य फ़ाइल संग्रह में अपलोड हेतु तय नहीं किया गया है।",
        "upload-dialog-title": "फ़ाइल डालें",
        "upload-dialog-button-cancel": "रद्द करें",
        "upload-dialog-button-done": "पूर्ण हुआ",
        "upload-dialog-button-upload": "डालें",
        "upload-form-label-infoform-title": "विवरण",
        "upload-form-label-infoform-name": "नाम",
+       "upload-form-label-infoform-name-tooltip": "एक अनोखा विवरण शीर्षक इस फ़ाइल हेतु डालें, जी इसे फ़ाइल के रूप में दिखाये। आप इसके लिए साधारण भाषा और रिक्त स्थान का उपयोग कर सकते हैं। फ़ाइल प्रारूप को न जोड़ें। \\",
        "upload-form-label-infoform-description": "विवरण",
+       "upload-form-label-infoform-description-tooltip": "छोटे रूप में बतायें इस के उलेखनीयता के बारे में। \n चित्र हेतु, जो मुख्य वस्तु नहीं दिखाया गया है आदि के स्थान।",
        "upload-form-label-usage-title": "उपयोग",
        "upload-form-label-usage-filename": "फ़ाइल का नाम",
        "foreign-structured-upload-form-label-own-work": "यह मेरा कार्य है",
        "backend-fail-read": "फ़ाइल $1 पढ़ी नहीं जा सकी।",
        "backend-fail-create": "फ़ाइल $1 लिखी नहीं जा सकी।",
        "backend-fail-maxsize": "फ़ाइल $1 लिखी नहीं जा सकी क्योंकि यह {{PLURAL:$2|$2 बाईट}} से बड़ी है।",
-       "backend-fail-readonly": "भंडारण बैकेंड \"$1\" इस समय केवल पढ़ा जा सकता है (रीड-ओन्ली है)। दिया गया कारण था: \"$2\"",
+       "backend-fail-readonly": "भंडारण बैकेंड \"$1\" इस समय केवल पढ़ा जा सकता है (रीड-ओन्ली है)। दिया गया कारण था: <em>$2</em>",
        "backend-fail-synced": "फ़ाइल \"$1\" आतंरिक भंडारण बैकेंड में असंगत स्थिति में है।",
        "backend-fail-connect": "\"$1\" भंडारण बैकेंड से सम्पर्क स्थापित नहीं किया जा सका।",
        "backend-fail-internal": "भंडारण बैकेंड \"$1\" में कोई अज्ञात त्रुटि उत्पन्न हुई।",
        "uploadstash-clear": "स्टैश की गई फ़ाइलें साफ़ करें",
        "uploadstash-nofiles": "आपके पास कोई स्टैश की हुई फ़ाइलें नहीं हैं।",
        "uploadstash-badtoken": "वह कार्य असफल रहा, सम्भवतः आपके सम्पादन प्रमाणपत्र की अवधि समाप्त हो गई है। पुनः प्रयास करें।",
-       "uploadstash-errclear": "à¥\9eाà¤\87लà¥\8bà¤\82 à¤\95à¥\8b à¤¸à¤¾à¥\9e करना असफल रहा।",
+       "uploadstash-errclear": "फ़ाà¤\87लà¥\8bà¤\82 à¤\95à¥\8b à¤¸à¤¾à¤«à¤¼ करना असफल रहा।",
        "uploadstash-refresh": "फ़ाइलों की सूची रिफ़्रेश करें",
        "invalid-chunk-offset": "अग्राह्य चंक ऑफ़सेट",
        "img-auth-accessdenied": "अनुमति नहीं है",
        "filehist-deleteall": "सभी हटाएँ",
        "filehist-deleteone": "हटाएँ",
        "filehist-revert": "पूर्ववत करें",
-       "filehist-current": "सदà¥\8dय",
+       "filehist-current": "वरà¥\8dतमान",
        "filehist-datetime": "दिनांक/समय",
        "filehist-thumb": "अंगूठाकार प्रारूप",
        "filehist-thumbtext": "$1 के संस्करण का अंगूठाकार प्रारूप।",
        "uploadnewversion-linktext": "इस फ़ाइल का नया अवतरण अपलोड करें",
        "shared-repo-from": "$1 से",
        "shared-repo": "एक साझे भंडार",
+       "shared-repo-name-wikimediacommons": "विकिमीडिया कॉमन्स",
        "upload-disallowed-here": "आप इस फ़ाइल को अधिलेखित नहीं कर सकते।",
        "filerevert": "$1 पूर्ववत करें",
        "filerevert-legend": "फ़ाइल पूर्ववत करें",
        "filerevert-intro": "आप '''[[Media:$1|$1]]''' के [$4 $2 को $3 बजे के अवतरण] को पूर्ववत कर रहे हैं।",
        "filerevert-comment": "कारण:",
-       "filerevert-defaultcomment": "$1 को $2 बजे के अवतरण को पूर्ववत किया",
+       "filerevert-defaultcomment": "$2, $1 ($3) के अवतरण को पूर्ववत किया",
        "filerevert-submit": "पूर्ववत करें",
        "filerevert-success": "'''[[Media:$1|$1]]''' को [$4 $2 को $3 बजे के अवतरण] को पूर्ववत कर दिया गया है।",
        "filerevert-badversion": "दिये हुए समय से मेल खाने वाला इस फ़ाइल का पुराना अवतरण नहीं है।",
        "protectedpages-performer": "सुरक्षित करने वाला सदस्य",
        "protectedpages-params": "सुरक्षा प्राचल",
        "protectedpages-reason": "कारण",
+       "protectedpages-submit": "पृष्ठों को दिखाओ",
        "protectedpages-unknown-timestamp": "अज्ञात",
        "protectedpages-unknown-performer": "अज्ञात सदस्य",
        "protectedtitles": "सुरक्षित शीर्षक",
        "protectedtitles-summary": "यह पृष्ठ उन पृष्ठ शीर्षकों की सूची देता है जिन्हें अभी बनाने से सुरक्षित किया गया है। सुरक्षित मौजूदा पृष्ठों की सूची देखने के लिए [[{{#special:ProtectedPages}}|{{int:protectedpages}}]] देखें।",
        "protectedtitlesempty": "इन नियमों द्वारा कोई भी शीर्षक सुरक्षित नहीं हैं।",
+       "protectedtitles-submit": "शीर्षकों को दिखाओ",
        "listusers": "सदस्यसूची",
        "listusers-editsonly": "केवल संपादन कर चुके सदस्य दिखाएँ",
        "listusers-creationsort": "निर्माण तिथि के आधार पर क्रमांकन करें",
        "nopagetext": "आपके द्वारा लक्षित पृष्ठ मौजूद नहीं है।",
        "pager-newer-n": "{{PLURAL:$1|नया|नये}} $1",
        "pager-older-n": "{{PLURAL:$1|पुराना|पुराने}} $1",
-       "suppress": "à¤\93वरसाà¤\87à¤\9f",
+       "suppress": "à¤\9bà¥\81पाना",
        "querypage-disabled": "प्रदर्शन कारणों से यह विशेष पृष्ठ अक्षम किया गया है।",
-       "apihelp": "ए पी आई सहाएता",
+       "apihelp": "एपीआई सहायता",
        "apihelp-no-such-module": "मॉड्यूल \"$1\" नहीं मिला",
        "apisandbox": "ए॰पी॰आइ प्रयोगस्थल",
+       "apisandbox-jsonly": "एपीआई प्रयोगपृष्ठ का उपयोग करने हेतु जावास्क्रिप्ट अनिवार्य है।",
        "apisandbox-api-disabled": "इस स्थल पर ए०पी०आई० सक्षम नहीं हैं।",
-       "apisandbox-intro": "याद रखिए कि, हालांकि यह प्रयोगपृष्ठ है, इस पृष्ठ पर किए गए आपके काम इस विकि में बदलाव ला सकते हैं।",
+       "apisandbox-intro": "इस पृष्ठ का उपयोग <strong>मीडियाविकि वेब एपीआई</strong> के लिए करें। इसके उपयप्ग हेतु देखें: [[mw:API:Main page|एपीआई प्रलेखन]] उदाहरण: [//www.mediawiki.org/wiki/API#A_simple_example मुख्यपृष्ठ के सामग्री हेतु]",
+       "apisandbox-fullscreen": "विस्तार करें",
+       "apisandbox-fullscreen-tooltip": "ब्राउज़र को पूरी तरह भरने हेतु विस्तार करें।",
        "apisandbox-unfullscreen": "पृष्ठ दिखाएँ",
+       "apisandbox-unfullscreen-tooltip": "प्रयोगपृष्ठ हिस्से को छोटा करें, जिससे मीडियाविकि के संचरण कड़ी उपलब्ध हो जाएगा।",
        "apisandbox-submit": "अनुरोध करें",
        "apisandbox-reset": "स्पष्ट",
        "apisandbox-retry": "दुबारा प्रयास करें",
-       "apisandbox-examples": "Example",
+       "apisandbox-loading": "एपीआई मॉड्यूल के द्वारा जानकारी लोड कर रहा \"$1\"...",
+       "apisandbox-load-error": "एपीआई मॉड्यूल के जानकारी लोड करते समय त्रुटि हुई \"$1\": $2",
+       "apisandbox-no-parameters": "इस एपीआई मॉड्यूल का कोई प्राचल नहीं है।",
+       "apisandbox-helpurls": "सहायता कड़ी",
+       "apisandbox-examples": "उदाहरण",
+       "apisandbox-dynamic-parameters": "अन्य प्राचल",
+       "apisandbox-dynamic-parameters-add-label": "प्राचल जोड़ें:",
+       "apisandbox-dynamic-parameters-add-placeholder": "प्राचल नाम",
+       "apisandbox-dynamic-error-exists": "प्राचल नाम \"$1\" पहले से मौजूद है।",
+       "apisandbox-deprecated-parameters": "प्राचल पुराना हो चुका है",
+       "apisandbox-fetch-token": "टोकन स्वतः भरें",
+       "apisandbox-submit-invalid-fields-title": "कुछ जगह अमान्य है",
+       "apisandbox-submit-invalid-fields-message": "कृपया चिन्हित जगह को ठीक कर दुबारा प्रयास करें।",
        "apisandbox-results": "परिणाम",
+       "apisandbox-sending-request": "एपीआई अनुरोध भेज रहा...",
+       "apisandbox-loading-results": "एपीआई परिणाम ले रहा...",
+       "apisandbox-results-error": "एपीआई के समय कोई त्रुटि हुई: $1",
        "apisandbox-request-url-label": "अनुरोध URL:",
-       "apisandbox-request-time": "अनुरोध समय: $1",
+       "apisandbox-request-time": "अनुरोध समय: {{PLURAL:$1|$1 मि}}",
+       "apisandbox-results-fixtoken": "टोकन सही करें और दोबारा भेजें।",
+       "apisandbox-results-fixtoken-fail": "टोकन \"$1\" डालने में विफल",
+       "apisandbox-alert-page": "इस पृष्ठ के जगह अमान्य है।",
+       "apisandbox-alert-field": "जगह में डाला गया जानकारी अमान्य है।",
        "booksources": "पुस्तकों के स्रोत",
        "booksources-search-legend": "पुस्तकों के स्रोत खोजें",
        "booksources-isbn": "आइ॰एस॰बी॰एन:",
        "booksources-text": "नीचे पुरानी और नई पुस्तकें बेचने वाली वेबसाइटों के एड्रेस हैं, जिसमें आपको आप द्वारा खोजी जाने वाली पुस्तक के बारे में अधिक जानकारी मिल सकती है:",
        "booksources-invalid-isbn": "यह आइ॰एस॰बी॰एन सही नहीं लग रहा है; मूल स्रोत से नकल करने में हुई त्रुटि के लिए जाँचें।",
        "specialloguserlabel": "कर्ता:",
-       "speciallogtitlelabel": "प्रयोजन (शीर्षक अथवा सदस्यनाम):",
+       "speciallogtitlelabel": "प्रयोजन (शीर्षक अथवा {{ns:सदस्यनाम}}:सदस्य नाम):",
        "log": "लॉग",
        "logeventslist-submit": "दिखाएँ",
        "all-logs-page": "सभी सार्वजनिक लॉग",
        "log-edit-tags": "चुने गए लॉग प्रविक्तियों एक सम्पादन टैग",
        "checkbox-select": "चुनें: $1",
        "checkbox-all": "सभी",
+       "checkbox-none": "कोई नहीं",
+       "checkbox-invert": "बदलें",
        "allpages": "सभी पृष्ठ",
        "nextpage": "अगला पृष्ठ ($1)",
        "prevpage": "पिछला पृष्ठ ($1)",
        "listgrouprights-namespaceprotection-header": "नामस्थान की बंदिशें",
        "listgrouprights-namespaceprotection-namespace": "नामस्थान",
        "listgrouprights-namespaceprotection-restrictedto": "उपयोगकर्ता को सम्पादन करने में सक्षम करने वाले अधिकार",
+       "listgrants": "प्रदान",
+       "listgrants-summary": "यह प्रदान की गई सूची है। सदस्य अपने खाते को अनुपयोग के द्वारा उपयोग कर सकते हैं, लेकिन केवल कुछ सीमित अधिकार तक ही। यह अधिकार सदस्य द्वारा दिया गया अधिकार तक ही सीमित रहता है। यहाँ [[{{MediaWiki:Listgrouprights-helppage}}|अन्य जानकारी]] भी है, जो एक अधिकार के बारे में बताता है। \\",
+       "listgrants-grant": "अधिकार",
+       "listgrants-rights": "अधिकार",
        "trackingcategories": "चिह्नित श्रेणियाँ",
        "trackingcategories-summary": "इस पृष्ठ पर उन जोड़ने वाली श्रेणियों की सूची मिलती है जो स्वतः रूप से मीडियाविकि सॉफ़्टवेयर द्वारा बनते हैं। उनके नाम सम्बंधित प्रणालि सन्देश को बदलने से {{ns:8}} नामस्थान में बदले जा सकते हैं।",
        "trackingcategories-msg": "चिह्नित श्रेणी",
        "defemailsubject": "{{SITENAME}} ई-मेल \"$1\" सदस्य से",
        "usermaildisabled": "सदस्य ई-मेल अक्षम किया गया",
        "usermaildisabledtext": "आप इस विकि पर ई-मेल अन्य सदस्यों को ई-मेल नहीं भेज सकते हैं",
-       "noemailtitle": "à¤\95à¥\8bà¤\88 à¤\88-मà¥\87ल à¤\8fडà¥\8dरà¥\87स नहीं",
+       "noemailtitle": "à¤\95à¥\8bà¤\88 à¤\88-मà¥\87ल à¤ªà¤¤à¤¾ नहीं",
        "noemailtext": "इस सदस्य ने वैध ई-मेल पता नहीं दिया है।",
        "nowikiemailtext": "इस सदस्य ने अन्य सदस्यों से ई-मेल न प्राप्त करने का फ़ैसला लिया हुआ है।",
        "emailnotarget": "प्राप्तकर्ता के लिए अस्तित्वहीन या अमान्य सदस्यनाम।",
        "emailtarget": "प्राप्तकर्ता का सदस्यनाम भरें",
        "emailusername": "सदस्यनाम:",
-       "emailusernamesubmit": "à¤\9cमा à¤\95रें",
+       "emailusernamesubmit": "भà¥\87à¤\9cें",
        "email-legend": "किसी और {{SITENAME}} सदस्य को ई-मेल भेजें",
        "emailfrom": "प्रेषक:",
        "emailto": "प्राप्तकर्ता:",
        "wlshowhideanons": "अनाम प्रयोक्ता",
        "wlshowhidepatr": "परीक्षित सम्पादन",
        "wlshowhidemine": "मेरा संपादन",
+       "wlshowhidecategorization": "पृष्ठ श्रेणीकरण",
        "watchlist-options": "ध्यानसूची विकल्प",
        "watching": "ध्यान दे रहे हैं...",
        "unwatching": "ध्यान हटा रहे हैं...",
        "deletepage": "पृष्ठ हटाएँ",
        "confirm": "सुनिश्चित करें",
        "excontent": "पाठ था: '$1'",
-       "excontentauthor": "पाठ था: '$1' (और सिर्फ '[[Special:Contributions/$2|$2]]' का योगदान था।)",
+       "excontentauthor": "पाठ था: '$1' (और सिर्फ '[[Special:Contributions/$2|$2]]' का योगदान था। ([[User talk:$2|वार्ता]])",
        "exbeforeblank": "खाली करने से पहले पाठ था: '$1'",
        "delete-confirm": "\"$1\" को हटाएँ",
        "delete-legend": "हटाएँ",
        "rollbackfailed": "वापिस लेना असफल रहा",
        "cantrollback": "पुराने अवतरण को पूर्ववत नहीं कर सकते हैं;\nइस पृष्ठ का अन्तिम योगदानकर्ता इस लेख का एकमात्र लेखक है।",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|वार्ता]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) द्वारा किए गए  [[:$1]] के पिछले संपादन को वापिस पुरानी स्थिति पर नहीं लाया जा सकता है;\nकिसी और ने इस बीच या तो इस पृष्ठ को फिर से संपादित कर दिया है या पहले ही पृष्ठ पुरानी स्थिति पर लाया जा चुका है।\n\nइस पृष्ठ का अन्तिम संपादन [[User:$3|$3]] ([[User talk:$3|वार्ता]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) ने किया है।",
-       "editcomment": "संपादन सारांश था: \"''$1''\"।",
+       "editcomment": "संपादन सारांश था: <em>$1</em>।",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) के संपादनों को हटाकर [[User:$1|$1]] के अन्तिम अवतरण को पूर्ववत किया",
        "revertpage-nouser": "(सदस्य नाम हटाया गया है) के संपादनों को हटाकर {{GENDER:$1|[[User:$1|$1]]}} के अन्तिम अवतरण को पूर्ववत किया।",
        "rollback-success": "$1 के संपादन हटाए;\n$2 द्वारा संपादित अन्तिम अवतरण को पुनर्स्थापित किया।",
        "changecontentmodel-title-label": "पृष्ठ शीर्षक",
        "changecontentmodel-model-label": "नयि सामग्री का नमूना",
        "changecontentmodel-reason-label": "कारण:",
+       "changecontentmodel-submit": "परिवर्तन",
        "changecontentmodel-success-title": "सामगरि का नामुने मे बदलाव हुुुाा हेेे",
        "changecontentmodel-success-text": "[[:$1]] के सामग्री का प्रकार परिवर्तित हुआ।",
        "changecontentmodel-cannot-convert": "[[:$1]] की सामग्री का प्रकार $2 में नहीं बदल सकता है।",
        "changecontentmodel-nodirectediting": "$1 सामग्री सीधे सम्पादन समर्थित नहीं करता है",
        "log-name-contentmodel": "सामाग्री परिवर्तन लॉग",
        "log-description-contentmodel": "आयोजन जो इस पृष्ठ के सामग्री से मिलते जुलते हैं",
+       "logentry-contentmodel-new": "$1 ने  $3 पृष्ठ का {{GENDER:$2|निर्माण}} किया बिना मूल सामग्री प्रारूप के \"$5\"",
        "logentry-contentmodel-change": "$1 ने $3 पृष्ठ का सामग्री \"$4\" से \"$5\" {{GENDER:$2|परिवर्तित किया}}",
        "logentry-contentmodel-change-revertlink": "पूर्ववत करें",
        "logentry-contentmodel-change-revert": "पूर्ववत करें",
        "contribsub2": "{{GENDER:$3|$1}} ($2) के लिये",
        "contributions-userdoesnotexist": "उपयोगकर्ता खाता  \"$1\" पंजीकृत नहीं है।",
        "nocontribs": "इन कसौटियों से मिलनेवाले बदलाव मिले नहीं।",
-       "uctop": "(मà¥\8cà¤\9cà¥\82दा)",
+       "uctop": "(वरà¥\8dतमान)",
        "month": "इस महिनेसे (और पुरानें):",
        "year": "इस सालसे (और पुराने):",
        "sp-contributions-newbies": "सिर्फ़ नये सदस्यों के योगदान दर्शायें",
        "sp-contributions-blocked-notice": "यह सदस्य फ़िलहाल अवरोधित हैं। सदंर्भ के लिए ताज़ातरीन अवरोध चिट्ठा प्रविष्टि नीचे है:",
        "sp-contributions-blocked-notice-anon": "यह आईपी पता अभी अवरोधित है। \nनवीनतम अवरोध अभिलेख प्रविष्टि सन्दर्भ के लिए नीचे दी गई है:",
        "sp-contributions-search": "योगदान के लिये खोज",
-       "sp-contributions-username": "à¤\86à¤\88पà¥\80 à¤\8fडà¥\8dरà¥\87स या सदस्यनाम:",
+       "sp-contributions-username": "à¤\86à¤\88पà¥\80 à¤ªà¤¤à¤¾ या सदस्यनाम:",
        "sp-contributions-toponly": "केवल उन सम्पादनों को दिखाएँ जो नवीनतम संशोधन हैं",
        "sp-contributions-newonly": "केवल वे सम्पादन दिखाएँ जिनसे पृष्ठ निर्मित हुए हों",
        "sp-contributions-submit": "खोजें",
        "whatlinkshere-hidelinks": "$1 कड़ियाँ",
        "whatlinkshere-hideimages": "$1 फ़ाइल लिंक",
        "whatlinkshere-filters": "छन्ने",
+       "whatlinkshere-submit": "जायें",
        "autoblockid": "स्वतः अवरोध #$1",
        "block": "उपयोक्ता को अवरोधित करें।",
        "unblock": "उपयोक्ता पर अवरोधण हटाएँ",
        "block-log-flags-hiddenname": "सदस्य नाम छिपा हुआ",
        "range_block_disabled": "प्रबंधकोंको अब रेंज ब्लॉक करने की अनुमति नहीं हैं।",
        "ipb_expiry_invalid": "अवैध समाप्ति कालावधी।",
+       "ipb_expiry_old": "समाप्ती समय बीत चुका है।",
        "ipb_expiry_temp": "छुपायें हुए सदस्यनाम ब्लॉक्स हमेशा के लिये होने चाहिये।",
        "ipb_hide_invalid": "इस खाते को छिपा नहीं पाए; इस से {{PLURAL:$1|एक सम्पादन किया गया है|$1 सम्पादन किये गये हैं}}।",
        "ipb_already_blocked": "\"$1\" को पहलेसे ब्लॉक हैं",
        "cant-move-to-user-page": "आपको किसी पन्नो को सदस्य पृष्ठ पर ले जाने की अनुमति नहीं है (सिवाय सदस्य उप पृष्ठ के)",
        "cant-move-category-page": "आपको श्रेणी प्रष्ठों को स्थानांतरित करने की अनुमति नहीं है।",
        "cant-move-to-category-page": "आपको किसी पृष्ठ को श्रेणी पृष्ठ पर स्थानांतरित करने की अनुमति नहीं है।",
-       "newtitle": "नयà¥\87 à¤¶à¥\80रà¥\8dषà¤\95 à¤\95à¥\80 à¤\93र:",
+       "newtitle": "नया à¤¶à¥\80रà¥\8dषà¤\95:",
        "move-watch": "ध्यान रखें",
        "movepagebtn": "नाम बदलें",
        "pagemovedsub": "नाम बदल दिया गया है",
        "export-download": "फ़ाईलके रुपमें सेव करें",
        "export-templates": "टेम्प्लेटस भी जोडें",
        "export-pagelinks": "जिन पन्नों के हवाले यहाँ हैं, उन्हें भी इस गहराई तक शामिल करें:",
+       "export-manual": "स्वयं से पृष्ठ जोड़ें:",
        "allmessages": "व्यवस्था संदेश",
        "allmessagesname": "नाम",
        "allmessagesdefault": "डिफॉल्ट पाठ",
        "thumbnail_gd-library": "अवैध जीडी लाइब्रेरी जमाव: कार्यसमूह $1 मौजूद नहीं है",
        "thumbnail_image-missing": "लगता है संचिका नामौजूद है: $1",
        "thumbnail_image-failure-limit": "हाल के समय में इस थंबनेल को दूसरा रूप देने के कई असफल प्रयास हुए हैं ($1 या उससे अधिक) । कृपया फिर से प्रयास कुछ समय बाद कीजिए।",
-       "import": "पà¥\83षà¥\8dठ à¤\87मà¥\8dपà¥\8bरà¥\8dà¤\9f करें",
-       "importinterwiki": "किसी और विकि से आयात करे",
+       "import": "पà¥\83षà¥\8dठ à¤\86यात करें",
+       "importinterwiki": "किसी और विकि से आयात करे",
        "import-interwiki-text": "आयात करने के लिये एक विकि और एक पृष्ठ चुनें।\nअवतरण दिनांक और संपादक नाम ज्यों-के-त्यों रखे जाएँगे।\nअन्य विकि से सभी आयात [[Special:Log/import|आयात लॉग]] में डाली जाती हैं।",
        "import-interwiki-sourcewiki": "स्रोत विकि:",
        "import-interwiki-sourcepage": "स्रोत पृष्ठ:",
        "tooltip-pt-preferences": "{{GENDER:|आपकी}} वरीयताएँ",
        "tooltip-pt-watchlist": "आपने ध्यान दिये हुए पन्नोंकी सूची",
        "tooltip-pt-mycontris": "आपके योगदानों की सूची",
+       "tooltip-pt-anoncontribs": "इस आईपी पते से संपादन की सूची",
        "tooltip-pt-login": "आपको सत्रारम्भ करने के लिए प्रोत्साहित किया जाता है; लेकिन यह अनिवार्य नहीं है",
-       "tooltip-pt-logout": "सतà¥\8dराà¤\82त",
+       "tooltip-pt-logout": "पà¥\8dरसà¥\8dथान",
        "tooltip-pt-createaccount": "हमारा सुझाव है की आप खाता बनाएँ और लॉगिन करें, परन्तु यह अनिवार्य नहीं है",
        "tooltip-ca-talk": "सामग्री पृष्ठ के बारे में वार्तालाप",
        "tooltip-ca-edit": "यह पृष्ठ संपादित करें",
        "tooltip-t-recentchangeslinked": "यहाँ जुड़े हुए सभी पन्नों में हुए हाल के बदलाव",
        "tooltip-feed-rss": "इस पृष्ठ की आरएसएस फ़ीड",
        "tooltip-feed-atom": "इस पृष्ठ की अणु फ़ीड",
-       "tooltip-t-contributions": "इस सदस्य के योगदान की सूची",
-       "tooltip-t-emailuser": "इस सदस्य को इमेल भेजें",
+       "tooltip-t-contributions": "{{GENDER:$1|इस सदस्य}} के योगदाओं की सूची",
+       "tooltip-t-emailuser": "{{GENDER:$1|इस सदस्य}} को इमेल भेजें",
        "tooltip-t-info": "इस पृष्ठ के बारे में अधिक जानकारी",
        "tooltip-t-upload": "फ़ाइल अपलोड करें",
        "tooltip-t-specialpages": "सभी विशेष पृष्ठों की सूची",
        "tooltip-preferences-save": "वरीयताएं सहेजें",
        "tooltip-summary": "एक संक्षिप्त सारांश दर्ज करें",
        "common.css": "/* यहां रखी css सभी त्वचाओंपर असर करेगी */",
+       "print.css": "/* CSS यहाँ डालने से यह प्रिंट निकालते समय ही प्रभावी होगा। */",
+       "noscript.css": "/* CSS यहाँ डालने से यह केवल जावास्क्रिप्ट निष्क्रिय सदस्यो पर ही प्रभावी होगा। */",
+       "group-autoconfirmed.css": "/* CSS यहाँ डालने से यह केवल स्वतः स्थापित सदस्यो पर ही प्रभावी होगा। */",
+       "group-user.css": "/* CSS यहाँ डालने से यह केवल पंजीकृत सदस्यो पर ही प्रभावी होगा। */",
+       "group-bot.css": "/* CSS यहाँ डालने से यह केवल बॉट सदस्यो पर ही प्रभावी होगा। */",
+       "group-sysop.css": "/* CSS यहाँ डालने से यह केवल प्रबन्धकों पर ही प्रभावी होगा। */",
+       "group-bureaucrat.css": "/* CSS यहाँ डालने से यह केवल प्रशासकों सदस्यो पर ही प्रभावी होगा। */",
        "common.js": "/* यहां लिखी गई जावास्क्रीप्ट सभी सदस्योंके लिये इस्तेमाल में लाई जायेगी। */",
+       "group-autoconfirmed.js": "/* जावास्क्रिप्ट यहाँ डालने से यह केवल स्वतः स्थापित सदस्यो पर ही प्रभावी होगा। */",
+       "group-user.js": "/* जावास्क्रिप्ट यहाँ डालने से यह केवल पंजीकृत सदस्यो पर ही प्रभावी होगा। */",
+       "group-bot.js": "/* जावास्क्रिप्ट यहाँ डालने से यह केवल बॉट सदस्यो पर ही प्रभावी होगा। */",
+       "group-sysop.js": "/* जावास्क्रिप्ट यहाँ डालने से यह केवल प्रबन्धकों पर ही प्रभावी होगा। */",
+       "group-bureaucrat.js": "/* जावास्क्रिप्ट यहाँ डालने से यह केवल प्रशासकों पर ही प्रभावी होगा। */",
        "anonymous": "{{SITENAME}} के {{PLURAL:$1||}} बेनामी सदस्य",
        "siteuser": "विकिपीडिया सदस्य  $1",
        "anonuser": "{{SITENAME}} अज्ञात उपयोगकर्ता $1",
        "lastmodifiedatby": "इस पृष्ठ का आखिरी बदलाव $3 ने $2, $1 पर किया।",
        "othercontribs": "$1 के कार्य के अनुसार।",
        "others": "अन्य",
-       "siteusers": "{{SITENAME}} {{PLURAL:$2|सदस्य|सदस्य}} $1",
+       "siteusers": "{{SITENAME}} {{PLURAL:$2|{{GENDER:$1|सदस्य}}|सदस्य}} $1",
        "anonusers": "{{SITENAME}} अनाम {{PLURAL:$2|सदस्य|सदस्य}} $1",
        "creditspage": "पान श्रेय नामावली",
        "nocredits": "इस पृष्ठ के लिये क्रेडिट जानकारी नहीं है।",
        "pageinfo-category-files": "फ़ाइलों की संख्या",
        "markaspatrolleddiff": "जाँचा हुआ चिन्हित करें",
        "markaspatrolledtext": "इस पृष्ठ को जाँचा हुआ चिन्हित करें",
+       "markaspatrolledtext-file": "इस फ़ाइल संस्करण को जांचा हुआ चिन्हित करें",
        "markedaspatrolled": "जाँचा हुआ चिन्हित किया",
        "markedaspatrolledtext": "[[:$1]] का चयनित अवतरण जाँचा हुआ चिन्हित किया गया।",
        "rcpatroldisabled": "हाल में हुए बदलावों का परीक्षण अक्षम है",
        "newimages-legend": "छननी",
        "newimages-label": "संचिका नाम (या उसका अंश):",
        "newimages-showbots": "बॉट के अपलोड दिखाइये",
+       "newimages-hidepatrolled": "जाँचा हुआ अपलोड छुपाएँ",
        "noimages": "देखने के लिए कुछ नहीं है।",
        "ilsubmit": "खोजें",
        "bydate": "तिथि अनुसार",
        "metadata-expand": "विस्तृत जानकारियां दिखाएं",
        "metadata-collapse": "विस्तृत जानकारियां छिपाएं",
        "metadata-fields": "जब मेटाडाटा तालिका को लघुरूप किया जाएगा तो इस सन्देश में सूचीबद्ध इएक्सआयएफ मेटाडाटा जानकारियां छवि प्रदर्शित होते समय सम्मिलित की जाएंगी।\nअन्य डिफ़ॉल्ट रूप से छिपी रहेंगी।\n* make \n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
-       "exif-imagewidth": "चौडाई",
+       "exif-imagewidth": "à¤\9aà¥\8cड़ाà¤\88",
        "exif-imagelength": "ऊँचाई",
        "exif-bitspersample": "प्रति घटक बीट्स",
        "exif-compression": "कम्प्रेशन योजना",
        "exif-compression-4": "CCITT ग्रुप 4 फ़ैक्स एनकोडिंग",
        "exif-copyrighted-true": "कॉपीराईट",
        "exif-copyrighted-false": "कॉपीराइट स्थिति अनिर्दिष्ट",
+       "exif-photometricinterpretation-0": "काला और सफेद (सफेद 0 है)",
+       "exif-photometricinterpretation-1": "काला और सफेद (काला 0 है)",
        "exif-unknowndate": "अज्ञात तारीख",
        "exif-orientation-1": "सामान्य",
        "exif-orientation-2": "हॉरिज़ॉन्टली बदला",
        "confirmrecreate": "सदस्य [[User:$1|$1]] ([[User talk:$1|वार्ता]]) ने आपके द्वारा संपादन शुरू होने के बाद यह पृष्ठ निम्नलिखित कारण देकर हटाया हैं:\n: ''$2''\nक्या आप इसे फिरसे बनाना चाहतें हैं, इसकी निश्चिती करें।",
        "confirmrecreate-noreason": "जब आपने इस पृष्ठ का सम्पादन शुरू किया था, उसके बाद से सदस्य [[User:$1|$1]] ([[User talk:$1|talk]]) ने इसे हटा दिया है।  कृपया पुष्टि करें कि आप इस पृष्ठ को पुनः बनाना चाहते हैं।",
        "recreate": "फिरसे बनायें",
+       "unit-pixel": "px",
        "confirm_purge_button": "ओके",
        "confirm-purge-top": "क्या आप यह पृष्ठ का कैश ख़ाली करने चाहिए?",
        "confirm-purge-bottom": "किसी पृष्ठ को मिटाने से संचिका साफ़ हो जाती है और इस वजह से ताज़ातरीन संस्करण प्रकट हो जाता है।",
        "iranian-calendar-m10": "डे",
        "iranian-calendar-m11": "बाहमान",
        "iranian-calendar-m12": "एसफण्ड (Esfand)",
+       "hijri-calendar-m1": "मुहर्रम",
+       "hijri-calendar-m2": "सफर",
        "hebrew-calendar-m1": "तिश्रेई (Tishrei)",
        "hebrew-calendar-m2": "शेस्वान (Cheshvan)",
        "hebrew-calendar-m3": "किस्लेव (Kislev)",
        "redirect-page": "पृष्ठ आइ॰डी",
        "redirect-revision": "पृष्ठ अवतरण संख्या",
        "redirect-file": "फ़ाइल नाम",
+       "redirect-logid": "प्रवेश आईडी",
        "redirect-not-exists": "यह मान प्राप्त नहीं हुआ",
        "fileduplicatesearch": "फ़ाईल द्विरावृत्ति खोजें",
        "fileduplicatesearch-summary": "हैश वैल्यू के अनुसार फ़ाईल की द्विरावृत्ति खोजें।",
        "tags-deactivate": "निष्क्रिय करें",
        "tags-hitcount": "$1 {{PLURAL:$1|बदलाव|बदलाव}}",
        "tags-manage-no-permission": "आपको बदलाव टैग के प्रबंधन की अनुमति नहीं है।",
+       "tags-manage-blocked": "आप प्रतिबंधित रहते समय टैग में कोई जोड़ना या हटाने का कार्य नहीं कर सकते हैं।",
        "tags-create-heading": "नया टैग बनाएँ",
        "tags-create-explanation": "पुनः निर्धारित रूप से, नवनिर्मित टैग उपयोगकर्ताओं और बॉट के लिए मौजूद रहेंगे।",
        "tags-create-tag-name": "चिप्पी का नाम",
        "tags-deactivate-not-allowed": "टैग \"$1\" को असक्रिय करना सम्भव नहीं है।",
        "tags-deactivate-submit": "निष्क्रिय करें",
        "tags-apply-no-permission": "आपको अनुमति नहीं है कि बदलाव टैगों को अपने बदलावों से जोड़ें।",
+       "tags-apply-blocked": "आप प्रतिबंधित रहते समय टैग में कोई बदलाव नहीं कर सकते हैं।",
        "tags-apply-not-allowed-one": "टैग \"$1\" मानवीय रूप से जोड़े जाने की अनुमति नहीं है।",
        "tags-apply-not-allowed-multi": "निम्न लिखित {{PLURAL:$2|टैग की अनुमति नहीं है|टैगों की अनुमति नहीं है}} कि उसे मानवीय रूप से प्रयोग में लाया जाए: $1",
        "tags-update-no-permission": "आपको व्यक्तिगत संशोधनों या लॉग प्रविष्टियों से बदलाव टैग जोड़ने या उन्हें हटाने की अनुमति नहीं है।",
+       "tags-update-blocked": "आप प्रतिबंधित रहते समय टैग में कोई जोड़ना या हटाने का कार्य नहीं कर सकते हैं।",
        "tags-update-add-not-allowed-one": "टैग \"\"$1\" को मानवीय रूप से जोड़ा नहीं जा सकता",
        "tags-update-add-not-allowed-multi": "निम्न लिखित {{PLURAL:$2|टैग|या टैगों का समूह}} मानवीय रूप से जोड़ा नहीं जा सकता है: $1",
        "tags-update-remove-not-allowed-one": "टैग \"$1\" को हटाए जाने की अनुमति नहीं है।",
        "tags-edit-revision-legend": "टैगों को {{PLURAL:$1|इस संशोधन|सभी $1 संशोधनों}} से जोड़िये या हटाइये।",
        "tags-edit-logentry-legend": "टैगों को {{PLURAL:$1|इस लॉग प्रविष्टि|सभी $1 लॉग प्रविष्टियों}} से जोड़िए या हटाइये।",
        "tags-edit-existing-tags": "मौजूद टैग",
-       "tags-edit-existing-tags-none": "\"कुछ भी नहीं\"",
+       "tags-edit-existing-tags-none": "<em>कुछ नहीं</em>",
        "tags-edit-new-tags": "नए टैग",
        "tags-edit-add": "इन टैगों को जोड़िए:",
        "tags-edit-remove": "इन टैगों को हटाएँ",
        "tags-edit-reason": "कारण:",
        "tags-edit-revision-submit": "बदलाव जोड़िए {{PLURAL:$1|इस अवतरण|$1 अवतरण}}",
        "tags-edit-logentry-submit": "बदलाव जोड़िए {{PLURAL:$1|इस लौग प्रवक्ति|$1 लॉग प्रवक्तियाँ}}",
-       "tags-edit-success": "बदलाव à¤¸à¤«à¤²à¤¤à¤¾ à¤ªà¥\82रà¥\8dवà¤\95 à¤\9cà¥\8bड़à¥\87 à¤\9cा à¤\9aà¥\81à¤\95à¥\87 à¤¹à¥\88à¤\82।",
+       "tags-edit-success": "बदलाव à¤¸à¤«à¤²à¤¤à¤¾ à¤²à¤¾à¤\97à¥\82 à¤¹à¥\81à¤\88।",
        "tags-edit-failure": "बदलाव नहीं जोडे जा सके हैं: $1",
        "tags-edit-nooldid-title": "अवैध लक्ष्य का संशोधन",
        "tags-edit-nooldid-text": "या तो आपने किसी लक्षित संशोधन का विवरण नहीं दिया है जहाँ इस कार्य को सम्पन्न करना है, या विवरण किया गया संशोधन है ही नहीं।",
        "logentry-suppress-block": "$1 {{GENDER:$2|प्रतिबंधित}} {{GENDER:$4|$3}} जिसमें समय समाप्ति की अवधि है $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|बदल दिया गया}} प्रतिबंध सेटिंग {{GENDER:$4|$3}} के लिए जिसमें समय समाप्ति की अवधि है $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|आयात किया गया}} $3 फ़ाइल अपलोड के माध्यम से",
+       "logentry-import-upload-details": "$1 ने फ़ाइल अपलोड द्वारा $3 को {{GENDER:$2|आयात}} किया ($4 {{PLURAL:$4|अवतरण|अवतरण}})",
        "logentry-import-interwiki": "$1 {{GENDER:$2|आयात किया गया}} $3 किसी और विकि से",
+       "logentry-import-interwiki-details": "$1 ने $5 से $3 को {{GENDER:$2|आयात}} किया ($4 {{PLURAL:$4|अवतरण|अवतरण}})",
        "logentry-merge-merge": "$1 {{GENDER:$2|विलय किया गया}} $3 को $4 में (संशोधन $5 तक)",
        "logentry-move-move": "$1 ने $3 पृष्ठ $4 पर {{GENDER:$2|स्थानांतरित}} किया",
        "logentry-move-move-noredirect": "$1 ने $3 पर पुनर्निर्देश छोड़े बिना उसे $4 पर {{GENDER:$2|स्थानांतरित}} किया",
        "feedback-adding": "पृष्ठ पर प्रतिक्रिया जोड़ना ...",
        "feedback-back": "पीछे जाएँ",
        "feedback-bugcheck": "शानदार! जांच ले कहीं ये [ $1 known bugs] पहले से ही न हो ।",
-       "feedback-bugnew": "मà¥\88à¤\82 à¤\9cाà¤\81à¤\9a à¤\95à¥\80या। एक नया बग रिपोर्ट करें",
+       "feedback-bugnew": "मà¥\88à¤\82 à¤\9cाà¤\81à¤\9a à¤\95िया, एक नया बग रिपोर्ट करें",
        "feedback-bugornote": "यदि आप किसी तकनीकी परेशानी को विस्तार से समझाने के लिये तैयार हैं तो कृपया [$1 बग फ़ाइल करें]।\nयदि नहीं, तो आप नीचे दिये सरल फ़ॉर्म का प्रयोग कर सकते हैं। आपकी टिप्पणी आपके सदस्य नाम और आपके ब्राउज़र के नाम के सहित \"[$3 $2]\" पृष्ठ में जोड़ दी जाएगी।",
        "feedback-cancel": "रद्द करें",
        "feedback-close": "हो गया",
        "expand_templates_preview": "झलक",
        "expand_templates_preview_fail_html": "<strong>अगर यह वैध पूर्ववावलोकन प्रयास है, तो फिर से प्रयास कीजिए।</strong>\nअगर इससे काम न बने तो [[Special:UserLogout|लॉग आउट होकर]] फिर से लॉग इन हो जाइये।",
        "expand_templates_preview_fail_html_anon": "<em>चूँकि {{SITENAME}} सीधे-साधे रूप से एचटीएमएल-सक्षम है और आप लॉग्ड इन नहीं है, पूर्वावलोकन छिपा हुआ है ताकि सम्भावित जावास्क्रिप्ट हमले को रोका सके।</em>\n\n<strong>अगर यह वैध पूर्वावलोकन प्रयास है तो कृपया [[Special:UserLogin|लॉग इन करके]] फिर से प्रयास कीजिए।</strong>",
-       "pagelanguage": "पृष्ठ भाषा चुनाव",
+       "expand_templates_input_missing": "आपको कम से कम कुछ पाठ्य प्रदान करने पड़ेंगे।",
+       "pagelanguage": "पृष्ठ भाषा बदलें",
        "pagelang-name": "पृष्ठ",
        "pagelang-language": "भाषा",
        "pagelang-use-default": "डिफ़ॉल्ट भाषा का प्रयोग करें",
        "pagelang-select-lang": "भाषा चुनें",
+       "pagelang-submit": "भेजें",
        "right-pagelang": "पृष्ठ भाषा बदलें",
        "action-pagelang": "पृष्ठ भाषा बदलने",
-       "log-name-pagelang": "पà¥\83षà¥\8dठ à¤­à¤¾à¤·à¤¾ à¤¬à¤¦à¤²à¤¾à¤µ à¤²à¥\89à¤\97",
+       "log-name-pagelang": "भाषा बदलाव लॉग",
        "log-description-pagelang": "यह पृष्ठ भाषाओं में परिवर्तन का लॉग है।",
-       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|बदल दिया गया}} पृष्ठ भाषा को $3 के लिए $4 से $5 ।",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|बदल दिया गया}} पृष्ठ भाषा को $3 के लिए $4 से $5।",
        "default-skin-not-found": "ओह! आपकी विकि का पूर्व निर्धारित चमड़ा जैसा कि <code dir=\"ltr\">$wgDefaultSkin</code> में बताया गया है<code>$1</code>, उपलब्ध नहीं है।\n\nआपका इन्स्टालेशन इन चमड़ो को सम्मिलित करता है {{PLURAL:$4|चमड़ा|चमड़े}}। देखिए [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: चमड़ो का सम्मित करना] ताकि आपको जानकारी मिले कि कैसे {{PLURAL:$4|उसे|उनको सम्मिलित किया जाए और निर्धारित को तय करें}}.\n\n$2\n\n; अगर आपने अभी मीडियाविकि इन्स्टाल किया है:\n: आपने शायद गिट से इन्स्टाल किया है, या सीधे स्रोत कोड से किया है जिसके लिए कोई और तरीक़े का प्रयोग किया है। यह तो आशा के अनुरूप है। कोशिश कीजिए कि कुछ चमड़े [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's अमीडिया-विकि के चमड़े वाली डाइरेक्ट्री से डाउन्लोड करें], जिसके लिए आप:\n:* डाउनलोड कीजिए [https://www.mediawiki.org/wiki/Download तारबॉल इन्स्टालर], जो कई चमड़ों और विस्तारों में मौजूद है। आप चमड़ों का कोड <code>skins/</code> उसकी डाइरेक्ट्री से कॉपी-पेस्ट कर सकते हैं। \n:* डाउनलोड कीजिए व्यक्तिगत चमड़े के तारबॉल [https://www.mediawiki.org/wiki/Special:SkinDistributor मीडिया विकि] से।\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins गिट का प्रयोग करके डाउलोड कर सकते हैं].\n: ऐसा करने के दौरान आपकी गिट-रिपॉज़िटरी को कुछ नहीं होना चाहिए यदि आप विकासकर्ता हो। \n; अगर आपने मीडियाविकि को अभी अपग्रेड किया है:\n: मीडियाविकि 1.24 और इसके नवीन रूप स्वतः रूप से चमड़ों को सक्षम नहीं करते (देखिए [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: चमड़ो की स्वतः खोज]). आप निम्न लिखित को पेस्ट कर सकते हैं: {{PLURAL:$5|लाइन|लाइनें}}  <code>LocalSettings.php</code> में ताकि {{PLURAL:$5|वह|सभी}} सक्षम हों जैसा कि इन्स्टाल किए गए {{PLURAL:$5|चमड़े|चमड़ों}} का मामला है:\n\n<pre dir=\"ltr\">$3</pre>\n\n; अगर आपने अभी बदलाव किए हैं<code>LocalSettings.php</code>:\n: डबल-क्लिक करें चमड़े नामों  के आगे ताकि आपको विभिन्न प्रकारों के विकल्प मिलें।",
        "default-skin-not-found-no-skins": "ओह! आपकी विकि का पूर्व निर्धारित चमड़ा जैसा कि <code dir=\"ltr\">$wgDefaultSkin</code> में बताया गया है<code>$1</code>, उपलब्ध नहीं है। \n\nआपके पास कोई इन्स्टाल किया गया चमड़ा नहीं है। \n\n; अगर आपने अभी मीडियाविकि इन्स्टाल किया है या उसका उद्यतन किया है:\n: आपने शायद गिट से इन्स्टाल किया है, या सीधे स्रोत कोड से किया है जिसके लिए कोई और तरीक़े का प्रयोग किया है। यह तो आशा के अनुरूप है। कोशिश कीजिए कि कुछ चमड़े [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's मीडिया-विकि के चमड़े वाली डाइरेक्ट्री से डाउन्लोड करें], जिसके लिए आप:\n:* डाउनलोड कीजिए [https://www.mediawiki.org/wiki/Download तारबॉल इन्स्टालर], जो कई चमड़ों और विस्तारों में मौजूद है। आप चमड़ों का कोड <code>skins/</code> उसकी डाइरेक्ट्री से कॉपी-पेस्ट कर सकते हैं। \n:* डाउनलोड कीजिए व्यक्तिगत चमड़े के तारबॉल [https://www.mediawiki.org/wiki/Special:SkinDistributor मीडिया विकि] से।\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins गिट का प्रयोग करके डाउलोड कर सकते हैं].\n: ऐसा करने के दौरान आपकी गिट-रिपॉज़िटरी को कुछ नहीं होना चाहिए यदि आप विकासकर्ता हो।",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (सक्षम)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''असक्षम''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>असक्षम</strong>)",
        "mediastatistics": "मीडिया के आंकड़े",
        "mediastatistics-summary": "अपलोड किए गए फ़ाइल प्रकारों के आंकड़े। इसमें केवल नवीनतम फ़ाइल के अवतरण शामिल हैं। पुराने या हटाए गए फ़ाइलों के अवतरणों को अलग रखा गया है। \n\nThis only includes the most recent version of a file. Old or deleted versions of files are excluded.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 बाइट|$1 बाइट्स}} ($2; $3%)",
+       "mediastatistics-bytespertype": "इस अनुभाग का कुल फ़ाइल आकार : {{PLURAL:$1|$1 बाइट|$1 बाइट्स}} ($2; $3%)",
+       "mediastatistics-allbytes": "सभी फ़ाइल का कुल फ़ाइल आकार : {{PLURAL:$1|$1 बाइट|$1 बाइट्स}} ($2)",
        "mediastatistics-table-mimetype": "माइम प्रकार",
        "mediastatistics-table-extensions": "सम्भवतः विस्तार",
        "mediastatistics-table-count": "फ़ाइलों की संख्या",
        "mediastatistics-header-text": "पाठ",
        "mediastatistics-header-executable": "निष्पादन योग्य",
        "mediastatistics-header-archive": "संकुचित प्रारूप",
+       "mediastatistics-header-total": "सभी फ़ाइल",
        "json-warn-trailing-comma": "$1 पीछे रह रहा {{PLURAL:$1|कॉमा को| कॉमाओं को}} जे०एस०ओ०एन० से हटाया गया",
        "json-error-unknown": "जे०एस०ओ०एन० में एक समस्या थी। त्रुटि: $1",
        "json-error-depth": "स्टैक की अधिकतम गहराई बढ़ चुकी है।",
        "special-characters-group-arabicextended": "अरबी विस्तारित",
        "special-characters-group-persian": "फार्सी",
        "special-characters-group-hebrew": "हिब्रू",
-       "special-characters-group-bangla": "बाà¤\82à¤\97à¥\8dला",
+       "special-characters-group-bangla": "बà¤\82à¤\97ालà¥\80",
        "special-characters-group-tamil": "तमिल",
        "special-characters-group-telugu": "तेलूगू",
        "special-characters-group-sinhala": "सिंहल",
        "special-characters-title-emdash": "एम डैश",
        "special-characters-title-minus": "ऋण चिह्न",
        "mw-widgets-dateinput-no-date": "कुछ चयनित नहीं",
+       "mw-widgets-dateinput-placeholder-day": "DD-MM-YYYY",
        "mw-widgets-titleinput-description-new-page": "पृष्ठ अभी मौजूद नहीं है",
        "mw-widgets-titleinput-description-redirect": "$1 को अनुप्रेषित",
        "api-error-blacklisted": "कृपया कोई दूसरा विवरणात्मक शीर्षक चुनें।",
+       "sessionmanager-tie": "एक साथ कई अनुरोध को नहीं मिला सकता: $1",
+       "sessionprovider-generic": "$1 सत्र",
+       "sessionprovider-mediawiki-session-cookiesessionprovider": "कुकी-आधारित सत्र",
+       "sessionprovider-nocookies": "हो सकता है कि कुकी निष्क्रिय है। कृपया देखें कि और सक्रिय करें।",
        "randomrootpage": "अविशिष्ट मूल पृष्ठ"
 }
index 7362565..e18aa14 100644 (file)
        "myprivateinfoprotected": "Aap ke aapan private jaankari ke badle ke ijaajat nai hae.",
        "mypreferencesprotected": "Aap ke aapan preferences ke badle ke ijaajat nai hae.",
        "ns-specialprotected": "Khaas panna ke badla nai jae sake hai.",
-       "titleprotected": "Ii title ke banae se [[User:$1|$1]] rokis hai.\nIske kaaran hai ''$2''.",
+       "titleprotected": "Ii title ke banae se [[User:$1|$1]] rokis hai.\nIske kaaran hai <em>$2</em>.",
        "filereadonlyerror": "File \"$1\" ke nai badle sakaa hae, kaahe ki ii file repository \"$2\" me hae aur iske khaali parrha jaae sake hae.\nJon administrator iske lock karis hae, ii diis hae: \"$3\"",
        "invalidtitle-knownnamespace": "Namespace \"$2\" aur text \"$3\" ke kharaab title hae.",
        "invalidtitle-unknownnamespace": "Title gaer kaanuni hae aur iske namespace number \"$1\" aur text \"$2\" ke nai jaana jaawe hae",
        "undo-summary-username-hidden": "Hidden sadasya ke badalo $1 ke pahile jaise karo",
        "cantcreateaccounttitle": "Account nai banae sakta hai",
        "cantcreateaccount-text": "Ii IP address ('''$1''') se nawaa account banae ke [[User:$3|$3]] block kar diis hai.\n\nIske kaaran, jon ki $3 diis hai, ''$2'' hai",
-       "cantcreateaccount-range-text": "Nawaa account banae ke IP addresses range '''$1''', jisme aap ke IP address ('''$4''') hae, ke[[User:$3|$3]] block kar diis hae.\n\n$3 ke kaaran hae ''$2''",
+       "cantcreateaccount-range-text": "Nawaa account banae ke IP addresses range <strong>$1</strong>, jisme aap ke IP address (<strong>$4</strong>) hae, ke[[User:$3|$3]] block kar diis hae.\n\n$3 ke kaaran hae <em>$2</em>",
        "viewpagelogs": "Ii panna ke suchi dekho",
        "nohistory": "Ii panna ke khatir koi badlao ke itihaas nai hai.",
        "currentrev": "Abhi ke sansodhan",
        "right-blockemail": "Sadasya ke email bheje se roko",
        "right-hideuser": "Username ke roko, jisse ki janta iske dekhe nai sake",
        "right-ipblock-exempt": "IP blocks, auto-blocks aur range blocks ke bagal se aae jao",
-       "right-proxyunbannable": "Proxies ke automatic blocks ke bypass karo",
        "right-unblockself": "Apne ke unblock karo",
        "right-protect": "Protection level ke badlo aur cascade-protected panna ke badlo",
        "right-editprotected": "Badla gais panna ke \"{{int:protect-level-sysop}}\" ke rakam bachawa gais hae",
        "recentchanges-label-bot": "Ii badlao ke ek bot karis hae",
        "recentchanges-label-unpatrolled": "Ii badlao pe abhi pahraa nai dewa gais hae.",
        "recentchanges-label-plusminus": "Panna ke size etna bytes se badla",
-       "recentchanges-legend-heading": "'''Legend:'''",
+       "recentchanges-legend-heading": "<strong>Legend:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (aur dekho [[Special:NewPages|nawaa panna ke suchi]])",
        "recentchanges-submit": "Dekhao",
        "rcnotefrom": "Niche {{PLURAL:$5|badlao hae|badlao hae}} <strong>$3, $4</strong> (<strong>$1</strong> talak dekhawa gais) talak.",
        "watchthisupload": "Ii panna pe dhyan rakhho",
        "filewasdeleted": "Ii naam ke file ke pahile upload kar ke baad me delete karaa gais hai.\nAap ke chaahi ki aap $1 check kar lo fir se upload kare se pahile.",
        "filename-bad-prefix": "Jon file aap upload kartaa hai uske naam '''\"$1\"''' se suruu hoe hai, jon ki non-descriptive naam hai jiske jaada kar ke digital camera automatically assign kare hai.\nMeharbaani kar ke aur jaada descriptive filename chose karo.",
-       "upload-success-subj": "Upload safal bhais",
-       "upload-success-msg": "Aap ke upload [$2] se safal bhais. Iske hian pe dekhe saktaa hae: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Upload kare me kuchh karrbarr hoe gais hae",
-       "upload-failure-msg": "Aap ke [$2] se uploadkare  me kuchh garrbarr hoe gais hae:\n\n$1",
-       "upload-warning-subj": "Upload ke baare me chetauni",
-       "upload-warning-msg": "[$2] se upload kare me kuch karrbarr hoe gais hae. Aap  [[Special:Upload/stash/$1|upload form]] me laut ke ii garrbarri ke sidha kare sakta hae.",
        "upload-proto-error": "Protocol right nai hai",
        "upload-proto-error-text": "Duur ke upload maange hai URLs jon ki suruu hoe hai <code>http://</code> nai to <code>ftp://</code>.",
        "upload-file-error": "Bhitri error",
        "wlheader-showupdated": "Panna jiske aap ke pichhla visit ke ke baad badal dewa gais hia ke '''bold''' me dekhawa jaawe hai.",
        "wlnote": "Niche ke {{PLURAL:$1|pahile waala badlao hai| pahile <strong>$1</strong> badlao hai}} pichhle {{PLURAL:$2|ghanta|<strong>$2</strong> ghanta}} me as of $3, $4.",
        "wlshowlast": "Pichhla $1 ghanta $2 din  ke dekhao",
-       "watchlistall2": "sab",
        "watchlist-options": "Dhyan suchi ke options",
        "watching": "Dekhtaa...",
        "unwatching": "Nai dekhtaa...",
        "rollbackfailed": "Pahile jaise kare ke kosis safal nai bhais",
        "cantrollback": "Badlao ke pahile jaise nai kare sakta hai;\nisse pahile waala sadasya ii panna ke khaali yogdaan de waala hai.",
        "alreadyrolled": "[[:$1]] by [[User:$2|$2]] ke pahile jaise nai kare sakta hai. ([[User talk:$2|Talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\naur koi ii panna ke badal nai to pahile jaise kar diis hai.\n\nIi panna ke pichla badla [[User:$3|$3]] ([[User talk:$3|Talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) se rahaa",
-       "editcomment": "Badlao ke summary rahaa: \"''$1''\".",
+       "editcomment": "Badlao ke summary rahaa: <em>$1</em>.",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) ke badlao ke [[User:$1|$1]] ke aakhri badlao ke jaise kar dewa gais hai.",
        "revertpage-nouser": "Reverted edits by a hidden user to last revision by {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "$1 ke badlao ke pahile jaise kar dewa gais hai;\nbadal ke $2 ke aakhri version kar dewa gais hai.",
index 809ceac..333b58c 100644 (file)
@@ -11,7 +11,8 @@
                        "Tagimata",
                        "Taylortheturtle",
                        "아라",
-                       "Redhotchili23"
+                       "Redhotchili23",
+                       "Macofe"
                ]
        },
        "tog-underline": "Kuritan sa idalom ang mga tabid:",
        "customcssprotected": "Wala ka ginapasugtan nga mag-ilis sang sini nga panid nga CSS, tungod nga may yara ini sang pagpilian sang isa pa gid nga manug-gamit.",
        "customjsprotected": "Wala ka ginapasugtan nga mag-ilis sang sini nga panid nga JavaScript, tungod nga may yara ini sang pagpilian sang isa pa gid nga manug-gamit.",
        "ns-specialprotected": "Ang mga espesyal nga panid indi mahimo nga paga-ilisan.",
-       "titleprotected": "Ang ini nga titulo ginpangapinan batok sa pagbuhat ni [[User:$1|$1]].\nAng iya rason amo ang \"''$2''\".",
+       "titleprotected": "Ang ini nga titulo ginpangapinan batok sa pagbuhat ni [[User:$1|$1]].\nAng iya rason amo ang <em>$2</em>.",
        "filereadonlyerror": "Indi mahimo nga ma-ilisan ang hilera nga \"$1\" tungod kay ang gintaguan sang mga hilera nga \"$2\" ara sa estado nga mahimo lang mabasa.\n\nAng administrador nga nag-kandado sini naghatag sang paathag nga: \"$3\".",
        "invalidtitle-knownnamespace": "Sala ang titulo sang may ngalanligwa nga \"$2\" kag taksto nga \"$3\"",
        "invalidtitle-unknownnamespace": "Sala nga titulo nga may wala mahibaluan nga ngalanligwa nga numero nga $1 kag teksto nga \"$2\"",
        "passwordreset-emailtext-ip": "May tawo nga (mahimo ikaw, halin sa IP adres nga $1) nagpangabay sang pahanumdom sang mga detalye\nsang imo akawnt para sa {{SITENAME}} ($4). Ang masunod nga {{PLURAL:$3|akawnt|mga akawnt}} sang manuggamit\nmay kabahin sa sini nga adres sang e-mail:\n\n$2\n\n{{PLURAL:$3|Ang ini nga temporaryo nga pasword|Ang mga ini nga temporaryo nga pasword}} indi na magamit sa {{PLURAL:$5|isa ka adlaw|$5 ka adlaw}}.\nKinahanglan mo nga magsulod kag magpili sang bag-o nga pasword subong. Kon lain nga tawo ang nagbuhat sini\nnga pagpangabay, ukon nadumduman mo na ang imo pasword, kag indi mo na kinahanglan nga ini\npaga-ilisan, mahimo mo nga pabay-an ang ini nga pahanumdom kag magpadayon sa paggamit sang imo daan nga pasword.",
        "passwordreset-emailtext-user": "Ang manuggamit nga si $1 sa {{SITENAME}} nagpangabay sang pahanumdom sang mga detalye sang imo akawnt para sa {{SITENAME}} \n($4). Ang masunod nga {{PLURAL:$3|akawnt|mga akawnt}} sang manuggamit may kabahin sa sini nga adres sang e-mail:\n\n$2\n\n{{PLURAL:$3|Ang ini nga temporaryo nga pasword|Ang mga ini nga temporaryo nga pasword}} indi na magamit sa {{PLURAL:$5|isa ka adlaw|$5 ka adlaw}}.\nKinahanglan mo nga magsulod kag magpili sang bag-o nga pasword subong. Kon lain nga tawo ang nagbuhat sini\nnga pagpangabay, ukon nadumduman mo na ang imo pasword, kag indi mo na kinahanglan nga ini\npaga-ilisan, mahimo mo nga pabay-an ang ini nga pahanumdom kag magpadayon sa paggamit sang imo daan nga pasword.",
        "passwordreset-emailelement": "Gamit-pangalan: \n$1\n\nTemporaryo nga pasword: \n$2",
-       "passwordreset-emailsent": "May pahanumdom nga e-mail nga ginpadala.",
+       "passwordreset-emailsentemail": "May pahanumdom nga e-mail nga ginpadala.",
        "passwordreset-emailsent-capture": "May e-mail nga nagapahanumdum, nga ginapakita sa idalom.",
        "passwordreset-emailerror-capture": "May e-mail nga nagapahanumdom nga ginbuhat, nga ginapakita sa idalom, apang ang pagpadala sa manuggamit indi madinalag-on: $1",
        "changeemail": "Ilisan ang E-mail adres",
-       "changeemail-text": "Tapusa ang ini nga formas agod nga ma-ilisan ang imo e-mail adres. Kinahanglan mo nga magbutang sang imo pasword sa pag-kumperma sang sini nga pag-ilis.",
+       "changeemail-header": "Ilisan ang e-mail adres sang akawnt",
        "changeemail-no-info": "Kinahanglan nga nakasulod ka agod nga makadtoan ang ini nga panid sing derecho.",
        "changeemail-oldemail": "E-mail adres sa subong:",
        "changeemail-newemail": "Bag-o nga e-mail adres:",
        "prefs-displayrc": "Ipagwa ang mga pagpilian",
        "prefs-displaywatchlist": "Ipagwa ang mga pagpilian",
        "prefs-diffs": "Mga ginalainan",
-       "email-address-validity-valid": "Ang nasambit nga e-mail pwede batunon",
-       "email-address-validity-invalid": "Magsulod sang isa ka mabaton nga e-mail address.",
        "userrights": "Tagdumala sang mga derecho sang mga tig-gamit",
        "userrights-lookup-user": "Tagdumalaon ang mga grupo sang tiggamit",
        "userrights-user-editname": "Mag-intra sang isa ka pangalan sang tiggamit:",
        "right-blockemail": "Indi pasugtan ang isa ka naga-usar para magpadala sang email.",
        "right-hideuser": "Indi pasugta ang ang isa ka naga-usar kag itago ini halin sa publiko.",
        "right-ipblock-exempt": "Indi pag-agihan ang mga indi ginpasugtan nga mga IP blocks, auto blocks kag range blocks.",
-       "right-proxyunbannable": "Indi pagagihan ang mga awtomatiko nga pagharang sang mga proxies.",
        "right-unblockself": "Panason ang pagkaharang sa ila kaugalingon",
        "right-protect": "Islan ang grado sang proteksyon kag baguhon ang mga ginprotektar nga mga panid",
        "right-editprotected": "Baguhon ang mga panid nga ginprotekta (waay sing proteksyon nga de-grado)",
index 16dccb2..dbe4fcb 100644 (file)
        "myprivateinfoprotected": "Nemate ovlasti za uređivanje Vaših osobnih informacija.",
        "mypreferencesprotected": "Nemate ovlasti za uređivanje Vaših postavki.",
        "ns-specialprotected": "Stranice u imenskom prostoru ''{{ns:special}}'' ne mogu se uređivati.",
-       "titleprotected": "Ovaj naslov je od kreiranja zaštitio suradnik [[User:$1|$1]], uz razlog: ''$2''.",
+       "titleprotected": "Ovaj naslov je od kreiranja zaštitio suradnik [[User:$1|$1]], uz razlog: <em>$2</em>.",
        "filereadonlyerror": "Ne mogu izmijeniti datoteku \"$1\" jer je spremište \"$2\" dostupno samo za čitanje.\n\nAdministrator koji je zaključao spremište naveo je sljedeći razlog: \"$3\".",
        "invalidtitle-knownnamespace": "Neispravan naziv imenskog prostora \"$2\" i teksta \"$3\"",
        "invalidtitle-unknownnamespace": "Neispravan naziv imenskog prostora broj $1 i teksta \"$2\"",
        "recentchanges-label-bot": "Izmjenu napravio bot",
        "recentchanges-label-unpatrolled": "Nepregledana izmjena",
        "recentchanges-label-plusminus": "Promjena veličine stranice (u bajtovima)",
-       "recentchanges-legend-heading": "'''Legenda:'''",
+       "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "Nova stranica",
        "recentchanges-submit": "Prikaži",
        "rcnotefrom": "Slijede promjene od <b>$2</b> (prikazano ih je do <b>$1</b>).",
        "rollbackfailed": "Uklanjanje neuspješno",
        "cantrollback": "Ne mogu ukloniti posljednju promjenu, postoji samo jedna promjena.",
        "alreadyrolled": "Ne mogu ukloniti posljednju promjenu članka [[:$1]] koju je napravio  [[User:$2|$2]] ([[User talk:$2|Razgovor]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); netko je već promijenio stranicu ili uklonio promjenu.\n\nPosljednju 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''\".",
+       "editcomment": "Sažetak promjene je bio: <em>$1</em>.",
        "revertpage": "uklonjena promjena {{GENDER:$2|suradnika|suradnice}} [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]]), vraćeno na posljednju inačicu {{GENDER:$1|suradnika|suradnice}} [[User:$1|$1]]",
        "revertpage-nouser": "Vraćene izmjene suradnika (suradničko ime uklonjeno) na posljednju inačicu suradnika [[User:$1|$1]]",
        "rollback-success": "uklonjeno uređivanje {{GENDER:$1|suradnika|suradnice}} $1\nvraćeno na posljednju inačicu {{GENDER:$2|suradnika|suradnice}} $2.",
        "move-page": "Premjesti $1",
        "move-page-legend": "Premjesti stranicu",
        "movepagetext": "Uporabom ovog obrasca ćete preimenovati stranicu i premjestiti sve stare izmjene na novo ime.\nStari će se naslov pretvoriti u stranicu koja automatski preusmjerava na novi naslov.\nMožete odabrati automatsko ažuriranje preusmjeravanja na izvorni naslov.\nAko se ne odlučite na to, provjerite [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|neispravna preusmjeravanja]].\nDužni ste provjeriti da sve poveznice i dalje nastave voditi na prave stranice.\n\nStranica se '''ne će''' premjestiti ako već postoji stranica s novim naslovom, osim u slučaju prazne stranice ili stranice za preusmjeravanje koja nema nikakvih starih izmjena.\nTo znači: 1. ako pogriješite, možete opet preimenovati stranicu na stari naslov, 2. ne može se dogoditi da izbrišete neku postojeću stranicu.\n\n'''Upozorenje!'''\nOvo može biti drastična i neočekivana promjena kad su u pitanju popularne stranice. Molimo dobro razmislite prije nego što preimenujete stranicu.",
-       "movepagetext-noredirectfixer": "Pomoću donjeg obrasca ćete preimenovati stranicu i premjestiti sve stare izmjene na novo ime. \nStari će se naslov pretvoriti u stranicu koja automatski preusmjerava na novi naslov. \nBudite sigurni da ste provjerili [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|nevaljana preusmjeravanja]]. \nVi ste odgovorni za to da poveznice i dalje povezuju tamo gdje treba.\n\nImajte na umu da stranica '''ne će''' biti premještena ako već postoji stranica s novim naslovom, osim u slučaju prazne stranice ili stranice za preusmjeravanje koja nema nikakvih starih izmjena. \nTo znači da stranicu možete preimenovati u prethodno ime ako ste pogriješili te ne možete pisati preko postojeće stranice. \n\n'''Upozorenje!''' \nOvo može biti drastična i neočekivana promjena kad su u pitanju popularne stranice; \nbudite sigurni da razumijete posljedice ove akcije prije nastavka.",
+       "movepagetext-noredirectfixer": "Pomoću donjeg obrasca ćete preimenovati stranicu i premjestiti sve stare izmjene na novo ime. \nStari će se naslov pretvoriti u stranicu koja automatski preusmjerava na novi naslov. \nBudite sigurni da ste provjerili [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|nevaljana preusmjeravanja]]. \nVi ste odgovorni za to da poveznice i dalje povezuju tamo gdje treba.\n\nImajte na umu da stranica <strong>ne će</strong> biti premještena ako već postoji stranica s novim naslovom, osim u slučaju stranice za preusmjeravanje koja nema nikakvih starih izmjena. \nTo znači da stranicu možete preimenovati u prethodno ime ako ste pogriješili te ne možete pisati preko postojeće stranice. \n\n<strong>Napomena:</strong>\nOvo može biti drastična i neočekivana promjena kad su u pitanju popularne stranice; \nbudite sigurni da razumijete posljedice ove akcije prije nastavka.",
        "movepagetalktext": "Stranica za razgovor, ako postoji, automatski će se premjestiti zajedno sa stranicom koju premještate. '''Stranica se za razgovor ne će premjestiti ako:'''\n*premještate stranicu iz jednog prostora u drugi,\n*pod novim imenom već postoji stranica za razgovor s nekim sadržajem, ili\n*maknete kvačicu u kućici na dnu ove stranice.\n\nU tim ćete slučajevima morati sami premjestiti ili iskopirati stranicu za razgovor,\nako to želite.",
        "moveuserpage-warning": "'''Upozorenje:''' Premještate suradničku stranicu. Imajte na umu da će stranica biti premještena, ali suradnik ''ne će'' biti preimenovan.",
        "movenologintext": "Ako želite premjestiti stranicu morate biti [[Special:UserLogin|prijavljeni]].",
index f6d1755..160e2b6 100644 (file)
        "myprivateinfoprotected": "Du host ken Berechtichung, dein private Informatione zu beoorbeite.",
        "mypreferencesprotected": "Du host ken Berechtichung, dein Einstellunge zu beoorbeite.",
        "ns-specialprotected": "Spezialseite könne net beoorbeitet sin.",
-       "titleprotected": "En Seit mit dem Noome kann net oongelht sin.\nDie Sperre woare doorrich [[User:$1|$1]] mit der Begründung ''\"$2\"'' ingericht.",
+       "titleprotected": "En Seit mit dem Noome kann net oongelht sin.\nDie Sperre woare doorrich [[User:$1|$1]] mit der Begründung <em>$2</em> ingericht.",
        "filereadonlyerror": "Die Datei \"$1\" kann net verännert sin, weil uff das Dateirepositorium \"$2\" nuar Lesezugriff möchlich ist.\n\nDer Administrator, wo den Schreibzugriff gesperrt hot, hot der follichende Grund oongäb: \"$3\".",
        "invalidtitle-knownnamespace": "Ungülticher Titel mit Noomeraum \"$2\" und Text \"$3\"",
        "invalidtitle-unknownnamespace": "Ungülticher Titel mit unbekannter Noomeraumnummer $1 und Text \"$2\"",
        "createaccountreason": "Grund:",
        "createacct-reason": "Begründung",
        "createacct-reason-ph": "Waroom erstellst du en annres Benutzerkonto?",
-       "createacct-captcha": "Sicherheitsprüfung",
-       "createacct-imgcaptcha-ph": "Geb den Text ren, den wo du uwe siehst.",
        "createacct-submit": "Dein Benutzerkonto erstelle",
        "createacct-another-submit": "En anner Benutzerkonto erstelle",
        "createacct-benefit-heading": "{{SITENAME}} weard von Mensche wie dir geschaff.",
        "passwordreset-emailtext-ip": "Jemand mit der IP-Adress $1, wahrscheinlich du sellebst, hot en Zurücksetzung von dein Passworts bei {{SITENAME}} oongefordert ($4). {{PLURAL:$3|Das follichend Benutzerkonto ist|Die follichende Benutzerkonte sind}}\nmit der E-Mail-Adress verknüpft:\n\n$2\n\n{{PLURAL:$3|Das temporär Passwort looft|Die temporäre Passwörter loofe}} innerhalb von {{PLURAL:$5|em Tooch|$5 Tooche}} ab.\nDu sollst dich oonmelde und en neies Passwort vergewe. Falls jemand annres die Oonfroch getätigt hot orrer du dich wieder an dein ursprüngliches Passwort erinnre kannst und das netmeh\nännre möchst, kannst du die Nachricht ignoriere und weiterhin dein altes\nPasswort benutze.",
        "passwordreset-emailtext-user": "Benutzer $1 bei {{SITENAME}} hot en Zurücksetzung von dein Passwort bei {{SITENAME}} oongefordert ($4). {{PLURAL:$3|Das follichend Benutzerkonto ist|Die follichend Benutzerkonte sind}} mit der E-Mail-Adress verknüpft:\n\n$2\n\n{{PLURAL:$3|Das temporär Passwort looft|Die temporäre Passwörter loofe}} innerhalb von {{PLURAL:$5|em Tooch|$5 Tooche}} ab. Du sollst dich oonmelde und en neies Passwort vergewe. Falls jemand annres die Oonfroch getäticht hot orrer du dich wieder an den ursprüngliches Passwort erinnre kannst und das net ännre möchst, kannst du die Nachricht ignoriere und weiterhin dein altes Passwort benutze.",
        "passwordreset-emailelement": "Benutzernoome: \n$1\n\nTemporäres Passwort: \n$2",
-       "passwordreset-emailsent": "En Passwortzurücksetzung-E-Mail woard versandt.",
+       "passwordreset-emailsentemail": "En Passwortzurücksetzung-E-Mail woard versandt.",
        "passwordreset-emailsent-capture": "En Passwortzurücksetzung-E-Mail woard versandt, die unne oongezeicht weard.",
        "passwordreset-emailerror-capture": "Die unne oongezeichte Passwortzurücksetzungs-E-Mail woard generiert, awer der Versand an {{GENDER:$2|den Benutzer|die Benutzrin}} ist gescheitert: $1",
        "changeemail": "E-Mail-Adress ännre",
        "undo-summary-username-hidden": "Ännrung $1 von en versteckte Benutzer rückgängich gemacht.",
        "cantcreateaccounttitle": "Das Benutzerkonto kann net erstellt sin",
        "cantcreateaccount-text": "Die Erstellung von en Benutzerkonto raus von der IP-Adresse '''($1)''' woor doorrich [[User:$3|$3]] gesperrt.\n\nGrund der Sperr: ''$2''",
-       "cantcreateaccount-range-text": "Das Erstell von Benutzerkonte von IP-Adressen im Bereich '''$1''', wo dein IP-Adress ('''$4''') enthält, woor von [[User:$3|$3]] gesperrt.\n\nDer oongebne Grund von $3 laut: ''$2''",
+       "cantcreateaccount-range-text": "Das Erstell von Benutzerkonte von IP-Adressen im Bereich <strong>$1</strong>, wo dein IP-Adress (<strong>$4</strong>) enthält, woor von [[User:$3|$3]] gesperrt.\n\nDer oongebne Grund von $3 laut: <em>$2</em>",
        "viewpagelogs": "Logbücher von der Seit oonzeiche",
        "nohistory": "Zu der Seit ist keh Versionsgeschicht voarhand.",
        "currentrev": "Aktuelle Version",
        "prefs-diffs": "Versionsvergleich",
        "prefs-help-prefershttps": "Die Instellung weard bei deiner nächste Oonmeldung weerreksam.",
        "prefs-tabs-navigation-hint": "Tipp: Du kannst die linke und rechte Pfeiltaste benutze, um zwischich den Registerkoorter in der Reiterlist zu navigiere.",
-       "email-address-validity-valid": "Die E-Mail-Adress scheint gültich zu sin.",
-       "email-address-validity-invalid": "En gültich E-Mail-Adress ist nötich.",
        "userrights": "Benutzerrechteverwaltung",
        "userrights-lookup-user": "Gruppezugehörigkeit verwalte",
        "userrights-user-editname": "Benutzernoome:",
        "right-blockemail": "Benutzer am Versende von E-Mails hinnre",
        "right-hideuser": "Benutzernoome sperre und verberrich.",
        "right-ipblock-exempt": "Ausnoohme von IP-Sperre, automatische Sperre und Rangesperre",
-       "right-proxyunbannable": "Ausnoohme von automatische Proxysperre",
        "right-unblockself": "Sich entsperre",
        "right-protect": "Seitenschutzstatus ännre und kaskadengeschützte Seite beoorbeite",
        "right-editprotected": "Seite bearbeite, wo als \"{{int:protect-level-sysop}}\" geschützt sind",
        "recentchanges-label-bot": "Ännrung doorich en Bot",
        "recentchanges-label-unpatrolled": "Nicht-kontrollierte Ännrung",
        "recentchanges-label-plusminus": "Die Ännrung von der Seitengröss in Bytes",
-       "recentchanges-legend-heading": "'''Legende:'''",
+       "recentchanges-legend-heading": "<strong>Legende:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sieh ooch die [[Special:NewPages|List von neier Seite]])",
        "rcnotefrom": "Oongezeicht sin die Ännrunge seit <strong>$2</strong> (max. <strong>$1</strong> Einträch).",
        "rclistfrom": "Nuar Ännrunge seit $3, $2 Uhr zeiche.",
        "watchthisupload": "Die Datei beobacht",
        "filewasdeleted": "En Datei mit dem Noome woard schon emol hochgelood und zwischichzeitlich wieder abgewischt. Bittschön prüf zuearst den Eintrooch im $1, bevoar du die Datei weerklich speichre tust.",
        "filename-bad-prefix": "Der Dateinoome beginnt mit '''\"$1\"'''. Das ist im allgemein der von en Digitalkamera voargebne Dateinoome und doher net seahr aussoognkräftig.\nBittschön geb der Datei en Noome, wo den Inhalt besser beschreibt.",
-       "upload-success-subj": "Erfollichreich hochgelood",
-       "upload-success-msg": "Das Hochloode von [$2] woor erfollichreich. Die ist hier verfüchbar: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Hochloodfehler",
-       "upload-failure-msg": "Do hot es en Problem geb - mit deiner hochgeloodne Datei von [$2]:\n\n$1",
-       "upload-warning-subj": "Hochloodewarnung",
-       "upload-warning-msg": "Do woor en Problem beim Hochloode von [$2]. Bittschön zum [[Special:Upload/stash/$1|Hochloodformular]] zurückkehre, um das Problem zu behebe.",
        "upload-proto-error": "Falsches Protokoll",
        "upload-proto-error-text": "Die URL muss mit <code>http://</code> orrer <code>ftp://</code> beginne.",
        "upload-file-error": "Interner Fehler",
        "pager-older-n": "{{PLURAL:$1|voarhericher|voarheriche $1}}",
        "suppress": "Oversight (Üwerwächtung)",
        "querypage-disabled": "Die Spezialseit woard aus Gründe von der Leistungserhaltung deaktiviert.",
+       "apisandbox": "API-Spielwies",
+       "apisandbox-api-disabled": "Die API woard uff dem Wiki deaktiviert.",
+       "apisandbox-intro": "Die Seit kannst du für Versuche mit der '''MediaWiki-API''' verwenne.\nDie [//www.mediawiki.org/wiki/API:Main_page/de Dokumentation zur API] enthält weitre Hinweise zu ihrer Nutzung. Beispiel: [//www.mediawiki.org/wiki/API:Main_page/de#Ein_einfaches_Beispiel Den Inhalt der Hauptseit abrufe]. Für weitre Beispiele en von der verfüchbare Aktione auswähle.\n\nObwohl das en Spielwies ist, bedenke, dass Aktione, wo du uff der Seit doorrichführst, das Wiki verännre.",
+       "apisandbox-submit": "Oonfroch ausführe",
+       "apisandbox-reset": "Leere",
+       "apisandbox-examples": "Beispiel",
+       "apisandbox-results": "Ergebnis",
+       "apisandbox-request-url-label": "Anforderungs-URL:",
+       "apisandbox-request-time": "Dauer von der Oonfroch: $1",
        "booksources": "ISBN-Suche",
        "booksources-search-legend": "Such noh Bezugsquelle für Bücher",
        "booksources-search": "Suche",
        "rollbackfailed": "Zurücksetze gescheitert",
        "cantrollback": "Die Ännrung kann net zurückgesetzt sin, weil es ken frühre Autore gebt.",
        "alreadyrolled": "Das Zurücksetze von der Ännrunge von [[User:$2|$2]] ([[User talk:$2|Diskussion]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) an [[:$1]] ist gescheitert, weil in der Zwischichzeit en anner Benutzer die Seit geännert hot.\n\nDie letzte Ännrung stammt von [[User:$3|$3]] ([[User talk:$3|Diskussion]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Die Ännrungszusammerfassung lautet: ''\"$1\"''.",
+       "editcomment": "Die Ännrungszusammerfassung lautet: <em>$1</em>.",
        "revertpage": "Ännrungen von [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussion]]) woorre uff die letzte Version von [[User:$1|$1]] zurückgesetzt",
        "revertpage-nouser": "Ännrunge von en versteckte Benutzer rückgängich gemacht und die letzte Version von {{GENDER:$1|[[User:$1|$1]]}} wiederheargestellt",
        "rollback-success": "Die Ännrunge von $1 woorre rückgängich gemacht und die letzte Version von $2 woard wiederheargestellt.",
        "movenosubpage": "Die Seit hot ken Unnerseite.",
        "movereason": "Grund:",
        "revertmove": "zurück verschiebe",
-       "delete_and_move": "Abwische und verschiebe",
        "delete_and_move_text": "== Abwischung erforderlich ==\n\nDie Seit \"[[:$1]]\" existiert schon. Möchst du die abwische, um die Seit verschiebe se könne?",
        "delete_and_move_confirm": "Jo, Seit abwische",
        "delete_and_move_reason": "abgewischt, um Platz für die Verschiebung von \"[[$1]]\" se mache",
index 8743e54..6e8b482 100644 (file)
        "myprivateinfoprotected": "Nimaš prawo swoje priwatne informacije wobdźěłać.",
        "mypreferencesprotected": "Nimaš prawo swoje nastajenja wobdźěłać.",
        "ns-specialprotected": "Specialne strony njedadźa so wobdźěłać.",
-       "titleprotected": "Tutón titul bu přećiwo wutworjenju přez [[User:$1|$1]] škitany.\nPodata přičina je ''\"$2\"''.",
+       "titleprotected": "Tutón titul bu přećiwo wutworjenju přez [[User:$1|$1]] škitany.\nPodata přičina je <em>$2</em>.",
        "filereadonlyerror": "Njeje móžno dataju \"$1\" změnić, dokelž datajowy repozitorij \"$2\" je jenož čitajomny.\n\nAdministrator, kiž je jón zawrěł, je tule přičinu podał: \"$3\".",
        "invalidtitle-knownnamespace": "Njepłaćiwy titul z mjenowym rumom \"$2\" a tekstom \"$3\"",
        "invalidtitle-unknownnamespace": "Njepłaćiwy titul z njeznatym mjenowym rumom $1 a tekstom \"$2\"",
        "undo-summary-username-hidden": "Změna $1 schowaneho wužiwarja je so anulowała",
        "cantcreateaccounttitle": "Wužiwarske konto njeda so wutworić.",
        "cantcreateaccount-text": "Wutworjenje wužiwarskeho konta z IP-adresy '''$1''' bu wot [[User:$3|$3]] zablokowane.\n\nPřičina za blokowanje, podata wot $3, je: ''$2''",
-       "cantcreateaccount-range-text": "Załoženje kontow z IP-adresow we wobłuku '''$1'', kotryž twoju IP-adresu wobsahuje ('''$4'''), je so wot [[User:$3|$3]] zablokowało.\n\nPřičina podata wot $3 je ''$2''",
+       "cantcreateaccount-range-text": "Załoženje kontow z IP-adresow we wobłuku '''$1'', kotryž twoju IP-adresu wobsahuje (<strong>$4</strong>), je so wot [[User:$3|$3]] zablokowało.\n\nPřičina podata wot $3 je <em>$2</em>",
        "viewpagelogs": "protokole tuteje strony pokazać",
        "nohistory": "Njeje žanych staršich wersijow strony.",
        "currentrev": "Aktualna wersija",
        "right-blockemail": "Wužiwarja při słanju e-mejlow haćić",
        "right-hideuser": "Wužiwarske mjeno blokować a schować",
        "right-ipblock-exempt": "Blokowanja IP, awtomatiske blokowanje a blokowanja wobwodow wobeńć",
-       "right-proxyunbannable": "Automatiske blokowanja proksyjow wobeńć",
        "right-unblockself": "Swójske blokowanje zběhnyć",
        "right-protect": "Škitowe schodźenki změnić a z kaskadami škitane strony wobdźěłać",
        "right-editprotected": "Strony wobdźěłać, kotrež su přez \"{{int:protect-level-sysop}}\" škitane",
        "enhancedrc-history": "historija",
        "recentchanges": "Aktualne změny",
        "recentchanges-legend": "Opcije aktualnych změnow",
-       "recentchanges-summary": "Na tutej stronje móžeš najaktualniše změny w {{GRAMMAR:lokatiw|{{SITENAME}}}} wobkedźbować.",
+       "recentchanges-summary": "Na tutej stronje móžeš najnowše změny we {{GRAMMAR:lokatiw|{{SITENAME}}}} wobkedźbować.",
        "recentchanges-noresult": "Žane změny za daty čas tutym kriterijam njewotpowěduja.",
        "recentchanges-feed-description": "Slěduj najaktualniše změny {{GRAMMAR:genitiw|{{SITENAME}}}} w tutym kanalu.",
        "recentchanges-label-newpage": "Tuta změna je nowu stronu wutworiła",
        "recentchanges-label-bot": "Tuta změna bu přez roboćik přewjedźena",
        "recentchanges-label-unpatrolled": "Tuta změnu hišće njebu přepruwowana",
        "recentchanges-label-plusminus": "Změnjena wulkosć strony (w bajtach)",
-       "recentchanges-legend-heading": "'''Legenda:'''",
+       "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (hlej tež [[Special:NewPages|lisćinu nowych stronow]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Deleka so {{PLURAL:$5|změna|změnje|změny}} wot <strong>$3, $4</strong> {{PLURAL:$5|pokazuje|pokazujetej|pokazuja}} (hač k <strong>$1</strong>).",
        "filewasdeleted": "Dataja z tutym mjenom bu prjedy nahrata a pozdźišo wušmórnjena. Prošu přepruwuj $1 prjedy hač ju znowa składuješ.",
        "filename-bad-prefix": "Datajowe mjeno započina so z '''„$1“'''. To je powšitkownje datajowe mjeno, kotrež digitalna kamera zwjetša dawa a kotrež tohodla jara wuprajiwe njeje. Prošu wubjer bóle wuprajiwe mjeno za twoju dataju.",
        "filename-prefix-blacklist": " #<!-- Njezměń tutu linku! --> <pre>\n# Syntaksa:\n#   * Wšo wot znamješka \"#\" hač ke kóncej linki je komentar\n#   * Kóžda njeprózdna linka je prefiks za typiske datajowe mjena,\n# kotrež so awtomatisce přez digitalne kamery připokazuja\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # někptre mobilne telefony\nIMG # generic\nJD # Jenoptik\nMGP # Pentax\nPICT # misc.\n #</pre> <!-- Njezměń tutu linku! -->",
-       "upload-success-subj": "Dataja bu wuspěšnje nahrata",
-       "upload-success-msg": "Twoje nahraće z [$2] je wuspěšne było: Steji tu k dispoziciji: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Nahrawanski problem",
-       "upload-failure-msg": "Bě problem z twojim nahraćom [$2]:\n\n$1",
-       "upload-warning-subj": "Nahraćowe warnowanje",
-       "upload-warning-msg": "Bě problem z twojim nahraćom [$2]. Wróć so k [[Special:Upload/stash/$1|nahrawanskemu formularej]], zo by tutón problem wotstronił.",
        "upload-proto-error": "Wopačny protokol",
        "upload-proto-error-text": "URL dyrbi so z <code>http://</code> abo <code>ftp://</code> započeć.",
        "upload-file-error": "Nutřkowny zmylk",
        "querypage-disabled": "Tuta specialna strona je z wukonowych přičinow znjemóžnjena.",
        "apihelp": "API-pomoc",
        "apihelp-no-such-module": "Modul \"$1\" njeje so namakał.",
+       "apisandbox": "API-hrajkanišćo",
+       "apisandbox-api-disabled": "API je so na tutym sydle znjemóžnił.",
+       "apisandbox-intro": "Wužij tutu stronu, zo by z '''websłužbu Mediawiki API''' eksperimentował.\nHlej [//www.mediawiki.org/wiki/API:Main_page API-dokumentaciju] za dalše podrobnosće za wužiwanje API. Přikład: [//www.mediawiki.org/wiki/API#A_simple_example Wobsah hłowneje strony wotwołać]. Wubjer akciju, zo by dalše přikłady widźał.\n\nDźiwaj na to, zo, hačrunjež to je hrajkanišćo, akcije, kotrež na tutej stronje přewjedźeš, móhli wiki změnić.",
+       "apisandbox-submit": "Naprašowanje přewjesć",
+       "apisandbox-reset": "Wuprózdnić",
+       "apisandbox-examples": "Přikład",
+       "apisandbox-results": "Wuslědk",
+       "apisandbox-request-url-label": "URL naprašowanja:",
+       "apisandbox-request-time": "Naprašowanski čas: $1",
        "booksources": "Pytanje po ISBN",
        "booksources-search-legend": "Žórła za knihi pytać",
        "booksources-search": "Pytać",
        "wlheader-showupdated": "Strony, kotrež su so po twojim poslednim wopyće změnili, so '''tučne''' pokazuja.",
        "wlnote": "Deleka {{PLURAL:$1|je poslednja změna|stej poslednjej <strong>$1</strong> změnje|su poslednje <strong>$1</strong> změny|je poslednich <strong>$1</strong> změnow}} za {{PLURAL:$2|poslednju hodźinu|poslednje <strong>$2</strong> hodźinje|poslednje <strong>$2</strong> hodźiny|poslednich <strong>$2</strong> hodźin}}, staw : $3, $4.",
        "wlshowlast": "Změny zańdźenych $1 hodźin, $2 dnjow, pokazać",
-       "watchlistall2": "wšě",
        "wlshowtime": "Pokazaj změny zašłych",
        "watchlist-options": "Opcije wobkedźbowankow",
        "watching": "Wobkedźbuju…",
        "rollbackfailed": "Cofnjenje njeporadźiło",
        "cantrollback": "Njemóžno změnu cofnyć; strona nima druhich awtorow.",
        "alreadyrolled": "Njemóžno poslednu změnu [[:$1]] přez wužiwarja [[User:$2|$2]] ([[User talk:$2|Diskusija]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) cofnyć; něchtó druhi je stronu wobdźěłał abo změnu hižo cofnył.\n\nPoslednja změna bě wot wužiwarja [[User:$3|$3]] ([[User talk:$3|Diskusija]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Zjeće wobdźěłanja bě: \"''$1''\".",
+       "editcomment": "Zjeće wobdźěłanja bě: <em>$1</em>.",
        "revertpage": "Změny [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskusija]]) cofnjene a nawróćene k poslednjej wersiji wužiwarja [[User:$1|$1]]",
        "revertpage-nouser": "Změny su so wot schowaneho wužiwarja anulowali a předchadna wersija wužiwarja {{GENDER:$1|[[User:$1|$1]]}} je so wobnowiła",
        "rollback-success": "Změny wužiwarja $1 cofnjene; wróćo na wersiju wužiwarja $2.",
        "ipaddressorusername": "IP-adresa abo wužiwarske mjeno",
        "ipbexpiry": "Spadnjenje",
        "ipbreason": "Přičina:",
-       "ipbreason-dropdown": "*powšitkowne přičiny\n** wandalizm\n** wutworjenje njezmyslnych stronow\n** linkspam\n** wobobinske nadběhi\n*specifiske přičiny\n** njepřihódne wužiwarske mjeno\n** znowapřizjewjenje na přeco zablokowaneho wužiwarja\n** proksy, wandalizma jednotliwych wužiwarjow dla dołhodobnje zablokowany",
+       "ipbreason-dropdown": "*powšitkowne přičiny\n** wandalizm\n** wutworjenje njezmyslnych stronow\n** linkspam\n** wosobinske nadběhi\n*specifiske přičiny\n** njepřihódne wužiwarske mjeno\n** znowapřizjewjenje na přeco zablokowaneho wužiwarja\n** proksy, wandalizma jednotliwych wužiwarjow dla dołhodobnje zablokowany",
        "ipb-hardblock": "Přizjewjenym wužiwarjam zadźěwać, pod tutej IP-adresu změny přewjesć",
        "ipbcreateaccount": "Wutworjenju nowych kontow zadźěwać",
        "ipbemailban": "Wotpósłanje mejlkow znjemóžnić",
        "log-description-pagelang": "To je protokol změnow na rěčach stronow.",
        "logentry-pagelang-pagelang": "$1 je rěč strony za $3 wot $4 do $5 {{GENDER:$2|změnił|změniła}}.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (zmóžnjeny)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''znjemóžnjeny''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>znjemóžnjeny</strong>)",
        "mediastatistics": "Medijowe statistiki",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 bajt|$1 bajtaj|$1 bajty|$1 bajtow}} ($2; $3%)",
        "mediastatistics-table-mimetype": "MIME-typ",
        "special-characters-title-minus": "minusowe znamješko",
        "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-TT",
        "mw-widgets-dateinput-placeholder-month": "JJJJ-MM",
-       "api-error-blacklisted": "Prošu wubjer druhi, wuprajiwy titul."
+       "api-error-blacklisted": "Prošu wubjer druhi, wuprajiwy titul.",
+       "randomrootpage": "Připadna korjenjowa strona"
 }
index fa948a7..0a51bcd 100644 (file)
@@ -8,7 +8,8 @@
                        "Urhixidur",
                        "아라",
                        "Tisave",
-                       "Bfpage"
+                       "Bfpage",
+                       "Macofe"
                ]
        },
        "tog-underline": "Souliyen lyen yo :",
        "cascadeprotected": "Paj sa pwoteje kounye a paske l nan {{PLURAL:$1|paj ki douvan l|paj yo ki douvan l}}, paske {{PLURAL:$1|l te pwoteje|yo te pwoteje}} ak opsyon « pwoteksyon pou tout paj ki nan premye paj an - kaskad » aktive :\n$2",
        "namespaceprotected": "Ou pa gen dwa modifye paj nan espas non « '''$1''' ».",
        "ns-specialprotected": "Paj yo ki nan espas non « {{ns:special}} » pa kapab modifye.",
-       "titleprotected": "Tit, sijè sa pwoteje pandan kreyasyon l pa [[User:$1|$1]].\nRezon li bay yo se « ''$2'' ».",
+       "titleprotected": "Tit, sijè sa pwoteje pandan kreyasyon l pa [[User:$1|$1]].\nRezon li bay yo se <em>$2</em>.",
        "exception-nologin": "Ou pa konekte",
        "virus-badscanner": "Move konfigirasyon : eskanè viris sa, nou pa konenn l : ''$1''",
        "virus-scanfailed": "Rechèch an pa ritounen pyès rezilta (kòd $1)",
        "createaccountreason": "Rezon:",
        "createacct-reason": "Rezon",
        "createacct-reason-ph": "Poukisa w ap ouvri yon lòt kont?",
-       "createacct-captcha": "Verifikasyon sekirite",
-       "createacct-imgcaptcha-ph": "Rantre teks ke w anlè a",
        "createacct-submit": "Ouvri kont ou",
        "createacct-another-submit": "Ouvrir yon lòt kont",
        "createacct-benefit-heading": "Se moun tankou w ki fè {{SITENAME}}.",
        "prefs-help-email-required": "Nou bezwen ou bay yon adrès imèl. Souple, chache yonn.",
        "group-sysop": "Administratè yo",
        "grouppage-sysop": "{{ns:project}}:Administratè",
+       "grant-viewdeleted": "Gade fichye ak paj ki efase yo",
        "newuserlogpage": "Jounal pou kreyasyon kont itilizatè yo",
        "newuserlogpagetext": "Men jounal, istorik kreyasyon kont itilizatè yo.",
        "rightslog": "Jounal modifikasyon estati itilizatè yo",
        "recentchanges-label-newpage": "Modifikasyon sa a kreye yon lòt paj",
        "recentchanges-label-minor": "Sa se yon ti chanjman",
        "recentchanges-label-bot": "Se yon wobo ki fè chanjman sa a.",
-       "recentchanges-legend-heading": "'''Lejann:'''",
+       "recentchanges-legend-heading": "<strong>Lejann:</strong>",
        "rcnotefrom": "Men modifikasyon yo ki fèt depi '''$2''' ('''$1''' dènye).",
        "rclistfrom": "Afiche nouvo modifikasyon yo depi $3 $2",
        "rcshowhideminor": "$1 modifiksayon yo ki tou piti",
        "move-page-legend": "Deplase paj sa",
        "movepagetext": "Itilize fòmilè sa a pou renonmen yon paj epi deplase tout istorik li nan nouvo non an.\nTit anvan pral vin yon paj redireksyon pou ale nan nouvo paj nan.\nOu kapab mete a jou lyen yo ki t ap voye vè tit anvan otomatikman.\nSi nou pa vle fè sa, gade byen [[Special:DoubleRedirects|de fwa]] ak [[Special:BrokenRedirects|redireksyon ki pa bon]] pou nou sèten nou pa kreye redireksyon de fwa oubyen yon lòt kalite redireksyon ki pa bon.\nSe ou menm ki responsab pou lyen yo toujou kontinye ale nan paj kote yo sipoze a.\n\nYon paj pa ka deplase si nouvo paj an egziste deja, eksepte si paj sa vid oubyen ke li se yon paj redireksyon (fok li pa genyen yon istorik nan li tou).  Sa vle di ke ou kapab renonme yon paj nan tit orijinal li si nou te fè yon erè, men nou pa ka ekraze yon paj ki deja ekziste.\n\n'''Pòte Atansyon !'''\nSa w ap fè a kapab pwovoke yon gwo chanjman pou yon paj ki popilè.\nSe pou nou byen konprann e nou byen mezire tout konsekans aksyon sa ke n ap fè a.",
        "movepagetalktext": "Paj diskisyon ki asosye, si li egziste, pral otomatikman renonmen tou, <b>eksepte si: </b>\n*W ap renonmen yon paj nan direksyon yon lòt espas\n*yon paj diskisyon ki pa vid deja ekziste nan nouvo non an\n*Ou deseleksyone bouton ki anba mesaj sa a\n\nNan ka sa yo, ou dwe renonmen oubyen fizyone paj la ou menm si ou vle.",
-       "movearticle": "Deplase paj sa :",
        "newtitle": "Nouvo tit, non:",
        "move-watch": "Swiv paj orijinal ak nouvo paj yo",
        "movepagebtn": "Deplase paj sa",
index 5e7313f..e656523 100644 (file)
        "myprivateinfoprotected": "Nincs jogod módosítani a privát adataidat.",
        "mypreferencesprotected": "Nincs jogod módosítani a beállításaidat.",
        "ns-specialprotected": "A speciális lapok nem szerkeszthetők.",
-       "titleprotected": "Ilyen címmel nem lehet szócikket készíteni, [[User:$1|$1]] letiltotta.\nAz indoklás: „''$2''”.",
+       "titleprotected": "Ilyen címmel nem lehet szócikket készíteni, [[User:$1|$1]] letiltotta.\nAz indoklás: <em>$2</em>.",
        "filereadonlyerror": "A(z) „$1” fájl nem módosítható, mert a(z) „$2” fájltároló csak olvasható módban üzemel.\n\nA lezárást végrehajtó rendszeradminisztrátor az alábbi indoklást adta meg: „$3”.",
        "invalidtitle-knownnamespace": "Érvénytelen cím „$2” névtérrel és „$3” szöveggel",
        "invalidtitle-unknownnamespace": "Érvénytelen cím az ismeretlen $1 névtérszámmal és „$2” szöveggel",
        "newarticle": "(Új)",
        "newarticletext": "Egy olyan lapra mutató hivatkozást követtél, ami még nem létezik.\nA lap létrehozásához csak gépeld be a szövegét a lenti szövegdobozba. Ha kész vagy, az „Előnézet megtekintése” gombbal ellenőrizheted, hogy úgy fog-e kinézni, ahogy szeretnéd, és a „Lap mentése” gombbal tudod elmenteni. (További információkat a [$1 súgólapon] találsz).\nHa tévedésből jutottál ide, kattints a böngésződ '''vissza''' vagy '''back''' gombjára.",
        "anontalkpagetext": "----''Ez egy olyan anonim szerkesztő vitalapja, aki még nem regisztrált, vagy csak nem jelentkezett be.\nEzért az IP-címét használjuk az azonosítására.\nUgyanazon az IP-címen számos szerkesztő osztozhat az idők folyamán.\nHa úgy látod, hogy az üzenetek, amiket ide kapsz, nem neked szólnak, [[Special:UserLogin/signup|regisztrálj]] vagy ha már regisztráltál, [[Special:UserLogin|jelentkezz be]], hogy ne keverjenek össze másokkal.''",
-       "noarticletext": "Ez a lap jelenleg nem tartalmaz szöveget.\n[[Special:Search/{{PAGENAME}}|Rákereshetsz erre a címszóra]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} megtekintheted a kapcsolódó naplókat],\nvagy [{{fullurl:{{FULLPAGENAME}}|action=edit}} szerkesztheted a lapot].</span>",
+       "noarticletext": "Ez a lap jelenleg nem tartalmaz szöveget.\n[[Special:Search/{{PAGENAME}}|Rákereshetsz erre a címszóra]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} megtekintheted a kapcsolódó naplókat],\nvagy [{{fullurl:{{FULLPAGENAME}}|action=edit}} létrehozhatod a lapot].</span>",
        "noarticletext-nopermission": "Ez a lap jelenleg nem tartalmaz szöveget.\n[[Special:Search/{{PAGENAME}}|Rákereshetsz a lap címére]] más lapok tartalmában, vagy <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} megtekintheted a kapcsolódó naplófájlokat]</span>.",
        "missing-revision": "A(z) \"{{FULLPAGENAME}}\" nevű oldal #$1 változata nem létezik.\n\nEzt általában egy elavult, törölt oldalra mutató laptörténeti hivatkozás használata okozza. Részletek a [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} törlési naplóban] találhatóak.",
        "userpage-userdoesnotexist": "Nincs „<nowiki>$1</nowiki>” nevű regisztrált felhasználónk.\nNézd meg, hogy valóban ezt a lapot szeretnéd-e létrehozni vagy szerkeszteni.",
        "undo-summary-username-hidden": "A rejtett felhasználó által végzett $1 változat visszavonása",
        "cantcreateaccounttitle": "Felhasználói fiók létrehozása sikertelen",
        "cantcreateaccount-text": "Erről az IP-címről ('''$1''') nem lehet regisztrálni, mert [[User:$3|$3]] blokkolta az alábbi indokkal:\n\n:''$2''",
-       "cantcreateaccount-range-text": "A regisztrációt a(z) '''$1''' IP-címtartományban, amelybe a te IP-címed ('''$4''') is tartozik, [[User:$3|$3]] blokkolta.",
+       "cantcreateaccount-range-text": "A regisztrációt a(z) <strong>$1</strong> IP-címtartományban, amelybe a te IP-címed (<strong>$4</strong>) is tartozik, [[User:$3|$3]] blokkolta.",
        "viewpagelogs": "A lap a rendszernaplókban",
        "nohistory": "A lap nem rendelkezik laptörténettel.",
        "currentrev": "Aktuális változat",
        "right-reupload-shared": "felülírhatja a közös megosztóhelyen lévő fájlokat helyben",
        "right-upload_by_url": "fájl feltöltése URL-cím alapján",
        "right-purge": "oldal gyorsítótárának ürítése megerősítés nélkül",
-       "right-autoconfirmed": "nem érinti az IP-alapú szerkesztéskorlátozás",
+       "right-autoconfirmed": "Nem érinti az IP-alapú szerkesztéskorlátozás",
        "right-bot": "automatikus folyamatként való kezelés",
        "right-nominornewtalk": "felhasználói lapok apró szerkesztésével nem jelenik meg az új üzenet értesítés",
        "right-apihighlimits": "nagyobb mennyiségű lekérdezés az API-n keresztül",
        "recentchanges-label-bot": "Ezt a szerkesztést egy bot hajtotta végre",
        "recentchanges-label-unpatrolled": "Ezt a szerkesztést még nem ellenőrizték",
        "recentchanges-label-plusminus": "Az oldal mérete ennyi bájttal módosult",
-       "recentchanges-legend-heading": "'''Jelmagyarázat:'''",
+       "recentchanges-legend-heading": "<strong>Jelmagyarázat:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (lásd még: [[Special:NewPages|új lapok listája]])",
        "recentchanges-submit": "Megjelenítés",
        "rcnotefrom": "Alább a <strong>$3 $4</strong> óta történt változtatások láthatóak (legfeljebb <b>$1</b> db).",
        "apisandbox-loading-results": "API-válaszok fogadása…",
        "apisandbox-request-url-label": "Kérő URL:",
        "apisandbox-request-time": "Kérés hossza: $1 ms",
+       "apisandbox-alert-field": "Ennek a mezőnek az értéke érvénytelen.",
        "booksources": "Könyvforrások",
        "booksources-search-legend": "Könyvforrások keresése",
        "booksources-search": "Keresés",
        "booksources-text": "Alább látható a másik webhelyekre mutató hivatkozások listája, ahol új és használt könyveket árulnak, és\ntovábbi információkat lelhetsz ott az általad keresett könyvekről:",
        "booksources-invalid-isbn": "A megadott ISBN hibásnak tűnik; ellenőrizd, hogy jól másoltad-e át az eredeti forrásból.",
        "specialloguserlabel": "Szerkesztő:",
-       "speciallogtitlelabel": "Cél (cím vagy felhasználó):",
+       "speciallogtitlelabel": "Cél (cím vagy felhasználóhoz {{ns:user}}:felhasználói név):",
        "log": "Rendszernaplók",
        "logeventslist-submit": "Mutat",
        "all-logs-page": "Minden nyilvános napló",
        "rollbackfailed": "A visszaállítás nem sikerült",
        "cantrollback": "Nem lehet visszaállítani: az utolsó szerkesztést végző felhasználó az egyetlen, aki a lapot szerkesztette.",
        "alreadyrolled": "[[:$1]] utolsó, [[User:$2|$2]] ([[User talk:$2|vita]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) általi szerkesztését nem lehet visszavonni:\nidőközben valaki már visszavonta vagy szerkesztette a lapot.\n\nAz utolsó szerkesztést [[User:$3|$3]] ([[User talk:$3|vita]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) végezte.",
-       "editcomment": "A szerkesztési összefoglaló „''$1''” volt.",
+       "editcomment": "A szerkesztési összefoglaló <em>$1</em> volt.",
        "revertpage": "Visszaállítottam a lap korábbi változatát: [[Special:Contributions/$2|$2]]  ([[User talk:$2|vita]]) szerkesztéséről [[User:$1|$1]] szerkesztésére",
        "revertpage-nouser": "Visszaállítottam a lap korábbi változatát (szerkesztőnév eltávolítva) szerkesztéséről [[User:$1|$1]] szerkesztésére",
        "rollback-success": "$1 szerkesztéseit visszaállítottam $2 utolsó változatára.",
        "pageinfo-category-files": "Fájlok száma",
        "markaspatrolleddiff": "Ellenőrzöttnek jelölöd",
        "markaspatrolledtext": "Ellenőriztem",
+       "markaspatrolledtext-file": "Ellenőriztem",
        "markedaspatrolled": "Ellenőrzöttnek jelölve",
        "markedaspatrolledtext": "A(z) [[:$1]] lap kiválasztott változatát ellenőrzöttnek jelölted.",
        "rcpatroldisabled": "A friss változtatások járőrözése kikapcsolva",
        "default-skin-not-found": "Upsz! A wiki alapértelmezett felülete, amely a <code dir=\"ltr\">$wgDefaultSkin</code> szerint <code>$1</code>, nem áll rendelkezésre.\n\nA telepítés az alábbi {{PLURAL:$4|felületet|felületeket}} tartalmazza.\nTovábbi információkat a felület konfigurálásáról és az alapértelmezett felület beállításáról a [https://www.mediawiki.org/wiki/Manual:Skin_configuration Kézikönyv: Felület konfigurálása] helyen találsz.\n\n$2\n\n; Ha frissen telepítetted a MediaWikit:\n: Valószínűleg a gitről telepítetted, vagy közvetlenül forráskódból más módon. Ebben az esetben ez várható. Próbálj telepíteni felületeket a [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org felületkönyvtárából], az alábbi módokon:\n:* Töltsd le a [https://www.mediawiki.org/wiki/Download tarball telepítőt], amely számos felületet és kiegészítést tartalmaz. Simán másold át belőle a <code>skins/</code> könyvtárat.\n:* Tölts le az egyedi felülettelepítő-készleteket a [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] helyről.\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Felület letöltése Git segítségével].\n: Ez nem ütközik a git repository-val, ha MediaWiki fejlesztő vagy.\n\n; Ha most frissítetted a MediaWikit:\n: A MediaWiki 1.24 és újabb verziók már nem engedélyezik automatikusan a telepített felületeket (lásd [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Kézikönyv: Felület automatikus felderítése]). Illeszd be az alábbi {{PLURAL:$5|sort|sorokat}} a <code>LocalSettings.php</code> fájlba, ha engedélyezni akarod {{PLURAL:$5|a|az összes}} telepített felületet:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Ha most módosítottad a <code>LocalSettings.php</code> fájlt:\n: Ellenőrizd a felületneveket, mert lehet, hogy elírtad!",
        "default-skin-not-found-no-skins": "Upsz! A wiki alapértelmezett felülete, amely a <code dir=\"ltr\">$wgDefaultSkin</code> szerint <code>$1</code>, nem áll rendelkezésre.\n\nNincs telepített felület\n\n; Ha frissen telepítetted a MediaWikit:\n: Valószínűleg a git-ről telepítetted, vagy forrás kódból más módon. Ebben az esetben ez várható. Próbálj telepíteni felületeket a [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org felület könyvtárából], az alábbi módokon:\n:* Töltsd le a [https://www.mediawiki.org/wiki/Download tarball telepítőt], amely számos felületet és kiegészítést tartalmaz. Simán másold ki és beilleszt be a <code>skins/</code> könyvtárat belőle.\n:* Töltsd le az egyedi felület telepítő készleteket a [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] helyről.\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Felület letöltése Git segítségével].\n: Ez nem ütközik a git repository-val, ha MediaWiki fejlesztő vagy.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (engedélyezve)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''letiltva''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>letiltva</strong>)",
        "mediastatistics": "Feltöltött fájlok statisztikája",
        "mediastatistics-summary": "Az alábbi statisztika a feltöltött fájlok alapján készült, mely a fájlok legfrissebb változatát tartalmazza a régi, vagy törölt fájlok kivételével.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 bájt|$1 bájt}} ($2; $3%)",
index 8688b8f..7b0dd88 100644 (file)
@@ -24,7 +24,9 @@
                        "Դավիթ Սարոյան",
                        "Beko",
                        "Vahe Gharakhanyan",
-                       "Aram1985"
+                       "Aram1985",
+                       "KeepingCalm",
+                       "Macofe"
                ]
        },
        "tog-underline": "ընդգծել հղումները՝",
        "category-article-count-limited": "Այս կատեգորիան պարունակում է հետևյալ {{PLURAL:$1|էջը|$1 էջերը}}։",
        "category-file-count": "{{PLURAL:$2|Այս կատեգորիան պարունակում է միայն հետևյալ նիշքը։|Ստորև {{PLURAL:$1|բերված է այս կատեգորիայի $1 նիշքը|բերված է այս կատեգորիայի $1 նիշք}}՝ $2-ից։}}",
        "category-file-count-limited": "Այս կատեգորիան պարունակում է հետևյալ {{PLURAL:$1|նիշքը|$1 նիշքերը}}։",
-       "listingcontinuesabbrev": "շարունակ.",
+       "listingcontinuesabbrev": "շարունակելի",
        "index-category": "Ինդեքսավորված էջեր",
        "noindex-category": "Չինդեքսավորված էջեր",
        "broken-file-category": "Կոտրված ֆայլի հղումով էջեր",
        "permalink": "Մշտական հղում",
        "print": "Տպել",
        "view": "Դիտել",
-       "view-foreign": "Նայել $1-ում",
+       "view-foreign": "Նայել $1ում",
        "edit": "Խմբագրել",
        "edit-local": "Խմբագրել տեղային նկարագրությունը",
        "create": "Ստեղծել",
        "mainpage-description": "Գլխավոր էջ",
        "policy-url": "Project:Կանոնակարգ",
        "portal": "Խորհրդարան",
-       "portal-url": "Project:Խորհրդարան",
+       "portal-url": "Project:Համայնքային պորտալ",
        "privacy": "Գաղտնիության քաղաքականություն",
        "privacypage": "Project:Գաղտնիության քաղաքականություն",
        "badaccess": "Թույլատրման սխալ",
        "actionthrottledtext": "Որպես հակա-սպամային միջոց, այս գործողության չափից շատ կատարումը կարճ ժամանակահատվածի ընթացքում սահմանափակված է։ Խնդրում ենք փորձել կրկին մի քանի րոպե անց։",
        "protectedpagetext": "Այս էջը պաշտպանված է խմբագումներից։",
        "viewsourcetext": "Դուք կարող եք դիտել և պատճենել այս էջի ելատեքստը.",
-       "viewyourtext": "Դուք կարող եք դիտել «ձեր ներդրումների» աղբյուրը և պատճենել այս էջ",
+       "viewyourtext": "Դուք կարող եք դիտել և պատճենել <strong>ձեր խմբագրումների</strong> ելատեքստը այդ էջում։",
        "protectedinterface": "Այս էջը պարունակում է ծրագրային ապահովման միջերեսի տեքստ, և պաշտպանված է չարաշահումների կանխարգելման նպատակով։\nԲոլոր վիքիների թարգմանությունները փոփոխելու կամ ավելացնելու համար, խնդրում ենք այցելել ՄեդիաՎիքիի տեղայնացման նախագիծը՝ [//translatewiki.net/ translatewiki.net]։",
        "editinginterface": "'''Ուշադրություն՝''' Դուք խմբագրում եք ծրագրային ապահովման միջերեսի տեքստ պարունակող էջ։\nԱյս էջի փոփոխությունը կանդրադառնա այլ մասնակիցներին տեսանելի միջերեսը այս վիքիի վրա։\nԹարգմանությունների համար նախընտրելի է օգտագործել [//translatewiki.net/wiki/Main_Page?setlang=hy translatewiki.net]՝ Մեդիավիքի ծրագրի տեղայնացման նախագիծը։",
-       "cascadeprotected": "Ô±ÕµÕ½ Õ§Õ»Õ¨ ÕºÕ¡Õ·Õ¿ÕºÕ¡Õ¶Õ¾Õ¡Õ® Õ§ Õ­Õ´Õ¢Õ¡Õ£Ö\80Õ¸Ö\82Õ´Õ«Ö\81, Ö\84Õ¡Õ¶Õ« Õ¸Ö\80 Õ¨Õ¶Õ¤Õ£Ö\80Õ¯Õ¾Õ¡Õ® Õ§ Õ°Õ¥Õ¿Ö\87ÕµÕ¡Õ¬ {{PLURAL:$1|Õ§Õ»Õ«|Õ§Õ»Õ¥Ö\80Õ«}} Õ¿Õ¥Ö\84Õ½Õ¿Õ¸Ö\82Õ´, {{PLURAL:$1|Õ¸Ö\80Õ¨|Õ¸Ö\80Õ¸Õ¶Ö\84}} ÕºÕ¡Õ·Õ¿ÕºÕ¡Õ¶Õ¾Õ¥Õ¬ {{PLURAL:$1|Õ§|Õ¥Õ¶}} Õ¯Õ¡Õ½Õ¯Õ¡Õ¤Õ¡ÕµÕ«Õ¶ Õ°Õ¶Õ¡Ö\80Õ¡Õ¾Õ¸Ö\80ությամբ.\n$2",
+       "cascadeprotected": "Ô±ÕµÕ½ Õ§Õ»Õ¨ ÕºÕ¡Õ·Õ¿ÕºÕ¡Õ¶Õ¾Õ¡Õ® Õ§ Õ­Õ´Õ¢Õ¡Õ£Ö\80Õ¸Ö\82Õ´Õ«Ö\81, Ö\84Õ¡Õ¶Õ« Õ¸Ö\80 Õ¨Õ¶Õ¤Õ£Ö\80Õ¯Õ¾Õ¡Õ® Õ§ Õ°Õ¥Õ¿Ö\87ÕµÕ¡Õ¬ {{PLURAL:$1|Õ§Õ»Õ«|Õ§Õ»Õ¥Ö\80Õ«}} Õ¿Õ¥Ö\84Õ½Õ¿Õ¸Ö\82Õ´, {{PLURAL:$1|Õ¸Ö\80Õ¨|Õ¸Ö\80Õ¸Õ¶Ö\84}} ÕºÕ¡Õ·Õ¿ÕºÕ¡Õ¶Õ¾Õ¥Õ¬ {{PLURAL:$1|Õ§|Õ¥Õ¶}} Õ¯Õ¡Õ½Õ¯Õ¡Õ¤Õ¡ÕµÕ«Õ¶ ÕºÕ¡Õ·Õ¿ÕºÕ¡Õ¶ությամբ.\n$2",
        "namespaceprotected": "Դուք չունեք «$1» անվանատարածքի էջերի խմբագրման իրավունք։",
        "customcssprotected": "Դուք չեք կարող խմբագրել այս CSS էջը, քանի որ այն պարունակում է այլ մասնակցի անձնական նախընտրանքներ։",
        "customjsprotected": "Դուք չեք կարող խմբագրել այս ՋավաՍկրիպտ էջը, քանի որ այն պարունակում է այլ մասնակցի անձնական նախընտրանքներ։",
        "mycustomjsprotected": "Դուք բավարար իրավունքներ չունեք այս JavaScript էջը խմբագրելու համար։",
        "mypreferencesprotected": "Դուք բավարար իրավունքներ չունեք Ձեր նախընտրությունները խմբագրելու համար։",
        "ns-specialprotected": "«{{ns:special}}» անվանատարածքի էջերը չեն կարող խմբագրվել։",
-       "titleprotected": "Այս անվանմամբ էջի ստեղծումը արգելվել է [[User:$1|$1]] մասնակցի կողմից։\nՏրված պատճառն է՝ ''$2''։",
+       "titleprotected": "Այս անվանմամբ էջի ստեղծումը արգելվել է [[User:$1|$1]] մասնակցի կողմից։\nՏրված պատճառն է՝ <em>$2</em>։",
        "exception-nologin": "Չեք մտել համակարգ",
        "exception-nologin-text": "Խնդրում ենք, մուտք գործեք՝ այս էջը դիտելու կամ գործողությունը կատարելու համար։",
        "virus-badscanner": "Սխալ կարգավորւմ։ Անծանոթ վիրուսների զննիչ. ''$1''",
        "recentchanges-label-bot": "Այս խմբագրումը կատարվել է բոտի կողմից",
        "recentchanges-label-unpatrolled": "Այս խմբագրումը դեռ չի պարեկվել",
        "recentchanges-label-plusminus": "Էջի չափսը փոփոխվեց այսքան բայթով",
-       "recentchanges-legend-heading": "'''Լեգենդ՝'''",
+       "recentchanges-legend-heading": "<strong>Լեգենդ՝</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (տես նաև՝  [[Special:NewPages|նոր էջերի ցանկ]])",
        "recentchanges-submit": "Ցույց տալ",
        "rcnotefrom": "Ստորև բերված են փոփոխությունները սկսած՝ '''$2''' (մինչև՝ '''$1''')։",
        "filepage-nofile-link": "Այս անունով նիշք գոյություն չունի, դուք կարող եք [$1 բեռնել այն]:",
        "uploadnewversion-linktext": "Բեռնել այս նիշքի նոր տարբերակ",
        "shared-repo-from": "$1-ից",
+       "shared-repo": "ընդհանուր շտեմարան",
        "shared-repo-name-wikimediacommons": "Վիքիպահեստ",
        "upload-disallowed-here": "Դուք չեք կարող վերագրել այս նիշքը։",
        "filerevert": "Հետ շրջել $1-ը",
        "rollbackfailed": "Հետ գլորումը ձախողվեց",
        "cantrollback": "Չհաջողվեց հետ շրջել խմբագրումը։ Վերջին ներդրումը կատարվել է էջի միակ հեղինակի կողմից։",
        "alreadyrolled": "Չհաջողվեց հետ գլորել [[:$1]] էջում [[User:$2|$2]] ([[User talk:$2|Քննարկում]]) մասնակցի վերջին խմբագրումները․ մեկ ուրիշն արդեն հետ է գլորել կամ խմբագրել է էջը։\n\nՎերջին խմբագրումը կատարել է [[User:$3|$3]] ([[User talk:$3|Քննարկում]]) մասնակիցը։",
-       "editcomment": "Խմբագրման մեկնաբանումն էր. «''$1''»։",
+       "editcomment": "Խմբագրման մեկնաբանումն էր. <em>$1</em>։",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|քննարկում]]) մասնակցի խմբագրումները հետ են շրջվել [[User:$1|$1]] մասնակցի վերջին տարբերակին։",
        "revertpage-nouser": "Հետ շրջվեց (անունը ջնջված է) մասնակցի խմբագրումը՝ [[User:$1|$1]] մասնակցի տարբերակին",
        "rollback-success": "Հետ են շրջվել $1 մասնակցի խմբագրումները. վերադարձվել է $2 մասնակցի վերջին տարբերակին։",
        "emaillink": "ուղարկել էլ. նամակ",
        "autoblocker": "Դուք ավտոմատիկ արգելափակվել եք «$1» մասնակցի հետ ձեր IP-հասցեի համընկնելու պատճառով։ Նրա արգելափակման պատճառն է՝ «$2»։",
        "blocklogpage": "Արգելափակման տեղեկամատյան",
-       "blocklogentry": "արգելափակվել է  [[$1]]. արգելափակման ժամկետն է՝  $2 $3",
-       "reblock-logentry": "փոխեց [[$1]] արգելափակումը ժամկետը դարձնելով $2 $3",
+       "blocklogentry": "[[$1]] արգելափակվել է $2 տևողությամբ $3",
+       "reblock-logentry": "փոխեց [[$1]]ի արգելափակումը՝ դարձնելով $2 տևողությամբ $3",
        "blocklogtext": "Սա մասնակիցների արգելափակման և արգելափակումից հանման տեղեկամատյանն է։\nԱվտոմատ կերպով արգելափակված IP-հասցեներն այստեղ ընդգրկված չեն։\nՏես [[Special:BlockList|այս պահին ակտիվ արգելափակումների ցանկը]]։",
        "unblocklogentry": "արգելափակումից հանված է $1",
        "block-log-flags-anononly": "միայն անանուն մասնակիցներ",
index 54471a6..34755d7 100644 (file)
        "october-date": "$1 de octobre",
        "november-date": "$1 de novembre",
        "december-date": "$1 de decembre",
+       "period-am": "AM",
+       "period-pm": "PM",
        "pagecategories": "{{PLURAL:$1|Categoria|Categorias}}",
        "category_header": "Articulos in le categoria \"$1\"",
        "subcategories": "Subcategorias",
        "myprivateinfoprotected": "Tu non ha le permission de modificar le proprie information private.",
        "mypreferencesprotected": "Tu non ha le permission de modificar le proprie preferentias.",
        "ns-specialprotected": "Le paginas special non es modificabile.",
-       "titleprotected": "Iste titulo ha essite protegite contra creation per [[User:$1|$1]].\nLe motivo specificate es ''$2''.",
+       "titleprotected": "Iste titulo ha essite protegite contra creation per [[User:$1|$1]].\nLe motivo specificate es <em>$2</em>.",
        "filereadonlyerror": "Impossibile modificar le file \"$1\" perque le repositorio de files \"$2\" es in modo de lectura sol.\n\nLe administrator de systema qui lo blocava offereva iste explication: \"$3\".",
        "invalidtitle-knownnamespace": "Titulo invalide con spatio de nomines \"$2\" e texto \"$3\"",
        "invalidtitle-unknownnamespace": "Titulo invalide con spatio de nomines incognite $1 e texto \"$2\"",
        "virus-scanfailed": "scannamento fallite (codice $1)",
        "virus-unknownscanner": "antivirus non cognoscite:",
        "logouttext": "'''Tu ha claudite le session.'''\n\nNota que alcun paginas pote continuar a apparer como si tu esserea ancora authenticate. Pro remediar isto, tu pote vacuar le cache de tu navigator.",
+       "cannotlogoutnow-title": "Impossibile clauder session ora",
+       "cannotlogoutnow-text": "Non es possibile clauder le session usante $1.",
        "welcomeuser": "Benvenite, $1!",
        "welcomecreation-msg": "Tu conto ha essite create.\nNon oblida personalisar tu [[Special:Preferences|preferentias in {{SITENAME}}]].",
        "yourname": "Nomine de usator:",
        "remembermypassword": "Memorar mi contrasigno in iste navigator (pro un maximo de $1 {{PLURAL:$1|die|dies}})",
        "userlogin-remembermypassword": "Mantener mi session aperte",
        "userlogin-signwithsecure": "Usar un connexion secur",
+       "cannotloginnow-title": "Impossibile aperir session ora",
+       "cannotloginnow-text": "Non es possibile aperir un session usante $1.",
        "yourdomainname": "Tu dominio:",
        "password-change-forbidden": "Non es possibile cambiar le contrasigno in iste wiki.",
        "externaldberror": "O il occurreva un error in le base de datos de authentication, o tu non ha le autorisation de actualisar tu conto externe.",
        "nocookieslogin": "{{SITENAME}} usa ''cookies'' pro mantener le sessiones del usatores.\nTu ha disactivate le functionalitate del ''cookies''.\nPer favor activa lo e reprova.",
        "nocookiesfornew": "Le conto de usator non esseva create, proque nos non poteva confirmar su origine.\nVerifica que tu ha activate le \"cookies\", recarga iste pagina e reproba.",
        "noname": "Tu non specificava un nomine de usator valide.",
-       "loginsuccesstitle": "Session aperite con successo",
+       "loginsuccesstitle": "Session aperite",
        "loginsuccess": "'''Tu es ora authenticate in {{SITENAME}} como \"$1\".'''",
        "nosuchuser": "Non existe un usator con le nomine \"$1\".\nIn le nomines de usator se distingue inter majusculas e minusculas.\nVerifica le orthographia, o [[Special:UserLogin/signup|crea un nove conto]].",
        "nosuchusershort": "Non existe un usator con le nomine \"$1\".\nVerifica le orthographia.",
        "createaccount-title": "Creation de un conto pro {{SITENAME}}",
        "createaccount-text": "Un persona ha create un conto in tu adresse de e-mail a {{SITENAME}} ($4) denominate \"$2\", con le contrasigno \"$3\".\nTu deberea aperir un session e cambiar tu contrasigno ora.\n\nTu pote ignorar iste message si iste conto ha essite create in error.",
        "login-throttled": "Tu ha facite troppo de tentativas de aperir session.\nPer favor attende $1 ante de probar lo novemente.",
-       "login-abort-generic": "Apertura de session non succedite - Abortate",
+       "login-abort-generic": "Apertura de session fallite - Abortate",
        "login-migrated-generic": "Tu conto ha essite migrate, e tu nomine de usator non plus existe in iste wiki.",
        "loginlanguagelabel": "Lingua: $1",
        "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.",
        "resetpass_submit": "Definir contrasigno e aperir un session",
        "changepassword-success": "Tu contrasigno ha essite cambiate!",
        "changepassword-throttled": "Tu ha recentemente facite troppo de tentativas de aperir session.\nPer favor attende $1 ante de probar lo novemente.",
+       "botpasswords": "Contrasignos de robot",
+       "botpasswords-summary": "Le <em>contrasignos de robot</em> permitte acceder a un conto de usator via API sin usar le credentiales de authentication principal del conto. Le derectos de usator concedite per un contrasigno de robot pote esser limitate.\n\nSi tu non sape proque tu volerea facer isto, tu probabilemente non debe facer lo. Nemo deberea jammais demandar te a crear un tal contrasigno e dar lo a ille.",
+       "botpasswords-disabled": "Le contrasignos de robot es disactivate.",
+       "botpasswords-no-central-id": "Pro usar le contrasignos de robot, tu debe aperir session per medio de un conto centralisate.",
+       "botpasswords-existing": "Contrasignos de robot existente",
+       "botpasswords-createnew": "Crear un nove contrasigno de robot",
+       "botpasswords-editexisting": "Modificar un contrasigno de robot existente",
+       "botpasswords-label-appid": "Nomine del robot:",
+       "botpasswords-label-create": "Crear",
+       "botpasswords-label-update": "Actualisar",
+       "botpasswords-label-cancel": "Cancellar",
+       "botpasswords-label-delete": "Deler",
+       "botpasswords-label-resetpassword": "Reinitialisar le contrasigno",
+       "botpasswords-label-grants": "Concessiones applicabile:",
+       "botpasswords-help-grants": "Cata concession da accesso al derectos de usator listate que un conto de usator jam ha. Vide le [[Special:ListGrants|tabula de concessiones]] pro plus information.",
+       "botpasswords-label-restrictions": "Restrictiones de uso:",
+       "botpasswords-label-grants-column": "Concedite",
+       "botpasswords-bad-appid": "Le nomine del robot \"$1\" non es valide.",
+       "botpasswords-insert-failed": "Le addition del nomine de robot \"$1\" ha fallite. Esque illo ha jam essite addite?",
+       "botpasswords-update-failed": "Le actualisation del nomine de robot \"$1\" ha fallite. Esque illo ha essite delite?",
+       "botpasswords-created-title": "Contrasigno de robot create",
+       "botpasswords-created-body": "Le contrasigno pro le robot \"$1\" del usator \"$2\" ha essite create.",
+       "botpasswords-updated-title": "Contrasigno de robot actualisate",
+       "botpasswords-updated-body": "Le contrasigno pro le robot \"$1\" del usator \"$2\" ha essite actualisate.",
+       "botpasswords-deleted-title": "Contrasigno de robot delite",
+       "botpasswords-deleted-body": "Le contrasigno pro le robot \"$1\" del usator \"$2\" ha essite delite.",
+       "botpasswords-newpassword": "Le nove contrasigno pro aperir session con <strong>$1</strong> es <strong>$2</strong>. <em>Per favor, conserva isto pro uso futur.</em>",
+       "botpasswords-restriction-failed": "Session impedite per restrictiones de contrasigno de robot.",
+       "botpasswords-invalid-name": "Iste nomine de usator non contine le separator pro contrasigno de robot (\"$1\").",
+       "botpasswords-not-exist": "Le usator \"$1\" non ha un contrasigno de robot del nomine \"$2\".",
        "resetpass_forbidden": "Le contrasignos non pote esser cambiate",
        "resetpass-no-info": "Tu debe aperir un session pro poter acceder directemente a iste pagina.",
        "resetpass-submit-loggedin": "Cambiar contrasigno",
        "passwordreset-emailtext-ip": "Un persona (probabilemente tu, ab le adresse IP $1) requestava le reinitialisation de tu\ncontrasigno de {{SITENAME}} ($4). Le {{PLURAL:$3|conto|contos}} de usator sequente es\nassociate con iste adresse de e-mail:\n\n$2\n\nIste {{PLURAL:$3|contrasigno|contrasignos}} temporari expirara post {{PLURAL:$5|un die|$5 dies}}.\nTu deberea ora aperir session e eliger un nove contrasigno. Si un altere persona faceva iste\nrequesta, o si tu te ha rememorate tu contrasigno original e non plus\nvole cambiar lo, tu pote ignorar iste message e continuar a usar le ancian\ncontrasigno.",
        "passwordreset-emailtext-user": "Le usator $1 in {{SITENAME}} requestava un reinitialisation de tu contrasigno in {{SITENAME}}\n($4). Le {{PLURAL:$3|conto|contos}} de usator sequente es associate con iste adresse de e-mail:\n\n$2\n\nIste {{PLURAL:$3|contrasigno|contrasignos}} temporari expirara post {{PLURAL:$5|un die|$5 dies}}.\nTu deberea ora aperir session e eliger un nove contrasigno. Si un altere persona faceva iste\nrequesta, o si tu te ha rememorate tu contrasigno original e non plus\nvole cambiar lo, tu pote ignorar iste message e continuar a usar le ancian\ncontrasigno.",
        "passwordreset-emailelement": "Nomine de usator: \n$1\n\nContrasigno temporari: \n$2",
-       "passwordreset-emailsentemail": "Si iste es un adresse de e-mail registrate pro tu conto, alora un message de e-mail pro le reinitialisation del contrasigno essera inviate.",
-       "passwordreset-emailsentusername": "Si il ha un correspondente adresse de e-mail registrate, alora un e-mail pro reinitialisar le contrasigno essera inviate.",
+       "passwordreset-emailsentemail": "Si iste adresse es associate a tu conto, alora un e-mail pro reinitialisar le contrasigno essera inviate.",
+       "passwordreset-emailsentusername": "Si il ha un adresse de e-mail associate a iste conto, alora un e-mail pro reinitialisar le contrasigno essera inviate.",
        "passwordreset-emailsent-capture": "Un message de e-mail pro le reinitialisation del contrasigno ha essite inviate; iste message es monstrate hic infra.",
        "passwordreset-emailerror-capture": "Un e-mail pro le reinitialisation del contrasigno ha essite generate; iste message es monstrate hic infra, ma le invio al {{GENDER:$2|usator}} ha fallite: $1",
        "changeemail": "Cambiar o remover adresse de e-mail",
        "newarticle": "(Nove)",
        "newarticletext": "Tu ha sequite un ligamine verso un pagina que non existe ancora.\nPro crear iste pagina, comencia a scriber in le quadro infra (consulta le [$1 pagina de adjuta] pro plus informationes).\nSi tu ha arrivate a iste pagina per error, clicca le button '''Retornar''' de tu navigator.",
        "anontalkpagetext": "---- ''Isto es le pagina de discussion pro un usator anonyme qui non ha ancora create un conto, o qui non lo usa. Consequentemente nos debe usar le adresse IP numeric pro identificar le/la.\nUn tal adresse IP pote esser usate in commun per varie personas.\nSi tu es un usator anonyme e pensa que commentos irrelevante ha essite dirigite a te, per favor [[Special:UserLogin/signup|crea un conto]] o [[Special:UserLogin|aperi un session]] pro evitar futur confusiones con altere usatores anonyme.''",
-       "noarticletext": "Al momento il non ha texto in iste pagina.\nTu pote [[Special:Search/{{PAGENAME}}|cercar le titulo de iste pagina]] in altere paginas,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercar in le registros pertinente],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} modificar iste pagina]</span>.",
+       "noarticletext": "Al momento il non ha texto in iste pagina.\nTu pote [[Special:Search/{{PAGENAME}}|cercar le titulo de iste pagina]] in altere paginas,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercar in le registros pertinente],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} crear iste pagina]</span>.",
        "noarticletext-nopermission": "In iste momento il non ha texto in iste pagina.\nTu pote [[Special:Search/{{PAGENAME}}|cercar le titulo de iste pagina]] in altere paginas,\no <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercar in le registros pertinente], ma tu non ha le permission de crear iste pagina.</span>",
        "missing-revision": "Le version №$1 del pagina nominate \"{{FULLPAGENAME}}\" non existe.\n\nIsto es generalmente causate per sequer un ligamine de historia obsolete a un pagina que ha essite delite.\nDetalios se trova in le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de deletiones].",
        "userpage-userdoesnotexist": "Le conto de usator \"<nowiki>$1</nowiki>\" non es registrate. Per favor verifica que tu vole crear/modificar iste pagina.",
        "previewnote": "'''Isto es solmente un previsualisation.'''\nLe modificationes non ha ancora essite publicate!",
        "continue-editing": "Saltar al quadro de modification",
        "previewconflict": "Iste previsualisation reflecte le apparentia final del texto in le area de modification superior\nsi tu opta pro publicar lo.",
-       "session_fail_preview": "'''Nos non poteva processar tu modification proque nos perdeva le datos del session.\nPer favor reprova.\nSi illo ancora non va, prova [[Special:UserLogout|clauder tu session]] e aperir un nove session.'''",
-       "session_fail_preview_html": "'''Nos non poteva processar tu modification proque nos perdeva le datos del session.'''\n\n''Post que HTML crude es active in {{SITENAME}}, le previsualisation es celate como precaution contra attaccos via JavaScript.''\n\n'''Si isto es un tentativa de modification legitime, per favor reprova lo.\nSi illo ancora non va, prova [[Special:UserLogout|clauder tu session]] e aperir un nove session.'''",
+       "session_fail_preview": "Oh guai! Iste modification ha essite impedite per un perdita de datos del session.\n\nEs possibile que tu session ha essite claudite. <strong>Per favor, verifica que tu session es ancora aperte e tenta lo de novo</strong>.\nSi le problema persiste, proba a [[Special:UserLogout|clauder session]] e aperir un nove session, verificante que tu navigator accepta le cookies ab iste sito.",
+       "session_fail_preview_html": "Oh guai! Iste modification ha essite impedite per un perdita de datos del session.\n\n<em>Post que HTML crude es active in {{SITENAME}}, le previsualisation es celate como precaution contra attaccos via JavaScript.</em>\n\n<strong>Si iste tentativa de modification es legitime, per favor, tenta lo de novo.</strong>\nSi le problema persiste, proba a [[Special:UserLogout|clauder session]] e aperir un nove session, verificante que tu navigator accepta le cookies ab iste sito.",
        "token_suffix_mismatch": "'''Tu modification ha essite refusate proque tu cliente corrumpeva le characteres de punctuation in le indicio de modification.\nIste refusa es pro evitar le corruption del texto del pagina.\nIsto pote occurrer quando tu usa un servicio problematic de ''proxy'' anonyme a base de web.'''",
        "edit_form_incomplete": "'''Certe partes del formulario de modification non attingeva le servitor; re-verifica que tu modificationes es intacte e reproba.'''",
        "editing": "Modification de $1",
        "undo-summary-username-hidden": "Disfacer le revision $1 facite per un usator celate",
        "cantcreateaccounttitle": "Non pote crear conto",
        "cantcreateaccount-text": "Le creation de contos desde iste adresse IP ('''$1''') ha essite blocate per [[User:$3|$3]].\n\nLe motivo que $3 dava es ''$2''",
-       "cantcreateaccount-range-text": "Le creation de contos ab le adresses IP in le intervallo '''$1''', le qual include tu adresse IP ('''$4'''), ha essite blocate per [[User:$3|$3]].\n\nLe motivo fornite per $3 es ''$2''",
+       "cantcreateaccount-range-text": "Le creation de contos ab le adresses IP in le intervallo <strong>$1</strong>, le qual include tu adresse IP (<strong>$4</strong>), ha essite blocate per [[User:$3|$3]].\n\nLe motivo fornite per $3 es <em>$2</em>",
        "viewpagelogs": "Vider le entratas del registro pro iste pagina",
        "nohistory": "Non existe un historia de modificationes pro iste pagina.",
        "currentrev": "Version actual",
        "revdelete-unsuppress": "Eliminar restrictiones super versiones restaurate",
        "revdelete-log": "Motivo:",
        "revdelete-submit": "Applicar al {{PLURAL:$1|version|versiones}} seligite",
-       "revdelete-success": "'''Le visibilitate del version ha essite actualisate con successo.'''",
+       "revdelete-success": "Le visibilitate del version ha essite actualisate.",
        "revdelete-failure": "'''Le visibilitate del version non poteva esser actualisate:'''\n$1",
-       "logdelete-success": "'''Le visibilitate del registro ha essite definite con successo.'''",
+       "logdelete-success": "Le visibilitate del registro ha essite definite.",
        "logdelete-failure": "'''Le visibilitate del registro non poteva esser cambiate:'''\n$1",
        "revdel-restore": "Cambiar visibilitate",
        "pagehist": "Historia del pagina",
        "mergehistory-empty": "Nulle versiones pote esser fusionate.",
        "mergehistory-done": "$3 {{PLURAL:$3|version|versiones}} de $1 fusionate in [[:$2]] con successo.",
        "mergehistory-fail": "Impossibile executar le fusion del historia. Per favor reverifica le parametros del pagina e del tempore.",
+       "mergehistory-fail-bad-timestamp": "Data e hora non valide.",
+       "mergehistory-fail-invalid-source": "Pagina de origine non valide.",
+       "mergehistory-fail-invalid-dest": "Pagina de destination non valide.",
+       "mergehistory-fail-no-change": "Nulle version de historia ha essite fusionate. Per favor, reverifica le parametros de pagina e de tempore.",
+       "mergehistory-fail-permission": "Permissiones insufficiente pro fusionar le historia.",
+       "mergehistory-fail-self-merge": "Le paginas de origine e de destination es identic.",
+       "mergehistory-fail-timestamps-overlap": "Le versiones de origine se superpone o seque le versiones de destination.",
        "mergehistory-fail-toobig": "Le historias de versiones non pote esser fusionate con plus de $1 {{PLURAL:$1|version|versiones}} a displaciar.",
        "mergehistory-no-source": "Le pagina de origine $1 non existe.",
        "mergehistory-no-destination": "Le pagina de destination $1 non existe.",
        "userrights": "Gestion de derectos de usator",
        "userrights-lookup-user": "Gerer gruppos de usatores",
        "userrights-user-editname": "Entra un nomine de usator:",
-       "editusergroup": "Modificar gruppos de usatores",
+       "editusergroup": "Modificar gruppos de {{GENDER:$1|usator}}",
        "editinguser": "Cambia le derectos del {{GENDER:$1|usator}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Modificar gruppos de usatores",
-       "saveusergroups": "Salveguardar gruppos de usatores",
+       "saveusergroups": "Salveguardar gruppos de {{GENDER:$1|usator}}",
        "userrights-groupsmember": "Membro de:",
        "userrights-groupsmember-auto": "Membro implicite de:",
        "userrights-groups-help": "Tu pote alterar le gruppos del quales iste usator es membro:\n* Un quadrato marcate significa que le usator es membro del gruppo in question.\n* Un non marcate significa que ille non es membro de illo.\n* Un * indica que tu non potera eliminar le gruppo quando tu lo ha addite, o vice versa.",
        "userrights-changeable-col": "Gruppos que tu pote modificar",
        "userrights-unchangeable-col": "Gruppos que tu non pote modificar",
        "userrights-conflict": "Conflicto inter cambiamentos de derectos de usator! Per favor revide e confirma tu cambiamentos.",
-       "userrights-removed-self": "Tu ha removite con successo tu proprie derectos. In consequentia, tu non plus pote acceder a iste pagina.",
+       "userrights-removed-self": "Tu ha removite tu proprie derectos. In consequentia, tu non plus pote acceder a iste pagina.",
        "group": "Gruppo:",
        "group-user": "Usatores",
        "group-autoconfirmed": "Usatores autoconfirmate",
        "right-createpage": "Crear paginas (non discussion)",
        "right-createtalk": "Crear paginas de discussion",
        "right-createaccount": "Crear nove contos de usator",
+       "right-autocreateaccount": "Aperir session automaticamente con un conto de usator externe",
        "right-minoredit": "Marcar modificationes como minor",
        "right-move": "Renominar paginas",
        "right-move-subpages": "Renominar paginas con lor subpaginas",
        "right-managechangetags": "Crear e deler [[Special:Tags|etiquettas]] in le base de datos",
        "right-applychangetags": "Applicar [[Special:Tags|etiquettas]] al proprie modificationes",
        "right-changetags": "Adder e remover qualcunque [[Special:Tags|etiquettas]] sur individual versiones e entratas de registro",
-       "grant-generic": "gruppo de derectos \"$1\"",
+       "grant-generic": "Gruppo de derectos \"$1\"",
+       "grant-group-page-interaction": "Interager con paginas",
+       "grant-group-file-interaction": "Interager con multimedia",
+       "grant-group-watchlist-interaction": "Interager con tu observatorio",
+       "grant-group-email": "Inviar e-mail",
+       "grant-group-high-volume": "Exequer actiones in massa",
+       "grant-group-customization": "Personalisation e perferentias",
        "grant-group-administration": "Exequer actiones administrative",
+       "grant-group-other": "Activitates diverse",
        "grant-blockusers": "Blocar e disblocar usatores",
+       "grant-createaccount": "Crear contos",
        "grant-createeditmovepage": "Crear, modificar e renominar paginas",
        "grant-delete": "Deler paginas, versiones e entratas de registro",
-       "grant-editinterface": "Modificar le spatio de nomines MediaWiki e le CSS/JS de usatores",
-       "grant-editmycssjs": "Modificar le CSS/JS del proprie usator",
-       "grant-editmywatchlist": "Modificar le proprie observatorio",
+       "grant-editinterface": "Modificar le spatio de nomines MediaWiki e le CSS/JavaScript de usatores",
+       "grant-editmycssjs": "Modificar le CSS/JavaScript del proprie usator",
+       "grant-editmyoptions": "Modificar tu preferentias de usator",
+       "grant-editmywatchlist": "Modificar tu observatorio",
        "grant-editpage": "Modificar paginas existente",
        "grant-editprotected": "Modificar paginas protegite",
        "grant-highvolume": "Modification in massa",
        "grant-oversight": "Celar usatores e supprimer versiones",
-       "grant-patrol": "Patruliar cambiamentos in paginas",
+       "grant-patrol": "Patruliar cambiamentos a paginas",
        "grant-protect": "Proteger e disproteger paginas",
-       "grant-rollback": "Revocar cambiamentos in paginas",
+       "grant-rollback": "Revocar cambiamentos a paginas",
        "grant-sendemail": "Inviar e-mail a altere usatores",
        "grant-uploadeditmovefile": "Actualisar, reimplaciar e renominar files",
        "grant-uploadfile": "Incargar nove files",
-       "grant-viewdeleted": "Vider information delite",
+       "grant-basic": "Derectos de base",
+       "grant-viewdeleted": "Vider files e paginas delite",
        "grant-viewmywatchlist": "Vider le proprie observatorio",
        "newuserlogpage": "Registro de creation de usatores",
        "newuserlogpagetext": "Isto es un registro de creation de usatores.",
        "action-createpage": "crear paginas",
        "action-createtalk": "crear paginas de discussion",
        "action-createaccount": "crear iste conto de usator",
+       "action-autocreateaccount": "crear automaticamente iste conto de usator externe",
        "action-history": "vider le historia de iste pagina",
        "action-minoredit": "marcar iste modification como minor",
        "action-move": "renominar iste pagina",
        "recentchanges-label-bot": "Iste modification ha essite effectuate per un robot",
        "recentchanges-label-unpatrolled": "Iste modification non ha ancora essite patruliate",
        "recentchanges-label-plusminus": "Le dimension del pagina ha cambiate de iste numero de bytes",
-       "recentchanges-legend-heading": "'''Legenda:'''",
+       "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vide etiam le [[Special:NewPages|lista de nove paginas]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Monstrar",
        "upload-dialog-button-done": "Facite",
        "upload-dialog-button-save": "Salveguardar",
        "upload-dialog-button-upload": "Incargar",
-       "upload-form-label-select-file": "Seliger file",
        "upload-form-label-infoform-title": "Detalios",
        "upload-form-label-infoform-name": "Nomine",
        "upload-form-label-infoform-description": "Description",
        "uploadstash-summary": "Iste pagina forni accesso al files que ha essite incargate (o que es in le processo de incargamento) ma non es ancora publicate in le wiki. Iste files es solmente visibile pro le usator qui los incargava.",
        "uploadstash-clear": "Rader le pila de files incargate",
        "uploadstash-nofiles": "Il non ha files in le pila.",
-       "uploadstash-badtoken": "Le execution de iste action non succedeva, forsan proque le datos del session expirava. Tenta lo de novo.",
-       "uploadstash-errclear": "Le radimento del files non succedeva.",
+       "uploadstash-badtoken": "Le execution de iste action ha fallite, forsan perque le datos del session ha expirate. Tenta lo de novo.",
+       "uploadstash-errclear": "Le radimento del files ha fallite.",
        "uploadstash-refresh": "Refrescar le lista de files",
        "invalid-chunk-offset": "Position de segmento invalide",
        "img-auth-accessdenied": "Accesso refusate",
        "rollbackfailed": "Revocation fallite",
        "cantrollback": "Impossibile revocar le modification;\nle ultime contributor es le sol autor de iste pagina.",
        "alreadyrolled": "Non pote revocar le ultime modification de [[:$1]] per [[User:$2|$2]] ([[User talk:$2|discussion]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nun altere persona ha ja modificate o revocate le pagina.\n\nLe ultime modification esseva facite per [[User:$3|$3]] ([[User talk:$3|discussion]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Le summario del modification esseva: \"''$1''\".",
+       "editcomment": "Le summario del modification esseva: <em>$1</em>.",
        "revertpage": "Reverteva modificationes per [[Special:Contributions/$2|$2]] ([[User talk:$2|Discussion]]) al ultime version per [[User:$1|$1]]",
        "revertpage-nouser": "Reverteva modificationes per un usator celate al ultime version per {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Revocava modificationes per $1;\nretornava al version per $2.",
        "changecontentmodel-title-label": "Titulo del pagina",
        "changecontentmodel-model-label": "Nove modello de contento",
        "changecontentmodel-reason-label": "Motivo:",
+       "changecontentmodel-submit": "Cambiar",
        "changecontentmodel-success-title": "Le modello de contento ha essite cambiate",
        "changecontentmodel-success-text": "Le typo de contento de [[:$1]] ha essite cambiate.",
        "changecontentmodel-cannot-convert": "Le contento de [[:$1]] non pote esser convertite a un typo de $2.",
        "javascripttest-pagetext-frameworks": "Per favor selige un del sequente structuras de test: $1",
        "javascripttest-pagetext-skins": "Selige un apparentia con le qual executar le tests:",
        "javascripttest-qunit-intro": "Vide [$1 documentation de tests] sur mediawiki.org.",
-       "tooltip-pt-userpage": "Tu pagina de usator",
+       "tooltip-pt-userpage": "{{GENDER:|Tu}} pagina de usator",
        "tooltip-pt-anonuserpage": "Le pagina de usator pro le adresse IP desde le qual tu face modificationes",
-       "tooltip-pt-mytalk": "Tu pagina de discussion",
+       "tooltip-pt-mytalk": "{{GENDER:|Tu}} pagina de discussion",
        "tooltip-pt-anontalk": "Discussion super le modificationes facite desde iste adresse IP",
-       "tooltip-pt-preferences": "Mi preferentias",
+       "tooltip-pt-preferences": "{{GENDER:|Tu}} preferentias",
        "tooltip-pt-watchlist": "Le lista de paginas del quales tu seque le modificationes",
-       "tooltip-pt-mycontris": "Lista de tu contributiones",
+       "tooltip-pt-mycontris": "Lista de {{GENDER:|tu}} contributiones",
        "tooltip-pt-anoncontribs": "Un lista de modificationes facite per iste adresse IP",
        "tooltip-pt-login": "Nos recommenda que tu te authentica, ma non es obligatori.",
        "tooltip-pt-logout": "Clauder session",
        "tooltip-t-recentchangeslinked": "Modificationes recente in le paginas al quales iste pagina contine ligamines",
        "tooltip-feed-rss": "Syndication RSS pro iste pagina",
        "tooltip-feed-atom": "Syndication Atom pro iste pagina",
-       "tooltip-t-contributions": "Vider le lista de contributiones de iste usator",
+       "tooltip-t-contributions": "Un lista de contributiones de {{GENDER:$1|iste usator}}",
        "tooltip-t-emailuser": "Inviar un e-mail a iste usator",
        "tooltip-t-info": "Plus information super iste pagina",
        "tooltip-t-upload": "Incargar files",
        "tags-edit-reason": "Motivo:",
        "tags-edit-revision-submit": "Applicar cambiamentos a {{PLURAL:$1|iste version|$1 versiones}}",
        "tags-edit-logentry-submit": "Applicar cambiamentos a {{PLURAL:$1|iste entrata|$1 entratas}} de registro",
-       "tags-edit-success": "Le cambiamentos ha essite applicate con successo.",
+       "tags-edit-success": "Le cambiamentos ha essite applicate.",
        "tags-edit-failure": "Le cambiamentos non ha potite esser applicate:\n$1",
        "tags-edit-nooldid-title": "Le version de destination es invalide",
        "tags-edit-nooldid-text": "O tu non ha specificate un version de destination sur le qual exequer iste function, o le version specificate non existe.",
        "default-skin-not-found": "Attention! Le apparentia predefinite de tu wiki, definite in <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, non es disponibile.\n\nLe installation pare includer le sequente {{PLURAL:$4|apparentia|apparentias}}. Vide [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pro saper como activar {{PLURAL:$4|lo|los e seliger le predefinite}}.\n\n$2\n\n; Si tu ha justo installate MediaWiki:\n: Tu lo ha probabilemente installate a partir de git, o directemente del codice fonte con un altere methodo. Isto es normal. Essaya installar alcun apparentias desde [https://www.mediawiki.org/wiki/Category:All_skins le directorio de apparentias de mediawiki.org], per:\n:* Discargar le [https://www.mediawiki.org/wiki/Download archivo tar del installator], que include plure apparentias e extensiones. Tu pote copiar e collar le directorio <code>skins/</code> de illo.\n:* Discargar archivos tar con apparentias indidivual ab [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Usar Git pro discargar apparentias].\n: Facer isto non deberea interferer con tu repositorio git si tu es un disveloppator de MediaWiki.\n\n; Si tu ha justo actualisate MediaWiki:\n: MediaWiki a partir del version 1.24 non plus activa automaticamente le apparentias installate (vide [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Tu pote collar le sequente {{PLURAL:$5|linea|lineas}} in <code>LocalSettings.php</code> pro activar {{PLURAL:$5|le apparentia|tote le apparentias}} actualmente installate:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si tu ha justo modificate <code>LocalSettings.php</code>:\n: Verifica meticulosemente que le nomines del apparentias non ha errores.",
        "default-skin-not-found-no-skins": "Attention! Le apparentia predefinite de tu wiki, definite in <code>$wgDefaultSkin</code> como <code>$1</code>, non es disponibile.\n\nTu non ha apparentias installate.\n\n; Si tu ha justo installate o actualisate MediaWiki:\n: Tu lo ha probabilemente installate a partir de git, o directemente del codice fonte con un altere methodo. Isto es normal. Essaya installar alcun apparentias desde [https://www.mediawiki.org/wiki/Category:All_skins le directorio de apparentias de mediawiki.org], per:\n:* Discargar le [https://www.mediawiki.org/wiki/Download archivo tar del installator], que include plure apparentias e extensiones. Tu pote copiar e collar le directorio <code>skins/</code> de illo.\n:* Discargar archivos tar con apparentias individual ab [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Usar Git pro discargar apparentias].\n: Facer isto non deberea interferer con tu repositorio git si tu es un disveloppator de MediaWiki. Vide [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pro saper como activar apparentias e seliger le predefinite.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activate)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disactivate''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>disactivate</strong>)",
        "mediastatistics": "Statisticas de multimedia",
        "mediastatistics-summary": "Statisticas sur le typos de file incargate. Isto include solmente le version le plus recente de un file. Versiones ancian o delite de files es excludite.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
index 8d4232c..be3b009 100644 (file)
        "tog-watchdefault": "Tambahkan halaman yang saya sunting ke daftar pantauan",
        "tog-watchmoves": "Tambahkan halaman yang saya pindahkan ke daftar pantauan",
        "tog-watchdeletion": "Tambahkan halaman yang saya hapus ke daftar pantauan",
-       "tog-watchrollback": "Tambahkan laman yang pernah saya kembalikan ke dalam daftar pantauan saya",
+       "tog-watchrollback": "Tambahkan halaman yang pernah saya kembalikan ke dalam daftar pantauan saya",
        "tog-minordefault": "Tandai semua suntingan sebagai suntingan kecil secara baku",
        "tog-previewontop": "Perlihatkan pratayang sebelum kotak sunting dan tidak sesudahnya",
        "tog-previewonfirst": "Perlihatkan pratayang pada suntingan pertama",
-       "tog-enotifwatchlistpages": "Kirimkan saya surel jika suatu halaman yang saya pantau berubah",
+       "tog-enotifwatchlistpages": "Kirimkan saya surel jika suatu halaman atau berkas yang saya pantau berubah",
        "tog-enotifusertalkpages": "Kirimkan saya surel jika halaman pembicaraan saya berubah",
        "tog-enotifminoredits": "Kirimkan saya surel juga pada perubahan kecil",
        "tog-enotifrevealaddr": "Tampilkan alamat surel saya pada surel notifikasi",
        "myprivateinfoprotected": "Anda tidak memiliki izin untuk menyunting informasi pribadi Anda.",
        "mypreferencesprotected": "Anda tidak memiliki izin untuk menyunting preferensi Anda.",
        "ns-specialprotected": "Halaman pada ruang nama {{ns:special}} tidak dapat disunting.",
-       "titleprotected": "Judul ini dilindungi dari pembuatan oleh [[User:$1|$1]].\nAlasan yang diberikan adalah ''$2''.",
+       "titleprotected": "Judul ini dilindungi dari pembuatan oleh [[User:$1|$1]].\nAlasan yang diberikan adalah <em>$2</em>.",
        "filereadonlyerror": "Tidak dapat memodifikasi berkas \"$1\" karena file repositori \"$2\" adalah pada mode baca-saja.\n\nPengurus yang menguncinya memberikan alasan: \"$3\".",
        "invalidtitle-knownnamespace": "Judul yang tidak sah dengan ruangnama \"$2\" dan teks \"$3\"",
        "invalidtitle-unknownnamespace": "Judul yang tidak sah dengan nomor ruang nama tidak diketahui $1 dan teks \"$2\"",
        "newarticle": "(Baru)",
        "newarticletext": "Anda mengikuti pranala ke halaman yang belum tersedia. Untuk membuat halaman tersebut, ketiklah isi halaman di kotak di bawah ini (lihat [$1 halaman bantuan] untuk informasi lebih lanjut). Jika Anda tanpa sengaja sampai ke halaman ini, klik tombol '''back''' di penjelajah web Anda.",
        "anontalkpagetext": "----''Ini adalah halaman pembicaraan seorang pengguna anonim yang belum membuat akun atau tidak menggunakannya.\nDengan demikian, kami terpaksa harus memakai alamat IP yang bersangkutan untuk mengidentifikasikannya.\nAlamat IP seperti ini mungkin dipakai bersama oleh beberapa pengguna yang berbeda.\nJika Anda adalah seorang pengguna anonim dan merasa mendapatkan komentar-komentar yang tidak relevan yang ditujukan langsung kepada Anda, silakan [[Special:UserLogin/signup|membuat akun]] atau [[Special:UserLogin|masuk log]] untuk menghindari kerancuan dengan pengguna anonim lainnya di lain waktu.''",
-       "noarticletext": "Saat ini tidak ada teks di halaman ini.\nAnda dapat [[Special:Search/{{PAGENAME}}|melakukan pencarian untuk judul halaman ini]] di halaman-halaman lain, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mencari log terkait], atau [{{fullurl:{{FULLPAGENAME}}|action=edit}} menyunting halaman ini]</span>.",
+       "noarticletext": "Saat ini tidak ada teks di halaman ini.\nAnda dapat [[Special:Search/{{PAGENAME}}|melakukan pencarian untuk judul halaman ini]] di halaman-halaman lain, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mencari log terkait], atau [{{fullurl:{{FULLPAGENAME}}|action=edit}} membuat halaman ini]</span>.",
        "noarticletext-nopermission": "!Saat ini tidak ada teks di halaman ini.\nAnda dapat [[Special:Search/{{PAGENAME}}|melakukan pencarian untuk judul halaman ini]] di halaman-halaman lain, atau <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mencari log terkait]</span>, tapi Anda tidak memiliki izin untuk membuat halaman ini",
        "missing-revision": "Revisi #$1 halaman berjudul \"{{FULLPAGENAME}}\" tidak eksis.\n\nHal ini biasanya disebabkan oleh tautan versi terdahulu menuju halaman yang sudah dihapus.\nRinciannya dapat ditemukan di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapusan].",
        "userpage-userdoesnotexist": "Akun pengguna \"<nowiki>$1</nowiki>\" tidak terdaftar.",
        "undo-summary-username-hidden": "Batalkan revisi $1 oleh seorang pengguna tersembunyi",
        "cantcreateaccounttitle": "Akun tak dapat dibuat",
        "cantcreateaccount-text": "Pembuatan akun dari alamat IP ini (<strong>$1</strong>) telah diblokir oleh [[User:$3|$3]].\n\nAlasan 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 [[User:$3|$3]].\n\nAlasan yang diberikan oleh  $3  adalah ''$2''",
+       "cantcreateaccount-range-text": "Pembuatan akun dari alamat IP dalam rentang <strong>$1</strong>, yang mencakup alamat IP anda (<strong>$4</strong>), telah diblokir oleh [[User:$3|$3]].\n\nAlasan yang diberikan oleh  $3  adalah <em>$2</em>",
        "viewpagelogs": "Lihat log halaman ini",
        "nohistory": "Tidak ada sejarah penyuntingan untuk halaman ini",
        "currentrev": "Revisi terkini",
        "prefs-user-pages": "Halaman pengguna",
        "prefs-personal": "Profil",
        "prefs-rc": "Perubahan terbaru",
-       "prefs-watchlist": "Pemantauan",
+       "prefs-watchlist": "Daftar pantauan",
        "prefs-editwatchlist": "Sunting daftar pantauan",
-       "prefs-editwatchlist-label": "Sunting entri di daftar pantuan:",
+       "prefs-editwatchlist-label": "Sunting entri di daftar pantauan Anda:",
        "prefs-editwatchlist-edit": "Lihat dan hapus judul di daftar pantauan Anda",
        "prefs-editwatchlist-raw": "Sunting daftar pantauan mentah",
        "prefs-editwatchlist-clear": "Kosongkan daftar pantauan",
        "prefs-watchlist-days": "Jumlah hari maksimum yang ditampilkan di daftar pantauan:",
        "prefs-watchlist-days-max": "Maksimum $1 {{PLURAL:$1|hari}}",
-       "prefs-watchlist-edits": "Jumlah suntingan maksimum yang ditampilkan di daftar pantauan yang lebih lengkap:",
+       "prefs-watchlist-edits": "Jumlah suntingan maksimum yang ditampilkan di daftar pantauan yang dikembangkan:",
        "prefs-watchlist-edits-max": "Nilai maksimum: 1000",
-       "prefs-watchlist-token": "Token pantauan:",
+       "prefs-watchlist-token": "Token daftar pantauan:",
        "prefs-misc": "Lain-lain",
        "prefs-resetpass": "Ganti kata sandi",
        "prefs-changeemail": "Ubah atau hapus alamat surel",
        "recentchangesdays-max": "(maksimum $1 {{PLURAL:$1|hari|hari}})",
        "recentchangescount": "Standar jumlah suntingan yang ditampilkan:",
        "prefs-help-recentchangescount": "Opsi ini berlaku untuk perubahan terbaru, versi terdahulu halaman, dan log.",
-       "prefs-help-watchlist-token2": "Ini adalah kunci rahasia (token) ke web feed dari daftar pantauan Anda.\nSiapa saja yang tahu akan dapat melihat daftar pantauan Anda, jadi jangan dibagikan.\n[[Special:ResetTokens|Klik di sini jika Anda perlu menyetel ulang]].",
+       "prefs-help-watchlist-token2": "Ini adalah kunci rahasia (token) ke umpan web dari daftar pantauan Anda.\nSiapa saja yang tahu akan dapat melihat daftar pantauan Anda, jadi jangan dibagikan. Jika diperlukan\n[[Special:ResetTokens|Anda dapat mengatur ulang kunci tersebut]].",
        "savedprefs": "Preferensi Anda telah disimpan",
        "savedrights": "Hak pengguna {{GENDER:$1|$1}} telah disimpan.",
        "timezonelegend": "Zona waktu:",
        "right-edituserjs": "Menyunting berkas JS pengguna lain",
        "right-editmyusercss": "Sunting berkas CSS pengguna Anda",
        "right-editmyuserjs": "Sunting berkas JavaScript pengguna Anda",
-       "right-viewmywatchlist": "Lihat daftar pantau Anda",
+       "right-viewmywatchlist": "Lihat daftar pantauan Anda",
        "right-editmywatchlist": "Sunting daftar pantau Anda. Masih ada cara menambahkan halaman tanpa harus memiliki hak ini.",
        "right-viewmyprivateinfo": "Lihat data pribadi Anda (alamat surel, nama asli, dll.)",
        "right-editmyprivateinfo": "Sunting data pribadi Anda (alamat surel, nama asli, dll.)",
        "grant-uploadfile": "Mengunggah berkas baru",
        "grant-basic": "Akses dasar",
        "grant-viewdeleted": "Melihat halaman dan berkas yang dihapus",
-       "grant-viewmywatchlist": "Melihat daftar pantauan Anda",
+       "grant-viewmywatchlist": "Lihat daftar pantauan Anda",
        "newuserlogpage": "Log pengguna baru",
        "newuserlogpagetext": "Di bawah ini adalah log pendaftaran pengguna baru",
        "rightslog": "Log perubahan hak akses",
        "action-userrights-interwiki": "menyunting hak akses dari pengguna di wiki lain",
        "action-siteadmin": "mengunci atau membuka kunci basis data",
        "action-sendemail": "kirim surel",
-       "action-editmywatchlist": "sunting daftar pantau Anda",
+       "action-editmywatchlist": "sunting daftar pantauan Anda",
        "action-viewmywatchlist": "lihat daftar pantau Anda",
        "action-viewmyprivateinfo": "lihat informasi pribadi Anda",
        "action-editmyprivateinfo": "sunting informasi pribadi Anda",
        "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": "'''Keterangan:'''",
+       "recentchanges-legend-heading": "<strong>Keterangan:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (lihat pula [[Special:NewPages|daftar halaman baru]])",
        "recentchanges-submit": "Tampilkan",
        "rcnotefrom": "Di bawah ini adalah {{PLURAL:$5|perubahan}} sejak <strong>$3, $4</strong> (ditampilkan sampai <strong>$1</strong> perubahan).",
        "recentchangeslinked-feed": "Perubahan terkait",
        "recentchangeslinked-toolbox": "Perubahan terkait",
        "recentchangeslinked-title": "Perubahan yang terkait dengan \"$1\"",
-       "recentchangeslinked-summary": "Ini adalah daftar perubahan pada halaman yang terkait ke halaman yang spesifik (atau bagian dari kategori yang spesifik).\nHalaman pada [[Special:Watchlist|daftar pantauan Anda]] terlihat <strong>dicetak tebal</strong>.",
+       "recentchangeslinked-summary": "Ini adalah daftar perubahan pada halaman yang terkait ke halaman tertentu (atau bagian dari kategori tertentu).\nHalaman pada [[Special:Watchlist|daftar pantauan Anda]] terlihat <strong>dicetak tebal</strong>.",
        "recentchangeslinked-page": "Nama halaman:",
        "recentchangeslinked-to": "Perlihatkan perubahan dari halaman-halaman yang terhubung dengan halaman yang disajikan",
        "recentchanges-page-added-to-category": "[[:$1]] ditambahkan pada kategori",
        "backend-fail-read": "Tidak dapat membaca berkas $1.",
        "backend-fail-create": "Tidak dapat membuat berkas $1.",
        "backend-fail-maxsize": "Tidak dapat membuat berkas $1 karena ukurannya lebih besar dari {{PLURAL:$2||}}$2 bita.",
-       "backend-fail-readonly": "Backend penyimpanan \"$1\" ini saat ini hanya bisa dibaca. Alasan yang diberikan adalah: \"''$2''\"",
+       "backend-fail-readonly": "Penyimpanan latar belakang \"$1\" ini saat ini hanya dapat dibaca. Alasan yang diberikan adalah: <em>$2</em>",
        "backend-fail-synced": "Berkas \"$1\" dalam keadaan yang tidak konsisten dalam backends penyimpanan internal",
        "backend-fail-connect": "Tidak dapat menyambung ke penyimpanan backend \"$1\".",
        "backend-fail-internal": "Kesalahan yang tidak dikenal terjadi di backend penyimpanan \"$1\".",
        "apisandbox": "Bak pasir API",
        "apisandbox-jsonly": "JavaScript dibutuhkan untuk menggunakan kotak pasir API.",
        "apisandbox-api-disabled": "API dinonaktifkan pada situs ini.",
-       "apisandbox-intro": "Gunakan halaman ini untuk bereksperimen dengan '''API layanan web MediaWiki'''.\nLihat [//www.mediawiki.org/wiki/API:Main_page dokumentasi API] untuk perincian lanjut penggunaan API. Contoh: [//www.mediawiki.org/wiki/API#A_simple_example dapatkan konten Halaman Utama]. Pilih sebuah tindakan untuk melihat contoh lain.\n\nPerhatikan bahwa, meskipun ini adalah bak pasir, tindakan yang Anda lakukan pada halaman ini dapat mengubah wiki.",
+       "apisandbox-intro": "Gunakan halaman ini untuk bereksperimen dengan '''API layanan web MediaWiki'''.\nLihat [//www.mediawiki.org/wiki/API:Main_page dokumentasi API] untuk perincian lanjut penggunaan API. Contoh: [//www.mediawiki.org/wiki/API#A_simple_example dapatkan konten Halaman Utama]. Pilih sebuah tindakan untuk melihat contoh lain.\n\nPerhatikan bahwa, meskipun ini adalah bak pasir, tindakan yang Anda lakukan pada halaman ini mungkin dapat mengubah wiki.",
        "apisandbox-fullscreen": "Kembangkan panel",
        "apisandbox-fullscreen-tooltip": "Kembangkan panel kotak pasir untuk mengisi jendela peramban.",
        "apisandbox-unfullscreen": "Tampilkan halaman",
        "mywatchlist": "Daftar pantauan",
        "watchlistfor2": "Untuk $1 $2",
        "nowatchlist": "Daftar pantauan Anda kosong.",
-       "watchlistanontext": "Silahkan login untuk melihat atau mengedit item pada daftarjaga anda",
+       "watchlistanontext": "Silakan masuk log untuk melihat atau mengedit butir dalam daftar pantauan Anda",
        "watchnologin": "Belum masuk log",
        "addwatch": "Tambahkan ke daftar pantauan",
        "addedwatchtext": "\"[[:$1]]\" dan diskusinya telah ditambahkan ke [[Special:Watchlist|watchlist]] Anda.\nPerubahan-perubahan berikutnya pada halaman tersebut dan halaman pembicaraan terkaitnya akan tercantum di sini.",
        "delete-toobig": "Halaman ini memiliki sejarah penyuntingan yang panjang, melebihi {{PLURAL:$1|revisi|revisi}}.\nPenghapusan halaman dengan sejarah penyuntingan yang panjang tidak diperbolehkan untuk mencegah kerusakan di {{SITENAME}}.",
        "delete-warning-toobig": "Halaman ini memiliki sejarah penyuntingan yang panjang, melebihi {{PLURAL:$1|revisi|revisi}}.\nMenghapus halaman ini dapat menyebabkan masalah dalam operasional basis data {{SITENAME}}.",
        "deleteprotected": "Anda tidak dapat menghapus laman ini karena telah dilindungi.",
-       "deleting-backlinks-warning": "'''Peringatan:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Halaman lain]] mengarah atau memiliki transklusi ke halaman yang akan Anda hapus.",
+       "deleting-backlinks-warning": "<strong>Peringatan:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|Halaman lain]] mengarah atau memiliki transklusi ke halaman yang akan Anda hapus.",
        "rollback": "Kembalikan suntingan",
        "rollbacklink": "kembalikan",
        "rollbacklinkcount": "kembalikan $1 {{PLURAL:$1|suntingan}}",
        "rollbackfailed": "Pengembalian gagal dilakukan",
        "cantrollback": "Tidak dapat membatalkan suntingan;\nkontributor terakhir adalah satu-satunya penulis halaman ini.",
        "alreadyrolled": "Tidak dapat melakukan pengembalian ke revisi terakhir [[:$1]] oleh [[User:$2|$2]] ([[User talk:$2|bicara]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\npengguna lain telah menyunting atau melakukan pengembalian terhadap halaman ini.\n\nSuntingan terakhir dilakukan oleh [[User:$3|$3]] ([[User talk:$3|bicara]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Komentar penyuntingan adalah: \"''$1''\".",
+       "editcomment": "Komentar penyuntingan adalah: <em>$1</em>.",
        "revertpage": "←Suntingan [[Special:Contributions/$2|$2]] ([[User talk:$2|bicara]]) dibatalkan ke versi terakhir oleh [[User:$1|$1]]",
        "revertpage-nouser": "Mengembalikan suntingan oleh (nama pengguna dihapus) ke suntingan terakhir oleh [[User:$1|$1]]",
        "rollback-success": "Pembatalan suntingan oleh $1; dibatalkan ke versi terakhir oleh $2.",
        "api-error-badaccess-groups": "Anda tidak diizinkan mengunggah berkas ke wiki ini.",
        "api-error-badtoken": "Kesalahan internal: token buruk.",
        "api-error-copyuploaddisabled": "Mengunggah melalui URL dilarang pada peladen ini.",
-       "api-error-duplicate": "Sudah ada {{PLURAL:$1|berkas lain}} dengan konten yang sama di situs ini.",
-       "api-error-duplicate-archive": "Ada {{PLURAL:$1|berkas}} lain di situs dengan konten yang sama, namun {{PLURAL:$1|berkas|berkas-berkas}} itu telah dihapus.",
+       "api-error-duplicate": "Sudah ada {{PLURAL:$1|berkas lain|berkas lain}} dengan isi yang sama di situs ini.",
+       "api-error-duplicate-archive": "Ada {{PLURAL:$1|berkas lain|berkas lain}} di situs dengan konten yang sama, namun {{PLURAL:$1|berkas|berkas-berkas}} itu telah dihapus.",
        "api-error-empty-file": "Berkas yang Anda kirim kosong.",
        "api-error-emptypage": "Pembuatan halaman baru yang kosong tidak diizinkan.",
        "api-error-fetchfileerror": "Kesalahan internal: terjadi kesalahan saat memperoleh berkas ini.",
        "expand_templates_generate_xml": "Tampilkan pohon parser XML",
        "expand_templates_generate_rawhtml": "Tampilkan HTML mentah",
        "expand_templates_preview": "Pratayang",
-       "pagelanguage": "Pemilih bahasa halaman",
+       "pagelanguage": "Ubah bahasa halaman",
        "pagelang-name": "Halaman",
        "pagelang-language": "Bahasa",
        "pagelang-use-default": "Gunakan bahasa baku",
        "pagelang-select-lang": "Pilih bahasa",
        "right-pagelang": "Ubah bahasa halaman",
        "action-pagelang": "mengubah bahasa halaman",
-       "log-name-pagelang": "Ubah bahasa log",
+       "log-name-pagelang": "Log perubahan bahasa",
        "log-description-pagelang": "Ini adalah log perubahan dalam bahasa halaman.",
-       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|mengubah}} bahasa halaman $3 dari $4 menjadi $5.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|mengubah}} bahasa $3 dari $4 menjadi $5.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktif)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''nonaktif''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>nonaktif</strong>)",
        "mediastatistics": "Statistik media",
        "mediastatistics-summary": "Statistik mengenai jenis berkas yang diunggah. Hanya mencakup versi terbaru dari berkas. Berkas lama dan berkas yang sudah dihapus tidak termasuk.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 bita}} ($2; $3%)",
index 8c07242..db46511 100644 (file)
@@ -12,7 +12,8 @@
                        "Valodnieks",
                        "לערי ריינהארט",
                        "아라",
-                       "Srdjan m"
+                       "Srdjan m",
+                       "Macofe"
                ]
        },
        "tog-underline": "Ultracatenun:",
        "badtitletext": "Li titul de págine solicitat esset ínvalid, vacui, o íncorectmen ligat inter-lingue o un titul inter-wiki.\nIt posse contene un o plu carácteres quel ne posse esser usat in titules.",
        "viewsource": "Vider fonte",
        "viewsourcetext": "Vu posse vider e copiar li contenete de ti págine:",
-       "titleprotected": "Ti titul ha esset gardat de creation per [[User:$1|$1]]. \nLi motive dat es \"''$2''\".",
+       "titleprotected": "Ti titul ha esset gardat de creation per [[User:$1|$1]]. \nLi motive dat es <em>$2</em>.",
        "virus-badscanner": "Configuration maliciosi: virus desconosset examinat: ''$1''",
        "virus-scanfailed": "scandesion fallit (code $1)",
        "virus-unknownscanner": "antivírus desconosset:",
        "upload-description": "Descrition de file",
        "upload-options": "Optiones de cargament",
        "watchthisupload": "Vigilar ti file",
-       "upload-failure-subj": "Problema de cargament",
-       "upload-failure-msg": "Ta esset un problema che tui cargament:\n$1",
        "upload-proto-error": "Protocol incorect",
        "upload-proto-error-text": "Cargament distant exige comense che <code>http://</code> o <code>ftp://</code>.",
        "upload-file-error": "Errore intern",
        "blocklogpage": "Diarium de bloc",
        "blocklogentry": "\"[[$1]]\" hat blocat che un témpor de expiration de $2 $3",
        "block-log-flags-nocreate": "creation de conto debilisat",
-       "movearticle": "Mover págine:",
        "newtitle": "Por nov titul:",
        "move-watch": "Vigilar ti págine",
        "movepagebtn": "Mover págine",
        "version-hook-name": "Nómine de croc",
        "version-hook-subscribedby": "Subscrit per",
        "version-version": "($1)",
-       "version-svn-revision": "(r$2)",
        "version-license": "Licentie",
        "version-software": "Software installat",
        "version-software-product": "Producte",
index cdcd92d..3268437 100644 (file)
@@ -43,6 +43,7 @@
        "tog-watchlisthidebots": "Ilemmeng dagiti inurnos ti bot manipud iti listaan ti bambantayan",
        "tog-watchlisthideminor": "Ilemmeng dagiti bassit nga inurnos manipud iti listaan ti bambantayan",
        "tog-watchlisthideliu": "Ilemmeng dagiti inurnos babaen dagiti nakastrek nga agar-aramat manipud iti listaan ti bambantayan",
+       "tog-watchlistreloadautomatically": "Automatiko nga ikarga manen ti listaan ti bambantayan iti uray ania man a panagbaliw ti sagat (masapul ti JavaScript)",
        "tog-watchlisthideanons": "Ilemmeng dagiti inurnos babaen dagiti di ammo nga agar-aramat manipud iti listaan ti bambantayan",
        "tog-watchlisthidepatrolled": "Ilemmeng dagiti napatruliaan nga inurnos manipud iti listaan ti bambantayan",
        "tog-watchlisthidecategorization": "Ilemmeng ti pannakaikategoria dagiti panid",
        "october-date": "Oktubre $1",
        "november-date": "Nobiembre $1",
        "december-date": "Disiembre $1",
+       "period-am": "AM",
+       "period-pm": "PM",
        "pagecategories": "{{PLURAL:$1|Kategoria|Katkategoria}}",
        "category_header": "Pampanid iti kategoria \"$1\"",
        "subcategories": "Dagiti subkategoria",
        "myprivateinfoprotected": "Awan pammalubosmo nga agurnos iti pribado a pakaammom.",
        "mypreferencesprotected": "Awan pammalubosmo nga agurnos kadagiti kakaykayatam.",
        "ns-specialprotected": "Saan a mabalin nga urnosen dagiti espesial a panid.",
-       "titleprotected": "Daytoy a titulo ket nasalakniban manipud iti pannakapartuat babaen ni [[User:$1|$1]].\nTi naited a rason ket \"<em>$2</em>\".",
+       "titleprotected": "Daytoy a titulo ket nasalakniban manipud iti pannakapartuat babaen ni [[User:$1|$1]].\nTi naited a rason ket <em>$2</em>.",
        "filereadonlyerror": "Di nabaliwan ti papeles ti \"$1\" gapu ta ti repositorio ti papeles ti \"$2\" ket mabasa laeng a moda.\n\nTi administrador ti sistema a nangserra ket nangited iti daytoy a panagilawlawag: \"$3\".",
        "invalidtitle-knownnamespace": "Imbalido a titulo iti nagan ti espasio \"$2\" ken teksto \"$3\"",
        "invalidtitle-unknownnamespace": "Imbalido a titulo iti di ammo a nagan ti espasio a bilang $1 ken teksto \"$2\"",
        "virus-scanfailed": "napaay ti panagsukimat (kodigo $1)",
        "virus-unknownscanner": "di ammmo nga antibirus:",
        "logouttext": "<strong>Nakaruarkan.</strong>\n\nLaglagipen nga adda met dagiti panid nga agtultuloy a maiparang a kasla nakastrekka pay, aginggana no dalusam ti pannakaidulin ti pagbasabasam.",
+       "cannotlogoutnow-title": "Saan a mabalin itan iti rummuar",
+       "cannotlogoutnow-text": "Saan a mabalin ti rummuar no agus-usar iti $1.",
        "welcomeuser": "Naragsak nga isasangbay, $1!",
        "welcomecreation-msg": "Napartuaten ti pakabilangam.\nNo kayatmo mabaliwamon dagiti [[Special:Preferences|kakaykayatam]] ti {{SITENAME}}.",
        "yourname": "Nagan ti agar-aramat:",
        "remembermypassword": "Laglagipem ti iseserrekko iti daytoy a pagbasabasa (para iti kapaut iti $1 {{PLURAL:$1|nga aldaw|nga al-aldaw}})",
        "userlogin-remembermypassword": "Taginayonennak nga iserrek",
        "userlogin-signwithsecure": "Usaren ti natalged a koneksion",
+       "cannotloginnow-title": "Saan a mabalin itan iti sumrek",
+       "cannotloginnow-text": "Saan a mabalin ti sumrek no agus-usar iti $1.",
        "yourdomainname": "Ti bukodmo a dominio:",
        "password-change-forbidden": "Saanmo a mabaliwan dagiti kontrasenias iti daytoy a wiki.",
        "externaldberror": "Mabalin nga adda biddut iti pannakapasingked ti database wenno saanka a mapalubosan a mangpabaro ti akinruar a pakabilangam.",
        "nocookieslogin": "Ti {{SITENAME}} ket agus-usar kadagiti galietas tapno maiserrek dagiti agar-aramat.\nNabaldado dagiti galietam.\nPangngaasi a pakabaelam ida ken padasem manen ti sumrek.",
        "nocookiesfornew": "Ti pakabilangan ti agar-aramat ket saan a napartuat, saanmi a mapasingkedan ti taudanna.\nSiguraduem a napakabaelan dagita galietam, ikarga manen daytoy a panid ken padasen manen.",
        "noname": "Saanmo a nainaganan ti umisu a nagan ti agar-aramat.",
-       "loginsuccesstitle": "Balligi ti panagserrek",
+       "loginsuccesstitle": "Nakastrek",
        "loginsuccess": "<strong>Nakastrekkan iti {{SITENAME}} a kas ni \"$1\".</strong>",
        "nosuchuser": "Awan ti agar-aramat nga agnagan iti \"$1\". \n\nDagiti nagan ti agar-aramat ket sensitibo ti kadakkel ti letra.\n\nKitaem ti panangiletram, wenno [[Special:UserLogin/signup|agpartuat iti baro a pakabilangan]].",
        "nosuchusershort": "Awan ti agar-aramat nga agnagan iti \"$1\".\nKitaem ti panangiletram.",
        "wrongpasswordempty": "Blanko ti naikabil a kontrasenias. \nPangngaasi a padasen manen.",
        "passwordtooshort": "Dagiti kontrasenias ket nasken a saan a basbasit ngem {{PLURAL:$1|1 a karakter|$1 a karkarakter}}.",
        "passwordtoolong": "Dagiti kontrasenias ket nasken a saan nga at-atiddog ngem {{PLURAL:$1|1 a karakter|$1 a karkarakter}}.",
+       "passwordtoopopular": "Saan a mabalin a mausar dagiti kadawyan a mapilpili a kontrasenias. Pangngaasi nga agpili iti naisangsangayan a kontrasenias.",
        "password-name-match": "Nasken a ti kontrasenias ket maigiddiat manipud ti naganmo.",
        "password-login-forbidden": "Naipariten ti panagusar iti daytoy a nagan ti agar-aramat ken kontrasenias.",
        "mailmypassword": "Isaad manen ti kontrasenias",
        "newpassword": "Baro a kontrasenias:",
        "retypenew": "Imakinilya manen ti baro a kontrasenias:",
        "resetpass_submit": "Isaad ti kontrasenias ken sumrek",
-       "changepassword-success": "Balligi a nasukatan ti kontraseniasmo!",
+       "changepassword-success": "Nasukatanen ti kontraseniasmo!",
        "changepassword-throttled": "Nakaaramidka kadagiti adu unay a nabiit a panangipadas ti panagserrek.\nPangngaasi nga aguray iti $1 sakbay a padasen manen.",
+       "botpasswords": "Dagiti kontrasenias ti bot",
+       "botpasswords-summary": "<em>Dagiti kontrasenias ti bot</em> ket mangpalubos a maserrekan ti pakabilangan ti agar-aramat babaen ti API a saan nga agusar kadagiti nangruna a kredensial ti pakabilangan. Dagiti magun-od a karbengan ti agar-aramat no nakastrek iti kontrasenias ti bot ket mabalin a nagawidan.\n\nNo saanmo nga ammo no apay a kayatmo nga aramiden daytoy, mabalin a saanmo koma nga aramiden daytoy. Awan koma ti mangdamag kaniam iti agpataud iti maysa kadagitoy ken itedmo kaniada.",
+       "botpasswords-disabled": "Nabaldado dagiti kontrasenias ti bot.",
+       "botpasswords-no-central-id": "Ti agusar kadagiti kontrasenias ti bot, nasken a nakastrekka iti sentralisado a pakabilangan.",
+       "botpasswords-existing": "Dagiti adda a kontrasenias ti bot",
+       "botpasswords-createnew": "Agpartuat iti baro a kontrasenias ti bot",
+       "botpasswords-editexisting": "Urnosen ti maysa nga adda a kontrasenias ti bot",
+       "botpasswords-label-appid": "Nagan ti bot:",
+       "botpasswords-label-create": "Agpartuat",
+       "botpasswords-label-update": "Pabaruen",
+       "botpasswords-label-cancel": "Ukasen",
+       "botpasswords-label-delete": "Ikkaten",
+       "botpasswords-label-resetpassword": "Isaad manen ti kontrasenias",
+       "botpasswords-label-grants": "Dagiti sagut a maipakat:",
+       "botpasswords-help-grants": "Ti tunggal maysa a sagut ket mangited iti panagserrek kadagiti nailista a karbengan nga addan iti pakabilangan ti agar-aramat. Kitaen ti [[Special:ListGrants|tabla dagiti sagut]] para iti adu pay a pakaammo.",
+       "botpasswords-label-restrictions": "Dagiti panangigawid iti panagusar:",
+       "botpasswords-label-grants-column": "Naisaguten",
+       "botpasswords-bad-appid": "Saan nga umisu ti nagan ti bot iti \"$1\".",
+       "botpasswords-insert-failed": "Napaay iti pananginayon ti nagan ti bot iti \"$1\". Nainayon kadi idin?",
+       "botpasswords-update-failed": "Napaay iti panagpabaro ti nagan ti bot iti \"$1\". Naikkat kadi idin?",
+       "botpasswords-created-title": "Napartuat ti kontrasenias ti bot",
+       "botpasswords-created-body": "Napartuat ti kontrasenias ti bot para iti nagan ti bot iti \"$1\" ni agar-aramat \"$2\".",
+       "botpasswords-updated-title": "Napabaro ti kontrasenias ti bot",
+       "botpasswords-updated-body": "Napabaro ti kontrasenias ti bot para iti nagan ti bot iti \"$1\" ni agar-aramat \"$2\".",
+       "botpasswords-deleted-title": "Naikkat ti kontrasenias ti bot",
+       "botpasswords-deleted-body": "Naikkat ti kontrasenias ti bot para iti nagan ti bot iti \"$1\" ni agar-aramat \"$2\".",
+       "botpasswords-newpassword": "Ti baro a kontrasenias iti panagserrek iti <strong>$1</strong> ket <strong>$2</strong>. <em>Pangngaasi nga irekord daytoy para iti masakbayan a reperensia.</em>",
+       "botpasswords-no-provider": "Saan a magun-od ti BotPasswordsSessionProvider.",
+       "botpasswords-restriction-failed": "Ti panangigawid ti kontrasenias ti bot ket nangpawil iti daytoy a panagserrek.",
+       "botpasswords-invalid-name": "Ti naibaga a nagan ti agar-aramat ket saan nga aglaon iti panangisina ti kontrasenias ti bot (\"$1\").",
+       "botpasswords-not-exist": "Ti agar-aramat \"$1\" ket awanan iti kontrasenias ti bot nga agnagan iti \"$2\".",
        "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.\nMabalin a nagballigi ti panagsukatmo ti kontrasenias wenno nagkiddaw ti baro a temporario a kontrasenias.",
+       "resetpass-wrong-oldpass": "Imbalido ti temporario wenno agdama a kontrasenias.\nMabalin a nasukatamon ti kontrasenias wenno nagkiddaw ti baro a temporario a kontrasenias.",
        "resetpass-recycled": "Pangngaasi nga isaad manen ti kontrasenias iti sabali ngem ti agdama a kontraseniasmo.",
        "resetpass-temp-emailed": "Simrekka a nagusar ti temporario a naipatulod a kodigo.\nTapno malpas ti panagserrek, nasken a mangisaadka ti baro a kontrasenias ditoy:",
        "resetpass-temp-password": "Temporario a kontrasenias:",
        "passwordreset-emailtext-user": "Daytoy nga agar-aramat $1 iti {{SITENAME}} ket nagkiddaw ti maysa a panangisaad manen ti bukod a kontrasenias para iti {{SITENAME}}\n($4) . {{PLURAL:$3|Ti|Dagiti}} sumaganad a pakabilangan ti agar-aramat ket\nmainaig iti daytoy nga esurat a pagtaengan:\n\n$2\n\n{{PLURAL:$3|Daytoy temporario a kontrasenias|Dagitoy temporario a kontrasenias}} ket agpaso {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.\nSumrekka koman tapno agpilika ti baro a kontraseniasmo tattan. No adda met sabali a nagaramid daytoy a \npanagkiddaw, wenno malagipmo ti dati a kontraseniasmo, ken saanmo a kayaten a sukatan, saanmo nga ikaskaso daytoy a mensahe ken \nagtuloykan nga agusar ti daan a kontraseniasmo.",
        "passwordreset-emailelement": "Nagan ti agar-aramat: \n$1\n\nTemporario a kontrasenias: \n$2",
        "passwordreset-emailsentemail": "No daytoy nga adres ti esurat ket mainaig iti pakabilangam, maipatulodto ti maysa nga esurat iti panangisaad manen ti kontrasenias.",
+       "passwordreset-emailsentusername": "No adda adres ti esurat a mainaig iti daytoy a nagan ti agar-aramat, addanto maipatulod nga esurat iti panangisaad manen ti kontrasenia.",
        "passwordreset-emailsent-capture": "Ti maysa nga esurat ti panangisaad manen ti kontrasenias ket naipatuloden, a naipakita dita baba.",
        "passwordreset-emailerror-capture": "Naaramid ti maysa nga esurat a panangisaad manen ti kontrasenias, a napaikita dita baba, ngem ti panangitulod kenni {{GENDER:$2|agar-aramat}} ket napaay: $1",
        "changeemail": "Sukatan wenno ikkaten ti adres ti esurat",
        "newarticle": "(Baro)",
        "newarticletext": "Nasurotmo ti silpo ti awan pay a panid. \nTi mangpartuat ti panid, rugiamon ti agmakinilia iti kahon dita baba (kitaen ti [$1 panid ti tulong] para iti adu pay a pakaammo). \nNo addaka ditoy babaen ti biddut, pindutem ti buton ti <strong>back</strong> ti pagbasabasam.",
        "anontalkpagetext": "----\n<em>Daytoy ti pakitungtungan a panid para iti di ammo nga agar-aramat a saan pay a nakapartuat iti pakabilangan, wenno saanna nga us-usaren.</em>\nIsu nga agusarkami ti numero nga IP a pagtaengan tapno mailasin isuda a lalaki/babai.\nTi kastoy nga IP a pagtaengan ket us-usaren a bingayan babaen ti nadumaduma nga agar-aramat.\nNo sika ket maysa a di ammo nga agar-aramat ken dagiti awan ti pategna a komentario ket napaitudo kenka, pangngaasi nga [[Special:UserLogin/signup|agpartuatka iti pakabilangam]] wenno [[Special:UserLogin|sumrekka]] \ntapno maliklikan ti pannakaiyallilaw kadagiti sabali a di ammo nga agar-aramat.",
-       "noarticletext": "Awan ti agdama a teksto iti daytoy a panid.\nMabalinmo ti [[Special:Search/{{PAGENAME}}|agbiruk iti kastoy a titulo ti panid]] kadagiti sabali a panid,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbiruk kadagiti mainaig a listaan],\nwenno [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} urnosem daytoy a panid]</span>.",
+       "noarticletext": "Awan ti agdama a teksto iti daytoy a panid.\nMabalinmo ti [[Special:Search/{{PAGENAME}}|agbiruk iti kastoy a titulo ti panid]] kadagiti sabali a panid,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbiruk kadagiti mainaig a listaan],\nwenno [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} partuaten daytoy a panid]</span>.",
        "noarticletext-nopermission": "Awan ti agdama  a linaon daytoy a panid.\nMabalinmo ti [[Special:Search/{{PAGENAME}}|agbiruk para iti titulo ti daytoy a panid]] kadagiti sabali a panid, wenno <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbiruk kadagiti mainaig a listaan]</span>, ngem awan ti pammalubosmo a mangpartuat iti daytoy a panid.",
        "missing-revision": "Ti panagbalbaliw ti #$1 iti daytoy a panid a nanaganan ti \"{{FULLPAGENAME}}\" ket awan.\n\nDaytoy ket kadawyan a gapuanan babaen ti sumaganad a silpo ti baak a pakasaritaan iti maysa a naikkaten a panid.\nDagiti salaysay ket mabalin a mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].",
        "userpage-userdoesnotexist": "Ti pakabilangan ti agar-aramat ni \"$1\" ket saan a nakarehistro. \nPangngaasi a kitaem no kayatmo ti agpartuat/agurnos iti daytoy a panid.",
        "previewnote": "<strong>Laglagipem a daytoy ket panagipadas laeng.</strong>\nDagiti sinukatam ket saan pay a naidulin!",
        "continue-editing": "Mapan idiay pagurnosan a lugar",
        "previewconflict": "Daytoy a panagpadas ket mangipakita ti teksto iti lugar ti akinngato a pangurnosan ti teksto a kasla agparang no piliem nga idulin.",
-       "session_fail_preview": "<strong>Pasensia! Saanmi a maproseso ti panagurnosmo gapu ta naawanan ti sesion ti datos.</strong>\nPangngaasi a padasen manen.\nNo saan pay a mabalin, padasen ti [[Special:UserLogout|rummuar]] ken sumrek manen.",
-       "session_fail_preview_html": "<strong>Pasensia! Saanmi a maproseso ti panagurnosmo gapu ta naawanan ti sesion ti datos.</strong>'\n\n<em>Gapu ta ti {{SITENAME}} ket addaan iti naata a HTML a nakapabaelan, ti panagpadas ket nailemmeng a kas pagan-annadan kadagiti panagraut ti dakes a JavaScript.</em>\n\n<strong>No daytoy ket pudno a panagurnos, pangngaasi a padasem manen.</strong>\nNo saan pay a mabalin, padasen ti [[Special:UserLogout|rummuar]] ken sumrek manen.",
+       "session_fail_preview": "Pasensia! Saanmi a maproseso ti panagurnosmo gapu ta naawanan ti sesion ti datos.\n\nMabalin a nakaruarka. <strong>Pangngaasi a pasingkedan a nakastrekka pay laeng ken padasen manen</strong>.\n \t\nNo saan pay a mabalin, padasen ti [[Special:UserLogout|rummuar]] ken sumrek manen, ken kitaen no ti pagbasabasam ket mangpalubos kadagiti galieta manipud iti daytoy a sitio.",
+       "session_fail_preview_html": "Pasensia! Saanmi a maproseso ti panagurnosmo gapu ta naawanan ti sesion ti datos.\n\n<em>Gapu ta ti {{SITENAME}} ket addaan iti naata a HTML a nakapabaelan, ti panagpadas ket nailemmeng a kas pagan-annadan kadagiti panagraut iti dakes a JavaScript.</em>\n\n<strong>No daytoy ket pudno a panagurnos, pangngaasi a padasem manen.</strong>\nNo saan pay a mabalin, padasen ti [[Special:UserLogout|rummuar]] ken sumrek manen, ken kitaen no ti pagbasabasam ket mangpalubos kadagiti galieta manipud iti daytoy a sitio.",
        "token_suffix_mismatch": "<strong>Ti panagurnosmo ket saan a naawat ngamin ket ti klientem ket dinadaelna dagiti karakter ti tuldek iti tandaan ti panagurnos.</strong>\nTi panagurnos ket saan a naawat tapno mapawilan ti pannakadadael ti teksto ti panid.\nSagpaminsan a mapasamak daytoy no agus-usarka ti saan a nasayaat a naibatay ti web ti di ammo a pannakbagi a serbisio.",
        "edit_form_incomplete": "<strong>Adda dagiti paset ti pagurnosan a porma a saan a nakadanon dita server; mamindua a kitaen dagiti panagurnosmo ket sibubukel ken padasen manen.</strong>",
        "editing": "Ur-urnosen ti $1",
        "undo-summary-username-hidden": "Isubli ti $1 a binaliwan babaen ti nailemmeng nga agar-aramat",
        "cantcreateaccounttitle": "Saan a makapartuat iti pakabilangan",
        "cantcreateaccount-text": "Ti panagpartuat iti pakabilangan manipud ti daytoy nga IP a pagtaengan (<strong>$1</strong>) ket sinerraan babaen ni [[User:$3|$3]].\n\nTi inted a rason babaen ni $3 ket <em>$2</em>",
-       "cantcreateaccount-range-text": "Ti panagpartuat iti pakabilangan manipud kadagiti pagtaengan ti IP iti sakop ti '''$1''', a mairaman ti IP a pagtaengam ('''$4'''), ket sinerraan babaen ni [[User:$3|$3]].\n\nTi inted a rason babaen ni $3 ket ''$2''",
+       "cantcreateaccount-range-text": "Ti panagpartuat iti pakabilangan manipud kadagiti pagtaengan ti IP iti sakop ti <strong>$1</strong>, a mairaman ti IP a pagtaengam (<strong>$4</strong>), ket sinerraan babaen ni [[User:$3|$3]].\n\nTi inted a rason babaen ni $3 ket <em>$2</em>",
        "viewpagelogs": "Kitaen dagiti listaan para iti daytoy a panid",
        "nohistory": "Awan ti pakasaritaan ti panagurnos iti daytoy a panid.",
        "currentrev": "Kinaudi a rebision",
        "revdelete-unsuppress": "Ikkaten dagiti panangigawid kadagiti naipulang a rebision",
        "revdelete-log": "Rason:",
        "revdelete-submit": "Ipakat {{PLURAL:$1|ti napili a rebision|dagiti napili a rebision}}",
-       "revdelete-success": "Balligi ti panagpabaro ti panagkita ti rebision.",
+       "revdelete-success": "Napabaro ti panagkita ti rebision.",
        "revdelete-failure": "Saan a napabaro ti panagkita ti rebision.\n$1",
-       "logdelete-success": "Balligi ti pannakaisaad ti listaan ti panagkita.",
+       "logdelete-success": "Naisaad ti listaan ti panagkita.",
        "logdelete-failure": "Napaay ti pannakaisaad ti listaan ti panagkita:\n$1",
        "revdel-restore": "sukatan ti panagkita",
        "pagehist": "Pakasaritaan ti panid",
        "mergehistory-empty": "Awan dagiti rebision ti mabalin nga itipon.",
        "mergehistory-done": "$3 {{PLURAL:$3|a rebision|dagiti rebision}} iti $1 ket {{PLURAL:$3|naitipon|naitiponda}} iti [[:$2]].",
        "mergehistory-fail": "Saan a nakaaramid ti panagtipon ti pakasaritaan, pangngaasi a kitaen ti panid ken dagiti parametro ti oras.",
+       "mergehistory-fail-bad-timestamp": "Imbalido ti oras ken petsa.",
+       "mergehistory-fail-invalid-source": "Imbalido ti taudan apanid.",
+       "mergehistory-fail-invalid-dest": "Imbalido ti papanan a panid.",
+       "mergehistory-fail-no-change": "Ti panangitipon ti pakasaritaan ket saan a nangitipon kadagiti ania man a rebision. Pangngaasi a kitaen amnen ti panid ken dagiti parametro ti oras.",
+       "mergehistory-fail-permission": "Saan a makaanay dagiti pammalubos tapno makaitipon iti pakasaritaan.",
+       "mergehistory-fail-self-merge": "Agpada dagiti taudan ken papanan a panid.",
+       "mergehistory-fail-timestamps-overlap": "Adpapada ti taudan dagiti rebision wenno immay kalpasan dagiti rebision ti papanan.",
        "mergehistory-fail-toobig": "Di naaramid ti panagtipon ti pakasaritaan gapu ta ad-adu ti patingga ti $1 {{PLURAL:$1|a rebision|kadagiti rebision}} ti maiyalisto.",
        "mergehistory-no-source": "Awan ti taudan ti panid ti $1.",
        "mergehistory-no-destination": "Awan ti papanan ti panid ti $1.",
        "userrights": "Panagtaripato kadagiti karbengan ti agar-aramat",
        "userrights-lookup-user": "Agtaripato kadagiti grupo ti agar-aramat",
        "userrights-user-editname": "Mangiserrek iti nagan ti agar-aramat:",
-       "editusergroup": "Urnosen dagiti grupo ti agar-aramat",
+       "editusergroup": "Urnosen dagiti grupo ti {{GENDER:$1|agar-aramat}}",
        "editinguser": "Suksukatan ti karbengan ni {{GENDER:$1|agar-aramat}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Urnosen dagiti grupo ti agar-aramat",
-       "saveusergroups": "Idulin dagiti grupo ti agar-aramat",
+       "saveusergroups": "Idulin dagiti grupo ti {{GENDER:$1|agar-aramat}}",
        "userrights-groupsmember": "Kameng ti:",
        "userrights-groupsmember-auto": "Napudno a kameng ti:",
        "userrights-groups-help": "Mabaliwam dagiti ayan a grupo ti agar-aramat:\n* Ti nakur-it a kahon ket kayatna a sawen nga adda ti agar-aramat dita a grupo.\n* Ti saan a nakur-it a kahon ket kayatna a sawen nga awan ti agar-aramat dita a grupo.\n* A * mangipakita a saanmo a maikkat ti grupo no nainayonmon, wenno pagbalittaden.",
        "userrights-changeable-col": "Dagiti grupo a mabalinmo a baliwan",
        "userrights-unchangeable-col": "Dagiti grupo a dimo mabalin a baliwan",
        "userrights-conflict": "Suppiat dagiti panagbaliw kadagiti karbengan ti agar-aramat! Pangngaasi nga irepasom ken pasingkedam dagiti sinuksukatam.",
-       "userrights-removed-self": "Nagballigika a nagikkat kadagiti bukodmo a karbengan. Iti kastoyen, saankan a mabalin a mangserrek iti daytoy a panid.",
+       "userrights-removed-self": "Inikkatmo kadagiti bukodmo a karbengan. Iti kastoyen, saankan a mabalin a mangserrek iti daytoy a panid.",
        "group": "Grupo:",
        "group-user": "Dagiti agar-aramat",
        "group-autoconfirmed": "Dagiti automatiko a napasingkedan nga agar-aramat",
        "right-createpage": "Agpartuat kadagiti panid (saan a pagtutungtongan a pampanid)",
        "right-createtalk": "Agpartuat iti pagtungtungan a pampanid",
        "right-createaccount": "Agpartuat kadagiti baro a pakabilangan ti agar-aramat",
+       "right-autocreateaccount": "Automatiko a sumrek nga agraman iti maysa nga akinruar a pakabilangan ti agar-aramat",
        "right-minoredit": "Markaan dagiti inurnos a kas bassit",
        "right-move": "Agiyalis kadagiti panid",
        "right-move-subpages": "Agiyalis kadagiti panid a kakuyog dagiti subpanidda",
        "right-managechangetags": "Agpartuat ken agikkat kadagiti [[Special:Tags|etiketa]] manipud iti database",
        "right-applychangetags": "Ipakat dagiti [[Special:Tags|etiketa]] a mairaman dagiti nabaliwan",
        "right-changetags": "Agnayon ken agikkat kadagiti arbitario nga [[Special:Tags|etiketa]] kadagiti agmaymaysa a rebision ken dagiti naikabkabil iti listaan",
+       "grant-generic": "Raay ti karbengan ti \"$1\"",
+       "grant-group-page-interaction": "Makitignay kadagiti panid",
+       "grant-group-file-interaction": "Makitignay iti midia",
+       "grant-group-watchlist-interaction": "Makitignay iti bukodmo a listaan ti bambantayan",
+       "grant-group-email": "Ipatulod ti esurat",
+       "grant-group-high-volume": "Agaramid iti adu iti tomo nga aktibidad",
+       "grant-group-customization": "Kustomisasion ken dagiti kakaykayatan",
+       "grant-group-administration": "Agaramid kadagiti administratibo nga aksion",
+       "grant-group-other": "Nadumaduma nga aktibidad",
+       "grant-blockusers": "Serraan ken ikkaten ti serra dagiti agar-aramat",
+       "grant-createaccount": "Agpartuat kadagiti pakabilangan",
+       "grant-createeditmovepage": "Agpartuat, agurnos, ken agiyalis kadagiti panid",
+       "grant-delete": "Agikkat kadagiti panid, dagit irebision, ken dagiti naikabil iti listaan",
+       "grant-editinterface": "Urnosen ti nagan ti espasio ti MediaWiki ken ti CSS/JavaScript ti agar-aramat",
+       "grant-editmycssjs": "Urnosen ti bukodmo a CSS/JavaScript ti agar-aramat",
+       "grant-editmyoptions": "Urnosem ti bukodmo a kakaykayatan ti agar-aramat",
+       "grant-editmywatchlist": "Urnosen ti bukodmo listaan ti bambantayan",
+       "grant-editpage": "Agurnos kadagiti adda a panid",
+       "grant-editprotected": "Agurnos kadagiti nasalakniban a panid",
+       "grant-highvolume": "Adu a tomo a panagurnos",
+       "grant-oversight": "Ilemmeng dagiti agar-aramat ken lappedan dagiti rebision",
+       "grant-patrol": "Patruliaan dagiti panagbaliw kadagiti panid",
+       "grant-protect": "Salakniban ken ikkaten ti salaknib dagiti panid",
+       "grant-rollback": "Isubli dagiti panagbaliw kadagiti panid",
+       "grant-sendemail": "Agipatulod iti esurat kadagiti sabali nga agar-aramat",
+       "grant-uploadeditmovefile": "Agikarga, sukatan, ken agiyalis kadagiti papeles",
+       "grant-uploadfile": "Agikarga kadagiti baro a papeles",
+       "grant-basic": "Batayan a karkarbengan",
+       "grant-viewdeleted": "Kitaen dagiti naikkat a papeles ken pampanid",
+       "grant-viewmywatchlist": "Kitaem ti listaan ti banbantayam",
        "newuserlogpage": "Listaan ti panagpartuat ti agar-aramat",
        "newuserlogpagetext": "Daytoy ket listaan dagiti pannakapartuat iti agar-aramat.",
        "rightslog": "Listaan dagiti karbengan ti agar-aramat",
        "action-createpage": "agpartuat kadagiti panid",
        "action-createtalk": "agpartuat kadagiti pagtungtungan a panid",
        "action-createaccount": "agpartuat iti pakabilangan daytoy nga agar-aramat",
+       "action-autocreateaccount": "automatiko a partuaten daytoy nga akinruar a pakabilangan ti agar-aramat",
        "action-history": "agkita iti pakasaritaan iti daytoy a panid",
        "action-minoredit": "agmarka iti daytoy nga inurnos a kas bassit",
        "action-move": "agiyalis iti daytoy a panid",
        "recentchanges-label-bot": "Daytoy a panagurnos ket inaramid babaen ti bot",
        "recentchanges-label-unpatrolled": "Daytoy a panagurnos 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-heading": "<strong>Leyenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (kitaen pay ti [[Special:NewPages|listaan ti baro a pampanid]])",
        "recentchanges-submit": "Ipakita",
        "rcnotefrom": "Dita baba ket {{PLURAL:$5|ti sinukatan|dagiti sinukatan}} manipud idi <strong>$3, $4</strong> (aginggana iti <strong>$1</strong> a naipakita).",
        "rcshowhidemine": "$1 dagiti inurnosko",
        "rcshowhidemine-show": "Ipakita",
        "rcshowhidemine-hide": "Ilemmeng",
-       "rcshowhidecategorization": "$1 a pannakaikategoria ti panid",
+       "rcshowhidecategorization": "$1 ti pannakaikategoria ti panid",
        "rcshowhidecategorization-show": "Ipakita",
        "rcshowhidecategorization-hide": "Ilemmeng",
        "rclinks": "Ipakita dagiti naudi a $1 a sinukatan iti kallabes a $2 nga al-aldaw<br />$3",
        "uploaded-script-svg": "Nakabiruk ti maieskritu nga elemento ti \"$1\" iti naikarga a papeles ti SVG.",
        "uploaded-hostile-svg": "Nakabiruk ti saan a natalged a CSS iti elemento ti estilo ti naikarga a papeles ti SVG.",
        "uploaded-event-handler-on-svg": "Ti panangisaad kadagiti gupit ti panagtengngel ti pasamak ti <code>$1=\"$2\"</code> ket saan a maipalubos kadagiti papeles ti SVG.$1",
-       "uploaded-href-unsafe-target-svg": "Nakabiruk ti href iti saan a natalged a puntaan ti <code>&lt;$1 $2=\"$3\"&gt;</code> iti naikarga a papeles ti SVG.",
+       "uploaded-href-attribute-svg": "Dagiti gupit ti href kadagiti papeles ti SVG ket mapalubosan laeng a maisilpo iti  http:// wenno dagiti puntaan ti https://, nabirukan ti <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-unsafe-target-svg": "Nakabiruk ti href iti saan a natalged a datos: ti puntaan ti URI iti <code>&lt;$1 $2=\"$3\"&gt;</code> iti naikarga a papeles ti SVG.",
        "uploaded-animate-svg": "Nakabiruk ti etiketa ti \"animado\" a mabalin a mangbalbaliw iti href, nga agus-usar iti gupit ti \"manipud\" ti <code>&lt;$1 $2=\"$3\"&gt;</code> iti naikarga a papeles ti SVG.",
        "uploaded-setting-event-handler-svg": "Naserraan ti panangisaad ti kadagiti gupit ti panagtengngel ti pasamak, nakabiruk iti <code>&lt;$1 $2=\"$3\"&gt;</code> iti naikarga a papeles ti SVG.",
+       "uploaded-setting-href-svg": "Ti panagusar ti etiketa ti \"set\" tapno mainayon ti gupit ti \"href\" iti elemento ti nagannak ket naserraan.",
+       "uploaded-wrong-setting-svg": "Ti panagusar ti etiketa ti \"set\" tapno mainayon ti puntaan nga remote/data/script iti ania man a gupit ket naserraan. Nabirukan ti <code>&lt;set to=\"$1\"&gt;</code> iti naikarga a papeles ti SVG.",
        "uploaded-image-filter-svg": "Nakabiruk ti sagat ti ladawan nga addaan iti URL: <code>&lt;$1 $2=\"$3\"&gt;</code> iti naikarga a papeles ti SVG.",
        "uploadscriptednamespace": "Daytoy a papeles ti SVG ket aglaon iti maysa a saan a mabalin a nagan ti espasio ti \"$1\".",
        "uploadinvalidxml": "Ti XML iti naikarga a papeles ket saan a maiwaswas.",
        "foreign-structured-upload-form-label-own-work": "Daytoy ket bukodko nga obra",
        "foreign-structured-upload-form-label-infoform-categories": "Katkategoria",
        "foreign-structured-upload-form-label-infoform-date": "Petsa",
+       "foreign-structured-upload-form-label-not-own-work-local-local": "Mabalinmo pay a padasen [[Special:Upload|ti kasisigud a pagikargaan a panid]].",
        "backend-fail-stream": "Saan a maipan ti papeles $1.",
        "backend-fail-backup": "Saan a makaidulin ti kapada ti papeles ti $1.",
        "backend-fail-notexists": "Awan ti papeles ti $1.",
        "backend-fail-read": "Saan a mabasa ti papeles ti \"$1\".",
        "backend-fail-create": "Saan a masuratan ti papeles ti \"$1\".",
        "backend-fail-maxsize": "Saan a masuratan ti papeles ti \"$1\" gapu ta daytoy ket dakdakkel ngem {{PLURAL:$2|maysa a byte|dagiti $2 a byte}}.",
-       "backend-fail-readonly": "Ti pagidulinan a kalikudan ti \"$1\" ket agdama a mabasa laeng. Ti rason a naited idi ket: \"<em>$2</em>\"",
+       "backend-fail-readonly": "Ti pagidulinan a kalikudan ti \"$1\" ket agdama a mabasa laeng. Ti rason a naited idi ket: <em>$2</em>",
        "backend-fail-synced": "Ti papeles ti \"$1\" ket bangking ti kasasaadna iti kaunegan a pagidulinan dagiti kalikudan",
        "backend-fail-connect": "Saan a makaikapet idiay pagidulinan a kalikudan ti \"$1\".",
        "backend-fail-internal": "Adda napasamak a di ammo a biddut idiay pagidulinan a kalikudan ti \"$1\".",
        "uploadstash-summary": "Daytoy a panid ket mangited ti panagserrek kadagiti papeles a naikarga wenno mangrugrugi iti proseso a maikarga, ngem saan pay a naipablaak iti wiki. Dagitoy a papeles ket saan a makita ti sinoman ngem ti laeng agar-aramat a nagikarga kaniada.",
        "uploadstash-clear": "Dalusan dagiti na-stash a papeles",
        "uploadstash-nofiles": "Awan ti na-stash a papelesmo.",
-       "uploadstash-badtoken": "Ti panag-tungpal dayta nga aramid ket napaay, ngamin ta dagiti talekmo ti panagurnos ket nagpason. Padasen manen.",
-       "uploadstash-errclear": "Ti panagdalus kadagiti papeles ket napaay.",
+       "uploadstash-badtoken": "Napaay ti panagtungpal dayta nga aramid. Mabalin a ti talekmo nga agurnos ket nagpason. Pangngaasi a padasen manen.",
+       "uploadstash-errclear": "Napaay ti panagdalus kadagiti papeles.",
        "uploadstash-refresh": "Pasadiwaen dagiti listaan ti papeles",
        "invalid-chunk-offset": "Imbalido a pirgis ti timbengan",
        "img-auth-accessdenied": "Nalibak ti iseserrek",
        "apihelp": "Tulong ti API",
        "apihelp-no-such-module": "Saan a nabirukan ti modulo ti \"$1\".",
        "apisandbox": "Pagsubokan ti API",
+       "apisandbox-jsonly": "Nasken ti JavaScript tapno mausar ti pagipadasan ti API.",
        "apisandbox-api-disabled": "Ti API ket nabaldado iti daytoy a sitio.",
-       "apisandbox-intro": "Usaren daytoy a panid iti panagsubok ti '''MediaWiki a serbisio ti web ti API'''.\nKitaen ti [//www.mediawiki.org/wiki/API:Main_page the API dokumentasion] para iti ad-adu pay a salaysay ti panagusar ti API. Kas pagarigan: [//www.mediawiki.org/wiki/API#A_simple_example alaen ti linaon ti Umuna a Panid].  Agpili ti maaramid tapno makakita ti adu pay a kas pagarigan.\n\nLaglagipen nga uray daytoy ket pagipadasan, dagiti tignay nga aramidem iti daytoy a panid ket mabalin a mangbaliw iti wiki.",
+       "apisandbox-intro": "Usaren daytoy a panid iti panagsubok ti <strong>MediaWiki a serbisio ti web ti API</strong>.\nKitaen [[mw:API:Main page|ti dokuemntasion ti API]] para iti ad-adu pay a salaysay ti panagusar ti API. Kas pagarigan: [//www.mediawiki.org/wiki/API#A_simple_example alaen ti linaon ti Umuna a Panid].  Agpili ti maaramid tapno makakita dagiti adu pay a pagarigan.\n\nLaglagipen nga uray daytoy ket pagipadasan, dagiti tignay nga aramidem iti daytoy a panid ket mabalin a mangbaliw iti wiki.",
+       "apisandbox-fullscreen": "Padakkelen ti entrapanio",
+       "apisandbox-fullscreen-tooltip": "Padakkelen ti entrapanio ti pagipadasan tapno mapunnuan ti tawa ti pagbasabasa.",
+       "apisandbox-unfullscreen": "Ipakita ti panid",
+       "apisandbox-unfullscreen-tooltip": "Pabassiten ti entrapanio ti pagipadasan, tapno magun-od dagiti silpo ti nabigasion ti MediaWiki.",
        "apisandbox-submit": "Agaramid ti kiddaw",
        "apisandbox-reset": "Dalusan",
-       "apisandbox-examples": "Kas pagarigan",
-       "apisandbox-results": "Nagbanagan",
+       "apisandbox-retry": "Padasen manen",
+       "apisandbox-loading": "Agikarkarga iti pakaammo para iti modulo ti API ti \"$1\"...",
+       "apisandbox-load-error": "Napasamak ti maysa a biddut bayat nga agikarkarga iti pakaammo para iti modulo ti  API ti \"$1\": $2",
+       "apisandbox-no-parameters": "Awan dagiti parametro daytoy a modulo ti API.",
+       "apisandbox-helpurls": "Silsilpo ti tulong",
+       "apisandbox-examples": "Dagiti pagarigan",
+       "apisandbox-dynamic-parameters": "Dagiti maipatinayon a parametro",
+       "apisandbox-dynamic-parameters-add-label": "Agnayon iti parametro:",
+       "apisandbox-dynamic-parameters-add-placeholder": "Nagan ti parametro",
+       "apisandbox-dynamic-error-exists": "Addan iti parametro nga agnagan iti \"$1\".",
+       "apisandbox-deprecated-parameters": "Dagiti nasukatanen a parametro",
+       "apisandbox-fetch-token": "Automatiko a punnuen ti tangdan",
+       "apisandbox-submit-invalid-fields-title": "Adda dagiti imbalido a pagikabilan",
+       "apisandbox-submit-invalid-fields-message": "Pangngaasi a simpaen dagiti namarkaan a pagikabilan ken padasen manen.",
+       "apisandbox-results": "Dagiti resulta",
+       "apisandbox-sending-request": "Agipatpatulod iti kiddaw ti API...",
+       "apisandbox-loading-results": "Agaw-awat kadagiti resulta ti API...",
+       "apisandbox-results-error": "Adda maysa a napasamak a biddut bayat nga agikarkarga iti sungbat ti usisa ti API: $1.",
        "apisandbox-request-url-label": "Agkiddaw ti URL:",
-       "apisandbox-request-time": "Oras ti kiddaw: $1",
+       "apisandbox-request-time": "Oras ti kiddaw: {{PLURAL:$1|$1 ms}}",
+       "apisandbox-results-fixtoken": "Simpaen ti tangdan ken ited manen",
+       "apisandbox-results-fixtoken-fail": "Napaay ti panagala iti tangdan ti \"$1\".",
+       "apisandbox-alert-page": "Saan nga umiso dagiti pagikabilan iti daytoy a panid.",
+       "apisandbox-alert-field": "Saan nga umiso ti pateg iti daytoy a pagikabilan.",
        "booksources": "Dagiti taudan ti libro",
        "booksources-search-legend": "Agbiruk para kadagiti taudan ti libro",
        "booksources-search": "Biruken",
        "log-title-wildcard": "Agbiruk kadagiti titulo a mangrugi iti daytoy a testo",
        "showhideselectedlogentries": "Baliwan ti panagkita kadagiti napili a naikabil iti listaan",
        "log-edit-tags": "Urnosen dagiti etiketa iti napili a listaan ti naikabkabil",
+       "checkbox-select": "Agpili: $1",
+       "checkbox-all": "Amin",
+       "checkbox-none": "Awan",
+       "checkbox-invert": "Baliktaden",
        "allpages": "Amin a pampanid",
        "nextpage": "sumaruno a panid ($1)",
        "prevpage": "Napalabas a panid ($1)",
        "listgrouprights-namespaceprotection-header": "Dagiti panangigawid ti nagan ti espasio",
        "listgrouprights-namespaceprotection-namespace": "Nagan ti espasio",
        "listgrouprights-namespaceprotection-restrictedto": "Karbengan wenno karkarbengan a mangpalubos nga agurnos ti agar-aramat",
+       "listgrants": "Dagiti sagut",
+       "listgrants-grant": "Sagut",
+       "listgrants-rights": "Dagiti karbengan",
        "trackingcategories": "Pagsurotan a katkategoria",
        "trackingcategories-summary": "Daytoy a panid ket ilistana ti pagsurotan a katkategoria nga automatiko a nayonan babaen ti sopwer ti MediaWiki. Ti nagnaganda ket mabalin a mabaliwan babaen ti panagbaliw kadagiti maitutop a mensahe ti sistema iti nagan ti espasio ti {{ns:8}}.",
        "trackingcategories-msg": "Pagsurotan a kategoria",
        "delete-toobig": "Daytoy a panid ket dakkel ti pakasaritaanna, sumurok a  $1 {{PLURAL:a panagbaliwan|dagiti panagbaliwan}}.\nTi panagikkat ti kastoy a pammpanid ket naparitan tapno mapawilan ti saan nga inkarkaro a pannakadadael ti {{SITENAME}}.",
        "delete-warning-toobig": "Daytoy a panid ket adda ti dakkel unay a pakasaritaan ti panagurnos, ti kaadu nga $1 {{PLURAL:$1|panagbaliw|dagiti panagbaliw}}.\nTi panagikkat ket madisturbo ti panagpataray ti database ti {{SITNAME}};\nagal-aluadka a mangrugi.",
        "deleteprotected": "Saanmo a maikkat daytoy a panid gapu ta nasalaknibanen.",
-       "deleting-backlinks-warning": "'''Ballaag:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Dagiti dadduma a panid]] ket naisilpo wenno nailak-am manipud ti panid a gangani nga ikkatem.",
+       "deleting-backlinks-warning": "<strong>Ballaag:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|Dagiti dadduma a panid]] ket naisilpo wenno nailak-am manipud iti panid a gangani nga ikkatem.",
        "rollback": "Isubli dagiti panagurnos",
        "rollbacklink": "isubli",
        "rollbacklinkcount": "agisubli ti $1 {{PLURAL:$1|nga inurnos|nga inur-urnos}}",
        "rollbackfailed": "Napaay ti panangisubli",
        "cantrollback": "Saan a maisubli ti panagurnos;\nti naudi a nakaaramid ket iti laeng nagsurat iti daytoy a panid.",
        "alreadyrolled": "Saan a maipasubli ti kinaudi a panagurnos iti [[:$1]] babaen ni [[User:$2|$2]] ([[User talk:$2|tungtungan]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nadda sabali a naurnos wenno nagipasubli ti panid.\n\nTi kinaudi a panagurnos ti daytoy a panid ket babaen ni [[User:$3|$3]] ([[User talk:$3|tungtungan]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Ti pakabuklan ti panagurnos idi ket: \"''$1''\".",
+       "editcomment": "Ti pakabuklan idi ti panagurnos ket: <em>$1</em>.",
        "revertpage": "Insubli ti panagurnos babaen ni [[Special:Contributions/$2|$2]] ([[User talk:$2|tungtungan]]), naisubli ti kinaudi a rebision babaen ni [[User:$1|$1]]",
        "revertpage-nouser": "Naisubli dagiti inurnos babaen ti nailemmeng nga agar-aramat iti kinaudi a rebision babaen ni {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Naibabawi dagiti panagurnos babaen ni $1;\nnaisubli manen ti naudi a rebision babaen ni $2.",
        "changecontentmodel-title-label": "Titulo ti panid",
        "changecontentmodel-model-label": "Baro a modelo ti linaon",
        "changecontentmodel-reason-label": "Rason:",
+       "changecontentmodel-submit": "Baliwan",
        "changecontentmodel-success-title": "Nabaliwan ti modelo ti linaon",
        "changecontentmodel-success-text": "Nabaliwanen ti kita ti linaon ti [[:$1]].",
        "changecontentmodel-cannot-convert": "Ti linaon iti [[:$1]] ket saan a mabaliwan iti kita ti $2.",
        "block-log-flags-hiddenname": "nailemmeng ti nagan ti agar-aramat",
        "range_block_disabled": "Ti abilidad ti administrador nga agpartuat ti nasakupan a serra ket nabaldado.",
        "ipb_expiry_invalid": "Imbalido ti oras a panagpaso.",
+       "ipb_expiry_old": "Napalabasen ti oras ti panagpaso.",
        "ipb_expiry_temp": "Ti serra ti nagan ti agar-aramat ket masapul a permanente.",
        "ipb_hide_invalid": "Saan a mapasardeng daytoy a pakabilangan; daytoy ket addaan iti ad-adu ngem {{PLURAL:$1|maysa nga inurnos|dagiti $1 nga inurnos}}.",
        "ipb_already_blocked": "Ni \"$1\" ket naserraanen.",
        "movenosubpage": "Daytoy a panid ket awan ti subpanidna.",
        "movereason": "Rason:",
        "revertmove": "isubli",
-       "delete_and_move_text": "== Masapul nga ikkaten ==\nTi pangipanan ti panid ket \"[[:$1]]\" addan.\nKayatmo nga ikkaten tapno makaiyaliska?",
+       "delete_and_move_text": "Addan ti pangipanan a panid ti \"[[:$1]]\".\nKayatmo nga ikkaten daytoy tapno makaiyaliska?",
        "delete_and_move_confirm": "Wen, ikkaten ti panid",
        "delete_and_move_reason": "Naikkat tapno mawayaan ti pannaka-iyalis manipud ti \"[[$1]]\"",
        "selfmove": "Ti titulo ti taudan ken ti pangipanan ket agpadpada;\nsaanmo a maiyalis ti panid ti isu met laeng a panid.",
        "move-leave-redirect": "Mangibati ti baw-ing",
        "protectedpagemovewarning": "<strong>Balaag:</strong> Daytoy a panid ket nasalakniban tapno dagiti laeng agar-aramat nga addaan ti gundaway nga administrador ti makaiyalis.\nTi naudi a naikabil iti listaan ket naited dita baba para iti reperensia:",
        "semiprotectedpagemovewarning": "<strong>Nota:</strong> Nasalakniban daytoy a panid tapno dagiti laeng nakarehistro nga agar-aramat ti makaiyalis daytoy.\nTi naudi a naikabil iti listaan ket naited dita baba para iti reperensia:",
-       "move-over-sharedrepo": "== Addaan ti papeles ==\nTi [[:$1]] addaan iti pagbingayan a repositorio. Ti panagiyalis ti papeles iti daytoy a titulo ket tuonenna ti pagbingayan a papeles.",
+       "move-over-sharedrepo": "Addan ti [[:$1]] iti pagbingayan a repositorio. Ti panagiyalis ti papeles iti daytoy a titulo ket tuonenna ti pagbingayan a papeles.",
        "file-exists-sharedrepo": "Ti napilim a nagan ti papeles ket naususaren iti pagbingayan a repositorio.\nPangngaasi nga agpilika ti sabali a nagan.",
        "export": "Agipan kadagiti panid",
        "exporttext": "Maipanmo ti testo ken pakasaritaan ti inurnos iti maysa a panid wenno pampanid a nabalkut ti XML.\nDaytoy ket mabalin a maikabil iti sabali a wiki nga agususar ti MediaWiki nga usaren ti [[Special:Import|pinagala ti panid]].\n\nTi pinagipan ti panid, ikabil ti titulo dita kahon ti testo dita baba, maysa a titulo iti maysa a linia, ken agpili ka no ti kayatmo ket ti agdama a pinagbaliw ken amin nga daan a panagbalbaliw, nga addaan ti linia ti pakasaritaan ti pampanid, wenno ti agdama a panagbaliw nga addaan ti pakaammo a maipapan ti kinaudi a panagurnos.\n\nNo iti kinaudi a kaso mabalinmo nga usaren ti silpo, a kas pagarigan [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] para iti panid \"[[{{MediaWiki:Mainpage}}]]\".",
        "tooltip-feed-rss": "RSS a pakan para iti daytoy a panid",
        "tooltip-feed-atom": "Atom a pakan para iti daytoy a panid",
        "tooltip-t-contributions": "Ti listaan dagiti kontribusion babaen {{GENDER:$1|daytoy nga agar-aramat}}",
-       "tooltip-t-emailuser": "Patulodan ti esurat daytoy nga agar-aramat",
+       "tooltip-t-emailuser": "Patulodan ti esurat {{GENDER:$1|daytoy nga agar-aramat}}",
        "tooltip-t-info": "Adu pay a pakaammo a maipanggep iti daytoy a panid",
        "tooltip-t-upload": "Agikarga kadagiti papeles",
        "tooltip-t-specialpages": "Listaan ti amin nga espesial a pampanid",
        "lastmodifiedatby": "Daytoy a panid ket naudi a nabaliwan idi $2, $1 babaen ni $3.",
        "othercontribs": "Naibasar iti obra ni $1.",
        "others": "dadduma pay",
-       "siteusers": "{{SITENAME}}  {{PLURAL:$2|agar-aramat|dagiti agar-aramat}}  $1",
+       "siteusers": "{{PLURAL:$2|{{GENDER:$1|ni agar-aramat}}|da agar-aramat}} $1 ti {{SITENAME}}",
        "anonusers": "{{SITENAME}} di ammo {{PLURAL:$2|nga agar-aramat|a digiti agar-aramat}} $1",
        "creditspage": "Dagiti pammadayaw ti panid",
        "nocredits": "Awan dagiti pakaammo ti pammadayaw a magun-od para iti daytoy a panid.",
        "pageinfo-category-files": "Bilang dagiti papeles",
        "markaspatrolleddiff": "Markaan a kas napatruliaan",
        "markaspatrolledtext": "Markaan daytoy a panid a kas napatruliaan",
+       "markaspatrolledtext-file": "Markaan daytoy a bersion ti papeles a kas napatruliaan",
        "markedaspatrolled": "Markaan a kas napatruliaan",
        "markedaspatrolledtext": "Ti napili a rebision iti [[:$1]] ket namarkaan a kas napatrulian.",
        "rcpatroldisabled": "Nabaldado ti panagpatrulia iti kaudian balbaliw",
        "scarytranscludefailed-httpstatus": "[Napaay ti panagala ti plantilia para iti $1: HTTP $2]",
        "scarytranscludetoolong": "[Atiddog unay ti URL]",
        "deletedwhileediting": "<strong>Ballaag:</strong> Naikkaten daytoy a panid kalpasan idi rinugiam ti agurnos!",
-       "confirmrecreate": "Ti ([[User talk:$1|patungtungan]]) ti agar-aramat [[User:$1|$1]] ket inikkatna daytoy a panid kalpasan ti panagrugim nga agurnos nga adda rason:\n: ''$2''\nPangngaasi a pasingkedam nga agpayso a kayatmo a partuten manen daytoy a panid.",
-       "confirmrecreate-noreason": "Ti ([[User talk:$1|patungtungan]]) ti agar-aramat [[User:$1|$1]] ket inikkat na daytoy a panid idi kalkalpas mo a magirugi ti agurnos. Pangngaasi ta pasingkedam a kayatmo nga aramiden manen daytoy a panid.",
+       "confirmrecreate": "{{GENDER:$1|Inikkat}} ni agar-aramat [[User:$1|$1]] ([[User talk:$1|tungtungan]])  daytoy a panid kalpasan idi nangrugika nga agurnos iti rason a:\n: <em>$2</em>\nPangngaasi a pasingkedan no agpayso a kayatmo a partuaten manen daytoy a panid",
+       "confirmrecreate-noreason": "{{GENDER:$1|Inikkat}} ni agar-aramat [[User:$1|$1]] ([[User talk:$1|tungtungan]]) daytoy a panid kalpasan idi nangrugika nga agurnos. Pangngaasi a pasingkedan no agpayso a kayatmo a partuaten manen daytoy a panid.",
        "recreate": "Partuaten manen",
        "confirm_purge_button": "Sige",
        "confirm-purge-top": "Dalusan ti cache daytoy a panid?",
        "watchlisttools-edit": "Kitaen ken urnosen ti listaan ti bambantayan",
        "watchlisttools-raw": "Urnosen ti naata a listaan ti bambantayan",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|tungtungan]])",
+       "timezone-local": "Lokal",
        "duplicate-defaultsort": "<strong>Ballag:</strong> Kasisigud a panagilasin ti \"$2\" ket tuonana ti immuna a kasisigud a panagilasin ti \"$1\".",
        "duplicate-displaytitle": "<strong>Ballaag:</strong> Ti maiparang a titulo ti \"$2\" ket tuonanna ti immmuna a maiparang a titulo ti \"$1\".",
        "invalid-indicator-name": "<strong>Biddut:</strong> Ti gupit ti <code>name</code> a panangipakita ti kasasaad ti panid ket nasken nga adda linaon.",
        "version-libraries-license": "Lisensia",
        "version-libraries-description": "Deskripsion",
        "version-libraries-authors": "Dagiti mannurat",
-       "redirect": "Baw-ing babaen ti papeles, agar-aramat, panid wenno ID ti rebision",
+       "redirect": "Baw-ing babaen ti papeles, agar-aramat, panid, rebision, wenno ID ti listaan",
        "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 rebision wenno ID ti panid), wenno ti panid ti agar-aramat (iti numeriko nga ID ti agar-aramat). Panagusar:\n[[{{#Special:Redirect}}/file/Example.jpg]], \n[[{{#Special:Redirect}}/page/64308]], \n[[{{#Special:Redirect}}/revision/328429]], wenno\n[[{{#Special:Redirect}}/user/101]].",
        "redirect-submit": "Inkan",
        "redirect-page": "ID ti panid",
        "redirect-revision": "Rebision ti panid",
        "redirect-file": "Nagan ti papeles",
+       "redirect-logid": "ID ti listaan",
        "redirect-not-exists": "Saan a nabirukan ti pateg",
        "fileduplicatesearch": "Agbiruk kadagiti duplikado a papeles",
        "fileduplicatesearch-summary": "Agbiruk kadagiti duplikado a papeles a naibatay kadagiti pateg ti hash.",
        "tags-source-none": "Saan a maus-usar",
        "tags-edit": "urnosen",
        "tags-delete": "ikkaten",
+       "tags-activate": "patarayen",
+       "tags-deactivate": "pasardengen",
        "tags-hitcount": "$1 {{PLURAL:$1|a sinukatan|a sinuksukatan}}",
+       "tags-manage-no-permission": "Awan ti pammalubosmo a mangtaripato kadagiti etiketa ti panagbaliw.",
+       "tags-manage-blocked": "Saanmo a mataripato dagiti etiketa ti panagbaliw bayat a naserraan.",
        "tags-create-heading": "Agpartuat iti baro nga etiketa",
        "tags-create-explanation": "Babaen ti kasisigud, dagiti kabarbaro a napartuat nga etiketa ket mabalinto a magun-od a mausar babaen dagiti agar-aramat ken dagiti bot.",
        "tags-create-tag-name": "Nagan ti etiketa:",
        "tags-create-reason": "Rason:",
        "tags-create-submit": "Agpartuat",
        "tags-create-no-name": "Nasken nga inaganam ti nagan ti etiketa.",
+       "tags-create-invalid-chars": "Dagiti nagan ti etiketa ket nasken a saan nga aglaon kadagiti kaw-it (<code>,</code>) wenno dagiti agpasango a tagbat (<code>/</code>).",
        "tags-create-invalid-title-chars": "Dagiti nagan ti etiketa ket nasken a saan nga aglaon kadagiti karakter a saan a mabalin a mausar kadagiti titulo ti panid.",
        "tags-create-already-exists": "Addan ti etiketa ti \"$1\".",
        "tags-create-warnings-above": "Nakasarak {{PLURAL:$2|iti sumaganad a ballaag|kadagiti sumaganad a ballaag}} idi nagpadas a nagpartuat iti etiketa ti \"$1\":",
        "tags-create-warnings-below": "Kayatmo kadi ti agtuloy nga agpartuat iti etiketa?",
        "tags-delete-title": "Ikkaten ti etiketa",
        "tags-delete-explanation-initial": "Ik-ikkatemon ti etiketa ti \"$1\" manipud ti database.",
+       "tags-delete-explanation-in-use": "Daytoy ket maikkatto manipud {{PLURAL:$2|kadagiti $2 a rebision wenno naikabil iti listaan|kadagiti amin a $2 a rebision/wenno naikabil iti listaan}} iti agdama  a nakaipakatanna.",
+       "tags-delete-explanation-warning": "Daytoy nga aksion ket <strong>saan a maipasubli</strong> ken <strong>saan a mabalin nga ibabawi</strong>, urayno babaen dagiti administradore ti database. Siguraduem a daytoy ti etiketa a kayatmo nga ikkaten.",
+       "tags-delete-explanation-active": "<strong>Aktibo pay laeng ti etiketa ti \"$1\", ken agtuloy a maipakat iti masakbayan.</strong> Tapno mangpasardeng daytoy a mapasamak, mapan iti lugar wenno luglugar nga ayan a pakaipakatanto ti etiketa, ken ibaldado idiay.",
        "tags-delete-reason": "Rason:",
+       "tags-delete-submit": "Ikkatem a di maipasubli daytoy nga etiketa",
+       "tags-delete-not-allowed": "Dagiti etiketa nga inpalawag babaen ti maysa a pagpaatiddog ket saan a maikkat malaksid no naisangayan nga ipalubos ti pagpaatiddog.",
        "tags-delete-not-found": "Awan ti etiketa ti \"$1\".",
        "tags-delete-too-many-uses": "Ti etiketa ti \"$1\" ket naipakat iti ad-adu ngem $2 {{PLURAL:$2|a rebision|kadagiti rebision}}, a ti kaibuksillanna ket saan a mabalin a maikkat.",
-       "tags-delete-warnings-after-delete": "Ti etiketa ti \"$1\" ket balligi a naikkat, ngem nakita {{PLURAL:$2|ti sumaganad a ballag|dagiti sumaganad a balaag}}:",
+       "tags-delete-warnings-after-delete": "Ti etiketa ti \"$1\" ket naikkat, ngem nakita {{PLURAL:$2|ti sumaganad a ballaag|dagiti sumaganad a ballaag}}:",
+       "tags-activate-title": "Patarayen ti etiketa",
+       "tags-activate-question": "Isagsaganamon a patarayen ti etiketa ti \"$1\".",
        "tags-activate-reason": "Rason:",
+       "tags-activate-not-allowed": "Saan a mabalin a patarayen ti etiketa ti \"$1\".",
        "tags-activate-not-found": "Awan ti etiketa ti \"$1\".",
+       "tags-activate-submit": "Patarayen",
+       "tags-deactivate-title": "Pasardengen ti etiketa",
+       "tags-deactivate-question": "Isagsaganam a pasardengen ti etiketa ti \"$1\".",
        "tags-deactivate-reason": "Rason:",
+       "tags-deactivate-not-allowed": "Saan a mabalin a  pasardengen ti etiketa ti \"$1\".",
+       "tags-deactivate-submit": "Pasardengen",
+       "tags-apply-no-permission": "Awan iti pammalubosmo a mangipakat kadagiti etiketa ti panagbaliw a mairaman kadagiti binaliwam.",
+       "tags-apply-blocked": "Saanmo a maipakat dagiti etiketa ti panagbaliw a mairaman kadagiti binaliwam bayat a naserraan.",
        "tags-apply-not-allowed-one": "Saan a maipalubos a manual a maipakat ti tiketa ti \"$1\".",
        "tags-apply-not-allowed-multi": "Saan a maipalubos a manual a maipakat {{PLURAL:$2|ti sumaganad nga etiketa|dagiti sumagand nga etiketa}}: $1",
+       "tags-update-no-permission": "Awan ti pammalubosmo a manginayon wenno mangikkat kadagiti etiketa ti panagbaliw manipud kadagiti agmaymaysa a rebision wenno dagiti naikabil iti listaan.",
+       "tags-update-blocked": "Saanmo a manayonan wenno maikkat dagiti etiketa ti panagbaliw bayat a naseraan.",
        "tags-update-add-not-allowed-one": "Saan a mabalin a manual a mainayon ti etiketa ti \"$1\".",
        "tags-update-add-not-allowed-multi": "Saan a mabalin a manual a mainayon {{PLURAL:$2|ti sumaganad nga etiketa|dagiti sumaganad nga etiketa}}: $1",
        "tags-update-remove-not-allowed-one": "Ti etiketa ti \"$1\" ket saan a maipalubos a maikkat.",
        "tags-edit-revision-legend": "Aginayon wenno agikkat kadagiti etiketa manipud {{PLURAL:$1|ti daytoy a rebision|kadagiti amin a $1 a rebision}}",
        "tags-edit-logentry-legend": "Aginayon wenno agikkat kadagiti etiketa manipud {{PLURAL:$1|ti daytoy a listaan ti naikabil|kadagiti amin a $1 a listaan ti naikabkabil}}",
        "tags-edit-existing-tags": "Dagiti adda nga etiketa:",
-       "tags-edit-existing-tags-none": "''Awan''",
+       "tags-edit-existing-tags-none": "<em>Awan</em>",
        "tags-edit-new-tags": "Dagiti baro nga etiketa:",
        "tags-edit-add": "Inayon dagitoy nga etiketa:",
        "tags-edit-remove": "Ikkaten dagitoy nga etiketa:",
        "tags-edit-reason": "Rason:",
        "tags-edit-revision-submit": "Ipakat dagiti binaliwan {{PLURAL:$1|iti daytoy a rebision|kadagiti $1 a rebision}}",
        "tags-edit-logentry-submit": "Ipakat dagiti panagbaliw {{PLURAL:$1|iti daytoy a listaan ti naikabil|kadagiti $1 a listaan ti naikabkabil}}",
-       "tags-edit-success": "Balligi a naipakat dagiti binaliwan.",
+       "tags-edit-success": "Naipakat dagiti binaliwan.",
        "tags-edit-failure": "Saan a maipakat dagiti binaliwan:\n$1",
        "tags-edit-nooldid-title": "Imbalido a rebision ti puntaan",
        "tags-edit-nooldid-text": "Saanka a nanginagan ti ania man a rebision a puntaan a pagaramidan daytoy nga annong, wenno awan ti nainaganan a rebision.",
        "expand_templates_generate_xml": "Iparang ti pangwaswas a kayo ti XML",
        "expand_templates_generate_rawhtml": "Ipakita ti naata a HTML",
        "expand_templates_preview": "Ipadas",
-       "pagelanguage": "Pagpilian ti pagsasao ti panid",
+       "expand_templates_input_missing": "Nasken a mangitedka iti maikabil a teksto.",
+       "pagelanguage": "Baliwan ti pagsasao ti panid",
        "pagelang-name": "Panid",
        "pagelang-language": "Pagsasao",
        "pagelang-use-default": "Usaren ti kasisigud a pagsasao",
        "action-pagelang": "baliwan ti pagsasao ti panid",
        "log-name-pagelang": "Listaan ti panagbaliw ti pagsasao",
        "log-description-pagelang": "Daytoy ket listaan dagiti panagbaliw kadagiti pagsasao ti panid.",
-       "logentry-pagelang-pagelang": "Ni $1 ket {{GENDER:$2|binaliwanna}} ti pagsasao ti panid para iti $3 manipud ti $4 iti $5.",
+       "logentry-pagelang-pagelang": "Ni $1 ket {{GENDER:$2|binaliwanna}} ti pagsasao ti $3 manipud iti $4 iti $5",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (napakabaelan)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''nabaldado''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>nabaldado</strong>)",
        "mediastatistics": "Estadistika ti midia",
        "mediastatistics-summary": "Estadistika a maipanggep dagiti kita ti naikarga a papeles. Daytoy ket mangiraman laeng ti kinaudi a bersion ti papeles. Dagiti bersion ti papeles a daan wenno naikkat ket saan a mairaman.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 a byte|$1 kadagiti bytes}} ($2; $3%)",
+       "mediastatistics-bytespertype": "Dagup a kadakkel ti papeles para iti daytoy a seksion: {{PLURAL:$1|$1 a byte|$1 kadagiti bytes}} ($2; $3%).",
+       "mediastatistics-allbytes": "Dagup a kadakkel ti papeles para kadagiti amin a papeles: {{PLURAL:$1|$1 a byte|$1 kadagiti bytes}} ($2).",
        "mediastatistics-table-mimetype": "Kita ti MIME",
        "mediastatistics-table-extensions": "Dagiti mabalin pagpaatiddog",
        "mediastatistics-table-count": "Bilang dagiti papeles",
        "mediastatistics-table-totalbytes": "Naitiptipon a kadakkel",
        "mediastatistics-header-unknown": "Di ammo",
        "mediastatistics-header-bitmap": "Ladladawan ti bitmap",
+       "mediastatistics-header-drawing": "Nailadladawan (ladladawan ti vector)",
        "mediastatistics-header-audio": "Audio",
        "mediastatistics-header-video": "Dagiti video",
+       "mediastatistics-header-multimedia": "Nabaknang a midia",
        "mediastatistics-header-office": "Opisina",
        "mediastatistics-header-text": "Tekstual",
+       "mediastatistics-header-executable": "Dagiti mabalin a matungpal",
+       "mediastatistics-header-archive": "Dagiti napenpen a pormat",
        "mediastatistics-header-total": "Amin a papeles",
+       "json-warn-trailing-comma": "$1 a maud-udi a {{PLURAL:$1|kaw-it|kawkaw-it}} ket naikkat manipud iti JSON",
        "json-error-unknown": "Adda idi parikut ti JSON. Biddut: $1",
+       "json-error-depth": "Nasurokanen ti kadakkel ti kauneg ti tuon",
        "json-error-state-mismatch": "Imbalido wenno nadadael a JSON",
+       "json-error-ctrl-char": "Biddut ti kontrol ti karakter, mabalin a saan a husto a naikodigo",
        "json-error-syntax": "Biddut ti sintaksis",
+       "json-error-utf8": "Dagiti nadadael a karakter ti UTF-8, mabalin a saan a husto a naikodigo",
+       "json-error-recursion": "Maysa wenno ad-adu kadagiti rekursibo a reperensia iti maikodigonto a pateg",
+       "json-error-inf-or-nan": "Maysa wenno ad-adu kadagiti pateg ti NAN wenno INF iti maikodigonto a pateg",
+       "json-error-unsupported-type": "Naited ti pateg iti kita a saan a maikodigo",
        "headline-anchor-title": "Isilpo iti daytoy a paset",
        "special-characters-group-latin": "Latin",
        "special-characters-group-latinextended": "Latin napaatiddog",
        "mw-widgets-titleinput-description-new-page": "awan pay ti panid",
        "mw-widgets-titleinput-description-redirect": "ibaw-ing iti $1",
        "api-error-blacklisted": "Pangngaasi nga agpili iti sabali, a mangipalpalawag a titulo.",
+       "sessionmanager-tie": "Saan a mabalin nga itipon dagiti nadumaduma kita ti kiddaw ti pammasingked: $1.",
+       "sessionprovider-generic": "Dagiti sesion ti $1",
+       "sessionprovider-mediawiki-session-cookiesessionprovider": "dagiti sesion a naibatay iti galieta",
+       "sessionprovider-nocookies": "Mabalin a nabaldado dagiti galieta. Siguraduem a pinakabaelam dagiti galieta ken mangrugi manen.",
        "randomrootpage": "Pugto a ramut a panid"
 }
index 35b8d40..6b9434e 100644 (file)
@@ -8,13 +8,16 @@
                        "Tagir",
                        "Умар",
                        "아라",
-                       "Shirayuki"
+                       "Shirayuki",
+                       "ElizaMag",
+                       "Adam-Yourist"
                ]
        },
        "tog-underline": "Хьожадерга |ок|алтакадар:",
        "tog-hideminor": "Хьат|аяздара чу кердача хувцамашa з|амига дола хувцамаш къайладаккха",
        "tog-hidepatrolled": "Хьат|аяздара чу кердача хувцамашa д|анийсадаь дола хувцамаш къайладаккха",
        "tog-newpageshidepatrolled": "Хьат|аяздара чу кердача хувцамашa хьанийсадаь дола оаг|онаш къайлаяккха",
+       "tog-hidecategorization": "Къайлаяккха оагӀонай категореш",
        "tog-extendwatchlist": "Шерадаь теркама хьат|аяздар, массадола хувцамаш чулоацаш дола, алхха т|ехьара даьраш мара а доацаш",
        "tog-usenewrc": "Керда хувцамашка а хьат|аяздара зембаккхарга а эргадаккхараш тоабаде (JavaScript эша)",
        "tog-numberheadings": "Керташкашта аланза таьрахьа хотта",
        "tog-watchlisthideliu": "Теркама xьат|аяздар чура хьабайза доакъошхоша хувцамаш къайладаха",
        "tog-watchlisthideanons": "Теркама xьат|аяздар чура ц|ийоацача доакъошхоша хувцамаш къайладаха",
        "tog-watchlisthidepatrolled": "Теркама xьат|аяздар чура д|анийсдаь хувцамаш къайладаха",
+       "tog-watchlisthidecategorization": "Къайлаяккха оагӀонай категореш",
        "tog-ccmeonemails": "Аз д|ахийташ дола доакъошхошоа каьхаташ са д-хоамни т|а дайта хьа",
        "tog-diffonly": "Шин нийсхьале в|ашинийсдара к|ала бола оаг|он чулоацам ма гойта",
        "tog-showhiddencats": "Къайла катагаш гойта",
+       "tog-useeditwarning": "Хоамбе хьадаь хувцамаш дӀа ца яздеш аз болх дӀаберзабеча ханахь",
        "underline-always": "Даиман",
        "underline-never": "Ц|аккха",
        "underline-default": "Мазаб|арглокхарa оттамаш хайраде",
        "editfont-style": "Нийсдара меттига чу йола зарба б|армат:",
+       "editfont-default": "Браузерен гӀирса чура шрифт",
        "editfont-monospace": "Башхалон зарба",
+       "editfont-sansserif": "Белгало йоаца шрифт",
+       "editfont-serif": "Белгало йола шрифт",
        "sunday": "К|иранди",
        "monday": "Оршот",
        "tuesday": "Шинара",
        "october-date": "Тов $1",
        "november-date": "Лайчил $1",
        "december-date": "Чантар $1",
+       "period-am": "ДЦ",
+       "period-pm": "ДТ",
        "pagecategories": "{{PLURAL:$1|1=Катаг|Катагаш}}",
        "category_header": "\"$1\" Катага чура оаг|онаш",
        "subcategories": "Чуракатагаш",
        "morenotlisted": "Ер |ояздар хьалдиззанз да.",
        "mypage": "Oаг|ув",
        "mytalk": "Дувцам",
-       "anontalk": "УкÑ\85 IP-меÑ\82Ñ\82ига Ð´Ñ\83вÑ\86ам",
+       "anontalk": "Ð\94Ñ\83вÑ\86аÑ\80",
        "navigation": "Наькъатохкарг",
        "and": "&#32;кхы",
        "qbfind": "Лахар",
        "errorpagetitle": "Г|алат",
        "returnto": "цу $1 оаг|он т|а юхаг|о",
        "tagline": "Кечал укхазара я {{SITENAME}}",
-       "help": "Ð\9aÑ\83Ñ\86Ñ\82оÑ\85кам",
+       "help": "Ð\93Ó\80о",
        "search": "Лахаp",
        "searchbutton": "Лахар",
        "go": "Дехьа г|о",
        "searcharticle": "Дехьа г|о",
-       "history": "тархьар",
-       "history_short": "ТаÑ\80Ñ\85Ñ\8cаÑ\80",
+       "history": "Истори",
+       "history_short": "Ð\98Ñ\81Ñ\82оÑ\80и",
        "updatedmarker": "Со ханача денца хувцамаш хиннaд",
        "printableversion": "Кепатохара нийсхьал",
        "permalink": "Даиман латташ йола хьожадерг",
        "view": "Б|аргтассам",
        "view-foreign": "Мазаоаг|он чу $1 хьажа",
        "edit": "Хувца",
+       "edit-local": "Хувца локальни йоазонца сурт оттадар",
        "create": "Хьаде",
+       "create-local": "ТIатоха локальни йоазонца сурт оттадар",
        "editthispage": "Ер оаг|ув хувца",
        "create-this-page": "Ep oаг|ув хьае",
        "delete": "Д|аяккха",
        "imagepage": "Лурдара оаг|oн т|а б|аргтасса",
        "mediawikipage": "Xоаман оаг|ув хьахьокха",
        "templatepage": "Ч|абала оаг|oн т|а б|аргтасса",
-       "viewhelppage": "Ð\9aÑ\83Ñ\86Ñ\82оÑ\85кам Ð±еха",
+       "viewhelppage": "Ð\93Ó\80о Ð´еха",
        "categorypage": "Катага оаг|oн т|а б|аргтасса",
        "viewtalkpage": "Дувцамага б|аргтасса",
        "otherlanguages": "Кхыча меттаех",
        "currentevents-url": "Project:ХӀанзара хоамаш",
        "disclaimers": "Бокъонах юхавалаp",
        "disclaimerpage": "Project:Бокъонах юхавалаp",
-       "edithelp": "Хувцама куцтохкам",
+       "edithelp": "Хувцама гӀо",
+       "helppage-top-gethelp": "ГӀо",
        "mainpage": "Кертера оагӀув",
        "mainpage-description": "Кертера оагӀув",
        "policy-url": "Project:Бокъонаш",
        "site-rss-feed": "$1 RSS мугӀ",
        "site-atom-feed": "$1 Atom мугӀ",
        "page-rss-feed": "\"$1\" RSS мугӀ",
-       "page-atom-feed": "\"$1\" Atom мугӀ",
+       "page-atom-feed": "«$1» — Atom-мугI",
        "red-link-title": "$1 (укх тайпара оагӀув яц)",
        "nstab-main": "Йоазув",
        "nstab-user": "Дакъалаьцархо",
        "nstab-image": "Паьл",
        "nstab-mediawiki": "Хоам",
        "nstab-template": "ЧIабал",
-       "nstab-help": "Ð\9aÑ\83Ñ\86Ñ\82оÑ\85кам",
+       "nstab-help": "Ð\93Ó\80о",
        "nstab-category": "Катаг",
+       "mainpage-nstab": "Кертера оагӀув",
        "nosuchaction": "Цу тайпара дулархIам бац",
        "nosuchspecialpage": "Изза мо гӀон оагӀув яц",
        "error": "ГӀалат",
        "virus-unknownscanner": "довзашдоаца мазаундохьалург:",
        "welcomeuser": "Маьрша доаг|алд, $1!",
        "yourname": "Дакъалаьцархочунна цӀи:",
+       "userlogin-yourname": "Доакъашхочунна цӀи",
+       "userlogin-yourname-ph": "Чуйоалае доакъашхочун цӀи",
+       "createacct-another-username-ph": "Чуйоалае доакъашхочун цӀи",
        "yourpassword": "КъайладIоагӀа:",
        "yourpasswordagain": "КъайладIоагӀа юха Ӏоязаде:",
        "remembermypassword": "(укх $1 {{PLURAL:$1|1=ден|деношкахь}}) мара са чувалара/чуялара дагалоаца дезаш дац",
        "mailerror": "Хоам дIабохьийташ гIалат даьннад: $1",
        "emailconfirmlink": "Доаржален хоамни хьожадорг дIачIоагIаде",
        "loginlanguagelabel": "Мотт: $1",
+       "pt-login": "Чувала/яла",
+       "pt-createaccount": "Дакъалаьцархо кхолла",
        "changepassword": "КъайладIоaгIа дIахувцар",
        "oldpassword": "Къаьна къайладIоагӀа:",
        "newpassword": "Керда къайладIоагӀа:",
        "page_first": "хьалхара",
        "page_last": "тӀехьара",
        "histlegend": "Кхетам: (хӀанз.) = хӀанза йолачунна бӀаргоагӀувни хьакъоастам ба; (хьалх.) = хьалха хинначунна бӀаргоагӀувни хьакъоастам ба; '''зӀ''' = зӀамига хьахувцам ба.",
-       "history-fieldset-title": "Искара бӀаргтасса",
+       "history-fieldset-title": "Исторе бӀаргтасса",
        "history-show-deleted": "ДӀадаьккхараш мара",
        "histfirst": "къаьнараш",
        "histlast": "кердараш",
        "historyempty": "(даьсса)",
-       "history-feed-title": "Хувцамий искар",
-       "history-feed-description": "Укх оагӀуви вики тӀа хувцамий искар",
+       "history-feed-title": "Хувцамий истори",
+       "history-feed-description": "Укх оагӀуви вики тӀа хувцамий истори",
        "history-feed-item-nocomment": "$1гӀара $2гӀачу",
        "rev-delundel": "хьахьокха/къайлаяьккха",
        "rev-showdeleted": "хьахьокха",
        "revdelete-radio-unset": "Гуш йола",
        "revdelete-log": "Бахьан",
        "revdel-restore": "Кустгойтам хувца",
-       "pagehist": "ОагӀува искар",
-       "deletedhist": "ДӀадаккхамий искар",
+       "pagehist": "ОагӀува истори",
+       "deletedhist": "ДӀадаккхамий истори",
        "revdelete-reasonotherlist": "Кхыдола бахьан",
-       "mergehistory-list": "ВIашагIатоха хувцамий искар",
+       "mergehistory-list": "ВIашагIатоха хувцамий истори",
        "mergehistory-go": "ВIашагIатоха хувцамаш хьахьокха",
        "mergehistory-submit": "Хувцамаш вIашагIатоха",
        "mergehistory-empty": "ВIашагIатохара хувцамаш кораяь яц.",
        "mergehistory-reason": "Бахьан:",
        "revertmerge": "Декъа",
-       "history-title": "\"$1\" — хувцамий искар",
+       "history-title": "\"$1\" — хувцамий истори",
        "lineno": "МугI $1:",
        "compareselectedversions": "Хьаржа доржамаша тарона тIа хьажа",
        "editundo": "юхавала/яла",
        "searchprofile-images-tooltip": "Паьлий лахар",
        "searchprofile-everything-tooltip": "Массадола оагIувний лахар (дувцама оагIувнаш чулоацаш)",
        "searchprofile-advanced-tooltip": "Iочуязаяь цIераренашках лаха",
-       "search-result-size": " $1 ({{PLURAL:$2|1=1 дош|$2 дешаш}})",
+       "search-result-size": "$1 ({{PLURAL:$2|$2 дош|$2 дешаш}})",
        "search-result-category-size": "{{PLURAL:$1|1=$1 дакъа|$1 дакъаш}} ({{PLURAL:$2|1=$2 кIалцатег|$2 кIалцатегаш}}, {{PLURAL:$3|1=$3 паьла|$3 паьлий}})",
        "search-redirect": "($1 дехьачуяьккхар)",
        "search-section": " (дакъа $1)",
        "action-read": "Укх оагIуви дешам",
        "action-edit": "Ер оагIув хувца",
        "nchanges": "$1 {{PLURAL:$1|1=хувцам|хувцамаш}}",
+       "enhancedrc-history": "Истори",
        "recentchanges": "Керда хувцамаш",
        "recentchanges-legend": "Керда хувцамий оттамаш",
-       "recentchanges-summary": "КIалхагIа лоарамий доаламе тIехьара оагIувний хувцамаш дIаязадаь да{{grammar:genitive|{{SITENAME}}}}.",
+       "recentchanges-summary": "КIалхагIа лоарамий доаламе тIехьара оагIувний хувцамаш дIаязадаь да {{grammar:genitive|{{SITENAME}}}}.",
        "recentchanges-feed-description": "Укх ларамца тIехьара массахувцамашт теркам бе.",
        "recentchanges-label-newpage": "Укх хувцамаца керда оагIув даь хиннад",
        "recentchanges-label-minor": "ЗIамига хувцам я",
        "recentchanges-label-unpatrolled": "Ер хувцам ший моттиге кхы дIадехьаяьккхаяц.",
        "rcnotefrom": "КIалхагIа хувцамаш хьахьекха я <strong>$2</strong> денза (<strong>$1</strong> кхачалца).",
        "rclistfrom": "$3 $2 тIара хувцамаш хьахьокха",
-       "rcshowhideminor": "зIамига хувцамаш $1",
-       "rcshowhidebots": "$1 шабелхалой",
+       "rcshowhideminor": "$1 зIамига хувцамаш",
+       "rcshowhideminor-hide": "Къайлдаккха",
+       "rcshowhidebots": "$1 боташ",
+       "rcshowhidebots-show": "Хьахьокха",
        "rcshowhideliu": "Чубаьнначара дакъалаьцархочий $1",
-       "rcshowhideanons": "цIияьккханза дакъалаьцархой $1",
+       "rcshowhideliu-hide": "Къайлдаккха",
+       "rcshowhideanons": "$1 цIияьккханза дакъалаьцархой",
+       "rcshowhideanons-hide": "Къайлдаккха",
        "rcshowhidepatr": "$1 теркам даь хувцамаш",
        "rcshowhidemine": "$1 сай хувцамаш",
+       "rcshowhidemine-hide": "Къайлдаккха",
        "rclinks": "$2 динах<br />$3 $1 хинна тIехьара хувцамаш хьахьокха",
        "diff": "кхы.",
-       "hist": "искар",
+       "hist": "истори",
        "hide": "Къайлдаккха",
        "show": "Хьахьокха",
        "minoreditletter": "м",
        "newpageletter": "Н",
        "boteditletter": "б",
        "rc_categories_any": "МоллагIа а",
+       "rc-change-size-new": "Хувцам баьнначул тӀехьагIа бола боарам: $1 {{PLURAL:$1|байт}}",
        "rc-enhanced-expand": "Ма дарра чулоацамаш хьахьокха (JavaScriptаца)",
        "rc-enhanced-hide": "Ма дарра чулоацамаш къайладаккха",
        "recentchangeslinked": "Гаргалон хувцамаш",
        "listfiles_description": "Лоацам",
        "listfiles_count": "Доржамаш",
        "file-anchor-link": "Паьл",
-       "filehist": "Паьла искар",
+       "filehist": "Паьла истори",
        "filehist-help": "Хьалхе паьла мишта хиннай хьожаpгволаш/йолаш, дентаьрах/сахьата тIа пIелга тIообе.",
        "filehist-revert": "юхаяьккха",
        "filehist-current": "xIанзара",
        "brokenredirects-edit": "хувца",
        "brokenredirects-delete": "дIадаккха",
        "withoutinterwiki-submit": "Хьахьокха",
-       "nbytes": "$1 {{PLURAL:$1|1=бIат|бIаташ}}",
+       "nbytes": "$1 {{PLURAL:$1|байт}}",
        "nmembers": "$1 {{PLURAL:$1|1=дакъалаьцархо|дакъалаьцархой}}",
        "prefixindex": "ОагIувнаший хьалхера цIи хьагойтар",
        "shortpages": "Лоаца оагIувнаш",
        "watching": "Тохкам беча оагIув тIа тIадаккха",
        "unwatching": "Тохкам беча оагIув тIера дIадаккха",
        "deletepage": "ОагIув дIаяьккха",
-       "confirmdeletetext": "Оаш оагIувни (е сурти) барча дIадаккхар хьайийхай кха еррига хувцамий искар долама ковчера. \nДехар да, жоп дала, шоай из бокъонцахь де безам болаш да, шоай даьчоахь хургдолчоахь кхеташ долга, [[{{MediaWiki:Policy-url}}]] декъамачу Iоязадаь дола адаташ ца из деш долга.",
+       "confirmdeletetext": "Оаш оагIувни (е сурти) барча дIадаккхар хьайийхай кха еррига хувцамий истори долама ковчера. \nДехар да, жоп дала, шоай из бокъонцахь де безам болаш да, шоай даьчоахь хургдолчоахь кхеташ долга, [[{{MediaWiki:Policy-url}}]] декъамачу Iоязадаь дола адаташ ца из деш долга.",
        "actioncomplete": "ДулархIам баьб",
        "actionfailed": "Оттам даьдац",
        "deletedtext": "\"$1\" дIаяьккха хиннай.\nТIехьара дIадаьккха дагарчена хьожаргволаш/хьожаргьйолаш, $2 хьажа.",
        "move-page-legend": "ОагIува цIи хувца",
        "movepagetext": "КIалхара кепаца болхабеча, оаш оагIувни цIи хувцаргья, цунна хувцамий тептар кхыйола меттиге дIачудоаккхаш.\nКIаьнара цIерахь керда цIерий дIачудаккхам хургда.\nКIаьнара цIера тIа даь дола дIачудаккхамаш, шун ший лоIамахь кердадаккха йийш хургья.\nИз оаш ца дой, дехар да, [[Special:DoubleRedirects|шолха]] кхы [[Special:BrokenRedirects|вIашагIаяккха дIачудаккхамий]] кардоламахь хьажа.\nОаш жоп лу, шоай чуяккха йола Iинкаш, даим болхбеш хургдолга.\n\nЗем бахка, оагIувни цIи хувцалургьяц, изза мо цIи йолаш оагIув хилача. \nЙолаш йола оагIув хувца йийш яц, амма хийца йола оагIув юха хьахувца йийш я. \n\n'''Хоамхайтар'''\n\nЦIи хувцар, йовзаш йола оагIувнаший, доккха а цаьхха а хувцамшка дIатIадала мегаш да.\nДехар да, оаш дIахо болх белаьхь, хургдола хIама кхеташ долга, кхеталаш.",
        "movepagetalktext": "ТIатеха дувцама оагIув, ший лоIамахь цIи хувлургья, '''ер дага а доацар, доаца:'''\n\n*Изза мо цIи йолаш яьсса дувцама оагIув я е\n*Оаш кIалхахь белгало даьдац.\n\nИз иштта дале, кулги новкъосталца оагIувнаш вIашагIатоха  е дIадехьаяккха деза шун.",
-       "movearticle": "ОагIува цIи хувца",
        "newtitle": "Керда цIи",
        "move-watch": "Ер оагIув теркама дагаршкахь чуяккха",
        "movepagebtn": "ОагIува цIи хувца",
        "tooltip-pt-mycontris": "Шун хувцамаш",
        "tooltip-pt-login": "Укхаза хьай цIи аьле чувала/яла йиша я, амма чуцаваьлача/ялача хIама а дац",
        "tooltip-pt-logout": "Аравала/яла",
+       "tooltip-pt-createaccount": "Хьа бокъо я лоархIама яздар кхелла система чу вала, амма декхар долаш дац из.",
        "tooltip-ca-talk": "ОагIувна чулоацаме дувцам",
-       "tooltip-ca-edit": "Ð\95Ñ\80 Ð¾Ð°Ð³IÑ\83в Ñ\85Ñ\83вÑ\86а Ð¹Ð¸Ñ\88йолаÑ\88 Ñ\8f. Ð\94еÑ\85аÑ\80 Ð´Ð°, IалаÑ\88 ÐµÐ»Ð°Ñ\8cÑ\85, Ñ\85Ñ\8cалÑ\85е Ð±IаÑ\80гÑ\82аÑ\81Ñ\81ама Ð¾Ð°Ð³IÑ\83в Ñ\82Iа Ð±IаÑ\80гÑ\82аÑ\81Ñ\81а.",
+       "tooltip-ca-edit": "Ð¥Ñ\83вÑ\86а ÐµÑ\80 Ð¾Ð°Ð³IÑ\83в",
        "tooltip-ca-addsection": "Керда декъам хьаде",
        "tooltip-ca-viewsource": "Ер оагIув хувцамах лораяь я, амма шун цунна гIувамага хьажа бокъо я.",
        "tooltip-ca-history": "Укх оагIувни хувцама таптар",
        "tooltip-ca-nstab-project": "Хьахьоадайтама оагIув",
        "tooltip-ca-nstab-image": "Паьла оагIув",
        "tooltip-ca-nstab-template": "ЧIабала оагIув",
+       "tooltip-ca-nstab-help": "ГӀона оагIув",
        "tooltip-ca-nstab-category": "Цатега оагIув",
        "tooltip-minoredit": "Ер хувцар башха доаца санна белгалде",
        "tooltip-save": "Хувцамаш кходе",
        "tooltip-rollback": "ГIалaтнийсадаро тIехьара яь йола хувцамаш, пIелг тоIобе дIаяьккха.",
        "tooltip-undo": "Баь хувцам дIабаьккхe, бIаргатассам хьахьокха, кара дале, дIаяьккха бахьан Iочуязаде моттигаца.",
        "tooltip-summary": "Лоаца чулоацам Iочуязаде",
+       "pageinfo-toolboxlink": "ОагIонах бола хоам",
        "previousdiff": "← Хьалхара хувцам",
        "nextdiff": "ТIайоагIа хувцам",
        "file-info-size": "$1 × $2 фихсам, паьла дустам: $3, MIME-тайп: $4",
        "file-nohires": "Укхал доккхагIа доржам дац",
        "svg-long-desc": "SVG-паьл, $1 × $2 фихелашца, паьла дустам: $3",
        "show-big-image": "ХьалхагIара сурт",
+       "show-big-image-size": "$1 × $2 пиксель",
        "noimages": "Суртaш бIаргагуш дац.",
        "ilsubmit": "Лаха",
        "bad_image_list": "Бустам цу тайпара хила беза:\n\nДагарлен хьаракъаш мара лоарх|аш хургьяц (укх тамагIалгацa * дувлашду мугIараш).\nМугIарен хьалхара Iинк, сурт Iоттае пурам доаца Iинка, хила еза. \nЦу мугIара тIехьайоагIа Iинкаш, арадаккхар мо лоарх|аш хургья, вешта аьлча, йоазувашка чуIоттаде мегаш дола сурт санна ларх|а мега.",
        "external_image_whitelist": "#Ер мугI ший долаш тайпара дита<pre>\n#Каст-каста оаламаш укхаза дIаязаде(юкъе дола дакъа //)\n#арара суртий URLца дIанийсалургда уш.\n#Пайдан дола, сурташ мо хьахьекха хургья, дахIодараш, сурта тIа Iинкаш мо хуpгья хьахьекха.\n#Укх # тамагIалгаца дIадувлаш дола мугIанаш, оалам мо лоархаш да.\n#МугIанаш яздaтакха каьда да\n\n#Каст-каста оаламаш укх мугIа лакхе дIаязаде. Из мугI ший долаш тайпара дита</pre>",
        "tag-filter": "[[Special:Tags|Йоазоний]] цIенаярг:",
        "tag-filter-submit": "ЦIенъе",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|1=Белгало|Белгалонаш}}]]: $2)",
        "tags-title": "Йоазонаш",
        "tags-tag": "Йоазон цIи",
        "tags-hitcount-header": "Белгалаяь хувцамаш",
        "htmlform-selectorother-other": "Кхыдола",
        "rightsnone": "(а)",
        "revdelete-summary": "хувцамий лоацам",
+       "searchsuggest-search": "Лаха",
        "special-characters-group-latin": "Лаьтмий",
        "special-characters-group-greek": "Джелтий",
        "special-characters-group-cyrillic": "Цырилиций",
index 03cbc8c..ff60316 100644 (file)
@@ -11,7 +11,8 @@
                        "Remember the dot",
                        "Wyvernoid",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Sub-strekizez ligili:",
        "savefile": "Registragar arkivo",
        "uploaddisabled": "Pardonez, la adkargo esas desaktiva.",
        "watchthisupload": "Surveyar ica arkivo",
-       "upload-success-subj": "Adcharjo sucesoza",
        "license-header": "Licencizo",
        "imgfile": "arkivo",
        "listfiles": "Listo di imaji",
        "ncategories": "$1 {{PLURAL:$1|kategorio|kategorii}}",
        "nlinks": "$1 {{PLURAL:$1|ligilo|ligili}}",
        "nmembers": "$1 {{PLURAL:$1|membro|membri}}",
-       "nviews": "$1 {{PLURAL:$1|vizito|viziti}}",
        "lonelypages": "Pagini sen ligili",
        "uncategorizedpages": "Nekategorizita pagini",
        "uncategorizedcategories": "Nekategorizita kategorii",
        "mailnologin": "Ne sendar adreso",
        "mailnologintext": "Vu mustas [[Special:UserLogin|enirir]] e havar valida e-adreso en vua [[Special:Preferences|preferaji]] por sendar e-posto ad altra uzanti.",
        "emailuser": "Sendar e-posto a ca uzanto",
-       "emailpage": "E-posto ad uzanto",
        "defemailsubject": "E-posto di {{SITENAME}}",
        "noemailtitle": "Ne esas e-adreso",
        "emailfrom": "De:",
        "rollbackfailed": "Retrorular ne sucesis",
        "cantrollback": "Ne esas posibla retrorular. La lasta kontributanto esas la nura autoro di ica pagino.",
        "alreadyrolled": "Vu ne povas retrorular la lasta chanjo di [[:$1]] da [[User:$2|$2]] ([[User talk:$2|Diskutez]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nulu pluse ja redaktis o retrorulis ica pagino.\n\nLa lasta chanjo a la pagino esis da [[User:$3|$3]] ([[User talk:$3|Diskutez]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "La rezumo di la redakto esis: \"''$1''\".",
+       "editcomment": "La rezumo di la redakto esis: <em>$1</em>.",
        "revertpage": "Desfacita redakti da [[Special:Contributions/$2|$2]] ([[User talk:$2|Debato]]) e rekuperita la lasta redakto da [[User:$1|$1]]",
        "rollback-success": "Desfacis redakti da $1;\nrestauris ad lasta versiono da $2.",
        "protectlogpage": "Protekto-registraro",
        "move-page": "Movar $1",
        "move-page-legend": "Rinomizar pagino",
        "movepagetext": "Uzante ica formularo onu povas rinomizar pagino, movante olua omna versionaro ad la nova titulo.\nLa antea titulo konvertesos a ridirektilo a la nova titulo.\nLa ligili a la antea titulo dil pagino ne chanjesos.\nVoluntez certigar ke ne esas [[Special:DoubleRedirects|duopla]] o [[Special:BrokenRedirects|ruptota ridirektili]].\nVu responsas ke la ligili duros direktante a la pagino korespondanta.\n\nMemorez ke la pagino '''ne''' rinomizesos se ja existus pagino kun la nova titulo, eceptuante ke la pagino esas vakua o ridirektilo sen versionaro.\nIco signifikas ke vu povos rinomizar pagino a olua originala titulo se eroras skribante la nova titulo, ma ne povos riskribar existanta pagino.\n\n'''EGARDEZ!'''\nIca povas esar drastika chanjo e ne-esperinda por populara pagino;\nvoluntez certigar ke vu komprenas la konsequi qui eventos ante durar adavane.",
-       "movearticle": "Movez pagino:",
        "movenologintext": "Vu mustas esar registragita uzanto ed [[Special:UserLogin|enirir]] por rinomizar pagino.",
        "newtitle": "A nova titulo:",
        "move-watch": "Surveyar ca pagino",
index 63d5d27..a6bcb25 100644 (file)
@@ -42,7 +42,7 @@
        "tog-watchmoves": "Bæta á vaktlistann minn síðum og skrám sem ég færi",
        "tog-watchdeletion": "Bæta síðum og skrám sem ég eyði á vaktlistann minn",
        "tog-watchrollback": "Bæta síðum þar sem ég hef tekið aftur breytingu á vaktlistann minn",
-       "tog-minordefault": "Merkja allar breytingar sem minniháttar sjálfgefið",
+       "tog-minordefault": "Merkja sjálfgefið allar breytingar sem minniháttar",
        "tog-previewontop": "Sýna forskoðun á undan breytingareitnum",
        "tog-previewonfirst": "Sýna forskoðun með fyrstu breytingu",
        "tog-enotifwatchlistpages": "Senda mér tölvupóst þegar síðu eða skrá á vaktlistanum mínum er breytt",
@@ -58,6 +58,7 @@
        "tog-watchlisthidebots": "Ekki sýna breytingar vélmenna á vaktlistanum",
        "tog-watchlisthideminor": "Ekki sýna minniháttar breytingar á vaktlistanum",
        "tog-watchlisthideliu": "Ekki sýna breytingar innskráðra notenda á vaktlistanum",
+       "tog-watchlistreloadautomatically": "Endurhlaða vaktlista sjálfkrafa þegar síu er breytt (krefst JavaScript)",
        "tog-watchlisthideanons": "Ekki sýna breytingar óþekktra notenda á vaktlistanum",
        "tog-watchlisthidepatrolled": "Fela yfirfarnar breytingar í vaktlistanum",
        "tog-watchlisthidecategorization": "Fela flokkun á síðum",
        "tog-showhiddencats": "Sýna falda flokka",
        "tog-norollbackdiff": "Sleppa breytingu eftir að endurvakning síðu hefur verið gerð.",
        "tog-useeditwarning": "Vara mig við þegar ég fer frá breytingarsíðu með óvistaðar breytingar",
+       "tog-prefershttps": "Alltaf nota örugga tengingu við innskráningu",
        "underline-always": "Alltaf",
        "underline-never": "Aldrei",
-       "underline-default": "Fletta eða vafra sjálfkrafa",
+       "underline-default": "Skinn eða sjálfgefið í vafra",
        "editfont-style": "Leturgerð í breytingareitum:",
        "editfont-default": "skv. vafrastillingu",
        "editfont-monospace": "Jafnbreitt letur",
        "index-category": "Raðaðar skrár",
        "noindex-category": "Óraðaðar skrár",
        "broken-file-category": "Síður með brotna skráartengla",
+       "categoryviewer-pagedlinks": "($1) ($2)",
        "about": "Um",
        "article": "Efnissíða",
        "newwindow": "(opnast í nýjum glugga)",
        "view": "Skoða",
        "view-foreign": "Skoða á $1",
        "edit": "Breyta",
+       "edit-local": "Breyta staðbundinni lýsingu",
        "create": "Skapa",
        "create-local": "Bæta við staðbundinni lýsingu",
        "editthispage": "Breyta þessari síðu",
        "projectpage": "Skoða verkefnissíðu",
        "imagepage": "Skoða skráarsíðu",
        "mediawikipage": "Skoða skilaboðasíðu",
-       "templatepage": "Skoða sniðasíðu",
+       "templatepage": "Skoða sniðmátasíðu",
        "viewhelppage": "Skoða hjálparsíðu",
        "categorypage": "Skoða flokkatré",
        "viewtalkpage": "Skoða umræðu",
        "otherlanguages": "Á öðrum tungumálum",
        "redirectedfrom": "(Endurbeint frá $1)",
        "redirectpagesub": "Tilvísunarsíða",
-       "redirectto": "Tilvísun á",
+       "redirectto": "Endurbeint á:",
        "lastmodifiedat": "Þessari síðu var síðast breytt $1 klukkan $2.",
        "viewcount": "Þessi síða hefur verið skoðuð $1 {{PLURAL:$1|sinni|sinnum}}.",
        "protectedpage": "Vernduð síða",
        "jumpto": "Stökkva á:",
        "jumptonavigation": "flakk",
        "jumptosearch": "leita",
-       "view-pool-error": "Því miður eru vefþjónarnir yfirhlaðnir í augnablikinu.\nOf margir notendur eru að reyna að skoða þessa síðu. \nVinsamlegast bíddu í smástund áður en þú reynir að sækja þessa síðu aftur.\n\n$1",
-       "generic-pool-error": "Því miður eru vefþjónarnir yfirhlaðnir í augnablikinu.\nOf margir eru að reyna að skoða þessa síðu.\nVinsamlegast bíddu áður en þú reynir að sækja þessa síðu aftur.",
+       "view-pool-error": "Því miður eru vefþjónarnir yfirhlaðnir í augnablikinu.\nOf margir notendur eru að reyna að skoða þessa síðu. \nBíddu í smástund áður en þú reynir að sækja þessa síðu aftur.\n\n$1",
+       "generic-pool-error": "Því miður eru vefþjónarnir yfirhlaðnir í augnablikinu.\nOf margir eru að reyna að skoða þessa síðu.\nBíddu í svolitla stund áður en þú reynir að sækja þessa síðu aftur.",
        "pool-timeout": "Of löng bið efttir lás",
        "pool-queuefull": "Vefþjónninn er yfirhlaðinn í augnablikinu.",
        "pool-errorunknown": "Óþekkt villa",
+       "pool-servererror": "Vöktunarþjónustan er ekki tiltæk ($1).",
+       "poolcounter-usage-error": "Notkunarvilla: $1",
        "aboutsite": "Um {{SITENAME}}",
        "aboutpage": "Project:Um verkefnið",
        "copyright": "Efni má nota samkvæmt $1 nema annað komi fram.",
        "versionrequired": "Þarfnast úgáfu $1 af MediaWiki",
        "versionrequiredtext": "Útgáfa $1 af MediaWiki er þörf til að geta skoðað þessa síðu.\nSjá [[Special:Version|útgáfusíðuna]].",
        "ok": "Í lagi",
+       "pagetitle": "$1 - {{SITENAME}}",
+       "pagetitle-view-mainpage": "{{SITENAME}}",
+       "backlinksubtitle": "← $1",
        "retrievedfrom": "Sótt frá „$1“",
        "youhavenewmessages": "Þú hefur fengið $1 ($2).",
        "youhavenewmessagesfromusers": "Þú hefur $1 frá {{PLURAL:$3|öðrum notanda|$3 notendum}} ($2)",
        "youhavenewmessagesmanyusers": "Þú hefur $1 frá mörgum notendum ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|ný}} skilaboð",
-       "newmessagesdifflinkplural": "{{PLURAL:$1|síðasta breyting|síðustu breytingar}} spjallsíðunnar",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|síðasta breyting|999=síðustu breytingar}}",
        "youhavenewmessagesmulti": "Þín bíða ný skilaboð á $1",
        "editsection": "breyta",
        "editold": "breyta",
        "restorelink": "$1 {{PLURAL:$1|eydd breyting|eyddar breytingar}}",
        "feedlinks": "Streymi:",
        "feed-invalid": "Röng tegund áskriftarstreymis.",
-       "feed-unavailable": "Samræmisstreymi eru ekki fáanlegt",
+       "feed-unavailable": "Streymi frá netveitum eru ekki fáanleg",
        "site-rss-feed": "$1 RSS-streymi",
        "site-atom-feed": "$1 Atom-streymi",
        "page-rss-feed": "„$1“ RSS-streymi",
        "page-atom-feed": "„$1“ Atom-streymi",
+       "feed-atom": "Atom",
+       "feed-rss": "RSS",
        "red-link-title": "$1 (síða er ekki enn til)",
        "sort-descending": "Raða í lækkandi röð",
        "sort-ascending": "Raða í hækkandi röð",
        "nstab-project": "Um",
        "nstab-image": "Skrá",
        "nstab-mediawiki": "Melding",
-       "nstab-template": "Snið",
+       "nstab-template": "Sniðmát",
        "nstab-help": "Hjálp",
        "nstab-category": "Flokkur",
        "mainpage-nstab": "Forsíða",
        "nospecialpagetext": "Þú hefur beðið um kerfissíðu sem ekki er til. Listi yfir gildar kerfissíður er að finna á [[Special:SpecialPages|kerfissíður]].",
        "error": "Villa",
        "databaseerror": "Gagnagrunnsvilla",
+       "databaseerror-text": "Villa kom upp í gagnagrunnsfyrirspurn.\nÞetta gæti bent til villu í hugbúnaðinum.",
+       "databaseerror-textcl": "Villa kom upp í gagnagrunnsfyrirspurn.",
        "databaseerror-query": "Fyrirspurn: $1",
+       "databaseerror-function": "Aðgerð: $1",
        "databaseerror-error": "Villa: $1",
        "laggedslavemode": "Viðvörun: Síðan inniheldur ekki nýjustu uppfærslur.",
        "readonly": "Gagnagrunnur læstur",
        "readonly_lag": "Gagnagrunninum hefur verið læst sjálfkrafa á meðan undirvefþjónarnir reyna að hafa í við aðalvefþjóninn",
        "internalerror": "Kerfisvilla",
        "internalerror_info": "Innri villa: $1",
+       "internalerror-fatal-exception": "Banvæn undantekning af gerðinni \"$1\"",
        "filecopyerror": "Mistókst að afrita skjal \"$1\" á \"$2\".",
        "filerenameerror": "Gat ekki endurnefnt skrána „$1“ í „$2“.",
        "filedeleteerror": "Gat ekki eytt skránni „$1“.",
-       "directorycreateerror": "Gat ekki búið til efnisskrána \"$1\".",
+       "directorycreateerror": "Gat ekki búið til möppuna \"$1\".",
        "directoryreadonlyerror": "Mappan \"$1\" er skrifvarin.",
        "directorynotreadableerror": "Mappan \"$1\" er ekki lesanleg.",
        "filenotfound": "Gat ekki fundið skrána „$1“.",
        "cannotdelete": "Ekki var hægt að eyða síðunni \"$1\".\nLíklegt er að einhver annar hafi gert það.",
        "cannotdelete-title": "Gat ekki eytt síðunni $1",
        "delete-hook-aborted": "Eyðing síðu stöðvuð af viðbótarkrók (extension hook).\nEngin skýring gefin.",
+       "no-null-revision": "Ekki var hægt að búa til nýja núll-útgáfu síðunnar \"$1\"",
        "badtitle": "Slæmur titill",
-       "badtitletext": "Umbeðin síðutitill er ógildur.",
+       "badtitletext": "Umbeðinn síðutitill er ógildur.",
+       "title-invalid-empty": "Umbeðinn síðutitill er auður eða inniheldur aðeins heiti nafnrýmis.",
+       "title-invalid-utf8": "Umbeðinn síðutitill inniheldur ógilda UTF-8 runu.",
+       "title-invalid-characters": "Umbeðinn síðutitill inniheldur ógilda stafi: \"$1\".",
+       "title-invalid-magic-tilde": "Umbeðinn síðutitill inniheldur ógilda tildurunu (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "Umbeðinn síðutitill er of langur. Hann má ekki vera lengri en $1 {{PLURAL:$1|bæti}} í UTF-8 stafatöflu.",
+       "title-invalid-leading-colon": "Umbeðinn síðutitill inniheldur ógildan tvípunkt í byrjun.",
        "perfcached": "Eftirfarandi er afrit af umbeðinni síðu og gæti því ekki verið nýjasta útgáfa hennar. Allt að $1 {{PLURAL:$1|niðurstaða er aðgengileg|niðurstöður eru aðgengilegar}} í skyndiminninu.",
        "perfcachedts": "Eftirfarandi gögn eru í skyndiminninu, og voru síðast uppfærð $1. Allt að $4 {{PLURAL:$4|niðurstaða er aðgengileg|niðurstöður eru aðgengilegar}} í skyndiminninu.",
        "querypage-no-updates": "Lokað er fyrir uppfærslur af þessari síðu. Gögn sett hér munu ekki vistast.",
        "viewsource": "Skoða efni",
        "viewsource-title": "Skoða efni $1",
        "actionthrottled": "Aðgerðin kafnaði",
-       "actionthrottledtext": "Til þess að verjast misnotkun, er ekki hægt að framkvæma þessa aðgerð of oft, og þú hefur farið fram yfir þau takmörk. Vinsamlegast reyndu aftur eftir nokkrar mínútur.",
+       "actionthrottledtext": "Til þess að verjast misnotkun, er ekki hægt að framkvæma þessa aðgerð of oft, og þú hefur farið fram yfir þau takmörk. Reyndu aftur eftir nokkrar mínútur.",
        "protectedpagetext": "Þessari síðu hefur verið læst til að koma í veg fyrir breytingar eða aðrar aðgerðir.",
        "viewsourcetext": "Þú getur skoðað og afritað kóða þessarar síðu.",
        "viewyourtext": "Þú getur skoðað og afritað kóða <strong>breytinganna þinna</strong> yfir á þessa síðu.",
-       "protectedinterface": "Þessi síða útvegar textann sem birtist í viðmóti hugbúnaðarins sem keyrir þessa síðu, og er læst til að koma í veg fyrir misnotkun.\nTil þess að bæta við eða breyta þýðingum fyrir öll wiki verkefni, vinsamlegast notaðu [//translatewiki.net/ translatewiki.net], staðfæringaverkefni MediaWiki",
+       "protectedinterface": "Þessi síða gefur textann sem birtist í viðmóti hugbúnaðarins sem keyrir þessa síðu, og sem er læst til að koma í veg fyrir misnotkun.\nTil þess að bæta við eða breyta þýðingum fyrir öll wiki-verkefni, notaðu [//translatewiki.net/ translatewiki.net], staðfærsluverkefni MediaWiki",
        "editinginterface": "<strong>Aðvörun:</strong> Þú ert að breyta síðu sem hefur að geyma texta fyrir notendaumhverfi hugbúnaðarins.\nBreytingar á þessari síðu munu hafa áhrif á notendaumhverfi annarra notenda á þessu vefsvæði.",
+       "translateinterface": "Til þess að bæta við eða breyta þýðingum fyrir öll wiki-verkefni, notaðu [//translatewiki.net/ translatewiki.net], staðfærsluverkefni MediaWiki",
        "cascadeprotected": "Þessi síða hefur verið vernduð fyrir breytingum, vegna þess að hún er ítengd eftirfarandi {{PLURAL:$1|síðu, sem er vernduð|síðum, sem eru verndaðar}} með „keðjuverndun“:\n$2",
        "namespaceprotected": "Þú hefur ekki leyfi til að breyta síðum í '''$1''' nafnrýminu.",
-       "customcssprotected": "Þú hefur ekki leyfi að breyta þessari CSS-umbrotsíðu, því hún hefur notendastillingar annars notanda.",
-       "customjsprotected": "Þú hefur ekki leyfi til að breyta þessari JavaScript síðu, því hún hefur notendastillingar annars notanda.",
+       "customcssprotected": "Þú hefur ekki leyfi að breyta þessari CSS-umbrotsíðu, því hún hefur notandastillingar annars notanda.",
+       "customjsprotected": "Þú hefur ekki leyfi til að breyta þessari JavaScript síðu, því hún hefur notandastillingar annars notanda.",
        "mycustomcssprotected": "Þú hefur ekki leyfi til þess að breyta þessari CSS-síðu.",
        "mycustomjsprotected": "Þú hefur ekki leyfi til þess að breyta þessari JavaScript-síðu.",
+       "myprivateinfoprotected": "Þú ert ekki með réttindi til að breyta einkaupplýsingunum þínum.",
+       "mypreferencesprotected": "Þú ert ekki með réttindi til að breyta kjörstillingunum þínum.",
        "ns-specialprotected": "Kerfissíðum er ekki hægt að breyta.",
        "titleprotected": "Þessi titill hefur verið verndaður fyrir sköpun af [[User:$1|$1]].\nÁstæðan sem gefin var ''$2''.",
        "filereadonlyerror": "Ekki var hægt að breyta skránni \"$1\" því skráin í skráarsafninu \"$2\" er engöngu hægt að lesa.\n\nKerfisstjórinn sem læsti skránni gaf þessa ástæðu: \"$3\".",
        "invalidtitle-knownnamespace": "Ógildur titill í nafnrými \"$2\" og með textann \"$3\"",
        "invalidtitle-unknownnamespace": "Ógildur titill með óþekkt nafnrými númer $1 og texta \"$2\"",
        "exception-nologin": "Óinnskráð(ur)",
-       "exception-nologin-text": "Vinsamlegast skráðu þig inn til þess að hafa aðgang að þessari síðu eða aðgerð.",
-       "virus-badscanner": "Slæm stilling: óþekktur veiruskannari: ''$1''",
+       "exception-nologin-text": "Skráðu þig inn til þess að fá aðgang að þessari síðu eða aðgerð.",
+       "exception-nologin-text-manual": "$1 til þess að fá aðgang að þessari síðu eða aðgerð.",
+       "virus-badscanner": "Slæm stilling: óþekktur veiruskannari: <em>$1</em>",
        "virus-scanfailed": "skönnun mistókst (kóði $1)",
-       "virus-unknownscanner": "óþekkt mótveira:",
+       "virus-unknownscanner": "óþekktur veiruskanni:",
        "logouttext": "'''Þú hefur verið skráð(ur) út.'''\n\nAthugaðu að sumar síður kunna að birtast líkt og þú sért ennþá skráð(ur) inn, þangað til að þú hreinsar skyndiminnið í vafranum þínum.",
+       "cannotlogoutnow-title": "Get ekki skráð út núna",
+       "cannotlogoutnow-text": "Útskráning er ekki möguleg þegar verið er að nota $1.",
        "welcomeuser": "Velkomin(n), $1!",
        "welcomecreation-msg": "Aðgangurinn þinn hefur verið búinn til.\nEkki gleyma að breyta [[Special:Preferences|{{SITENAME}} stillingunum]] þínum.",
        "yourname": "Notandanafn:",
        "userlogin-yourname": "Notandanafn",
-       "userlogin-yourname-ph": "Skrifaðu inn notendanafnið þitt",
-       "createacct-another-username-ph": "Skrifaðu inn notendanafnið",
+       "userlogin-yourname-ph": "Skrifaðu inn notandanafnið þitt",
+       "createacct-another-username-ph": "Skrifaðu inn notandanafnið",
        "yourpassword": "Lykilorð:",
        "userlogin-yourpassword": "Lykilorð",
        "userlogin-yourpassword-ph": "Skrifaðu niður lykilorðið þitt",
        "remembermypassword": "Muna innskráninguna mína í þessum vafra (í allt að $1 {{PLURAL:$1|dag|daga}})",
        "userlogin-remembermypassword": "Muna innskráningu mína",
        "userlogin-signwithsecure": "Nota örugga tengingu",
+       "cannotloginnow-title": "Get ekki skráð inn núna",
+       "cannotloginnow-text": "Innskráning er ekki möguleg þegar verið er að nota $1.",
        "yourdomainname": "Þitt lén:",
        "password-change-forbidden": "Þú getur ekki breytt lykilorðum á þessum wiki.",
        "externaldberror": "Uppfærsla mistókst. Annaðhvort varð villa í gagnasafninu eða að þér sé óheimilt að uppfæra aðra aðganga.",
        "createacct-benefit-body2": "{{PLURAL:$1|síða|síður}}",
        "createacct-benefit-body3": "{{PLURAL:$1|nýlegur stuðningsaðili|nýlegir stuðningsaðilar}}",
        "badretype": "Lykilorðin sem þú skrifaðir eru ekki eins.",
-       "userexists": "Þetta notandanafn er þegar í notkun.\nVinsamlegast veldu þér annað.",
+       "usernameinprogress": "Nú þegar er í vinnslu gerð aðgangs fyrir þennan notanda.\nHinkraðu aðeins.",
+       "userexists": "Þetta notandanafn er þegar í notkun.\nVeldu þér eitthvað annað.",
        "loginerror": "Innskráningarvilla",
        "createacct-error": "Stofnun aðgangs mistókst",
        "createaccounterror": "Gat ekki búið til notanda: $1",
-       "nocookiesnew": "Innskráningin var búin til, en þú ert ekki skráð(ur) inn.\n{{SITENAME}} notar vefkökur til að skrá inn notendur.\nÞú hefur lokað fyrir vefkökur.\nGjörðu svo vel og opnaðu fyrir þær, skráðu þig svo inn með notandanafni og lykilorði.",
-       "nocookieslogin": "{{SITENAME}} notar vefkökur til innskráningar. Vafrinn þinn er ekki að taka á móti þeim. Vinsamlegast virkjaðu móttöku kakna í vafranum þínum til að geta skráð þig inn.",
-       "nocookiesfornew": "Notenda aðgangurinn var ekki stofnaður, því ekki fannst uppruni beiðnarinnar.\nGakktu úr skugga um að vefkökur séu virkar, endurhladdu þessari síðu og reyndu aftur.",
+       "nocookiesnew": "Notandaaðgangur var búin til, en þú ert ekki skráð(ur) inn.\n{{SITENAME}} notar vefkökur til að skrá inn notendur.\nÞú hefur lokað fyrir vefkökur.\nEndilega opnaðu fyrir þær, skráðu þig svo inn með notandanafni og lykilorði.",
+       "nocookieslogin": "{{SITENAME}} notar vefkökur til innskráningar. Vafrinn þinn er ekki að taka á móti þeim. Virkjaðu móttöku á vefkökum í vafranum þínum til að geta skráð þig inn.",
+       "nocookiesfornew": "Notandaaðgangurinn var ekki stofnaður, því ekki var hægt að staðfesta uppruna beiðnarinnar.\nGakktu úr skugga um að vefkökur séu virkar, endurlestu þessa síðu og reyndu aftur.",
        "noname": "Þú hefur ekki tilgreint gilt notandanafn.",
        "loginsuccesstitle": "Innskráning tókst",
        "loginsuccess": "'''Þú ert nú innskráð(ur) á {{SITENAME}} sem „$1“.'''",
-       "nosuchuser": "Það er enginn notandi með þetta nafn: \"$1\".\nGerður er greinarmunur á há- og lágstöfum.\nAthugaðu hvort um innsláttavillu er að ræða eða [[Special:UserLogin/signup|búðu til nýtt notendanafn]].",
+       "nosuchuser": "Það er enginn notandi með þetta nafn: \"$1\".\nGerður er greinarmunur á há- og lágstöfum.\nAthugaðu hvort um innsláttavillu er að ræða eða [[Special:UserLogin/signup|búðu til nýtt notandanafn]].",
        "nosuchusershort": "Það er enginn notandi með nafnið „$1“. Athugaðu hvort nafnið sé ritað rétt.",
        "nouserspecified": "Þú verður að taka fram notandanafn.",
        "login-userblocked": "Þessi notandi hefur verið settur í bann.  Innskráning ekki leyfð.",
-       "wrongpassword": "Uppgefið lykilorð er rangt. Vinsamlegast reyndu aftur.",
-       "wrongpasswordempty": "Lykilorðsreiturinn var auður. Vinsamlegast reyndu aftur.",
+       "wrongpassword": "Uppgefið lykilorð er rangt. Reyndu aftur.",
+       "wrongpasswordempty": "Lykilorðsreiturinn var auður. Reyndu aftur.",
        "passwordtooshort": "Lykilorð skal vera að minnsta kosti $1 {{PLURAL:$1|stafur|stafir}}.",
+       "passwordtoolong": "Lykilorð geta ekki verið lengri en $1 {{PLURAL:$1|stafur|stafir}}.",
+       "passwordtoopopular": "Ekki má nota algeng lykilorð. Veldu eitthvað alveg sérstakt lykilorð.",
        "password-name-match": "Þarf að lykilorð þitt sé öðruvísi notandanafni þínu",
-       "password-login-forbidden": "Notkun þessa notendanafns og lykilorðs er ekki leyfileg.",
+       "password-login-forbidden": "Notkun þessa notandanafns og lykilorðs er ekki leyfileg.",
        "mailmypassword": "Endurstilla lykilorð",
-       "passwordremindertitle": "Nýtt tímabundið aðgangsorð fyrir {{SITENAME}}",
+       "passwordremindertitle": "Nýtt bráðabirgðalykilorð fyrir {{SITENAME}}",
        "passwordremindertext": "Einhver (líklegast þú, á vistfanginu $1) hefur beðið um að fá nýtt\nlykilorð fyrir {{SITENAME}} ($4). Tímabundið lykilorð fyrir notandann „$2“\nhefur verið búið til og er núna „$3“. Ef þetta er það sem þú vildir, þarfu að skrá\nþig inn og velja nýtt lykilorð.  Þetta tímabundna lykilorð rennur út eftir $5 {{PLURAL:$5|dag|daga}}.\n\nEf það var ekki þú sem fórst fram á þetta, eða ef þú manst lykilorðið þitt,\nog vilt ekki lengur breyta því, skaltu hunsa þessi skilaboð og\nhalda áfram að nota gamla lykilorðið.",
        "noemail": "Það er ekkert netfang skráð fyrir notandan \"$1\".",
        "noemailcreate": "Þú verður að skrá gilt netfang",
-       "passwordsent": "Nýtt lykilorð var sent á netfangið sem er skráð á „$1“.\nVinsamlegast skráðu þig inn á ný þegar þú hefur móttekið það.",
+       "passwordsent": "Nýtt lykilorð var sent á netfangið sem er skráð á „$1“.\nSkráðu þig inn á ný þegar þú hefur móttekið það.",
        "blocked-mailpassword": "Þér er ekki heimilt að gera breytingar frá þessu netfangi og  því getur þú ekki fengið nýtt lykilorð í pósti.  Þetta er gert til þess að koma í veg fyrir skemmdarverk.",
        "eauthentsent": "Staðfestingarpóstur hefur verið sendur á uppgefið netfang. Þú verður að fylgja leiðbeiningunum í póstinum til þess að virkja netfangið og staðfesta að það sé örugglega þitt.",
        "throttled-mailpassword": "Tölvupóstur til að endursetja lykilorðið hefur þegar verið sent, innan við $1 {{PLURAL:$1|síðasta klukkutímans|síðustu klukkutímanna}}.\nTil að koma í veg fyrir misnotkun, er aðeins einn tölvupóstur sendur {{PLURAL:$1|hvern $1 klukkutíma|hverja $1 klukkutíma}}.",
        "acct_creation_throttle_hit": "Því miður, hafa verið búnir til {{PLURAL:$1|$1 nýr aðgangur|$1 nýjir aðgangar}} í dag sem er hámarksfjöldi nýskráninga á einum degi.\nÞú getur því miður ekki búið til nýjan aðgang frá þessari IP-tölu að svo stöddu.",
        "emailauthenticated": "Netfang þitt var staðfest þann $2 klukkan $3.",
        "emailnotauthenticated": "Tölvupóstfang þitt hefur ekki enn verið staðfest. Enginn póstur verður sendur af neinum af eftirfarandi eiginleikum.",
-       "noemailprefs": "Tilgreindu netfang svo þessar aðgerðir virki.",
+       "noemailprefs": "Tilgreindu netfang í kjörstillingum þínum svo þessar aðgerðir virki.",
        "emailconfirmlink": "Staðfesta netfang þitt",
        "invalidemailaddress": "Ekki er hægt að taka við netfangi þínu þar sem að það er á ógildu formi.\nGjörðu svo vel og settu inn netfang á gildu formi eða tæmdu reitinn.",
        "cannotchangeemail": "Ekki er hægt að breyta netföngum notenda á þessum wiki",
        "accountcreatedtext": "Notandaaðgangurinn fyrir [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|spjall]]) hefur verið búinn til.",
        "createaccount-title": "Innskráningagerð á {{SITENAME}}",
        "createaccount-text": "Einhver bjó til aðgang fyrir netfangið þitt á {{SITENAME}} ($4) undir nafninu „$2“, með lykilorðið „$3“.\nÞú ættir að skrá þig inn og breyta lykilorðinu núna.\n\nÞú getur hunsað þessi skilaboð, ef villa hefur átt sér stað.",
-       "login-throttled": "Þér hefur mistekist að skrá þig inn undir þessu notendanafni of oft.\nVinsamlegast bíðið $1 áður en þú reynir aftur.",
+       "login-throttled": "Þér hefur of oft mistekist að skrá þig inn með þessu notandanafni.\nBíddu $1 áður en þú reynir aftur.",
        "login-abort-generic": "Innskráningin misheppnaðist - hætt var við hana.",
-       "login-migrated-generic": "Aðgangurinn þinn hefur verið sameinaður og notendanafnið þitt finnst ekki lengur á þessum wiki.",
+       "login-migrated-generic": "Aðgangurinn þinn hefur verið sameinaður og notandanafnið þitt finnst ekki lengur á þessum wiki.",
        "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.",
        "retypenew": "Endurtaktu nýja lykilorðið:",
        "resetpass_submit": "Skrifaðu aðgangsorðið og skráðu þig inn",
        "changepassword-success": "Það tókst að breyta lykilorðinu þínu!",
-       "changepassword-throttled": "Þú hefur gert of margar tilraunir til innskráningar.\nVinsamlegast bíddu í $1 áður en þú reynir aftur.",
+       "changepassword-throttled": "Þú hefur gert of margar tilraunir til innskráningar að undanförnu.\nBíddu í $1 áður en þú reynir aftur.",
+       "botpasswords-label-create": "Búa til",
+       "botpasswords-label-update": "Uppfæra",
+       "botpasswords-label-cancel": "Hætta við",
+       "botpasswords-label-delete": "Eyða",
+       "botpasswords-label-resetpassword": "Endurstilla lykilorðið",
        "resetpass_forbidden": "Ekki er hægt að breyta lykilorðum",
        "resetpass-no-info": "Þú verður að vera skráð(ur) inn til að hafa aðgang að þessari síðu.",
        "resetpass-submit-loggedin": "Breyta lykilorði",
        "resetpass-submit-cancel": "Hætta við",
-       "resetpass-wrong-oldpass": "Vitlaust tímabundið eða núverandi lykilorð.\nÞú gætir þegar verið búin/n að breyta lykilorðinu eða sótt um nýtt tímabundið lykilorð",
-       "resetpass-temp-password": "Tímabundið lykilorð:",
+       "resetpass-wrong-oldpass": "Vitlaust bráðabirgða- eða núverandi lykilorð.\nÞú gætir þegar verið búin/n að breyta lykilorðinu eða sótt um nýtt bráðabirgðalykilorð",
+       "resetpass-temp-emailed": "Þú skráðir þig inn með bráðabirgðakóða úr tölvupósti.\nTil að klára að skrá þig inn, verður þú að velja nýtt lykilorð hér:",
+       "resetpass-temp-password": "Bráðabirgðalykilorð:",
        "resetpass-abort-generic": "Breytingum á lykilorðum hefur verið hætt með viðbót.",
+       "resetpass-expired": "Lykilorðið þitt er útrunnið. Skráðu nýtt lykilorð til að skrá þig inn.",
        "passwordreset": "Endurstilla lykilorð",
        "passwordreset-text-one": "Útfylltu þetta eyðublað til þess að endursetja lykilorðið.",
        "passwordreset-disabled": "Lokað hefur verið fyrir að endurstilla lykilorð á þessum wiki.",
        "passwordreset-username": "Notandanafn:",
        "passwordreset-domain": "Lén:",
        "passwordreset-capture": "Sjá áminninguna sem var send í tölvupósti?",
-       "passwordreset-capture-help": "Ef þú hakar við þennan reit verður tölvupósturinn (með tímabundna lykilorðinu) sýndur þér og einnig sendur notandanum.",
+       "passwordreset-capture-help": "Ef þú hakar við þennan reit verður tölvupósturinn (með bráðabirgðalykilorðinu) sýndur þér og einnig sendur notandanum.",
        "passwordreset-email": "Netfang:",
        "passwordreset-emailtitle": "Notendaupplýsingar á {{SITENAME}}",
-       "passwordreset-emailtext-ip": "Einhver (líklegast þú, á vistfanginu $1) hefur beðið um \nendursetningu lykilorðsins þíns fyrir {{SITENAME}} ($4). Aðgangur eftirfarandi {{PLURAL:$3|notanda er|notendum eru}} tengd þessu netfangi:\n\n$2\n\nEf þetta er það sem þú vildir, þarftu að skrá þig inn og velja nýtt lykilorð. {{PLURAL:$3|Tímabundna lykilorðið rennur|Tímabundnu lykilorðin renna}} út eftir $5 {{PLURAL:$5|dag|daga}}.\n\nEf það varst ekki þú sem fórst fram á þetta, eða ef þú manst lykilorðið þitt, og villt ekki lengur breyta því, skaltu hunsa þessi skilaboð og halda áfram að nota gamla lykilorðið.",
-       "passwordreset-emailtext-user": "Notandinn $1 á {{SITENAME}} hefur beðið um endursetningu lykilorðsins þíns fyrir {{SITENAME}} ($4). Aðgangur eftirfarandi {{PLURAL:$3|notanda er|notendum eru}} tengd þessu netfangi:\n\n$2\n\nEf þetta er það sem þú vildir, þarftu að skrá þig inn og velja nýtt lykilorð. {{PLURAL:$3|Tímabundna lykilorðið rennur|Tímabundnu lykilorðin renna}} út eftir $5 {{PLURAL:$5|dag|daga}}.\n\nEf það varst ekki þú sem fórst fram á þetta, eða ef þú manst aftur lykilorðið þitt, og vilt ekki lengur breyta því, skaltu hunsa þessi skilaboð og halda áfram að nota gamla lykilorðið.",
-       "passwordreset-emailelement": "Notendanafn: \n$1\n\nTímabundið lykilorð: \n$2",
+       "passwordreset-emailtext-ip": "Einhver (líklegast þú, á vistfanginu $1) hefur beðið um \nendursetningu lykilorðsins þíns fyrir {{SITENAME}} ($4). Aðgangur eftirfarandi {{PLURAL:$3|notanda er|notenda er}} tengd þessu netfangi:\n\n$2\n\nEf þetta er það sem þú vildir, þarftu að skrá þig inn og velja nýtt lykilorð. {{PLURAL:$3|Tímabundna lykilorðið rennur|Tímabundnu lykilorðin renna}} út eftir $5 {{PLURAL:$5|dag|daga}}.\n\nEf það varst ekki þú sem fórst fram á þetta, eða ef þú manst lykilorðið þitt, og vilt ekki lengur breyta því, skaltu hunsa þessi skilaboð og halda áfram að nota gamla lykilorðið.",
+       "passwordreset-emailtext-user": "Notandinn $1 á {{SITENAME}} hefur beðið um endursetningu lykilorðsins þíns fyrir {{SITENAME}} ($4). Aðgangur eftirfarandi {{PLURAL:$3|notanda er|notendum eru}} tengd þessu netfangi:\n\n$2\n\nEf þetta er það sem þú vildir, þarftu að skrá þig inn og velja nýtt lykilorð. {{PLURAL:$3|Bráðabirgðalykilorðið rennur|Bráðabirgðalykilorðin renna}} út eftir $5 {{PLURAL:$5|dag|daga}}.\n\nEf það varst ekki þú sem fórst fram á þetta, eða ef þú manst aftur lykilorðið þitt, og vilt ekki lengur breyta því, skaltu hunsa þessi skilaboð og halda áfram að nota gamla lykilorðið.",
+       "passwordreset-emailelement": "Notandanafn: \n$1\n\nBráðabirgðalykilorð: \n$2",
        "passwordreset-emailsentemail": "Ef þetta netfang er skráð fyrir aðganginum þínum þá hefur töluvpóstur verið sendur til að endursetja lykilorðið.",
+       "passwordreset-emailsentusername": "Ef eitthvað netfang er skráð fyrir aðganginum þínum, þá mun verða sendur töluvpóstur til að endursetja lykilorðið.",
        "passwordreset-emailsent-capture": "Tölvupóstur til að endursetja lykilorðið hefur verið sendur í tölvupósti, sem er sýndur hér fyrir neðan.",
        "passwordreset-emailerror-capture": "Tölvupóstur til að endursetja lykilorðið var búinn til, sem er sýndur hér fyrir neðan, en ekki tókst að senda hana til {{GENDER:$2|notandans}}: $1",
        "changeemail": "Breyta eða fjarlægja netfang",
        "changeemail-none": "(ekkert)",
        "changeemail-password": "{{SITENAME}} lykilorðið þitt:",
        "changeemail-submit": "Breyta netfangi",
+       "changeemail-throttled": "Þú hefur gert of margar tilraunir til innskráningar.\nBíddu í $1 áður en þú reynir aftur.",
+       "changeemail-nochange": "Settu inn annað nýtt tölvupóstfang",
        "resettokens": "Endurstilla lykla",
        "resettokens-text": "Hér getur þú endurstillt lykla sem veita þér aðgang að ákveðnum persónuupplýsingum um aðganginn þinn.\n\nÞú átt að gera það ef þú ert búin(n) að deila þeim með einhverjum öðrum óviljandi eða ef búið er að brjóta inn í aðganginn þinn.",
        "resettokens-no-tokens": "Það eru engir lyklar að endurstilla.",
        "italic_tip": "Skáletraður texti",
        "link_sample": "Titill tengils",
        "link_tip": "Innri tengill",
-       "extlink_sample": "http://www.example.com titill tengils",
-       "extlink_tip": "Ytri tengill (mun að setja http:// á undan)",
+       "extlink_sample": "http://www.dæmi.is titill tengils",
+       "extlink_tip": "Ytri tengill (muna að setja http:// á undan)",
        "headline_sample": "Fyrirsagnartexti",
        "headline_tip": "Annars stigs fyrirsögn",
        "nowiki_sample": "Innsetjið ósniðinn texta hér",
        "preview": "Forskoða",
        "showpreview": "Forskoða",
        "showdiff": "Sýna breytingar",
-       "anoneditwarning": "<strong>Viðvörun:</strong> Þú ert ekki innskráð(ur). Vistfang þitt verður sýnt opinberlega ef þú gerir einhverjar breytingar. Ef þú <strong>[$1 skráir þig inn]</strong> eða <strong>[$2 stofnar aðgang]</strong> munu breytingarnar þínar vera tengdar við notendanafn þitt, ásamt öðrum kostum.",
+       "anoneditwarning": "<strong>Viðvörun:</strong> Þú ert ekki innskráð(ur). Vistfang þitt verður sýnt opinberlega ef þú gerir einhverjar breytingar. Ef þú <strong>[$1 skráir þig inn]</strong> eða <strong>[$2 stofnar aðgang]</strong> munu breytingarnar þínar vera tengdar við notandanafn þitt, ásamt öðrum kostum.",
        "anonpreviewwarning": "Þú ert ekki innskráð(ur). Vistfang þitt skráist í breytingaskrá síðunnar.",
        "missingsummary": "'''Áminning:''' Þú hefur ekki skrifað breytingarágrip.\nEf þú smellir á Vista aftur, verður breyting þín vistuð án þess.",
        "missingcommenttext": "Gerðu svo vel og skrifaðu athugasemd fyrir neðan.",
        "summary-preview": "Forskoða breytingarágrip:",
        "subject-preview": "Forskoðun umræðuefnis:",
        "blockedtitle": "Notandi er bannaður",
-       "blockedtext": "'''Notandanafn þitt eða vistfang hefur verið bannað.'''\n\nBannið var sett af $1.\nÁstæðan er eftirfarandi: ''$2''.\n\n* Bannið hófst: $8\n* Banninu lýkur: $6\n* Sá sem banna átti: $7\n\nÞú getur haft samband við $1 eða annan [[{{MediaWiki:Grouppage-sysop}}|stjórnanda]] til að ræða bannið.\nÞú getur ekki notað „Senda þessum notanda tölvupóst“ aðgerðina nema gilt netfang sé skráð í [[Special:Preferences|notandastillingum þínum]] og að þér hafi ekki verið óheimilað það.\nNúverandi vistfang þitt er $3, og bönnunarnúmerið er #$5.\nVinsamlegast tilgreindu allt að ofanverðu í fyrirspurnum þínum.",
-       "autoblockedtext": "Vistfang þitt hefur verið sjálfvirkt bannað því það var notað af öðrum notanda, sem var bannaður af $1.\nÁstæðan er eftirfarandi:\n\n:''$2''\n\n* Bannið hófst: $8\n* Banninu lýkur: $6\n* Sá sem banna átti: $7\n\nÞú getur haft samband við $1 eða annan [[{{MediaWiki:Grouppage-sysop}}|stjórnanda]] til að ræða bannið.\n\nAthugaðu að þú getur ekki notað „Senda þessum notanda tölvupóst“ aðgerðina nema gilt netfang sé skráð í [[Special:Preferences|notandastillingum þínum]] og að þér hafi ekki verið óheimilað það.\n\nNúverandi vistfang þitt er $3, og bönnunarnúmerið er #$5.\nVinsamlegast tilgreindu allt að ofanverðu í fyrirspurnum þínum.",
+       "blockedtext": "'''Notandanafn þitt eða vistfang hefur verið bannað.'''\n\nBannið var sett af $1.\nÁstæðan er eftirfarandi: ''$2''.\n\n* Bannið hófst: $8\n* Banninu lýkur: $6\n* Sá sem banna átti: $7\n\nÞú getur haft samband við $1 eða annan [[{{MediaWiki:Grouppage-sysop}}|stjórnanda]] til að ræða bannið.\nÞú getur ekki notað „Senda þessum notanda tölvupóst“ aðgerðina nema gilt netfang sé skráð í [[Special:Preferences|kjörstillingum þínum]] og að þér hafi ekki verið óheimilað það.\nNúverandi vistfang þitt er $3, og bannnúmerið er #$5.\nHafðu með allar þessar upplýsingar hér fyrir ofan í fyrirspurnum þínum.",
+       "autoblockedtext": "Vistfang þitt hefur verið sjálfvirkt bannað því það var notað af öðrum notanda, sem var bannaður af $1.\nÁstæðan er eftirfarandi:\n\n:''$2''\n\n* Bannið hófst: $8\n* Banninu lýkur: $6\n* Sá sem banna átti: $7\n\nÞú getur haft samband við $1 eða annan [[{{MediaWiki:Grouppage-sysop}}|stjórnanda]] til að ræða bannið.\n\nAthugaðu að þú getur ekki notað „Senda þessum notanda tölvupóst“ aðgerðina nema gilt netfang sé skráð í [[Special:Preferences|kjörstillingum þínum]] og að þér hafi ekki verið óheimilað það.\n\nNúverandi vistfang þitt er $3, og bannnúmerið er #$5.\nHafðu með allar þessar upplýsingar hér fyrir ofan í fyrirspurnum þínum.",
        "blockednoreason": "engin ástæða gefin",
        "whitelistedittext": "Þú þarft að $1 þig til að breyta síðum.",
-       "confirmedittext": "Þú verður að staðfesta netfangið þitt áður en þú getur breytt síðum. Vinsamlegast stilltu og staðfestu netfangið þitt í gegnum [[Special:Preferences|stillingarnar]].",
+       "confirmedittext": "Þú verður að staðfesta netfangið þitt áður en þú getur breytt síðum. Stilltu og staðfestu netfangið þitt í gegnum [[Special:Preferences|kjörstillingarnar]].",
        "nosuchsectiontitle": "Hluti ekki til",
        "nosuchsectiontext": "Þú reyndir að breyta hluta sem er ekki til.\nHlutinn gæti hafa verið fluttur til eða hent á meðan þú varst að skoða síðuna.",
        "loginreqtitle": "Innskráningar krafist",
        "newarticle": "(Ný)",
        "newarticletext": "Þú hefur fylgt tengli á síðu sem ekki er til ennþá.\nÞú getur búið til síðu með þessu nafni með því að skrifa í formið fyrir neðan\n(meiri upplýsingar í [$1 hjálpinni]).\nEf þú hefur óvart villst hingað geturðu notað '''til baka'''-hnappinn í vafranum þínum.",
        "anontalkpagetext": "----''Þetta er spjallsíða fyrir óþekktan notanda sem hefur ekki búið til aðgang ennþá, eða notar hann ekki.\nÞar af leiðandi þurfum við að nota vistfang til að bera kennsli á hann/hana.\nNokkrir notendur geta deilt sama vistfangi.\nEf þú ert óþekktur notandi og finnst að óviðkomandi athugasemdum hafa verið beint að þér, gjörðu svo vel og [[Special:UserLogin/signup|búðu til aðgang]] eða [[Special:UserLogin|skráðu þig inn]] til þess að koma í veg fyrir þennan rugling við aðra óþekkta notendur í framtíðinni.''",
-       "noarticletext": "Enginn texti er á þessari síðu enn sem komið er.\nÞú getur [[Special:Search/{{PAGENAME}}|leitað í öðrum síðum]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} leitað í tengdum skrám], eða [{{fullurl:{{FULLPAGENAME}}|action=edit}} breytt henni sjálfur]</span>.",
+       "noarticletext": "Enginn texti er á þessari síðu enn sem komið er.\nÞú getur [[Special:Search/{{PAGENAME}}|leitað að þessum titli]], í öðrum síðum,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} leitað í tengdum skrám], eða [{{fullurl:{{FULLPAGENAME}}|action=edit}} búið hana til]</span>.",
        "noarticletext-nopermission": "Það er enginn texti á þessari síðu eins og er.\nÞú getur [[Special:Search/{{PAGENAME}}|leitað að þessum titli]] í öðrum síðum, eða <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} leitað í tengdum skrám]</span>, en þú hefur ekki réttindi til þess að stofna þessa síðu.",
-       "missing-revision": "Útgáfa #$1 síðunnar „{{FULLPAGENAME}}\" er ekki til.\n\nÞetta gerist oftast þegar úreld breytingarskrá tengir á síðu sem hefur verið eytt. Frekari upplýsingar eru í [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} eyðingarskránni].",
+       "missing-revision": "Útgáfa #$1 síðunnar „{{FULLPAGENAME}}\" er ekki til.\n\nÞetta gerist oftast þegar úreld breytingaskrá tengir á síðu sem hefur verið eytt. Frekari upplýsingar eru í [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} eyðingarskránni].",
        "userpage-userdoesnotexist": "Notandaaðgangurinn „<nowiki>$1</nowiki>“ er ekki skráður.\nGjörðu svo vel og athugaðu hvort að þú viljir skapa/breyta þessari síðu.",
        "userpage-userdoesnotexist-view": "Notandinn \"$1\" er ekki skráður.",
-       "blocked-notice-logextract": "Þessi notandi er í banni.\nSíðasta færsla notandans úr bönnunarskrá er sýnd hér fyrir neðan til skýringar:",
+       "blocked-notice-logextract": "Þessi notandi er í banni.\nSíðasta færsla notandans úr bannskrá er birt hér fyrir neðan til skýringar:",
        "clearyourcache": "'''Athugaðu:''' Eftir vistun kann að vera að þú þurfir að komast hjá skyndiminni vafrans þíns til að sjá breytingarnar.\n* '''Firefox / Safari:''' Haltu ''Shift'' samtímis og þú smellir á ''Endurhlaða (Reload)'', eða ýttu á annaðhvort ''Ctrl-F5'' eða ''Ctrl-R'' (''⌘-R'' á Mac)\n* '''Google Chrome:''' Ýttu á ''Ctrl-Shift-R'' (''⌘-Shift-R'' á Mac)\n* '''Internet Explorer:''' Haltu ''Ctrl'' samtímis og þú smellir á ''Endurnýja (Refresh)'', eða ýttu á ''Ctrl-F5''\n* '''Opera:''' Hreinsaðu skyndiminnið í ''Verkfæri (Tools) → Stillingar (Preferences)''",
        "usercssyoucanpreview": "'''Ath:''' Hægt er að nota „{{int:showpreview}}“ hnappinn til að prófa CSS-kóða áður en hann er vistaður.",
        "userjsyoucanpreview": "'''Ath:''' Hægt er að nota \"{{int:showpreview}}\" hnappinn til að prófa JavaScript-kóða áður en hann er vistaður.",
        "userjspreview": "'''Mundu að þú ert aðeins að prófa/forskoða JavaScript-kóðann þinn.'''\n'''Hann hefur ekki enn verið vistaður!'''",
        "sitecsspreview": "'''Mundu að þú ert aðeins að forskoða CSS-kóðann þinn.'''\n'''Hann hefur ekki enn verið vistaður!'''",
        "sitejspreview": "'''Mundu að þú ert aðeins að prófa/forskoða JavaScript-kóðann.'''\n'''Hann hefur ekki enn verið vistaður!'''",
-       "userinvalidcssjstitle": "'''Viðvörun:''' Þemað $1 er ekki til. Sérsniðin CSS og JavaScript útlit nota lágstafi, t.d.  {{ns:user}}:Foo/vector.css en alls ekki {{ns:user}}:Foo/Vector.css.",
+       "userinvalidcssjstitle": "<strong>Viðvörun:</strong> Skinnið \"$1\" er ekki til. Sérsniðin CSS og JavaScript útlit nota lágstafi, t.d.  {{ns:user}}:Foo/vector.css en alls ekki {{ns:user}}:Foo/Vector.css.",
        "updated": "(Uppfært)",
        "note": "'''Athugið:'''",
        "previewnote": "'''Það sem sést hér er aðeins forskoðun og hefur ekki enn verið vistað!'''",
        "continue-editing": "Fara á breytingasvæði",
        "previewconflict": "Þessi forskoðun endurspeglar textann í efra breytingarsvæði eins og hann myndi líta út ef þú vistar.",
-       "session_fail_preview": "'''Því miður! Gat ekki unnið úr breytingum þínum vegna týndra lotugagna.\nVinsamlegast reyndu aftur síðar. Ef það virkar ekki heldur skaltu reyna að skrá þig út og inn á ný.'''",
-       "session_fail_preview_html": "'''Því miður gátum við ekki unnið úr breytingu þinni vegna týndra lotugagna.'''\n\n''Því {{SITENAME}} styður hráan HTML-kóða er forskoðunin falin sem vörn gegn JavaScript árásum..''\n\n'''Ef þetta er vingjarnleg breyting, reyndu þá aftur.'''\nEf þetta leysir ekki vandamálið, reyndu að [[Special:UserLogout|skrá þig út]] og skrá þig aftur inn.",
+       "session_fail_preview": "Því miður! Við gátum ekki unnið úr breytingu þinni vegna týndra setugagna.\n\nÞú hefur kannski verið skráð/ur út. <strong>Sannreyndu hvort þú sért ennþá skráð/ur inn og reyndu aftur</strong>.\nEf það virkar ekki, reyndu að [[Special:UserLogout|skrá þig út]], skrá þig aftur inn og athugaðu hvort vafrinn þinn leyfi vefkökur frá þessu vefsvæði.",
+       "session_fail_preview_html": "Afsakaðu! Við gátum ekki unnið úr breytingunni þinni vegna týndra setugagna.\n\n<em>Þar sem {{SITENAME}} styður hráan HTML kóða, þá hefur forskoðunin verið falin sem vörn gegn JavaScript árásum.</em>\n\n<strong>Ef þetta er lögleg breyting, reyndu þá aftur.</strong>\nEf það virkar ekki, reyndu að [[Special:UserLogout|skrá þig út]], skrá þig aftur inn og athugaðu hvort vafrinn þinn leyfi vefkökur frá þessu vefsvæði.",
        "token_suffix_mismatch": "'''Breytingu þinni hefur verið hafnað því að biðlarinn þinn ruglaði greinarmerkingum í breytingar tókanum.\"\nÞetta er gert til að hindra spillingu texta síðunnar.\nÞetta getur gerst þegar þú notar bilaðan vafra eða ónafngreinda vefsels þjónustu.",
        "edit_form_incomplete": "'''Sumir hlutar breytingarinnar bárust ekki til vefþjónsins; athugaðu hvort breytingin þín er óbreytt og reyndu aftur.'''",
        "editing": "Breyti $1",
        "nonunicodebrowser": "'''Viðvörun: Vafrarinn þinn styður ekki unicode.'''\nLausn er í gildi sem leyfir þér að breyta síðum: Stafatákn sem eru ekki í ASCII kerfinu birtast í breytingarglugganum eins og sextándakóðar.",
        "editingold": "'''ATH: Þú ert að breyta gamalli útgáfu þessarar síðu og munu allar breytingar sem gerðar hafa verið á henni frá þeirri útgáfu vera fjarlægðar ef þú vistar.'''",
        "yourdiff": "Mismunur",
-       "copyrightwarning": "Vinsamlegast athugaðu að öll framlög á {{SITENAME}} eru álitin leyfisbundin samkvæmt $2 (sjá $1 fyrir frekari upplýsingar).  Ef þú vilt ekki að skrif þín falli undir þetta leyfi og öllum verði frjálst að breyta og endurútgefa efnið samkvæmt því skaltu ekki leggja þau fram hér.<br />\nÞú berð ábyrgð á framlögum þínum, þau verða að vera þín skrif eða afrit texta í almannaeigu eða sambærilegs frjáls texta.\n'''AFRITIРEKKI HÖFUNDARRÉTTARVARIN VERK Á ÞESSA SÍÐU ÁN LEYFIS'''",
-       "copyrightwarning2": "Vinsamlegast athugið að aðrir notendur geta breytt eða fjarlægt öll framlög til {{SITENAME}}.\nEf þú vilt ekki að textanum verði breytt skaltu ekki senda hann inn hér.<br />\nÞú lofar okkur einnig að þú hafir skrifað þetta sjálfur, að efnið sé í almannaeigu eða að það heyri undir frjálst leyfi. (sjá $1).\n'''EKKI SENDA INN HÖFUNDARRÉTTARVARIРEFNI ÁN LEYFIS RÉTTHAFA!'''",
-       "longpageerror": "'''VILLA: Textinn sem þú sendir inn er $1 {{PLURAL:$1|kílóbæti}} að lengd, en hámarkið er $2 {{PLURAL:$2|kílóbæti}}. Ekki er hægt að vista textann.'''",
+       "copyrightwarning": "Vinsamlegast athugaðu að öll framlög á {{SITENAME}} eru álitin leyfisbundin samkvæmt $2 (sjá $1 fyrir frekari upplýsingar).  Ef þú vilt ekki að skrif þín falli undir þetta leyfi og öllum verði frjálst að breyta og endurútgefa efnið samkvæmt því skaltu ekki leggja þau fram hér.<br />\nÞú berð ábyrgð á framlögum þínum, þau verða að vera þín skrif eða afrit texta í almannaeigu eða sambærilegs frjáls texta.\n<strong>AFRITIРEKKI HÖFUNDARRÉTTARVARIN VERK Á ÞESSA SÍÐU ÁN LEYFIS</strong>",
+       "copyrightwarning2": "Vinsamlegast athugið að aðrir notendur geta breytt eða fjarlægt öll framlög til {{SITENAME}}.\nEf þú vilt ekki að textanum verði breytt skaltu ekki senda hann inn hér.<br />\nÞú lofar okkur einnig að þú hafir skrifað þetta sjálfur, að efnið sé í almannaeigu eða að það heyri undir frjálst leyfi. (sjá $1).\n<strong>EKKI SENDA INN HÖFUNDARRÉTTARVARIРEFNI ÁN LEYFIS RÉTTHAFA!</strong>",
+       "longpageerror": "<strong>VILLA: Textinn sem þú sendir inn er $1 {{PLURAL:$1|eitt kílóbæti|$1 kílóbæti}} að lengd, en hámarkið er $2 {{PLURAL:$2|eitt kílóbæti|$2 kílóbæti}}.</strong>Ekki er hægt að vista textann.",
        "readonlywarning": "<strong>AÐVÖRUN: Gagnagrunninum hefur verið læst til að unnt sé að framkvæma viðhaldsaðgerðir, svo þú getur ekki vistað breytingar þínar núna.</strong>\nÞú ættir að klippa og líma textann yfir í textaskjal til þess að geyma hann til seinni tíma.\n\nKerfisstjórinn sem læsti honum gaf þessa skýringu: $1",
        "protectedpagewarning": "'''Viðvörun: Þessari síðu hefur verið læst svo aðeins notendur með möppudýraréttindi geti breytt henni.'''\nSíðasta færsla síðunnar úr verndunarskrá er sýnd til skýringar:",
        "semiprotectedpagewarning": "'''Athugið''': Þessari síðu hefur verið læst þannig að aðeins innskráðir notendur geti breytt henni.\nSíðasta færsla síðunnar úr verndunarskrá er sýnd til skýringar:",
        "cascadeprotectedwarning": "<strong>Viðvörun:</strong> Þessari síðu hefur verið læst svo aðeins möppudýr geta breytt henni, því hún er ítengd keðjuvörn eftirfarandi {{PLURAL:$1|síðu|síðna}}:",
        "titleprotectedwarning": "''VIÐVÖRUN: Þessari síðu hefur verið læst svo aðeins [[Special:ListGroupRights|sérstakir notendur]] geta breytt henni.'''\nVerndunarskrá síðunnar er gefin fyrir neðan til tilvísunar.",
-       "templatesused": "Snið {{PLURAL:$1|notað|notuð}} á þessari síðu:",
-       "templatesusedpreview": "Snið {{PLURAL:$1|notað|notuð}} í forskoðuninni:",
-       "templatesusedsection": "Snið {{PLURAL:$1|notað|notuð}} í þessum hluta:",
+       "templatesused": "Sniðmát {{PLURAL:$1|notað|notuð}} á þessari síðu:",
+       "templatesusedpreview": "Sniðmát {{PLURAL:$1|notað|notuð}} í forskoðuninni:",
+       "templatesusedsection": "Sniðmát {{PLURAL:$1|notað|notuð}} í þessum hluta:",
        "template-protected": "(vernduð)",
        "template-semiprotected": "(hálfvernduð)",
        "hiddencategories": "Þessi síða er meðlimur í $1 {{PLURAL:$1|földum flokki|földum flokkum}}:",
-       "edittools": "<!-- Þessi texti verður sýndur undir breytingar og upphölunar eyðublöðum. -->",
+       "edittools": "<!-- Þessi texti verður sýndur undir breytinga- og innhleðslueyðublöðum. -->",
+       "edittools-upload": "-",
        "nocreatetext": "{{SITENAME}} hefur takmarkað eiginleikann að gera nýjar síður.\nÞú getur farið til baka og breytt núverandi síðum, eða [[Special:UserLogin|skráð þið inn eða búið til aðgang]].",
        "nocreate-loggedin": "Þú hefur ekki leyfi til að búa til nýjar síður.",
        "sectioneditnotsupported-title": "Hlutabreyting er ekki virk",
        "sectioneditnotsupported-text": "Hlutabreyting er ekki virk á þessari síðu.",
-       "permissionserrors": "Leyfisvilla",
+       "permissionserrors": "Aðgangsheimildavilla",
        "permissionserrorstext": "Þú hefur ekki leyfi til að gera þetta, af eftirfarandi {{PLURAL:$1|ástæðu|ástæðum}}:",
        "permissionserrorstext-withaction": "Þú hefur ekki réttindi til að $2, af eftirfarandi {{PLURAL:$1|ástæðu|ástæðum}}:",
        "recreate-moveddeleted-warn": "'''Viðvörun: Þú ert að endurskapa síðu sem áður hefur verið eytt.'''\n\nAthuga skal hvort viðeigandi sé að gera þessa síðu.\nEyðingarskrá og flutningaskrá fyrir þessa síðu eru útvegaðar hér til þæginda:",
        "moveddeleted-notice": "Þessari síðu hefur verið eytt.\nEyðingaskrá og flutningaskrá síðunnar eru gefnar fyrir neðan til tilvísunar.",
-       "log-fulllog": "Skoða alla aðgerðarskránna",
+       "log-fulllog": "Skoða alla aðgerðaskrána",
        "edit-hook-aborted": "Breyting síðu stöðvuð af viðbótarkrók (extension hook).\nEngin skýring gefin.",
        "edit-gone-missing": "Gat ekki uppfært síðu.\nSvo virðist sem henni hafi verið eytt.",
        "edit-conflict": "Breytingaárekstur.",
        "content-failed-to-parse": "Gat ekki þáttað $2 efni samkvæmt $1 líkani: $3",
        "invalid-content-data": "Ógild efnisgögn.",
        "content-not-allowed-here": "„$1“ efni er ekki leyfilegt á síðunni [[$2]]",
-       "editwarning-warning": "Ef farið er frá þessari síðu gætu þær breytingar sem þú hefur gert tapast.\nEf þú ert skráður inn, þá getur þú óvirkjað þessi skilaboð í „{{int:prefs-editing}}\" undir stillingum.",
+       "editwarning-warning": "Ef farið er af þessari síðu gætu þær breytingar sem þú hefur gert tapast.\nEf þú ert skráður inn, þá getur þú gert þessi skilaboð óvirk í „{{int:prefs-editing}}\"-hluta kjörstillinganna þinna.",
        "content-model-wikitext": "wiki-texti",
        "content-model-text": "hreinn texti",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
-       "duplicate-args-category": "Síður með eins gildi í ítengingu sniðs",
+       "duplicate-args-category": "Síður sem nota tvíteknar breytur við ítengingu sniðmáts",
        "expensive-parserfunction-warning": "'''Viðvörun:''' Þessi síða inniheldur of mörg vinnslufrek aðgerðar þáttunar köll.\n\nHún ætti að innihalda minna en $2 {{PLURAL:$2|kall|köll}}, en {{PLURAL:$1|er nú $1 kall|eru nú $1 köll}}.",
        "expensive-parserfunction-category": "Síður með of mörg vinnslufrek aðgerðar þáttunar köll",
-       "post-expand-template-inclusion-warning": "'''Viðvörun:''' Sniðið tekur of mikið pláss.\nHluti sniðsins verður ekki með.",
+       "post-expand-template-inclusion-warning": "'''Viðvörun:''' Stærð innfellingar sniðmáta er of mikil.\nHluti sniðmátanna verður ekki með.",
        "post-expand-template-inclusion-category": "Síður þar sem eru stærri en stærðartakmörkun sniða segir til um",
        "post-expand-template-argument-warning": "'''Viðvörun:''' Þessi síða inniheldur í minnsta lagi eitt vinnslufrekt frumgildi.\nÞeim hefur verið sleppt.",
-       "post-expand-template-argument-category": "Síður sem innihalda frumbreytur sniða sem hefur verið sleppt",
-       "parser-template-loop-warning": "Lykkja í sniði fundin: [[$1]]",
-       "parser-template-recursion-depth-warning": "Sniðið er sjálkveðið of mörgum sinnum ($1)",
+       "post-expand-template-argument-category": "Síður sem innihalda frumbreytur sniðmáta sem hefur verið sleppt",
+       "parser-template-loop-warning": "Hringvensl fundust í sniðmátum: [[$1]]",
+       "parser-template-recursion-depth-warning": "Farið út fyrir endurkvæmnismörk sniðmáts ($1)",
        "language-converter-depth-warning": "Farið út fyrir dýptarmörk tungumálabreytara ($1)",
        "node-count-exceeded-category": "Síður þar sem er umframfjöldi hnúta",
        "node-count-exceeded-warning": "Síðan fór fram yfir nóðutölu",
        "parser-unstrip-loop-warning": "\"Unstrip\" lykkja fannst",
        "parser-unstrip-recursion-limit": "Farið út fyrir „unstrip“ endurkvæmnismörk ($1)",
        "converter-manual-rule-error": "Villa í reglu handvirks tungumálabreytis",
-       "undo-success": "Breytingin hefur verið tekin tilbaka. Vinsamlegast staðfestu og vistaðu svo.",
+       "undo-success": "Það er hægt að afturkalla breytinguna.\nAthugaðu vel samanburðinn hér fyrir neðan til að sannreyna að það sé það sem þú vilt gera, vistaðu svo breytingarnar hér fyrir neðan til að ljúka afturköllun breytinganna.",
        "undo-failure": "Breytinguna var ekki hægt að taka tilbaka vegna breytinga í millitíðinni.",
        "undo-norev": "Ekki var hægt að taka breytinguna aftr því að hún er ekki til eða henni var eytt.",
        "undo-nochange": "Breytingin virðist þegar hafa verið tekin til baka.",
        "rev-deleted-event": "(smáatriði atriðs fjarlægt)",
        "rev-deleted-user-contribs": "[notandanafn eða vistfang falið - breyting falin í framlögum]",
        "rev-deleted-text-permission": "Þessari útgáfu síðunnar hefur verið '''eytt'''.\nFrekari upplýsingar eru í [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} eyðingaskrá].",
+       "rev-suppressed-text-permission": "Þessari útgáfu síðunnar hefur verið <strong>bæld niður</strong>.\nFrekari upplýsingar eru í [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} bælingarskrá].",
        "rev-deleted-text-unhide": "Þessari útgáfu síðunnar hefur verið '''eytt'''.\nFrekari upplýsingar eru í [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} eyðingaskrá].\nÞú getur enn skoðað [$1 þessa útgáfu] ef þú vilt halda áfram.",
        "rev-suppressed-text-unhide": "Þessari útgáfu síðunnar hefur verið '''bæld niður'''.\nFrekari upplýsingar eru í [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} bælingarskrá].\nÞú getur enn skoðað [$1 þessa útgáfu] ef þú vilt halda áfram.",
        "rev-deleted-text-view": "Þessari útgáfu síðunnar hefur verið '''eytt'''.\nÞú getur enn skoðað hana; frekari upplýsingar eru í [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} eyðingaskrá].",
        "revdelete-show-file-confirm": "Ertu viss um að þú viljir sjá eydda breytingu af síðunni \"<nowiki>$1</nowiki>\" frá $2 $3?",
        "revdelete-show-file-submit": "Já",
        "logdelete-selected": "{{PLURAL:$1|Valin aðgerð|Valdar aðgerðir}}:",
-       "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-confirm": "Staðfestu að þú viljir gera þetta, að þú skiljir afleiðingarnar og að þú sért að gera þetta í samræmi við  [[{{MediaWiki:Policy-url}}|samþykktir]].",
        "revdelete-suppress-text": "Bælingu á '''eingöngu''' að nota í eftirfarandi tilfellum:\n* Mögulegar ærumleiðandi upplýsingar\n* Óviðeigandi persónulegar upplýsingar\n*: ''heimilisfang, símanúmer, kennitala, osfrv.''",
        "revdelete-legend": "Setja sjáanlegar hamlanir",
        "revdelete-hide-text": "Breytingatexti",
        "revdelete-hide-image": "Fela efni skráar",
-       "revdelete-hide-name": "Fela aðgerð og mark",
+       "revdelete-hide-name": "Fela viðkomandi auk gilda",
        "revdelete-hide-comment": "Breytingarágrip",
        "revdelete-hide-user": "Notandanafn/vistfang",
        "revdelete-hide-restricted": "Dylja gögn frá stjórnendum og öðrum",
        "revdelete-submit": "Setja á {{PLURAL:$1|valda breytingu|valdar breytingar}}",
        "revdelete-success": "'''Sýnileiki útgáfu er uppfærð.'''",
        "revdelete-failure": "'''Mistókst að uppfæra sýnileika útgáfu:'''\n$1",
-       "logdelete-success": "'''Sýnleiki aðgerðarskráar uppfærður.'''",
-       "logdelete-failure": "'''Mistókst að uppfæra sýnileika aðgerðarskráar:'''\n$1",
+       "logdelete-success": "Sýnleiki aðgerðaskrár uppfærður.",
+       "logdelete-failure": "Mistókst að uppfæra sýnileika aðgerðaskrár:\n$1",
        "revdel-restore": "Breyta sýn",
        "pagehist": "Breytingaskrá",
        "deletedhist": "Eyðingaskrá",
        "revdelete-modify-no-access": "Mistókst að breyta hlut frá $1 $2: Þessi breyting hefur verið merkt sem „takmörkuð”.\nÞú hefur ekki aðgang að henni.",
        "revdelete-modify-missing": "Mistókst að breyta hlut með auðkennið $1: Hann finnst ekki í gagnabankanum!",
        "revdelete-no-change": "'''Viðvörun:''' Breytingin frá $1 $2 hefur þegar umbeðnar sýnileika stillingar.",
-       "revdelete-concurrent-change": "Mistókst að breyta hlut frá $1 $2: Stöðu hans virðist hafa verið breytt af einhverjum öðrum á meðan þú reyndir að breyta honum.\nVinsamlegast athugaðu í aðgerðarskránum.",
+       "revdelete-concurrent-change": "Mistókst að breyta atriði dagsettu $1 $2: Stöðu þess virðist hafa verið breytt af einhverjum öðrum á meðan þú reyndir að breyta því.\nAthugaðu hvað ritað var í aðgerðaskrárnar.",
        "revdelete-only-restricted": "Mistókst að fela breytingu frá $1 $2: Þú getur ekki falið breytingu fyrir möppudýrum án þess að velja eina af hinum sýnileika stillingunum.",
        "revdelete-reason-dropdown": "*Algengar eyðingarástæður\n**Höfundarréttarbrot\n**Óviðeigandi athugasemdir eða persónuuplýsingar\n**Óviðeigandi notandanafn\n**Mögulega ærumleiðandi upplýsingar",
        "revdelete-otherreason": "Aðrar/fleiri ástæður:",
        "suppressionlog": "Bælingarskrá",
        "suppressionlogtext": "Hér fyrir neðan er listi af eyðingum og bönnum sem innihalda efni sem hefur verið falið fyrir stjórnendum.\nSjáðu [[Special:BlockList|bannlistann]] fyrir lista yfir núverandi bönn.",
        "mergehistory": "Sameina breytingaskrár",
-       "mergehistory-header": "Þessi síða gerir þér kleift að sameina breytingarskrá tveggja síðna.\nSjáðu til þess að þessi breyting sameini breytingarskrárnar samfellt.",
-       "mergehistory-box": "Sameina breytingarskrá tveggja síðna:",
+       "mergehistory-header": "Þessi síða gerir þér kleift að sameina breytingaskrá tveggja síðna.\nSjáðu til þess að þessi breyting sameini breytingaskrárnar samfellt.",
+       "mergehistory-box": "Sameina breytingaskrár tveggja síðna:",
        "mergehistory-from": "Upprunaleg síða:",
        "mergehistory-into": "Áætlunarsíða:",
-       "mergehistory-list": "Breytingarskrá sem hægt er að sameina",
-       "mergehistory-merge": "Eftirtaldar útgáfur [[:$1]] má sameina [[:$2]].\nNotaðu valtakkadálkinn til þess að sameina aðeins þær útgáfur sem stofnaðar voru fyrir uppgefið tímamark.\nAthugaðu að með því að nota flakktenglana er þessi dálkur endurstilltur.",
+       "mergehistory-list": "Breytingaskrár sem hægt er að sameina",
+       "mergehistory-merge": "Eftirtaldar útgáfur [[:$1]] má sameina [[:$2]].\nNotaðu valreitadálkinn til þess að sameina aðeins þær útgáfur sem stofnaðar voru fyrir uppgefið tímamark.\nAthugaðu að með því að nota flakktenglana er þessi dálkur endurstilltur.",
        "mergehistory-go": "Sýna breytingar sem hægt er að sameina",
        "mergehistory-submit": "Sameina útgáfur",
        "mergehistory-empty": "Engar útgáfur sem hægt er að sameina.",
        "mergehistory-done": "$3 {{PLURAL:$3|útgáfa|útgáfur}} af $1 {{PLURAL:$3|var|voru}} sameinaðar í [[:$2]].",
-       "mergehistory-fail": "Gat ekki sameinað breytingasögur. Vinsamlegast athugaðu síðuna og tímabreyturnar.",
+       "mergehistory-fail": "Gat ekki sameinað breytingaskrár. Athugaðu vel síðuna og tímabreyturnar.",
+       "mergehistory-fail-bad-timestamp": "Tímamerkið er ógilt.",
        "mergehistory-no-source": "Upprunasíðan $1 er ekki til.",
        "mergehistory-no-destination": "Marksíðan $1 er ekki til.",
        "mergehistory-invalid-source": "Upprunasíðan verður að hafa gildan titil.",
        "editundo": "afturkalla þessa breytingu",
        "diff-empty": "(Enginn munur)",
        "diff-multi-sameuser": "($1 {{PLURAL:$1|millibreyting ekki sýnd|millibreytingar ekki sýndar}} frá sama notandanum)",
+       "diff-multi-otherusers": "($1 {{PLURAL:$1|millibreyting ekki sýnd|millibreytingar ekki sýndar}} frá $2 {{PLURAL:$2|notanda|notendum}})",
        "diff-multi-manyusers": "($1 {{PLURAL:$1|millibreyting ekki sýnd|millibreytingar ekki sýndar}} frá fleiri en $2 {{PLURAL:$2|notanda|notendum}}.)",
        "difference-missing-revision": "$2 {{PLURAL:$2|útgáfa|útgáfur}} samanburðarins ($1) {{PLURAL:$2|fannst|fundust}} ekki.\n\nÞetta gerist oftast þegar úreldur samanburðartengill tengir á síðu sem hefur verið eytt.\nFrekari upplýsingar eru í [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} eyðingarskránni].",
        "searchresults": "Leitarniðurstöður",
        "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": "<strong>Skapaðu síðuna „[[:$1]]“ á þessum wiki!<strong>\nSjá einnig {{PLURAL:$2|0=|leitarniðurstöðuna|leitarniðurstöðurnar}}.",
+       "searchmenu-new": "<strong>Útbúðu síðuna „[[:$1]]“ á þessum wiki!</strong>\nSkoðaðu einnig {{PLURAL:$2|0=|leitarniðurstöðuna|leitarniðurstöðurnar}}.",
        "searchprofile-articles": "Efnissíður",
        "searchprofile-images": "Margmiðlanir",
        "searchprofile-everything": "Allt",
        "searchprofile-advanced-tooltip": "Leita í ákveðnum nafnrýmum",
        "search-result-size": "$1 ({{PLURAL:$2|1 orð|$2 orð}})",
        "search-result-category-size": "{{PLURAL:$1|1 meðlimur|$1 meðlimir}} ({{PLURAL:$2|1 undirflokks|$2 undirflokka}}, {{PLURAL:$3|1 skrá|$3 skrár}})",
-       "search-redirect": "(tilvísun $1)",
+       "search-redirect": "(endurbeining $1)",
        "search-section": "(hluti $1)",
        "search-category": "(flokkur $1)",
        "search-file-match": "(passar við innihald skráa)",
        "search-external": "Ytri leit",
        "searchdisabled": "{{SITENAME}}-leit er óvirk.\nÞú getur leitað í genum Google á meðan.\nAthugaðu að skrár þeirra yfir {{SITENAME}}-efni kunna að vera úreltar.",
        "search-error": "Villa kom upp við leit að: $1",
-       "preferences": "Stillingar",
-       "mypreferences": "Mínar stillingar",
+       "preferences": "Kjörstillingar",
+       "mypreferences": "Kjörstillingar",
        "prefs-edits": "Fjöldi breytinga:",
-       "prefs-skin": "Þema",
+       "prefsnologintext2": "Skráðu þig inn til að breyta kjörstillingum þínum.",
+       "prefs-skin": "Skinn",
        "skin-preview": "Forskoða",
        "datedefault": "Sjálfgefið",
        "prefs-labs": "Stillingar á tilraunastigi",
        "prefs-personal": "Notandaupplýsingar",
        "prefs-rc": "Nýlegar breytingar",
        "prefs-watchlist": "Vaktlistinn",
+       "prefs-editwatchlist": "Breyta vaktlistanum",
+       "prefs-editwatchlist-label": "Breyting færslna á vaktlista:",
+       "prefs-editwatchlist-edit": "Skoða og fjarlægja titla á vaktlista",
+       "prefs-editwatchlist-raw": "Breyta opnum vaktlista",
+       "prefs-editwatchlist-clear": "Hreinsa vaktlista",
        "prefs-watchlist-days": "Fjöldi daga sem vaktlistinn nær yfir:",
        "prefs-watchlist-days-max": "Hámark $1 {{PLURAL:$1|dagur|dagar}}",
        "prefs-watchlist-edits": "Fjöldi breytinga sem vaktlistinn nær yfir:",
        "recentchangesdays": "Fjöldi daga sem nýlegar breytingar ná yfir:",
        "recentchangesdays-max": "(hámark $1 {{PLURAL:$1|dag|daga}})",
        "recentchangescount": "Fjöldi síðna:",
-       "prefs-help-recentchangescount": "Taldar eru með nýlegar breytingar, breytingarskrár og aðgerðarskrár.",
-       "savedprefs": "Stillingarnar þínar hafa verið vistaðar.",
+       "prefs-help-recentchangescount": "Taldar eru með nýlegar breytingar, breytingaskrár og aðgerðaskrár.",
+       "savedprefs": "Kjörstillingarnar þínar hafa verið vistaðar.",
+       "savedrights": "Notandaréttindi {{GENDER:$1|$1}} hafa verið vistuð.",
        "timezonelegend": "Tímabelti:",
        "localtime": "Staðartími:",
        "timezoneuseserverdefault": "Nota sjálfgefið tímabelti ($1)",
        "prefs-files": "Skrár",
        "prefs-custom-css": "Sérsniðið CSS-útlit",
        "prefs-custom-js": "Sérsniðin JavaScript",
-       "prefs-common-css-js": "Sérsniðin útlit fyrir öll þemu:",
-       "prefs-reset-intro": "Þessi síða er til að endurstilla stillingarnar til sjálfgefnum gildum.\nEkki er hægt að taka þessa breytingu til baka.",
+       "prefs-common-css-js": "Sameiginleg CSS/JavaScript fyrir öll skinn:",
+       "prefs-reset-intro": "Þessi síða er til að endurstilla kjörstillingarnar í sjálfgefin gildi.\nEkki er hægt að taka þessa breytingu til baka.",
        "prefs-emailconfirm-label": "Staðfesting netfangs:",
        "youremail": "Netfang:",
        "username": "{{Gender:$1|Notandanafn}}:",
        "prefs-memberingroups": "{{GENDER:$2|Meðlimur}} {{PLURAL:$1|hóps|hópa}}:",
-       "prefs-registration": "Nýskráningartími:",
+       "prefs-memberingroups-type": "$1",
+       "prefs-registration": "Skráningartími:",
+       "prefs-registration-date-time": "$1",
        "yourrealname": "Fullt nafn:",
        "yourlanguage": "Viðmótstungumál:",
        "yourvariant": "Afbrigði efnismáls:",
-       "prefs-help-variant": "Þín sérvalda útgáfa eða réttritun til að birta innihald síðna í.",
+       "prefs-help-variant": "Sú mállýska eða tilbrigði réttritunar sem þú vilt birta innihald síðna í.",
        "yournick": "Undirskrift:",
        "prefs-help-signature": "Ummæli á spjallsíðum eiga að vera skrifuð undir með \"<nowiki>~~~~</nowiki>\" sem verður breytt í undirskrift þína og dagsetningu.",
        "badsig": "Ógild hrá undirskrift. Athugaðu HTML-kóða.",
        "gender-unknown": "Þegar aðrir minnast á þig mun hugbúnaðurinn nota kynlaus orð þar sem það er mögulegt",
        "gender-male": "Hann breytir wikisíðum",
        "gender-female": "Hún breytir wikisíðum",
-       "prefs-help-gender": "Þessi stilling er valfrjáls. Notað til að aðgreina kynin í meldingum hugbúnaðarins. Þessar upplýsingar verða aðgengilegar öllum.",
+       "prefs-help-gender": "Þessi stilling er valfrjáls.\nNotað til að aðgreina kyn málfræðilega í meldingum hugbúnaðarins. Þessar upplýsingar verða aðgengilegar öllum.",
        "email": "Tölvupóstur",
        "prefs-help-realname": "Raunverulegt nafn er valfrjálst.\nEf þú kýst að gefa það upp, verður það notað til að gefa þér heiður af verkum þínum.",
        "prefs-help-email": "Tölvupóstfang er valfrjálst, en gerir þér kleift að fá nýtt lykilorð ef þú gleymir lykilorðinu þínu.",
-       "prefs-help-email-others": "Þú getur einnig valið að láta aðra hafa samband við þig með tölvupósti í gegnum tengil á notendasíðu eða notendaspjallsíðu þinni.\nTölvupóstfang þitt er ekki gefið upp þegar aðrir notendur hafa samband við þig.",
+       "prefs-help-email-others": "Þú getur einnig valið að láta aðra hafa samband við þig með tölvupósti í gegnum tengil á notandasíðu eða notandaspjallsíðu þinni.\nTölvupóstfang þitt er ekki gefið upp þegar aðrir notendur hafa samband við þig.",
        "prefs-help-email-required": "Þörf er á netfangi.",
        "prefs-info": "Undirstöðuupplýsingar",
        "prefs-i18n": "Alþjóðavæðing",
        "prefs-displaywatchlist": "Útlitsmöguleikar",
        "prefs-tokenwatchlist": "Lykill",
        "prefs-diffs": "Breytingar",
-       "prefs-help-prefershttps": "Þessi stilling tekur gildi í næsta skiptið sem þú skráir inn.",
+       "prefs-help-prefershttps": "Þessi stilling tekur gildi í næsta skiptið sem þú skráir þig inn.",
+       "prefswarning-warning": "Þú hefur gert breytingar á kjörstillingum þínum sem ekki er búið að vista.\nEf þú ferð af þessari síðu án þess að smella á \"$1\" verða kjörstillingar þínar ekki uppfærðar.",
        "userrights": "Breyta notandaréttindum",
        "userrights-lookup-user": "Yfirlit notandahópa",
        "userrights-user-editname": "Skráðu notandanafn:",
-       "editusergroup": "Breyta notandahópum",
+       "editusergroup": "Breyta {{GENDER:$1|notanda}} hópum",
        "editinguser": "Breyti réttindum {{GENDER:$1|notandans}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Breyta notandahópum",
-       "saveusergroups": "Vista notandahóp",
+       "saveusergroups": "Vista {{GENDER:$1|notanda}} hópa",
        "userrights-groupsmember": "Meðlimur:",
        "userrights-groupsmember-auto": "Sjálfvirkt bætt við sem meðlimur í:",
+       "userrights-groupsmember-type": "$1",
        "userrights-groups-help": "Þú getur breytt hópunum sem að þessi notandi er í.\n* Valinn reitur þýðir að notandinn er í hópnum.\n* Óvalinn reitur þýðir að notandinn er ekki í hópnum.\n* Stjarnan (*) þýðir að þú getur ekki fært hópinn eftir að þú hefur breytt honum, eða öfugt.",
        "userrights-reason": "Ástæða:",
        "userrights-no-interwiki": "Þú hefur ekki leyfi til að breyta notandaréttindum á öðrum wiki-síðum.",
        "userrights-notallowed": "Þú hefur ekki réttindi til að útdeila eða draga til baka notandaréttindi.",
        "userrights-changeable-col": "Hópar sem þú getur breytt",
        "userrights-unchangeable-col": "Hópar sem þú getur ekki breytt",
-       "userrights-conflict": "Árekstur í að breyta notandaréttindum! Vinsamlegast skoðaðu aftur og staðfestu breytingar þínar.",
+       "userrights-irreversible-marker": "$1*",
+       "userrights-conflict": "Árekstur í að breyta notandaréttindum! Skoðaðu þetta aftur og staðfestu breytingar þínar.",
        "userrights-removed-self": "Þér hefur tekist að fjarlægja þín eigin réttindi. Vegna þess mátt þú ekki lengur skoða þessa síðu.",
        "group": "Hópur:",
        "group-user": "Notendur",
-       "group-autoconfirmed": "Sjálfkrafa staðfestir notendur",
+       "group-autoconfirmed": "Sjálfvirkt staðfestir notendur",
        "group-bot": "Vélmenni",
        "group-sysop": "Stjórnendur",
        "group-bureaucrat": "Möppudýr",
-       "group-suppress": "Yfirsýn",
+       "group-suppress": "Bælendur",
        "group-all": "(allir)",
        "group-user-member": "{{GENDER:$1|Notandi}}",
-       "group-autoconfirmed-member": "{{GENDER:$1|Sjálfkrafa staðfesting notanda}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|Sjálfvirkt staðfestur notandi}}",
        "group-bot-member": "{{GENDER:$1|Vélmenni}}",
        "group-sysop-member": "{{GENDER:$1|Stjórnandi}}",
        "group-bureaucrat-member": "{{GENDER:$1|Möppudýr}}",
-       "group-suppress-member": "{{GENDER:$1|Umsjón}}",
+       "group-suppress-member": "{{GENDER:$1|Bælandi}}",
        "grouppage-user": "{{ns:project}}:Notendur",
-       "grouppage-autoconfirmed": "{{ns:project}}:Sjálfkrafa staðfestir notendur",
+       "grouppage-autoconfirmed": "{{ns:project}}:Sjálfvirkt staðfestir notendur",
        "grouppage-bot": "{{ns:project}}:Vélmenni",
        "grouppage-sysop": "{{ns:project}}:Stjórnendur",
        "grouppage-bureaucrat": "{{ns:project}}:Möppudýr",
-       "grouppage-suppress": "{{ns:project}}:Umsjón",
+       "grouppage-suppress": "{{ns:project}}:Bælandi",
        "right-read": "Lesa síður",
        "right-edit": "Breyta síðum",
        "right-createpage": "Skapa síður (sem eru ekki spjallsíður)",
        "right-createtalk": "Skapa spjallsíður",
        "right-createaccount": "Stofna nýja notandaaðganga",
-       "right-minoredit": "Merkja sem minniháttarbreytingar",
+       "right-autocreateaccount": "Skrá inn sjálfvirkt með ytri notandaaðgangi",
+       "right-minoredit": "Merkja sem minniháttar breytingar",
        "right-move": "Færa síður",
        "right-move-subpages": "Færa síður með undirsíðum þeirra",
        "right-move-rootuserpages": "Færa notandasíður",
        "right-suppressredirect": "Ekki búa til tilvísun frá gamla nafninu þegar síða er færð",
        "right-upload": "Hlaða inn skrám",
        "right-reupload": "Yfirrita núverandi skrá",
-       "right-reupload-own": "Yfirrita núverandi skrá sem að ég hlóð inn sjálf(ur)",
+       "right-reupload-own": "Yfirrita fyrirliggjandi skrár sem að ég hlóð inn sjálf(ur)",
        "right-reupload-shared": "Hunsa skrár á sameiginlegu myndasafni staðbundið",
-       "right-upload_by_url": "Hlaða inn skrám frá vefslóð",
+       "right-upload_by_url": "Hlaða inn skrám af vefslóð",
        "right-purge": "Hreinsa skyndiminni síðu án staðfestingar",
        "right-autoconfirmed": "Sneiða hjá takmörkunum vistfanga",
        "right-bot": "Eru meðhöndlaðir eins og sjálfvirk aðgerð",
        "right-bigdelete": "Eyða síðum með stórum breytingaskrám",
        "right-deletelogentry": "Eyða og endurvekja sérstakar aðgerða færslur",
        "right-deleterevision": "Eyða og endurvekja sérstaka breytignar á síðum",
-       "right-deletedhistory": "Skoða eyddar færslur úr breytingarskrá, án efnis þeirra",
+       "right-deletedhistory": "Skoða eyddar færslur úr breytingaskrá, án efnis þeirra",
        "right-deletedtext": "Sjá eyddan texta og breytingar á milli eyddra útgáfna",
        "right-browsearchive": "Leita í eyddum síðum",
        "right-undelete": "Endurvekja eydda síðu",
        "right-autopatrol": "Egin breytingar merktar sem yfirfarnar",
        "right-patrolmarks": "Skoða yfirferðir nýlegra breytinga",
        "right-unwatchedpages": "Skoða lista yfir óvaktaðar síður",
-       "right-mergehistory": "Sameina breytingarskrá síðna",
+       "right-mergehistory": "Sameina breytingaskrá síðna",
        "right-userrights": "Breyta öllum notandaréttindum",
        "right-userrights-interwiki": "Breyta notandaréttindum annarra notenda á öðrum wiki-verkefnum",
        "right-siteadmin": "Læsa og aflæsa gagnagrunninum",
        "right-override-export-depth": "Flytja út síður með greinum þar sem allt að 5 greinar tengja þær saman.",
        "right-sendemail": "Senda tölvupóst til annara notenda",
        "right-passwordreset": "Skoða tölvupósta um endurstillingu lykilorðs",
+       "right-managechangetags": "Búa til og eyða [[Special:Tags|merkjum]] úr gagnagrunni",
+       "right-applychangetags": "Virkja [[Special:Tags|merki]] ásamt öðrum breytingum",
        "grant-group-email": "Senda tölvupóst",
-       "grant-createaccount": "Stofna aðganga",
+       "grant-group-high-volume": "Framkvæma magnaðgerðir",
+       "grant-group-customization": "Sérsníðing og kjörstillingar",
+       "grant-group-administration": "Framkvæma kerfisstjórnunaraðgerðir",
+       "grant-group-other": "Ýmsar aðgerðir",
+       "grant-blockusers": "Banna og opna á notendur",
+       "grant-createaccount": "Stofna notandaaðganga",
        "grant-createeditmovepage": "Búa til, breyta og færa síður",
        "grant-delete": "Eyða síðum, yfirferðum og annálsfærslum",
+       "grant-editinterface": "Breyta nafnrými MediaWiki og CSS/JavaScript notanda",
+       "grant-editmycssjs": "Breyta þínum eigin CSS/JavaScript",
+       "grant-editmyoptions": "Breyta notandastillingunum þínum",
+       "grant-editmywatchlist": "Breyta vaktlistanum þínum",
+       "grant-editpage": "Breyta fyrirliggjandi síðum",
+       "grant-editprotected": "Breyta vernduðum síðum",
+       "grant-highvolume": "Magnbreytingar",
+       "grant-oversight": "Fela notendur og bæla útgáfur",
+       "grant-protect": "Vernda og afvernda síður",
+       "grant-sendemail": "Senda tölvupóst til annara notenda",
+       "grant-uploadeditmovefile": "Hlaða inn, skipta út og færa til skrár",
+       "grant-uploadfile": "Hlaða inn nýjum skrám",
+       "grant-basic": "Grunnheimildir",
+       "grant-viewdeleted": "Skoða skrár og síður sem hefur verið eytt",
+       "grant-viewmywatchlist": "Skoða vaktlistann þinn",
        "newuserlogpage": "Skrá yfir nýja notendur",
        "newuserlogpagetext": "Þetta er skrá yfir nýskráða notendur.",
        "rightslog": "Réttindaskrá notenda",
        "action-createpage": "skapa síður",
        "action-createtalk": "skapa spjallsíður",
        "action-createaccount": "skapa þennan notandaaðgang",
+       "action-autocreateaccount": "búa sjálfvirkt til þennan ytri notandaaðgang",
        "action-history": "skoða breytingaskrá þessarar síðu",
        "action-minoredit": "merkja þessa breytingu sem minniháttar",
        "action-move": "færa þessa síðu",
        "action-upload": "hlaða inn þessari skrá",
        "action-reupload": "yfirrita þessa skrá",
        "action-reupload-shared": "Hunsa þessa skrá á sameiginlega myndasafninu",
-       "action-upload_by_url": "hlaða inn þessari skrá frá vefslóð",
+       "action-upload_by_url": "hlaða inn þessari skrá af vefslóð",
        "action-writeapi": "Nota API skrifun",
        "action-delete": "eyða þessari síðu",
        "action-deleterevision": "eyða þessari breytingu",
        "action-browsearchive": "leita í eyddum síðum",
        "action-undelete": "endurvekja þessa síðu",
        "action-suppressrevision": "Skoða og endurvekja þessa falda breytingu",
-       "action-suppressionlog": "Skoða þessa einrænu aðgerðarskrá",
+       "action-suppressionlog": "skoða þessa einka-aðgerðaskrá",
        "action-block": "Banna notandanum að gera breytingar",
        "action-protect": "breyta verndunarstigum fyrir þessa síðu",
        "action-rollback": "Taka snögglega aftur breytingar síðasta notanda sem breytti ákveðinni síðu",
        "action-import": "flytja inn síður frá öðrum wiki",
-       "action-importupload": "flytja inn síður frá skráarupphali",
+       "action-importupload": "flytja inn síður úr innsendri skrá",
        "action-patrol": "Merkja breytingar annara sem yfirfarnar",
        "action-autopatrol": "Merkja eigin breytingu sem yfirfarna",
        "action-unwatchedpages": "Skoða lista yfir óvaktaðar síður",
-       "action-mergehistory": "Sameina breytingarskrá þessarar síðu",
+       "action-mergehistory": "Sameina breytingaskrá þessarar síðu",
        "action-userrights": "breyta öllum notandaréttindum",
        "action-userrights-interwiki": "breyta notandaréttindum annarra notenda á öðrum wiki-verkefnum",
        "action-siteadmin": "læsa eða opna gagnagrunninn",
        "action-viewmywatchlist": "skoða vaktlistann þinn",
        "action-viewmyprivateinfo": "skoða persónuupplýsingar þínar",
        "action-editmyprivateinfo": "breyta persónuupplýsingum þínum",
+       "action-managechangetags": "búa til og eyða merkjum úr gagnagrunni",
+       "action-applychangetags": "virkja merki ásamt öðrum breytingum",
        "nchanges": "$1 {{PLURAL:$1|breyting|breytingar}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|síðan síðustu heimsókn}}",
        "enhancedrc-history": "breytingaskrá",
        "recentchanges-label-bot": "Þessi breyting var gerð af vélmenni",
        "recentchanges-label-unpatrolled": "Þessi breyting hefur ekki verið yfirfarin",
        "recentchanges-label-plusminus": "Stærð síðunnar breyttist um svona mörg bæti",
-       "recentchanges-legend-heading": "'''Fyrirsögn:'''",
+       "recentchanges-legend-heading": "<strong>Fyrirsögn:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sjá einng [[Special:NewPages|lista yfir nýjar síður]])",
+       "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "Sýna",
        "rcnotefrom": "Að neðan {{PLURAL:$5|er breyting síðan|eru breytingar síðan}} <strong>$3, $4</strong> (allt að <strong>$1</strong> sýndar).",
        "rclistfrom": "Sýna breytingar frá og með $3 $2",
        "rcshowhidemine": "$1 mínar breytingar",
        "rcshowhidemine-show": "Sýna",
        "rcshowhidemine-hide": "Fela",
+       "rcshowhidecategorization": "$1 flokkun síðna",
        "rcshowhidecategorization-show": "Birta",
        "rcshowhidecategorization-hide": "Fela",
        "rclinks": "Sýna síðustu $1 breytingar síðustu $2 daga<br />$3",
        "minoreditletter": "m",
        "newpageletter": "N",
        "boteditletter": "v",
+       "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|notandi skoðandi|$1 notendur skoðandi}}]",
        "rc_categories": "Takmarka við flokka (aðskilja með \"|\"):",
        "rc_categories_any": "Allt valið",
+       "rc-change-size": "$1",
        "rc-change-size-new": "$1 {{PLURAL:$1|bæt|bæti}} eftir breytingu",
        "newsectionsummary": "Nýr hluti: /* $1 */",
        "rc-enhanced-expand": "Sýna upplýsingar",
        "recentchangeslinked-summary": "Þetta er listi yfir nýlega gerðar breytingar á síðum sem tengt er í frá tilgreindri síðu (eða á meðlimum úr tilgreindum flokki).\nSíður á [[Special:Watchlist|vaktlistanum þínum]] eru '''feitletraðar'''.",
        "recentchangeslinked-page": "Síðutitill:",
        "recentchangeslinked-to": "Sýna breytingar á síðum sem tengjast uppgefinni síðu í staðinn",
+       "recentchanges-page-added-to-category": "[[:$1]] bætt við flokk",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] og $2 {{PLURAL:$2|síðu|síðum}} bætt við flokk",
+       "recentchanges-page-removed-from-category": "[[:$1]] fjarlægð úr flokki",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] og $2 {{PLURAL:$2|síðu|síðum}} fjarlægð úr flokki",
+       "autochange-username": "Sjálfvirk MediaWiki-breyting",
        "upload": "Hlaða inn skrá",
        "uploadbtn": "Hlaða inn skrá",
-       "reuploaddesc": "Aftur á innhlaðningarformið.",
+       "reuploaddesc": "Hætta við og fara aftur á innhleðsluformið.",
        "upload-tryagain": "Sendu breytta myndlýsingu",
        "uploadnologin": "Óinnskráð(ur)",
-       "uploadnologintext": "Þú verður $1 til að hala upp skrár.",
-       "upload_directory_missing": "Mappa upphlaða ($1) er týnd og vefþjónninn gat ekki búið hana til.",
-       "upload_directory_read_only": "Mistókst að skrifa í möppu upphlaða ($1) á vefþjóni.",
-       "uploaderror": "Villa í innhlaðningu",
-       "upload-recreate-warning": "'''Viðvörun: Skrá með þessu nafni hefur verið eytt eða færð.'''\n\nSíðasta færsla skráarinnar úr bönnunarskrá og flutningskrá er sýnd hér fyrir neðan til skýringar:",
-       "uploadtext": "Notaðu eyðublaðið hér fyrir neðan til að hlaða inn skrám.\nTil að skoða eða leita í áður innhlöðnum skrám ferðu á [[Special:FileList|skráarlistann]], (endur)innhlaðnar skrár eru skráðar í [[Special:Log/upload|innhlaðningarskránni]], eyðingar í [[Special:Log/delete|eyðingaskránni]].\n\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Skrá.jpg]]</nowiki></code>''' til að sýna skránna í fullri upplausn.\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Skrá.png|200px|thumb|left|alt-texti]]</nowiki></code>''' til að nota 200 díla upplausn í kassa, sett til vinstri með 'alt text' sem myndlýsingu.\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Skrá.ogg]]</nowiki></code>''' til að tengja í myndina án þess að sýna hana.",
+       "uploadnologintext": "Þú verður $1 til að hlaða inn skrám.",
+       "upload_directory_missing": "Innhleðslumappan ($1) er týnd og vefþjónninn gat ekki búið hana til.",
+       "upload_directory_read_only": "Mistókst að skrifa í innhleðslumöppu ($1) á vefþjóninum.",
+       "uploaderror": "Villa í innhleðslu",
+       "upload-recreate-warning": "<strong>Viðvörun: Skrá með þessu nafni hefur verið eytt eða færð.</strong>\n\nAnnáll varðandi eyðingu og færslu þessarar síðu er birtur hér fyrir neðan til skýringar: \\",
+       "uploadtext": "Notaðu eyðublaðið hér fyrir neðan til að hlaða inn skrám.\nTil að skoða eða leita í áður innhlöðnum skrám ferðu á [[Special:FileList|skráarlistann]], (endur)innhlaðnar skrár eru skráðar í [[Special:Log/upload|innhleðsluskránni]], eyðingar í [[Special:Log/delete|eyðingaskránni]].\n\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Skrá.jpg]]</nowiki></code>''' til að sýna skrána í fullri upplausn.\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Skrá.png|200px|thumb|left|alt-texti]]</nowiki></code>''' til að nota 200 mynddíla upplausn, í ramma á vinstri spássíu með 'alt text' sem myndlýsingu.\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Skrá.ogg]]</nowiki></code>''' til að tengja í myndina án þess að sýna hana.",
        "upload-permitted": "{{PLURAL:$2|Heimiluð skráargerð|Heimilaðar skráargerðir}}: $1.",
        "upload-preferred": "{{PLURAL:$2|Ákjósanleg skrárgerð|Ákjósanlegar skrárgerðir}}: $1.",
        "upload-prohibited": "{{PLURAL:$2|Óheimiluð skrárgerð|Óheimilaðar skrárgerðir}}: $1.",
-       "uploadlogpage": "Innhlaðningarskrá",
-       "uploadlogpagetext": "Fyrir neðan er listi yfir nýlegustu innhlöðnu skrárnar.\nSjá [[Special:NewFiles|myndasafn nýrra mynda]] fyrir myndrænna yfirlit.",
-       "filename": "Skráarnafn",
+       "uploadlogpage": "Innhleðsluskráning",
+       "uploadlogpagetext": "Fyrir neðan er listi yfir nýlegast innsendu skrárnar.\nSjá [[Special:NewFiles|myndasafn nýrra mynda]] til að sjá myndrænna yfirlit.",
+       "filename": "Skráarheiti",
        "filedesc": "Lýsing",
        "fileuploadsummary": "Ágrip:",
        "filereuploadsummary": "Skráarbreytingar:",
        "filesource": "Heimild:",
        "ignorewarning": "Hunsa viðvaranir og vista þessa skrá",
        "ignorewarnings": "Hunsa allar viðvaranir",
-       "minlength1": "Skráarnöfn þurfa að vera að minnsta kosti einn stafur að lengd",
-       "illegalfilename": "Skráarnafnið „$1“ inniheldur stafi sem eru ekki leyfðir í síðutitlum.\nGjörðu svo vel og endurnefndu skrána og hladdu henni inn aftur.",
-       "filename-toolong": "Skráarnöfn mega ekki vera lengri en 240 bæt.",
+       "minlength1": "Skráaheiti verða að vera að minnsta kosti einn stafur að lengd.",
+       "illegalfilename": "Skráarheitið „$1“ inniheldur stafi sem eru ekki leyfðir í síðutitlum.\nEndurnefndu skrána og reyndu að hlaða henni inn aftur.",
+       "filename-toolong": "Skráaheiti mega ekki vera lengri en 240 bæti.",
        "badfilename": "Skáarnafninu hefur verið breytt í „$1“.",
        "filetype-mime-mismatch": "Skráarendingin \".$1\" samræmist ekki MIME-gerð skrárinnar ($2).",
        "filetype-badmime": "Skrárir af MIME-gerðinni „$1“ er ekki leyfilegt að hlaða inn.",
        "filetype-missing": "Skráin hefur engan viðauka (dæmi \".jpg\").",
        "empty-file": "Skráin sem þú valdir var tóm.",
        "file-too-large": "Skráin sem þú valdir er of stór.",
-       "filename-tooshort": "Skráarnafnið er of stutt",
+       "filename-tooshort": "Skráarheitið er of stutt",
        "filetype-banned": "Þessi skráarending er bönnuð.",
        "verification-error": "Þessi skrá stóðst ekki sannprófun.",
-       "hookaborted": "Viðbót hætti við breytingu þína.",
-       "illegal-filename": "Þetta skráarnafn er ekki leyft.",
+       "hookaborted": "Hætt var við breytinguna sem þú reyndir að gera af viðbót.",
+       "illegal-filename": "Þetta skráarheiti er ekki leyft.",
        "overwrite": "Óheimilt er að skrifa yfir skrá sem er þegar til.",
        "unknown-error": "Óþekkt villa kom upp.",
        "tmp-create-error": "Gat ekki búið til bráðabirgðaskrá.",
-       "tmp-write-error": "Villa við skrifun tímabundinnar skrár.",
+       "tmp-write-error": "Villa við skrifun bráðabirgðaskrár.",
        "large-file": "Það er mælt með að skrár séu ekki stærri en $1; þessi skrá er $2.",
        "largefileserver": "Þessi skrá er of stór. Vefþjónninn getur ekki tekið við skránni.",
-       "emptyfile": "Skráin sem þú hlóðst inn virðist vera tóm.\nÞetta gæti verið vegna ásláttarvillu í skráarnafninu.\nVinsamlegast athugaðu hvort þú viljir hlaða skránni inn.",
-       "windows-nonascii-filename": "Þessi wiki styður ekki skráarnöfn með sérstökum stöfum",
+       "emptyfile": "Skráin sem þú hlóðst inn virðist vera tóm.\nÞetta gæti verið vegna innsláttarvillu í skráarheitinu.\nAthugaðu hvort þú viljir í alvörunni hlaða þessari skrá inn.",
+       "windows-nonascii-filename": "Þessi wiki styður ekki skráaheiti með sértáknum",
        "fileexists": "Skrá með þessu nafni er þegar til, skoðaðu <strong>[[:$1]]</strong> ef þú ert óviss um hvort þú viljir breyta henni.\n[[$1|thumb]]",
        "filepageexists": "Myndasíðan fyrir þessa síðu hefur þegar verið búin til <strong>[[:$1]]</strong>, en engin skrá er til með þessu nafni.\nLýsingin sem þú skrifaðir verður ekki birt á myndasíðunni.\nTil þess að lýsingin geti birst á síðunni, þá þarft þú að breyta síðunni sérstaklega.\n[[$1|thumb]]",
        "fileexists-extension": "Skrá með svipuðu nafni er til: [[$2|thumb]]\n*Nafn skrárinnar sem hlaða á inn: <strong>[[:$1]]</strong>\n*Nafn skrárinnar sem er þegar til: <strong>[[:$2]]</strong>\nVilt þú kannski nota annað nafn sem er meira lýsandi fyrir skrána ?",
-       "fileexists-thumbnail-yes": "Skráin virðist vera smámynd [[$1|thumb]]\nVinsamlegast athugaðu skránna <strong>[[:$1]]</strong>.\nEf skráin er sama myndin Ã­ upprunalegri stærð er ekki Ã¾Ã¶rf Ã¡ annari smámynd.",
-       "file-thumbnail-no": "Skráin er líklega smámynd, því skráarnafnið byrjar á <strong>$1</strong>.\nEf skráin er í fullri upplausn haltu þá áfram að hlaða henni inn, en ef ekki breyttu þá skráarnafninu.",
-       "fileexists-forbidden": "Skrá með þessu nafni er þegar til og ekki er hægt að skrifa yfir skránna.\nEf þú villt hlaða inn skránni þinni engu að síður, farðu þá til baka og veldu annað skráarnafn.\n[[File:$1|thumb|center|$1]]",
-       "fileexists-shared-forbidden": "Skrá með þessu nafni er þegar til í sameiginlega myndasafninu.\nEf þú villt hlaða inn skránni þinni engu að síður, farðu þá til baka og veldu annað skráarnafn.\n[[File:$1|thumb|center|$1]]",
+       "fileexists-thumbnail-yes": "Skráin virðist vera smækkuð mynd <em>(smámynd)</em>.\n[[$1|thumb]]\nAthugaðu skrána <strong>[[:$1]]</strong>.\nEf sú skrá er sama myndin Ã­ upprunalegri stærð er ekki Ã¾Ã¶rf Ã¡ að hlaða inn annarri smámynd. \\",
+       "file-thumbnail-no": "Skráin er líklega smámynd, því skráarheitið byrjar á <strong>$1</strong>.\nEf skráin er í fullri upplausn haltu þá áfram að hlaða henni inn, en ef ekki breyttu þá skráarheitinu.",
+       "fileexists-forbidden": "Skrá með þessu nafni er þegar til og ekki er hægt að skrifa yfir hana.\nEf þú vilt hlaða skránni þinni inn engu að síður, farðu þá til baka og veldu annað skráarheiti.\n[[File:$1|thumb|center|$1]]",
+       "fileexists-shared-forbidden": "Skrá með þessu nafni er þegar til í sameiginlega myndasafninu.\nEf þú vilt hlaða skránni þinni inn engu að síður, farðu þá til baka og veldu annað skráarheiti.\n[[File:$1|thumb|center|$1]]",
        "file-exists-duplicate": "Þessi skrá er afrit eftirfarandi {{PLURAL:$1|skráar|skráa}}:",
-       "file-deleted-duplicate": "Afriti þessarar skráar ([[:$1]]) hefur verið eytt.\nÞú ættir að fara yfir eyðingarsögu skráarinnar áður en þú velur að hlaða skránni aftur inn.",
-       "file-deleted-duplicate-notitle": "Skrá sem er eins og þessi skrá hefur verið hlaðið inn áður og titll hennar hefur verið falinn.\nÞú ættir að spurja einhvern með réttindi til að skoða földu skránna til að fara yfir málið áður en þú hleður skránni inn.",
-       "uploadwarning": "Aðvörun",
-       "uploadwarning-text": "Vinsamlegast breyttu myndalýsingunni hér fyrir neðan og reyndu aftur.",
+       "file-deleted-duplicate": "Afriti þessarar skrár ([[:$1]]) hefur verið eytt.\nÞú ættir að fara yfir eyðingarsögu skrárinnar áður en þú velur að hlaða skránni aftur inn.",
+       "file-deleted-duplicate-notitle": "Skrá sem er eins og þessi skrá hefur verið hlaðið inn áður og titill hennar hefur verið falinn.\nÞú ættir að spyrja einhvern með réttindi til að skoða falin skráagögn til að fara yfir málið áður en þú hleður skránni inn.",
+       "uploadwarning": "Aðvörun vegna innsendingar",
+       "uploadwarning-text": "Breyttu myndalýsingunni hér fyrir neðan og reyndu aftur.",
        "savefile": "Vista",
        "uploaddisabled": "Lokað er fyrir að hlaða inn myndum.",
        "copyuploaddisabled": "Lokað er fyrir að hlaða inn myndum frá vefslóð.",
        "uploaddisabledtext": "Lokað er fyrir að hlaða inn skrám.",
-       "php-uploaddisabledtext": "Skráar upphlöð eru óvirk í PHP.\nVinsamlegast athugaðu stillinguna í file_uploads.",
+       "php-uploaddisabledtext": "Innhleðsla skráa er óvirk í PHP.\nAthugaðu file_uploads stillinguna.",
        "uploadscripted": "Þetta skjal inniheldur (X)HTML eða forskriftu sem gæti valdið villum í vöfrum.",
+       "uploadscriptednamespace": "Þessi SVG-skrá inniheldur ógilt nafnrými \"$1\".",
        "uploadvirus": "Skráin inniheldur veiru! Nánari upplýsingar: $1",
-       "uploadjava": "Þessi skrá er ZIP skrá sem inniheldur Java .class skráarsnið.\nUpphlöðun Java skráa er óheimil, því þær hunsa öryggis hömlur.",
+       "uploadjava": "Þessi skrá er ZIP skrá sem inniheldur Java .class skráasnið.\nInnhleðsla Java skráa er óheimil, því þær geta farið framhjá öryggiskröfum.",
        "upload-source": "Upprunaleg skrá",
-       "sourcefilename": "Upprunalegt skráarnafn:",
+       "sourcefilename": "Upprunalegt skráarheiti:",
        "sourceurl": "Uppruni:",
-       "destfilename": "Móttökuskráarnafn:",
+       "destfilename": "Móttökuskráarheiti:",
        "upload-maxfilesize": "Hámarks skráarstærð: $1",
        "upload-description": "Myndlýsing",
-       "upload-options": "Valmöguleikar fyrir upphöl",
+       "upload-options": "Valmöguleikar fyrir innsendingar",
        "watchthisupload": "Vakta þessa skrá",
        "filewasdeleted": "Skrá af sama nafni hefur áður verið hlaðið inn og síðan eytt. Þú ættir að athuga $1 áður en þú hleður skránni inn.",
-       "filename-bad-prefix": "Sráarnafnið lýsir ekki skránni, heldur var það búið til af myndavélinni, því það byrjar á '''\"$1\"'''.\nVeldu lýsandi nafn fyrir skránna og reyndu aftur.",
+       "filename-thumb-name": "Titillinn bendir til þess að myndin sé smámynd. Vinsamlegast ekki hlaða inn smámyndum aftur á sama wiki og þær komu frá. Annars, ef það er ekki tilfellið, lagaðu skráarnafnið svo það hafi merkingu og hafi ekki forskeyti smámynda.",
+       "filename-bad-prefix": "Skráarheitið byrjar á <strong>\"$1\"</strong> og er ekki lýsandi fyrir skrána, sem bendir til þess að það hafi verið það búið til af stafrænni myndavél.\nVeldu lýsandi nafn fyrir skrána og reyndu aftur.",
        "upload-proto-error": "Vitlaus samskiptaregla",
-       "upload-proto-error-text": "Upphlöðun frá öðrum vefþjón þarfnast vefslóðar sem byrjar á <code>http://</code> eða <code>ftp://</code>.",
+       "upload-proto-error-text": "Innhleðsla frá öðrum vefþjóni þarfnast vefslóðar sem byrjar á <code>http://</code> eða <code>ftp://</code>.",
        "upload-file-error": "Innri villa",
-       "upload-file-error-text": "Innri villa: Gat ekki búið til bráðabirgðaskrá á vefþjóni.\nVinsamlegast hafðu samband við [[Special:ListUsers/sysop|stjórnanda]].",
+       "upload-file-error-text": "Innri villa: Gat ekki búið til bráðabirgðaskrá á vefþjóni.\nEndilega hafðu samband við [[Special:ListUsers/sysop|stjórnanda]].",
        "upload-misc-error": "Óþekkt innhleðsluvilla",
-       "upload-misc-error-text": "Upphal þitt mistókst vegna óþekktrar villu.\nAthugaðu hvort vefslóðin sé rétt og aðgengileg og að því loknu reyndu aftur.\nEf vandamálið lagast ekki, hafðu samband við [[Special:ListUsers/sysop|stjórnanda]].",
+       "upload-misc-error-text": "Innsending þín mistókst vegna óþekktrar villu.\nAthugaðu hvort vefslóðin sé rétt og aðgengileg og að því loknu reyndu aftur.\nEf vandamálið lagast ekki, hafðu samband við [[Special:ListUsers/sysop|stjórnanda]].",
        "upload-too-many-redirects": "Vefslóðin inniheldur of margar tilvísanir.",
        "upload-http-error": "HTTP villa kom upp: $1",
-       "upload-copy-upload-invalid-domain": "Lokað er fyrir afritun skráa frá öðrum vefþjón á þessu vefsvæði.",
+       "upload-copy-upload-invalid-domain": "Lokað er fyrir afritun skráa frá öðrum vefþjónum á þessu vefsvæði.",
        "upload-dialog-title": "Hlaða inn skrá",
        "upload-dialog-button-cancel": "Hætta við",
        "upload-dialog-button-done": "Lokið",
        "upload-dialog-button-upload": "Hlaða inn",
        "upload-form-label-infoform-title": "Nánar",
        "upload-form-label-infoform-name": "Heiti",
-       "upload-form-label-infoform-name-tooltip": "Einstakur og lýsandi titill, sem mun verða skráarnafn. Þú mátt nota einfalt mál með bilum. Ekki hafa með neina skráarendingu.",
+       "upload-form-label-infoform-name-tooltip": "Einstakur og lýsandi titill, sem mun verða skráarheiti. Þú mátt nota einfalt mál með bilum. Ekki hafa með neina skráarendingu.",
        "upload-form-label-infoform-description": "Lýsing",
        "upload-form-label-infoform-description-tooltip": "Lýstu stuttlega öllu því sem er markvert um verkið.\nFyrir ljósmyndir, nefndu aðalatriði myndarinnar, tilefni eða staðsetningu.",
        "upload-form-label-usage-title": "Notkun",
        "foreign-structured-upload-form-label-own-work": "Það er mitt eigið verk",
        "foreign-structured-upload-form-label-infoform-categories": "Flokkar",
        "foreign-structured-upload-form-label-infoform-date": "Dagsetning",
+       "foreign-structured-upload-form-label-own-work-message-local": "Ég skil að ég sé að hlaða inn skrá samkvæmt notkunarskilmálum og leyfisskilmálum {{SITENAME}}.",
+       "foreign-structured-upload-form-label-not-own-work-message-local": "Ef þú getur ekki hlaðið inn þessari skrá samkvæmt reglum {{SITENAME}}, lokaðu þá þessum glugga og reyndu aðra aðferð.",
+       "foreign-structured-upload-form-label-not-own-work-local-local": "Þú gætir einnig prófað að nota [[Special:Upload|sjálfgefnu innhleðslusíðuna]].",
+       "foreign-structured-upload-form-label-own-work-message-default": "Ég skil að ég sé að hlaða inn skrá á sameiginlegt vefsvæði. Ég staðfesti að ég sé að gera það samkvæmt notkunarskilmálum og leyfisskilmálum þess.",
+       "foreign-structured-upload-form-label-not-own-work-message-default": "Ef þú getur ekki hlaðið inn þessari skrá samkvæmt reglum sameiginlega vefsvæðisins, lokaðu þá þessum glugga og reyndu aðra aðferð.",
+       "foreign-structured-upload-form-label-not-own-work-local-default": "Þú gætir einnig prófað að nota [[Special:Upload|innhleðslusíðuna á {{SITENAME}}]], ef það má hlaða þessari skrá inn samkvæmt reglum þeirra.",
+       "foreign-structured-upload-form-label-own-work-message-shared": "Ég staðfesti að ég eigi höfundarréttinn að þessari skrá og samþykki óafturkræft að gefa þessa skrá til Wikimedia Commons undir  [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Attribution-ShareAlike 4.0] leyfi. Ég samþykki [https://wikimediafoundation.org/wiki/Terms_of_Use notendaskilmálana].",
+       "foreign-structured-upload-form-label-not-own-work-message-shared": "Ef þú átt ekki höfundarréttinn að þessari skrá, eða þú vilt gefa það út undir öðru leyfi, prófaðu  [https://commons.wikimedia.org/wiki/Special:UploadWizard Innsendingaálfinn á Commons].",
+       "foreign-structured-upload-form-label-not-own-work-local-shared": "Þú gætir einnig prófað að nota [[Special:Upload|innhleðslusíðuna á {{SITENAME}}]], ef það má hlaða þessari skrá inn samkvæmt reglum þeirra.",
        "backend-fail-stream": "Gat ekki streymt skránni „$1“.",
        "backend-fail-backup": "Öryggisafritun skrárinnar $1 mistókst.",
        "backend-fail-notexists": "Skráin $1 er ekki til.",
-       "backend-fail-hashes": "Gat ekki nálgast tætigildi skráanna til samanburðar.",
+       "backend-fail-hashes": "Gat ekki nálgast tætigildi skránna til samanburðar.",
        "backend-fail-notsame": "Ólík skrá er þegar til á $1.",
        "backend-fail-invalidpath": "$1 er ekki gildur geymslustaður.",
        "backend-fail-delete": "Mistókst að eyða skránni $1.",
        "backend-fail-move": "Mistókst að færa skrá $1 á $2.",
        "backend-fail-opentemp": "Mistókst að opna bráðabirgðaskrá.",
        "backend-fail-writetemp": "Gat ekki skrifað í bráðabirgðaskrá.",
-       "backend-fail-closetemp": "Mistókst að loka tímabundinni skrá.",
+       "backend-fail-closetemp": "Mistókst að loka bráðabirgðaskrá.",
        "backend-fail-read": "Mistókst að lesa skrá $1.",
        "backend-fail-create": "Mistókst að skrifa skrá $1.",
-       "backend-fail-maxsize": "Mistókst að skrifa skránna „$1” því hún er stærri en $2 {{PLURAL:$2|bæti}}.",
-       "backend-fail-readonly": "Gagnabankann \"$1\" er engöngu hægt að lesa í augnablikinu. Ástæðan sem var gefin er: \"''$2''\"",
+       "backend-fail-maxsize": "Mistókst að skrifa skrána „$1” því hún er stærri en $2 {{PLURAL:$2|eitt bæti|$2 bæti}}.",
+       "backend-fail-readonly": "Gagnabankann \"$1\" er engöngu hægt að lesa í augnablikinu. Ástæðan sem var gefin er: <em>$2</em>",
        "backend-fail-synced": "Skráin $1 er í ósamkvæmu ástandi innan innri geymslubakenda",
        "backend-fail-connect": "Mistókst að tengjast gagnabankanum \"$1\".",
        "backend-fail-internal": "Óþekkt villa átti sér stað í gagnabankanum \"$1\".",
        "invalid-chunk-offset": "Ógild raðbreyting bunka",
        "img-auth-accessdenied": "Aðgangur óheimill",
        "img-auth-nopathinfo": "PATH_INFO vantar.\nBiðlarinn þínn er ekki stilltur til að gefa upp þessar upplýsingar.\nÞær mega vera CGI-byggðar og mega ekki styðja img_auth.\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
-       "img-auth-notindir": "Umbeðin slóð var ekki í stilltri upphlaðsmöppu.",
+       "img-auth-notindir": "Umbeðin slóð var ekki í stilltri innhleðslumöppu.",
        "img-auth-badtitle": "Mistókst að búa til gildan titil útfrá „$1”.",
        "img-auth-nologinnWL": "Þú ert ekki skráð(ur) inn og „$1“ er ekki á hvítlista.",
        "img-auth-nofile": "Skráin \"$1\" er ekki til.",
        "img-auth-isdir": "Þú ert að reyna að nálgast möppuna „$1“.\nAðeins skráaraðgangur er leyfður.",
        "img-auth-streaming": "Streymi \"$1\".",
-       "img-auth-public": "Virkni img_auth.php er að flytja út skrár frá einkawiki.\nÞessi wiki er stilltur sem opinber wiki.\nVegna öryggissjónarmiða er img_auth.php óvirkt.",
+       "img-auth-public": "Virkni img_auth.php er að flytja út skrár af einkawiki.\nÞessi wiki er stilltur sem opinber wiki.\nVegna öryggissjónarmiða er img_auth.php óvirkt.",
        "img-auth-noread": "Notandinn hefur ekki rétt til að lesa \"$1\"",
        "http-invalid-url": "Vitlaust veffang: $1",
        "http-invalid-scheme": "Vefslóðir með \"$1\" forskeyti eru óstuddar.",
        "upload_source_url": "(skrá sem þú velur frá gildri og aðgengilegri vefslóð)",
        "upload_source_file": "(skrá sem þú velur á tölvunni þinni)",
        "listfiles-delete": "eyða",
-       "listfiles-summary": "Þessi kerfissíða sýnir allar upphlaðnar skrár.",
-       "listfiles_search_for": "Leita að miðilsnafni:",
+       "listfiles-summary": "Þessi kerfissíða sýnir allar innsendar skrár.",
+       "listfiles_search_for": "Leita að heiti gagnamiðils:",
        "listfiles-userdoesnotexist": "Notandinn \"$1\" er ekki skráður.",
        "imgfile": "skrá",
        "listfiles": "Skráalisti",
        "uploadnewversion-linktext": "Hlaða inn nýrri útgáfu af þessari skrá",
        "shared-repo-from": "frá $1",
        "shared-repo": "sameiginlegu myndasafni",
+       "shared-repo-name-wikimediacommons": "Wikimedia Commons",
+       "filepage.css": "/* Allt CSS sem sett er hér er haft með á lýsingarsíðunni, en einnig á utanaðkomandi tilvísandi wiki-um (foreign client wikis). */",
        "upload-disallowed-here": "Þú getur ekki yfirskrifað þessa skrá.",
        "filerevert": "Taka aftur $1",
        "filerevert-legend": "Taka aftur skrá",
        "filerevert-badversion": "Það er ekki til nein fyrri staðbundin útgáfa af þessari skrá með þessum tímastimpli.",
        "filedelete": "Eyði „$1“",
        "filedelete-legend": "Eyða skrá",
-       "filedelete-intro": "Þú ert að eyða '''[[Media:$1|$1]]''' ásamt breytingarskrá hennar.",
+       "filedelete-intro": "Þú ert að eyða '''[[Media:$1|$1]]''' ásamt breytingaskrá hennar.",
        "filedelete-intro-old": "Þú ert í þann mund að eyða útgáfu '''[[Media:$1|$1]]''' frá [$4 $3, kl. $2].",
        "filedelete-comment": "Ástæða:",
        "filedelete-submit": "Eyða",
        "filedelete-maintenance": "Á meðan viðhaldi stendur er lokað fyrir eyðingu og endurvakningu skráa.",
        "filedelete-maintenance-title": "Mistókst að eyða skrá",
        "mimesearch": "MIME-leit",
-       "mimesearch-summary": "Þessi síða gerir þér kleift að leita eftir skrám eftir MIME-gerð þeirra.\n\nLeitarstrengurinn á að vera á þessu formi: efnistag/myndasnið eða efnistag/*, t.d. <code>image/jpeg</code>.",
+       "mimesearch-summary": "Þessi síða gerir þér kleift að leita eftir skrám eftir MIME-gerð þeirra.\n\nLeitarstrengurinn á að vera á þessu formi: efnistag/myndasnið eða efnismerki/*, t.d. <code>image/jpeg</code>.",
        "mimetype": "MIME-tegund:",
-       "download": "Hlaða niður",
+       "download": "sækja",
        "unwatchedpages": "Óvaktaðar síður",
-       "listredirects": "Tilvísanir",
+       "listredirects": "Endurbeiningar",
        "listduplicatedfiles": "Listi yfir afritaðar skrár",
        "listduplicatedfiles-summary": "Þetta er listi yfir skrár þar sem nýjasta útgáfa hennar er afrit af nýjustu útgáfu einhverrar annarar skrár. Aðeins staðbundnar skrár eru taldar með.",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] hefur $2 [[$3|{{PLURAL:$2|afrit}}]].",
-       "unusedtemplates": "Ónotuð snið",
-       "unusedtemplatestext": "Þetta er listi yfir allar síður í {{ns:snið}} nafnrýminu sem ekki eru notaðar í neinum öðrum síðum. Munið að gá að öðrum tenglum í sniðin áður en þeim er eytt.",
+       "unusedtemplates": "Ónotuð sniðmát",
+       "unusedtemplatestext": "Þetta er listi yfir allar síður í {{ns:snið}} nafnrýminu sem ekki eru notaðar í neinum öðrum síðum. Munið að athuga með aðra tengla í sniðmátin áður en þeim er eytt.",
        "unusedtemplateswlh": "aðrir tenglar",
        "randompage": "Handahófsvalin síða",
        "randompage-nopages": "Það eru engar síður í {{PLURAL:$2|nafnrýminu|nafnrýmunum}}: $1.",
        "statistics-articles": "Greinar alls",
        "statistics-pages": "Síður",
        "statistics-pages-desc": "Allar síður wiki-verkefnisins, þar á meðal spjallsíður, tilvísanir o.fl.",
-       "statistics-files": "Skráafjöldi",
+       "statistics-files": "Innsendar skrár",
        "statistics-edits": "Síðubreytingar frá því {{SITENAME}} byrjaði",
        "statistics-edits-average": "Meðal breytingafjöldi á síðu",
        "statistics-users": "Skráðir  [[Special:ListUsers|notendur]]",
        "pageswithprop-text": "Á þessari síðu er listi yfir síður sem hafa ákveðna síðueiginleika.",
        "pageswithprop-prop": "Heiti eiginleika:",
        "pageswithprop-submit": "Áfram",
+       "pageswithprop-prophidden-long": "langur texta eiginleiki falinn ($1)",
+       "pageswithprop-prophidden-binary": "tvíunda eiginleiki falinn ($1)",
        "doubleredirects": "Tvöfaldar tilvísanir",
        "doubleredirectstext": "Þessi síða er listi yfir skrár sem eru tilvísanir á aðrar tilvísanir.\nHver lína inniheldur tengla á fyrstu og aðra tilvísun auk þeirrar síðu sem seinni tilvísunin beinist að, sem er oftast sú síða sem allar tilvísanirnar eiga að benda á.\n<del>Yfirstrikaðar</del> færslur hafa verið leiðréttar.",
        "double-redirect-fixed-move": "[[$1]] hefur verið færð.\nHún var uppfærð sjálfkrafa og tilvísar núna á [[$2]].",
        "double-redirect-fixed-maintenance": "Laga sjálfvirkt tvöfalda tilvísun frá [[$1]] til [[$2]] í viðhalds aðgerð.",
        "double-redirect-fixer": "Laga tilvísun",
-       "brokenredirects": "Brotnar tilvísanir",
+       "brokenredirects": "Rofnar endurbeiningar",
        "brokenredirectstext": "Eftirfarandi tilvísanir vísa á síður sem ekki eru til:",
        "brokenredirects-edit": "breyta",
        "brokenredirects-delete": "eyða",
        "ninterwikis": "$1 {{PLURAL:$1|tungumálatengill|tungumálatenglar}}",
        "nlinks": "$1 {{PLURAL:$1|tengill|tenglar}}",
        "nmembers": "$1 {{PLURAL:$1|meðlimur|meðlimir}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|meðlimur|meðlimir}}",
        "nrevisions": "$1 {{PLURAL:$1|breyting|breytingar}}",
        "nimagelinks": "Ítengd á $1 {{PLURAL:$1|síðu|síðum}}",
        "ntransclusions": "Ítengd á $1 {{PLURAL:$1|síðu|síðum}}",
        "uncategorizedpages": "Óflokkaðar síður",
        "uncategorizedcategories": "Óflokkaðir flokkar",
        "uncategorizedimages": "Óflokkaðar skrár",
-       "uncategorizedtemplates": "Óflokkuð snið",
+       "uncategorizedtemplates": "Óflokkuð sniðmát",
        "unusedcategories": "Ónotaðir flokkar",
        "unusedimages": "Munaðarlausar skrár",
        "wantedcategories": "Eftirsóttir flokkar",
        "wantedpages": "Eftirsóttar síður",
        "wantedpages-badtitle": "Ógildur titill í listanum: $1",
        "wantedfiles": "Eftirsóttar skrár",
-       "wantedfiletext-cat": "Eftirfarandi skrár eru í notkun en eru ekki til. Skrár frá skráarsöfnum gætu verið á listanum þrátt fyrir að þær séu til. Allar ástæðulausar færslur verða <del>yfirstrikaðar</del>. Þar að auki, eru síður sem innifala skrár sem eru ekki til á lista [[:$1]].",
+       "wantedfiletext-cat": "Eftirfarandi skrár eru í notkun en eru ekki til. Skrár frá skráarsöfnum gætu verið á listanum þrátt fyrir að þær séu til. Allar ástæðulausar færslur verða <del>yfirstrikaðar</del>. Þar að auki, eru síður sem innihalda skrár sem eru ekki til á lista [[:$1]].",
+       "wantedfiletext-cat-noforeign": "Eftirfarandi skrár eru í notkun en eru ekki til. Þar að auki, eru síður sem innihalda skrár sem eru ekki til, taldar upp á [[:$1]].",
        "wantedfiletext-nocat": "Eftirfarandi skrár eru í notkun en eru ekki til. Skrár frá srkáarsöfnum gætu verið á listanum þrátt fyrir að þær séu til. Allar ástæðulausar færslur verða <del>yfirstrikaðar</del>.",
-       "wantedtemplates": "Eftirsótt snið",
+       "wantedfiletext-nocat-noforeign": "Eftirfarandi skrár eru í notkun en eru ekki til.",
+       "wantedtemplates": "Eftirsótt sniðmát",
        "mostlinked": "Mest ítengdu síður",
        "mostlinkedcategories": "Mest ítengdu flokkar",
        "mostlinkedtemplates": "Mest ítengdu síður",
        "protectedpages-indef": "Aðeins óendanlegar verndanir",
        "protectedpages-summary": "Þessi skrá sýnir lista yfir síður sem eru til og eru verndaðar í auknablikinu. Til að sjá lista yfir titla sem eru verndaðir gegn stofnun þeirra, sjáðu [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Keðjuverndun eingöngu",
-       "protectedpages-noredirect": "Fela tilvísanir",
+       "protectedpages-noredirect": "Fela endurbeiningar",
        "protectedpagesempty": "Engar síður eru verndaðar með þessum stikum.",
        "protectedpages-timestamp": "Tímastimpill",
        "protectedpages-page": "Síða",
        "ancientpages": "Síst uppfærðar síður",
        "move": "Færa",
        "movethispage": "Færa þessa síðu",
-       "unusedimagestext": "Eftirfarandi skrár eru til, en eru ekki notaðar í greinum.\nVinsamlegast athugið að aðrar vefsíður gætu tengt beint í skrár héðan, svo að þær gætu komið fram á þessum lista þrátt fyrir að vera í notkun.",
+       "unusedimagestext": "Eftirfarandi skrár eru til, en eru ekki notaðar neinni síðu.\nAthugaðu að aðrar vefsíður gætu tengt beint í skrár héðan, svo að þær gætu komið fram á þessum lista þrátt fyrir að vera í notkun.",
        "unusedcategoriestext": "Þessir flokkar eru til en engar síður eða flokkar eru í þeim.",
        "notargettitle": "Ekkert skotmark",
        "notargettext": "Villa: Engin síða eða notandi tilgreind til að nota þennan möguleika á.",
        "nopagetext": "Síðan sem á að færa frá er ekki til.",
        "pager-newer-n": "{{PLURAL:$1|nýrri}} $1",
        "pager-older-n": "{{PLURAL:$1|1 eldri|$1 eldri}}",
-       "suppress": "Yfirsýn",
+       "suppress": "Bæla",
        "querypage-disabled": "Þessi kerfisíða er óvirk til að minnka ekki afköst vefþjónsins.",
+       "apihelp": "API hjálp",
+       "apihelp-no-such-module": "Einingin \"$1\" fannst ekki.",
+       "apisandbox": "API sandkassi",
+       "apisandbox-jsonly": "Krafist er JavaScript til að geta notað API-sandkassann.",
+       "apisandbox-api-disabled": " Slökkt er á API á þessum vef.",
+       "apisandbox-fullscreen": "Þenja út spjald",
+       "apisandbox-fullscreen-tooltip": "Stækka sandkassaspjaldið til að fylla vafragluggann.",
+       "apisandbox-unfullscreen": "Birta síðu",
+       "apisandbox-unfullscreen-tooltip": "Minnka sandkassaspjaldið, þannig að stýritenglar MediaWiki verði tiltækir.",
+       "apisandbox-submit": "Gera fyrirspurn",
+       "apisandbox-reset": "Hreinsa",
+       "apisandbox-retry": "Reyna aftur",
+       "apisandbox-loading": "Hleð inn upplýsingum fyrir API-eininguna \"$1\"...",
+       "apisandbox-no-parameters": "Þessi API-eining hefur engin viðföng.",
+       "apisandbox-helpurls": "Hjálpartenglar",
+       "apisandbox-examples": "Dæmi",
+       "apisandbox-dynamic-parameters": "Auka viðföng",
+       "apisandbox-dynamic-parameters-add-label": "Bæta við viðfangi:",
+       "apisandbox-dynamic-parameters-add-placeholder": "Heiti viðfangs",
+       "apisandbox-deprecated-parameters": "Úrelt viðföng",
+       "apisandbox-submit-invalid-fields-title": "Sumir reitir eru ógildir",
+       "apisandbox-results": "Niðurstöður",
+       "apisandbox-alert-field": "Gildi þessa reits er ekki leyfilegt.",
        "booksources": "Bókaleit",
-       "booksources-search-legend": "Leita að bókaverslunum",
+       "booksources-search-legend": "Leita að bókaheimildum",
+       "booksources-isbn": "ISBN:",
        "booksources-search": "Leita",
        "booksources-text": "Fyrir neðan er listi af tenglum í aðrar síður sem selja nýjar og notaðar bækur og gætu einnig haft nánari upplýsingar í sambandi við bókina sem þú varst að leita að:",
        "booksources-invalid-isbn": "ISBN gildið virðist ekki vera gilt; leitaðu eftir villum við innslátt eða afritun gildisins frá upsprettu þess.",
        "specialloguserlabel": "Gerandi:",
-       "speciallogtitlelabel": "Beinist að (titill eða {{ns:user}}:notendanafn fyrir notanda):",
+       "speciallogtitlelabel": "Beinist að (titill eða {{ns:user}}:notandanafn fyrir notanda):",
        "log": "Aðgerðaskrár",
        "logeventslist-submit": "Birta",
        "all-logs-page": "Allar aðgerðir",
        "logempty": "Engin slík aðgerð fannst.",
        "log-title-wildcard": "Leita að titlum sem byrja á þessum texta",
        "showhideselectedlogentries": "Sýna/fela valdar aðgerða færslur",
+       "log-edit-tags": "Breyta merkjum á völdum annálsfærslum",
        "checkbox-select": "Velja: $1",
        "checkbox-all": "Allt",
        "checkbox-none": "Ekkert",
        "allpagesprefix": "Sýna síður með forskeytinu:",
        "allpagesbadtitle": "Ekki var hægt að búa til grein með þessum titli því hann innihélt einn eða fleiri stafi sem ekki er hægt að nota í titlum.",
        "allpages-bad-ns": "{{SITENAME}} hefur ekki nafnrými „$1“.",
-       "allpages-hide-redirects": "Fela tilvísanir",
+       "allpages-hide-redirects": "Fela endurbeiningar",
        "cachedspecial-viewing-cached-ttl": "Þú ert að skoða útgáfu síðunnar úr skyndiminni, sem getur verið allt að $1 gömul.",
        "cachedspecial-viewing-cached-ts": "Þetta er útgáfa þessarar síðu úr skyndiminni og sem endurspeglar ekki endilega núverandi ástand.",
        "cachedspecial-refresh-now": "Skoða síðustu",
        "listgrouprights-rights": "Réttindi",
        "listgrouprights-helppage": "Help:Hópréttindi",
        "listgrouprights-members": "(listi yfir meðlimi)",
+       "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": "Bæta við meðlimum í {{PLURAL:$2|hópinn|hópana}}: $1",
        "listgrouprights-removegroup": "Fjarlægja meðlimi úr {{PLURAL:$2|hópinum|hópunum}}: $1",
        "listgrouprights-addgroup-all": "Bæta meðlimum við alla hópa",
        "listgrouprights-removegroup-self-all": "Fjarlægja sjálfan sig úr öllum hópum",
        "listgrouprights-namespaceprotection-header": "Takmarkanir nafnrýmis",
        "listgrouprights-namespaceprotection-namespace": "Nafnrými",
+       "listgrouprights-namespaceprotection-restrictedto": "Réttindi sem leyfa notanda að breyta",
        "listgrants-rights": "Réttindi",
+       "trackingcategories-name": "Heiti skilaboða",
        "trackingcategories-nodesc": "Enginn lýsing tiltæk.",
        "trackingcategories-disabled": "Flokkurinn er óvirkur",
        "mailnologin": "Ekkert netfang til að senda á",
        "noemailtitle": "Ekkert póstfang",
        "noemailtext": "Þessi notandi hefur ekki tilgreint gilt netfang.",
        "nowikiemailtext": "Þessi notandi hefur valið að fá engan tölvupóst frá öðrum notendum.",
-       "emailnotarget": "Notendanafn er ekki til eða ógilt fyrir þennan viðtakanda.",
-       "emailtarget": "Tilgreindu notendanafn viðtakanda",
+       "emailnotarget": "Notandanafn er ekki til eða ógilt fyrir þennan viðtakanda.",
+       "emailtarget": "Tilgreindu notandanafn viðtakanda",
        "emailusername": "Notandanafn:",
        "emailusernamesubmit": "Senda",
        "email-legend": "Senda tölvupóst á annan {{SITENAME}}-notanda",
        "emailsent": "Sending tókst",
        "emailsenttext": "Skilaboðin þín hafa verið send.",
        "emailuserfooter": "Þessi tölvupóstur var {{GENDER:$1|sendur}} af $1 til {{GENDER:$2|$2}} með möguleikanum \"{{int:emailuser}}\" á {{SITENAME}}.",
-       "usermessage-summary": "Skil eftir meldingu.",
-       "usermessage-editor": "Meldinga sendiboði",
+       "usermessage-summary": "Skil eftir kerfismeldingu.",
+       "usermessage-editor": "Skilaboðakerfi",
        "watchlist": "Vaktlistinn",
        "mywatchlist": "Vaktlisti",
        "watchlistfor2": "Eftir $1 $2",
        "nowatchlist": "Vaktlistinn er tómur.",
-       "watchlistanontext": "Vinsamlegast skráðu þig til að skoða eða breyta hlutum á vaktlistanum þínum.",
+       "watchlistanontext": "Skráðu þig til að skoða eða breyta hlutum á vaktlistanum þínum.",
        "watchnologin": "Óinnskráð(ur)",
        "addwatch": "Bæta á vaktlistann",
        "addedwatchtext": "Síðunni „[[:$1]]“ og spjallsíðu hennar hafa verið bætt á [[Special:Watchlist|vaktlistann]] þinn.",
+       "addedwatchtext-short": "Síðunni  \"$1\" hefur verið bætt við á vaktlistann þinn.",
        "removewatch": "Fjarlægja af vaktlistanum",
        "removedwatchtext": "Síðan „[[:$1]]“ og spjallsíða hennar hafa verið fjarlægð af [[Special:Watchlist|vaktlistanum]] þínum.",
+       "removedwatchtext-short": "Síðan \"$1\" hefur verið fjarlægð af vaktlistanum þínum.",
        "watch": "Vakta",
        "watchthispage": "Vakta þessa síðu",
        "unwatch": "Afvakta",
        "wlshowlast": "Sýna síðustu $1 klukkutíma, $2 daga",
        "watchlist-hide": "Fela",
        "watchlist-submit": "Birta",
+       "wlshowtime": "Tímabil sem á að birta:",
+       "wlshowhideminor": "minniháttar breytingar",
+       "wlshowhidebots": "vélmenni",
        "wlshowhideliu": "skráðir notendur",
        "wlshowhideanons": "óskráðir notendur",
        "wlshowhidepatr": "vaktaðar breytingar",
-       "wlshowhidemine": "mínar breytingar",
+       "wlshowhidemine": "breytingar mínar",
+       "wlshowhidecategorization": "flokkun síðna",
        "watchlist-options": "Vaktlistastillingar",
        "watching": "Vakta...",
        "unwatching": "Afvakta...",
        "exbeforeblank": "innihald fyrir tæmingu var: '$1'",
        "delete-confirm": "Eyða „$1“",
        "delete-legend": "Eyða",
-       "historywarning": "<strong>Viðvörun:</strong> Síðan sem þú ert um það bil að eyða hefur breytingarskrá með $1 {{PLURAL:$1|breytingu|breytingum}}:",
-       "confirmdeletetext": "Þú ert um það bil að eyða síðu ásamt breytingaskrá hennar.\nVinsamlegast staðfestu það að þú ætlir að gera svo, það að þú skiljir afleiðingarnar, og að þú sért að gera þetta í samræmi við [[{{MediaWiki:Policy-url}}]].",
+       "historywarning": "<strong>Viðvörun:</strong> Síðan sem þú ert um það bil að eyða hefur breytingaskrá með $1 {{PLURAL:$1|breytingu|breytingum}}:",
+       "historyaction-submit": "Birta",
+       "confirmdeletetext": "Þú ert um það bil að eyða síðu ásamt breytingaskrá hennar.\nStaðfestu það að þú ætlir að gera svo, það að þú skiljir afleiðingarnar, og að þú sért að gera þetta í samræmi við [[{{MediaWiki:Policy-url}}|samþykktir]].",
        "actioncomplete": "Aðgerð lokið",
        "actionfailed": "Aðgerð mistókst",
        "deletedtext": "„$1“ hefur verið eytt.\nSjá lista yfir nýlegar eyðingar í $2.",
        "deletecomment": "Ástæða:",
        "deleteotherreason": "Aðrar/fleiri ástæður:",
        "deletereasonotherlist": "Önnur ástæða",
-       "deletereason-dropdown": "* Algengar ástæður\n** Amapóstur\n** Að beiðni höfundar\n** Höfundaréttarbrot\n** Skemmdarverk\n** Brotin tilvísun",
+       "deletereason-dropdown": "* Algengar ástæður\n** Amasendingar\n** Að beiðni höfundar\n** Höfundaréttarbrot\n** Skemmdarverk\n** Rofin endurbeining",
        "delete-edit-reasonlist": "Breyta eyðingarástæðum",
-       "delete-toobig": "Þessi síða hefur stóra breytingarskrá, yfir $1 {{PLURAL:$1|breyting|breytingar}}.\nÓheimilt er að eyða slíkum síðum til að valda ekki óæskilegum truflunum á {{SITENAME}}.",
-       "delete-warning-toobig": "Þessi síða hefur stóra breytingarskrá, yfir $1 {{PLURAL:$1|breyting|breytingar}}.\nEyðing síðunnar gæti truflað vinnslu gangnasafns {{SITENAME}}; haltu áfram með varúð.",
+       "delete-toobig": "Þessi síða hefur stóra breytingaskrá, yfir $1 {{PLURAL:$1|breyting|breytingar}}.\nÓheimilt er að eyða slíkum síðum til að valda ekki óæskilegum truflunum á {{SITENAME}}.",
+       "delete-warning-toobig": "Þessi síða hefur stóra breytingaskrá, yfir $1 {{PLURAL:$1|breyting|breytingar}}.\nEyðing síðunnar gæti truflað vinnslu gangnasafns {{SITENAME}}; haltu áfram með varúð.",
+       "deleteprotected": "Þú getur ekki eytt þessari síðu því hún hefur verið vernduð.",
        "rollback": "Taka aftur breytingar",
        "rollbacklink": "taka aftur",
        "rollbacklinkcount": "taka aftur $1 {{PLURAL:$1|breytingu|breytingar}}",
        "rollbackfailed": "Mistókst að taka aftur",
        "cantrollback": "Ekki hægt að taka aftur breytingu, síðasti höfundur er eini höfundur þessarar síðu.",
        "alreadyrolled": "Ekki var hægt að taka síðustu breytingu [[:$1]] eftir [[User:$2|$2]] ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) til baka;\neinhver annar hefur breytt síðunni eða tekið breytinguna til baka.\n\nSíðasta breyting síðunnar er frá [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Beytingarágripið var: \"''$1''\".",
+       "editcomment": "Beytingaágripið var: <em>$1</em>.",
        "revertpage": "Tók aftur breytingar [[Special:Contributions/$2|$2]] ([[User talk:$2|spjall]]), breytt til síðustu útgáfu [[User:$1|$1]]",
        "revertpage-nouser": "Tók aftur breytingar falins notanda til síðustu útgáfu {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Tók til baka breytingar eftir $1; núverandi $2.",
        "sessionfailure": "Líklega er vandamál með innskráningar setuna þína;\nhætt hefur verið við þessa aðgerð sem vörn gegn mögulegu samskiptaráni setunar.\nFarðu aftur á fyrri síðu, endurhladdu hana og reyndu aftur.",
        "changecontentmodel-title-label": "Titill síðu",
        "changecontentmodel-reason-label": "Ástæða:",
+       "logentry-contentmodel-change-revertlink": "taka aftur",
+       "logentry-contentmodel-change-revert": "taka aftur",
        "protectlogpage": "Verndunarskrá",
        "protectlogtext": "Fyrir neðan er listi yfir síðuverndanir og -afverndanir.\nSjáðu [[Special:ProtectedPages|Verndunarskrá]] fyrir núverandi lista yfir verndaðar síður.",
        "protectedarticle": "verndaði „[[$1]]“",
        "protect-cascadeon": "Þessi síða er vernduð vegna þess að hún er ítengd eftirfarandi {{PLURAL:$1|síðu, sem er keðjuvernduð|síðum, sem eru keðjuverndaðar}}.\nBreytingar á verndunarstigi þessarar síðu munu ekki hafa áhrif á keðjuverndunina.",
        "protect-default": "Leyfa öllum notendum",
        "protect-fallback": "Leyfa eingöngu notendur með „$1“ réttindi",
-       "protect-level-autoconfirmed": "Leyfa aðeins sjálkrafa staðfesta notendur",
+       "protect-level-autoconfirmed": "Leyfa aðeins sjálfvikt staðfesta notendur",
        "protect-level-sysop": "Leyfa aðeins stjórnendur",
+       "protect-summary-desc": "[$1=$2] ($3)",
        "protect-summary-cascade": "keðjuvörn",
        "protect-expiring": "rennur út $1 (UTC)",
        "protect-expiring-local": "rennur út $1",
        "protect-othertime": "Annar tími:",
        "protect-othertime-op": "annar tími",
        "protect-existing-expiry": "Fyrri gildislok: $3, $2",
+       "protect-existing-expiry-infinity": "Fyrri gildislok: óendanlegt",
        "protect-otherreason": "Aðrar/fleiri ástæður:",
        "protect-otherreason-op": "Önnur ástæða",
-       "protect-dropdown": "*Algengar ástæður fyrir verndun\n** Gengdarlaus skemmdarverk\n** Gengdarlausar amasendingar\n** Breytingarstríð\n** Síða með margar heimsóknir",
+       "protect-dropdown": "*Algengar ástæður fyrir verndun\n** Gengdarlaus skemmdarverk\n** Gengdarlausar amasendingar\n** Breytingastríð\n** Síða með margar heimsóknir",
        "protect-edit-reasonlist": "Breyta verndarástæðum",
        "protect-expiry-options": "1 tími:1 hour,1 dag:1 day,1 viku:1 week,2 vikur:2 weeks,1 mánuð:1 month,3 mánuði:3 months,6 mánuði:6 months,1 ár:1 year,aldrei:infinite",
        "restriction-type": "Réttindi:",
        "viewdeletedpage": "Skoða eyddar síður",
        "undeletepagetext": "Eftirfarandi $1 {{PLURAL:$1|síðu hefur verið eytt en hún er þó enn í gagnagrunninum og getur verið endurvakin|síðum hefur verið eytt en eru þó enn í gagnagrunninum og geta verið endurvaknar}}.\nGagnagrunnurinn kann að vera tæmdur reglulega.",
        "undelete-fieldset-title": "Endurvekja breytingar",
-       "undeleteextrahelp": "Til þess að endurvekja alla breytingarskrá síðunnar, skildu öll box eftir óhökuð og ýttu á '''''{{int:undeletebtn}}'''''.\nTil þess að framkvæma ákveðna endurvakningu, ýttu á þau box sem standa hliðiná þeim útgáfum sem á að endurvekja og ýttu á '''''{{int:undeletebtn}}'''''.",
+       "undeleteextrahelp": "Til þess að endurvekja alla breytingaskrá síðunnar, skildu öll box eftir óhökuð og ýttu á '''''{{int:undeletebtn}}'''''.\nTil þess að framkvæma ákveðna endurvakningu, hakaðu í þá reiti sem standa hliðina á þeim útgáfum sem skal endurvekja og ýttu á '''''{{int:undeletebtn}}'''''.",
        "undeleterevisions": "$1 {{PLURAL:$1|breytingu|breytingum}} eytt",
-       "undeletehistory": "Ef þú endurvekur síðuna verða allar útgáfur færðar í breytingarsögu.\nEf ný síða með sama nafni hefur verið stofnuð síðan henni var eytt, verða breytingar síðunnar færðar síðast í breytingarskránna.",
+       "undeletehistory": "Ef þú endurvekur síðuna verða allar útgáfur færðar í breytingasögu.\nEf ný síða með sama nafni hefur verið stofnuð síðan henni var eytt, verða breytingar síðunnar færðar aftast í breytingaskrána.",
        "undeleterevdel": "Endurvakning síðu verður ekki framkvæmd ef það leiðir til þess að haus síðunnar eða breytingarsaga hennar verði að hluta til eydd.\nÍ slíkum málum, þarft þú að afhaka við eða affela nýjustu eyddu breytinguna.",
        "undeletehistorynoadmin": "Þessari síðu hefur verið eytt. Ástæðan sést í ágripinu fyrir neðan, ásamt upplýsingum um hvaða notendur breyttu síðunni fyrir eyðingu.\nInnihald greinarinnar er einungis aðgengilegt möppudýrum.",
        "undelete-revision": "Eydd breyting $1 (frá $4, kl. $5) eftir $3:",
-       "undeleterevision-missing": "Ógild eða týnd útgáfa.\nÞú gætir verið með vitlausan tengil, eða útgáfan gæti hafa verið tekin til baka eða fjarlægð úr breytingarskránni.",
+       "undeleterevision-missing": "Ógild eða týnd útgáfa.\nÞú gætir verið með rangan tengil, eða útgáfan gæti hafa verið tekin til baka eða fjarlægð úr breytingaskránni.",
        "undelete-nodiff": "Engin fyrri útgáfa fannst.",
        "undeletebtn": "Endurvekja",
        "undeletelink": "skoða/endurvekja",
        "undelete-search-prefix": "Sýna síður sem byrja á:",
        "undelete-search-submit": "Leita",
        "undelete-no-results": "Engar samsvarandi síður fundust í eyðingarskjalasafninu.",
-       "undelete-filename-mismatch": "Endurvakningu skráar mistókst með tímastipilinn $1: Skráarnafnið stenst ekki.",
+       "undelete-filename-mismatch": "Ekki er hægt að endurvekja útgáfu skráar með tímamerkið $1: Skráarheiti samsvara ekki.",
        "undelete-bad-store-key": "Endurvakningu útgáfu skráar mistókst með tímastipilinn $1: Skráin fannst ekki fyrir eyðingu.",
        "undelete-cleanup-error": "Villa við eyðingu ónotaðs skjalasafns $1",
        "undelete-missing-filearchive": "Mistókst að endurvekja skjalasafn með auðkenninu $1 því það er ekki til í gagnabankanum.\nMögulega er þegar búið að endurvekja það.",
        "undelete-error-long": "Það kom upp villa við endurvakningu skrárinnar:\n\n$1",
        "undelete-show-file-confirm": "Ertu viss um að þú viljir sjá eydda breytingu af skránni \"<nowiki>$1</nowiki>\" frá $2 $3?",
        "undelete-show-file-submit": "Já",
+       "undelete-revision-row2": "$1 ($2) $3 . . $4 $5 $6 $7 $8",
        "namespace": "Nafnrými:",
-       "invert": "allt nema valið",
+       "invert": "Snúa vali við",
        "tooltip-invert": "Hakaðu við þennan kassa til að fela breytingar á síðum innan ákveðins nafnrýmis",
+       "tooltip-whatlinkshere-invert": "Hakaðu við þennan reit til að fela tengla úr síðum með tilteknu nafnrými.",
        "namespace_association": "Tengd nafnrými",
        "tooltip-namespace_association": "Hakaðu við þennan kassa til að hafa með spjallsíður eða tengd nafnrými.",
        "blanknamespace": "(Aðalnafnrýmið)",
        "mycontris": "Framlög",
        "anoncontribs": "Framlög",
        "contribsub2": "Eftir {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Notandaaðgangurinn \"$1\" er ekki skráður.",
        "nocontribs": "Engar breytingar fundnar sem passa við þessa viðmiðun.",
        "uctop": "(núverandi)",
        "month": "Frá mánuðinum (og fyrr):",
        "sp-contributions-newbies": "Sýna aðeins breytingar frá nýjum notendum",
        "sp-contributions-newbies-sub": "Fyrir nýliða",
        "sp-contributions-newbies-title": "Breytingar nýrra notenda",
-       "sp-contributions-blocklog": "Fyrri bönn",
-       "sp-contributions-deleted": "Eyddar breytingar notanda",
-       "sp-contributions-uploads": "upphlöð",
-       "sp-contributions-logs": "Aðgerðaskrá",
+       "sp-contributions-blocklog": "fyrri bönn",
+       "sp-contributions-suppresslog": "bæld framlög notanda",
+       "sp-contributions-deleted": "eyddar breytingar notanda",
+       "sp-contributions-uploads": "innsendingar",
+       "sp-contributions-logs": "aðgerðaskrá",
        "sp-contributions-talk": "spjall",
        "sp-contributions-userrights": "Breyta notandaréttindum",
-       "sp-contributions-blocked-notice": "Þessi notandi er í banni.\nSíðasta færsla notandans úr bönnunarskrá er sýnd hér fyrir neðan til skýringar:",
-       "sp-contributions-blocked-notice-anon": "Þetta vistfang er í banni.\nSíðasta færsla vistfangsins úr bönnunarskrá er sýnd hér fyrir neðan til skýringar:",
+       "sp-contributions-blocked-notice": "Þessi notandi er í banni.\nSíðasta færsla notandans úr bannskrá er sýnd hér fyrir neðan til skýringar:",
+       "sp-contributions-blocked-notice-anon": "Þetta vistfang er í banni.\nSíðasta færsla vistfangsins úr bannskrá er sýnd hér fyrir neðan til skýringar:",
        "sp-contributions-search": "Leita að framlögum",
        "sp-contributions-username": "Vistfang eða notandanafn:",
        "sp-contributions-toponly": "Aðeins sýna síðustu breytingar",
+       "sp-contributions-newonly": "Aðeins sýna breytingar sem hafa útbúið síðu",
        "sp-contributions-submit": "Leita að breytingum",
        "whatlinkshere": "Hvað tengist hingað",
        "whatlinkshere-title": "Síður sem tengjast „$1“",
        "linkshere": "Eftirfarandi síður tengjast á '''[[:$1]]''':",
        "nolinkshere": "Engar síður tengjast á '''[[:$1]]'''.",
        "nolinkshere-ns": "Engar síður tengjast '''[[:$1]]''' í þessu nafnrými.",
-       "isredirect": "tilvísun",
+       "isredirect": "endurbeind síða",
        "istemplate": "innifalið",
-       "isimage": "Skráartengill",
+       "isimage": "skráartengill",
        "whatlinkshere-prev": "{{PLURAL:$1|fyrra|fyrri $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|næst|næstu $1}}",
        "whatlinkshere-links": "← tenglar",
        "whatlinkshere-hideredirs": "$1 tilvísanir",
        "whatlinkshere-hidetrans": "$1 ítengingar",
        "whatlinkshere-hidelinks": "$1 tengla",
-       "whatlinkshere-hideimages": "$1 skrátenglar",
+       "whatlinkshere-hideimages": "$1 skráatenglar",
        "whatlinkshere-filters": "Síur",
        "whatlinkshere-submit": "Fara",
        "autoblockid": "Sjálfvirkt bann $1",
        "unblock": "Afbanna notanda",
        "blockip": "Banna {{GENDER:$1|notanda}}",
        "blockip-legend": "Banna notanda",
-       "blockiptext": "Notaðu eyðublaðið hér að neðan til þess að banna ákveðið vistfang eða notandanafn.\nÞetta ætti einungis að gera til þess að koma í veg fyrir skemmdarverk, og í samræmi við [[{{MediaWiki:Policy-url}}|samþykktir]].\nGefðu nákvæma skýringu að neðan (til dæmis, með því að vísa í þær síður sem skemmdar voru).",
+       "blockiptext": "Notaðu eyðublaðið hér að neðan til þess að banna ákveðið IP-vistfang eða notandanafn.\nÞetta ætti einungis að gera til þess að koma í veg fyrir skemmdarverk, og í samræmi við [[{{MediaWiki:Policy-url}}|samþykktir]].\nGefðu nákvæma skýringu að neðan (til dæmis, með því að vísa í þær síður sem voru skemmdar).\nÞú getur bannað svið IP-vistfanga með því að nota [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] málsetningu; stærsta leyfilegt svið er /$1 fyrir IPv4 og /$2 fyrir IPv6.",
        "ipaddressorusername": "Vistfang eða notandanafn:",
        "ipbexpiry": "Bannið rennur út:",
        "ipbreason": "Ástæða:",
        "ipbsubmit": "Banna notanda",
        "ipbother": "Annar tími:",
        "ipboptions": "2 tíma:2 hours,1 dag:1 day,3 daga:3 days,1 viku:1 week,2 vikur:2 weeks,1 mánuð:1 month,3 mánuði:3 months,6 mánuði:6 months,1 ár:1 year,aldrei:infinite",
-       "ipbhidename": "Fela notandanafn úr breytingarskrá og listum",
+       "ipbhidename": "Fela notandanafn úr breytingaskrá og listum",
        "ipbwatchuser": "Vakta notanda- og spjallsíður þessa notanda",
        "ipb-disableusertalk": "Banna þessum notanda að breyta eigin spjallsíðu",
        "ipb-change-block": "Endurbanna notanda með þessum stillingum",
        "blockipsuccesssub": "Bann tókst",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] hefur verið bannaður/bönnuð.<br />\nSjá [[Special:BlockList|bannaðir notendur og vistföng]] fyrir yfirlit yfir núverandi bönn.",
        "ipb-blockingself": "Þú ert í þann mund að banna sjálfan þig! Ertu viss um að þú viljir gera það?",
-       "ipb-confirmhideuser": "Þú ert í þann mund að banna notanda sem er falinn. Notandanafn hans mun ekki birtast í listum og aðgerðarskrám. Ertu viss um að þú viljir gera það?",
+       "ipb-confirmhideuser": "Þú ert í þann mund að banna notanda sem er falinn. Notandanafn hans mun ekki birtast í listum og aðgerðaskrám. Ertu viss um að þú viljir gera það?",
        "ipb-edit-dropdown": "Breyta ástæðu fyrir banni",
        "ipb-unblock-addr": "Afbanna $1",
        "ipb-unblock": "Afbanna notanda eða vistfang",
        "unblocked": "[[User:$1|$1]] hefur verið afbannaður",
        "unblocked-range": "$1 hefur verið afbannaður",
        "unblocked-id": "Bann $1 hefur verið fjarlægt",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] hefur verið afbannaður.",
        "blocklist": "Bannaðir notendur og vistföng",
        "ipblocklist": "Bannaðir notendur og vistföng",
        "ipblocklist-legend": "Finna bannaðan notanda",
        "blocklist-target": "Beinist að",
        "blocklist-expiry": "Rennur út",
        "blocklist-by": "Bannaður af",
-       "blocklist-params": "Bönnunar stikar",
+       "blocklist-params": "Bann-viðföng",
        "blocklist-reason": "Ástæða",
        "ipblocklist-submit": "Leita",
        "ipblocklist-localblock": "Svæðisbundið bann",
        "infiniteblock": "aldrei",
        "expiringblock": "rennur út  $1 $2",
        "anononlyblock": "bara ónafngreindir",
-       "noautoblockblock": "sjálfbönnun óvirk",
+       "noautoblockblock": "sjálfvirkt bann óvirkt",
        "createaccountblock": "bann við stofnun nýrra aðganga",
        "emailblock": "tölvupóstur bannaður",
        "blocklist-nousertalk": "getur ekki breytt eigin spjallsíðu",
        "contribslink": "framlög",
        "emaillink": "senda tölvupóst",
        "autoblocker": "Vistfang þitt var sjálfkrafa bannað vegna þess að það var nýlega notað af „[[User:$1|$1]]“.\nÁstæðan fyrir því að $1 var bannaður er: „$2“",
-       "blocklogpage": "Bönnunarskrá",
-       "blocklog-showlog": "Notandinn hefur verið bannaður áður.\nSíðasta færsla notandans úr bönnunarskrá er sýnd hér fyrir neðan til skýringar:",
+       "blocklogpage": "Bannskrá",
+       "blocklog-showlog": "Notandinn hefur verið bannaður áður.\nSíðasta færsla notandans úr bannskrá er sýnd hér fyrir neðan til skýringar:",
        "blocklog-showsuppresslog": "Notandinn hefur verið bældur niður áður.\nSíðasta færsla notandans úr bælingarskrá er sýnd hér fyrir neðan til skýringar:",
        "blocklogentry": "bannaði „[[$1]]“; rennur út eftir: $2 $3",
        "reblock-logentry": "breytti banni [[$1]] rennur út $2 $3",
        "unblocklogentry": "afbannaði $1",
        "block-log-flags-anononly": "bara ónefndir notendur",
        "block-log-flags-nocreate": "gerð aðganga bönnuð",
-       "block-log-flags-noautoblock": "sjálfkrafa bann óvirkt",
+       "block-log-flags-noautoblock": "sjálfvirkt bann óvirkt",
        "block-log-flags-noemail": "netfang bannað",
        "block-log-flags-nousertalk": "getur ekki breytt eigin spjallsíðu",
        "block-log-flags-angry-autoblock": "sjálfkrafa bann virkt",
        "block-log-flags-hiddenname": "notandanafn falið",
        "range_block_disabled": "Möppudýr geta ekki fjöldabannað vistföng á þessum wiki.",
        "ipb_expiry_invalid": "Tími ógildur.",
+       "ipb_expiry_old": "Tíminn er þegar runninn út.",
        "ipb_expiry_temp": "Bönn faldra notenda verða að vera varanleg.",
        "ipb_hide_invalid": "Mistókst að bæla niður þennan aðgang; hann hefur meira en $1 {{PLURAL:$1|breytingu|breytingar}}.",
        "ipb_already_blocked": "„$1“ er nú þegar í banni",
        "ipb-needreblock": "$1 er þegar bannaður. Vilt þú breyta banninu?",
        "ipb-otherblocks-header": "{{PLURAL:$1|Annað bann|Önnur bönn}}",
-       "unblock-hideuser": "Þú getur ekki afbannað þennan notanda, því notendanafn hans hefur verið falið.",
+       "unblock-hideuser": "Þú getur ekki afbannað þennan notanda, því notandanafn hans hefur verið falið.",
        "ipb_cant_unblock": "Villa: Bann-tala $1 fannst ekki. Bannið gæti verið útrunnið eða hún afbönnuð.",
        "ipb_blocked_as_range": "Villa: Ekki er hægt að afbanna vistfangið $1, því það er hluti af fjöldabanni.\nVistfangið var bannað sem hluti af fjöldabanninu $2, sem er hægt að afbanna.",
        "ip_range_invalid": "Ógilt vistfangasvið.",
        "ip_range_toolarge": "Fjöldabönn stærri en /$1 eru óheimil.",
        "proxyblocker": "Vefsels bann",
-       "proxyblockreason": "Vistfangið þitt hefur verið bannað því það er opið vefsel.\nVinsamlegast hafðu samband við internetþjónustuaðilann þinn eða netstjóra félagsins og láttu þá vita af þessu alvarlegu öryggisvandamáli.",
+       "proxyblockreason": "Vistfangið þitt hefur verið bannað því það er opinn milliþjónn/vefsel.\nHafðu endilega samband við internetþjónustuaðilann þinn eða netstjórann og láttu þá vita af þessu alvarlega öryggisvandamáli.",
+       "sorbs": "DNSBL",
        "sorbsreason": "Vistfangið þitt er á lista yfir opin vefsel í DNSBL sem er í notkun á {{SITENAME}}.",
        "sorbs_create_account_reason": "Vistfangið þitt er á lista yfir opin vefsel í DNSBL sem er notað af {{SITENAME}}.\nÞú getur ekki stofnað aðgang.",
        "cant-see-hidden-user": "Notandinn sem þú ert að reyna að banna hefur þegar verið bannaður og falinn.\nÞar sem þú hefur ekki þau réttindi að fela notendur, þá getur þú ekki séð eða breytt banni notandans.",
        "lockedbyandtime": "(af {{GENDER:$1|$1}} kl. $3, $2)",
        "move-page": "Færa $1",
        "move-page-legend": "Færa síðu",
-       "movepagetext": "Hér er hægt að endurnefna síðu. Hún færist, ásamt breytingaskránni, yfir á nýtt heiti og eldra heitið myndar tilvísun á það. Þú getur sjálfkrafa uppfært tilvísanir á nýja heitið. Ef þú vilt það síður, athugaðu þá hvort nokkuð myndist [[Special:DoubleRedirects|tvöfaldar]] eða [[Special:BrokenRedirects|brotnar tilvísanir]].\nÞú berð ábyrgð á því að tenglar vísi á rétta staði.\n\nAthugaðu að síðan mun '''ekki''' færast ef þegar er síða á nafninu sem þú hyggst færa hana á, nema sú síða sé tóm eða tilvísun sem vísar á síðuna sem þú ætlar að færa. Þú getur þar með fært síðuna aftur til baka án þess að missa breytingarsöguna, en ekki fært hana yfir venjulega síðu.\n\n'''Varúð:'''\nAthugaðu að þessi aðgerð getur kallað fram viðbrögð annarra notenda og getur þýtt mjög rótækar breytingar á vinsælum síðum.",
-       "movepagetext-noredirectfixer": "Með þessu eyðublaði er hægt að endurnefna síðu og færa alla breytingarskrá hennar á nýja nafnið. Gamli titillinn verður að tilvísun á nýja titilinn. \nAthugaðu hvort síðan tengist [[Special:DoubleRedirects|tvöfaldri]]- eða [[Special:BrokenRedirects|brotinni]] tilvísun.\nÞú berð ábyrgð á því að tenglarnir haldi áfram að tengjast á réttan stað.\n\nAthugaðu að síðan verður '''ekki''' færð ef síða er þegar til á nýja titlinum, nema hann sé annaðhvort tómur, tilvísun eða hafi enga breytingarskrá.\nÞetta merkir að þú getur fært síðu aftur til baka á þann stað sem hún var færð frá ef þú gerir mistök og þú getur ekki skrifað yfir síðu sem er þegar til.\n\n'''Varúð:'''\nEf síðan er vinsæl þá getur þessi aðgerð kallað fram viðbrögð annara notenda og getur þýtt mjög rótækar breytingar á öðrum síðum. Vertu viss um að þú skiljir hættuna áður en þú heldur áfram.",
+       "movepagetext": "Hér er hægt að endurnefna síðu. Hún færist, ásamt breytingaskránni, yfir á nýtt heiti og eldra heitið myndar tilvísun á það. Þú getur sjálfkrafa uppfært tilvísanir á nýja heitið. Ef þú vilt það síður, athugaðu þá hvort nokkuð myndist [[Special:DoubleRedirects|tvöfaldar]] eða [[Special:BrokenRedirects|rofnar tilvísanir]].\nÞú berð ábyrgð á því að tenglar vísi á rétta staði.\n\nAthugaðu að síðan mun <strong>ekki</strong> færast ef þegar er síða á nafninu sem þú hyggst færa hana á, nema sú síða sé tóm eða tilvísun sem vísar á síðuna sem þú ætlar að færa. Þú getur þar með fært síðuna aftur til baka án þess að missa breytingarsöguna, en ekki fært hana yfir venjulega síðu.\n\n<strong>Varúð:</strong>\nAthugaðu að þessi aðgerð getur kallað fram viðbrögð annarra notenda og getur þýtt mjög róttækar breytingar á vinsælum síðum.",
+       "movepagetext-noredirectfixer": "Með þessu eyðublaði er hægt að endurnefna síðu og færa alla breytingaskrá hennar á nýja nafnið. Gamli titillinn verður að tilvísun á nýja titilinn. \nAthugaðu hvort síðan tengist [[Special:DoubleRedirects|tvöfaldri]]- eða [[Special:BrokenRedirects|brotinni]] tilvísun.\nÞú berð ábyrgð á því að tenglarnir haldi áfram að tengjast á réttan stað.\n\nAthugaðu að síðan verður <strong>ekki</strong> færð ef síða er þegar til á nýja titlinum, nema hann sé annaðhvort tómur, tilvísun eða hafi enga breytingarskrá.\nÞetta merkir að þú getur fært síðu aftur til baka á þann stað sem hún var færð frá ef þú gerir mistök og þú getur ekki skrifað yfir síðu sem er þegar til.\n\n<strong>Varúð:</strong>\nEf síðan er vinsæl þá getur þessi aðgerð kallað fram viðbrögð annara notenda og getur þýtt mjög róttækar breytingar á öðrum síðum. Vertu viss um að þú skiljir hættuna áður en þú heldur áfram.",
        "movepagetalktext": "Ef þú hakar við þennan reit mun viðeigandi spjallsíða vera færð sjálfkrafa á nýja titilinn, nema að spjallsíða sem er ekki tóm sé þegar til staðar.\n\nÍ því tilfelli þarft þú að færa eða sameina síðuna handvirkt ef þess er óskað.",
-       "moveuserpage-warning": "'''Viðvörun:''' Þú ert í þann mund að færa notendasíðu. Athugaðu aðeins síðan verður færð og notendanafni hans verður '''ekki''' breytt.",
+       "moveuserpage-warning": "<strong>Viðvörun:</strong> Þú ert í þann mund að færa notandasíðu. Athugaðu aðeins síðan verður færð og notandanafni hans verður <em>ekki</em> breytt.",
+       "movecategorypage-warning": "<strong>Viðvörun:</strong> Þú ert í þann mund að færa flokkssíðu. Athugaðu aðeins síðan verður færð og allar síður í gamla flokknum verða <em>ekki</em> endurflokkaðar í nýja flokkinn.",
        "movenologintext": "Þú verður að vera [[Special:UserLogin|innskráð(ur)]] til að geta fært síður.",
        "movenotallowed": "Þú hefur ekki leyfi til að færa síður.",
        "movenotallowedfile": "Þú hefur ekki leyfi til að færa skrár.",
        "cant-move-user-page": "Þú hefur ekki leyfi til að færa notandasíðu (fyrir utan undirsíður).",
        "cant-move-to-user-page": "Þú hefur ekki leyfi til að færa síðu á notandasíðu (að frátöldum undirsíðum notanda).",
+       "cant-move-category-page": "Þú hefur ekki leyfi til að færa flokkasíður.",
+       "cant-move-to-category-page": "Þú hefur ekki leyfi til að færa síður yfir á flokkasíður.",
        "newtitle": "Nýr titill:",
        "move-watch": "Vakta þessa síðu",
        "movepagebtn": "Færa síðu",
        "movepage-moved": "'''„$1“ hefur verið færð á „$2“'''",
        "movepage-moved-redirect": "Tilvísun hefur verið búin til.",
        "movepage-moved-noredirect": "Tilvísun var ekki búin til.",
-       "articleexists": "Annaðhvort er þegar til síða undir þessum titli, eða sá titill sem þú hefur valið er ekki gildur.\nVinsamlegast veldu annan titil.",
+       "articleexists": "Annaðhvort er þegar til síða undir þessum titli, eða sá titill sem þú hefur valið er ekki gildur.\nVeldu einhvern annan titil.",
        "cantmove-titleprotected": "Þú getur ekki fært síðu á þessa staðsetningu, því nýi titillinn hefur verið verndaður gegn sköpun",
        "movetalk": "Færa meðfylgjandi spjallsíðu",
        "move-subpages": "Færa undirstíður (upp að $1)",
        "movenosubpage": "Þessi síða hefur engar undirsíður.",
        "movereason": "Ástæða:",
        "revertmove": "taka til baka",
-       "delete_and_move_text": "==Beiðni um eyðingu==\n\nSíðan „[[:$1]]“ er þegar til. Viltu eyða henni til þess að rýma til fyrir flutningi?",
+       "delete_and_move_text": "Úttakssíðan „[[:$1]]“ er þegar til. Viltu eyða henni til þess að rýma til fyrir flutningi?",
        "delete_and_move_confirm": "Já, eyða síðunni",
        "delete_and_move_reason": "Eytt til að rýma til fyrir flutning frá \"[[$1]]\"",
        "selfmove": "Nýja nafnið er það sama og gamla, þú verður að velja annað nafn.",
        "imagenocrossnamespace": "Get ekki fært skrá í skrálaust nafnrými",
        "nonfile-cannot-move-to-file": "Get ekki fært annað en skrár í nafnrými skráa.",
        "imagetypemismatch": "Nýi nafnaukinn passar ekki við tegund hennar",
-       "imageinvalidfilename": "Markskráarnafnið er ógilt",
+       "imageinvalidfilename": "Markskráarheitið er ógilt",
        "fix-double-redirects": "Uppfæra tilvísanir sem vísa á upphaflegan titil",
        "move-leave-redirect": "Skilja tilvísun eftir",
        "protectedpagemovewarning": "'''Viðvörun:''' Þessari síðu hefur verið læst svo aðeins notendur með möppudýraréttindi geta fært hana.\nSíðasta færsla síðunnar úr verndunarskrá er sýnd til skýringar:",
        "semiprotectedpagemovewarning": "'''Athugið''': Þessari síðu hefur verið læst þannig að aðeins innskráðir notendur geti fært hana.\nSíðasta færsla síðunnar úr verndunarskrá er sýnd til skýringar:",
-       "move-over-sharedrepo": "== Skráin er þegar til ==\n[[:$1]] er þegar til í sameiginlega myndasafninu. Ef skráin yrði færð á þennan titil myndi hún sjást í stað þeirrar skráar sem er til fyrir á sameiginlega myndasafninu.",
-       "file-exists-sharedrepo": "Skráarnafnið er þegar í notkun á sameiginlega myndasafninu.\nVinsamlegast veldu annað nafn.",
+       "move-over-sharedrepo": "[[:$1]] er þegar til í sameiginlegu myndasafni. Ef skráin yrði færð á þennan titil myndi hún sjást í stað þeirrar skrár sem er til fyrir.",
+       "file-exists-sharedrepo": "Skráarheitið er þegar í notkun á sameiginlega myndasafninu.\nVeldu eitthvað annað nafn.",
        "export": "Flytja út síður",
        "exporttext": "Þú getur flutt texta og breytingarsögu síðu eða fjölda síðna sem eru tilgreindar í XML skjali.\nÞessi gögn er hægt að flytja inn á annan wiki með möguleikanum að [[Special:Import|flytja inn síðu]].\n\nTil þess að flytja út síður, skrifaðu titla þeirra í reitina hér fyrir neðan, einn titil í hvern reit og veldu hvort þú viljir núverandi útgáfu með eldri útgáfum hennar, eða núverandi breytingu með upplýsingum um síðustu breytingu.\n\nEf síðari möguleikinn á við getur þú einnig notað tengil, til dæmis\n[[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] fyrir síðuna \"[[{{MediaWiki:Mainpage}}]]\".",
        "exportall": "Flytja út allar síður",
        "exportcuronly": "Aðeins núverandi útgáfu án breytingaskrár",
-       "exportnohistory": "----\n'''Athugaðu:''' Að flytja út alla breytingasögu síðna á þennan hátt hefur verið óvirkjað vegna ástæðna afkasta.",
+       "exportnohistory": "----\n<strong>Athugaðu:</strong> Að flytja út alla breytingasögu síðna á þennan hátt hefur verið gert óvirkt vegna afkastasjónarmiða.",
        "exportlistauthors": "Innifela tæmandi lista af breytingum fyrir allar síður",
        "export-submit": "Flytja",
        "export-addcattext": "Bæta við síðum frá flokkinum:",
        "export-addnstext": "Bæta við síðum frá nafnrýminu:",
        "export-addns": "Bæta við",
        "export-download": "Vista sem skjal",
-       "export-templates": "Innifala sniðin með",
+       "export-templates": "Hafa með sniðmát",
        "export-pagelinks": "Innifela tengdar síður með dýptinni:",
-       "allmessages": "Meldingar",
+       "export-manual": "Bæta handvirkt við síðum:",
+       "allmessages": "Kerfismeldingar",
        "allmessagesname": "Titill",
        "allmessagesdefault": "Sjálfgefinn texti skilaboða",
        "allmessagescurrent": "Núverandi texti",
-       "allmessagestext": "Þetta er listi yfir kerfismeldingar í Melding-nafnrýminu.\nVinsamlegast heimsæktu [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki-staðfæringuna] og [//translatewiki.net translatewiki.net] ef þú vilt taka þátt í almennri MediaWiki-staðfæringu.",
-       "allmessagesnotsupportedDB": "Það er ekki hægt að nota '''{{ns:special}}:Allmessages''' því '''$wgUseDatabaseMessages''' hefur verið gerð óvirk.",
+       "allmessagestext": "Þetta er listi yfir kerfismeldingar í MediaWiki-nafnrýminu.\nSkoðaðu vefinn fyrir [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki-staðfærsluna] og [//translatewiki.net translatewiki.net] ef þú vilt taka þátt í almennri MediaWiki-staðfærslu.",
+       "allmessagesnotsupportedDB": "Það er ekki hægt að nota <strong>$wgUseDatabaseMessages</strong> því hefur verið gert óvirkt.",
        "allmessages-filter-legend": "Sía",
        "allmessages-filter": "Sía með breytingarstöðu:",
        "allmessages-filter-unmodified": "Óbreytt",
        "thumbnail-temp-create": "Mistókst að búa til bráðabirgða-smámyndaskrá",
        "thumbnail-dest-create": "Gat ekki vistað smámynd á markstað",
        "thumbnail_invalid_params": "Breytur smámyndarinnar eru rangar",
+       "thumbnail_toobigimagearea": "Skrá með málsetningar stærri en $1",
        "thumbnail_dest_directory": "Mistókst að búa til niðurhals möppu",
        "thumbnail_image-type": "Enginn stuðningur er við þetta skráarsnið",
-       "thumbnail_gd-library": "Ófullkomin stilling GD-safns: Skortir aðgerðina $1",
-       "thumbnail_image-missing": "Skránna vantar: $1",
+       "thumbnail_gd-library": "Ófullkomin stilling GD-aðgerðasafns: Vantar aðgerðina $1",
+       "thumbnail_image-missing": "Skrána virðist vanta: $1",
        "import": "Flytja inn síður",
        "importinterwiki": "Flytja inn frá öðru wiki",
-       "import-interwiki-text": "Veldu wiki og síðutitil til að flytja inn.\nDagsetningar og notendanöfn breytinganna verður haldið.\nAllir innflutningar frá öðrum wikum eru skráð í [[Special:Log/import|innflutningsskránna]].",
+       "import-interwiki-text": "Veldu wiki og síðutitil til að flytja inn.\nDagsetningumog notandanöfnum breytinganna verður haldið.\nAllir innflutningar frá öðrum wikium eru skráð í [[Special:Log/import|innflutningsskrána]].",
+       "import-interwiki-sourcewiki": "Uppruna-wiki:",
+       "import-interwiki-sourcepage": "Upprunaleg síða:",
        "import-interwiki-history": "Afrita allar breytingar þessarar síðu",
-       "import-interwiki-templates": "Innifala öll snið með",
+       "import-interwiki-templates": "Hafa með öll sniðmát",
        "import-interwiki-submit": "Flytja inn",
-       "import-upload-filename": "Skráarnafn:",
+       "import-mapping-default": "Flytja inn á sjálfgefna staði",
+       "import-mapping-namespace": "Flytja inn í nafnrými:",
+       "import-mapping-subpage": "Flytja inn sem undirsíður eftirfarandi síðu:",
+       "import-upload-filename": "Skráarheiti:",
        "import-comment": "Athugasemdir:",
-       "importtext": "Vinsamlegast fluttu út skránna frá upprunalegum wiki með því að nota [[Special:Export|Flytja út síður]].\nVistaðu skránna á tölvunni þinni og hladdu henni inn hér.",
+       "importtext": "Flyttu út skrána út af upprunalegu wiki með því að nota [[Special:Export|Flytja út síður]].\nVistaðu skrána á tölvunni þinni og sendu hana svo inn hér.",
        "importstart": "Flyt inn síður...",
        "import-revision-count": "$1 {{PLURAL:$1|breyting|breytingar}}",
        "importnopages": "Engar síður til innflutnings.",
        "importcantopen": "Get ekki opnað innflutt skjal",
        "importbadinterwiki": "Villa í tungumálatengli",
        "importsuccess": "Innflutningi lokið!",
-       "importnosources": "Engir wikar sem á að flytja inn frá hava verið valdir og bein upphlöð breytingarskráa eru óvirk.",
+       "importnosources": "Engin wiki sem á að flytja inn frá hafa verið skilgreind og beinar innsendingar breytingaskráa eru óvirkar.",
        "importnofile": "Engri skrá var hlaðið inn.",
-       "importuploaderrorsize": "Upphleðsla skrárinnar mistókst.\nSkráin er stærri en leyfð hámarksstærð.",
-       "importuploaderrorpartial": "Upphleðsla skráarinnar mistókst.\nSkráinni var eingöngu hlaðið inn að hluta.",
-       "importuploaderrortemp": "Upphleðsla skrárinnar mistókst.\nBráðabirgðamappa fannst ekki.",
+       "importuploaderrorsize": "Innsending skrárinnar mistókst.\nSkráin er stærri en leyfð hámarksstærð.",
+       "importuploaderrorpartial": "Innsending skráarinnar mistókst.\nSkráinni var eingöngu hlaðið inn að hluta.",
+       "importuploaderrortemp": "Innsending skrárinnar mistókst.\nBráðabirgðamappa fannst ekki.",
        "import-parse-failure": "Þáttunarvilla við innflutning XML skjals",
        "import-noarticle": "Engin síða til innflutnings!",
        "import-nonewrevisions": "Engar breytingar voru fluttar inn (þær voru allar annaðhvort þegar til eða sleppt vegna villna).",
        "xml-error-string": "$1 í línu $2, dálki $3 ($4 bæt): $5",
        "import-upload": "Hlaða inn XML-gögnum",
-       "import-token-mismatch": "Týnd setu gögn.\nVinsamlegast reyndu aftur.",
+       "import-token-mismatch": "Týnd setugögn.\n\nÞú hefur kannski verið skráð/ur út. <strong>Athugaðu hvort þú sért ennþá skráð/ur inn og reyndu aftur</strong>.\nEf það virkar ekki, reyndu að [[Special:UserLogout|skrá þig út]], skrá þig aftur inn og gakktu úr skugga um að vafrinn þinn leyfi vefkökur frá þessu vefsvæði.",
        "import-invalid-interwiki": "Get ekki flutt inn frá þessum wiki.",
        "import-error-edit": "Síðan \"$1\" var ekki flutt inn því þú hefur ekki réttindi til að breyta henni.",
        "import-error-create": "Síðan \"$1\" var ekki flutt inn því þú hefur ekki réttindi til að stofna hana.",
        "import-rootpage-invalid": "Uppgefin móðursíða hefur ógildan titil.",
        "import-rootpage-nosubpage": "Nafnrými „$1“ móðursíðunnar leyfir ekki undirsíður.",
        "importlogpage": "Innflutningsskrá",
-       "importlogpagetext": "Hér er listi yfir innflutninga möppdýra á síðum ásamt breytingarskránni frá öðrum wiki.",
+       "importlogpagetext": "Hér er listi yfir innflutning möppdýra á síðum ásamt breytingarkrám frá öðrum wiki.",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|breyting flutt|breytingar fluttar}} inn",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|breyting flutt|breytingar fluttar}} inn frá $2",
        "javascripttest": "JavaScript prófun",
        "javascripttest-pagetext-noframework": "Þessi síða er frátekin fyrir JavaScript prófanir.",
        "javascripttest-pagetext-unknownframework": "Óþekktur prófunarrammi „$1“.",
+       "javascripttest-pagetext-unknownaction": "Óþekkt aðgerð \"$1\".",
        "javascripttest-pagetext-frameworks": "Veldu einn eftirtalinna prófunarramma: $1",
-       "javascripttest-pagetext-skins": "Veldu þema sem á að keyra prófanirnar á:",
+       "javascripttest-pagetext-skins": "Veldu skinn til að keyra prófanirnar á:",
        "javascripttest-qunit-intro": "Sjá [$1 tilraunaskjölun] á mediawiki.org.",
        "tooltip-pt-userpage": "Notandasíðan þín",
        "tooltip-pt-anonuserpage": "Notandasíðan fyrir vistfangið þitt",
        "tooltip-pt-mytalk": "Spjallsíðan þín",
        "tooltip-pt-anontalk": "Spjallsíðan fyrir þetta vistfang",
-       "tooltip-pt-preferences": "Almennar stillingar",
+       "tooltip-pt-preferences": "Kjörstillingar þínar",
        "tooltip-pt-watchlist": "Listi yfir síður sem þú fylgist með breytingum á",
        "tooltip-pt-mycontris": "Listi yfir framlög þín",
+       "tooltip-pt-anoncontribs": "Listi yfir breytingar sem hafa verið gerðar frá þessu vistfangi",
        "tooltip-pt-login": "Þú ert hvattur/hvött til að innskrá þig, það er hinsvegar ekki skylda.",
        "tooltip-pt-logout": "Útskráning",
        "tooltip-pt-createaccount": "Þú ert hvattur/hvött til að búa til aðgang og skrá þig inn, en það er ekki skylda.",
        "tooltip-search-fulltext": "Leita á síðunum eftir þessum texta",
        "tooltip-p-logo": "Forsíða",
        "tooltip-n-mainpage": "Forsíða {{SITENAME}}",
-       "tooltip-n-mainpage-description": "Heimsækja forsíðuna",
+       "tooltip-n-mainpage-description": "Fara á forsíðuna",
        "tooltip-n-portal": "Um verkefnið, hvernig er hægt að hjálpa og hvar á að byrja",
        "tooltip-n-currentevents": "Finna upplýsingar um líðandi stund",
        "tooltip-n-recentchanges": "Listi yfir nýlegar breytingar.",
        "tooltip-n-help": "Efnisyfirlit yfir hjálparsíður.",
        "tooltip-t-whatlinkshere": "Listi yfir síður sem tengjast í þessa",
        "tooltip-t-recentchangeslinked": "Nýlegar breytingar á ítengdum síðum",
-       "tooltip-feed-rss": "RSS fyrir þessa síðu",
-       "tooltip-feed-atom": "Atom fyrir þessa síðu",
-       "tooltip-t-contributions": "Listi yfir framlög frá þessum notanda",
-       "tooltip-t-emailuser": "Senda þessum notanda tölvupóst",
+       "tooltip-feed-rss": "RSS-streymi fyrir þessa síðu",
+       "tooltip-feed-atom": "Atom-streymi fyrir þessa síðu",
+       "tooltip-t-contributions": "Listi yfir framlög frá {{GENDER:$1|þessum notanda}}",
+       "tooltip-t-emailuser": "Senda {{GENDER:$1|þessum notanda}} tölvupóst",
+       "tooltip-t-info": "Frekari upplýsingar um þessa síðu",
        "tooltip-t-upload": "Hlaða inn skrám",
        "tooltip-t-specialpages": "Listi yfir kerfissíður",
        "tooltip-t-print": "Prentanleg útgáfa af þessari síðu",
        "tooltip-ca-nstab-project": "Sýna verkefnasíðuna",
        "tooltip-ca-nstab-image": "Sýna skráarsíðu",
        "tooltip-ca-nstab-mediawiki": "Sýna kerfisskilaboðin",
-       "tooltip-ca-nstab-template": "Sýna sniðið",
+       "tooltip-ca-nstab-template": "Sýna sniðmátið",
        "tooltip-ca-nstab-help": "Sýna hjálparsíðuna",
        "tooltip-ca-nstab-category": "Sýna efnisflokkasíðuna",
        "tooltip-minoredit": "Merkja þessa breytingu sem minniháttar",
        "tooltip-save": "Vista breytingarnar",
-       "tooltip-preview": "Forskoða breytingarnar, vinsamlegast gerðu þetta áður en þú vistar!",
+       "tooltip-preview": "Forskoða breytingarnar þínar. Gerðu þetta áður en þú vistar.",
        "tooltip-diff": "Sýna hvaða breytingar þú gerðir á textanum.",
        "tooltip-compareselectedversions": "Sjá breytingarnar á þessari grein á milli útgáfanna sem þú valdir.",
        "tooltip-watch": "Bæta þessari síðu á vaktlistann þinn",
-       "tooltip-watchlistedit-normal-submit": "Fjarlægja titla",
+       "tooltip-watchlistedit-normal-submit": "Fjarlægja síður",
        "tooltip-watchlistedit-raw-submit": "Uppfæra vaktlistann",
        "tooltip-recreate": "Endurvekja síðuna þó henni hafi verið eytt",
        "tooltip-upload": "Hefja innhleðslu",
        "tooltip-rollback": "\"taka aftur\" breytir greininni til síðasta höfundar með einum smelli",
        "tooltip-undo": "„Afturkalla þessa breytingu“ breytir aftur til síðustu breytingu og opnar breytinguna í forskoðun. Hægt er að bæta við ástæðu í breytingarávarpinu.",
-       "tooltip-preferences-save": "Vista stillingar",
+       "tooltip-preferences-save": "Vista kjörstillingar",
        "tooltip-summary": "Bættu við stuttu ágripi",
-       "common.css": "/* Allt CSS sem sett er hér mun virka á öllum þemum. */",
+       "interlanguage-link-title": "$1 – $2",
+       "interlanguage-link-title-nonlang": "$1 – $2",
+       "common.css": "/* Allt CSS sem sett er hér mun verða virkjað í öllum skinnum. */",
+       "print.css": "/* Allt CSS sem sett er hér mun hafa áhrif á útlit prentunar. */",
+       "noscript.css": "/* Allt CSS sem sett er hér mun hafa áhrif á notendur sem ekki eru með virkt JavaScript. */",
+       "group-autoconfirmed.css": "/* Allt CSS sem sett er hér mun einungis hafa áhrif á sjálfvikt staðfesta notendur. */",
+       "group-user.css": "/* Allt CSS sem sett er hér mun einungis hafa áhrif á skráða notendur. */",
+       "group-bot.css": "/* Allt CSS sem sett er hér mun einungis hafa áhrif á vélmenni. */",
+       "group-sysop.css": "/* Allt CSS sem sett er hér mun einungis hafa áhrif á stjórnendur. */",
+       "group-bureaucrat.css": "/* Allt CSS sem sett er hér mun einungis hafa áhrif á möppudýr. */",
        "common.js": "/* Allt JavaScript sem sett er hér mun virka í hvert skipti sem að síða hleðst. */",
+       "group-autoconfirmed.js": "/* Allt JavaScript sem sett er hér mun einungis hafa áhrif á sjálfvikt staðfesta notendur. */",
+       "group-user.js": "/* Allt JavaScript sem sett er hér mun einungis hafa áhrif á skráða notendur. */",
+       "group-bot.js": "/* Allt JavaScript sem sett er hér mun einungis hafa áhrif á vélmenni. */",
+       "group-sysop.js": "/* Allt JavaScript sem sett er hér mun einungis hafa áhrif á stjórnendur. */",
+       "group-bureaucrat.js": "/* Allt JavaScript sem sett er hér mun einungis hafa áhrif á möppudýr. */",
        "anonymous": "$1 {{PLURAL:$1|óþekktur notandi|óþekktir notendur}} á {{SITENAME}}",
        "siteuser": "{{SITENAME}} notandi $1",
        "anonuser": "{{SITENAME}} nafnlaus notandi $1",
        "lastmodifiedatby": "Þessari síðu var síðast breytt $1 klukkan $2 af $3.",
        "othercontribs": "Byggt á verkum $1.",
        "others": "aðrir",
-       "siteusers": "{{SITENAME}} {{PLURAL:$2|notandi|notendur}} $1",
+       "siteusers": "{{SITENAME}} {{PLURAL:$2|{{GENDER:$1|notandi}}|notendur}} $1",
        "anonusers": "{{SITENAME}} {{PLURAL:$2|nafnlaus notandi|nafnlausir notendur}} $1",
        "creditspage": "Höfundar síðunnar",
        "nocredits": "Engar höfundarupplýsingar eru til um þessa síðu",
-       "spamprotectiontitle": "Amapósts sía",
-       "spamprotectiontext": "Textinn sem þú vildir vista var hafnað af amapósts síunni.\nÞetta er líklega vegna tengils á síðu sem er á svörtum lista.",
-       "spamprotectionmatch": "Eftirfarandi texti hrinti amapósts síunni af stað: $1",
-       "spambot_username": "MediaWiki amapósts hreinsun",
+       "spamprotectiontitle": "Amapóstssía",
+       "spamprotectiontext": "Textinn sem þú vildir vista var hafnað af amasendingasíunni.\nÞetta er líklega vegna tengils á síðu sem er á svörtum lista.",
+       "spamprotectionmatch": "Eftirfarandi texti setti amasendingasíuna í gang: $1",
+       "spambot_username": "Hreinsun á MediaWiki amasendingum",
        "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.\n<strong>ekki</strong> fylla þetta út!",
+       "simpleantispam-label": "Amasendingavörn.\n<strong>Ekki</strong> fylla þetta út!",
        "pageinfo-title": "Upplýsingar um $1",
        "pageinfo-not-current": "Því miður er ekki hægt að veita þessar upplýsingar um gamlar útgáfur.",
        "pageinfo-header-basic": "Grunnupplýsingar",
-       "pageinfo-header-edits": "Breytingarskrá",
+       "pageinfo-header-edits": "Breytingaskrá",
        "pageinfo-header-restrictions": "Verndunarstig síðunnar",
        "pageinfo-header-properties": "Eiginleikar síðunnar",
        "pageinfo-display-title": "Sýnilegur titill",
        "pageinfo-robot-index": "Heimilað",
        "pageinfo-robot-noindex": "Ekki heimilað",
        "pageinfo-watchers": "Fjöldi notenda, sem vakta síðuna",
+       "pageinfo-visiting-watchers": "Fjöldi notenda, sem vakta síðuna og skoðuðu nýlegar breytingar",
        "pageinfo-few-watchers": "Vöktuð af færri en $1 {{PLURAL:$1|notanda|notendum}}",
        "pageinfo-redirects-name": "Fjöldi tilvísana til þessarar síðu",
+       "pageinfo-redirects-value": "$1",
        "pageinfo-subpages-name": "Undirsíður þessarar síðu",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|tilvísun|tilvísanir}}; $3 {{PLURAL:$3|ekki tilvísun|ekki tilvísanir}})",
        "pageinfo-firstuser": "Stofnandi síðunnar",
        "pageinfo-recent-authors": "Fjöldi notenda sem breytt hafa síðunni nýlega",
        "pageinfo-magic-words": "Töfra {{PLURAL:$1|orð}} ($1)",
        "pageinfo-hidden-categories": "{{PLURAL:$1|Falinn flokkur|Faldir flokkar}} ($1)",
-       "pageinfo-templates": "{{PLURAL:$1|Innifalið snið|Innifalin snið}} ($1)",
+       "pageinfo-templates": "{{PLURAL:$1|Innifalið sniðmát|Innifalin sniðmát}} ($1)",
        "pageinfo-transclusions": "{{PLURAL:$1|Síða|Síður}} innfelldar á ($1)",
        "pageinfo-toolboxlink": "Síðuupplýsingar",
        "pageinfo-redirectsto": "Vísar til",
        "pageinfo-protect-cascading-yes": "Já",
        "pageinfo-protect-cascading-from": "Keðjuvörn stafar frá",
        "pageinfo-category-info": "Flokkaupplýsingar",
+       "pageinfo-category-total": "Heildarfjöldi meðlima",
        "pageinfo-category-pages": "Fjöldi síðna",
        "pageinfo-category-subcats": "Fjöldi undirflokka",
        "pageinfo-category-files": "Fjöldi skráa",
        "markaspatrolleddiff": "Merkja sem yfirfarið",
        "markaspatrolledtext": "Merkja þessa síðu sem yfirfarna",
+       "markaspatrolledtext-file": "Merkja þessa útgáfu skrár sem yfirfarna",
        "markedaspatrolled": "Merkja sem yfirfarið",
        "markedaspatrolledtext": "Valda breytingin [[:$1]] hefur verið merkt sem yfirfarin.",
        "rcpatroldisabled": "Slökkt á yfirferð nýlegra breytinga",
        "markedaspatrollederrornotify": "Mistókst að merkja síðuna sem yfirfarna.",
        "patrol-log-page": "Yfirferðarskrá",
        "patrol-log-header": "Þetta er skrá yfir yfirfarnar breytingar.",
-       "log-show-hide-patrol": "$1 Listi yfir vaktaðar síður",
+       "log-show-hide-patrol": "$1 listi yfir yfirfarnar síður",
+       "log-show-hide-tag": "$1 merkjaannáll",
        "deletedrevision": "Eyddi gamla útgáfu $1",
        "filedeleteerror-short": "Villa við eyðingu: $1",
        "filedeleteerror-long": "Það kom upp villa við eyðingu skrárinnar: $1",
        "mediawarning": "'''AÐVÖRUN''': Þessi skrá kann að hafa meinfýsinn kóða, ef keyrður kann hann að stofna kerfinu þínu í hættu.",
        "imagemaxsize": "Takmarka myndastærð:<br />''(fyrir skráarsíður)''",
        "thumbsize": "Stærð smámynda:",
+       "widthheight": "$1 × $2",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|síða|síður}}",
        "file-info": "stærð skráar: $1, MIME-tegund: $2",
-       "file-info-size": "$1 × $2 dílar, stærð skráar: $3, MIME-gerð: $4",
-       "file-info-size-pages": "$1 x $2 dílar, skráarstærð: $3, MIME-gerð: $4, $5 {{PLURAL:$5|síða|síður}} tengja í skránna.",
+       "file-info-size": "$1 × $2 mynddílar, skráarstærð: $3, MIME-gerð: $4",
+       "file-info-size-pages": "$1 × $2 mynddílar, skráarstærð: $3, MIME-gerð: $4, $5 {{PLURAL:$5|síða|síður}} tengja í skrána.",
        "file-nohires": "Það er engin hærri upplausn til.",
-       "svg-long-desc": "SVG-skrá, að nafni til $1 × $2 dílar, skráarstærð: $3",
-       "svg-long-desc-animated": "SVG-hreyfimynd, að nafni til $1 × $2 dílar, skráarstærð: $3",
+       "svg-long-desc": "SVG-skrá, að nafni til $1 × $2 mynddílar, skráarstærð: $3",
+       "svg-long-desc-animated": "SVG-hreyfimynd, að nafni til $1 × $2 mynddílar, skráarstærð: $3",
        "svg-long-error": "Ógild SVG skrá: $1",
        "show-big-image": "Upphafleg skrá",
        "show-big-image-preview": "Stærð þessarar forskoðunar: $1",
+       "show-big-image-preview-differ": "Stærð þessarar $3 forskoðunar á $2 skránni: $1.",
        "show-big-image-other": "{{PLURAL:$2|Önnur upplausn|Aðrar upplausnir}}: $1.",
-       "show-big-image-size": "$1 x $2 dílar",
+       "show-big-image-size": "$1 × $2 mynddílar",
        "file-info-gif-looped": "síendurtekin hreyfimynd",
        "file-info-gif-frames": "$1 {{PLURAL:$1|rammi|rammar}}",
        "file-info-png-looped": "síendurtekin hreyfimynd",
        "imagelisttext": "Hér fyrir neðan er $1 {{PLURAL:$1|skrá|skrám}} raðað $2.",
        "newimages-summary": "Þessi kerfissíða sýnir nýlega innhlaðnar skrár.",
        "newimages-legend": "Sía",
-       "newimages-label": "Skráarnafn (eða hluti þess):",
+       "newimages-label": "Skráarheiti (eða hluti þess):",
+       "newimages-showbots": "Birta innsend gögn frá vélmennum",
+       "newimages-hidepatrolled": "Fela yfirfarnar innsendingar",
        "noimages": "Ekkert að sjá.",
        "ilsubmit": "Leita",
        "bydate": "eftir dagsetningu",
        "sp-newimages-showfrom": "Leita af nýjum skráum frá $2, $1",
+       "video-dims": "$1, $2 × $3",
+       "seconds-abbrev": "$1 sek",
+       "minutes-abbrev": "$1 mín",
+       "hours-abbrev": "$1 klst",
+       "days-abbrev": "$1 d",
        "seconds": "$1 {{PLURAL:$1|sekúndu|sekúndum}}",
        "minutes": "$1 {{PLURAL:$1|mínútu|mínútum}}",
        "hours": "$1 {{PLURAL:$1|klukkutíma|klukkutímum}}",
        "metadata-expand": "Sýna frekari upplýsingar",
        "metadata-collapse": "Fela auka upplýsingar",
        "metadata-fields": "EXIF-lýsigögn í þessum skilaboðum verða innifalin á síðu myndarinnar þegar tafla lýsisgangnana er samfallin.\nÖnnur verða sjálfkrafa falin.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-langitem": "<strong>$2:</strong> $1",
+       "metadata-langitem-default": "$1",
        "exif-imagewidth": "Breidd",
        "exif-imagelength": "Hæð",
        "exif-bitspersample": "Bæti á einingu",
        "exif-compression": "Þjöppunar aðferð",
-       "exif-photometricinterpretation": "Díla myndbygging",
-       "exif-orientation": "Lega",
+       "exif-photometricinterpretation": "Uppbygging mynddíla",
+       "exif-orientation": "Stefna",
        "exif-samplesperpixel": "Fjöldi eininga",
        "exif-planarconfiguration": "Tilhögun gagna",
        "exif-ycbcrsubsampling": "Undirstökunarsnið Y gagnvart C",
        "exif-stripbytecounts": "Bæti á hverri þjappaðri ræmu",
        "exif-jpeginterchangeformat": "Jöfnun JPEG SOI",
        "exif-jpeginterchangeformatlength": "bæti af JPEG gögnum",
-       "exif-whitepoint": "Krómatísmi hvítpunkts",
-       "exif-primarychromaticities": "Krómatísmi grunnlita",
-       "exif-ycbcrcoefficients": "Litarýmisumbreytingargfylkistuðlar",
-       "exif-referenceblackwhite": "Pör svartra og hvítra tilvísana gilda",
+       "exif-whitepoint": "Krómatísmi hvítpunkts",
+       "exif-primarychromaticities": "Krómatísmi frumlita",
+       "exif-ycbcrcoefficients": "Umbreytingarfylkistuðlar litrýmdar",
+       "exif-referenceblackwhite": "Pör svartra og hvítra tilvísanagilda",
        "exif-datetime": "Dagsetning og tími breytingar",
        "exif-imagedescription": "Titill myndar",
        "exif-make": "Framleiðandi myndavélar",
-       "exif-model": "Tegund",
+       "exif-model": "Tegund myndavélar",
        "exif-software": "Hugbúnaður",
        "exif-artist": "Höfundur",
-       "exif-copyright": "höfundur",
+       "exif-copyright": "Handhafi höfundarréttar",
        "exif-exifversion": "Exif-útgáfa",
        "exif-flashpixversion": "Studd Flashpix útgáfa",
-       "exif-colorspace": "Litróf",
+       "exif-colorspace": "Litrýmd",
        "exif-componentsconfiguration": "Merking hverrar einingar",
-       "exif-compressedbitsperpixel": "Þjöppunar aðferð",
+       "exif-compressedbitsperpixel": "Aðferð við myndþjöppun",
        "exif-pixelydimension": "Breidd myndar",
        "exif-pixelxdimension": "Hæð myndar",
        "exif-usercomment": "Athugunarsemdir notanda",
        "exif-subsectimedigitized": "DagurTímiStafrænt sekúndubrot",
        "exif-exposuretime": "Lýsingartími",
        "exif-exposuretime-format": "$1 sekúnda ($2)",
-       "exif-fnumber": "F-tala",
-       "exif-exposureprogram": "Ljósastilling",
+       "exif-fnumber": "F-ljósop",
+       "exif-fnumber-format": "f/$1",
+       "exif-exposureprogram": "Lýsingarforrit",
        "exif-spectralsensitivity": "Litrófsnæmni",
        "exif-isospeedratings": "ISO filmuhraði",
-       "exif-shutterspeedvalue": "APEX lokunarhraði",
+       "exif-shutterspeedvalue": "APEX lokhraði",
        "exif-aperturevalue": "APEX ljósop",
        "exif-brightnessvalue": "APEX birtustig",
-       "exif-exposurebiasvalue": "APEX lýsingarbjagi",
+       "exif-exposurebiasvalue": "APEX lýsingarbjögun",
        "exif-maxaperturevalue": "Hámarksvídd ljósops innra byrðis linsu",
-       "exif-subjectdistance": "Lengd að viðfangsefni",
-       "exif-meteringmode": "Mælingarhamur",
-       "exif-lightsource": "Uppspretta ljóssins",
+       "exif-subjectdistance": "Fjarlægð að viðfangsefni",
+       "exif-meteringmode": "Mælingahamur",
+       "exif-lightsource": "Ljósgjafi",
        "exif-flash": "Leifturljós",
        "exif-focallength": "Brennivídd",
+       "exif-focallength-format": "$1 mm",
        "exif-subjectarea": "Svæði viðfangsefnis",
-       "exif-flashenergy": "orka leifturljóss",
+       "exif-flashenergy": "Orka leifturljóss",
        "exif-focalplanexresolution": "Upplausn brennidepils flatar X",
        "exif-focalplaneyresolution": "Upplausn brennidepils flatar Y",
        "exif-focalplaneresolutionunit": "Eining upplausnar brennidepils flatar",
        "exif-filesource": "Uppruni skráar",
        "exif-scenetype": "Myndefni",
        "exif-customrendered": "Sérstök myndvinnsla",
-       "exif-exposuremode": "Stilling lýsingar",
-       "exif-whitebalance": "Ljóshiti",
-       "exif-digitalzoomratio": "Aðdráttar hlutfall",
+       "exif-exposuremode": "Lýsingarhamur",
+       "exif-whitebalance": "Hvítvægi",
+       "exif-digitalzoomratio": "Aðdráttarhlutfall",
        "exif-focallengthin35mmfilm": "Brennivídd 35 mm filmu",
        "exif-scenecapturetype": "Gerð myndefnis",
-       "exif-contrast": "Andstæður",
-       "exif-saturation": "Litstyrkur",
+       "exif-contrast": "Birtuskil",
+       "exif-saturation": "Litmettun",
        "exif-sharpness": "Skerpa",
-       "exif-devicesettingdescription": "Lýsing stillinga tækisins",
+       "exif-devicesettingdescription": "Lýsing á stillingum tækisins",
        "exif-subjectdistancerange": "Svið lengdar á viðfangsefni",
-       "exif-imageuniqueid": "Einstakt einkenni myndar",
-       "exif-gpsversionid": "Útgáfa GPS-taggs",
+       "exif-imageuniqueid": "Einstakt auðkenni myndar",
+       "exif-gpsversionid": "Útgáfa GPS-merkis",
        "exif-gpslatituderef": "Norður- eða suður breiddargráða",
        "exif-gpslatitude": "Breiddargráða",
        "exif-gpslongituderef": "Austur- eða vestur lengdargráða",
        "exif-gpslongitude": "Lengdargráða",
        "exif-gpsaltituderef": "Hæðarviðmið",
-       "exif-gpsaltitude": "Stjörnuhæð",
+       "exif-gpsaltitude": "Hæð",
        "exif-gpstimestamp": "GPS tími (atómklukka)",
        "exif-gpssatellites": "Gervihnettir sem voru notaðir við mælingu",
        "exif-gpsstatus": "Staða móttakara",
        "exif-gpsmeasuremode": "Mælingarmáti",
        "exif-gpsdop": "Nákvæmni mælinga",
-       "exif-gpsspeedref": "Hraða eining",
-       "exif-gpsspeed": "Móttökuhraði GPS",
+       "exif-gpsspeedref": "Hraðaeining",
+       "exif-gpsspeed": "Hraði GPS-móttakara",
        "exif-gpstrack": "Átt hreyfingar",
        "exif-gpsimgdirection": "Stefna myndarinnar",
-       "exif-gpsmapdatum": "Landmælinga gögn",
-       "exif-gpsdestlatitude": "Breiddargráða",
-       "exif-gpsdestlongitude": "Lengdargráða",
+       "exif-gpsmapdatum": "Landmælingagögn",
+       "exif-gpsdestlatitude": "Breiddargráða áfangastaðar",
+       "exif-gpsdestlongitude": "Lengdargráða áfangastaðar",
+       "exif-gpsdestbearing": "Stefna til áfangastaðar",
        "exif-gpsdestdistance": "Fjarlægð á áfangastað",
        "exif-gpsprocessingmethod": "GPS vinnsluaðferð",
-       "exif-gpsareainformation": "Nafn GPS svæðis",
+       "exif-gpsareainformation": "Heiti GPS-svæðis",
        "exif-gpsdatestamp": "GPS dagsetning",
-       "exif-gpsdifferential": "GPS mismuns leiðrétting",
+       "exif-gpsdifferential": "GPS mismunaleiðrétting",
+       "exif-coordinate-format": "$1° $2′ $3″ $4",
        "exif-jpegfilecomment": "JPEG athugasemd",
        "exif-keywords": "Lykilorð",
-       "exif-worldregioncreated": "Heimsálfa sem myndin var tekin í",
-       "exif-countrycreated": "Land sem myndin var tekin í",
-       "exif-countrycodecreated": "Kóði fyrir landið sem myndin var tekin í",
-       "exif-provinceorstatecreated": "Fylki sem myndin var tekin í",
-       "exif-citycreated": "Borg sem myndin var tekin í",
-       "exif-sublocationcreated": "Hverfi borgarinnar sem myndin var tekin í",
+       "exif-worldregioncreated": "Heimsálfa þar sem myndin var tekin",
+       "exif-countrycreated": "Land þar sem myndin var tekin",
+       "exif-countrycodecreated": "Kóði fyrir landið þar sem myndin var tekin",
+       "exif-provinceorstatecreated": "Hérað eða fylki þar sem myndin var tekin",
+       "exif-citycreated": "Borg þar sem myndin var tekin",
+       "exif-sublocationcreated": "Hverfi borgarinnar þar sem myndin var tekin",
        "exif-worldregiondest": "Heimsálfa sýnd",
        "exif-countrydest": "Land sýnt",
        "exif-countrycodedest": "Kóði fyrir landið sýndur",
        "exif-objectname": "Stuttur titill",
        "exif-specialinstructions": "Sérstakar leiðbeiningar",
        "exif-headline": "Fyrirsögn",
+       "exif-credit": "Eigandi/Miðlari",
        "exif-source": "Uppruni",
+       "exif-editstatus": "Ritstjórnarleg staða myndar",
        "exif-urgency": "Nauðsyn",
+       "exif-locationdest": "Staður á mynd",
+       "exif-locationdestcode": "Kóði staðar á mynd",
        "exif-objectcycle": "Tími dags sem efnið er ætlað fyrir",
        "exif-contact": "Samskipta upplýsingar",
        "exif-writer": "Ritari myndlýsingar",
        "exif-languagecode": "Tungumál",
+       "exif-iimversion": "IIM útgáfa",
        "exif-iimcategory": "Flokkur",
        "exif-iimsupplementalcategory": "Undirflokkar",
        "exif-datetimeexpires": "Ekki nota eftir",
        "exif-lens": "Linsa notuð",
        "exif-serialnumber": "Raðnúmer myndavélarinnar",
        "exif-cameraownername": "Eigandi myndavélarinnar",
-       "exif-label": "Merki",
+       "exif-label": "Skýring",
        "exif-datetimemetadata": "Lýsigögnum síðast breytt",
        "exif-nickname": "Látlaust nafn myndar",
        "exif-rating": "Einkunn (af 5 mögulegum)",
+       "exif-rightscertificate": "Skilríki fyrir réttindastýringu",
        "exif-copyrighted": "Staða höfundaréttar",
-       "exif-copyrightowner": "Eigandi höfundarétts",
-       "exif-usageterms": "Notkunar skilmálar",
+       "exif-copyrightowner": "Eigandi höfundaréttar",
+       "exif-usageterms": "Notkunarskilmálar",
        "exif-webstatement": "Höfundaréttarleyfi á netinu",
        "exif-originaldocumentid": "Einstakt auðkenni upphafslegs skjals",
        "exif-licenseurl": "Vefslóð höfundarleyfis",
        "exif-morepermissionsurl": "Aðrar leyfisupplýsingar",
-       "exif-attributionurl": "Þegar þetta verk er endurnotað, tengdu á",
+       "exif-attributionurl": "Þegar þetta verk er endurnýtt, tengdu á",
+       "exif-preferredattributionname": "Þegar þetta verk er endurnýtt, vísaðu í",
        "exif-pngfilecomment": "PNG athugasemd",
        "exif-disclaimer": "Fyrirvari",
        "exif-contentwarning": "Viðvörun innihalds myndar",
        "exif-giffilecomment": "GIF athugasemd",
        "exif-intellectualgenre": "Tegund hlutar",
+       "exif-subjectnewscode": "Kóði efnis í flokkunarkerfi",
        "exif-scenecode": "IPTC kóði myndefnis",
-       "exif-event": "Lýsir viðburðinum",
-       "exif-organisationinimage": "Lýsir félaginu",
+       "exif-event": "Atburður á mynd",
+       "exif-organisationinimage": "Stofnun/félag á mynd",
+       "exif-personinimage": "Persóna á mynd",
        "exif-originalimageheight": "Hæð myndarinnar fyrir skerðingu",
        "exif-originalimagewidth": "Breidd myndar fyrir skerðingu",
-       "exif-compression-1": "Ósamþjappað",
+       "exif-contact-value": "$1\n\n$2\n<div class=\"adr\">\n$3\n\n$4, $5, $6 $7\n</div>\n$8",
+       "exif-subjectnewscode-value": "$2 ($1)",
+       "exif-compression-1": "Óþjappað",
+       "exif-compression-2": "CCITT Group 3 1-Dimensional Modified Huffman run length kóðun",
+       "exif-compression-3": "CCITT Group 3 Fax kóðun",
+       "exif-compression-4": "CCITT Group 4 Fax kóðun",
+       "exif-compression-5": "LZW",
+       "exif-compression-6": "JPEG (eldra)",
+       "exif-compression-7": "JPEG",
+       "exif-compression-8": "Afþjappa (Adobe)",
+       "exif-compression-32773": "PackBits (Macintosh RLE)",
+       "exif-compression-32946": "Afþjappa (PKZIP)",
+       "exif-compression-34712": "JPEG2000",
        "exif-copyrighted-true": "Höfundaréttarvarið",
        "exif-copyrighted-false": "Höfundaréttarstaða ekki tilgreind",
+       "exif-photometricinterpretation-0": "Svarthvítt (hvítt er 0)",
+       "exif-photometricinterpretation-1": "Svarthvítt (svart er 0)",
+       "exif-photometricinterpretation-2": "RGB",
+       "exif-photometricinterpretation-3": "Litaspjald",
+       "exif-photometricinterpretation-4": "Gegnsæismaski",
+       "exif-photometricinterpretation-5": "Aðskilið (líklegast CMYK)",
+       "exif-photometricinterpretation-6": "YCbCr",
+       "exif-photometricinterpretation-8": "CIE L*a*b*",
+       "exif-photometricinterpretation-9": "CIE L*a*b* (ICC kóðun)",
+       "exif-photometricinterpretation-10": "CIE L*a*b* (ITU kóðun)",
+       "exif-photometricinterpretation-32803": "Litsíunarfylki",
+       "exif-photometricinterpretation-34892": "Línulegt RAW",
        "exif-unknowndate": "Óþekkt dagsetning",
        "exif-orientation-1": "Venjuleg",
        "exif-orientation-2": "Speglað lárétt",
-       "exif-orientation-3": "Snýr 180°",
+       "exif-orientation-3": "Snúið 180°",
        "exif-orientation-4": "Speglað lóðrétt",
        "exif-orientation-5": "Snúið 90° rangsælis og speglað lóðrétt",
-       "exif-orientation-6": "Snýr 90° rangsælis",
+       "exif-orientation-6": "Snúið 90° rangsælis",
        "exif-orientation-7": "Snúið 90° réttsælis og speglað lóðrétt",
-       "exif-orientation-8": "Snýr 90° réttsælis",
-       "exif-planarconfiguration-2": "planar snið",
-       "exif-colorspace-65535": "Ókvarðað",
+       "exif-orientation-8": "Snúið 90° réttsælis",
+       "exif-planarconfiguration-1": "kögglað snið (chunky)",
+       "exif-planarconfiguration-2": "flatt snið (planar)",
+       "exif-xyresolution-i": "$1 pát",
+       "exif-xyresolution-c": "$1 p/sm",
+       "exif-colorspace-1": "sRGB",
+       "exif-colorspace-65535": "Ekki litkvarðað",
        "exif-componentsconfiguration-0": "er ekki til",
+       "exif-componentsconfiguration-1": "Y",
+       "exif-componentsconfiguration-2": "Cb",
+       "exif-componentsconfiguration-3": "Cr",
+       "exif-componentsconfiguration-4": "R",
+       "exif-componentsconfiguration-5": "G",
+       "exif-componentsconfiguration-6": "B",
        "exif-exposureprogram-0": "Ekki skilgreind",
        "exif-exposureprogram-1": "Handvirk",
        "exif-exposureprogram-2": "Hefðbundin stilling",
        "exif-exposureprogram-3": "Forgangur ljósops",
        "exif-exposureprogram-4": "Forgangur lokara",
+       "exif-exposureprogram-5": "Listræn forritun (styður frekar dýpt sjónsviðs)",
+       "exif-exposureprogram-6": "Sportleg forritun (styður frekar hraða myndatöku)",
        "exif-exposureprogram-7": "Andlitsmynda stilling (fyrir nærmyndir með bakrunninn í þoku)",
        "exif-exposureprogram-8": "Landslags stilling (fyrir landslagsmyndir með skarpan bakrunn)",
        "exif-subjectdistance-value": "$1 metrar",
        "exif-lightsource-0": "Óþekkt",
        "exif-lightsource-1": "Dagsbirta",
        "exif-lightsource-2": "Flúrljós",
-       "exif-lightsource-3": "Wolfram ljós (hvítglóandi ljós)",
+       "exif-lightsource-3": "Tungsten ljós (glóðarpera)",
        "exif-lightsource-4": "Leiftur",
        "exif-lightsource-9": "Gott veður",
        "exif-lightsource-10": "Skýjað",
        "exif-lightsource-13": "Dagur hvít flúrlýsing (N 4600 - 5400K)",
        "exif-lightsource-14": "Köld hvít flúrlýsing (W 3900 - 4500K)",
        "exif-lightsource-15": "Hvít flúrlýsing (WW 3200 - 3700K)",
-       "exif-lightsource-17": "Staðaljós A",
-       "exif-lightsource-18": "Staðaljós B",
-       "exif-lightsource-19": "Staðaljós C",
+       "exif-lightsource-17": "Staðalljós A",
+       "exif-lightsource-18": "Staðalljós B",
+       "exif-lightsource-19": "Staðalljós C",
+       "exif-lightsource-20": "D55",
+       "exif-lightsource-21": "D65",
+       "exif-lightsource-22": "D75",
+       "exif-lightsource-23": "D50",
        "exif-lightsource-24": "ISO stúdíótungsten",
-       "exif-lightsource-255": "Önnur ljósuppspretta",
-       "exif-flash-fired-0": "Leifturljósið var slökkt",
+       "exif-lightsource-255": "Annar ljósgjafi",
+       "exif-flash-fired-0": "Leifturljósið hleypti ekki af",
        "exif-flash-fired-1": "Leifturljósið kviknaði",
        "exif-flash-mode-1": "skyldubundið leifturljós",
        "exif-flash-mode-2": "skyldubundin bæling leifturljóss",
        "exif-flash-redeye-1": "lagfæring rauðra-augna",
        "exif-focalplaneresolutionunit-2": "tommur",
        "exif-sensingmethod-1": "Óskilgreint",
-       "exif-sensingmethod-2": "Einnar-kísilflögu litsviðs skynjari",
-       "exif-sensingmethod-3": "Tveggja-kísilflögu litsviðs skynjari",
-       "exif-sensingmethod-4": "Þriggja-kísilflögu litsviðs skynjari",
-       "exif-sensingmethod-5": "Raðbundinn litsviðs skynjari",
+       "exif-sensingmethod-2": "Einnar-kísilflögu litsviðsskynjari",
+       "exif-sensingmethod-3": "Tveggja-kísilflögu litsviðsskynjari",
+       "exif-sensingmethod-4": "Þriggja-kísilflögu litsviðsskynjari",
+       "exif-sensingmethod-5": "Raðbundinn litsviðsskynjari",
+       "exif-sensingmethod-7": "Þrílínulegur skynjari",
+       "exif-sensingmethod-8": "Raðbundinn línulegur litskynjari",
        "exif-filesource-3": "Stafræn ljósmyndavél",
+       "exif-scenetype-1": "Beint ljósmyndað myndefni",
        "exif-customrendered-0": "Venjuleg vinnsla",
        "exif-customrendered-1": "Sérstök vinnsla",
        "exif-exposuremode-0": "Sjálfvirk lýsing",
        "exif-exposuremode-1": "Handstillt lýsing",
+       "exif-exposuremode-2": "Sjálfvirk mislýsing (auto bracket)",
        "exif-whitebalance-0": "Sjálfgefinn ljóshiti",
        "exif-whitebalance-1": "Handstilltur ljóshiti",
        "exif-scenecapturetype-0": "Staðlað",
        "exif-gpsdop-excellent": "Frábært ($1)",
        "exif-gpsdop-good": "Gott ($1)",
        "exif-gpsdop-moderate": "Miðlungs ($1)",
-       "exif-gpsdop-fair": "Sæmilegt ($1)",
+       "exif-gpsdop-fair": "Bjart ($1)",
        "exif-gpsdop-poor": "Lélegt ($1)",
        "exif-objectcycle-a": "að morgni",
        "exif-objectcycle-p": "að kvöldi",
        "exif-objectcycle-b": "að morgni og kvöldi",
-       "exif-gpsdirection-t": "Raunátt",
-       "exif-gpsdirection-m": "Segulátt",
-       "exif-ycbcrpositioning-1": "Miðjuð",
+       "exif-gpsdirection-t": "Réttvísandi stefna",
+       "exif-gpsdirection-m": "Segulstefna",
+       "exif-ycbcrpositioning-1": "Miðjað",
+       "exif-ycbcrpositioning-2": "Samsetið (co-sited)",
        "exif-dc-contributor": "Framleggjendur",
+       "exif-dc-coverage": "Umfjöllunarefni miðað við tíma eða rúm",
        "exif-dc-date": "Dagsetning(ar)",
        "exif-dc-publisher": "Útgefandi",
        "exif-dc-relation": "Tengd margmiðlunargögn",
        "exif-dc-type": "Gerð miðlunarefnis",
        "exif-rating-rejected": "Hafnað",
        "exif-isospeedratings-overflow": "Stærri en 65535",
-       "exif-iimcategory-ace": "Listir, menning og skemmtun",
+       "exif-maxaperturevalue-value": "$1 APEX (f/$2)",
+       "exif-iimcategory-ace": "Listir, menning og afþreying",
        "exif-iimcategory-clj": "Gæpir og lög",
        "exif-iimcategory-dis": "Hamfarir og slys",
-       "exif-iimcategory-fin": "Hagkerfi og viðskipti",
+       "exif-iimcategory-fin": "Hagfræði og viðskipti",
        "exif-iimcategory-edu": "Menntun",
        "exif-iimcategory-evn": "Umhverfi",
        "exif-iimcategory-hth": "Heilsa",
-       "exif-iimcategory-hum": "Maðurinn",
-       "exif-iimcategory-lab": "Verkamennska",
+       "exif-iimcategory-hum": "Fólk",
+       "exif-iimcategory-lab": "Vinnumarkaður",
        "exif-iimcategory-lif": "Lífstíll og tómstundagaman",
        "exif-iimcategory-pol": "Pólitík",
        "exif-iimcategory-rel": "Trúarbrögð og trú",
        "namespacesall": "öll",
        "monthsall": "allir",
        "confirmemail": "Staðfesta netfang",
-       "confirmemail_noemail": "Þú hefur ekki gefið upp gilt netfang í [[Special:Preferences|notandastillingum]] þínum.",
+       "confirmemail_noemail": "Þú hefur ekki gefið upp gilt netfang í [[Special:Preferences|kjörstillingum]] þínum.",
        "confirmemail_text": "{{SITENAME}} krefst þess að þú staðfestir netfangið þitt áður en að þú getur notað eiginleika tengt því. Smelltu á hnappinn að neðan til að fá staðfestingarpóst sendan á netfangið. Pósturinn mun innihalda tengil með kóða í sér; opnaðu tengilinn í vafranum til að staðfesta að netfangið sé rétt.",
-       "confirmemail_pending": "Þér hefur þegar verið sendur staðfestingarkóði á netfang þitt;\nef þú varst að enda við að búa til nýtt notendanafn skaltu bíða í nokkrar mínútur og sjá hvort staðfestingarkóðinn berist þér ekki í pósti á næstunni áður en þú reynir aftur að fá nýjan staðfestingarkóða.",
+       "confirmemail_pending": "Þér hefur þegar verið sendur staðfestingarkóði á netfang þitt;\nef þú varst að enda við að búa til nýtt notandanafn skaltu bíða í nokkrar mínútur og sjá hvort staðfestingarkóðinn berist þér ekki í pósti á næstunni áður en þú reynir aftur að fá nýjan staðfestingarkóða.",
        "confirmemail_send": "Senda staðfestingarkóða með tölvupósti",
        "confirmemail_sent": "Staðfestingartölvupóstur sendur.",
        "confirmemail_oncreate": "Staðfestingarkóði hefur verði sendur á netfangið.\nÞennan kóða þarf ekki að staðfesta til að skrá sig inn, en þú þarft að gefa hann upp áður\nen opnað verður fyrir valmöguleika tengdum netfangi á þessu wiki-verkefni.",
        "confirmemail_body_set": "Einhver, sennilega þú, með vistfangið $1 hefur gefið upp þetta netfang fyrir aðganginn \"$2\" á {{SITENAME}}.\n\nTil að staðfesta að það hafi verið þú sem skráðir þig undir þessu nafni, og til þess að virkja póstsendingar í gegnum {{SITENAME}}, skaltu opna þennan tengil í vafranum þínum:\n\n$3\n\nEf þú ert *ekki* sá/sú sem skráði þetta notandanafn, skaltu opna þennan tengil til að ógilda staðfestinguna:\n\n$5\n\nÞessi staðfestingarkóði rennur út $4.",
        "confirmemail_invalidated": "Hætt við staðfestingu netfangs",
        "invalidateemail": "Hætta við staðfestingu netfangs",
-       "scarytranscludefailed": "[Gat ekki sótt snið fyrir $1]",
+       "scarytranscludefailed": "[Gat ekki sótt sniðmát fyrir $1]",
+       "scarytranscludefailed-httpstatus": "[Gat ekki sótt sniðmát fyrir $1: HTTP $2]",
        "scarytranscludetoolong": "[vefslóðin er of löng]",
-       "deletedwhileediting": "'''Viðvörun''': Þessari síðu var eytt eftir að þú fórst að breyta henni!",
-       "confirmrecreate": "Notandi [[User:$1|$1]] ([[User talk:$1|spjall]]) eyddi þessari síðu eftir að þú fórst að breyta henni út af:\n: ''$2''\nVinsamlegast staðfestu að þú viljir endurvekja hana.",
-       "confirmrecreate-noreason": "Notandinn [[User:$1|$1]] ([[User talk:$1|spjall]]) eyddi þessari síðu eftir að þú fórst að breyta henni.\nVinsamlegast staðfestu að þú viljir endurvekja hana.",
+       "deletedwhileediting": "<strong>Aðvörun:</strong> Þessari síðu var eytt eftir að þú fórst að breyta henni!",
+       "confirmrecreate": "Notandinn [[User:$1|$1]] ([[User talk:$1|spjall]]) eyddi þessari síðu eftir að þú fórst að breyta henni, af eftirfarandi ástæðu:\n: <em>$2</em>\nStaðfestu að þú viljir í alvörunni endurvekja þessa síðu.",
+       "confirmrecreate-noreason": "Notandinn [[User:$1|$1]] ([[User talk:$1|spjall]]) eyddi þessari síðu eftir að þú fórst að breyta henni. Staðfestu að þú viljir í alvörunni endurvekja þessa síðu.",
        "recreate": "Endurvekja",
+       "unit-pixel": "px",
        "confirm_purge_button": "Í lagi",
        "confirm-purge-top": "Hreinsa skyndiminni þessarar síðu?",
-       "confirm-purge-bottom": "Förgun síðu tæmir skyndimynnið og lætur nýjustu útgáfu síðunnar birtast.",
+       "confirm-purge-bottom": "Förgun síðu tæmir skyndiminnið og lætur nýjustu útgáfu síðunnar birtast.",
        "confirm-watch-button": "Í lagi",
        "confirm-watch-top": "Bæta þessari síðu á vaktlistann þinn?",
        "confirm-unwatch-button": "Í lagi",
        "confirm-unwatch-top": "Fjarlægja þessa síðu af vaktlistanum þínum?",
+       "semicolon-separator": ";&#32;",
+       "comma-separator": ",&#32;",
+       "colon-separator": ":&#32;",
+       "pipe-separator": "&#32;|&#32;",
+       "word-separator": "&#32;",
+       "ellipsis": "...",
+       "percent": "$1%",
+       "parentheses": "($1)",
+       "brackets": "[$1]",
        "quotation-marks": "„$1”",
        "imgmultipageprev": "← fyrri síða",
        "imgmultipagenext": "næsta síða →",
        "imgmultigo": "Áfram!",
        "imgmultigoto": "Fara á síðu $1",
+       "img-lang-opt": "$2 ($1)",
+       "img-lang-default": "(sjálfgefið tungumál)",
+       "img-lang-info": "Myndgera þessa mynd í $1. $2",
+       "img-lang-go": "Fara",
        "ascending_abbrev": "hækkandi",
        "descending_abbrev": "lækkandi",
        "table_pager_next": "Næsta síða",
        "autoredircomment": "Tilvísun á [[$1]]",
        "autosumm-new": "Ný síða: $1",
        "autosumm-newblank": "Bjó til tóma síðu",
-       "lag-warn-normal": "Breytingar nýrri en $1 {{PLURAL:$1|sekúnda|sekúndur}} kunna að vera ekki á þessm lista.",
+       "size-bytes": "$1 {{PLURAL:$1|bæt|bæti}}",
+       "size-kilobytes": "$1 KB",
+       "size-megabytes": "$1 MB",
+       "size-gigabytes": "$1 GB",
+       "size-terabytes": "$1 TB",
+       "size-petabytes": "$1 PB",
+       "size-exabytes": "$1 EB",
+       "size-zetabytes": "$1 ZB",
+       "size-yottabytes": "$1 YB",
+       "size-pixel": "$1 {{PLURAL:$1|mynddíll|mynddílar}}",
+       "size-kilopixel": "$1 KP",
+       "size-megapixel": "$1 MP",
+       "size-gigapixel": "$1 GP",
+       "size-terapixel": "$1 TP",
+       "size-petapixel": "$1 PP",
+       "size-exapixel": "$1 EP",
+       "size-zetapixel": "$1 ZP",
+       "size-yottapixel": "$1 YP",
+       "bitrate-bits": "$1 bps",
+       "bitrate-kilobits": "$1 kbps",
+       "bitrate-megabits": "$1 Mbps",
+       "bitrate-gigabits": "$1 Gbps",
+       "bitrate-terabits": "$1 Tbps",
+       "bitrate-petabits": "$1 Pbps",
+       "bitrate-exabits": "$1 Ebps",
+       "bitrate-zetabits": "$1 Zbps",
+       "bitrate-yottabits": "$1 Ybps",
+       "lag-warn-normal": "Breytingar nýrri en $1 {{PLURAL:$1|sekúnda|sekúndur}} kunna að vera ekki á þessum lista.",
        "lag-warn-high": "Vegna mikils álags á vefþjónanna, kunna breytingar yngri en $1 {{PLURAL:$1|sekúnda|sekúndur}} ekki að vera á þessum lista.",
        "watchlistedit-normal-title": "Breyta vaktlistanum",
        "watchlistedit-normal-legend": "Fjarlægja titla af vaktlistanum",
-       "watchlistedit-normal-explain": "Titlarnir á vaktlistanum þínum er sýndir fyrir neðan.\nTil að fjarlægja titil hakaðu í kassann við hliðina á honum og smelltu á „{{int:Watchlistedit-normal-submit}}“. Þú getur einnig [[Special:EditWatchlist/raw|breytt honum opnum]].",
-       "watchlistedit-normal-submit": "Fjarlægja titla",
+       "watchlistedit-normal-explain": "Síðurnar á vaktlistanum þínum er sýndar fyrir neðan.\nTil að fjarlægja síðu, hakaðu í kassann við hliðina á henni og smelltu á „{{int:Watchlistedit-normal-submit}}“. Þú getur einnig [[Special:EditWatchlist/raw|breytt honum opnum]].",
+       "watchlistedit-normal-submit": "Fjarlægja síður",
        "watchlistedit-normal-done": "$1 {{PLURAL:$1|síða var fjarlægð|síður voru fjarlægðar}} af vaktlistanum þínum:",
        "watchlistedit-raw-title": "Breyta opnum vaktlistanum",
        "watchlistedit-raw-legend": "Breyta opnum vaktlistanum",
-       "watchlistedit-raw-explain": "Titlarnir á vaktlistanum þínum eru sýndir hér fyrir neðan og þeim er hægt að breyta með því að bæta við og taka út af honum;\neinn titil í hverri línu.\nÞegar þú ert búinn, smelltu á \"{{int:Watchlistedit-raw-submit}}\". \nÞú getur einnig notað [[Special:EditWatchlist|hefðbundna ritilinn]].",
-       "watchlistedit-raw-titles": "Titlar:",
+       "watchlistedit-raw-explain": "Síðurnar á vaktlistanum þínum eru sýndar hér fyrir neðan og þeim er hægt að breyta með því að bæta við og taka út af honum;\nein síða í hverri línu.\nÞegar þú ert búinn, smelltu á \"{{int:Watchlistedit-raw-submit}}\". \nÞú getur einnig notað [[Special:EditWatchlist|hefðbundna ritilinn]].",
+       "watchlistedit-raw-titles": "Síður:",
        "watchlistedit-raw-submit": "Uppfæra vaktlistann",
        "watchlistedit-raw-done": "Vaktlistinn þinn hefur verið uppfærður.",
-       "watchlistedit-raw-added": "$1 {{PLURAL:$1|titli|titlum}} var bætt við:",
-       "watchlistedit-raw-removed": "$1 {{PLURAL:$1|titill var fjarlægður|titlar voru fjarlægðir}}:",
-       "watchlistedit-clear-titles": "Titlar:",
+       "watchlistedit-raw-added": "$1 {{PLURAL:$1|síðu|síðum}} var bætt við:",
+       "watchlistedit-raw-removed": "$1 {{PLURAL:$1|síða var fjarlægð|síður voru fjarlægðar}}:",
+       "watchlistedit-clear-title": "Hreinsaður vaktlisti",
+       "watchlistedit-clear-legend": "Hreinsa vaktlista",
+       "watchlistedit-clear-explain": "Allar síður verða fjarlægðar af vaktlistanum þínum",
+       "watchlistedit-clear-titles": "Síður:",
+       "watchlistedit-clear-submit": "Hreinsa vaktlistann (þetta er endanlegt!)",
+       "watchlistedit-clear-done": "Vaktlistinn þinn hefur verið hreinsaður.",
+       "watchlistedit-clear-removed": "$1 {{PLURAL:$1|síða var fjarlægð|síður voru fjarlægðar}}:",
+       "watchlistedit-too-many": "Það eru of margar síður til að hægt sé að birta þær hér.",
+       "watchlisttools-clear": "Hreinsa vaktlistann",
        "watchlisttools-view": "Sýna viðeigandi breytingar",
        "watchlisttools-edit": "Skoða og breyta vaktlistanum",
        "watchlisttools-raw": "Breyta opnum vaktlistanum",
+       "iranian-calendar-m1": "Farvardin",
+       "iranian-calendar-m2": "Ordibehesht",
+       "iranian-calendar-m3": "Khordad",
+       "iranian-calendar-m4": "Tir",
+       "iranian-calendar-m5": "Mordad",
+       "iranian-calendar-m6": "Shahrivar",
+       "iranian-calendar-m7": "Mehr",
+       "iranian-calendar-m8": "Aban",
+       "iranian-calendar-m9": "Azar",
+       "iranian-calendar-m10": "Dey",
+       "iranian-calendar-m11": "Bahman",
+       "iranian-calendar-m12": "Esfand",
+       "hijri-calendar-m1": "Muharram",
+       "hijri-calendar-m2": "Safar",
+       "hijri-calendar-m3": "Rabi' al-awwal",
+       "hijri-calendar-m4": "Rabi' al-thani",
+       "hijri-calendar-m5": "Jumada al-awwal",
+       "hijri-calendar-m6": "Jumada al-thani",
+       "hijri-calendar-m7": "Rajab",
+       "hijri-calendar-m8": "Sha'aban",
+       "hijri-calendar-m9": "Ramadan",
+       "hijri-calendar-m10": "Shawwal",
+       "hijri-calendar-m11": "Dhu al-Qi'dah",
+       "hijri-calendar-m12": "Dhu al-Hijjah",
+       "hebrew-calendar-m1": "Tishrei",
+       "hebrew-calendar-m2": "Cheshvan",
+       "hebrew-calendar-m3": "Kislev",
+       "hebrew-calendar-m4": "Tevet",
+       "hebrew-calendar-m5": "Shevat",
+       "hebrew-calendar-m6": "Adar",
+       "hebrew-calendar-m6a": "Adar I",
+       "hebrew-calendar-m6b": "Adar II",
+       "hebrew-calendar-m7": "Nisan",
+       "hebrew-calendar-m8": "Iyar",
+       "hebrew-calendar-m9": "Sivan",
+       "hebrew-calendar-m10": "Tamuz",
+       "hebrew-calendar-m11": "Av",
+       "hebrew-calendar-m12": "Elul",
+       "hebrew-calendar-m1-gen": "Tishrei",
+       "hebrew-calendar-m2-gen": "Cheshvan",
+       "hebrew-calendar-m3-gen": "Kislev",
+       "hebrew-calendar-m4-gen": "Tevet",
+       "hebrew-calendar-m5-gen": "Shevat",
+       "hebrew-calendar-m6-gen": "Adar",
+       "hebrew-calendar-m6a-gen": "Adar I",
+       "hebrew-calendar-m6b-gen": "Adar II",
+       "hebrew-calendar-m7-gen": "Nisan",
+       "hebrew-calendar-m8-gen": "Iyar",
+       "hebrew-calendar-m9-gen": "Sivan",
+       "hebrew-calendar-m10-gen": "Tamuz",
+       "hebrew-calendar-m11-gen": "Av",
+       "hebrew-calendar-m12-gen": "Elul",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|spjall]])",
-       "duplicate-defaultsort": "'''Viðvörun:''' Sjálfgildur flýtihnappur \"$2\" tekur yfir fyrri flýtihnapp \"$1\".",
+       "timezone-utc": "UTC",
+       "timezone-local": "Staðartími",
+       "duplicate-defaultsort": "<strong>Viðvörun:</strong> Sjálfgefni röðunarlykillinn \"$2\" er rétthærri en eldri sjálfgefinn röðunarlykill \"$1\".",
+       "duplicate-displaytitle": "<strong>Viðvörun:</strong> Birtingartitillinn \"$2\" er rétthærri en eldri sjálfgefinn birtingartitill \"$1\".",
        "version": "Útgáfa",
        "version-extensions": "Uppsettar viðbætur",
-       "version-skins": "Uppsett þemu",
+       "version-skins": "Uppsett skinn",
        "version-specialpages": "Kerfissíður",
+       "version-parserhooks": "Tengikrókar þáttara (parser hooks)",
        "version-variables": "Breytur",
-       "version-antispam": "Amapósts sía",
+       "version-antispam": "Varnir gegn amasendingum",
+       "version-api": "API",
        "version-other": "Aðrar",
        "version-mediahandlers": "Rekill margmiðlunarskráa",
-       "version-parser-extensiontags": "Tögg í viðauka þáttagreiningar",
+       "version-hooks": "Tengikrókar (hooks)",
+       "version-parser-extensiontags": "Merki í viðauka þáttunar",
+       "version-parser-function-hooks": "Aðgerðakrókar þáttara (parser function hooks)",
+       "version-hook-name": "Heiti á tengikrók (hook)",
        "version-hook-subscribedby": "Í áskrift af",
        "version-version": "($1)",
+       "version-no-ext-name": "[ekkert nafn]",
        "version-license": "MediaWiki leyfi",
+       "version-ext-license": "Notkunarleyfi",
+       "version-ext-colheader-name": "Viðbót",
+       "version-skin-colheader-name": "Skinn",
+       "version-ext-colheader-version": "Útgáfa",
+       "version-ext-colheader-license": "Notkunarleyfi",
        "version-ext-colheader-description": "Lýsing",
-       "version-license-title": "Leyfi fyrir $1",
-       "version-poweredby-credits": "Þessi wiki er knúin af '''[https://www.mediawiki.org/ MediaWiki]''', höfundaréttur © 2001-$1 $2.",
+       "version-ext-colheader-credits": "Höfundar",
+       "version-license-title": "Notkunarleyfi fyrir $1",
+       "version-license-not-found": "Engar nákvæmar upplýsingar varðandi notkunarleyfi fundust fyrir þessa viðbót.",
+       "version-credits-title": "Framlög fyrir $1",
+       "version-credits-not-found": "Engar nákvæmar upplýsingar varðandi framlög fundust fyrir þessa viðbót.",
+       "version-poweredby-credits": "Þetta wiki er knúið af '''[https://www.mediawiki.org/ MediaWiki]''', höfundaréttur © 2001-$1 $2.",
        "version-poweredby-others": "aðrir",
+       "version-poweredby-translators": "Þýðendur á translatewiki.net",
+       "version-credits-summary": "Við viljum þakka eftirfarandi einstaklingum fyrir framlag þeirra til [[Special:Version|MediaWiki]].",
        "version-license-info": "MediaWiki er frjáls hugbúnaður; þú mátt endurútgefa hann og/eða breyta honum undir GNU General Public leyfi eins og það er gefið út af Free Software stofnuninni, annaðhvort útgáfu 2 eða (að þínu mati) hvaða nýrri útgáfa sem er.\n\nMediaWiki er útgefin í þeirri von að hann sé gagnlegur, en ÁN ALLRAR ÁBYRGÐAR; þar meðtalið er undanskilin ábyrgð við MARKAÐSETNINGU og að hugbúnaðurinn VIRKI Í ÁKVEÐNUM TILGANGI. Sjá GNU General Public leyfið fyrir frekari upplýsingar.\n\nÞú ættir að hafa fengið [{{SERVER}}{{SCRIPTPATH}}/COPYING afrit af  GNU General Public leyfinu] með þessum hugbúnaði, en ef ekki, skrifaðu til Free Software stofnunarinnar, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, Bandaríkjunum eða [//www.gnu.org/licenses/old-licenses/gpl-2.0.html lestu það á netinu]",
        "version-software": "Uppsettur hugbúnaður",
        "version-software-product": "Vara",
        "version-software-version": "Útgáfa",
+       "version-entrypoints": "Slóðir aðgangspunkta",
+       "version-entrypoints-header-entrypoint": "Aðgangspunktur",
        "version-entrypoints-header-url": "vefslóð",
+       "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Slóð á grein]",
+       "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Slóð á skriftu]",
+       "version-libraries": "Uppsett aðgerðasöfn",
+       "version-libraries-library": "Aðgerðasafn",
        "version-libraries-version": "Útgáfa",
+       "version-libraries-license": "Notkunarleyfi",
+       "version-libraries-description": "Lýsing",
+       "version-libraries-authors": "Höfundar",
+       "redirect-legend": "Endurbeina á skrá eða síðu",
        "redirect-submit": "Áfram",
        "redirect-lookup": "Fletta upp:",
        "redirect-value": "Gildi:",
        "redirect-user": "Notandanúmer",
-       "redirect-file": "Skráarnafn",
+       "redirect-page": "Auðkennisnúmer síðu",
+       "redirect-revision": "Útgáfa síðu",
+       "redirect-file": "Skráarheiti",
+       "redirect-logid": "Auðkenni annáls",
        "redirect-not-exists": "Gildi fannst ekki",
        "fileduplicatesearch": "Leita að afriti",
        "fileduplicatesearch-summary": "Leita að afritum sem hafa sama hakk gildi.",
        "fileduplicatesearch-legend": "Leita að afriti",
-       "fileduplicatesearch-filename": "Skráarnafn:",
+       "fileduplicatesearch-filename": "Skráarheiti:",
        "fileduplicatesearch-submit": "Leita",
-       "fileduplicatesearch-info": "$1 × $2 myndeining<br />Skráarstærð: $3<br />MIME-gerð: $4",
+       "fileduplicatesearch-info": "$1 × $2 mynddílar<br />Skráarstærð: $3<br />MIME-gerð: $4",
        "fileduplicatesearch-result-1": "Skráin „$1“ hefur engin nákvæmlega eins afrit.",
        "fileduplicatesearch-result-n": "Skráin „$1“ hefur {{PLURAL:$2|1 nákvæmlega eins afrit|$2 nákvæmlega eins afrit}}.",
-       "fileduplicatesearch-noresults": "Mistókst að finna skránna \"$1\"",
+       "fileduplicatesearch-noresults": "Mistókst að finna skrána \"$1\"",
        "specialpages": "Kerfissíður",
+       "specialpages-note-top": "Fyrirsögn",
        "specialpages-note": "* Venjulegar kerfisíður.\n* <span class=\"mw-specialpagerestricted\">Kerfisíður með takmörkuðum aðgangi.</span>",
        "specialpages-group-maintenance": "Viðhaldsskýrslur",
        "specialpages-group-other": "Aðrar kerfissíður",
        "specialpages-group-login": "Innskrá / Búa til aðgang",
        "specialpages-group-changes": "Nýlegar breytingar og skrár",
-       "specialpages-group-media": "Miðilsskrár og innhleðslur",
+       "specialpages-group-media": "Skýrslur um gagnamiðla og innsendingar",
        "specialpages-group-users": "Notendur og réttindi",
        "specialpages-group-highuse": "Mest notuðu síðurnar",
        "specialpages-group-pages": "Listar yfir síður",
        "specialpages-group-pagetools": "Síðuverkfæri",
        "specialpages-group-wiki": "Gögn og tól",
        "specialpages-group-redirects": "Tilvísaðar kerfisíður",
-       "specialpages-group-spam": "Amapósts sía",
+       "specialpages-group-spam": "Amasendingasíur",
+       "specialpages-group-developer": "Forritaratól",
        "blankpage": "Tóm síða",
        "intentionallyblankpage": "Þessi síða er viljandi höfð tóm.",
        "external_image_whitelist": "#Ekki breyta þessari línu<pre>\n#Settu brot úr reglulegum segðum (bara þann hluta sem er á milli //) hér fyrir neðan\n#Þær verða bornar saman við vefslóðir ytri mynda\n#Þær sem passa saman verða sýndar sem myndir, en hinar eingöngu sem tengill á myndina\n#Línur sem byrja á # verða sýndar sem athugasemdir\n#Þetta er hástafafrjálst\n\n#Settu allar reglulegar segðir fyrir ofan þessa línu. Ekki breyta þessari línu.</pre>",
-       "tags": "Breyta virkum tögum",
-       "tag-filter": "[[Special:Tags|Tagg]]sía:",
+       "tags": "Breyta virkum merkjum",
+       "tag-filter": "[[Special:Tags|Merkja]]sía:",
        "tag-filter-submit": "Sía",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tagg|Tögg}}]]: $2)",
-       "tags-title": "Tög",
-       "tags-intro": "Þessi síða sýnir tögg, sem hugbúnaðurinn gæti merkt breytingar með, og merkingu þeirra.",
-       "tags-tag": "Heiti taggs",
-       "tags-display-header": "Útlit í breytingarskrá",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Merki}}]]: $2)",
+       "tags-title": "Merki",
+       "tags-intro": "Þessi síða sýnir merkin sem hugbúnaðurinn gæti merkt breytingar með, og hvað þau þýða.",
+       "tags-tag": "Heiti merkis",
+       "tags-display-header": "Útlit í breytingaskrám",
        "tags-description-header": "Tæmandi merkingarlýsing",
+       "tags-source-header": "Frumrit",
        "tags-active-header": "Virkt?",
        "tags-hitcount-header": "Merktar breytingar",
+       "tags-actions-header": "Aðgerðir",
        "tags-active-yes": "Já",
        "tags-active-no": "Nei",
+       "tags-source-extension": "Skilgreint af viðbótarhugbúnaði",
+       "tags-source-manual": "Sett inn handvirkt að notendum og vélmennum",
+       "tags-source-none": "Ekki lengur í notkun",
        "tags-edit": "breyta",
        "tags-delete": "eyða",
        "tags-activate": "virkja",
-       "tags-deactivate": "óvirkja",
+       "tags-deactivate": "gera óvirkt",
        "tags-hitcount": "$1 {{PLURAL:$1|breyting|breytingar}}",
-       "tags-manage-no-permission": "Þú hefur ekki leyfi til að stjórna breytingartöggum.",
-       "tags-create-heading": "Stofna nýtt tagg",
+       "tags-manage-no-permission": "Þú hefur ekki leyfi til að stjórna breytingamerkjum.",
+       "tags-manage-blocked": "Þú hefur ekki leyfi til að breyta merkjum á meðan þú ert bannaður.",
+       "tags-create-heading": "Búa til nýtt merki",
+       "tags-create-explanation": "Sjálfgefið eru ný merki tiltæk notendum og vélmennum.",
+       "tags-create-tag-name": "Heiti merkis",
+       "tags-create-reason": "Ástæða:",
        "tags-create-submit": "Stofna",
-       "tags-create-no-name": "Þú verður að gefa upp heiti taggsins.",
-       "tags-create-invalid-title-chars": "Taggheiti mega ekki að innihalda stafi sem ekki má nota í síðutitlum.",
-       "tags-create-already-exists": "Taggið \"$1\" er nú þegar til.",
-       "tags-delete-title": "Eyða taggi",
+       "tags-create-no-name": "Þú verður að gefa upp heiti merkisins.",
+       "tags-create-invalid-chars": "Heiti merkja mega ekki innihalda kommur (<code>,</code>) eða öfug skástrik (<code>/</code>).",
+       "tags-create-invalid-title-chars": "Heiti merkja mega ekki innihalda stafi sem ekki má nota í síðutitlum.",
+       "tags-create-already-exists": "Merkið \"$1\" er nú þegar til.",
+       "tags-create-warnings-below": "Viltu halda áfram við að búa til merkið?",
+       "tags-delete-title": "Eyða merki",
+       "tags-delete-explanation-initial": "Þú ert við það að eyða merkinu \"$1\" úr gagnagrunninum.",
        "tags-delete-reason": "Ástæða:",
-       "tags-delete-not-found": "Tagið \"$1\" er ekki til.",
-       "tags-activate-title": "Virkja tagg",
+       "tags-delete-submit": "Eyða þessu merki endanlega",
+       "tags-delete-not-found": "Merkið \"$1\" er ekki til.",
+       "tags-activate-title": "Virkja merki",
+       "tags-activate-question": "Þú ert í þann mund að virkja merkið \"$1\".",
        "tags-activate-reason": "Ástæða:",
-       "tags-activate-not-found": "Tagið \"$1\" er ekki til.",
+       "tags-activate-not-allowed": "Það er ekki hægt að virkja merkið \"$1\".",
+       "tags-activate-not-found": "Merkið \"$1\" er ekki til.",
        "tags-activate-submit": "Virkja",
-       "tags-deactivate-title": "Óvirkja tagg",
+       "tags-deactivate-title": "Gera merki óvirkt",
+       "tags-deactivate-question": "Þú ert í þann mund að gera merkið \"$1\" óvirkt.",
        "tags-deactivate-reason": "Ástæða:",
-       "tags-deactivate-submit": "Óvirkja",
-       "tags-edit-title": "Breyta töggum",
-       "tags-edit-manage-link": "Stjórna töggum",
+       "tags-deactivate-not-allowed": "Það er ekki hægt að afvirkja merkið \"$1\".",
+       "tags-deactivate-submit": "Gera óvirkt",
+       "tags-edit-title": "Breyta merkjum",
+       "tags-edit-manage-link": "Sýsla með merki",
+       "tags-edit-existing-tags": "Fyrirliggjandi merki:",
+       "tags-edit-existing-tags-none": "<em>Ekkert</em>",
+       "tags-edit-new-tags": "Ný merki:",
+       "tags-edit-add": "Bæta þessum merkjum við:",
+       "tags-edit-remove": "Fjarlægja þessi merki:",
+       "tags-edit-remove-all-tags": "(fjarlægja öll merki)",
+       "tags-edit-chosen-placeholder": "Veldu einhver merki",
+       "tags-edit-chosen-no-results": "Engin merki fundust sem samsvara",
+       "tags-edit-reason": "Ástæða:",
+       "tags-edit-nooldid-title": "Ógild markútgáfa",
+       "tags-edit-none-selected": "Vinsamlega veldu a.m.k. eitt merki til að bæta við eða fjarlægja.",
        "comparepages": "Bera saman síður",
        "compare-page1": "Síða 1",
        "compare-page2": "Síða 2",
        "compare-title-not-exists": "Umbeðinn titill er ekki til.",
        "compare-revision-not-exists": "Umbeðin útgáfa er ekki til.",
        "dberr-problems": "Því miður!Tæknilegir örðugleikar eru á þessari síðu.",
-       "dberr-again": "Reyndu að bíða í nokkrar mínútur og endurhladdu síðan síðuna.",
+       "dberr-again": "Reyndu að bíða í nokkrar mínútur og endurhlaða síðan síðuna.",
        "dberr-info": "(Mistókst að fá aðgang að gagnaþjóni: $1)",
        "dberr-info-hidden": "(Mistókst að fá aðgang að gagnaþjóni)",
        "dberr-usegoogle": "Þú getur notað Google til að leita á meðan.",
        "htmlform-no": "Nei",
        "htmlform-yes": "Já",
        "htmlform-chosen-placeholder": "Veldu valmöguleika",
+       "htmlform-cloner-create": "Bæta við meiru",
+       "htmlform-cloner-delete": "Fjarlægja",
+       "htmlform-cloner-required": "Það þarf allavega eitt gildi.",
+       "htmlform-title-badnamespace": "[[:$1]] er ekki í \"{{ns:$2}}\" nafnrýminu.",
+       "htmlform-title-not-creatable": "\"$1\" er ekki hægt að nota við að búa til titil á síðu",
+       "htmlform-title-not-exists": "$1 er ekki til",
+       "htmlform-user-not-exists": "<strong>$1</strong> er ekki til.",
+       "htmlform-user-not-valid": "<strong>$1</strong> er ekki gilt notandanafn.",
        "sqlite-has-fts": "$1 með fullum texta leitar stuðningi",
        "sqlite-no-fts": "$1 án fullum texta leitar stuðningi",
        "logentry-delete-delete": "$1 {{GENDER:$2|eyddi}} síðunni $3",
        "logentry-block-unblock": "$1 {{GENDER:$2|afbannaði}} {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|breytti}} bann stillingum fyrir {{GENDER:$4|$3}}, rennur út $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|bannaði}} {{GENDER:$4|$3}}, rennur út eftir $5 $6",
-       "logentry-merge-merge": "$1 {{GENDER:$2|sameinaði}} $3 inn í $4 (útgáfur til $5)",
+       "logentry-import-upload": "$1 {{GENDER:$2|flutti inn}} $3 úr innsendri skrá",
+       "logentry-import-upload-details": "$1 {{GENDER:$2|flutti}} $3 inn úr innsendri skrá ($4 {{PLURAL:$4|útgáfa|útgáfur}})",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|flutti inn}} $3 frá öðru wiki",
+       "logentry-import-interwiki-details": "$1 {{GENDER:$2|flutti}} $3 inn frá $5 ($4 {{PLURAL:$4|útgáfa|útgáfur}})",
+       "logentry-merge-merge": "$1 {{GENDER:$2|sameinaði}} $3 inn í $4 (útgáfur upp að $5)",
        "logentry-move-move": "$1 {{GENDER:$2|færði}} $3 á $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|færði}} $3 á $4 án þess að skilja eftir tilvísun",
        "logentry-move-move_redir": "$1 {{GENDER:$2|færði}} $3 á $4 yfir tilvísun",
        "logentry-newusers-create2": "$1 {{GENDER:$2|stofnaði}} notandaaðganginn $3",
        "logentry-newusers-byemail": "Notandaaðgangurinn $3 var {{GENDER:$2|búinn til}} af $1 og lykilorðið var sent með tölvupósti",
        "logentry-newusers-autocreate": "Aðgangurinn $1 var {{GENDER:$2|stofnaður}} sjálfvirkt",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|flutti}} verndunarstillingu úr $4 í $3",
+       "logentry-protect-unprotect": "$1 {{GENDER:$2|fjarlægði}} verndun af $3",
        "logentry-protect-protect": "$1 {{GENDER:$2|verndaði}} $3 $4",
+       "logentry-protect-modify": "$1 {{GENDER:$2|breytti}} verndunarstigi fyrir $3 $4",
        "logentry-rights-rights": "$1 {{GENDER:$2|breytti}} réttindum $3 frá $4 í $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|breytti}} réttindum $3",
        "logentry-rights-autopromote": "$1 fékk sjálfvirkt {{GENDER:$2|aukin}} réttindi frá $4 til $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|hlóð inn}} $3",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|hlóð inn}} nýrri útgáfu af $3",
+       "logentry-upload-revert": "$1 {{GENDER:$2|hlóð inn}} $3",
+       "log-name-managetags": "Breytingaskrá yfir sýsl með merki",
+       "logentry-managetags-create": "$1 {{GENDER:$2|bjó til}} merkið \"$4\"",
        "rightsnone": "(engum)",
        "revdelete-summary": "breytingarágrip",
-       "feedback-adding": "Bæti við svörun á síðuna...",
+       "feedback-adding": "Bæti umsögn á síðuna...",
+       "feedback-back": "Til baka",
        "feedback-bugcheck": "Frábært! Athugaðu hvort þessi villa hafi verið [$1 tilkynnt áður].",
        "feedback-bugnew": "Ég athugaði það. Tilkynna nýja villu.",
-       "feedback-bugornote": "Ef þú ert reiðubúinn að lýsa tæknilegri villu í smáatriðum, vinsamlegast [$1 tilkynntu villu].\nEf ekki, þá getur þú notað einfalt eyðublað hér fyrir neðan. Athugasemdin þín verður bætt við síðuna \"[$3 $2]\" ásamt notendanafni og nafni vafrarans sem þú ert að nota.",
+       "feedback-bugornote": "Ef þú ert reiðubúinn að lýsa tæknilegri villu í smáatriðum, vinsamlegast [$1 tilkynntu um villu].\nEf ekki, þá getur þú notað einfalt eyðublað hér fyrir neðan. Athugasemdinni þinni verður bætt við síðuna \"[$3 $2]\" ásamt notandanafni þínu.",
        "feedback-cancel": "Hætta við",
        "feedback-close": "Búið",
+       "feedback-external-bug-report-button": "Senda inn tæknilegar lýsingar/verkefni",
+       "feedback-dialog-title": "Senda umsögn",
+       "feedback-dialog-intro": "Þú getur þú notað einfalt eyðublað hér fyrir neðan til að senda inn umsögn. Athugasemdinni þinni verður bætt við síðuna \"$1\" ásamt notandanafni þínu.",
        "feedback-error-title": "Villa",
        "feedback-error1": "Villa: Óþekkt útkoma frá API",
        "feedback-error2": "Villa: Breytingin mistókst",
        "feedback-message": "Skilaboð:",
        "feedback-subject": "Fyrirsögn:",
        "feedback-submit": "Senda",
+       "feedback-terms": "Ég skil það að kennistrengur vafrans inniheldur upplýsingar um nákvæma gerð vafra auk útgáfu stýrikerfis og að þessum upplýsingum verður deilt opinberlega ásamt umsögn minni.",
+       "feedback-termsofuse": "Ég samþykki að umsögn mín verði að vera í samræmi við notkunarskilmálana.",
        "feedback-thanks": "Takk! Ábendingu þinni hefur verið bætt við á síðuna \"[$2 $1]\".",
        "feedback-thanks-title": "Takk!",
+       "feedback-useragent": "Aðgangsforrit:",
        "searchsuggest-search": "Leita",
        "searchsuggest-containing": "sem innihalda ...",
        "api-error-badaccess-groups": "Þú hefur ekki leyfi til að hlaða inn skrám.",
        "api-error-badtoken": "Innri villa: Skemmdur tóki.",
-       "api-error-copyuploaddisabled": "Ekki er hægt að hlaða upp með vefslóð á þessum vefþjón.",
+       "api-error-copyuploaddisabled": "Ekki er hægt að hlaða inn með vefslóð á þessum vefþjóni.",
        "api-error-duplicate": "Það {{PLURAL:$1|er önnur skrá|eru aðrar skrár}} þegar til á vefsvæðinu sem hafa sama innihald.",
        "api-error-duplicate-archive": "Það {{PLURAL:$1|var önnur skrá|voru aðrar skrár}} þegar á síðunni með sama innihald, en {{PLURAL:$1|henni|þeim}} var eytt.",
        "api-error-empty-file": "Skráin sem þú valdir er tóm.",
        "api-error-emptypage": "Stofnun nýrra, tómra síðna er óheimil.",
-       "api-error-fetchfileerror": "Innri villa: Mistókst að sækja skránna.",
+       "api-error-fetchfileerror": "Innri villa: Mistókst að sækja skrána.",
        "api-error-fileexists-forbidden": "Skrá með nafninu \"$1\" er þegar til og ekki er hægt að yfirskrifa hana.",
        "api-error-fileexists-shared-forbidden": "Skrá með nafninu \"$1\" er þegar til á miðlæga gagnaþjóninum og ekki er hægt að yfirskrifa hana.",
        "api-error-file-too-large": "Skráin sem þú valdir er of stór.",
-       "api-error-filename-tooshort": "Skráarnafnið er of stutt",
+       "api-error-filename-tooshort": "Skráarheitið er of stutt",
        "api-error-filetype-banned": "Þessi gerð skráar er bönnuð.",
        "api-error-filetype-banned-type": "$1 {{PLURAL:$4|er óleyfileg skráargerð|eru óleyfilegar skráargerðir}}. {{PLURAL:$3|Leyfð skráargerð er|Leyfðar skráargerðir eru}} $2.",
        "api-error-filetype-missing": "Skráin hefur enga skráarendingu.",
        "api-error-hookaborted": "Hætt var við breytinguna sem þú reyndir að gera með viðbót.",
        "api-error-http": "Innri villa: Get ekki tengst vefþjón.",
-       "api-error-illegal-filename": "Þetta skráarnafn er ekki leyft.",
-       "api-error-internal-error": "Innri villa: Mistókst að vinna úr upphali þínu.",
-       "api-error-invalid-file-key": "Innri villa: Skrá fannst ekki í tímabundinni geymslu.",
+       "api-error-illegal-filename": "Þetta skráarheiti er ekki leyft.",
+       "api-error-internal-error": "Innri villa: Mistókst að vinna úr innsendingunni þinni.",
+       "api-error-invalid-file-key": "Innri villa: Skrá fannst ekki í bráðabirgðageymslu.",
        "api-error-missingparam": "Innri villa: Breytur vantar í beiðni.",
        "api-error-missingresult": "Innri villa: Gat ekki ákvarðað hvort tókst að afrita.",
        "api-error-mustbeloggedin": "Þú verður að vera skráður inn til að hlaða inn skrám.",
        "api-error-mustbeposted": "Innri villa: Beiðnin þarfnast HTTP POST.",
-       "api-error-noimageinfo": "Upphleðsla skráarinnar tókst, en vefþjónninn gaf okkur engar upplýsingar um skránna.",
-       "api-error-nomodule": "Innri villa: Engin upphlaðs eining valin.",
+       "api-error-noimageinfo": "Innsending skrárinnar tókst, en vefþjónninn gaf okkur engar upplýsingar um skrána.",
+       "api-error-nomodule": "Innri villa: Engin innsendingareining valin.",
        "api-error-ok-but-empty": "Innri villa: ekkert svar frá vefþjón.",
        "api-error-overwrite": "Óheimilt er að skrifa yfir skrá sem er þegar til.",
        "api-error-stashfailed": "Innri villa: Vefþjónninn gat ekki geymt bráðabirgðaskrá.",
        "duration-centuries": "$1 {{PLURAL:$1|öld|aldir}}",
        "duration-millennia": "$1 {{PLURAL:$1|árþúsund}}",
        "rotate-comment": "Myndinni var snúið um $1 {{PLURAL:$1|gráðu|gráður}} réttsælis",
+       "limitreport-cputime": "Tímanotkun örgjörva",
+       "limitreport-cputime-value": "$1 {{PLURAL:$1|sekúnda|sekúndur}}",
        "limitreport-walltime": "Rauntímanotkun",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|sekúnda|sekúndur}}",
+       "limitreport-ppvisitednodes-value": "$1/$2",
+       "limitreport-ppgeneratednodes-value": "$1/$2",
+       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|bæti}}",
+       "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|bæti}}",
+       "limitreport-expansiondepth-value": "$1/$2",
+       "limitreport-expensivefunctioncount-value": "$1/$2",
+       "expandtemplates": "Opna sniðmát",
        "expand_templates_input": "Inntakstexti:",
        "expand_templates_output": "Útkoma",
        "expand_templates_xml_output": "XML-úttak",
+       "expand_templates_html_output": "Hrátt HTML úttak",
        "expand_templates_ok": "Í lagi",
        "expand_templates_remove_comments": "Fjarlægja athugasemdir",
-       "expand_templates_preview": "Forskoða",
+       "expand_templates_remove_nowiki": "Útrýma <nowiki> merki í útkomu",
+       "expand_templates_generate_xml": "Birta XML-þáttunargreinar",
+       "expand_templates_generate_rawhtml": "Birta hrátt HTML",
+       "expand_templates_preview": "Forskoðun",
+       "expand_templates_preview_fail_html": "<em>Þar sem {{SITENAME}} styður hráan HTML kóða, þá hefur forskoðunin verið falin sem vörn gegn JavaScript árásum.</em>\n\n<strong>Ef þetta er lögleg breyting, reyndu þá aftur.</strong>\nEf það virkar ekki, reyndu að [[Special:UserLogout|skrá þig út]], skrá þig aftur inn og athugaðu hvort vafrinn þinn leyfi vefkökur frá þessu vefsvæði.",
+       "expand_templates_preview_fail_html_anon": "<em>Þar sem {{SITENAME}} styður hráan HTML kóða og þú ert ekki skráð/ur inn, þá hefur forskoðunin verið falin sem vörn gegn JavaScript árásum.</em>\n\n<strong>Ef þetta er lögleg breyting, reyndu að [[Special:UserLogin|skrá þig inn]], og prófa aftur.</strong>",
+       "expand_templates_input_missing": "Þú verður að skrifa inn einhvern inntakstexta.",
+       "pagelanguage": "Breyta tungumáli síðu",
+       "pagelang-name": "Síða",
        "pagelang-language": "Tungumál",
-       "mediastatistics": "Margmiðlunar tölfræði",
-       "mediastatistics-summary": "Tölfræði um upphaldar skráar gerðir. Hún inniheldur eingöngu nýjustu útgáfu skráarinnar. Gamlar eða eyddar skrár eru ekki teknar með.",
+       "pagelang-use-default": "Nota sjálfgefið tungumál",
+       "pagelang-select-lang": "Veldu tungumál",
+       "pagelang-submit": "Senda inn",
+       "right-pagelang": "Breyta tungumáli síðu",
+       "action-pagelang": "breyta tungumáli síðunnar",
+       "log-name-pagelang": "Annáll yfir breytingar á tungumáli",
+       "log-description-pagelang": "Þetta er skráning yfir breytingar á tungumáli síðna.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|breytti}} tungumáli $3 úr $4 yfir í $5",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (virkt)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>óvirkt</strong>)",
+       "mediastatistics": "Tölfræði gagnamiðla",
+       "mediastatistics-summary": "Tölfræði um innsendar skráagerðir. Hún tekur eingöngu til nýjustu útgáfu skráa. Gamlar eða eyddar útgáfur skráa eru ekki teknar með.",
+       "mediastatistics-nfiles": "$1 ($2%)",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 bæti}} ($2; $3%)",
+       "mediastatistics-bytespertype": "Heildarstærð þessa hluta: {{PLURAL:$1|$1 bæti}} ($2; $3%).",
+       "mediastatistics-allbytes": "Heildarstærð allra skráa: {{PLURAL:$1|$1 bæti}} ($2).",
        "mediastatistics-table-mimetype": "MIME tegund",
        "mediastatistics-table-extensions": "Mögulegar skráargerðir",
        "mediastatistics-table-count": "Fjöldi skráa",
        "mediastatistics-table-totalbytes": "Heildarstærð",
        "mediastatistics-header-unknown": "Óþekkt",
-       "mediastatistics-header-bitmap": "Bitmap myndir",
-       "mediastatistics-header-drawing": "Teikningar (vector-myndir)",
+       "mediastatistics-header-bitmap": "Bitamyndir",
+       "mediastatistics-header-drawing": "Teikningar (vigurlínur)",
        "mediastatistics-header-audio": "Hljóð",
-       "mediastatistics-header-video": "Myndbönd",
+       "mediastatistics-header-video": "Myndskeið",
+       "mediastatistics-header-multimedia": "Margmiðlunarefni",
+       "mediastatistics-header-office": "Skrifstofuefni",
        "mediastatistics-header-text": "Textar",
        "mediastatistics-header-executable": "Uppsetninga skrár",
        "mediastatistics-header-archive": "Þjappaðar skrár",
+       "mediastatistics-header-total": "Allar skrár",
        "json-warn-trailing-comma": "$1 eftirfylgjandi {{PLURAL:$1|komma var fjarlægð|kommur voru fjarlægðar}} úr JSON",
        "json-error-unknown": "Það varð villa í JSON. Villa: $1",
        "json-error-state-mismatch": "Ógild eða ranglega uppsett JSON",
-       "json-error-syntax": "málfræði villa",
+       "json-error-ctrl-char": "Villa í stýritákni, hugsanlega röng stafatafla (encoding)",
+       "json-error-syntax": "Formvilla í málsetningu",
        "json-error-utf8": "Gallaðir UTF-8 stafir, líklega vitlaust kótaðir",
        "json-error-unsupported-type": "Gildi af gerð sem ekki er hægt að kóta var gefin.",
+       "headline-anchor-title": "Tengja í þennan hluta",
        "special-characters-group-latin": "Latneskt",
-       "special-characters-group-latinextended": "Aukið latneskt",
+       "special-characters-group-latinextended": "Latínuviðauki",
        "special-characters-group-ipa": "IPA",
        "special-characters-group-symbols": "Tákn",
        "special-characters-group-greek": "Grískt",
        "special-characters-group-cyrillic": "Kýrillískt",
        "special-characters-group-arabic": "Arabískt",
-       "special-characters-group-arabicextended": "Aukið arabískt",
+       "special-characters-group-arabicextended": "Viðaukið arabískt",
        "special-characters-group-persian": "Persneskt",
        "special-characters-group-hebrew": "Hebreskt",
        "special-characters-group-bangla": "Bengalskt",
        "special-characters-group-tamil": "Tamílska",
        "special-characters-group-telugu": "Telúgú",
        "special-characters-group-sinhala": "Sinhalskt",
+       "special-characters-group-gujarati": "Gújaratí",
        "special-characters-group-devanagari": "Devanagari",
        "special-characters-group-thai": "Taílenskt",
        "special-characters-group-lao": "Laoskt",
+       "special-characters-group-khmer": "Khmerískt",
+       "special-characters-title-endash": "stutt bandstrik (en dash)",
+       "special-characters-title-emdash": "langt bandstrik (em dash)",
+       "special-characters-title-minus": "mínustákn",
+       "mw-widgets-dateinput-no-date": "Engin dagsetning valin",
+       "mw-widgets-dateinput-placeholder-day": "ÁÁÁÁ-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "ÁÁÁÁ-MM",
        "mw-widgets-titleinput-description-new-page": "síðan er ekki enn til",
        "mw-widgets-titleinput-description-redirect": "tilvísun á $1",
-       "api-error-blacklisted": "Vinsamlegast veldu annað lýsandi skráarnafn"
+       "api-error-blacklisted": "Veldu annan lýsandi titil",
+       "sessionmanager-tie": "Get ekki sameinað margar gerðir auðkenningarbeiðna: $1.",
+       "sessionprovider-generic": "$1 setur",
+       "sessionprovider-mediawiki-session-cookiesessionprovider": "setur með vefkökum",
+       "sessionprovider-nocookies": "Vefkökur gætu verið óvirkar. Gakktu úr skugga um að smákökur séu virkar og byrjaðu svo aftur.",
+       "randomrootpage": "Handahófsvalin rótarsíða"
 }
index 5a0ddc4..94a8160 100644 (file)
        "myprivateinfoprotected": "Non si dispone dei permessi necessari per modificare i propri dati personali.",
        "mypreferencesprotected": "Non si dispone dei permessi necessari per modificare le proprie preferenze.",
        "ns-specialprotected": "Le pagine speciali non possono essere modificate.",
-       "titleprotected": "La creazione di una pagina con questo titolo è stata bloccata da [[User:$1|$1]].\nLa motivazione è la seguente: ''$2''.",
+       "titleprotected": "La creazione di una pagina con questo titolo è stata bloccata da [[User:$1|$1]].\nLa motivazione è la seguente: <em>$2</em>.",
        "filereadonlyerror": "Non è stato possibile modificare il file \"$1\" poiché il repository di file \"$2\" è in modalità di sola lettura.\n\nL'amministratore di sistema che lo ha bloccato ha fornito questa motivazione: \"$3\".",
        "invalidtitle-knownnamespace": "Titolo non valido con namespace \"$2\" e testo \"$3\"",
        "invalidtitle-unknownnamespace": "Titolo non valido con namespace sconosciuto \"$1\" e testo \"$2\"",
        "createaccount-title": "Creazione di un accesso a {{SITENAME}}",
        "createaccount-text": "Qualcuno ha creato un accesso a {{SITENAME}} ($4) a nome di $2, associato a questo indirizzo di posta elettronica. La password per l'utente \"$2\" è impostata a \"$3\".\nÈ opportuno eseguire un accesso quanto prima e cambiare la password immediatamente.\n\nSe l'accesso è stato creato per errore, si può ignorare questo messaggio.",
        "login-throttled": "Sono stati effettuati troppi tentativi di accesso in breve tempo.\nAttendi $1 e riprova in seguito.",
-       "login-abort-generic": "Il tuo login non ha avuto successo - Annullato",
+       "login-abort-generic": "Il tuo accesso non è riuscito - Annullato",
        "login-migrated-generic": "La tua utenza è stata migrata, e il tuo nome utente non esiste più su questo wiki.",
        "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.",
        "newpassword": "Nuova password:",
        "retypenew": "Riscrivi la nuova password:",
        "resetpass_submit": "Imposta la password e accedi al sito",
-       "changepassword-success": "La password è stata modificata correttamente!",
+       "changepassword-success": "La tua password è stata modificata!",
        "changepassword-throttled": "Sono stati effettuati troppi tentativi di accesso in breve tempo.\nAttendi $1 e riprova in seguito.",
        "botpasswords": "Password bot",
        "botpasswords-summary": "<em>Password bot</em> consente l'accesso ad un'utenza tramite API senza usare le credenziali di accesso principali dell'utenza. I diritti utente disponibili quando si è effettuato l'accesso con una password bot possono essere limitati.\n\nSe non conosci il motivo per cui potresti farlo, allora probabilmente non dovresti farlo. Nessuno dovrebbe mai chiederti di generare uno di questi e darli a loro.",
        "botpasswords-insert-failed": "Impossibile aggiungere il nome bot \"$1\". È stato già aggiunto?",
        "botpasswords-update-failed": "Impossibile aggiornare il nome bot \"$1\". È stato cancellato?",
        "botpasswords-created-title": "Password bot creata",
-       "botpasswords-created-body": "La password bot \"$1\" è stata creata con successo.",
+       "botpasswords-created-body": "La password per il bot di nome \"$1\" dell'utente \"$2\" è stata creata.",
        "botpasswords-updated-title": "Password bot aggiornata",
-       "botpasswords-updated-body": "La password bot \"$1\" è stata aggiornata con successo.",
+       "botpasswords-updated-body": "La password per il bot di nome \"$1\" dell'utente \"$2\" è stata aggiornata.",
        "botpasswords-deleted-title": "Password bot cancellata",
-       "botpasswords-deleted-body": "La password bot \"$1\" è stata cancellata.",
+       "botpasswords-deleted-body": "La password per il bot di nome \"$1\" dell'utente \"$2\" è stata cancellata.",
        "botpasswords-newpassword": "La nuova password per accedere con <strong>$1</strong> è <strong>$2</strong>. <em>Registratelo per consultazioni future.</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider non è disponibile.",
        "botpasswords-restriction-failed": "Le restrizioni di password bot impediscono questo accesso.",
        "resetpass-no-info": "Devi aver effettuato l'accesso per accedere a questa pagina direttamente.",
        "resetpass-submit-loggedin": "Cambia password",
        "resetpass-submit-cancel": "Annulla",
-       "resetpass-wrong-oldpass": "Password temporanea o attuale non valida.\nLa password potrebbe essere stata già cambiata, oppure potrebbe essere stata richiesta una nuova password temporanea.",
+       "resetpass-wrong-oldpass": "Password temporanea o attuale non valida.\nLa password potrebbe essere stata già modificata, 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:",
        "newarticle": "(Nuovo)",
        "newarticletext": "Il collegamento appena seguito corrisponde ad una pagina non ancora esistente.\nSe vuoi creare la pagina ora, basta cominciare a scrivere il testo nella casella qui sotto (vedi la [$1 pagina di aiuto] per maggiori informazioni).\nSe il collegamento è stato aperto per errore, è sufficiente fare clic sul pulsante <strong>Indietro</strong> del proprio browser.",
        "anontalkpagetext": "----\n''Questa è la pagina di discussione di un utente anonimo, che non ha ancora creato un'utenza o comunque non la sta usando. Per identificarlo è quindi necessario usare il numero del suo indirizzo IP. Gli indirizzi IP possono però essere condivisi da più utenti. Se sei un utente anonimo e ritieni che i commenti presenti in questa pagina non si riferiscano a te, [[Special:UserLogin/signup|crea una nuova utenza]] o [[Special:UserLogin|entra con quella che già hai]] per evitare di essere confuso con altri utenti anonimi in futuro.''",
-       "noarticletext": "In questo momento la pagina richiesta è vuota. È possibile [[Special:Search/{{PAGENAME}}|cercare questo titolo]] nelle altre pagine del sito, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercare nei registri correlati] oppure [{{fullurl:{{FULLPAGENAME}}|action=edit}} modificare la pagina ora]</span>.",
+       "noarticletext": "In questo momento la pagina richiesta è vuota.\nPuoi [[Special:Search/{{PAGENAME}}|cercare questo titolo]] nelle altre pagine del sito, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercare nei registri correlati] oppure [{{fullurl:{{FULLPAGENAME}}|action=edit}} creare questa pagina]</span>.",
        "noarticletext-nopermission": "In questo momento la pagina richiesta è vuota. È possibile [[Special:Search/{{PAGENAME}}|cercare questo titolo]] nelle altre pagine del sito o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercare nei registri correlati]</span>, ma non hai i permessi per creare questa pagina.",
        "missing-revision": "La versione #$1 della pagina \"{{FULLPAGENAME}}\" non esiste.\n\nQuesto si verifica solitamente seguendo un collegamento a una pagina cancellata, in una cronologia non aggiornata.\nI dettagli possono essere trovati nel [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro delle cancellazioni].",
        "userpage-userdoesnotexist": "L'account \"$1\" non corrisponde a un utente registrato.\nVerificare che si intenda davvero creare o modificare questa pagina.",
        "undo-summary-username-hidden": "Annullata la modifica $1 di un utente nascosto",
        "cantcreateaccounttitle": "Impossibile registrare un utente",
        "cantcreateaccount-text": "La registrazione è stata bloccata da [[User:$3|$3]] per questo indirizzo IP ('''$1''').\n\nLa motivazione del blocco fornita da $3 è la seguente: ''$2''",
-       "cantcreateaccount-range-text": "La registrazione da indirizzi IP nell'intervallo '''$1''', che include il tuo ('''$4'''), è stata bloccata da [[User:$3|$3]].\n\nLa motivazione fornita da $3 è ''$2''",
+       "cantcreateaccount-range-text": "La registrazione da indirizzi IP nell'intervallo <strong>$1</strong>, che include il tuo (<strong>$4</strong>), è stata bloccata da [[User:$3|$3]].\n\nLa motivazione fornita da $3 è <em>$2</em>",
        "viewpagelogs": "Visualizza i registri relativi a questa pagina",
        "nohistory": "Cronologia delle versioni di questa pagina non reperibile.",
        "currentrev": "Versione attuale",
        "rev-deleted-user": "(nome utente rimosso)",
        "rev-deleted-event": "(dettagli del registro rimossi)",
        "rev-deleted-user-contribs": "[nome utente o indirizzo IP rimosso - edit nascosto dalla cronologia]",
-       "rev-deleted-text-permission": "Questa versione della pagina è stata '''cancellata'''.\nConsultare il [{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} log delle cancellazioni] per ulteriori dettagli.",
-       "rev-suppressed-text-permission": "Questa versione della pagina è stata '''soppressa'''.\nConsultare il [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log delle soppressioni] per ulteriori dettagli.",
-       "rev-deleted-text-unhide": "Questa versione della pagina è stata '''cancellata'''.\nConsultare il [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log delle cancellazioni] per ulteriori dettagli.\nAgli amministratori è ancora consentito [$1 visualizzare questa versione] se necessario.",
+       "rev-deleted-text-permission": "Questa versione della pagina è stata <strong>cancellata</strong>.\nConsulta il [{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} registro delle cancellazioni] per ulteriori dettagli.",
+       "rev-suppressed-text-permission": "Questa versione della pagina è stata <strong>soppressa</strong>.\nConsulta il [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro delle soppressioni] per ulteriori dettagli.",
+       "rev-deleted-text-unhide": "Questa versione della pagina è stata <strong>cancellata</strong>.\nConsulta il [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro delle cancellazioni] per ulteriori dettagli.\nAgli amministratori è ancora consentito [$1 visualizzare questa versione] se necessario.",
        "rev-suppressed-text-unhide": "Questa versione della pagina è stata '''rimossa'''.\nConsultare il [{{fullurl:{{#Special:Log}}/suppress|page={{PAGENAMEE}}}} log di rimozione] per ulteriori dettagli.\nAgli amministratori è ancora consentito [$1 visualizzare questa versione] se necessario.",
-       "rev-deleted-text-view": "Questa versione della pagina è stata '''cancellata'''.\nGli amministratori possono ancora visualizzarla; consultare il [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log delle cancellazioni] per ulteriori dettagli.",
+       "rev-deleted-text-view": "Questa versione della pagina è stata <strong>cancellata</strong>.\nGli amministratori possono ancora visualizzarla; consulta il [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro delle cancellazioni] per ulteriori dettagli.",
        "rev-suppressed-text-view": "Questa versione della pagina è stata '''rimossa'''.\nGli amministratori possono ancora visualizzarla; consultare il [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log di rimozione] per ulteriori dettagli.",
-       "rev-deleted-no-diff": "Non è possibile visualizzare questo confronto tra versioni perché una delle versioni è stata '''cancellata'''.\nConsultare il [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log delle cancellazioni] per ulteriori dettagli.",
+       "rev-deleted-no-diff": "Non è possibile visualizzare questo confronto tra versioni perché una delle versioni è stata '''cancellata'''.\nConsulta il [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro delle cancellazioni] per ulteriori dettagli.",
        "rev-suppressed-no-diff": "Non è possibile visualizzare questo confronto tra versioni perché una delle versioni è stata '''cancellata'''.",
-       "rev-deleted-unhide-diff": "Una delle versioni di questo confronto tra versioni è stata <strong>cancellata</strong>.\nConsultare il [{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} log delle cancellazioni] per ulteriori dettagli.\nAgli amministratori è ancora consentito [$1 visualizzare il confronto] se necessario.",
+       "rev-deleted-unhide-diff": "Una delle versioni di questo confronto tra versioni è stata <strong>cancellata</strong>.\nConsulta il [{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} registro delle cancellazioni] per ulteriori dettagli.\nAgli amministratori è ancora consentito [$1 visualizzare il confronto] se necessario.",
        "rev-suppressed-unhide-diff": "Una delle versioni di questo confronto di versioni è stata '''rimossa'''.\nPotrebbero esserci dettagli nel [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log delle rimozioni].\nIn quanto amministratore puoi ancora [$1 visualizzare questo confronto di versioni], se vuoi procedere.",
        "rev-deleted-diff-view": "Una delle versioni di questo confronto di versioni è stata '''cancellata'''.\nIn quanto amministratore, puoi visualizzare questo confronto di versioni; potrebbero esserci dettagli nel [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log delle cancellazioni].",
        "rev-suppressed-diff-view": "Una delle versioni di questo confronto di versioni è stata '''rimossa'''.\nIn quanto amministratore puoi visualizzare questo confronto di versioni; potrebbero esserci dettagli nel [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log delle rimozioni].",
        "revdelete-unsuppress": "Elimina le limitazioni sulle versioni ripristinate",
        "revdelete-log": "Motivo:",
        "revdelete-submit": "Applica {{PLURAL:$1|alla versione selezionata|alle versioni selezionate}}",
-       "revdelete-success": "'''Visibilità della versione aggiornata correttamente.'''",
+       "revdelete-success": "Visibilità della versione aggiornata.",
        "revdelete-failure": "'''La visibilità della versione non può essere aggiornata:'''\n$1",
-       "logdelete-success": "'''Visibilità dell'evento impostata correttamente.'''",
+       "logdelete-success": "Impostata visibilità dell'evento.",
        "logdelete-failure": "'''La visibilità dell'evento non può essere impostata:'''\n$1",
        "revdel-restore": "cambia la visibilità",
        "pagehist": "Cronologia della pagina",
        "userrights-changeable-col": "Gruppi modificabili",
        "userrights-unchangeable-col": "Gruppi non modificabili",
        "userrights-conflict": "Conflitto di modifica dei diritti utente! Controlla e conferma le tue modifiche.",
-       "userrights-removed-self": "Hai rimosso con successo i tuoi diritti. E quindi, non sarai più in grado di accedere a questa pagina.",
+       "userrights-removed-self": "Hai rimosso i tuoi diritti. E quindi, non sarai più in grado di accedere a questa pagina.",
        "group": "Gruppo:",
        "group-user": "Utenti",
        "group-autoconfirmed": "Utenti autoconvalidati",
        "recentchanges-label-bot": "Modifica effettuata da un bot",
        "recentchanges-label-unpatrolled": "Modifica non ancora verificata",
        "recentchanges-label-plusminus": "Variazione della pagina in numero di byte",
-       "recentchanges-legend-heading": "'''Legenda:'''",
+       "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vedi le [[Special:NewPages|nuove pagine]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Mostra",
        "recentchangeslinked-summary": "Questa pagina speciale mostra le modifiche più recenti alle pagine collegate da quella specificata (o contenute nella categoria specificata).\nLe pagine contenute nella propria lista degli [[Special:Watchlist|Osservati speciali]] sono evidenziate in <strong>grassetto</strong>.",
        "recentchangeslinked-page": "Nome della pagina:",
        "recentchangeslinked-to": "Mostra solo le modifiche alle pagine collegate a quella specificata",
-       "recentchanges-page-added-to-category": "[[:$1]] aggiunto alla categoria",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] e {{PLURAL:$2|una pagina è aggiunta|$2 pagine sono aggiunte}} alla categoria",
-       "recentchanges-page-removed-from-category": "[[:$1]] rimosso dalla categoria",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] e {{PLURAL:$2|una pagina è rimossa|$2 pagine sono rimosse}} dalla categoria",
+       "recentchanges-page-added-to-category": "[[:$1]] aggiunta alla categoria",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] e [[Special:WhatLinksHere/$1|{{PLURAL:$2|un'altra pagina|altre $2 pagine}}]] sono state aggiunte alla categoria",
+       "recentchanges-page-removed-from-category": "[[:$1]] rimossa dalla categoria",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] e [[Special:WhatLinksHere/$1|{{PLURAL:$2|un'altra pagina|altre $2 pagine}}]] sono state rimosse dalla categoria",
        "autochange-username": "Modifica automatica MediaWiki",
        "upload": "Carica un file",
        "uploadbtn": "Carica",
        "upload_directory_missing": "La directory di upload ($1) non esiste e non può essere creata dal server web.",
        "upload_directory_read_only": "Il server web non è in grado di scrivere nella directory di upload ($1).",
        "uploaderror": "Errore nel caricamento",
-       "upload-recreate-warning": "'Attenzione'': un file con questo nome è stato cancellato o spostato.'''\nIl log delle cancellazioni e degli spostamenti di questa pagina viene qui riportato per comodità:",
+       "upload-recreate-warning": "<strong>Attenzione: un file con questo nome è stato cancellato o spostato.</strong>\nIl registro delle cancellazioni e degli spostamenti di questa pagina viene qui riportato per comodità:",
        "uploadtext": "Usare il modulo sottostante per caricare nuovi file. Per visualizzare o ricercare i file già caricati, consultare il [[Special:FileList|log dei file caricati]]. Caricamenti di file e di nuove versioni di file sono registrati nel [[Special:Log/upload|log degli upload]], le cancellazioni nell'[[Special:Log/delete|apposito]].\n\nPer inserire un file all'interno di una pagina, fare un collegamento di questo tipo:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' per usare la versione completa del file\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|testo alternativo]]</nowiki></code>''' per usare una versione larga 200 pixel inserita in un box, allineata a sinistra e con 'testo alternativo' come didascalia\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' per generare un collegamento diretto al file senza visualizzarlo",
        "upload-permitted": "{{PLURAL:$2|Tipo di file consentito|Tipi di file consentiti}}: $1.",
        "upload-preferred": "{{PLURAL:$2|Tipo di file consigliato|Tipi di file consigliati}}: $1.",
        "backend-fail-read": "Impossibile leggere il file  $1 .",
        "backend-fail-create": "Impossibile creare il file $1.",
        "backend-fail-maxsize": "Impossibile creare il file $1 perché è più grande di {{PLURAL:$2|un|$2}} byte.",
-       "backend-fail-readonly": "Il backend \"$1\" è attualmente di sola lettura. La ragione indicata è: \"$2\"",
+       "backend-fail-readonly": "Il backend \"$1\" è attualmente di sola lettura. La ragione indicata è: <em>$2</em>",
        "backend-fail-synced": "Il file \"$1\" è in uno stato non coerente nei backend di memoria interna.",
        "backend-fail-connect": "Impossibile connettersi al backend di memoria \"$1\".",
        "backend-fail-internal": "Si è verificato un errore sconosciuto nel backend di memoria \"$1\".",
        "uploadstash-summary": "Questa pagina consente l'accesso ai file che sono stati caricati (o sono in fase di caricamento) ma che non sono stati ancora pubblicati sul wiki. Questi file sono visibili solo all'utente che li ha caricati.",
        "uploadstash-clear": "Elimina i file in stash",
        "uploadstash-nofiles": "Non hai file in stash.",
-       "uploadstash-badtoken": "Questa azione non ha avuto successo, forse perché le tue credenziali di modifica sono scadute. Prova ancora.",
-       "uploadstash-errclear": "La cancellazione dei file non ha avuto successo.",
+       "uploadstash-badtoken": "Esecuzione dell'azione non riuscita, forse perché le tue credenziali di modifica sono scadute. Prova ancora.",
+       "uploadstash-errclear": "La pulizia dei file non è riuscita.",
        "uploadstash-refresh": "Aggiorna l'elenco dei file",
        "invalid-chunk-offset": "Offset della parte non valido.",
        "img-auth-accessdenied": "Accesso negato",
        "confirmdeletetext": "Stai per cancellare una pagina con tutta la sua cronologia. Per cortesia, conferma che è tua intenzione procedere a tale cancellazione, che hai piena consapevolezza delle conseguenze della tua azione e che essa è conforme alle linee guida stabilite in [[{{MediaWiki:Policy-url}}]].",
        "actioncomplete": "Azione completata",
        "actionfailed": "Azione fallita",
-       "deletedtext": "La pagina \"$1\" è stata cancellata.\nConsultare il log delle $2 per un elenco delle pagine cancellate di recente.",
+       "deletedtext": "La pagina \"$1\" è stata cancellata.\nConsulta il registro delle $2 per un elenco delle pagine cancellate di recente.",
        "dellogpage": "Cancellazioni",
        "dellogpagetext": "Di seguito sono elencate le pagine cancellate di recente.",
        "deletionlog": "cancellazioni",
        "delete-toobig": "La cronologia di questa pagina è molto lunga (oltre $1 {{PLURAL:$1|versione|versioni}}). 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|versione|versioni}}). La sua cancellazione può creare dei problemi di funzionamento al database di {{SITENAME}}; procedere con cautela.",
        "deleteprotected": "Non puoi cancellare questa pagina perché è stata protetta.",
-       "deleting-backlinks-warning": "'''Attenzione:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|altre pagine]] contengono collegamenti o inclusioni alla pagina che stai per cancellare.",
+       "deleting-backlinks-warning": "<strong>Attenzione:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|altre pagine]] contengono collegamenti o inclusioni alla pagina che stai per cancellare.",
        "rollback": "Annulla le modifiche",
        "rollbacklink": "rollback",
        "rollbacklinkcount": "rollback di {{PLURAL:$1|una modifica|$1 modifiche}}",
        "rollbackfailed": "Rollback fallito",
        "cantrollback": "Impossibile annullare le modifiche; l'utente che le ha effettuate è l'unico ad aver contribuito alla pagina.",
        "alreadyrolled": "Non è possibile annullare le modifiche apportate alla pagina [[:$1]] da parte di [[User:$2|$2]] ([[User talk:$2|discussione]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); un altro utente ha già modificato la pagina oppure ha effettuato il rollback.\n\nLa modifica più recente alla pagina è stata apportata da [[User:$3|$3]] ([[User talk:$3|discussione]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "L'oggetto della modifica era: \"''$1''\".",
+       "editcomment": "L'oggetto della modifica era: <em>$1</em>.",
        "revertpage": "Annullate le modifiche di [[Special:Contributions/$2|$2]] ([[User talk:$2|discussione]]), riportata alla versione precedente di [[User:$1|$1]]",
        "revertpage-nouser": "Annullate le modifiche di un utente nascosto, riportata alla versione precedente di {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Annullate le modifiche di $1; pagina riportata all'ultima versione di $2.",
        "changecontentmodel-title-label": "Titolo della pagina",
        "changecontentmodel-model-label": "Nuovo modello di contenuto",
        "changecontentmodel-reason-label": "Motivo:",
+       "changecontentmodel-submit": "Modifica",
        "changecontentmodel-success-title": "Il modello di contenuto è stato modificato",
        "changecontentmodel-success-text": "Il tipo di contenuto di [[:$1]] è stato modificato.",
        "changecontentmodel-cannot-convert": "Il contenuto di [[:$1]] non può essere convertito in tipo $2.",
        "changecontentmodel-nodirectediting": "Il modello di contenuto $1 non supporta la modifica diretta",
        "log-name-contentmodel": "Modifiche del modello contenuti",
        "log-description-contentmodel": "Eventi relativi al modello di contenuto di una pagina",
+       "logentry-contentmodel-new": "$1 {{GENDER:$2|ha creato}} la pagina $3 utilizzando un modello di contenuto non predefinito \"$5\"",
        "logentry-contentmodel-change": "$1 {{GENDER:$2|ha modificato}} il modello di contenuto della pagina $3 da \"$4\" a \"$5\"",
        "logentry-contentmodel-change-revertlink": "ripristina",
        "logentry-contentmodel-change-revert": "ripristina",
        "undeletedrevisions-files": "{{PLURAL:$1|Una versione|$1 versioni}} e $2 file recuperati",
        "undeletedfiles": "{{PLURAL:$1|Un file recuperato|$1 file recuperati}}",
        "cannotundelete": "Ripristino non riuscito:\n$1",
-       "undeletedpage": "'''La pagina $1 è stata recuperata'''\n\nConsultare il [[Special:Log/delete|log delle cancellazioni]] per vedere le cancellazioni e i recuperi più recenti.",
-       "undelete-header": "Consultare il [[Special:Log/delete|log delle cancellazioni]] per vedere le cancellazioni più recenti.",
+       "undeletedpage": "'''La pagina $1 è stata recuperata'''\n\nConsulta il [[Special:Log/delete|registro delle cancellazioni]] per vedere le cancellazioni e i recuperi più recenti.",
+       "undelete-header": "Consulta il [[Special:Log/delete|registro delle cancellazioni]] per vedere le cancellazioni più recenti.",
        "undelete-search-title": "Ricerca nelle pagine cancellate",
        "undelete-search-box": "Ricerca le pagine cancellate",
        "undelete-search-prefix": "Mostra le pagine il cui titolo inizia con:",
        "confirmrecreate": "L'utente [[User:$1|$1]] ([[User talk:$1|discussioni]]) ha cancellato questa pagina dopo che hai iniziato a modificarla, per il seguente motivo: ''$2''\nPer favore, conferma che vuoi veramente ricreare questa pagina.",
        "confirmrecreate-noreason": "L'utente [[User:$1|$1]] ([[User talk:$1|discussioni]]) {{GENDER:$1|ha cancellato}} questa pagina dopo che hai iniziato a modificarla. Per favore, conferma che vuoi veramente ricreare questa pagina.",
        "recreate": "Ricrea",
-       "confirm_purge_button": "Conferma",
+       "confirm_purge_button": "OK",
        "confirm-purge-top": "Vuoi pulire la cache di questa pagina?",
        "confirm-purge-bottom": "Ripulire la cache di una pagina consente di mostrare la sua versione più aggiornata.",
        "confirm-watch-button": "OK",
        "tags-delete-not-allowed": "I tag definiti da un'estensione non possono essere eliminati a meno che ciò non sia specificamente permesso dall'estensione.",
        "tags-delete-not-found": "Il tag \"$1\" non esiste.",
        "tags-delete-too-many-uses": "Il tag \"$1\" è applicato a più di $2 {{PLURAL:$2|revisione|revisioni}}, il che significa che non può essere eliminato.",
-       "tags-delete-warnings-after-delete": "Il tag \"$1\" è stato eliminato con successo, ma fai attenzione {{PLURAL:$2|al seguente avviso|ai seguenti avvisi}}:",
+       "tags-delete-warnings-after-delete": "L'etichetta \"$1\" è stata cancellata, ma fai attenzione {{PLURAL:$2|al seguente avviso|ai seguenti avvisi}}:",
        "tags-activate-title": "Attiva tag",
        "tags-activate-question": "Stai per attivare il tag \"$1\".",
        "tags-activate-reason": "Motivo:",
        "tags-edit-revision-legend": "Aggiungi o rimuovi etichette da {{PLURAL:$1|questa versione|tutte le $1 versioni}}",
        "tags-edit-logentry-legend": "Aggiungi o rimuovi etichette da {{PLURAL:$1|questa voce di registro|tutte le $1 voci di registro}}",
        "tags-edit-existing-tags": "Etichette esistenti:",
-       "tags-edit-existing-tags-none": "''Nessuna''",
+       "tags-edit-existing-tags-none": "<em>Nessuna</em>",
        "tags-edit-new-tags": "Nuove etichette:",
        "tags-edit-add": "Aggiungi queste etichette:",
        "tags-edit-remove": "Rimuovi queste etichette:",
        "tags-edit-chosen-placeholder": "Seleziona alcune etichette",
        "tags-edit-chosen-no-results": "Nessun tag corrispondente trovato",
        "tags-edit-reason": "Motivo:",
-       "tags-edit-revision-submit": "Applica le modifiche a {{PLURAL:$1|questa revisione|$1 revisioni}}",
+       "tags-edit-revision-submit": "Applica le modifiche a {{PLURAL:$1|questa versione|$1 versioni}}",
        "tags-edit-logentry-submit": "Applica le modifiche a {{PLURAL:$1|questa voce di registro|$1 voci di registro}}",
-       "tags-edit-success": "Le modifiche sono state applicate correttamente.",
+       "tags-edit-success": "Le modifiche sono state applicate.",
        "tags-edit-failure": "Non è stato possibile effettuare le seguenti modifiche:\n$1",
        "tags-edit-nooldid-title": "Versione specificata non valida",
        "tags-edit-nooldid-text": "Non è stata specificata alcuna versione della pagina su cui eseguire questa funzione, oppure la versione specificata non esiste.",
        "default-skin-not-found": "Oops! Il tema predefinito per il tuo wiki, definito in <code dir=\"ltr\">$wgDefaultSkin</code> come <code>$1</code>, non è disponibile.\n\nLa tua installazione sembra includere {{PLURAL:$4|il seguente|i seguenti}} temi. Vedi [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione tema] per informazioni su come {{PLURAL:$4|abilitarlo|abilitarli e scegliere quello predefinito}}.\n\n$2\n\n; Se hai appena installato MediaWiki:\n: Probabilmente lo hai installato da git, o direttamente dal codice sorgente usando qualche altro metodo. Ciò era previsto. Prova ad installare alcuni temi dalla [https://www.mediawiki.org/wiki/Category:All_skins directory su mediawiki.org], tramite:\n:* Scaricando il [https://www.mediawiki.org/wiki/Download programma di installazione tarball], che viene fornito con diversi temi ed estensioni. Puoi fare copia ed incolla della directory <code dir=\"ltr\">skins/</code> da lì.\n:* Scaricando tarball di singoli temi da [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Usando Git per scaricare i temi].\n: In questo modo non dovrebbe interferire con il tuo repository git se sei uno sviluppatore MediaWiki.\n\n; Se hai appena aggiornato MediaWiki:\n: MediaWiki 1.24 e versioni successive non abilitano più automaticamente i temi installati (vedi [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automatico temi]). Puoi copiare {{PLURAL:$5|la seguente linea|le seguenti linee}} nel <code>LocalSettings.php</code> per abilitare {{PLURAL:$5|il tema installato|tutti i temi installati}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Se hai appena modificato <code>LocalSettings.php</code>:\n: Ricontrolla i nomi dei temi per errori di battitura.",
        "default-skin-not-found-no-skins": "Oops! Il tema predefinito per il tuo wiki, definito in <code>$wgDefaultSkin</code> come <code>$1</code>, non è disponibile.\n\nNon hai temi installati.\n\n; Se hai appena installato o aggiornato MediaWiki:\n: Probabilmente lo hai installato da git, o direttamente dal codice sorgente usando qualche altro metodo. Ciò era previsto. MediaWiki 1.24 e versioni successive non include alcun tema nel repository principale. Prova ad installare alcuni temi dalla [https://www.mediawiki.org/wiki/Category:All_skins directory su mediawiki.org], tramite:\n:* Scaricando il [https://www.mediawiki.org/wiki/Download programma di installazione tarball], che viene fornito con diversi temi ed estensioni. Puoi fare copia ed incolla della directory <code>skins/</code> da lì.\n:* Scaricando tarball di singoli temi da [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Usando Git per scaricare i temi].\n: In questo modo non dovrebbe interferire con il tuo repository git se sei uno sviluppatore MediaWiki. Vedi [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione temi] per informazioni su come abilitarle e scegliere quello predefinito.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (abilitata)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disabilitata''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>disabilitata</strong>)",
        "mediastatistics": "Statistiche relative ai file multimediali",
        "mediastatistics-summary": "Statistiche sui tipi di file caricati. Sono incluse solo la versione più recente di un file. Versioni vecchie o cancellate dei file sono escluse.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte}} ($2; $3%)",
index 1615403..09f9963 100644 (file)
        "myprivateinfoprotected": "あなたには自身の非公開情報を編集する権限がありません。",
        "mypreferencesprotected": "あなたには自身の個人設定を編集する権限がありません。",
        "ns-specialprotected": "特別ページは編集できません。",
-       "titleprotected": "[[User:$1|$1]]によりこのページ名を持つページの作成は保護されています。\n理由は「<em>$2</em>」です。",
+       "titleprotected": "[[User:$1|$1]]によりこのページ名を持つページの作成は保護されています。\n理由は<em>$2</em>です。",
        "filereadonlyerror": "ファイルリポジトリ「$2」が読み取り専用の状態にあるため、ファイル「$1」を変更できません。\n\n読み取り専用に設定したシステム管理者からの説明: 「$3」",
        "invalidtitle-knownnamespace": "名前空間名「$2」と名前「$3」の組み合わせはページ名として無効です",
        "invalidtitle-unknownnamespace": "不明な名前空間番号 $1 と名前「$2」の組み合わせはページ名として無効です",
        "nocookiesfornew": "発信元を確認できなかったため、アカウントは作成されませんでした。\nCookieを有効にしていることを確認して、このページを再読込してもう一度試してください。",
        "nocookiesforlogin": "{{int:nocookieslogin}}",
        "noname": "有効な利用者名が指定されていません。",
-       "loginsuccesstitle": "ã\83­ã\82°ã\82¤ã\83³æ\88\90å\8a\9f",
+       "loginsuccesstitle": "ã\83­ã\82°ã\82¤ã\83³æ¸\88ã\81¿",
        "loginsuccess": "<strong>{{SITENAME}}に「$1」としてログインしました。</strong>",
        "nosuchuser": "「$1」という名前の利用者は見当たりません。\n利用者名では大文字と小文字を区別します。\n綴りが正しいことを確認するか、[[Special:UserLogin/signup|新たにアカウントを作成]]してください。",
        "nosuchusershort": "「$1」という名前の利用者は存在しません。\n綴りを確認してください。",
        "resetpass_submit": "再設定してログイン",
        "changepassword-success": "パスワードを変更しました!",
        "changepassword-throttled": "最近のログインの試行回数が多すぎます。\n$1待ってから再度試してください。",
-       "botpasswords": "ボットのパスワード",
-       "botpasswords-disabled": "ボットのパスワードは無効です。",
-       "botpasswords-existing": "既存のボットのパスワード",
-       "botpasswords-createnew": "ボットのパスワードの新規作成",
+       "botpasswords": "ボット用パスワード",
+       "botpasswords-summary": "<em>ボット用パスワード</em>は通常ログイン時の情報を使わずに、API を介して利用者アカウントへのアクセスを許可します。利用者権限は制限された状態で利用可能となります。\n\nこの機能の必要性がわからない場合、おそらく利用すべきではありません。誰かにボット用パスワードの生成を依頼された場合、安易に受諾するべきではありません。",
+       "botpasswords-disabled": "ボット用パスワードは無効です。",
+       "botpasswords-no-central-id": "ボット用パスワードを利用する場合、中央化されたアカウントにログインする必要があります。",
+       "botpasswords-existing": "既存のボット用パスワード",
+       "botpasswords-createnew": "ボット用パスワードの新規作成",
        "botpasswords-editexisting": "既存のボットのパスワードを編集",
        "botpasswords-label-appid": "ボット名:",
        "botpasswords-label-create": "作成",
        "botpasswords-label-cancel": "中止",
        "botpasswords-label-delete": "削除",
        "botpasswords-label-resetpassword": "パスワードをリセット",
+       "botpasswords-label-grants": "該当する権限群",
+       "botpasswords-help-grants": "各権限群は、一覧にある利用者権限で現在の利用者アカウントが既に有している権限を付与します。詳細については、[[Special:ListGrants|権限群の表]]をご覧ください。",
        "botpasswords-label-restrictions": "使用制限:",
+       "botpasswords-label-grants-column": "付与",
        "botpasswords-bad-appid": "ボット「$1」は有効ではありません。",
        "botpasswords-insert-failed": "ボット「$1」の追加に失敗しました。既に追加されていないか確認してください。",
        "botpasswords-update-failed": "ボット「$1」の更新に失敗しました。削除されていないか確認してください。",
-       "botpasswords-created-title": "ボットのパスワードが作成されました",
-       "botpasswords-created-body": "ボット「$1」のパスワードが作成されました。",
-       "botpasswords-updated-title": "ボットのパスワードが更新されました",
-       "botpasswords-updated-body": "ボット「$1」のパスワードを更新しました。",
-       "botpasswords-deleted-title": "ボットのパスワードが削除されました",
-       "botpasswords-deleted-body": "ボット「$1」のパスワードを削除しました。",
+       "botpasswords-created-title": "ボット用パスワードが作成されました",
+       "botpasswords-created-body": "利用者「$2」のボット名「$1」のためのパスワードが作成されました。",
+       "botpasswords-updated-title": "ボット用パスワードが更新されました",
+       "botpasswords-updated-body": "利用者「$2」のボット名「$1」のためのパスワードが更新されました。",
+       "botpasswords-deleted-title": "ボット用パスワードが削除されました",
+       "botpasswords-deleted-body": "利用者「$2」のボット名「$1」のためのパスワードが削除されました。",
+       "botpasswords-newpassword": "<strong>$1</strong> 用の新しいパスワードは <strong>$2</strong> です。 <em>後で参照するために、この情報を控えておいてください</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider が有効ではありません。",
-       "botpasswords-invalid-name": "指定された利用者名には、ボットのパスワードに区切り (「$1」) が含まれていません。",
+       "botpasswords-invalid-name": "指定された利用者名には、ボット用パスワードの区切りである「$1」 が含まれていません。",
        "botpasswords-not-exist": "利用者「$1」はボット「$2」のパスワードを所持していません。",
        "resetpass_forbidden": "パスワードは変更できません",
        "resetpass-no-info": "このページに直接アクセスするためにはログインしている必要があります。",
        "newarticle": "(新)",
        "newarticletext": "まだ存在しないページへのリンクをたどりました。\nこのページを新規作成するには、ページの内容を以下のボックスに記入してください (詳しくは[$1 ヘルプページ]を参照してください)。\n誤ってこのページにたどり着いた場合には、ブラウザーの<strong>戻る</strong>ボタンで前のページに戻ってください。",
        "anontalkpagetext": "----\n<em>このページはアカウントをまだ作成していないか使用していない匿名利用者のための議論ページです。</em>\n\n匿名利用者を識別するために、利用者名の代わりにIPアドレスが使用されています。IP アドレスは複数の利用者で共有されている場合があります。もし、あなたが匿名利用者であり、自分に関係のないコメントが寄せられていると考えられる場合は、[[Special:UserLogin/signup|アカウントを作成する]]か[[Special:UserLogin|ログインして]]他の匿名利用者と間違えられないようにしてください。",
-       "noarticletext": "現在このページには内容がありません。\n他のページ内で[[Special:Search/{{PAGENAME}}|このページ名を検索]]、\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 関連する記録を検索]、\nまたは[{{fullurl:{{FULLPAGENAME}}|action=edit}} このページを編集]</span>できます。",
+       "noarticletext": "現在このページには内容がありません。\n他のページ内で[[Special:Search/{{PAGENAME}}|このページ名を検索]]、\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 関連する記録を検索]、\nまたは[{{fullurl:{{FULLPAGENAME}}|action=edit}} このページを作成]</span>できます。",
        "noarticletext-nopermission": "現在このページには内容がありません。\n他のページ内で[[Special:Search/{{PAGENAME}}|このページ名を検索]]、または<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 関連する記録を検索]</span>できますが、あなたにはこのページを作成する権限がありません。",
        "missing-revision": "「{{FULLPAGENAME}}」というページの版番号 $1 の版は存在しません。\n\n通常、削除されたページの版への古い差分表示や固定リンクをたどった際に、このようなことが起きます。 \n詳細は[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 削除記録]を参照してください。",
        "userpage-userdoesnotexist": "「$1」という利用者アカウントは登録されていません。\nこのページの作成/編集が適切かご確認ください。",
        "undo-summary-username-hidden": "秘匿された利用者による版 $1 を取り消し",
        "cantcreateaccounttitle": "アカウントを作成できません",
        "cantcreateaccount-text": "この IP アドレス (<strong>$1</strong>) からのアカウント作成は、[[User:$3|$3]] によってブロックされています。\n\n$3 が示した理由: <em>$2</em>",
-       "cantcreateaccount-range-text": "この IP アドレス ('''$4''') を含む、IP アドレス範囲 '''$1''' からのアカウント作成は、[[User:$3|$3]] によってブロックされています。\n\n$3 が示した理由: ''$2''",
+       "cantcreateaccount-range-text": "この IP アドレス (<strong>$4</strong>) を含む、IP アドレス範囲 <strong>$1</strong> からのアカウント作成は、[[User:$3|$3]] によってブロックされています。\n\n$3 が示した理由: <em>$2</em>",
        "viewpagelogs": "このページの記録を閲覧",
        "nohistory": "このページには編集履歴がありません。",
        "currentrev": "最新版",
        "revdelete-submit": "選択された{{PLURAL:$1|版}}に適用",
        "revdelete-success": "版の閲覧レベルを更新しました。",
        "revdelete-failure": "版の閲覧レベルを更新できませんでした:\n$1",
-       "logdelete-success": "記録の閲覧レベルを変更しました。",
+       "logdelete-success": "記録の閲覧レベルを設定しました。",
        "logdelete-failure": "記録の閲覧レベルを設定できませんでした。\n$1",
        "revdel-restore": "閲覧レベルを変更",
        "pagehist": "ページの履歴",
        "right-createpage": "ページ (議論ページ以外) を作成",
        "right-createtalk": "議論ページを作成",
        "right-createaccount": "新しい利用者アカウントを作成",
+       "right-autocreateaccount": "外部利用者アカウントで自動的にログイン",
        "right-minoredit": "細部の編集の印を付ける",
        "right-move": "ページを移動",
        "right-move-subpages": "下位ページを含めてページを移動",
        "grant-editmywatchlist": "あなたのウォッチリストを編集",
        "grant-editpage": "既存のページを編集",
        "grant-editprotected": "保護されたページを編集",
+       "grant-highvolume": "多量の編集",
        "grant-oversight": "利用者名および版を秘匿",
        "grant-patrol": "ページへの変更の巡回",
        "grant-protect": "ページを保護および保護解除",
        "action-createpage": "ページの作成",
        "action-createtalk": "議論ページの作成",
        "action-createaccount": "この利用者アカウントの作成",
+       "action-autocreateaccount": "この外部利用者アカウントを自動的に作成",
        "action-history": "このページの履歴の閲覧",
        "action-minoredit": "細部の編集の印を付ける",
        "action-move": "このページの移動",
        "recentchanges-label-bot": "ボットによる編集",
        "recentchanges-label-unpatrolled": "巡回されていない編集",
        "recentchanges-label-plusminus": "ページサイズの増減 (バイト単位)",
-       "recentchanges-legend-heading": "'''凡例:'''",
+       "recentchanges-legend-heading": "<strong>凡例:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|新しいページ一覧]]も参照)",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "表示",
        "recentchangeslinked-page": "ページ名:",
        "recentchangeslinked-to": "このページへのリンク元での変更の表示に切り替え",
        "recentchanges-page-added-to-category": "[[:$1]]をカテゴリに追加",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]]と他{{PLURAL:$2|1ページ|$2ページ}}をカテゴリに追加",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]]と他[[Special:WhatLinksHere/$1|{{PLURAL:$2|1ページ|$2ページ}}]]をカテゴリに追加",
        "recentchanges-page-removed-from-category": "[[:$1]]をカテゴリから除外",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]]と他{{PLURAL:$2|1ページ|$2ページ}}をカテゴリから除外",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]]と他 [[Special:WhatLinksHere/$1|{{PLURAL:$2|1ページ|$2ページ}}]]をカテゴリから除外",
        "autochange-username": "メディアウィキ自動変更",
        "upload": "ファイルをアップロード",
        "uploadbtn": "ファイルをアップロード",
        "backend-fail-read": "ファイル「$1」から読み取れませんでした。",
        "backend-fail-create": "ファイル「$1」に書き込めませんでした。",
        "backend-fail-maxsize": "サイズが {{PLURAL:$2|$2 バイト}}を超えているため、ファイル「$1」に書き込めませんでした。",
-       "backend-fail-readonly": "ストレージバックエンド「$1」は現在読み取り専用です。理由:「<em>$2</em>」",
+       "backend-fail-readonly": "ストレージバックエンド「$1」は現在読み取り専用です。理由: <em>$2</em>",
        "backend-fail-synced": "ファイル「$1」は、ストレージバックエンド内部で不一致の状態にあります",
        "backend-fail-connect": "ストレージバックエンド「$1」に接続できませんでした。",
        "backend-fail-internal": "ストレージバックエンド「$1」内で不明なエラーが発生しました。",
        "apihelp": "API のヘルプ",
        "apihelp-no-such-module": "モジュール「$1」が見つかりません。",
        "apisandbox": "APIサンドボックス",
+       "apisandbox-jsonly": "API サンドボックスを利用するには JavaScript が必要です。",
        "apisandbox-api-disabled": "このウェブサイトでは、API は無効になっています。",
        "apisandbox-intro": "このページでは、<strong>MediaWiki ウェブサービス API</strong> を試用できます。\nAPI の使用方法の詳細は[[mw:API:Main page|API のドキュメント]]をご覧ください。例: [//www.mediawiki.org/wiki/API#A_simple_example Main Pageの内容を取得]。操作を選択すると他の例を閲覧できます。\n\nこれはサンドボックスですが、このページで実行した操作によってウィキが変更される場合があることにご注意ください。",
        "apisandbox-fullscreen": "パネルを展開",
+       "apisandbox-fullscreen-tooltip": "ブラウザーウィンドウ内で最大限サンドボックスパネルを展開",
        "apisandbox-unfullscreen": "ページを表示",
+       "apisandbox-unfullscreen-tooltip": "MediaWikiのナビゲーションリンクが使用できるようにサンドボックスパネルを小さくします。",
        "apisandbox-submit": "リクエストする",
        "apisandbox-reset": "消去",
        "apisandbox-retry": "再試行",
+       "apisandbox-loading": "API モジュール \"$1\" の情報を読み込んでいます...",
+       "apisandbox-load-error": "API モジュール \"$1\" の情報の読み込み中にエラーが発生しました: $2",
        "apisandbox-no-parameters": "この API モジュールにはパラメーターがありません。",
        "apisandbox-helpurls": "ヘルプリンク",
        "apisandbox-examples": "例",
+       "apisandbox-dynamic-parameters": "追加の引数",
+       "apisandbox-dynamic-parameters-add-label": "引数の追加",
        "apisandbox-dynamic-parameters-add-placeholder": "引数名",
+       "apisandbox-dynamic-error-exists": "引数名 \"$1\" は既に存在しています。",
+       "apisandbox-deprecated-parameters": "廃止予定の引数",
+       "apisandbox-submit-invalid-fields-title": "いくつかの欄が不正です。",
+       "apisandbox-submit-invalid-fields-message": "印が付いている欄を訂正し、再試行してください。",
        "apisandbox-results": "結果",
+       "apisandbox-sending-request": "API要求を送信中...",
+       "apisandbox-loading-results": "API結果を受信中...",
+       "apisandbox-results-error": "API 問い合わせの応答を読み込み中にエラーが発生しました: $1。",
        "apisandbox-request-url-label": "リクエスト URL:",
        "apisandbox-request-time": "リクエスト時間: {{PLURAL:$1|$1ミリ秒}}",
+       "apisandbox-results-fixtoken": "トークンを訂正して再送信",
+       "apisandbox-results-fixtoken-fail": "\"$1\" トークンの取得に失敗しました。",
+       "apisandbox-alert-page": "このページの欄が有効ではありません。",
+       "apisandbox-alert-field": "この欄の値が有効ではありません。",
        "booksources": "書籍情報源",
        "booksources-search-legend": "書籍情報源を検索",
        "booksources-isbn": "ISBN:",
        "listgrouprights-namespaceprotection-header": "名前空間ごとの制限",
        "listgrouprights-namespaceprotection-namespace": "名前空間",
        "listgrouprights-namespaceprotection-restrictedto": "編集を可能にする権限",
+       "listgrants": "権限群",
+       "listgrants-grant": "権限群名",
        "listgrants-rights": "権限",
        "trackingcategories": "追跡用カテゴリ",
        "trackingcategories-summary": "このページでは、MediaWiki ソフトウェアが自動的に追加した追跡用カテゴリを列挙します。これらの名前は、{{ns:8}} 名前空間内の対応するシステム メッセージを修正することで変更できます。",
        "wlshowhideanons": "IP利用者",
        "wlshowhidepatr": "巡回された編集",
        "wlshowhidemine": "自分の編集",
-       "wlshowhidecategorization": "ページのカテゴリ追加・除去",
+       "wlshowhidecategorization": "ページのカテゴリ追加・除去",
        "watchlist-options": "ウォッチリストのオプション",
        "watching": "ウォッチリストに追加中...",
        "unwatching": "ウォッチリストから除去中...",
        "delete-toobig": "このページには、$1版を超える編集履歴があります。\nこのようなページの削除は、{{SITENAME}}の偶発的な問題を避けるため、制限されています。",
        "delete-warning-toobig": "このページには、 $1版を超える編集履歴があります。\n削除すると、{{SITENAME}}のデータベース処理に大きな負荷がかかります。\n十分に注意してください。",
        "deleteprotected": "このページは保護されているため削除できません。",
-       "deleting-backlinks-warning": "'''警告:''' 削除しようとしているページは、[[Special:WhatLinksHere/{{FULLPAGENAME}}|他のページ]]からリンクまたは参照読み込みされています。",
+       "deleting-backlinks-warning": "<strong>警告:</strong> 削除しようとしているページは、[[Special:WhatLinksHere/{{FULLPAGENAME}}|他のページ]]からリンクまたは参照読み込みされています。",
        "rollback": "編集を巻き戻し",
        "rollbacklink": "巻き戻し",
        "rollbacklinkcount": "$1{{PLURAL:$1|編集}}を巻き戻し",
        "rollbackfailed": "巻き戻しに失敗しました",
        "cantrollback": "編集を差し戻せません。\n最後の投稿者が、このページの唯一の作者です。",
        "alreadyrolled": "ページ[[:$1]]の[[User:$2|$2]] ([[User talk:$2|トーク]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) による編集を巻き戻せません。\n他の利用者が既に編集または巻き戻しを行ったためです。\n\nこのページの最後の編集は[[User:$3|$3]] ([[User talk:$3|トーク]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) によるものです。",
-       "editcomment": "編集内容の要約:「''$1''」",
+       "editcomment": "編集内容の要約: <em>$1</em>",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|トーク]]) による編集を [[User:$1|$1]] による直前の版へ差し戻しました",
        "revertpage-nouser": "非表示の利用者による編集を {{GENDER:$1|[[User:$1|$1]]}} による直前の版へ差し戻しました",
        "rollback-success": "$1による編集を差し戻しました。\n$2による直前の版へ変更されました。",
        "changecontentmodel-title-label": "ページ名",
        "changecontentmodel-model-label": "新しい コンテンツ モデル",
        "changecontentmodel-reason-label": "理由:",
+       "changecontentmodel-submit": "変更",
        "changecontentmodel-success-title": "コンテント・モデルは変更されました",
        "changecontentmodel-success-text": "[[:$1]]のコンテント・タイプは変更されています。",
        "changecontentmodel-cannot-convert": "[[:$1]]上のコンテントは$2の型には変換できません。",
        "block-log-flags-hiddenname": "利用者名の秘匿",
        "range_block_disabled": "範囲ブロックを作成する管理者機能は無効化されています。",
        "ipb_expiry_invalid": "有効期限が無効です。",
+       "ipb_expiry_old": "有効期限が過去の時刻です。",
        "ipb_expiry_temp": "利用者名秘匿のブロックは、無期限ブロックになります。",
        "ipb_hide_invalid": "このアカウントを秘匿できません。編集回数が{{PLURAL:$1|$1回}}を超えています。",
        "ipb_already_blocked": "「$1」は既にブロックされています。",
        "export-download": "ファイルとして保存",
        "export-templates": "テンプレートを含める",
        "export-pagelinks": "以下の階層までのリンク先ページを含める:",
+       "export-manual": "手動でページを追加",
        "allmessages": "システムメッセージの一覧",
        "allmessagesname": "名前",
        "allmessagesdefault": "既定のメッセージ文",
        "pageinfo-category-files": "ファイル数",
        "markaspatrolleddiff": "巡回済みにする",
        "markaspatrolledtext": "このページを巡回済みにする",
+       "markaspatrolledtext-file": "このファイルの版を巡回済みにする",
        "markedaspatrolled": "巡回済みにしました",
        "markedaspatrolledtext": "[[:$1]]の、選択した版を巡回済みにしました。",
        "rcpatroldisabled": "最近の更新の巡回は無効です",
        "newimages-legend": "絞り込み",
        "newimages-label": "ファイル名 (またはその一部):",
        "newimages-showbots": "ボットによるアップロードを表示",
+       "newimages-hidepatrolled": "巡回済みのアップロードを隠す",
        "noimages": "表示できるものがありません。",
        "ilsubmit": "検索",
        "bydate": "日付順",
        "exif-compression-6": "JPEG (旧式)",
        "exif-copyrighted-true": "著作権あり",
        "exif-copyrighted-false": "著作権情報未設定",
+       "exif-photometricinterpretation-1": "黒と白(黒が0)",
        "exif-unknowndate": "不明な日付",
        "exif-orientation-1": "通常",
        "exif-orientation-2": "左右反転",
        "tags-deactivate": "無効化",
        "tags-hitcount": "$1 {{PLURAL:$1|回の変更}}",
        "tags-manage-no-permission": "変更タグを管理する権限がありません。",
+       "tags-manage-blocked": "ブロックされているため、変更タグを管理できません",
        "tags-create-heading": "新しいタグを作成",
        "tags-create-explanation": "既定では、新しく作られたタグは利用者とボットによる使用が可能となります。",
        "tags-create-tag-name": "タグ名:",
        "tags-delete-not-allowed": "拡張機能によって定義されているタグは削除できません(ただし拡張機能が明示的に削除を許可している場合を除く)。",
        "tags-delete-not-found": "タグ「$1」は存在しません。",
        "tags-delete-too-many-uses": "タグ「$1」は少なくとも$2版に付与されており、削除できません。",
-       "tags-delete-warnings-after-delete": "ã\82¿ã\82°ã\80\8c$1ã\80\8dã\81®å\89\8aé\99¤ã\81«æ\88\90å\8a\9fã\81\97ã\81¾ã\81\97ã\81\9fã\81\8cã\80\81以ä¸\8bã\81®{{PLURAL:$2|è­¦å\91\8a}}ã\81\8cç\99ºç\94\9fã\81\97ã\81¾ã\81\97ã\81\9fï¼\9a",
+       "tags-delete-warnings-after-delete": "タグ「$1」の削除しましたが、以下の{{PLURAL:$2|警告}}が発生しました:",
        "tags-activate-title": "タグの有効化",
        "tags-activate-question": "タグ「$1」を有効化しようとしています。",
        "tags-activate-reason": "理由:",
        "tags-edit-revision-legend": "{{PLURAL:$1|この版|すべての $1 版}}から、タグを追加または除去",
        "tags-edit-logentry-legend": "{{PLURAL:$1|この記録項目|すべての $1 記録項目}}から、タグを追加または除去",
        "tags-edit-existing-tags": "既存のタグ:",
-       "tags-edit-existing-tags-none": "(なし)",
+       "tags-edit-existing-tags-none": "<em>なし</em>",
        "tags-edit-new-tags": "新しいタグ:",
        "tags-edit-add": "これらのタグを追加:",
        "tags-edit-remove": "これらのタグを除去:",
        "tags-edit-reason": "理由:",
        "tags-edit-revision-submit": "変更を {{PLURAL:$1|this revision|$1 revisions}} に適用",
        "tags-edit-logentry-submit": "変更を {{PLURAL:$1|this log entry|$1 log entries}} に適用",
-       "tags-edit-success": "変更が正常に適用されました。",
+       "tags-edit-success": "変更が適用されました。",
        "tags-edit-failure": "変更は適用できませんでした: $1",
        "tags-edit-nooldid-title": "無効な対象版",
        "tags-edit-nooldid-text": "この関数を実行しましたが、対象の版が指定されていない、あるいは指定された版が存在しません。",
        "default-skin-not-found": "あなたのウィキの既定の外装 <code>$1</code> として定義されている <code>$wgDefaultSkin</code> は利用できません。\n\nあなたのインストールには以下の{{PLURAL:$4|skin|外装}}が含まれています。{{PLURAL:$4|it|外装の有効化と既定の選択}}については、[https://www.mediawiki.org/wiki/Manual:Skin_configuration マニュアル: 外装設定] をご覧ください。\n\n$2\n\n; MediaWikiをインストールしたばかりの場合:\n: gitからインストールしたか、その他の何らかの方法でソースコードから直接インストールした場合には、これは期待されたとおりの動作です。[https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory] から外装をインストールしてみてください。\n:* [https://www.mediawiki.org/wiki/Download tarball installer] をダウンロードしてみてください。これにはいくつかの外装と拡張機能が含まれています。 <code>skins/</code> ディレクトリからコピー&ペーストできます。\n:* Downloading individual skin tarballs from [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Using Git to download skins].\n: あなたがMediaWiki開発者の場合、これを行うことであなたのgitリポジトリに干渉することはありません。\n\n; MediaWiki をアップグレードした場合:\n: MediaWiki 1.24 以降のバージョンでは、インストール済みの外装は自動的には有効になりません。 ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery マニュアル:外装の自動探索] をご覧ください)。<code>LocalSettings.php</code> に以下の{{PLURAL:$5|line|行}}をペーストして、現在インストールされている{{PLURAL:$5|skin|外装}}を有効にできます。\n\n<pre dir=\"ltr\">$3</pre>\n\n; <code>LocalSettings.php</code>を編集したばかりの場合:\n: 外装名に打ち間違いがないか再度確認してください。",
        "default-skin-not-found-no-skins": "<code>$1</code>で定義されている、あなたのウィキの既定の外装 (<code>$wgDefaultSkin</code>)は利用できません。\n\n外装をインストールしていません。\n\n; MediaWikiをインストールしたばかりか更新したばかりの場合:\n: gitからインストールしたか、その他の何らかの方法でソースコードから直接インストールした場合には、これは期待されたとおりの動作です。MediaWikiの1.24およびそれ以降は、メインのリポジトリ内には任意の外装が含まれていません。[https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory] から外装をインストールしてみてください。, by:\n:* 個々の外装 tarballs を[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] ダウンロードすること。\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Using Git to download skins].\n: あなたがMediaWiki開発者の場合、これを行うことであなたのgitリポジトリに干渉することはありません。外装の有効化と既定の選択についての情報は、[https://www.mediawiki.org/wiki/Manual:Skin_configuration マニュアル:外装設定] をご覧ください。",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (有効)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''無効''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>無効</strong>)",
        "mediastatistics": "メディア統計",
        "mediastatistics-summary": "アップロードされたファイルの種類に関する統計です。これはファイルの最新バージョンのみを含みます。以前のまたは削除されたバージョンについては除外されています。",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 バイト}} ($2; $3%)",
        "mw-widgets-titleinput-description-new-page": "ページは存在しません",
        "mw-widgets-titleinput-description-redirect": "$1 へのリダイレクト",
        "api-error-blacklisted": "他の、説明的なタイトルをお選びください。",
+       "sessionprovider-generic": "$1 セッション",
        "randomrootpage": "おまかせルートページ"
 }
index 8cab5c3..34bd816 100644 (file)
@@ -7,7 +7,8 @@
                        "គីមស៊្រុន",
                        "아라",
                        "Chabi1",
-                       "Katxis"
+                       "Katxis",
+                       "Macofe"
                ]
        },
        "tog-underline": "Lingk andalainin",
        "cascadeprotected": "Dis piej protek frahn edit, bikaa i'inkluud ina di falarin {{PLURAL:$1|piej, ush|piejdem, ush}} protek wid di \"kiaskiedn\" apshan ton aan:\n$2",
        "namespaceprotected": "Yu no gat no pomishan fi edit piej ina di '''$1''' niemspies.",
        "ns-specialprotected": "Peshal piejdem kyaahn edit.",
-       "titleprotected": "Dis taikl protek frahn krieshan bai [[User:$1|$1]].\nDi riizn dehn gi a \"''$2''\".",
+       "titleprotected": "Dis taikl protek frahn krieshan bai [[User:$1|$1]].\nDi riizn dehn gi a <em>$2</em>.",
        "virus-badscanner": "Bad kanfigarieshan: anuon vairos skiana: ''$1''",
        "virus-scanfailed": "skian fiel (kuod $1)",
        "virus-unknownscanner": "anuon antivairos:",
        "recentchanges-label-bot": "Dis edit pofaam bai bot",
        "recentchanges-label-unpatrolled": "Dis edit no get pachuol yet",
        "recentchanges-label-plusminus": "Di piej saiz chienj bai dis nomba a bait",
-       "recentchanges-legend-heading": "'''Lejen:'''",
+       "recentchanges-legend-heading": "<strong>Lejen:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (azwel si [[Special:NewPages|lis a nyuu piej]])",
        "rclistfrom": "Shuo nyuu chienjdem we taat frahn $3 $2",
        "rcshowhideminor": "$1 maina editdem",
index 37e963d..a8fd122 100644 (file)
@@ -8,7 +8,8 @@
                        "Ælsån",
                        "Midnight Gambler",
                        "아라",
-                       "Jyllanj"
+                       "Jyllanj",
+                       "Ghiutun"
                ]
        },
        "tog-underline": "Unjestreg henwisnenge:",
        "recentchanges-label-bot": "Denn redigiireng bløw utförtj å i robott",
        "recentchanges-label-unpatrolled": "Redigiireng ä ennu ett bløwen patruljiirtj.",
        "recentchanges-label-plusminus": "Störrelsen på siden bløw øndan mä detj åntal bytes",
-       "recentchanges-legend-heading": "'''Forklareng:'''",
+       "recentchanges-legend-heading": "<strong>Forklareng:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sie åsså [[Special:NewPages|listen öwe nyj side]])",
        "rcnotefrom": "Nierfor ä op te '''$1''' {{PLURAL:$5|øndreng|øndrenge}} sien '''$2''' wisen.",
        "rclistfrom": "Wis nyj øndrenge startenje fra $3 kl. $2",
        "unwatch": "Fjän öwewågneng",
        "watchlist-details": "Du har $1 {{PLURAL:$1|side|sider}} på din åvervågnengsliste (øn diskusjesider).",
        "wlshowlast": "Ves de seneste $1 têmer $2 dåg",
-       "watchlistall2": "åle",
        "watching": "Tilfye öwewågneng...",
        "unwatching": "Fjäne öwewågneng...",
        "deletepage": "Slett siid",
        "thumbnail-more": "Forstör",
        "thumbnail_error": "Fejl we oprettels å thumbnail: $1",
        "importlogpage": "Importlogg",
-       "tooltip-pt-userpage": "Din brugesiid",
-       "tooltip-pt-mytalk": "Din diskusjonssiid",
-       "tooltip-pt-preferences": "Din instellenge",
+       "tooltip-pt-userpage": "{{GENDER:|Din brugesiid}}",
+       "tooltip-pt-mytalk": "{{GENDER:|Din}} diskusjonssiid",
+       "tooltip-pt-preferences": "{{GENDER:|Din}} instellenge",
        "tooltip-pt-watchlist": "Listen öwe side som du öwewåge for øndrenge",
-       "tooltip-pt-mycontris": "List öwe din bidraw",
+       "tooltip-pt-mycontris": "List öwe {{GENDER:|din}} bidraw",
        "tooltip-pt-login": "Du opfordas te å logg på, men dä ä ett obligatorisk.",
        "tooltip-pt-logout": "Logg å",
        "tooltip-pt-createaccount": "Du opfordas te å oprett e konto å logg på, men dä ä ett obligatorisk",
        "tooltip-t-whatlinkshere": "En list mä åll side som henwise hertil",
        "tooltip-t-recentchangeslinked": "Siensti øndrenge i side som denn siid henwise til",
        "tooltip-feed-atom": "Atom-feed for siden",
-       "tooltip-t-contributions": "Sie bidrawen te brugari",
+       "tooltip-t-contributions": "List öwe bidrawen te {{GENDER:$1|brugari}}",
        "tooltip-t-emailuser": "Senj i e-mail te brugari",
        "tooltip-t-upload": "Lägg e bilj elle i ånj mediafil op",
        "tooltip-t-specialpages": "List öwe åll specialside",
index f5afec6..8a4924e 100644 (file)
        "myprivateinfoprotected": "Sampèyan ora duwé idin kanggo ngowah informasi privat sampèyan.",
        "mypreferencesprotected": "Sampèyan ora duwé idin kanggo ngowah preferensi sampèyan.",
        "ns-specialprotected": "Kaca ing bilik nama astaméwa utawa kusus, ora bisa disunting.",
-       "titleprotected": "Irah-irahan iki direksa ora olèh digawé déning [[User:$1|$1]].\nAlesané yaiku ''$2''.",
+       "titleprotected": "Irah-irahan iki direksa ora olèh digawé déning [[User:$1|$1]].\nAlesané yaiku <em>$2</em>.",
        "filereadonlyerror": "Ora bisa ngowah berkas \"$1\" amarga panyimpenan berkas \"$2\" ana ing mode mung-bisa-diwaca.\n\nPangurus sing ngopèni kuwi ngawedharaké: \"$3\".",
        "invalidtitle-knownnamespace": "Irah-irahan ora sah mawa bilik jeneng \"$2\" lan tèks \"$3\"",
        "invalidtitle-unknownnamespace": "Judhul ora sah mawa angka $1 lan tèks \"$2\" bilik jeneng sing ora dingertèni",
        "passwordreset-emailtext-ip": "Ana uwong (mbok menawa Sampéyan, mawa angka IP $1) njaluk ganti tembung sandhiné Sampéyan ana ing {{SITENAME}} ($4). {{PLURAL:$3|Rèkèning|Rèkèning-rèkèning}} ngisor iki magepokan karo padunungané layang èlèktronik iki:\n\n$2\n\n{{PLURAL:$3|Tembung sandhi sawetara iki}} bakal kedaluwarsa ing {{PLURAL:$5|sak dina|$5 dina}}.\nSampéyan kudu mlebu log lan milih siji tembung sandhi anyar saiki. Yèn wong liya sing njaluk iki, utawa yèn Sampéyan jebul wis kèlingan tembung sandhiné sing lawas saéngga ora ana niyat kanggo ngganti, Sampéyan bisa ngejaraké wara-wara iki lan bacutaké nganggo tembung sandhiné lawas Sampéyan.",
        "passwordreset-emailtext-user": "Panganggo $1 seka {{SITENAME}} njaluk ganti tembung sandhiné Sampéyan ana ing {{SITENAME}} ($4). {{PLURAL:$3|Rèkèning|Rèkèning-rèkèning}} ngisor iki magepokan karo padunungané layang èlèktronik iki:\n\n$2\n\n{{PLURAL:$3|Tembung sandhi sawetara iki}} bakal kedaluwarsa ing {{PLURAL:$5|sak dina|$5 dina}}.\nSampéyan kudu mlebu log lan milih siji tembung sandhi anyar saiki. Yèn wong liya sing njaluk iki, utawa yèn Sampéyan jebul wis kèlingan tembung sandhiné sing lawas saéngga ora ana niyat kanggo ngganti, Sampéyan bisa ngejaraké wara-wara iki lan bacutaké nganggo tembung sandhiné lawas Sampéyan.",
        "passwordreset-emailelement": "Jeneng panganggo: \n$1\n\nTembung sandhi sawetara: \n$2",
-       "passwordreset-emailsent": "Layang èlèktronik kanggo mbalèkaké tembung sandhi wis dikirim.",
+       "passwordreset-emailsentemail": "Layang èlèktronik kanggo mbalèkaké tembung sandhi wis dikirim.",
        "passwordreset-emailsent-capture": "Layang èlèktronik kanggo mbalèkaké tembung sandhi wis dikirim, bisa didelok ngisor iki.",
        "passwordreset-emailerror-capture": "Layang èlèktronik pangèling tembung sandhi wis digawe, yaiku sing ditampilaké nèng ngisor iki, nanging ora kasil dikirim ing {{GENDER:$2|panganggo}}: $1",
        "changeemail": "Ganti alamat layang èlèktronik",
        "undo-summary-username-hidden": "Batalna revisi $1 saking panganggo kang didhelikake",
        "cantcreateaccounttitle": "Akun ora bisa digawé",
        "cantcreateaccount-text": "Saka alamat IP iki ('''$1''') ora diparengaké nggawé akun utawa rékening. Sing mblokir utawa ora marengaké iku [[User:$3|$3]].\n\nAlesané miturut $3 yaiku ''$2''",
-       "cantcreateaccount-range-text": "Nggawe akun saking alamat IP \"$1\", sing termasuk IP sampeyan ('''$4'''), sampun diblokir kaliyan [[User:$3|$3]].\n\nAlesan pamblokiran yaiku \"$2\"",
+       "cantcreateaccount-range-text": "Nggawe akun saking alamat IP \"$1\", sing termasuk IP sampeyan (<strong>$4</strong>), sampun diblokir kaliyan [[User:$3|$3]].\n\nAlesan pamblokiran yaiku \"$2\"",
        "viewpagelogs": "Mirsani log kaca iki",
        "nohistory": "Ora ana sajarah panyuntingan kanggo kaca iki",
        "currentrev": "Revisi saiki",
        "prefs-diffs": "Prabédan",
        "prefs-help-prefershttps": "Preferensi niki bakal diaktifne yen sampeyan mlebet log sabanjure.",
        "prefs-tabs-navigation-hint": "Tip: Sampeyan isa nganggo dapat menggunakan tombol panah kiwa lan tengen kanggo navigasi tab-tab ing daftar tab.",
-       "email-address-validity-valid": "Alamat layang èlèktronik kayané sah",
-       "email-address-validity-invalid": "Lebokaké alamat layang èlèktronik sing sah",
        "userrights": "Manajemen hak panganggo",
        "userrights-lookup-user": "Ngatur kelompok panganggo",
        "userrights-user-editname": "Lebokna jeneng panganggo:",
        "right-blockemail": "Blokir sawijining panganggo saka ngirim e-mail",
        "right-hideuser": "Blokir jeneng panganggo, lan delikna saka umum",
        "right-ipblock-exempt": "Bypass pamblokiran IP, pamblokiran otomatis lan pamblokiran rangkéan",
-       "right-proxyunbannable": "Bypass pamblokiran otomatis proxy-proxy",
        "right-unblockself": "Bukak blokirané dhéwéké",
        "right-protect": "Ganti undhaking pangreksan lan owah kaca-kaca sing direksa",
        "right-editprotected": "Owah kaca-kaca sing direksa (tanpa pangreksan runtun)",
        "recentchanges-label-bot": "Suntingan iki diayahi déning bot",
        "recentchanges-label-unpatrolled": "Suntingan iki durung dipatroli",
        "recentchanges-label-plusminus": "Agengipun kaca sampun dipunowahi samekaten.",
-       "recentchanges-legend-heading": "'''Katrangan:'''",
+       "recentchanges-legend-heading": "<strong>Katrangan:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (dhelengen uga: [[Special:NewPages|daftar kaca anyar]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Ing ngisor iki owah-owahan wiwit <strong>$2</strong> (kapacak nganti <strong>$1</strong> owah-owahan).",
        "watchthisupload": "Awasana berkas iki",
        "filewasdeleted": "Sawijining berkas mawa jeneng iki wis tau diunggahaké lan sawisé dibusak.\nMangga priksanen $1 sadurungé ngunggahaké berkas iku manèh.",
        "filename-bad-prefix": "Jeneng berkas sing panjenengan unggahaké, diawali mawa '''\"$1\"''', sing sawijining jeneng non-dèskriptif sing biasané diwènèhaké sacara otomatis déning kamera digital. Mangga milih jeneng liyané sing luwih dèskriptif kanggo berkas panjenengan.",
-       "upload-success-subj": "Kasil diamot",
-       "upload-success-msg": "Unggahan Sampéyan saka [$2] sukses. Kuwi sumadhiya nèng kéné: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Perkara pangunggahan",
-       "upload-failure-msg": "Ana prakara karo pangunggahan panjenengan seka [$2]:\n$1",
-       "upload-warning-subj": "Pèngetan pangunggahan berkas",
-       "upload-warning-msg": "Ana masalah ing pangunggahan panjenengan saka [$2]. Panjenengan bisa bali menyang [[Special:Upload/stash/$1|upload form]] kanggo mrantasi masalah iki",
        "upload-proto-error": "Protokol ora bener",
        "upload-proto-error-text": "Pangunggahan jarah adoh mbutuhaké URL sing diawali karo <code>http://</code> utawa <code>ftp://</code>.",
        "upload-file-error": "Kaluputan internal",
        "pager-older-n": "{{PLURAL:$1|1 luwih lawas|$1 luwih lawas}}",
        "suppress": "Pangawas (''oversight'')",
        "querypage-disabled": "Kaca kusus iki dipatèni kanggo alesan kinerja.",
+       "apisandbox": "Kothak wedhi API",
+       "apisandbox-api-disabled": "API dipatèni nèng situs iki.",
+       "apisandbox-intro": "Anggo kaca iki kanggo njajal-njajal '''API layanan wèb MediaWiki'''.\nRujuk [//www.mediawiki.org/wiki/API:Main_page the dhokumèntasi API] kanggo panganggoan API luwih rinci. Conto: [//www.mediawiki.org/wiki/API#A_simple_example ngéntukaké kontèn Kaca Utama]. Pilih laku kanggo ndelok conto luwih akèh.",
+       "apisandbox-submit": "Gawé panjalukan",
+       "apisandbox-reset": "Resiki",
+       "apisandbox-examples": "Conto",
+       "apisandbox-results": "Asil",
+       "apisandbox-request-url-label": "URL dikarepaké:",
+       "apisandbox-request-time": "Suwéné panjalukan: $1",
        "booksources": "Sumber buku",
        "booksources-search-legend": "Golèk ing sumber buku",
        "booksources-text": "Ing ngisor iki kapacak daftar pranala menyang situs liyané sing ngadol buku anyar lan bekas, lan mbok-menawa uga ndarbèni informasi sabanjuré ngenani buku-buku sing lagi panjenengan golèki:",
        "rollbackfailed": "Pambalèkan gagal dilakoni",
        "cantrollback": "Ora bisa mbalèkaké suntingan; panganggo pungkasan iku siji-sijiné penulis artikel iki.",
        "alreadyrolled": "Ora bisa mbalèkaké suntingan pungkasan [[:$1]] déning [[User:$2|$2]] ([[User talk:$2|Wicara]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); wong liya wis nyunting utawa mbalèkaké kaca artikel iku.\n\nSuntingan pungkasan dilakoni déning [[User:$3|$3]] ([[User talk:$3|Wicara]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Ringkesan suntingan yaiku: \"''$1''\".",
+       "editcomment": "Ringkesan suntingan yaiku: <em>$1</em>.",
        "revertpage": "Suntingan [[Special:Contributions/$2|$2]] ([[User talk:$2|dhiskusi]]) dipunwangsulaken dhateng ing vèrsi pungkasan déning [[User:$1|$1]]",
        "revertpage-nouser": "Suntingan déning panganggo sing didhelikake, dibalèkaké nèng benahan pungkasan déning [[User:$1|$1]]",
        "rollback-success": "Suntingan dibalèkaké déning $1;\ndiowahi bali menyang vèrsi pungkasan déning $2.",
        "movenosubpage": "Kaca iki ora duwé anak-kaca.",
        "movereason": "Alesan:",
        "revertmove": "balèkaké",
-       "delete_and_move": "busak lan kapindahaken",
        "delete_and_move_text": "== Perlu mbusak ==\n\nArtikel sing dituju, \"[[:$1]]\", wis ana isiné.\nApa panjenengan kersa mbusak iku supaya kacané bisa dialihaké?",
        "delete_and_move_confirm": "Ya, busak kaca iku.",
        "delete_and_move_reason": "Dibusak kanggo jaga-jaga ananing pamindhahan saka \"[[$1]]\"",
        "special-characters-group-thai": "Thailand",
        "special-characters-group-lao": "Lao",
        "special-characters-group-khmer": "Khmer",
-       "api-error-blacklisted": "Mangga pilih judhul liya sing njelasaké"
+       "api-error-blacklisted": "Mangga pilih judhul liya sing njelasaké",
+       "randomrootpage": "Kaca root waton"
 }
index ed01bc7..234103c 100644 (file)
@@ -25,7 +25,8 @@
                        "Macofe",
                        "SHOTHA",
                        "Gi777ga",
-                       "Matma Rex"
+                       "Matma Rex",
+                       "Sopopruidze"
                ]
        },
        "tog-underline": "ბმულების ხაზგასმა:",
        "myprivateinfoprotected": "თქვენ არ გაქვთ თქვენი პირადი ინფორმაციის შეცვლის ნებართვა.",
        "mypreferencesprotected": "თქვენ არ გაქვთ თქვენი კონფიგურაციის შეცვლის ნებართვა.",
        "ns-specialprotected": "გვერდების რედაქტირება სახელთა სივრცეში {{ns:special}} შეუძლებელია.",
-       "titleprotected": "á\83¨á\83\94á\83\9bá\83\93á\83\94á\83\92á\83\98 á\83\92á\83\95á\83\94á\83 á\83\93á\83\98á\83¡ á\83¨á\83\94á\83¥á\83\9bá\83\9cá\83\90 á\83\90á\83\99á\83 á\83«á\83\90á\83\9aá\83£á\83\9aá\83\98á\83\90 á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\94á\83\9a [[User:$1|$1]]-á\83¡ á\83\9bá\83\98á\83\94á\83 .\ná\83\9bá\83\9dá\83ªá\83\94á\83\9bá\83£á\83\9aá\83\98á\83\90 á\83¨á\83\94á\83\9bá\83\93á\83\94á\83\92á\83\98 á\83\90á\83®á\83¡á\83\9cá\83\90: â\80\9e''$2''â\80\9c.",
+       "titleprotected": "á\83¨á\83\94á\83\9bá\83\93á\83\94á\83\92á\83\98 á\83¡á\83\90á\83\97á\83\90á\83£á\83 á\83\98á\83¡ á\83¨á\83\94á\83¥á\83\9bá\83\9cá\83\90 á\83\90á\83\99á\83 á\83«á\83\90á\83\9aá\83£á\83\9aá\83\98á\83\90 á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\94á\83\9a [[User:$1|$1]]-á\83\98á\83¡ á\83\9bá\83\98á\83\94á\83 .\ná\83\9bá\83\9dá\83ªá\83\94á\83\9bá\83£á\83\9aá\83\98á\83\90 á\83¨á\83\94á\83\9bá\83\93á\83\94á\83\92á\83\98 á\83\90á\83®á\83¡á\83\9cá\83\90: <em>$2</em>.",
        "filereadonlyerror": "ფაილის \"$1\" შეცვლა ვერ ხერხდება, რადგანაც ფაილის საცავი \"$2\" მხოლოდ კითხვის რეჟიმშია.\n\nსისტემურმა ადმინისტრატორმა, რომელმაც ის დაბლოკა, მოიყვანა შემდეგი მიზეზი: \"$3\".",
        "invalidtitle-knownnamespace": "დაუშვებელი სათაური სახელთა სივრცე \"$2\" და ტექსტი \"$3\"-თან",
        "invalidtitle-unknownnamespace": "დაუშვებელი სათაური უცნობი სახელთა სივრცის ნომერი $1 და ტექსტი \"$2\"-ით",
        "badretype": "თქვენს მიერ შეყვანილი პაროლები ერთმანეთს არ ემთხვევა.",
        "usernameinprogress": "ამ მომხმარებლისათვის ანგარიში იქმნება. გთხოვთ, დაიცადეთ.",
        "userexists": "ეს სახელი უკვე გამოყენებულია.\nგთხოვთ, აირჩიეთ სხვა.",
-       "loginerror": "á\83¨á\83\94á\83ªá\83\93á\83\9dá\83\9bá\83\90 á\83¨á\83\94á\83¡á\83\95á\83\9aá\83\90á\83¨á\83\98",
+       "loginerror": "á\83\90á\83\95á\83¢á\83\9dá\83 á\83\98á\83\96á\83\90á\83ªá\83\98á\83\98á\83¡ á\83¨á\83\94á\83ªá\83\93á\83\9dá\83\9bá\83\90",
        "createacct-error": "ანგარიშის შექმნის შეცდომა",
        "createaccounterror": "$1 ანგარიშის შექმნა ვერ მოხერხდა.",
        "nocookiesnew": "მომხმარებლის ჩანაწერი შექმნილია, მაგრამ თქვენ არ გაგივლიათ რეგისტრაცია. {{SITENAME}} იყენებს cookies, რომლებიც თქვენს ბრაუზერში გათიშულია. გთხოვთ, აამოქმედოთ ისინი და შემდგომ ხელახლა გაიარეთ რეგისტრაცია.",
        "nocookiesfornew": "მომხმარებლის ანგარიში არ შექმნილა, რადგან მისი წყარო ვერ დადასტურდა.\nუზრუნველყოფილი უნდა იყოს ჭდეების აქტიურობა. შემდეგ განაახლეთ გვერდი და სცადეთ ხელახლა",
        "nocookiesforlogin": "{{int:nocookieslogin}}",
        "noname": "თქვენს მიერ მითითებული მომხმარებლის სახელი ქმედითი არ არის.",
-       "loginsuccesstitle": "სისტემაში შესვლა განხორციელდა.",
+       "loginsuccesstitle": "სისტემაში შესვლა განხორციელდა",
        "loginsuccess": "'''ამჟამად შესული ხართ {{SITENAME}}-ში როგორც „$1“.'''",
        "nosuchuser": "მომხმარებელი სახელად $1 არ არსებობს.\nმომხმარებელთა სახელები გრძნობადია ასოების რეგისტრამდე..\nშეამოწმეთ სახელის დაწერა ან[[Special:UserLogin/signup|შექმენით ახალი ანგარიში]].",
        "nosuchusershort": "მომხმარებელი სახელით „$1“ არ არსებობს. შეამოწმეთ მართლწერა.",
        "createaccount-title": "ანგარიშის შექმნა {{SITENAME}}-თვის",
        "createaccount-text": "ვიღაცამ შექმნა ანგარიში სახელით „$2“ და პაროლით „$3“ თქვენი ელექტრონული ფოსტისთვის {{SITENAME}}-ში ($4). გთხოვთ დარეგისტრირდეთ და შეცვალოთ პაროლი.\n\nშეგიძლიათ ყურადღება არ მიაქციოთ ამ შეტყობინებას, თუ ანგარიში შეცდომით შეიქმნა.",
        "login-throttled": "You have made too many recent login attempts.\nPlease wait $1 before trying again.",
-       "login-abort-generic": "á\83\97á\83¥á\83\95á\83\94á\83\9cá\83\98 á\83\90á\83\95á\83¢á\83\9dá\83 á\83\98á\83\96á\83\90á\83ªá\83\98á\83\90 á\83¬á\83\90á\83 á\83£á\83\9bá\83\90á\83¢á\83\94á\83\91á\83\94á\83\9aá\83\98ა – გაუქმდა",
+       "login-abort-generic": "á\83\97á\83¥á\83\95á\83\94á\83\9cá\83\98 á\83\90á\83\95á\83¢á\83\9dá\83 á\83\98á\83\96á\83\90á\83ªá\83\98á\83\90 á\83\95á\83\94á\83  á\83\92á\83\90á\83\9cá\83®á\83\9dá\83 á\83ªá\83\98á\83\94á\83\9aá\83\93ა – გაუქმდა",
        "login-migrated-generic": "თქვენი ანგარიში გადატანილი იქნა, და თქვენი მომხმარებლის სახელი ამ ვიკიში აღარ არსებობს.",
        "loginlanguagelabel": "ენა: $1",
        "suspicious-userlogout": "თქვენი მოთხოვნა გასვლის შესახებ გაუქმებულია, რადგანაც იგი გავს ქეშირებადი პროქსის ან არაკორექტული ბრაუზერის მოთხოვნას.",
        "newpassword": "ახალი პაროლი:",
        "retypenew": "ახალი პაროლი განმეორებით:",
        "resetpass_submit": "მიუთითეთ პაროლი და დარეგისტრირდით",
-       "changepassword-success": "á\83\97á\83¥á\83\95á\83\94á\83\9cá\83\98 á\83\9eá\83\90á\83 á\83\9dá\83\9aá\83\98 á\83¬á\83\90á\83 á\83\9bá\83\90á\83¢á\83\94á\83\91á\83\98á\83\97 á\83¨á\83\94á\83\98á\83ªá\83\95á\83\90á\83\9aá\83\90!",
+       "changepassword-success": "თქვენი პაროლი შეიცვალა!",
        "changepassword-throttled": "თქვენ განახორციელეთ ანგარიშში შესვლის ზედმეტად ბევრი მცდელობა. გამორებით შეყვანამდე გთხოვთ დაიცადოთ $1.",
        "botpasswords": "ბოტის პაროლები",
        "botpasswords-summary": "<em>ბოტების კოდები</em> საშუალებას იძლევა მომხმარებლის ანგარიშთან დაკავშირების API-ის გამოყენებით ანგარიშის ძირითადი შესვლის მონაცემების გამოყენების გარეშე. მომხმარებლის უფლებები ასეთი შესვლისას შესაძლოა შეზღუდული იყოს.\n\nთუ არ იცით ეს რატომ უნდა გააკეთოთ, ალბათ არც უნდა გააკეთოთ. ასეთი კოდის წამოქმნა და სხვისთვის გადაცემა არაა რეკომენდირებული.",
        "botpasswords-insert-failed": "ბოტის სახელის $1\" დამატება შეუძლებელია. უკვე დამატებულია?",
        "botpasswords-update-failed": "ბოტის სახელის \"$1\" განახლება შეუძლებელია. წაშლილია?",
        "botpasswords-created-title": "ბოტის პაროლი შექმნილია",
-       "botpasswords-created-body": "ბოტის პაროლი \"$1\" წარმატებით შეიქმნა.",
+       "botpasswords-created-body": "ბოტის პაროლი მომხმარებელ \"$2\"-ის \"$1\" სახელისთვის შეიქმნა.",
        "botpasswords-updated-title": "ბოტის პაროლი განახლდა",
-       "botpasswords-updated-body": "ბოტის პაროლი \"$1\" წარმატებით განახლდა.",
+       "botpasswords-updated-body": "ბოტის პაროლი \"$2\" მომხმარებლის \"$1\"-ის სახელისთვის განახლდა.",
        "botpasswords-deleted-title": "ბოტის პაროლი წაშლილია",
-       "botpasswords-deleted-body": "ბოტის პაროლი \"$1\" წაიშალა.",
+       "botpasswords-deleted-body": "ბოტის პაროლი \"$2\" მომხმარებლის \"$1\"-ის სახელისთვის წაიშალა.",
        "botpasswords-newpassword": "ახალი პაროლი <strong>$1</strong>-ით შესასვლელად არის <strong>$2</strong>. <em>გთხოვთ დაიმახსოვრეთ ან ჩაიწერეთ.</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider არ არის ხელმისაწვდომი.",
        "botpasswords-restriction-failed": "ბოტის პაროლის შეზღუდვები არ უშვებს ამ ავტორიზაციას.",
        "resetpass-no-info": "კონკრეტულად ამ გვერდთან სამუშაოდ თქვენ უნდა წარადგინოთ თავი სისტემისადმი.",
        "resetpass-submit-loggedin": "პაროლის შეცვლა",
        "resetpass-submit-cancel": "გაუქმება",
-       "resetpass-wrong-oldpass": "á\83\90á\83 á\83\90á\83¡á\83¬á\83\9dá\83 á\83\98 á\83\93á\83 á\83\9dá\83\94á\83\91á\83\98á\83\97á\83\98 á\83\90á\83\9c á\83\9bá\83\9dá\83¥á\83\9bá\83\94á\83\93á\83\98 á\83\9eá\83\90á\83 á\83\9dá\83\9aá\83\98.\ná\83¨á\83\94á\83¡á\83\90á\83«á\83\9aá\83\9dá\83\90 á\83\97á\83¥á\83\95á\83\94á\83\9c á\83¬á\83\90á\83 á\83\9bá\83\90á\83¢á\83\94á\83\91á\83\98á\83\97 á\83¨á\83\94á\83ªá\83\95á\83\90á\83\9aá\83\94á\83\97 á\83\9eá\83\90á\83 á\83\9dá\83\9aá\83\98 á\83\90á\83\9c á\83\9bá\83\9dá\83\98á\83\97á\83®á\83\9dá\83\95á\83\94á\83\97 á\83\90á\83®á\83\90ლი.",
+       "resetpass-wrong-oldpass": "á\83\90á\83 á\83\90á\83¡á\83¬á\83\9dá\83 á\83\98 á\83\93á\83 á\83\9dá\83\94á\83\91á\83\98á\83\97á\83\98 á\83\90á\83\9c á\83\9bá\83\9dá\83¥á\83\9bá\83\94á\83\93á\83\98 á\83\9eá\83\90á\83 á\83\9dá\83\9aá\83\98.\ná\83¨á\83\94á\83¡á\83\90á\83«á\83\9aá\83\9dá\83\90 á\83\97á\83¥á\83\95á\83\94á\83\9c á\83£á\83\99á\83\95á\83\94 á\83¨á\83\94á\83ªá\83\95á\83\90á\83\9aá\83\94á\83\97 á\83\9eá\83\90á\83 á\83\9dá\83\9aá\83\98 á\83\90á\83\9c á\83\9bá\83\9dá\83\98á\83\97á\83®á\83\9dá\83\95á\83\94á\83\97 á\83\90á\83®á\83\90á\83\9aá\83\98 á\83\93á\83 á\83\9dá\83\94á\83\91á\83\98á\83\97á\83\98 á\83\9eá\83\90á\83 á\83\9dლი.",
        "resetpass-recycled": "გთხოვთ, შეცვალეთ პაროლი იმაზე, რომელიც განსხვავდება თქვენი მიმდინარე პაროლისაგან.",
        "resetpass-temp-emailed": "თქვენ წარდგენილი ხართ დროებითი პაროლის დახმარებით, რომელიც მიღებულია ელექტრონული ფოსტით. სისტემაში შესვლის დასრულებისთვის, აუცილებელია ახალი პაროლის წარდგენა:",
        "resetpass-temp-password": "დროებითი პაროლი:",
        "undo-summary-username-hidden": "ცვლილების გაუქმება $1, მომხმარებლის მიერ, რომლის სახელი დამალულია",
        "cantcreateaccounttitle": "ანგარიშის შექმნა ვერ ხერხდება",
        "cantcreateaccount-text": "ამ IP-მისამართიდან აიკრძალა (<b>$1</b>) მომხმარებელ [[User:$3|$3]]-ის მიერ.\n\n$3 -ემ ამგვარი ახსნა : ''$2''",
-       "cantcreateaccount-range-text": "{{GENDER:$3|მომხმარებელმა}} [[User:$3|$3]] ანგარიშის ან IP-მისამართის $1 შექმნისთვის {{GENDER:$3|დაადო}} აკრძალვა '''$1''', თქვენი IP-მისამართის ჩათვლით ($4).\n\nმითითებულია შემდეგი მიზეზი: $2.",
+       "cantcreateaccount-range-text": "{{GENDER:$3|მომხმარებელმა}} [[User:$3|$3]] ანგარიშის ან IP-მისამართის $1 შექმნისთვის {{GENDER:$3|დაადო}} აკრძალვა <strong>$1</strong>, თქვენი IP-მისამართის ჩათვლით ($4).\n\nმითითებულია შემდეგი მიზეზი: $2.",
        "viewpagelogs": "ამ გვერდისთვის სარეგისტრაციო ჟურნალების ჩვენება",
        "nohistory": "ამ გვერდს განხილვის გვერდი ცარიელი აქვს.",
        "currentrev": "მიმდინარე შესწორება",
        "revdelete-unsuppress": "მოხსენით შეზღუდვა ვერსიების აღდგენისგან",
        "revdelete-log": "მიზეზი:",
        "revdelete-submit": "{{PLURAL:$1|არჩეული ვერსიის|არჩეული ვერსიების}} განხორციელება",
-       "revdelete-success": "'''ვერსიის ხილვადობა შეიცვალა.'''",
+       "revdelete-success": "გადახედვის ხილვადობა განახლებულია.",
        "revdelete-failure": "'''ვერსიის ხილვადობა არ შეიძლება დაყენებული იქნას:'''\n$1",
-       "logdelete-success": "á\83\9bá\83\9dá\83\95á\83\9aá\83\94á\83\9cá\83\98á\83¡ á\83®á\83\98á\83\9aá\83\95á\83\90á\83\93á\83\9dá\83\91á\83\90 á\83¬á\83\90á\83 á\83\9bá\83\90á\83¢á\83\94á\83\91á\83\98á\83\97 á\83¨á\83\94á\83\98á\83ªá\83\95á\83\90á\83\9aá\83\90.",
+       "logdelete-success": "á\83\9bá\83\9dá\83\95á\83\9aá\83\94á\83\9cá\83\98á\83¡ á\83®á\83\98á\83\9aá\83\95á\83\90á\83\93á\83\9dá\83\91á\83\98á\83¡ á\83®á\83\94á\83\9aá\83¡á\83\90á\83¬á\83§á\83\9d.",
        "logdelete-failure": "'''ჟურნალის ხილვადობა არ არის დაყენებული:'''\n$1",
        "revdel-restore": "ხილვადობის შეცვლა",
        "pagehist": "გვერდის ისტორია",
        "userrights-unchangeable-col": "ჯგუფები, რომლებიც არ შეგიძლიათ შეცვალოთ",
        "userrights-irreversible-marker": "$1*",
        "userrights-conflict": "მომხმარებელთა უფლებების კონფლიქტი! გთხოვთ ხელმეორედ შეინახოთ თქვენი ცვლილებები.",
-       "userrights-removed-self": "á\83\97á\83¥á\83\95á\83\94á\83\9c á\83¬á\83\90á\83 á\83\9bá\83\90á\83¢á\83\94á\83\91á\83\98á\83\97 á\83¬á\83\90á\83¨á\83\90á\83\9aá\83\94á\83\97 á\83¡á\83\90á\83\99á\83£á\83\97á\83\90á\83 á\83\98 á\83£á\83¤á\83\9aá\83\94á\83\91á\83\90. á\83¨á\83\94á\83¡á\83\90á\83\91á\83\90á\83\9bá\83\98á\83¡á\83\90á\83\93, á\83\97á\83¥á\83\95á\83\94á\83\9c á\83\90á\83¦á\83\90á\83  á\83\92á\83\94á\83¥á\83\9cá\83\94á\83\91á\83\90á\83\97 á\83\90á\83\9b á\83\92á\83\95á\83\94á\83 á\83\93á\83\97á\83\90á\83\9c á\83¬á\83\95á\83\93á\83\9dá\83\9bá\83\98á\83¡ á\83¡á\83\90á\83¨á\83£á\83\90á\83\9aá\83\94á\83\91á\83\90",
+       "userrights-removed-self": "თქვენ წაშალეთ საკუთარი უფლება. შესაბამისად, თქვენ აღარ გექნებათ ამ გვერდთან წვდომის საშუალება",
        "group": "ჯგუფი:",
        "group-user": "მომხმარებლები",
        "group-autoconfirmed": "ავტომატურად დადასტურებული მომხმარებლები",
        "recentchanges-label-bot": "ეს არის ბოტის რედაქტირება",
        "recentchanges-label-unpatrolled": "ეს რედაქტირება გადაუმოწმებელია",
        "recentchanges-label-plusminus": "ცვლილებების ზომა ბაიტებში",
-       "recentchanges-legend-heading": "'''ლეგენდა:'''",
+       "recentchanges-legend-heading": "<strong>ლეგენდა:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (იხ. აგრეთვე [[Special:NewPages|ახალი გვერდების სია]])",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "ჩვენება",
        "recentchangeslinked-page": "გვერდის დასახელება:",
        "recentchangeslinked-to": "საპირისპიროდ აჩვენეთ ამ გვერდზე ბმულის მქონე გვერდების ცვლილებები",
        "recentchanges-page-added-to-category": "[[:$1]] დამატებულია კატეგორიაში",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] და {{PLURAL:$2|ერთი გვერდი|$2 გვერდი}} დამატებულია კატეგორიაში",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] და [[Special:WhatLinksHere/$1|{{PLURAL:$2|ერთი გვერდი|$2 გვერდი}}]] დამატებულია კატეგორიაში",
        "recentchanges-page-removed-from-category": "[[:$1]] წაიშალა კატეგორიიდან",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] და {{PLURAL:$2|ერთი გვერდი|$2 გვერდი}} წაიშალა კატეგორიიდან",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] და [[Special:WhatLinksHere/$1|{{PLURAL:$2|ერთი გვერდი|$2 გვერდი}}]] წაიშალა კატეგორიიდან",
        "autochange-username": "მედიავიკის ავტომატური ცვლილება",
        "upload": "ფაილის დამატება",
        "uploadbtn": "ფაილის დამატება",
        "backend-fail-read": "ფაილი $1-ის წაკითხვა ვერ მოხერხდა.",
        "backend-fail-create": "ფაილი $1-ის ჩაწერა ვერ მოხერხდა.",
        "backend-fail-maxsize": "ფაილი $1-ის ჩაწერა ვერ მოხერხდა, რადგანაც მისი ზომა აჭარბებს {{PLURAL:$2|ერთ ბაიტს|$2 ბაიტს}}.",
-       "backend-fail-readonly": "საცავი \"$1\" ამჟამად ხელმისაწვდომია მხოლოდ წაკითხვის რეჟიმში. მიზეზი: \"$2\"",
+       "backend-fail-readonly": "საცავი \"$1\" ამჟამად ხელმისაწვდომია მხოლოდ წაკითხვის რეჟიმში. მიზეზი: <em>$2</em>",
        "backend-fail-synced": "ფაილი \"$1\" იმყოფება შიდა საცავის შეუთანხმებელ მდგომარეობაში",
        "backend-fail-connect": "\"$1\" საცავთან დაკავშირება ვერ მოხერხდა.",
        "backend-fail-internal": "\"$1\" საცავში მოხდა დაუდგენელი შეცდომა.",
        "uploadstash-summary": "ამ გვერდზე შესაძლებელია იმ ფაილთა მოძიება, რომლებიც უკვე აიტვირთნენ ან ახლა იტვირთებინ, მაგრამ ჯერ ვიკიში არ გამოქვეყნებულან. ეს ფაილები, გარდა ამტვირთავი მომხმარებლისა, ჯერ საჯაროდ არავის უნახავს.",
        "uploadstash-clear": "დაფარული ფაილების გასუფთავება",
        "uploadstash-nofiles": "თქვენ არ გაქვთ დაფარული ფაილები.",
-       "uploadstash-badtoken": "á\83\9bá\83\98á\83\97á\83\98á\83\97á\83\94á\83\91á\83£á\83\9aá\83\98 á\83\9bá\83\9dá\83¥á\83\9bá\83\94á\83\93á\83\94á\83\91á\83\90 á\83\95á\83\94á\83  á\83¨á\83\94á\83¡á\83 á\83£á\83\9aá\83\93á\83\90. á\83¨á\83\94á\83¡á\83\90á\83«á\83\9aá\83\9dá\83\90, á\83\97á\83¥á\83\95á\83\94á\83\9cá\83\98 á\83£á\83¡á\83\90á\83¤á\83 á\83\97á\83®á\83\9dá\83\94á\83\91á\83\98á\83¡ á\83\9bá\83\90á\83\9cá\83\93á\83\90á\83¢á\83\98á\83¡ á\83\9bá\83\9dá\83¥á\83\9bá\83\94á\83\93á\83\94á\83\91á\83\98á\83¡ á\83\95á\83\90á\83\93á\83\90 á\83\90á\83\9bá\83\9dá\83\98á\83¬á\83£á\83 á\83\90. á\83\99á\83\98á\83\93á\83\94á\83\95 á\83¡á\83ªá\83\90á\83\93á\83\94á\83\97.",
+       "uploadstash-badtoken": "á\83\9bá\83\98á\83\97á\83\98á\83\97á\83\94á\83\91á\83£á\83\9aá\83\98 á\83\9bá\83\9dá\83¥á\83\9bá\83\94á\83\93á\83\94á\83\91á\83\90 á\83\95á\83\94á\83  á\83¨á\83\94á\83¡á\83 á\83£á\83\9aá\83\93á\83\90. á\83¨á\83\94á\83¡á\83\90á\83«á\83\9aá\83\9dá\83\90, á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\98á\83 á\83\94á\83\91á\83\98á\83¡ á\83£á\83¤á\83\9aá\83\94á\83\91á\83\90á\83\9bá\83\9dá\83¡á\83\98á\83\9aá\83\94á\83\91á\83\98á\83¡ á\83\9bá\83\9dá\83¥á\83\9bá\83\94á\83\93á\83\94á\83\91á\83\98á\83¡ á\83\95á\83\90á\83\93á\83\90 á\83\90á\83\9bá\83\9dá\83\98á\83¬á\83£á\83 á\83\90. á\83\92á\83\97á\83®á\83\9dá\83\95á\83\97, á\83¡á\83ªá\83\90á\83\93á\83\94á\83\97 á\83\97á\83\90á\83\95á\83\98á\83\93á\83\90á\83\9c.",
        "uploadstash-errclear": "ფაილების გასუფთავება ვერ მოხერხდა.",
        "uploadstash-refresh": "ფაილების სიის განახლება",
        "invalid-chunk-offset": "არასწორი საწყისი წერტილი",
        "delete-toobig": "ამ გვერდს ძალიან გრძელი ისტორია გააჩნია,  $1 {{PLURAL:$1|ვერსიაზე|ვერსიიებზე|ვერსიებზე}} მეტი. მისი წაშლა აიკრძალა {{SITENAME}}-ის კორექტურად მუშაობის უზრუნველყოფისთვის.",
        "delete-warning-toobig": "ამ გვერდს ძალიან გრძელი ისტორია გააჩნია,  $1 {{PLURAL:$1|ვერსიაზე|ვერსიიებზე|ვერსიებზე}} მეტი.\nმისმა წაშლამ შესაძლოა გამოიწვიოს საიტის მონაცემთა ბაზის  {{SITENAME}} არაკორექტული მუშაობა;\nიმოქმედეთ სიფრთხილით.",
        "deleteprotected": "თქვენ არ შეგიძლიათ ამ გვერდის წაშლა, რადგან ის დაცულია.",
-       "deleting-backlinks-warning": "'''გაფრთხილება:'''  [[Special:WhatLinksHere/{{FULLPAGENAME}}|სხვა გვერდები]] დაკავშირებულია ამ წასაშლელ გვერდთან.",
+       "deleting-backlinks-warning": "<strong>გაფრთხილება:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|სხვა გვერდები]] დაკავშირებულია ამ წასაშლელ გვერდთან.",
        "rollback": "ცვლილებების გაუქმება",
        "rollbacklink": "სწრაფი გაუქმება",
        "rollbacklinkcount": "$1 {{PLURAL:$1|ცვლილების|ცვლილების}} გაუქმება",
        "rollbackfailed": "შეცდომა გაუქმებისას",
        "cantrollback": "შეუძლებელია უწინდელი რედაქციის აღდგენა; ის, ვინც უკანასკნელი ცვლილებები შეიტანა, ამ სტატიის ერთადერთი ავტორია.",
        "alreadyrolled": "შეუძლებელია ბოლო ცვლილების გაუქმება [[:$1]], გაკეებული [[User:$2|$2]] ([[User talk:$2|განხილვა]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nვიღაცა სხვამ უკვე შეასწორა ან გაააუქმა ეს გვერდი.\n\nბოლო ცვლილებები შეიტანა  [[User:$3|$3]] ([[User talk:$3|განხილვა]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "რედაქტირება განმარტებული იყო როგორც: \"''$1''\".",
+       "editcomment": "რედაქტირება განმარტებული იყო როგორც: <em>$1</em>.",
        "revertpage": "[[Special:Contributions/$2|$2]]-ის რედაქტირება გაუქმდა; აღდგა ბოლოს [[User:$1|$1]]-ის მიერ რედაქტირებული ვერსია",
        "revertpage-nouser": "მომხმარებლის (მომხმარებლის სახელი დამალულია) ცვლილებები დაბრუნებულია ვერსიაზე {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "გაუქმდა რედაქტირება $1; დაბრუნება ვერსიაზე $2.",
        "changecontentmodel-title-label": "გვერდის სათაური",
        "changecontentmodel-model-label": "შინაარსის ახალი მოდელი",
        "changecontentmodel-reason-label": "მიზეზი:",
+       "changecontentmodel-submit": "შეცვლა",
        "changecontentmodel-success-title": "შინაარსის მოდელი შეიცვალა",
        "changecontentmodel-success-text": "[[:$1]]-ის კონტენტის ტიპი შეიცვალა.",
        "changecontentmodel-cannot-convert": "[[:$1]]-ის შინაარსის $2-ის ტიპზე კონვერტაცია შეუძლებელია.",
        "changecontentmodel-nodirectediting": "$1 შინაარსის მოდელს არ აქვს პირდაპირი რედაქტირების მხარდაჭერა",
        "log-name-contentmodel": "შინაარსის მოდელის შეცვლის ჟურნალი",
        "log-description-contentmodel": "გვერდის შინაარსის მოდელთან დაკავშირებული მოვლენები",
+       "logentry-contentmodel-new": "$1-მ {{GENDER:$2|შექმნა}} გვერდი $3, არა-სტანდარტული მოდელით \"$5\"",
        "logentry-contentmodel-change": "$1-მა {{GENDER:$2|შეცვალა}} $3-ის გვერდის შინაარსის მოდელი \"$4\"-დან \"$5\"-ზე",
        "logentry-contentmodel-change-revertlink": "დაბრუნება",
        "logentry-contentmodel-change-revert": "დაბრუნება",
        "ipb_expiry_old": "ვადის გასვლის დრო წარსულშია.",
        "ipb_expiry_temp": "ბლოკირება მომხმარებლის სახელის დამალვით უვადო უნდა იყოს",
        "ipb_hide_invalid": "შეუძლებელია მოცემული ანგარიშის დამალვა, მისგან განხორციელებულია {{PLURAL:$1|ერთი რედაქტირება|$1 რედაქტირებები}}.",
-       "ipb_already_blocked": "â\80\9e$1â\80\9c á\83£á\83\99á\83\95á\83\94 á\83\91á\83\9aá\83\9dá\83\99á\83\98á\83 á\83\94á\83\91á\83£á\83\9aá\83\98á\83\90",
+       "ipb_already_blocked": "â\80\9e$1â\80\9c á\83£á\83\99á\83\95á\83\94 á\83\93á\83\90á\83\91á\83\9aá\83\9dá\83\99á\83\98á\83\9aá\83\98á\83\90.",
        "ipb-needreblock": "მომხმარებელი $1 უკვე დაიბლოკა. გსურთ დაბლოკვის პარამეტრების შესწორება?",
        "ipb-otherblocks-header": "სხვა {{PLURAL:$1|დაბლოკვა|დაბლოკვები}}",
        "unblock-hideuser": "თქვენ არ შეგიძლიათ მოხსნათ ბლოკი ამ მომხმარებელს, რადგან მისი მომხმარებლის სახელი დამალულია.",
        "ipb_cant_unblock": "შეცდომა. ბლოკირება  $1 ID-ით არ არის ნაპოვნი. შესაძლოა იგი უკვე მოხსნილია",
        "ipb_blocked_as_range": "შეცდომა:  IP-მისამართი $1 არ იყო პირდაპირ დაბლოკილი, შესაბამისად ვერ მოხდება მისი განბლოკვა.თუმცა იგი ეკუთვნის დიაპაზონს $2, რომლის განბლოკვა შესაძლებელია.",
-       "ip_range_invalid": "არასწორი IP მისამართი",
+       "ip_range_invalid": "არასწორი IP მისამართი.",
        "ip_range_toolarge": "დაბლოკვა /$1 დიაპაზონზე ზემოთ აკრძალულია.",
        "proxyblocker": "პროქსის ბლოკირება",
        "proxyblockreason": "თქვენი IP მისამართი დაიბლოკა, ვინაიდან ის ღია პროქსია. გთხოვთ დაუკავშირდეთ თქვენ ინტერნეტ პროვაიდერს ან ტექ. სამსახურს და აცნობოთ მათ ამ სერიოზული უსაფრთხოების პრობლემის შესახებ.",
        "allmessagesdefault": "სტანდარტული ტექსტი",
        "allmessagescurrent": "მიმდინარე ტექსტი",
        "allmessagestext": "ეს არის სისემურ შეტყობინებათა სია «MediaWiki» სახელთა სივრცეში.\nგთხოვთ ეწვიოთ  [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation ლოკალიზაციის აღმწერ] გვერდს [//translatewiki.net translatewiki.net] პროექტს, თუ გსურთ MediaWiki ლოკალიზაციაში წვლილის შეტანა.",
-       "allmessagesnotsupportedDB": "{{ns:special}}:AllMessages-ის უზრუნველყოფა არ ხდება, ვინაიდან wgUseDatabaseMessages გამორთულია.",
+       "allmessagesnotsupportedDB": "ამ გვერდის გამოყენება შეუძლებელია, რადგან\n<strong>$wgUseDatabaseMessages</strong> გამორთულია.",
        "allmessages-filter-legend": "ფილტრი",
        "allmessages-filter": "ფილტრი ცვლილებების სტატუსით:",
-       "allmessages-filter-unmodified": "á\83£á\83ªá\83\95á\83\9aá\83\90á\83\93á\83\94",
+       "allmessages-filter-unmodified": "á\83£á\83ªá\83\95á\83\9aá\83\94á\83\9aá\83\98",
        "allmessages-filter-all": "ყველა",
        "allmessages-filter-modified": "ცვლადი",
        "allmessages-prefix": "წინსართის ფილტრი:",
        "tags-delete-not-allowed": "გაფართოებით განსაზღვრული ტეგები, არ შეიძლება იყოს წაშლილი, თუკი გაფართოება აშკარად არ იძლევა ამის გაკეთების შესაძლებლობას",
        "tags-delete-not-found": "აღნიშვნა „$1“ არ არსებობს.",
        "tags-delete-too-many-uses": "ტეგი \"$1\" მიღებულია $2 ვერსიებთან, რაც იმას ნიშნავს, რომ იგი არ შეიძლება იყოს წაშლილი",
-       "tags-delete-warnings-after-delete": "á\83¢á\83\94á\83\92á\83\98 â\80\9e$1â\80\9c á\83¬á\83\90á\83 á\83\9bá\83\90á\83¢á\83\94á\83\91á\83\98á\83\97 á\83\98á\83¥á\83\9cá\83\90 á\83¬á\83\90á\83¨á\83\9aá\83\98á\83\9aá\83\98, á\83\97á\83£á\83\9bá\83ªá\83\90 á\83\90á\83¦á\83\9bá\83\9dá\83©á\83\94á\83\9cá\83\98á\83\9aá\83\98 á\83\98á\83§á\83\9d á\83¨á\83\94á\83\9bá\83\93á\83\94á\83\92á\83\98 á\83¨á\83\94á\83¢á\83§á\83\9dá\83\91á\83\98á\83\9cá\83\94á\83\91á\83\90: $2",
+       "tags-delete-warnings-after-delete": "á\83¢á\83\94á\83\92á\83\98 â\80\9e$1â\80\9c á\83¬á\83\90á\83\98á\83¨á\83\90á\83\9aá\83\90, á\83\97á\83£á\83\9bá\83ªá\83\90 á\83\90á\83¦á\83\9bá\83\9dá\83©á\83\94á\83\9cá\83\98á\83\9aá\83\98á\83\90 á\83¨á\83\94á\83\9bá\83\93á\83\94á\83\92á\83\98 {{PLURAL:$2|á\83¨á\83\94á\83¢á\83§á\83\9dá\83\91á\83\98á\83\9cá\83\94á\83\91á\83\90\83¨á\83\94á\83¢á\83§á\83\9dá\83\91á\83\98á\83\9cá\83\94á\83\91á\83\94á\83\91á\83\98}}:",
        "tags-activate-title": "ტეგის გააქტიურება",
        "tags-activate-question": "თქვენ ცდილობთ დასათაურების გააქტიურებას „$1“.",
        "tags-activate-reason": "მიზეზი:",
        "tags-edit-revision-legend": "ტეგების დამატება ან წაშლა {{PLURAL:$1|ეს გადასინჯვა|ყველა $1 გადასინჯვა}}",
        "tags-edit-logentry-legend": "ტეგების დამატება ან წაშლა {{PLURAL:$1|ეს ჩანაწერი ჟურნალში|ყველა $1 ჟურნალის ჩანაწერი}}",
        "tags-edit-existing-tags": "არსებული დასათაურებები:",
-       "tags-edit-existing-tags-none": "''არა''",
+       "tags-edit-existing-tags-none": "<em>არცერთი</em>",
        "tags-edit-new-tags": "ახალი აღნიშვნა:",
        "tags-edit-add": "ამ აღნიშვნის დამატება:",
        "tags-edit-remove": "ამ აღნიშვნის წაშლა:",
        "tags-edit-reason": "მიზეზი:",
        "tags-edit-revision-submit": "ცვლილებების მიღება {{PLURAL:$1|ეს გადასინჯვა|$1 გადასინჯვები}}",
        "tags-edit-logentry-submit": "მიღებული ცვლილებები {{PLURAL:$1|ეს ჩანაწერია ჟურნალში|$1 ჩანაწერების ჟურნალი}}",
-       "tags-edit-success": "á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\94á\83\91á\83\98 á\83¬á\83\90á\83 á\83\9bá\83\90á\83¢á\83\94á\83\91á\83£á\83\9aá\83\90á\83\93 á\83\98á\83¥á\83\9cá\83\90 á\83\9bá\83\98á\83¦á\83\94á\83\91á\83£á\83\9aá\83\98",
+       "tags-edit-success": "á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\94á\83\91á\83\98 á\83\9bá\83\98á\83¦á\83\94á\83\91á\83£á\83\9aá\83\98á\83\90.",
        "tags-edit-failure": "ცვლილებები არ იქნა შენახული: $1",
        "tags-edit-nooldid-title": "არ არის მოცემული სამიზნე ვერსია",
        "tags-edit-nooldid-text": "ამ ფუნქციის შესასრულებლად თქვენ არ გაქვთ გაცემული სამიზნე ვერსია, ან მითითებული ვერსია არ არსებობს",
        "default-skin-not-found": "უფს! გაფორმების თემა ნაგულისხმევად თქვენი ვიკისთვის <code dir=\"ltr\">$wgDefaultSkin</code> როგორც <code>$1</code>, მიუწვდომელია.\n\nთქვენი დაყენება, როგორც ჩანს, შეიცავს გაფორმების შემდეგ თემებს. {{PLURAL:$4|skin|skins}}. იხ. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] იმ ინფორმაციასთან ერთად, თუ როგორ ჩაირთოს და აირჩიოს თემა ნაგულისხმევად {{PLURAL:$4|it|them and choose the default}}.\n\n$2\n\n; თუ თქვენ ახლახან დააყენეთ MediaWiki:\n: თქვენ როგორც ჩანს ეს შეასრულეთ Git ან უშუალოდ საწყისი კოდიდან სხვა მეთოდის გამოყენებით. მაშინ ეს შესაძლებელია. შეეცადეთ დააყენოთ ზოგიერთი თემა [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory]:\n:* გადმოწერით [https://www.mediawiki.org/wiki/Download tarball installer], რომელიც შეიცავს გაფორმების თემებსა და გაფართოებებს. თქვენ შეგიძლიათ დააკოპიროთ მისგან ფოლდერი <code>skins/</code>.\n:* [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]-დან ცალკეული გაფორმების თემების არქივიდან.\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Using Git to download skins].\n: ამან არ უნდა ავნოს თქვენ Git რეპოზიტორიას, თუ თქვენ MediaWiki შემმუშავებელი ხართ.\n\n; თუ თქვენ ახლახან განაახლეთ MediaWiki:\n: MediaWiki 1.24 და სხვა აღარ შეიცავენ ავტომატურად დაყენებულ თემებს (იხ. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). თქვენ შეგიძლიათ {{PLURAL:$5|line|lines}} <code>LocalSettings.php</code>-ში {{PLURAL:$5|the|all}} რათა ჩართოთ გაფორმების თემები  {{PLURAL:$5|skin|skins}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; თუ თქვენ ამ წუთას შეცვალეთ <code>LocalSettings.php</code>:\n: გადასინჯეთ თემების სახელწოდებები შეცდომების მაგალითზე..",
        "default-skin-not-found-no-skins": "უფს! გაფორმების თემა ნაგულისხმევად თქვენი ვიკისთვის <code>$wgDefaultSkin</code> როგორც <code>$1</code>, მიუწვდომელია.\n\nთქვენ არ გაქვთ დაყენებული გაფორმების თემები.\n\n; თუ თქვენ ახლახან დააყენეთ ან განაახლეთ MediaWiki:\n: თქვენ შესაძლოა ეს გააკეთეთ Git-იდან ან უშუალოდ სხვა მეთოდის გამოყენების საწყისი კოდიდან. მაშინ ეს შესაძლებელია. MediaWiki 1.24 არ შეიცავს გაფორმების თემებს ძირითად რეპოზიტორიაში. შეეცადეთ დააყენოთ ზოგიერთი თემა [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory]:\n:* გადმოწერით [https://www.mediawiki.org/wiki/Download tarball installer], რომელიც შეიცავს გაფორმების თემებსა და გაფართოებებს. თქვენ შეგიძლიათ დააკოპიროთ და ჩასვათ <code>skins/</code>.\n:* ცალკეული გაფორმების თემების არქივების გადმოწერით [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]-დან.\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Using Git to download skins].\n: ამან არ უნდა ავნოს თქვენ Git რეპოზიტორიას, თუ თქვენ MediaWiki შემმუშავებელი ხართ. იხ. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] ინფორმაცია იმის შესახებ თუ როგორ უნდა ჩაირთოს გაფორმების თემები და აირჩეს თემა ნაგულისხმევად.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (ჩართულია)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''გამორთულია''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>გამორთულია</strong>)",
        "mediastatistics": "მედია-სტატისტიკა",
        "mediastatistics-summary": "სტატისტიკური მონაცემები ჩატვირთული ფაილების ტიპების შესახებ. იგი შეიცავს ინფორმაციას მხოლოდ ფაილების ბოლო ვერსიის შესახებ. ფაილების უფრო ძველი ან წაშლილი ვერსიები არ ითვლება.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 ბაიტი|$1 ბაიტი}} ($2; $3%)",
index 7ffcaf2..e37711b 100644 (file)
@@ -8,7 +8,8 @@
                        "Kaganer",
                        "Reedy",
                        "Urhixidur",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Siltewdin' astın sız:",
        "editinginterface": "'''Esletpe:''' Siz ishinde MediaWiki sistema xabarı bar bolg'an betti o'zgertip atırsız.\nBul bettin' o'zgeriwi basqa paydalanıwshılardın' sırtqı interfeysine ta'sir etedi.\nBul xabardın' awdarmasın qosıw yamasa o'zgertiw ushın,  MediaWiki programmasının' lokallastırıw [//translatewiki.net/wiki/Main_Page?setlang=kaa translatewiki.net proektinen] paydalanın'.",
        "namespaceprotected": "'''$1''' isimler ko'pligindegi betlerdi o'zgertiwge ruxsatın'ız joq.",
        "ns-specialprotected": "\"{{ns:special}}:\" isimler ko'pligindegi betler o'zgertilmeydi",
-       "titleprotected": "Bul atamanı jaratıw [[User:$1|$1]] ta'repinen qorg'alg'an.\nKeltirilgen sebep: ''$2''.",
+       "titleprotected": "Bul atamanı jaratıw [[User:$1|$1]] ta'repinen qorg'alg'an.\nKeltirilgen sebep: <em>$2</em>.",
        "virus-unknownscanner": "belgisiz antivirus:",
        "logouttext": "'''Siz endi sayttan shıqtın'ız.'''\n\nSonı este saqlan', ayrım betler sizin' brauzerin'izdin' keshi tazalanbag'anlıg'ı sebebli sistemada kirgenin'izdey ko'riniste dawam ettire beriwi mu'mkin.",
        "yourname": "Paydalanıwshı atı:",
        "right-blockemail": "Paydalanıwshının' xat jiberiw mu'mkinshiligin bloklaw",
        "right-hideuser": "Ja'miyetten jasırg'an halda paydalanıwshı atın bloklaw",
        "right-ipblock-exempt": "IP boyınsha bloklaw, avtomat bloklaw ha'mde diapazon bloklawların shetlep o'tiw",
-       "right-proxyunbannable": "Proksi serverlerdin' avtomat bloklawlarınan o'tiw",
        "right-protect": "Qorg'aw da'relelerin o'zgertiw ha'm qorg'alg'an betlerdi o'zgertiw",
        "right-editprotected": "Qorg'alg'an betlerdi o'zgertiw (kaskadlı qorg'awsız)",
        "right-editinterface": "Paydalanıwshı interfeysin o'zgertiw",
        "destfilename": "Belgilengen fail atı:",
        "upload-maxfilesize": "Fayldın' maksimal ko'lemi: $1",
        "watchthisupload": "Bul fayldı baqlaw",
-       "upload-success-subj": "Tabıslı aploud",
        "upload-proto-error": "Nadurıs protokol",
        "upload-file-error": "İshki qa'telik",
        "upload-misc-error": "Belgisiz aploud qatesi",
        "rollback": "O'zgerislerdi biykar etiw",
        "rollbacklink": "qaytarıw",
        "rollbackfailed": "Biykar etiw sa'tsiz tamamlandı",
-       "editcomment": "O'zgertiwge qaldırılg'an kommentariy: \"''$1''\".",
+       "editcomment": "O'zgertiwge qaldırılg'an kommentariy: <em>$1</em>.",
        "protectlogpage": "Qorg'aw jurnalı",
        "protectedarticle": "\"[[$1]]\" qorg'alg'an",
        "modifiedarticleprotection": "\"[[$1]]\" betinin' qorg'aw da'rejesi ozgertildi",
        "movelogpagetext": "To'mende ko'shirilgen betlerdin' dizimi keltirilgen.",
        "movereason": "Sebep:",
        "revertmove": "qaytarıw",
-       "delete_and_move": "O'shiriw ha'm ko'shiriw",
        "delete_and_move_confirm": "Awa, bul betti o'shiriw",
        "delete_and_move_reason": "Ko'shiriwge jol beriw ushın o'shirilgen",
        "export": "Betlerdi eksport qılıw",
index dcb4b34..c9039a1 100644 (file)
        "myprivateinfoprotected": "Ur tesɛiḍ ara turagt ad beddeleḍ tilɣa inek(em) tusligtin.",
        "mypreferencesprotected": "Ur tesɛiḍ ara turagt ad beddeleḍ iɣewwaren inek(em).",
        "ns-specialprotected": "Ur t-zemred ara ad beddeleḍ isebtar usligen",
-       "titleprotected": "Azwel agi yegdel deg usnulfu ɣef [[User:$1|$1]].\nTaɣẓint id yenna : ''$2''",
+       "titleprotected": "Azwel agi yegdel deg usnulfu ɣef [[User:$1|$1]].\nTaɣẓint id yenna : <em>$2</em>",
        "filereadonlyerror": "Ulamek an beddel afaylu « $1 » acku akaram n ifuyla « $2 » yella deg taɣuri kan.\n\nAnedbal i tid sekkweṛen yefkad taɣẓint agi : « $3 ».",
        "invalidtitle-knownnamespace": "Azwel ur i ɣbel ara s tallunt n isemawen « $2 » dɣa d-uglam « $3 »",
        "invalidtitle-unknownnamespace": "Azwel ur i ɣbel ara s uṭṭun n tallunt n isemawen $1 dɣa d-uglam « $2 » warisem",
        "createaccountreason": "Ayɣer",
        "createacct-reason": "Taɣẓint",
        "createacct-reason-ph": "Ayɣer ad snulfuḍ amiḍan nniḍen",
-       "createacct-captcha": "Asenqed n taɣellist",
-       "createacct-imgcaptcha-ph": "Sekcem aḍris i tezṛiḍ ddaw-agi",
        "createacct-submit": "Snulfud amiḍan inek(m)",
        "createacct-another-submit": "Snulfud amiḍan nniḍen",
        "createacct-benefit-heading": "{{SITENAME}} yetwexdem sɣur medden am kečč/kem.",
        "passwordreset-emailtext-ip": "Yiwen (Ahat kečč/kem, seg tansa IP $1) yessutered awennez n awal n uɛaddi i {{SITENAME}} ($4). {{PLURAL:$3|Amiḍan n useqdac agi yeqqen|imiḍanen n iseqdacen agi qqenen}} s tansa e-mail agi :\n\n$2\n\n{{PLURAL:$3|Awal n uɛaddi uɛḍil agi ad i aff tasewti-s|Awalen n uɛaddi uɛḍilen agi ad affen taseweti nsen}} deg {{PLURAL:$5|yiwen ass|$5 ussan}}. Ilaq tura ad qqeneḍ dɣa ad freneḍ awal n uɛaddi amaynut. Lukan mačči d kečč/kem i xedmen asuter agi, naɣ tecfiḍ tura i awal n uɛaddi inek/inem, tzemreḍ ad eǧǧeḍ izen agi.",
        "passwordreset-emailtext-user": "Aseqdac $1 ɣef {{SITENAME}} yessutered awennez n awal n uɛaddi i {{SITENAME}} ($4). {{PLURAL:$3|Amiḍan n useqdac agi yeqqen|imiḍanen n iseqdacen agi qqenen}} s tansa e-mail agi :\n\n$2\n\n{{PLURAL:$3|Awal n uɛaddi uɛḍil agi ad i aff tasewti-s|Awalen n uɛaddi uɛḍilen agi ad affen taseweti nsen}} deg {{PLURAL:$5|yiwen ass|$5 ussan}}. Ilaq tura ad qqeneḍ dɣa ad freneḍ awal n uɛaddi amaynut. Lukan mačči d kečč/kem i xedmen asuter agi, naɣ tecfiḍ tura i awal n uɛaddi inek/inem, tzemreḍ ad eǧǧeḍ izen agi.",
        "passwordreset-emailelement": "Isem n useqdac : \n$1\n\nAwal n uɛddi akudan : \n$2",
-       "passwordreset-emailsent": "Tirawt n uwennez n awal n uɛaddi tetwaceggaɛ.",
+       "passwordreset-emailsentemail": "Tirawt n uwennez n awal n uɛaddi tetwaceggaɛ.",
        "passwordreset-emailsent-capture": "Tirawt n uwennez n awal n uɛaddi tetwaceggaɛ, ẓeṛ-itt ddaw agi.",
        "passwordreset-emailerror-capture": "Tirawt n uwennez n awal n uɛaddi t-arewed, ẓeṛ-itt ddaw agi, lamaɛna aceggaɛ i {{GENDER:$2|umseqdac}} yefkad anezri : $1",
        "changeemail": "Beddel tansa n e-mail",
        "undo-summary-username-hidden": "Semmewet tacaggart $1 sɣur amseqdac yeffren",
        "cantcreateaccounttitle": "Ur yezmir ara ad yexleq isem n wemseqdac",
        "cantcreateaccount-text": "Asnulfu n umiḍan seg tansa IP (<b>$1</b>) tekyef sɣur [[User:$3|$3]].\n\nTaɣẓint n $3 : ''$2''",
-       "cantcreateaccount-range-text": "Asnulfu n umiḍan seg tansiwin IP deg tagrumma '''$1''', i sseddan tansa inek/inem IP ('''$4'''), twawḥelen sɣur [[User:$3|$3]].\n\nTaɣẓint i-d yefka/tefka $3 : ''$2''",
+       "cantcreateaccount-range-text": "Asnulfu n umiḍan seg tansiwin IP deg tagrumma <strong>$1</strong>, i sseddan tansa inek/inem IP (<strong>$4</strong>), twawḥelen sɣur [[User:$3|$3]].\n\nTaɣẓint i-d yefka/tefka $3 : <em>$2</em>",
        "viewpagelogs": "Ẓer aɣmis n usebter-agi",
        "nohistory": "Ulac amezruy n yibeddlen i usebter-agi.",
        "currentrev": "Tasiwelt n tura",
        "prefs-diffs": "Timeẓliwin",
        "prefs-help-prefershttps": "Asmenyif agi, ad yelḥu ar tuqqna ay d-yetteddun.",
        "prefs-tabs-navigation-hint": "Taxbalut : Tzemreḍ ad seqdeceḍ tineccabin n uzelmaḍ d uyeffus iwakken ad ssileleḍ gar iccaren.",
-       "email-address-validity-valid": "E-mail agi teɣbel",
-       "email-address-validity-invalid": "Telaq tansa e-mail i ɣbelen !",
        "userrights": "Laɛej iserfan n wemseqdac",
        "userrights-lookup-user": "Laɛej iderman n yimseqdacen",
        "userrights-user-editname": "Ssekcem isem n wemseqdac:",
        "right-blockemail": "Sḍiqqef aceggaɛ n tira (e-mail) i yiwen useqdac",
        "right-hideuser": "Kyef aseqdac s tuffra n isem-is ar udem n uzayez",
        "right-ipblock-exempt": "Zizdew tansiwin IP yekyefen, ikyafen iwurmanen d ikyafen n tagrummiwin IP",
-       "right-proxyunbannable": "Zizdew ikyafen iwurmanen n iqeddacen proxy",
        "right-unblockself": "Ad yekkes akyaf iman-is",
        "right-protect": "Beddel iswiren n umesten dɣa beddel isebtar i gdelen s uceṛcuṛ",
        "right-editprotected": "Beddel isebtar i gdelen s « {{int:protect-level-sysop}} »",
        "recentchanges-label-bot": "D-arubut id yeseqdacen abeddel agi",
        "recentchanges-label-unpatrolled": "Abeddel agi mazal yesɛa aselken.",
        "recentchanges-label-plusminus": "Tiddi n usebtar tetwebeddel s umḍan agi n itamḍanen.",
-       "recentchanges-legend-heading": "'''Aglam :'''",
+       "recentchanges-legend-heading": "<strong>Aglam :</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (zeṛ daɣen [[Special:NewPages|umuɣ n isebtar imaynuten]]).",
        "recentchanges-legend-plusminus": "(''± 123'')",
        "rcnotefrom": "Deg ukessar llan ibeddlen seg wasmi '''$2''' (ar '''$1''').",
        "watchthisupload": "Ɛass asebter agi",
        "filewasdeleted": "Afaylu s yisem-agi yettwazen umbeɛd yettumḥa. Ssenqed $1 qbel ad tazniḍ tikelt nniḍen.",
        "filename-bad-prefix": "Isem n ufaylu yezwer s '''« $1 »''', wagi d isem i sedgeren s uwurman sɣur timsakenwin tumḍinin.\nXteṛ isem n ufaylu agelmaw.",
-       "upload-success-subj": "Azen yekfa",
-       "upload-success-msg": "Taktert inek/inem seg [$2] yesmures. Af-it d-agi : [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Ugur n taktert",
-       "upload-failure-msg": "Yella ugur s taktert inek/inem seg [$2] :\n\n$1",
-       "upload-warning-subj": "Alɣu deg taktert",
-       "upload-warning-msg": "Yella ugur s taktert seg [$2]. Tzemreḍ ad uɣaleḍ ar [[Special:Upload/stash/$1|tiferkit n taktert]] iwakken ad fruḍ ugur agi.",
        "upload-proto-error": "Agul deg protokol",
        "upload-proto-error-text": "Assekcam yenṭerr URL i yebdan s <code>http://</code> neɣ <code>ftp://</code>.",
        "upload-file-error": "Agul zdaxel",
        "rollbackfailed": "Asemmet yexseṛ",
        "cantrollback": "Ur yezmir ara ad yessuɣal; yella yiwen kan amseqdac iwumi ibeddel/yexleq asebter-agi.",
        "alreadyrolled": "Ulamek an semmet abeddel aneggaru n usebtar « [[:$1]] » yetwaxeddemen sɣur [[User:$2|$2]] ([[User talk:$2|Mmeslay]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ;\nwayeḍ nniḍen yebeddel yakan neɣ yesemmet asebtar nni.\n\nAbeddel aneggaru n usebtar yetwaxeddemen sɣur [[User:$3|$3]] ([[User talk:$3|Discuter]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Agzul n ubeddel yella: \"''$1''\".",
+       "editcomment": "Agzul n ubeddel yella: <em>$1</em>.",
        "revertpage": "Yessuɣal ibeddlen n [[Special:Contributions/$2|$2]] ([[User talk:$2|Meslay]]); yettubeddel ɣer tasiwelt taneggarut n [[User:$1|$1]]",
        "revertpage-nouser": "Tiririt n ibeddilen sur amseqdac yeffren ar lqem aneggaru sɣur {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Asemmet n ibeddilen yetwaxeddemen sɣur $1 ;\ntuqqla ar lqem aneggaru sɣur $2.",
        "movenosubpage": "Asebtar agi ur yesɛ ara adu-asebtar",
        "movereason": "Ayɣer",
        "revertmove": "Uɣal ar tasiwelt ssabeq",
-       "delete_and_move": "Mḥu u smimeḍ",
        "delete_and_move_text": "==Amḥay i tebɣiḍ==\n\nAnda tebɣiḍ tesmimeḍ \"[[:$1]]\" yella yagi. tebɣiḍ ad temḥuḍ iwakken yeqqim-d wemkan i usmimeḍ?",
        "delete_and_move_confirm": "Ih, mḥu asebter",
        "delete_and_move_reason": "Asebter yemḥa iwakken yeqqim-d wemkan i usmimeḍ seg \"[[$1]]\"",
index 57a1a7c..8fce9dc 100644 (file)
@@ -6,7 +6,8 @@
                        "Vito Genovese",
                        "Алёшка",
                        "Тамэ Балъкъэрхэ",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "ТехьэпӀэхэр щӀэтхъэн:",
        "cascadeprotected": "ЗэхъуэкӀыныгъэм щыхъумауэ щыт напэкӀуэцӀыр, хэгъэхьауэ щыт {{PLURAL:$1|яужкӀэ напэкӀуэцӀ итым| яужкӀэ напэкӀуэцӀ итхэм}} каскад хъумэныгъэм:\n$2",
        "namespaceprotected": "ПӀалъэ уиӀэкъым напэкӀуэцӀ '''$1''' хэтхэр бгъэтэрэзын.",
        "ns-specialprotected": "Специал напэкӀуэцӀхэр гъэтэрэзын хъунукъым.",
-       "titleprotected": "Апхуэдэ цӀэ зиӀэ напэкӀуэцӀ щӀыныр цӀыхухэт [[User:$1|$1]]-м триубыда.\nАр къызхэкӀар: \"''$2''\".",
+       "titleprotected": "Апхуэдэ цӀэ зиӀэ напэкӀуэцӀ щӀыныр цӀыхухэт [[User:$1|$1]]-м триубыда.\nАр къызхэкӀар: <em>$2</em>.",
        "virus-badscanner": "Зэгъэзэхуэгъуэм и щэуэгъуэ: вирусхэм яуэ, хэщӀыкӀыгъэ зимыӀэ сканэр: ''$1''",
        "virus-scanfailed": "Сканэр щӀыным и щэуэгъуэ (кодыр $1)",
        "virus-unknownscanner": "хэщӀыкӀыгъэ зимыӀэ антивирус:",
index 0c988e8..8d9a6ad 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Rachitrali",
                        "아라",
-                       "Obaid Raza"
+                       "Obaid Raza",
+                       "Macofe"
                ]
        },
        "tog-underline": "ربطو خط کشیدگی",
        "myprivateinfoprotected": "تتے ھمی ذاتی معلواتہ (private information) ترمیم کویکو اختیار نیکی۔",
        "mypreferencesprotected": "تتے تان ھمی ترجیحاتہ (preferences) ترمیم کوریکو اختیار نیکی۔",
        "ns-specialprotected": "خاص صفحاتن تدوین کوریکو اجازت نیکی",
-       "titleprotected": "ھیہ عنوانو [[User:$1|$1]] تخلیق کوریکاری محفوظ کوری آسور.\nوجہ ھیہ شیر: \"''$2''\"",
+       "titleprotected": "ھیہ عنوانو [[User:$1|$1]] تخلیق کوریکاری محفوظ کوری آسور.\nوجہ ھیہ شیر: <em>$2</em>",
        "virus-badscanner": "\"خراب وضعیت: نوژان وائرسی مفراس: ''$1''\",",
        "virus-scanfailed": "تفریس ناکام (رمز $1)",
        "virus-unknownscanner": "نوژان ضد وائرس:",
        "recentchanges-label-bot": "ھیہ ایڈیٹو خود کار بوٹو زریعا انجام دیونو ہوئے",
        "recentchanges-label-unpatrolled": "ھیہ ترمیمو ھمونیہ پت مراجعت(Patrolled) کورونو نو بیتی شیر",
        "recentchanges-label-plusminus": "صفحو سائز تبدیل شدہ بلحاظ بائٹ مقدار",
-       "recentchanges-legend-heading": "'''لیجنڈ:'''",
+       "recentchanges-legend-heading": "<strong>لیجنڈ:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ھمو دی لوڑے [[Special:NewPages|list of new pages]])",
        "rcnotefrom": "ھیہ موڑا '''$2''' کورونو بیرو تبدیلیان تفصیلات شینی ('''$1''' تبدیلیان پشینو بونیان)۔",
        "rclistfrom": "$3 $2 نوغ تبدیلیاں پشیک شروع کورے",
        "unwatch": "زیرنظرمنسوخ",
        "watchlist-details": " تہ زیرِنظرفہرستا {{PLURAL:$1|$1 صفحہ شیر|$1 صفحات شینی}}، ھیارا تبادلۂ خیالو صفحاتن تعداد شامل نیکی.",
        "wlshowlast": "پشاوے آخری $1 گھنٹو $2 آنوسو",
-       "watchlistall2": "سف",
        "watchlist-options": "واچ لسٹ آپشن",
        "watching": "زیر نظر",
        "unwatching": "منسوخ",
        "filemissing": "فائل نیکی",
        "thumbnail_error": "$1 څیق سایزو ھوٹو ساوزیکا مسئلہ",
        "tooltip-pt-userpage": "تہ صارفی صفحہ",
-       "tooltip-pt-mytalk": "تہ صفحۂ مشقولگی",
+       "tooltip-pt-mytalk": "{{GENDER:|تہ}} صفحۂ مشقولگی",
        "tooltip-pt-preferences": " تہ ترجیحات",
        "tooltip-pt-watchlist": "ھتے صفحاتن فہرست کہ ھتیتان تبدیلی تہ زیرِنظر شینی",
-       "tooltip-pt-mycontris": "تہ کاردو کورمان فہرست",
+       "tooltip-pt-mycontris": "{{GENDER:|تہ}} کاردو کورمان فہرست",
        "tooltip-pt-login": "تہ بچے داخلِ نوشتہ بیک جم شیر، لیکن ھیہ ضروری نو",
        "tooltip-pt-logout": "خارج بوس",
        "tooltip-pt-createaccount": "تتے دعوت دیونو بویان کہ کھاتہ ساوزاوے۔لیکن کھاتہ ساوزیک لازمی نو-",
        "tooltip-t-recentchangeslinked": "ھیہ صفحہو سوم مربوط صفحاتہ بیرو حالیہ تبدیلی",
        "tooltip-feed-rss": "ھیہ صفحو بچے اسس خورد",
        "tooltip-feed-atom": "ھیہ صفحو بچے آٹوم فیڈ",
-       "tooltip-t-contributions": "Ù\86Ù\88غ ØªØ¯Ù\88Û\8cÙ\86",
+       "tooltip-t-contributions": "Ù\85ضÙ\85Ù\88Ù\86Ù\86 Ù\84سٹ {{GENDER:$1|Ú¾Û\8cÛ\81 ØµØ§Ø±Ù\81}}Ù\88",
        "tooltip-t-emailuser": "ھیہ ممباروت بشلی کغاز(ای میل) انڅاوے",
        "tooltip-t-upload": "فائلو اپلوڈ کورے",
        "tooltip-t-specialpages": "سف خاص صفحاتن فہرست",
index 4fe3fb6..2fe53e9 100644 (file)
@@ -5,7 +5,8 @@
                        "Gorizon",
                        "Marmase",
                        "Mirzali",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Bınê gırey de xete bonce:",
        "views": "Asaişi",
        "toolbox": "Qutiya hacetu",
        "userpage": "Pela karberi bıvêne",
-       "projectpage": "Pela procey bıvêne",
+       "projectpage": "Pela proceyi bıvêne",
        "imagepage": "Pela dosya bıvêne",
        "mediawikipage": "Pela mesacu bıvêne",
        "templatepage": "Pela nımunu bıvêne",
        "nstab-user": "Pela karberi",
        "nstab-media": "Pela medya",
        "nstab-special": "Pela xase",
-       "nstab-project": "Pela procey",
+       "nstab-project": "Pela proceyi",
        "nstab-image": "Dosya",
        "nstab-mediawiki": "Mesac",
        "nstab-template": "Nımune",
        "cascadeprotected": "Na pele esterıtene ra sıtar biya, çıke na zerrê {{PLURAL:$1|pela ke|pelunê ke}} dera/derê be \"cascading\" opsiyoni kılit biya, $2 de bena ra.",
        "namespaceprotected": "'''$1''' ''namespace'' de desturê sıma be vurnaisê pelu çino.",
        "ns-specialprotected": "Pelê xususi nêvurrinê.",
-       "titleprotected": "No sername terefê [[User:$1|$1]]i ra, afernaene ra sıtar biyo.\nSebebê ho ''$2'' dero.",
+       "titleprotected": "No sername terefê [[User:$1|$1]] ra, afernayene ra sıtar biyo.\nSebebê xo <em>$2</em> dero.",
        "virus-badscanner": "Sıkılo xırabın: ''scanner''ê ''virus''ê nêzanıtey: ''$1''",
        "virus-scanfailed": "''scan'' nêbi (code $1)",
        "virus-unknownscanner": "''antivirus''o nêzanıte:",
        "tooltip-p-logo": "Pela Seri",
        "tooltip-n-mainpage": "Pela Seri bıvêne",
        "tooltip-n-mainpage-description": "Pela Seri bıvêne",
-       "tooltip-n-portal": "Heqa procey de, çı şikina bıvırazê, çı koti vênino",
+       "tooltip-n-portal": "Heqa proceyi de, çı şenay bıvırazê, çı koti vêniyeno",
        "tooltip-n-currentevents": "Vurnaisunê peyênu sero melumatê pey bıvêne",
        "tooltip-n-recentchanges": "Wiki de lista vurnaisunê peyênu",
        "tooltip-n-randompage": "Pelê da rastamaiye bar ke",
        "tooltip-ca-nstab-user": "Pela karberi bıvêne",
        "tooltip-ca-nstab-media": "Pela medya bıvêne",
        "tooltip-ca-nstab-special": "Na jü pelê da xususiya, sıma nêşikinê nae bıvurnê",
-       "tooltip-ca-nstab-project": "Pela procey bıvêne",
+       "tooltip-ca-nstab-project": "Pela proceyi bıvêne",
        "tooltip-ca-nstab-image": "Pela dosya bıvêne",
        "tooltip-ca-nstab-mediawiki": "Mesacê sistemi bıvêne",
        "tooltip-ca-nstab-template": "Nımuney bıvêne",
index 985ca5b..65c014c 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "GaiJin",
                        "Kaztrans",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "سىلتەمەنىڭ استىن سىز:",
        "cascadeprotected": "بۇل بەت وڭدەۋدەن قورعالعان, سەبەبى بۇل كەلەسى «باۋلى قورعاۋى» قوسىلعان {{PLURAL:$1|بەتتىڭ|بەتتەردىڭ}} كىرىكبەتى:\n$2",
        "namespaceprotected": "'''$1''' ەسىم اياسىنداعى بەتتەردى وڭدەۋ ٴۇشىن رۇقساتىڭىز جوق.",
        "ns-specialprotected": "{{ns:special}} ەسىم اياسىنداعى بەتتەر وڭدەلىنبەيدى",
-       "titleprotected": "بۇل تاقىرىپ اتى باستاۋدان [[User:$1|$1]] قورعادى.\nكەلتىرىلگەن سەبەبى: ''$2''.",
+       "titleprotected": "بۇل تاقىرىپ اتى باستاۋدان [[User:$1|$1]] قورعادى.\nكەلتىرىلگەن سەبەبى: <em>$2</em>.",
        "logouttext": "'''ەندى جۇيەدەن شىقتىڭىز.'''\n\nجۇيەگە كىرمەستەن {{SITENAME}} جوباسىن پايدالانۋىن جالعاستىرا الاسىز, نەمەسە ٴدال سول نە وزگە قاتىسۋشى بوپ قايتا كرۋىڭىز مۇمكىن.\nاڭعارتپا: كەيبىر بەتتەر شولعىشىڭىزدىڭ بۇركەمەسىن تازارتقانشا دەيىن ٴالى دە كىرپ قالعانىڭىزداي كورىنۋى مۇمكىن.",
        "yourname": "قاتىسۋشى اتىڭىز:",
        "yourpassword": "قۇپىييا ٴسوزىڭىز:",
        "right-blockemail": "قاتىسۋشىنىڭ حات جونەلتۋىن بۇعاتتاۋ",
        "right-hideuser": "بارشادان جاسىرىپ, قاتىسۋشى اتىن بۇعاتتاۋ",
        "right-ipblock-exempt": "IP بۇعاتتاۋلاردى, وزبۇعاتتاۋلاردى جانە اۋقىم بۇعاتتاۋلاردى وراعىتۋ",
-       "right-proxyunbannable": "پروكسىي سەرۆەرلەردىڭ وزبۇعاتتاۋلارىن وراعىتۋ",
        "right-protect": "قورعاۋ دەڭگەيلەرىن وزگەرتۋ جانە قورعالعان بەتتەردى وڭدەۋ",
        "right-editprotected": "قورعالعان بەتتەردى وڭدەۋ (باۋلى قورعاۋلارسىز)",
        "right-editinterface": "پايدالانۋشىلىق تىلدەسىۋىن وڭدەۋ",
        "watchthisupload": "بۇل بەتتى باقىلاۋ",
        "filewasdeleted": "بۇل اتاۋى بار فايل بۇرىن قوتارىپ بەرىلگەن دە بەرى كەلە جويىلعان.\nبۇنى قايتا قوتارىپ بەرۋ الدىنان $1 دەگەندى تەكسەرىپ شىعىڭىز.",
        "filename-bad-prefix": "قوتارىپ بەرمەك فايلىڭىزدىڭ اتاۋى '''«$1» ''' دەپ باستالادى, مىناداي سىيپاتتاۋسىز اتاۋدى ادەتتە ساندىق كامەرالار وزدىكتىك بەرەدى.\nفايلىڭىزعا سىيپاتتىلاۋ اتاۋدى تاڭداڭىز.",
-       "upload-success-subj": "ٴساتتى قوتارىپ بەرىلدى",
        "upload-proto-error": "بۇرىس حاتتاما",
        "upload-proto-error-text": "شەتتەن قوتارىپ بەرۋ ٴۇشىن URL جايلارى <code>http://</code> نەمەسە <code>ftp://</code> دەگەندەردەن باستالۋ ٴجون.",
        "upload-file-error": "ىشكى قاتە",
        "movelogpagetext": "تومەندە جىلجىتىلعان بەتتەردىڭ ٴتىزىمى بەرىلىپ تۇر.",
        "movereason": "سەبەبى:",
        "revertmove": "قايتارۋ",
-       "delete_and_move": "جويۋ جانە جىلجىتۋ",
        "delete_and_move_text": "==جويۋ كەرەك==\n«[[:$1]]» دەگەن نىسانا بەت الداقاشان بار.\nجىلجىتۋعا جول بەرۋ ٴۇشىن بۇنى جوياسىز با?",
        "delete_and_move_confirm": "ٴىيا, بۇل بەتتى جوي",
        "delete_and_move_reason": "جىلجىتۋعا جول بەرۋ ٴۇشىن جويىلعان",
index 64bc6c5..0fe94da 100644 (file)
        "myprivateinfoprotected": "Сізде жеке мәліметтеріңізді өңдеу рұқсатыңыз жоқ.",
        "mypreferencesprotected": "Сізде баптауларыңызды өңдеуге рұқсатыңыз жоқ.",
        "ns-specialprotected": "Арнайы беттер өңдеуге келмейді.",
-       "titleprotected": "Бұл атауды бастаудан [[User:$1|$1]] қорғаған.\nКелтірілген себебі: «<em>$2</em>».",
+       "titleprotected": "Бұл атауды бастаудан [[User:$1|$1]] қорғаған.\nКелтірілген себебі: <em>$2</em>.",
        "filereadonlyerror": "«$2» файл қоры тек қана оқу тәртіптемесінде тұрғасын «$1» файлын өзгерту мүмкін емес.\nБұл тәртіптемені қондырған әкімші келесі түсіндірмені қалдырды: «$3»",
        "invalidtitle-knownnamespace": "«$2» есім кеңістік түрі және  «$3» мәтіні жарамсыз",
        "invalidtitle-unknownnamespace": "Нөмері $1 белгісіз есім кеңістік атауы және «$2» мәтіні жарамсыз",
        "nocookieslogin": "Қатысушы кіру үшін {{SITENAME}} торабында «cookies» деген қолданылады.\nСізде «cookies» өшірілген.\nСоны қосыңыз да кіруді қайта байқап көріңіз.",
        "nocookiesfornew": "Оның қайнарын растай алмағандықтан қатысушының аккаунты тіркелмеді. «Cookies» қосылып тұрғанына көз жеткізіңіз, бетті қайта жаңартыңыз және тағы байқап көріңіз.",
        "noname": "Сізде жарамды қатысушы аты анықталмаған.",
-       "loginsuccesstitle": "Кіруіңіз сәтті болды.",
+       "loginsuccesstitle": "Кірдіңіз.",
        "loginsuccess": "<strong>Сіз енді {{SITENAME}} жобасына «$1» ретінде кірдіңіз.</strong>",
        "nosuchuser": "Мұнда «$1» деп аталған қатысушы тіркелмеген.\nҚатысушы аттары кіші әріптерден тұру керек.\nЕмлеңізді тексеріңіз немесе [[Special:UserLogin/signup|жаңа тіркелгі жасаңыз]].",
        "nosuchusershort": "Мұнда «$1» деп аталған қатысушы тіркелмеген.\nЕмлеңізді тексеріңіз.",
        "newpassword": "Жаңа құпия сөзіңіз:",
        "retypenew": "Жаңа құпия сөзіңізді қайталаңыз:",
        "resetpass_submit": "Құпия сөзді қойыңыз да кіріңіз",
-       "changepassword-success": "Құпия сөзіңіз сәтті өзгертілді!",
+       "changepassword-success": "Құпия сөзіңіз өзгертілді!",
        "changepassword-throttled": "Сіз жақында кіруге тым көп әрекет жасадыңыз.\nҚайта байқап көру үшін $1 уақыт күте тұрыңыз.",
+       "botpasswords-label-update": "Жаңарту",
+       "botpasswords-label-cancel": "Болдырмау",
+       "botpasswords-label-delete": "Жою",
+       "botpasswords-label-resetpassword": "Құпия сөзді қалпына кеттіру",
        "resetpass_forbidden": "Құпия сөз өзгертілмейді",
        "resetpass-no-info": "Бұл бетке тікелей ену үшін жүйеге кіруіңіз керек.",
        "resetpass-submit-loggedin": "Құпия сөзді өзгерту",
        "undo-summary-username-hidden": "$1 нұсқасын жасырылған қатысушы жоққа шығарды",
        "cantcreateaccounttitle": "Тіркелгі жасалмады",
        "cantcreateaccount-text": "Бұл IP мекенжайдан (<strong>$1</strong>) жаңа тіркелгі жасауын [[User:$3|$3]] бұғаттаған.\n\n$3 есімді қатысушының келтіріген себебі: <em>$2</em>",
-       "cantcreateaccount-range-text": "'''$1''' ауқымындағы IP мекенжайдан сіздің IP мекенжайыңыз да кіреді ('''$4''') жаңа тіркелгі жасауын [[User:$3|$3]] бұғаттаған.\n\n$3 есімді қатысушының келтіріген себебі: ''$2'",
+       "cantcreateaccount-range-text": "<strong>$1</strong> ауқымындағы IP мекенжайдан сіздің IP мекенжайыңыз да кіреді (<strong>$4</strong>) жаңа тіркелгі жасауын [[User:$3|$3]] бұғаттаған.\n\n$3 есімді қатысушының келтіріген себебі: ''$2'",
        "viewpagelogs": "Бұл беттің журнал оқиғаларын қарау",
        "nohistory": "Мында бұл беттің өңделу тарихы жоқ.",
        "currentrev": "Ең соңғы нұсқа",
        "revdelete-unsuppress": "Қалпына келтірілген түзетулерден тиымдарды аластау",
        "revdelete-log": "Себебі:",
        "revdelete-submit": "Бөлектенген {{PLURAL:$1|түзетуге|түзетулерге}} қолдану",
-       "revdelete-success": "'''Түзету көрінісі сәтті жаңартылды.'''",
+       "revdelete-success": "Түзету көрінісі жаңартылды.",
        "revdelete-failure": "'''Түзету көрінісі жаңартылмады:'''\n$1",
-       "logdelete-success": "'''Журнал көрінісі сәтті қойылды.'''",
+       "logdelete-success": "Журнал көрінісі қойылды.",
        "logdelete-failure": "Журнал көрінулігі орнатылмады:\n$1",
        "revdel-restore": "көрінісін өзгерту",
        "pagehist": "Бет тарихы",
        "right-noratelimit": "Еселік шектелімдері ықпал етпейді",
        "right-import": "Басқа уикилерден беттерді сырттан алу",
        "right-importupload": "Файлдарды жүктеу арқылы беттерді сырттан алу",
-       "right-patrol": "Басқарардың өңдемелерін зерттелді деп белгілеу",
+       "right-patrol": "Басқарардың өңдемелерін тексерілді деп белгілеу",
        "right-autopatrol": "Өз өңдемелерін тексерілді деп өздіктік белгілеу",
        "right-patrolmarks": "Жуықтағы өзгерістердегі зерттеу белгілерін көру",
        "right-unwatchedpages": "Бақыланылмаған бет тізімін көру",
        "action-rollback": "жекелік беттегі соңғы өңдеген қатысушының соңғы өңдемелерін жылдам шегіндіру",
        "action-import": "беттерді басқа уикиден импортау",
        "action-importupload": "беттерді файл жүктеуінен импорттау",
-       "action-patrol": "басқалардың өңдеулерін зерттелді деп белгілеу",
-       "action-autopatrol": "өзіңіздің өңдемеңізді зерттелді деп белгілеу",
+       "action-patrol": "басқалардың өңдемелерін тексерілді деп белгілеу",
+       "action-autopatrol": "өзіңіздің өңдемеңізді тексерілді деп белгілеу",
        "action-unwatchedpages": "бақыланылмаған беттер тізімін қарау",
        "action-mergehistory": "Бұл беттің өзгеріс тарихын қосу",
        "action-userrights": "Қатысушылардың барлық құқықтарын өзгерту",
        "recentchanges-label-bot": "Бұл өңдемені бот жасады.",
        "recentchanges-label-unpatrolled": "Бұл өңдеме әлі тексеруден өтпеді.",
        "recentchanges-label-plusminus": "Байт бойынша беттің өзгеріс өлшемі",
-       "recentchanges-legend-heading": "'''Шартты белгілер:'''",
+       "recentchanges-legend-heading": "<strong>Шартты белгілер:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (қ: [[Special:NewPages|бөлек бетте]])",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "Көрсету",
        "rcshowhidemine-show": "көрсету",
        "rcshowhidemine-hide": "жасыру",
        "rcshowhidecategorization": "Бет санаттауларын $1",
-       "rcshowhidecategorization-show": "Ð\9aөрсету",
-       "rcshowhidecategorization-hide": "Ð\96асыру",
+       "rcshowhidecategorization-show": "көрсету",
+       "rcshowhidecategorization-hide": "Ðасыру",
        "rclinks": "Соңғы $2 күнде болған соңғы $1 өзгерісті көрсет<br />$3",
        "diff": "айырм",
        "hist": "тарихы",
        "watchthisupload": "Осы файлды бақылау",
        "filewasdeleted": "Бұндай атаумен файл бұрын жүктелген болатын, бірақ кейін жойылды. Бұны қайта жүктеу алдында $1 дегенді тексеріп шығыңыз.",
        "filename-bad-prefix": "Қотарып бермек файлыңыздың атауы '''«$1» ''' деп басталады, мынадай сипаттаусыз атауды әдетте сандық камералар өздіктік береді.\nФайлыңызға сипаттылау атауды таңдаңыз.",
-       "upload-success-subj": "Сәтті жүктелді",
-       "upload-success-msg": "[$2] дегеннен сәтті жүктедіңіз. Оны мынадан ала аласыз [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Жүктеу мәселесі",
-       "upload-failure-msg": "Жүктеу пішініңізде мәселе бар [$2]:\n\n$1",
-       "upload-warning-subj": "Жүктеу кезіндегі ескерту",
-       "upload-warning-msg": "Жүктеу пішініңізде мәселе бар [$2]. Бұл мәселені дұрыстау үшін [[Special:Upload/stash/$1|жүктеу пішініне]] қайтуыңыз керек.",
        "upload-proto-error": "Бұрыс хаттама",
        "upload-proto-error-text": "Шеттен жүктеу үшін URL жайлары <code>http://</code> немесе <code>ftp://</code> дегендерден басталу жөн.",
        "upload-file-error": "Ішкі қате",
        "upload-dialog-button-done": "Бітті",
        "upload-dialog-button-save": "Сақтау",
        "upload-dialog-button-upload": "Жүктеу",
-       "upload-form-label-select-file": "Файлды таңдау",
        "upload-form-label-infoform-title": "Егжей-тегжейі",
        "upload-form-label-infoform-name": "Атауы",
        "upload-form-label-infoform-description": "Сипаттамасы",
        "foreign-structured-upload-form-label-own-work-message-shared": "Мен осы файлдың авторы екенінімді растаймын және бұл файлды Wikimedia Commons ортаққорына [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Attribution-ShareAlike 4.0] лицензиясы аясында қайтымсыз жариялауға келісемін, сонымен бірге [https://wikimediafoundation.org/wiki/Terms_of_Use Қолдану шарттарына] да келісемін.",
        "foreign-structured-upload-form-label-not-own-work-message-shared": "Егер сіз осы файлдың авторы өзіңіз болмасаңыз немесе оны сіз басқа лицензия аясында жариялағыңыз келсе [https://commons.wikimedia.org/wiki/Special:UploadWizard Ортаққор Жүктеу шеберін] қолданыңыз.",
        "foreign-structured-upload-form-label-not-own-work-local-shared": "Егер сайт бұл файлды жүктеуге өзінің ережелері аясында рұқсат беретін болса, сіз сондай-ақ [[Special:Upload|{{SITENAME}} жобасындағы жүктеу бетін]] қолданып көргіңіз келетін шығар.",
-       "foreign-structured-upload-form-3-label-yes": "Иә",
-       "foreign-structured-upload-form-3-label-no": "Жоқ",
        "backend-fail-stream": "«$1» файлы ақпады.",
        "backend-fail-backup": "«$1» файлының сақтық есесі жасалмады.",
        "backend-fail-notexists": "$1 файлы бар емес.",
        "querypage-disabled": "Бұл арнайы бет өнімділік себептері үшін өшірілген",
        "apihelp": "API бойынша анықтама",
        "apihelp-no-such-module": "«$1» модулі табылмады.",
+       "apisandbox-submit": "Сұраныс жасау",
+       "apisandbox-reset": "Тазарту",
+       "apisandbox-examples": "Мысалдар",
+       "apisandbox-results": "Нәтижелер",
+       "apisandbox-request-url-label": "URL сұранысы",
+       "apisandbox-request-time": "Сұраныс уақыты: {{PLURAL:$1|$1 мс}}",
        "booksources": "Кітап қайнарлары",
        "booksources-search-legend": "Кітап қайнарларын іздеу",
        "booksources-search": "Іздеу",
        "log-title-wildcard": "Мына мәтіннен басталытын тақырып аттарын іздеу",
        "showhideselectedlogentries": "Таңдалған журнал енгізілімдерін көрсету/жасыру",
        "log-edit-tags": "Таңдалған журнал жазбаларының өңдеу белгілері",
+       "checkbox-select": "Таңдау: $1",
+       "checkbox-all": "Барлығы",
+       "checkbox-none": "Ешқандай",
+       "checkbox-invert": "Керісінше",
        "allpages": "Барлық беттер",
        "nextpage": "Келесі бетке ($1)",
        "prevpage": "Алдыңғы бетке ($1)",
        "listgrouprights-namespaceprotection-header": "Есім кеңістігі шектелімдері",
        "listgrouprights-namespaceprotection-namespace": "Атау кеңістігі",
        "listgrouprights-namespaceprotection-restrictedto": "Қатысушыға өңдеу үшін берілген құқық(тар)",
+       "listgrants-rights": "Құқықтар",
        "trackingcategories": "Санаттарды қадағалау",
        "trackingcategories-summary": "Бұл бет МедиаУики бағдарламалық жасақтамасынан автоматты түрде толтырылатын санаттарды есептеп тізеді. Олардың есімдерін {{ns:8}} есім кеңістігіндегі сәйкес жүйе хабарлары  арқылы өзгертуге болады.",
        "trackingcategories-msg": "Санатты қадағалау",
        "wlheader-showupdated": "Соңғы келіп-кетуіңізден бері өзгертілген беттер '''жуан''' қаріпімен көрсетіледі.",
        "wlnote": "Төменде $3, $4 кезіне дейінгі соңғы {{PLURAL:$2|сағатта|<strong>$2</strong>  сағатта}} болған, {{PLURAL:$1|жуықтағы өзгеріс|жуықтағы <strong>$1</strong>  өзгеріс}} көрсетіледі.",
        "wlshowlast": "Соңғы $1 сағаттағы, $2 күндегіні көрсету",
-       "watchlistall2": "барлық",
        "watchlist-hide": "Жасыру",
        "watchlist-submit": "Көрсету",
        "wlshowtime": "Соңғысын көрсету:",
        "wlshowhideanons": "анонимді қатысушылар",
        "wlshowhidepatr": "тексерілген өңдемелер",
        "wlshowhidemine": "өңдемелерім",
+       "wlshowhidecategorization": "Бет санаттаулары",
        "watchlist-options": "Бақылау тізімінің баптаулары",
        "watching": "Бақылауда…",
        "unwatching": "Бақыламауда…",
        "rollbackfailed": "Шегіндіру орындалмады",
        "cantrollback": "Өңдеме қайтарылмады;\nсоңғы үлескері тек осы беттің бастаушысы болды.",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|талқылауы]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) істеген [[:$1]] бетіндегі соңғы өңдемесі шегіндірілмеді, себебі басқа біреу бұл бетті әлдеқашан өңдеген немесе шегіндірген.\n\nБетті [[User:$3|$3]] ([[User talk:$3|талқылауы]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) соңғы рет өңдеген.",
-       "editcomment": "Болған өңдеме түйіндемесі: «''$1''».",
+       "editcomment": "Болған өңдеме түйіндемесі: <em>$1</em>.",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|т]]) өңдемелерінен [[User:$1|$1]] соңғы нұсқасына қайтарды",
        "revertpage-nouser": "Жасырылған қатысушы өңдемелерінен {{GENDER:$1|[[User:$1|$1]]}} соңғы нұсқасына қайтарды",
        "rollback-success": "$1 өңдемелерінен қайтарды;\n$2 соңғы нұсқасына қайта өзгертті.",
        "pageinfo-category-pages": "Беттер саны",
        "pageinfo-category-subcats": "Санатшалар саны",
        "pageinfo-category-files": "Файлдар саны",
-       "markaspatrolleddiff": "Ð\97еÑ\80Ñ\82Ñ\82елді деп белгілеу",
+       "markaspatrolleddiff": "ТекÑ\81еÑ\80Ñ\96лді деп белгілеу",
        "markaspatrolledtext": "Бұл бетті тексерілді деп белгілеу",
        "markedaspatrolled": "Тексерілді деп белгіленді",
        "markedaspatrolledtext": "Бөлектенген нұсқа [[:$1]] тексерілді деп белгіленді.",
        "rcpatroldisabled": "Жуықтағы өзгерістерді зерттеуі өшірілген",
        "rcpatroldisabledtext": "Жуықтағы өзгерістерді зерттеу мүмкіндігі ағымда өшірілген.",
        "markedaspatrollederror": "Зерттелді деп белгіленбейді",
-       "markedaspatrollederrortext": "Ð\97еÑ\80Ñ\82Ñ\82елді деп белгілеу үшін түзетуді келтіріңіз.",
+       "markedaspatrollederrortext": "ТекÑ\81еÑ\80Ñ\96лді деп белгілеу үшін түзетуді келтіріңіз.",
        "markedaspatrollederror-noautopatrol": "Өз жасаған өзгерістеріңізді зерттелді деп белгілей алмайсыз.",
        "markedaspatrollednotify": "$1 бетіндегі бұл өзгеріс тексерілді деп белгіленді.",
        "markedaspatrollederrornotify": "Тексерілді деп белгіленбеді.",
        "seconds-abbrev": "$1с",
        "minutes-abbrev": "$1мин",
        "hours-abbrev": "$1сағ",
-       "seconds": "{{PLURAL:$1|$1 секунт|$1 секунт}}",
+       "seconds": "{{PLURAL:$1|$1 секунд|$1 секунд}}",
        "minutes": "{{PLURAL:$1|$1 минут|$1 минут}}",
        "hours": "{{PLURAL:$1|$1 сағат|$1 сағат}}",
        "days": "{{PLURAL:$1|$1 күн|$1 күн}}",
        "size-bytes": "$1 байт",
        "size-kilobytes": "$1 КБ",
        "lag-warn-normal": "{{PLURAL:$1|секунтта|секунтта}} $1 жаңалау өзгерістер бұл тізімде көрсетілмеуі мүмкін.",
-       "lag-warn-high": "Дерекқор сервері көп кешігуі себебінен, $1 {{PLURAL:$1|секунтта|сеунтта}} жаңалау өзгерістер бұл тізімде көрсетілмеуі мүмкін.",
+       "lag-warn-high": "Дерекқор сервері көп кешігуі себебінен, $1 {{PLURAL:$1|секундтан|секундтан}} жаңалау өзгерістер бұл тізімде көрсетілмеуі мүмкін.",
        "watchlistedit-normal-title": "Бақылау тізімді өңдеу",
        "watchlistedit-normal-legend": "Бақылау тізімінен тақырып аттарын аластау",
        "watchlistedit-normal-explain": "Бақылау тізіміңіздегі тақырып аттар төменде көрсетіледі.\nТақырып атын аластау үшін, бүйір көзге құсбелгі салыңыз, және \"{{int:Watchlistedit-normal-submit}}\" дегенді нұқыңыз.\nТағы да [[Special:EditWatchlist/raw|қам тізімді өңдей]] аласыз.",
        "api-error-unknownerror": "Белгісіз қате: \"$1\".",
        "api-error-uploaddisabled": "Бұл уикиде жүктеп беру өшірілген.",
        "api-error-verification-error": "Бұл файл бүлінген болуы мүмкін немесе теріс кеңейтуі бар.",
-       "duration-seconds": "$1 {{PLURAL:$1|секунт|секунт}}",
+       "duration-seconds": "$1 {{PLURAL:$1|секунд|секунд}}",
        "duration-minutes": "$1 {{PLURAL:$1|минут|минут}}",
        "duration-hours": "$1 {{PLURAL:$1|сағат|сағат}}",
        "duration-days": "$1 {{PLURAL:$1|күн|күн}}",
        "rotate-comment": "Сурет сағат бағытымен $1 {{PLURAL:$1|бұрыш|бұрыш}} айналды",
        "limitreport-title": "Деректер анализаторы:",
        "limitreport-cputime": "CPU уақытында қолданылуы",
-       "limitreport-cputime-value": "$1 {{PLURAL:$1|секунт|секунт}}",
+       "limitreport-cputime-value": "$1 {{PLURAL:$1|секунд|секунд}}",
        "limitreport-walltime": "Нақты уақытта қолданылуы",
-       "limitreport-walltime-value": "$1 {{PLURAL:$1|секунт|секунт}}",
+       "limitreport-walltime-value": "$1 {{PLURAL:$1|секунд|секунд}}",
        "limitreport-ppvisitednodes": "Аралаған түйіндер саны",
        "limitreport-ppgeneratednodes": "Препроцессордың жинақталатын түйіндерінің саны",
        "limitreport-postexpandincludesize": "Кірістірілген ашық мөлшері",
        "log-description-pagelang": "Бұл бет тілдерін өзгерту журналы.",
        "logentry-pagelang-pagelang": "$1 $3 беті үшін $4 дегеннен $5 дегенге бет тілін {{GENDER:$2|өзгертті}}.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (ендірілген)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''өшірілген''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>өшірілген</strong>)",
        "mediastatistics": "Медиа статистикалары",
        "mediastatistics-summary": "Жүктелген файл түрлері туралы статистика. Бұл тек файлдың ең соңғы нұсқасын қамтиды немесе жойылған файлдың нұсқасын қамтылмаған.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 байт|$1 байт}} ($2; $3%)",
index daf9a74..b4a3d52 100644 (file)
@@ -4,7 +4,8 @@
                        "Atabek",
                        "GaiJin",
                        "Kaztrans",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Siltemeniñ astın sız:",
        "cascadeprotected": "Bul bet öñdewden qorğalğan, sebebi bul kelesi «bawlı qorğawı» qosılğan {{PLURAL:$1|bettiñ|betterdiñ}} kirikbeti:\n$2",
        "namespaceprotected": "'''$1''' esim ayasındağı betterdi öñdew üşin ruqsatıñız joq.",
        "ns-specialprotected": "{{ns:special}} esim ayasındağı better öñdelinbeýdi",
-       "titleprotected": "Bul taqırıp atı bastawdan [[{{ns:user}}:$1|$1]] qorğadı.\nKeltirilgen sebebi: ''$2''.",
+       "titleprotected": "Bul taqırıp atı bastawdan [[User:$1|$1]] qorğadı.\nKeltirilgen sebebi: <em>$2</em>.",
        "logouttext": "'''Endi jüýeden şıqtıñız.'''\n\nJüýege kirmesten {{SITENAME}} jobasın paýdalanwın jalğastıra alasız, nemese däl sol ne özge qatıswşı bop qaýta krwiñiz mümkin.\nAñğartpa: Keýbir better şolğışıñızdıñ bürkemesin tazartqanşa deýin äli de kirp qalğanıñızdaý körinwi mümkin.",
        "yourname": "Qatıswşı atıñız:",
        "yourpassword": "Qupïya söziñiz:",
        "right-blockemail": "Qatıswşınıñ xat jöneltwin buğattaw",
        "right-hideuser": "Barşadan jasırıp, qatıswşı atın buğattaw",
        "right-ipblock-exempt": "IP buğattawlardı, özbuğattawlardı jäne awqım buğattawlardı orağıtw",
-       "right-proxyunbannable": "Proksï serverlerdiñ özbuğattawların orağıtw",
        "right-protect": "Qorğaw deñgeýlerin özgertw jäne qorğalğan betterdi öñdew",
        "right-editprotected": "Qorğalğan betterdi öñdew (bawlı qorğawlarsız)",
        "right-editinterface": "Paýdalanwşılıq tildesiwin öñdew",
        "watchthisupload": "Bul betti baqılaw",
        "filewasdeleted": "Bul atawı bar faýl burın qotarıp berilgen de beri kele joýılğan.\nBunı qaýta qotarıp berw aldınan $1 degendi tekserip şığıñız.",
        "filename-bad-prefix": "Qotarıp bermek faýlıñızdıñ atawı '''«$1» ''' dep bastaladı, mınadaý sïpattawsız atawdı ädette sandıq kameralar özdiktik beredi.\nFaýlıñızğa sïpattılaw atawdı tañdañız.",
-       "upload-success-subj": "Sätti qotarıp berildi",
        "upload-proto-error": "Burıs xattama",
        "upload-proto-error-text": "Şetten qotarıp berw üşin URL jaýları <code>http://</code> nemese <code>ftp://</code> degenderden bastalw jön.",
        "upload-file-error": "İşki qate",
        "rollbackfailed": "Şegindirw sätsiz bitti",
        "cantrollback": "Öñdeme qaýtarılmadı;\nsoñğı üleskeri tek osı bettiñ bastawşısı boldı.",
        "alreadyrolled": "[[{{ns:user}}:$2|$2]] ([[{{ns:user_talk}}:$2|talqılawı]]) istegen [[:$1]] soñğı öñdemesi şegindirilmedi;\nbasqa birew bul betti aldaqaşan öñdegen ne şegindirgen.\n\nsoñğı öñdemesin [[{{ns:user}}:$3|$3]] ([[{{ns:user_talk}}:$3|talqılawı]]) istegen.",
-       "editcomment": "Bolğan öñdeme mändemesi: «''$1''».",
+       "editcomment": "Bolğan öñdeme mändemesi: <em>$1</em>.",
        "revertpage": "[[{{#special:Contributions}}/$2|$2]] ([[{{ns:user_talk}}:$2|talqılawı]]) öñdemelerinen [[{{ns:user}}:$1|$1]] soñğı nusqasına qaýtardı",
        "rollback-success": "$1 öñdemelerinen qaýtarğan;\n$2 soñğı nusqasına özgertti.",
        "sessionfailure": "Kirw sessïyasında şataq bolğan sïyaqtı;\nsessïyağa şabwıldawdardan qorğanw üşin, osı äreket toqtatıldı.\n«Artqa» degendi basıñız, jäne betti qaýta jükteñiz de, qaýta baýqap köriñiz.",
        "movelogpagetext": "Tömende jıljıtılğan betterdiñ tizimi berilip tur.",
        "movereason": "Sebebi:",
        "revertmove": "qaýtarw",
-       "delete_and_move": "Joyw jäne jıljıtw",
        "delete_and_move_text": "==Joyw kerek==\n«[[:$1]]» degen nısana bet aldaqaşan bar.\nJıljıtwğa jol berw üşin bunı joyasız ba?",
        "delete_and_move_confirm": "Ïä, bul betti joý",
        "delete_and_move_reason": "Jıljıtwğa jol berw üşin joýılğan",
index 2a957a0..e298a98 100644 (file)
        "myprivateinfoprotected": "អ្នកមិនមាន​ការអនុញ្ញាត​ក្នុងការកែប្រែព័ត៌មានផ្ទាល់ខ្លួនរបស់អ្នកទេ។",
        "mypreferencesprotected": "អ្នកមិនមាន​ការអនុញ្ញាត​ក្នុងការកែប្រែចំណង់ចំណូលចិត្តរបស់អ្នកទេ។",
        "ns-specialprotected": "ទំព័រពិសេសៗមិនអាចកែប្រែបានទេ។",
-       "titleprotected": "ចំណងជើងនេះត្រូវបានការពារមិនឱ្យបង្កើត​ដោយ [[User:$1|$1]]។\nហេតុផលលើកឡើងគឺ ''$2''។",
+       "titleprotected": "ចំណងជើងនេះត្រូវបានការពារមិនឱ្យបង្កើត​ដោយ [[User:$1|$1]]។\nហេតុផលលើកឡើងគឺ <em>$2</em>។",
        "filereadonlyerror": "មិនអាចកែប្រែឯកសារ \"$1\" បានទេពីព្រោះថតឯកសារ \"$2\" ស្ថិតក្នុងម៉ូដសំរាប់តែអានប៉ុណ្ណោះ។\n\nអភិបាលដែលបានចាក់សោរវាបានផ្ដល់សេចក្ដីពន្យល់បែបនេះ៖ \"$3\"។",
        "invalidtitle-knownnamespace": "ចំណងជើងមិនត្រឹមត្រូវដែលមានលំហឈ្មោះ \"$2\" និងអត្ថបទ \"$3\"",
        "invalidtitle-unknownnamespace": "ចំណងជើងមិនត្រឹមត្រូវដែលមានលំហឈ្មោះមិនស្គាល់លេខ $1 និងអត្ថបទ \"$2\"",
        "passwordreset-emailtext-ip": "មាននរណាម្នាក់ (ប្រហែលជាខ្លួនអ្នកផ្ទាល់, មកពីអាស័យដ្ឋាន IP $1) បានស្នើសុំស្ដារពាក្យសម្ងាត់របស់អ្នកសម្រាប់ {{SITENAME}} ($4)។ {{PLURAL:$3|គណនី|គណនី}}អ្នកប្រើប្រាស់ដូចតទៅនេះ\nមានជាប់ទាក់ទិននឹងអាសយដ្ឋានអ៊ីមែលនេះ៖\n\n$2\n\n{{PLURAL:$3|ពាក្យសម្ងាត់បណ្ដោះអាសន្ននេះ|ពាក្យសម្ងាត់បណ្ដោះអាសន្នទាំងនេះ}} និងហួសសុពលភាពក្នុងរយៈពេល {{PLURAL:$5|មួយថ្ងៃ|$5 ថ្ងៃ}}។\nយកល្អអ្នកគួរតែកត់ឈ្មោះចូលរួចជ្រើសរើសពាក្យសម្ងាត់ថ្មីមួយ។ ប្រសិនបើមាននរណាម្នាក់ផ្សេងធ្វើការស្នើសុំនេះ \nឬប្រសិនបើអ្នកនឹកឃើញពាក្យសម្ងាត់ដើមរបស់អ្នក ហើយអ្នកមិនប្រាថ្នាផ្លាស់ប្ដូរវាទៀតទេនោះ អ្នកគ្រាន់តែ\nបំភ្លេចអំពីសារមួយនេះ ហើយបន្តប្រើប្រាស់ពាក្យសម្ងាត់ចាស់របស់អ្នកទៅបានហើយ។",
        "passwordreset-emailtext-user": "អ្នកប្រើប្រាស់ $1 នៅក្នុង {{SITENAME}} បានស្នើសុំស្ដារពាក្យសម្ងាត់របស់អ្នកនៅក្នុង {{SITENAME}} ($4)។\n {{PLURAL:$3|គណនី|គណនី}}អ្នកប្រើប្រាស់ដូចតទៅនេះមានជាប់ទាក់ទិននឹងអាសយដ្ឋានអ៊ីមែលនេះ៖\n\n$2\n\n{{PLURAL:$3|ពាក្យសម្ងាត់បណ្ដោះអាសន្ននេះ|ពាក្យសម្ងាត់បណ្ដោះអាសន្នទាំងនេះ}} និងហួសសុពលភាពក្នុងរយៈពេល {{PLURAL:$5|មួយថ្ងៃ|$5 ថ្ងៃ}}។\nយកល្អអ្នកគួរតែកត់ឈ្មោះចូលរួចជ្រើសរើសពាក្យសម្ងាត់ថ្មីមួយ។ ប្រសិនបើមាននរណាម្នាក់ផ្សេងធ្វើការស្នើសុំនេះ \nឬប្រសិនបើអ្នកនឹកឃើញពាក្យសម្ងាត់ដើមរបស់អ្នក ហើយអ្នកមិនប្រាថ្នាផ្លាស់ប្ដូរវាទៀតទេនោះ អ្នកគ្រាន់តែ\nបំភ្លេចអំពីសារមួយនេះ ហើយបន្តប្រើប្រាស់ពាក្យសម្ងាត់ចាស់របស់អ្នកទៅបានហើយ។",
        "passwordreset-emailelement": "អត្តនាម៖ \n$1\n\nពាក្យសម្ងាត់បណ្ដោះអាសន្ន៖ \n$2",
-       "passwordreset-emailsent": "បើសិនជានេះអាសយដ្ឋានអ៊ីមែលដែលត្រូវបានចុះឈ្មោះសម្រាប់គណនីរបស់អ្នក នោះអ៊ីមែលសម្រាប់ស្ដារពាក្យសម្ងាត់មួយនឹងត្រូវបានផ្ញើទៅ។",
+       "passwordreset-emailsentemail": "បើសិនជានេះអាសយដ្ឋានអ៊ីមែលដែលត្រូវបានចុះឈ្មោះសម្រាប់គណនីរបស់អ្នក នោះអ៊ីមែលសម្រាប់ស្ដារពាក្យសម្ងាត់មួយនឹងត្រូវបានផ្ញើទៅ។",
        "passwordreset-emailsent-capture": "អ៊ីមែលស្ដារពាក្យសម្ងាត់មួយដូចបង្ហាញខាងក្រោមត្រូវបានផ្ញើទៅហើយ។",
        "passwordreset-emailerror-capture": "អ៊ីមែលស្ដារពាក្យសម្ងាត់មួយដូចបង្ហាញខាងក្រោមត្រូវបានបង្កើតហើយ ប៉ុន្តែការផ្ញើទៅកាន់ {{GENDER:$2|អ្នកប្រើប្រាស់}}មិនបានសំរេចទេ៖ $1",
        "changeemail": "ផ្លាស់ប្ដូរឬលុបអាសយដ្ឋានអ៊ីមែល",
        "prefs-diffs": "ភាពខុសគ្នា",
        "prefs-help-prefershttps": "ចំណង់ចំណូលចិត្តនេះនឹងមានប្រសិទ្ធិភាពពេលអ្នកកត់ឈ្មោះចូលលើកក្រោយ។",
        "prefswarning-warning": "អ្នកបានកែប្រែចំណង់ចំណូលចិត្តតែមិនទាន់បានរក្សាទុកទេ។ បើសិនជាអ្នកចាកចេញពីទំព័រនេះដោយមិនបានចុច \"$1\" ទេនោះចំណង់ចំណូលចិត្តរបស់អ្នកនឹងមិនត្រូវបន្ទាន់សម័យទេ។",
-       "email-address-validity-valid": "អាសយដ្ឋានអ៊ីមែលហាក់មានសុពលភាព",
-       "email-address-validity-invalid": "បញ្ចូលអាសយដ្ឋានអ៊ីមែលដែលមានសុពលភាព",
        "userrights": "ការគ្រប់គ្រងសិទ្ធិអ្នកប្រើប្រាស់",
        "userrights-lookup-user": "គ្រប់គ្រងក្រុមអ្នកប្រើប្រាស់",
        "userrights-user-editname": "បញ្ចូលអត្តនាម៖",
        "right-blockemail": "ហាមឃាត់អ្នកប្រើប្រាស់ម្នាក់មិនអោយផ្ញើអ៊ីមែល",
        "right-hideuser": "ហាមឃាត់អ្នកប្រើប្រាស់ម្នាក់ រួចលាក់មិនអោយបង្ហាញជាសាធារណៈ",
        "right-ipblock-exempt": "ការហាមឃាត់IPជាប្រយោល ការហាមឃាត់ស្វ័យប្រវត្តិនិងការហាមឃាត់មានកំរិត",
-       "right-proxyunbannable": "ពង្វាងការរាំងខ្ទប់ស្វ័យប្រវត្តិរបស់ប្រុកស៊ី",
        "right-unblockself": "ឈប់រាំងខ្ទប់នរណាម្នាក់",
        "right-protect": "ប្ដូរកម្រិតការពាររួចកែប្រែទំព័រដែលបានការពារជាថ្នាក់",
        "right-editprotected": "កែប្រែទំព័រដែលបានការពារដោយ \"{{int:protect-level-sysop}}\"",
        "recentchanges-label-bot": "ការកែប្រែនេះត្រូវបានធ្វើឡើងដោយរូបយន្ត",
        "recentchanges-label-unpatrolled": "ការកែប្រែនេះមិនទាន់ត្រូវបានល្បាតទេ",
        "recentchanges-label-plusminus": "ទំហំទំព័រត្រូវបានផ្លាស់ប្ដូរគិតជាចំនួនបៃ",
-       "recentchanges-legend-heading": "''កំណត់សម្គាល់៖'''",
+       "recentchanges-legend-heading": "<strong>កំណត់សម្គាល់៖</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (មើលផងដែរនូវ [[Special:NewPages|បញ្ជីទំព័រថ្មី]])",
        "rcnotefrom": "ខាងក្រោមនេះជាបន្លាស់ប្ដូរនានាគិតចាប់តាំងពី <strong>$4 $3</strong> (បង្ហាញអតិបរមាចំនួន <strong>$1</strong>)។",
        "rclistfrom": "បង្ហាញបន្លាស់ប្ដូរថ្មីៗចាប់តាំងពី $3 $2",
        "filewasdeleted": "ឯកសារដែលមានឈ្មោះនេះត្រូវបានដាក់បញ្ចេញមុននេះ ហើយក៏ត្រូវបានគេលុបចេញទៅវិញផងដែរ។​​​​ អ្នកគួរតែពិនិត្យ$1​មុននឹង​បន្តបញ្ចេញ​វាម្តង​ទៀត​។​",
        "filename-bad-prefix": "ឈ្មោះរបស់រូបភាពដែលអ្នកបានផ្ទុកឡើងចាប់ផ្ដើមដោយតួអក្សរ '''\"$1\"''' ដែលនេះជាឈ្មោះមិនបរិយាយអោយរូបភាព (ជាធម្មតាជាឈ្មោះកាមេរ៉ាឌីជីថលដាក់អោយដោយស្វ័យប្រវត្តិ)។\n\nសូមជ្រើសរើសឈ្មោះដែលបរិយាយអោយរូបភាពរបស់អ្នក។",
        "filename-prefix-blacklist": "  #<!-- leave this line exactly as it is --> <pre>\n# Syntax is as follows:\n#  * Everything from a \"#\" character to the end of the line is a comment\n#  * Every non-blank line is a prefix for typical file names assigned automatically by digital cameras\nCIMG # ម៉ាក Casio\nDSC_ # ម៉ាក Nikon\nDSCF # ម៉ាក Fuji\nDSCN # ម៉ាក Nikon\nDUW # ទូរស័ព្ទ​ចល័ត​នានា​\nIMG # ទូទៅ​\nJD # Jenoptik\nMGP # ម៉ាក Pentax\nPICT # ផ្សេង​ៗ​\n  #</pre> <!-- leave this line exactly as it is -->",
-       "upload-success-subj": "ផ្ទុកឯកសារឡើងបានសម្រេច",
-       "upload-success-msg": "ការផ្ទុកឡើងរបស់អ្នកពី [$2] បានសម្រេចហើយ។ អ្នកអាចរកវាបាននៅទៅនេះ៖ [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "បញ្ហាក្នុងការផ្ទុកឡើង",
-       "upload-failure-msg": "មានបញ្ហាមួយជាមួយការផ្ទុកឡើងរបស់អ្នកពី [$2]៖\n\n$1",
-       "upload-warning-subj": "ការព្រមានស្ដីពីការផ្ទុកឡើង",
-       "upload-warning-msg": "មានបញ្ហាកើតឡើងជាមួយការផ្ទុកឡើងពី [$2] របស់អ្នក។ អ្នកអាចត្រលប់ទៅ[[Special:Upload/stash/$1|សំនុំបែបបទផ្ទុកឡើង]] ដើប្បីដោះស្រាយបញ្ហានេះ។",
        "upload-proto-error": "ប្រូតូខូលមិនត្រឹមត្រូវ",
        "upload-proto-error-text": "ការផ្ទុកឡើងពីចម្ងាយត្រូវការ URL ដែលចាប់ផ្ដើមដោយ <code>http://</code> ឬ <code>ftp://</code>។",
        "upload-file-error": "បញ្ហាផ្នែកខាងក្នុង",
        "upload-dialog-button-done": "រួចរាល់",
        "upload-dialog-button-save": "រក្សាទុក",
        "upload-dialog-button-upload": "ផ្ទុកឡើង",
-       "upload-form-label-select-file": "ជ្រើសរើសឯកសារ",
        "upload-form-label-infoform-title": "ព័ត៌មាន​លំអិត",
        "upload-form-label-infoform-name": "ឈ្មោះ​",
        "upload-form-label-infoform-description": "ការ​ពិពណ៌នា",
        "querypage-disabled": "ទំព័រពិសេសនេះត្រូវបានបិទមិនអោយប្រើដោយសារមូលហេតុដំណើរការ។",
        "apihelp": "ជំនួយAPI",
        "apihelp-no-such-module": "រកមិនឃើញម៉ូឌុល \"$1\" ទេ។",
+       "apisandbox-submit": "ដាក់សំណើ",
+       "apisandbox-reset": "ជម្រះ",
+       "apisandbox-examples": "ឧទាហរណ៍",
+       "apisandbox-request-time": "រយៈពេលធ្វើសំណើ៖ $1",
        "booksources": "ប្រភពសៀវភៅ",
        "booksources-search-legend": "ស្វែងរកប្រភពសៀវភៅ",
        "booksources-isbn": "លេខ​កូដ​សៀវ​ភៅ​ ISBN ៖",
        "rollbackfailed": "ការ​ត្រឡប់​ក្រោយមិនបានសំរេច",
        "cantrollback": "មិនអាចត្រឡប់កំណែប្រែ។ អ្នករួមចំណែកចុងក្រោយទើបជាអ្នកនិពន្ធ​របស់ទំព័រនេះ។",
        "alreadyrolled": "មិនអាចធ្វើការត្រឡប់ [[:$1]] ទៅកាន់កំណែចុងក្រោយរបស់អ្នកប្រើឈ្មោះ [[User:$2|$2]] ([[User talk:$2|ការពិភាក្សា]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ទេ។\n\nមាននរណាម្នាក់បានកែប្រែឬត្រឡប់ទំព័រនោះរួចហើយ។\n\nកំណែប្រែចុងក្រោយរបស់ទំព័រនេះធ្វើឡើងដោយអ្នកប្រើឈ្មោះ [[User:$3|$3]] ([[User talk:$3|ការពិភាក្សា]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])។",
-       "editcomment": "ចំណារពន្យល់ពីការកែប្រែគឺ៖ \"''$1''\"។",
+       "editcomment": "ចំណារពន្យល់ពីការកែប្រែគឺ៖ <em>$1</em>។",
        "revertpage": "បានត្រឡប់កំណែប្រែដោយ[[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) ទៅកំណែប្រែចុងក្រោយដោយ [[User:$1|$1]]",
        "rollback-success": "កំណែ​ដែល​ត្រូវ​បាន​ត្រឡប់​ដោយ​ $1។\nបាន​ផ្លាស់​ប្ដូរ​ទៅ​កំណែ​ចុង​ក្រោយ​វិញ​ដោយ $2។",
        "protectlogpage": "កំណត់ហេតុនៃការការពារ",
        "movenosubpage": "ទំព័រនេះគ្មានទំព័ររងទេ។",
        "movereason": "មូលហេតុ៖",
        "revertmove": "ត្រឡប់",
-       "delete_and_move": "លុបនិងប្តូរទីតាំង",
        "delete_and_move_text": "==ការលុបជាចាំបាច់==\n\"[[:$1]]\"ដែលជាទីតាំងទំព័រត្រូវបញ្ជូនទៅ មានរួចជាស្រេចហើយ។\nតើអ្នកចង់លុបវាដើម្បីជាវិធីសម្រាប់ប្តូរទីតាំងទេ?",
        "delete_and_move_confirm": "យល់ព្រម​លុប​ទំព័រ​នេះ",
        "delete_and_move_reason": "ត្រូវបានលុបដើម្បីផ្លាស់ប្តូរទីតាំងពី \"[[$1]]\"",
index 98c3c68..a090015 100644 (file)
@@ -25,7 +25,8 @@
                        "아라",
                        "Pavanaja",
                        "Ananth subray",
-                       "MarcoAurelio"
+                       "MarcoAurelio",
+                       "Macofe"
                ]
        },
        "tog-underline": "ಕೊಂಡಿಗಳ ಕೆಳಗೆ ಗೆರೆ ತೋರಿಸಿ",
        "myprivateinfoprotected": "ನಿಮ್ಮ ಸೂಕ್ಷ್ಮ ವಿಚಾರಗಳನ್ನು ಸಂಪಾದಿಸಲು ನಿಮಗೆ ಅನುಮತಿ ಇಲ್ಲ.",
        "mypreferencesprotected": "ನಿಮ್ಮ ಆಯ್ಕೆಗಳನ್ನು  ಸಂಪಾದಿಸಲು ನಿಮಗೆ ಅನುಮತಿ ಇಲ್ಲ",
        "ns-specialprotected": "ವಿಶೇಷ ಪುಟಗಳನ್ನು ಸಂಪಾದಿಸಲು ಆಗುವುದಿಲ್ಲ.",
-       "titleprotected": "ಈ ಹೆಸರಿನ ಪುಟವನ್ನು ಸೃಷ್ಟಿಸಲಾಗದಂತೆ [[User:$1|$1]] ಅವರು ಸಂರಕ್ಷಿಸಿದ್ದಾರೆ.\nಸಂರಕ್ಷಣೆಗೆ ನೀಡಿರುವ ಕಾರಣ: ''$2''.",
+       "titleprotected": "ಈ ಹೆಸರಿನ ಪುಟವನ್ನು ಸೃಷ್ಟಿಸಲಾಗದಂತೆ [[User:$1|$1]] ಅವರು ಸಂರಕ್ಷಿಸಿದ್ದಾರೆ.\nಸಂರಕ್ಷಣೆಗೆ ನೀಡಿರುವ ಕಾರಣ: <em>$2</em>.",
        "filereadonlyerror": "\"$1\" ಕಡತವು ಓದಲು ಮಾತ್ರ ಸಾದ್ಯವಿರುವ ರೀತಿಯಲ್ಲಿರುವ\"$2\" ಸಂಪುಟದಲ್ಲಿರುವುದರಿಂದ ಇದನ್ನು  ಮಾರ್ಪಡಿಸಲು ಸಾದ್ಯವಾಗುತ್ತಿಲ್ಲ.\nಇದನ್ನು ಬದ್ದಗೊಳಿಸಿರುವ ನಿರ್ವಾಹಕರು \"$3\" ಈ ವಿವರಣೆಯನ್ನು ನೀಡುತ್ತಿದ್ದಾರೆ.",
        "invalidtitle-knownnamespace": "\"$2\"ನೇಮ್ ಸ್ಪೇಸ್ ಮತ್ತು \"$3\"ಪಠ್ಯದೊಂದಿಗೆ ಅಸಮಂಜಸ ತಲೆಬರಹ",
        "invalidtitle-unknownnamespace": "$1ನೇಮ್ ಸ್ಪೇಸ್ ಮತ್ತು \"$2\"ಪಠ್ಯದೊಂದಿಗೆ ಅಸಮಂಜಸ ತಲೆಬರಹ",
        "yourname": "ನಿಮ್ಮ ಬಳಕೆಯ ಹೆಸರು",
        "userlogin-yourname": "ಬಳಕೆದಾರ ಹೆಸರು",
        "userlogin-yourname-ph": "ನಿಮ್ಮ ಸದಸ್ಯನಾಮ ಬರೆಯಿರಿ",
-       "createacct-another-username-ph": "ಸದಸà³\8dಯನಾಮ (\"ಯà³\8bಸರà³\8dನà³\87ಮà³\8d\") à²¬à²°ಿರಿ",
+       "createacct-another-username-ph": "ಬಳà²\95à³\86ದಾರರ à²¹à³\86ಸರà³\81 à²¬à²°à³\86ಯಿರಿ",
        "yourpassword": "ನಿಮ್ಮ ಪ್ರವೇಶಪದ",
        "userlogin-yourpassword": "ಪ್ರವೇಶಪದ",
        "userlogin-yourpassword-ph": "ನಿಮ್ಮ ಪ್ರವೇಶಪದ ನಮೂದಿಸಿ",
        "createacct-realname": "ನಿಜವಾದ ಹೆಸರು (ಐಚ್ಛಿಕ)",
        "createaccountreason": "ಕಾರಣ:",
        "createacct-reason": "ಕಾರಣ",
-       "createacct-reason-ph": "ನà³\80ವà³\81 à²¯à²¾à²\95à³\86 à²\87ನà³\8dನà³\81 à²\92à²\82ದà³\81 à²\96ಾತ à²®à²¾à²¡à³\81ತ à²\87ದà³\8dದà³\80ರಿ ?",
+       "createacct-reason-ph": "ನà³\80ವà³\81 à²¯à²¾à²\95à³\86 à²\87ನà³\8dನà³\8aà²\82ದà³\81 à²\96ಾತà³\86 à²¤à³\86ರà³\86ಯà³\81ತà³\8dತಿದà³\8dದà³\80ರಿ",
        "createacct-submit": "ಖಾತೆಯನ್ನು ಸೃಷ್ಟಿಸಿ",
        "createacct-another-submit": "ಇನ್ನು ಒಂದು ಖಾತ ಮಾಡಿ",
-       "createacct-benefit-heading": "{{SITENAME}} à²¨à²¿à²®à³\8dಮನà³\8dತವà³\86 à²\9cನರಿà²\82ದ à²®à²¾à²¡à²¿à²¦à³\81",
+       "createacct-benefit-heading": "{{SITENAME}} à²¨à²¿à²®à³\8dಮà²\82ತಹ à²\9cನರಿà²\82ದಲà³\87 à²®à²¾à²¡à²¿à²¦à³\8dದà³\81.",
        "createacct-benefit-body1": "{{PLURAL:$1|ಸಂಪಾದನೆ|ಸಂಪಾದನೆಗಳು}}",
        "createacct-benefit-body2": "{{PLURAL:$1|ಪುಟ|ಪುಟಗಳು}}",
        "createacct-benefit-body3": "{{PLURAL:$1|ಕೊಡುಗೆ|ಕೊಡುಗೆಗಳು}}",
        "recentchanges-label-bot": "ಈ ಸಂಪಾದನೆಯನ್ನು ಒಂದು ಬಾಟ್ ಮಾಡಿದೆ",
        "recentchanges-label-unpatrolled": "ಈ ಸಂಪಾದನೆಯನ್ನು ಇನ್ನೂ ಪರೀಕ್ಷೆಗೆ ಒಳಪಡಿಸಿಲ್ಲ",
        "recentchanges-label-plusminus": "ಪುಟದ ಗಾತ್ರವು ಇಷ್ಟು ಸಂಖ್ಯೆಯ ಬೈಟ್‍ಗಳಿಂದ ಬದಲಾಯಿಸಲ್ಪಟ್ಟಿದೆ",
-       "recentchanges-legend-heading": "'''ಪರಿವಿಡಿ:'''",
+       "recentchanges-legend-heading": "<strong>ಪರಿವಿಡಿ:</strong>",
        "rcnotefrom": "'''$2''' ಇಂದ ಆಗಿರುವ ಬದಲಾವಣೆಗಳು ಕೆಳಗಿವೆ (ಕೊನೆಯ '''$1'''ರವರೆಗೆ ತೋರಿಸಲಾಗಿದೆ).",
        "rclistfrom": "$3 $2 ಇಂದ ಪ್ರಾರಂಭಿಸಿ ಮಾಡಲಾದ ಬದಲಾವಣೆಗಳನ್ನು ನೋಡಿ",
        "rcshowhideminor": "ಚಿಕ್ಕಪುಟ್ಟ ಬದಲಾವಣೆಗಳನ್ನು $1",
        "upload-options": "ಅಪ್ಲೋಡ್ ಆಯ್ಕೆಗಳು",
        "watchthisupload": "ಈ ಪುಟವನ್ನು ವೀಕ್ಷಿಸಿ",
        "filewasdeleted": "ಈ ಹೆಸರಿನ ಫೈಲು ಮುಂಚೆ ಅಪ್ಲೋಡ್ ಮಾಡಲಾಗಿ ಅದನ್ನು ಆನಂತರ ಅಳಿಸಲಾಗಿತ್ತು.\nಇದನ್ನು ಮತ್ತೊಮ್ಮೆ ಅಪ್ಲೋಡ್ ಮಾಡುವ ಮುನ್ನ ನೀವು $1 ಅನ್ನು ಪರೀಕ್ಷಿಸಬೇಕು.",
-       "upload-success-subj": "ಯಶಸ್ವಿ ಅಪ್ಲೋಡ್",
-       "upload-failure-subj": "ಅಪ್ಲೋಡ್ ಸಮಸ್ಯೆ",
-       "upload-warning-subj": "ಅಪ್ಲೋಡ್ ಎಚ್ಚರಿಕೆ",
        "upload-file-error": "ಆಂತರಿಕ ದೋಷ",
        "upload-file-error-text": "ಸರ್ವರ್‍ನಲ್ಲಿ ತಾತ್ಕಾಲಿಕ ಫೈಲನ್ನು ಸೃಷ್ಟಿಸುವಲ್ಲಿ ಒಂದು ಆಂತರಿಕ ದೋಷವಾಯಿತು.\nದಯವಿಟ್ಟು ವ್ಯವಸ್ಥಾಪಕರೊಬ್ಬರನ್ನು ಸಂಪರ್ಕಿಸಿ.",
        "upload-misc-error": "ತಿಳಿದಿಲ್ಲದ ಅಪ್ಲೋಡ್ ದೋಷ",
        "wlheader-enotif": "ಮಿಂಚಂಚೆ ಸೂಚನೆಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ.",
        "wlheader-showupdated": "ನೀವು ಕೊನೆಯ ಬಾರಿ ಭೇಟಿ ನೀಡಿದ ನಂತರ ಬದಲಾವಣೆಗಳು ಆಗಿರುವ ಪುಟಗಳು '''ದಪ್ಪ ಅಕ್ಷರಗಳಲ್ಲಿ''' ತೋರಿಸಲಾಗಿದೆ",
        "wlshowlast": "ಕೊನೆಯ $1 ಗಂಟೆ $2 ದಿನಗಳು  ಅನ್ನು ತೋರಿಸು",
-       "watchlistall2": "ಎಲ್ಲಾ",
        "watchlist-options": "ವೀಕ್ಷಣಾಪಟ್ಟಿ ಆಯ್ಕೆಗಳು",
        "watching": "ವೀಕ್ಷಣೆಗೆ ಸೇರಿಸಲಾಗುತ್ತಿದೆ...",
        "unwatching": "ವೀಕ್ಷಣೆಯಿಂದ ತೆಗೆಯಲಾಗುತ್ತಿದೆ...",
index 4cf2d2c..8dcbb02 100644 (file)
                        "Yearning",
                        "고솜",
                        "Sternradio",
-                       "Joolee0104"
+                       "Joolee0104",
+                       "Mooozi",
+                       "Ellif",
+                       "HDNua"
                ]
        },
        "tog-underline": "링크에 밑줄:",
        "tog-hideminor": "최근 바뀜에서 사소한 편집을 숨기기",
        "tog-hidepatrolled": "최근 바뀜에서 점검한 편집을 숨기기",
        "tog-newpageshidepatrolled": "새 문서 목록에서 검토한 문서를 숨기기",
-       "tog-hidecategorization": "페이지 류 숨기기",
+       "tog-hidecategorization": "페이지 류 숨기기",
        "tog-extendwatchlist": "주시문서 목록에서 가장 최근의 편집만이 아닌 모든 편집을 보기",
        "tog-usenewrc": "최근 바뀜과 주시문서 목록의 문서별 그룹 바뀜",
        "tog-numberheadings": "자동으로 머릿글 번호 매기기",
        "tog-showtoolbar": "편집 도구 모음 보이기",
        "tog-editondblclick": "더블 클릭으로 문서 편집하기",
        "tog-editsectiononrightclick": "제목을 오른쪽 클릭해서 문단 편집하기 활성화",
-       "tog-watchcreations": "ë\82´ê°\80 ë§\8cë\93\9cë\8a\94 문서와 내가 올린 파일을 주시문서 목록에 추가",
+       "tog-watchcreations": "ë\82´ê°\80 ë§\8cë\93  문서와 내가 올린 파일을 주시문서 목록에 추가",
        "tog-watchdefault": "내가 편집하는 문서와 파일을 주시문서 목록에 추가",
        "tog-watchmoves": "내가 이동하는 문서와 파일을 주시문서 목록에 추가",
        "tog-watchdeletion": "내가 삭제하는 문서와 파일을 주시문서 목록에 추가",
        "policy-url": "Project:정책",
        "portal": "사용자 모임",
        "portal-url": "Project:사용자 모임",
-       "privacy": "개인 정보 정책",
-       "privacypage": "Project:개인 정보 정책",
+       "privacy": "개인정보 정책",
+       "privacypage": "Project:개인정보 정책",
        "badaccess": "권한 오류",
        "badaccess-group0": "요청한 명령을 실행할 권한이 없습니다.",
        "badaccess-groups": "요청한 명령은 {{PLURAL:$2|다음|다음 중 하나의}} 권한을 가진 사용자에게 제한됩니다: $1.",
        "mainpage-nstab": "대문",
        "nosuchaction": "이러한 명령이 없습니다",
        "nosuchactiontext": "URL에 지정한 명령이 올바르지 않습니다.\nURL을 잘못 입력했거나, 올바르지 않은 링크를 따라갔을 수 있습니다.\n{{SITENAME}}에 사용하는 소프트웨어의 버그가 있을 수 있습니다.",
-       "nosuchspecialpage": "해당하는 특수 문서가 없습니다.",
+       "nosuchspecialpage": "해당하는 특수 문서가 없습니다",
        "nospecialpagetext": "<strong>요청한 특수 문서가 존재하지 않습니다.</strong>\n\n특수 문서의 목록은 [[Special:SpecialPages|여기]]에서 볼 수 있습니다.",
        "error": "오류",
        "databaseerror": "데이터베이스 오류",
        "missingarticle-rev": "(판번호: $1)",
        "missingarticle-diff": "(차이: $1, $2)",
        "readonly_lag": "슬레이브 데이터베이스가 마스터 서버의 자료를 새로 고치는 중입니다. 데이터베이스가 자동으로 잠겨져 있습니다",
+       "nonwrite-api-promise-error": "'Promise-Non-Write-API-Action' HTTP 헤더가 붙어있지만 API 쓰기 모듈에 대한 요청을 했습니다.",
        "internalerror": "내부 오류",
        "internalerror_info": "내부 오류: $1",
        "internalerror-fatal-exception": "종류 \"$1\"에서 심각한 오류",
        "title-invalid-interwiki": "요청한 페이지 제목에 제목에는 사용될 수 없는 위키간 링크가 있습니다.",
        "title-invalid-talk-namespace": "요청한 페이지 제목이 존재하지 않는 토론 문서를 가리킵니다.",
        "title-invalid-characters": "요청된 문서 제목이 잘못된 문자를 포함하고 있습니다: \"$1\".",
+       "title-invalid-relative": "제목에 상대 경로가 있습니다. 제목에 상대 경로를 쓰는 것은 적절하지 않습니다. 제목에 붙은 상대 경로는 사용자 브라우저에서 제대로 인식하지 못할 수도 있습니다.",
+       "title-invalid-magic-tilde": "요청한 문서의 제목에 적절하지 못한 특수 물결 문자열(magic tilde sequence; <nowiki>~~~</nowiki>)이 들어있습니다.",
        "title-invalid-too-long": "페이지 제목이 너무 깁니다. 페이지 제목 길이는 최대 $1 까지 설정할 수 있습니다.",
        "title-invalid-leading-colon": "페이지 제목에 잘못된 문자가 포함되어 있습니다.",
        "perfcached": "다음 자료는 캐시된 것이며 최신이 아닐 수 있습니다. 캐시에 최대 {{PLURAL:$1|결과 한 개|결과 $1개}}가 있습니다.",
        "myprivateinfoprotected": "내 개인 정보를 편집할 권한이 없습니다.",
        "mypreferencesprotected": "내 환경 설정을 편집할 권한이 없습니다.",
        "ns-specialprotected": "특수 문서는 편집할 수 없습니다.",
-       "titleprotected": "[[User:$1|$1]] 사용자가 문서 만들기를 금지했습니다.\n이유는 다음과 같습니다. \"$2\"",
+       "titleprotected": "[[User:$1|$1]] 사용자가 문서 만들기를 금지했습니다.\n이유는 다음과 같습니다. <em>$2</em>",
        "filereadonlyerror": "\"$2\" 파일 저장소가 읽기 전용이기 때문에 \"$1\" 파일을 바꿀 수 없습니다.\n\n저장소 관리자가 파일 저장소를 잠근 이유에 대한 설명을 남겼습니다: \"$3\".",
        "invalidtitle-knownnamespace": "제목 오류: \"$2\" 이름공간과 \"$3\" 텍스트",
        "invalidtitle-unknownnamespace": "제목 오류: 알 수 없는 $1 이름공간 번호와, \"$2\" 텍스트",
        "nocookieslogin": "{{SITENAME}}에서는 로그인을 위해 쿠키를 사용합니다.\n쿠키가 비활성되어 있습니다.\n쿠키 사용을 활성화한 다음 다시 시도하세요.",
        "nocookiesfornew": "요청의 출처를 확인할 수 없기 때문에 사용자 계정이 만들어지지 않았습니다.\n쿠키를 활성화한 것을 확인하고, 이 문서를 새로 고치고 나서 다시 시도하세요.",
        "noname": "사용자 계정 이름이 올바르지 않습니다.",
-       "loginsuccesstitle": "로그인 성공",
+       "loginsuccesstitle": "로그인",
        "loginsuccess": "<strong>{{SITENAME}}에 \"$1\" 계정으로 로그인했습니다.</strong>",
-       "nosuchuser": "\"$1\" 사용자가 존재하지 않습니다.\n사용자 계정 이름은 대소문자를 구별합니다.\n철자가 맞는지 확인해주세요. [[Special:UserLogin/signup|새 계정을 만들 수도 있습니다]].",
+       "nosuchuser": "이름이 \"$1\"인 사용자는 없습니다.\n사용자 계정 이름은 대소문자를 구별합니다.\n철자가 맞는지 확인해주세요. [[Special:UserLogin/signup|새 계정을 만들 수도 있습니다]].",
        "nosuchusershort": "이름이 \"$1\"인 사용자는 없습니다.\n철자가 맞는지 확인하세요.",
        "nouserspecified": "사용자 계정 이름을 입력하지 않았습니다.",
        "login-userblocked": "이 사용자는 차단되었습니다. 로그인할 수 없습니다.",
        "newpassword": "새 비밀번호:",
        "retypenew": "새 비밀번호 다시 입력:",
        "resetpass_submit": "비밀번호를 설정하고 로그인하기",
-       "changepassword-success": "비밀번호가 성공적으로 바뀌었습니다!",
+       "changepassword-success": "비밀번호가 바뀌었습니다!",
        "changepassword-throttled": "최근 너무 많이 로그인을 시도했습니다.\n$1 뒤에 다시 시도하세요.",
        "botpasswords": "봇 비밀번호",
+       "botpasswords-disabled": "봇 비밀번호가 비활성화되었습니다.",
+       "botpasswords-existing": "기존의 봇 비밀번호",
+       "botpasswords-createnew": "새로운 봇 비밀번호 만들기",
+       "botpasswords-editexisting": "기존의 봇 비밀번호 편집하기",
+       "botpasswords-label-appid": "봇 이름:",
+       "botpasswords-label-create": "만들기",
+       "botpasswords-label-update": "갱신",
+       "botpasswords-label-cancel": "취소",
+       "botpasswords-label-delete": "삭제",
+       "botpasswords-label-resetpassword": "비밀번호 재설정",
+       "botpasswords-label-grants": "적용할 수 있는 부여:",
+       "botpasswords-label-restrictions": "사용 제한:",
+       "botpasswords-label-grants-column": "승인됨",
+       "botpasswords-bad-appid": "\"$1\"이라는 봇 이름은 유효하지 않습니다.",
+       "botpasswords-insert-failed": "\"$1\" 봇 이름을 추가하는데 실패했습니다. 이미 등록되지 않았는지 확인하기 바랍니다.",
+       "botpasswords-update-failed": "\"$1\" 봇 이름을 갱신하는데 실패했습니다. 이미 삭제되지 않았는지 확인하기 바랍니다.",
+       "botpasswords-created-title": "봇 비밀번호 생성",
+       "botpasswords-created-body": "사용자 \"$2\"의 \"$1\"라는 이름의 봇 비밀번호가 만들어졌습니다.",
+       "botpasswords-updated-title": "봇 비밀번호 갱신",
+       "botpasswords-updated-body": "사용자 \"$2\"의 \"$1\"라는 이름의 봇 비밀번호가 업데이트되었습니다.",
+       "botpasswords-deleted-title": "봇 비밀번호 제거",
+       "botpasswords-deleted-body": "사용자 \"$2\"의 \"$1\"라는 이름의 봇 비밀번호가 삭제되었습니다.",
+       "botpasswords-newpassword": "<strong>$1</strong> 계정의 비밀번호가 <strong>$2</strong>로 변경되었습니다. <em>잊어버리지 않도록 기록해두시기 바랍니다.</em>",
+       "botpasswords-no-provider": "'BotPasswordsSessionProvider'는 이용할 수 없습니다.",
+       "botpasswords-restriction-failed": "봇 비밀번호 제한으로 인해 로그인할 수 없습니다.",
+       "botpasswords-not-exist": "\"$1\" 사용자가 이름이 \"$2\"인 봇의 비밀번호를 가지고 있지 않습니다.",
        "resetpass_forbidden": "비밀번호를 바꿀 수 없습니다",
        "resetpass-no-info": "이 특수 문서에 직접 접근하려면 반드시 로그인해야 합니다.",
        "resetpass-submit-loggedin": "비밀번호 바꾸기",
        "resetpass-submit-cancel": "취소",
-       "resetpass-wrong-oldpass": "비밀번호가 잘못되었거나 현재의 비밀번호와 같습니다.\n이미 비밀번호를 성공적으로 바꾸었거나 새 임시 비밀번호를 요청했을 수 있습니다.",
+       "resetpass-wrong-oldpass": "비밀번호가 잘못되었거나 현재의 비밀번호와 같습니다.\n이미 비밀번호를 바꾸었거나 새 임시 비밀번호를 요청했을 수 있습니다.",
        "resetpass-recycled": "현재 비밀번호와 다른 비밀번호로 재설정해주세요.",
        "resetpass-temp-emailed": "임시 이메일 코드로 로그인되어 있습니다.\n로그인을 마치려면, 여기서 새 비밀번호를 설정해야 합니다:",
        "resetpass-temp-password": "임시 비밀번호:",
        "passwordreset-emailerror-capture": "비밀번호 재설정 이메일이 생성되어 아래에 보여져 있지만, {{GENDER:$2|사용자}}에게 발송하는 데에는 실패했습니다: $1",
        "changeemail": "이메일 주소를 바꾸거나 제거하기",
        "changeemail-header": "이메일 주소를 바꾸려면 이 양식을 채우세요. 계정에서 이메일 연동을 취소하고 싶다면 양식을 제출할 때 새 이메일 주소를 공란으로 두세요.",
+       "changeemail-passwordrequired": "변경을 적용하려면 비밀번호를 입력해야 합니다.",
        "changeemail-no-info": "이 특수 문서에 직접 접근하려면 반드시 로그인해야 합니다.",
        "changeemail-oldemail": "현재 이메일 주소:",
        "changeemail-newemail": "새 이메일 주소:",
        "previewerrortext": "변경사항을 미리보기하는 도중 오류가 발생했습니다.",
        "blockedtitle": "사용자가 차단됨",
        "blockedtext": "'''사용자 계정 또는 IP 주소가 차단되었습니다.'''\n\n차단한 사람은 $1입니다.\n차단한 이유는 다음과 같습니다: $2\n\n* 차단이 시작된 시간: $8\n* 차단이 끝나는 시간: $6\n* 차단된 사용자: $7\n\n$1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대해 문의할 수 있습니다.\n[[Special:Preferences|계정 환경 설정]]에 올바른 이메일 주소가 있어야만 '이메일 보내기' 기능을 사용할 수 있습니다. 또 이메일 보내기 기능이 차단되어 있으면 이메일을 보낼 수 없습니다.\n현재 당신의 IP 주소는 $3이고, 차단 ID는 #$5입니다.\n문의할 때에 이 정보를 같이 알려주세요.",
-       "autoblockedtext": "당신의 IP 주소는 $1 사용자가 차단한 사용자가 사용했던 IP이기 때문에 자동으로 차단되었습니다.\n차단된 이유는 다음과 같습니다:\n\n:$2\n\n* 차단이 시작된 시간: $8\n* 차단이 끝나는 시간: $6\n* 차단된 사용자: $7\n\n$1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대해 문의할 수 있습니다.\n\n[[Special:Preferences|계정 환경 설정]]에 올바른 이메일 주소가 있어야만 \"이메일 보내기\" 기능을 사용할 수 있습니다. 또한 이메일 보내기 기능이 차단되어 있으면 이메일을 보낼 수 없습니다.\n\n현재 IP 주소는 $3이고, 차단 ID는 #$5입니다.\n문의할 때에 이 정보를 같이 알려주세요.",
+       "autoblockedtext": "당신의 IP 주소는 $1님이 차단한 사용자가 사용했던 IP이기 때문에 자동으로 차단되었습니다.\n차단된 이유는 다음과 같습니다:\n\n:$2\n\n* 차단이 시작된 시간: $8\n* 차단이 끝나는 시간: $6\n* 차단된 사용자: $7\n\n$1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대해 문의할 수 있습니다.\n\n[[Special:Preferences|계정 환경 설정]]에 올바른 이메일 주소가 있어야만 \"이메일 보내기\" 기능을 사용할 수 있습니다. 또한 이메일 보내기 기능이 차단되어 있으면 이메일을 보낼 수 없습니다.\n\n현재 IP 주소는 $3이고, 차단 ID는 #$5입니다.\n문의할 때에 이 정보를 같이 알려주세요.",
        "blockednoreason": "이유를 입력하지 않음",
        "whitelistedittext": "문서를 편집하기 전에 $1해야 합니다.",
        "confirmedittext": "문서를 고치려면 이메일 인증 절차가 필요합니다.\n[[Special:Preferences|사용자 환경 설정]]에서 이메일 주소를 입력하고 이메일 주소 인증을 해주시기 바랍니다.",
        "newarticle": "(새 문서)",
        "newarticletext": "아직 없는 문서의 링크를 따라왔습니다.\n새 문서를 만들려면 아래 상자에 내용을 입력하면 됩니다. (자세한 내용은 [$1 도움말 문서]를 참조하세요)\n만약 잘못 찾아왔다면, 브라우저의 '''뒤로''' 버튼을 눌러 주세요.",
        "anontalkpagetext": "----\n여기는 계정을 만들지 않았거나 사용하고 있지 않은 익명 사용자를 위한 토론 문서입니다.\n익명 사용자를 구별하기 위해서는 숫자로 된 IP 주소를 사용해야만 합니다.\nIP 주소는 여러 사용자가 공유할 수 있습니다.\n자신과 관계없는 의견이 자신에게 남겨져 있어 불쾌하다고 생각하는 익명 사용자는 [[Special:UserLogin/signup|계정을 만들고]] [[Special:UserLogin|로그인해서]] 나중에 다른 익명 사용자에게 줄 혼란을 줄일 수 있습니다.",
-       "noarticletext": "이 문서가 현재 존재하지 않습니다.\n이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|검색하거나]],\n이 문서에 관련된 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 기록]을 확인하거나,\n문서를 직접 [{{fullurl:{{FULLPAGENAME}}|action=edit}} 편집]</span>할 수 있습니다.",
+       "noarticletext": "이 문서가 현재 존재하지 않습니다.\n이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|검색하거나]],\n이 문서에 관련된 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 기록]을 확인하거나,\n문서를 직접 [{{fullurl:{{FULLPAGENAME}}|action=edit}} 생성]</span>할 수 있습니다.",
        "noarticletext-nopermission": "이 문서가 현재 존재하지 않습니다.\n이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|검색하거나]], 이 문서에 관련된 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 기록]을 확인할 수 있습니다.</span> 그러나 이 문서를 만들 수 있는 권한은 없습니다.",
        "missing-revision": "\"{{FULLPAGENAME}}\"이라는 문서의 #$1판이 존재하지 않습니다.\n\n이 문제는 주로 삭제된 문서를 가리키는 오래된 문서 역사 링크로 인해 발생합니다.\n자세한 내용은 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 확인할 수 있습니다.",
        "userpage-userdoesnotexist": "\"$1\" 사용자 계정은 등록되어 있지 않습니다.\n이 문서를 만들거나 편집하기 전에 계정이 존재하는지 확인해주세요.",
        "previewnote": "'''이 화면은 미리 보기입니다.'''\n편집한 내용은 아직 저장하지 않았습니다!",
        "continue-editing": "편집 영역으로 가기",
        "previewconflict": "이 미리 보기는 저장할 때의 모습으로 위쪽 편집창의 문서를 반영합니다.",
-       "session_fail_preview": "'''세션 데이터가 없어져 편집을 저장하지 못했습니다.'''\n다시 시도하세요.\n다시 시도해도 되지 않으면 [[Special:UserLogout|로그아웃]]한 다음 다시 로그인하세요.",
-       "session_fail_preview_html": "'''세션 데이터가 없어져 편집을 저장하지 못했습니다.'''\n\n{{SITENAME}}에서 HTML 입력을 허용하기 때문에, 자바스크립트 공격을 막기 위해 미리 보기는 숨겨져 있습니다.\n\n'''적합하게 편집을 시도했다면 다시 시도하세요'''\n다시 시도해도 되지 않으면 [[Special:UserLogout|로그아웃]]한 다음 다시 로그인하세요.",
+       "session_fail_preview": "세션 데이터가 없어져 편집을 저장하지 못했습니다.\n\n로그아웃 되었는지도 모릅니다. <strong>아직 로그인 상태인지 확인하고 다시 시도해주세요</strong>.\n다시 시도해도 되지 않으면 [[Special:UserLogout|로그아웃]]한 다음 다시 로그인하세요. 그리고 브라우저 설정에서 쿠키 사용을 허용하는지 확인하세요.",
+       "session_fail_preview_html": "세션 데이터가 없어져 편집을 저장하지 못했습니다.\n\n<em>{{SITENAME}}에서 HTML 입력을 허용하기 때문에, 자바스크립트 공격을 막기 위해 미리 보기는 숨겨져 있습니다.</em>\n\n<strong>적합하게 편집을 시도했다면 다시 시도해주세요.</strong>\n다시 시도해도 되지 않으면 [[Special:UserLogout|로그아웃]]한 다음 다시 로그인하고, 브라우저가 이 사이트에서 쿠키를 허용하는지 확인하세요.",
        "token_suffix_mismatch": "'''저장하려는 내용의 문장 부호가 망가져 있습니다.'''\n문서 보호를 위해 해당 내용을 저장하지 않습니다.\n버그가 있는 익명 프록시 서비스 등을 사용할 때 이런 문제가 발생할 수 있습니다.",
        "edit_form_incomplete": "'''편집의 일부 내용이 서버에 전달되지 않았습니다. 편집이 손상되지 않았는지 확인하고 다시 시도해 주십시오.'''",
        "editing": "$1 편집하기",
        "copyrightwarning2": "{{SITENAME}}에서의 모든 기여는 다른 사용자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요.\n만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.<br />\n또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다 (자세한 내용에 대해서는 $1 문서를 읽어 주세요).\n'''저작권이 있는 내용을 허가 없이 저장하지 마세요!'''",
        "editpage-cannot-use-custom-model": "이 문서의 콘텐츠 모델은 변경될 수 없습니다.",
        "longpageerror": "'''오류: 문서의 크기가 {{PLURAL:$1|$1킬로바이트}}로 최대 크기인 {{PLURAL:$2|$2킬로바이트}}보다 큽니다.'''\n저장할 수 없습니다.",
-       "readonlywarning": "<strong>경고: 데이터베이스가 관리를 위해 잠겨 있습니다. 따라서 문서를 편집한 내용을 지금 저장할 수 없습니다.</strong>\n편집 내용을 복사하여 붙여넣기 등을 사용하여 일단 다른 곳에 저장한 후, 나중에 다시 시도해 주세요.\n\n잠근 관리자가 남긴 설명은 다음과 같습니다: $1",
+       "readonlywarning": "<strong>경고: 데이터베이스가 관리를 위해 잠겨 있습니다. 따라서 문서를 편집한 내용을 지금 저장할 수 없습니다.</strong>\n편집 내용을 복사하여 붙여넣기 등을 사용하여 일단 다른 곳에 저장한 후, 나중에 다시 시도해 주세요.\n\n데이터베이스를 잠근 시스템 관리자가 남긴 설명은 다음과 같습니다: $1",
        "protectedpagewarning": "<strong>경고: 이 문서는 관리자 권한이 있는 사용자만 편집할 수 있도록 보호되어 있습니다.</strong>\n이 문서의 최근 기록을 참조하십시오:",
        "semiprotectedpagewarning": "<strong>참고:</strong> 이 문서는 계정을 등록한 사용자만이 편집할 수 있도록 보호되어 있습니다.\n이 문서의 최근 기록을 참조하십시오:",
        "cascadeprotectedwarning": "<strong>경고:</strong> 이 문서는 보호되어 있어 관리자만 편집할 수 있습니다. 연쇄적 보호가 걸린 다음 {{PLURAL:$1|문서}}에서 이 문서를 사용하고 있습니다:",
        "undo-summary-username-hidden": "숨겨진 사용자가 $1 판을 되돌림",
        "cantcreateaccounttitle": "계정을 만들 수 없습니다",
        "cantcreateaccount-text": "현재 아이피 주소('''$1''')는 [[User:$3|$3]] 사용자에 의해 계정 만들기가 차단되었습니다.\n\n차단 이유는 다음과 같습니다: $2",
-       "cantcreateaccount-range-text": "당신의 IP 주소('''$4''')가 속해 있는 '''$1''' 대역에서의 계정 생성을 [[User:$3|$3]] 사용자가 차단하였습니다.\n\n$3 사용자가 제시한 이유는 \"$2\"입니다.",
+       "cantcreateaccount-range-text": "당신의 IP 주소(<strong>$4</strong>)가 속해 있는 <strong>$1</strong> 대역에서의 계정 생성을 [[User:$3|$3]] 사용자가 차단하였습니다.\n\n$3 사용자가 제시한 이유는 \"$2\"입니다.",
        "viewpagelogs": "이 문서의 기록 보기",
        "nohistory": "이 문서는 편집 역사가 없습니다.",
        "currentrev": "최신판",
        "revdelete-unsuppress": "되살린 판에 대한 제한을 해제",
        "revdelete-log": "이유:",
        "revdelete-submit": "선택한 {{PLURAL:$1|판}}에 적용",
-       "revdelete-success": "'''판의 보이기 설정을 성공적으로 바꾸었습니다.'''",
+       "revdelete-success": "판의 보이기 설정을 바꾸었습니다.",
        "revdelete-failure": "'''특정 판 보기 설정을 바꾸지 못했습니다:'''\n$1",
-       "logdelete-success": "'''기록 보이기 설정을 성공적으로 바꾸었습니다.'''",
+       "logdelete-success": "기록 보이기를 설정했습니다.",
        "logdelete-failure": "'''기록 보이기 설정을 바꾸지 못했습니다:'''\n$1",
        "revdel-restore": "보이기 설정 바꾸기",
        "pagehist": "문서 역사",
        "mergehistory-empty": "합칠 수 있는 판이 없습니다.",
        "mergehistory-done": "$1 문서의 {{PLURAL:$3|판}} $3개{{PLURAL:$3|가}} [[:$2]]에 성공적으로 합쳐졌습니다.",
        "mergehistory-fail": "역사 합치기를 수행할 수 없습니다, 문서와 시간 변수를 다시 확인하세요.",
+       "mergehistory-fail-bad-timestamp": "타임스탬프(timestamp)가 적절하지 않습니다.",
+       "mergehistory-fail-invalid-source": "원본 문서가 적절하지 않습니다.",
+       "mergehistory-fail-invalid-dest": "대상 문서가 적절하지 않습니다.",
+       "mergehistory-fail-self-merge": "원본과 대상 문서가 같습니다.",
        "mergehistory-fail-toobig": "이동하려는 {{PLURAL:$1|판}} $1개 제한보다 많이 역사 병합을 수행할 수 없습니다.",
        "mergehistory-no-source": "원본인 $1 문서가 존재하지 않습니다.",
        "mergehistory-no-destination": "대상인 $1 문서가 존재하지 않습니다.",
        "userrights": "사용자 권한 관리",
        "userrights-lookup-user": "사용자 권한 관리",
        "userrights-user-editname": "사용자 이름 입력:",
-       "editusergroup": "사용자 그룹 편집",
+       "editusergroup": "{{GENDER:$1|사용자}} 그룹 편집",
        "editinguser": "<strong>[[User:$1|$1]]</strong> $2 {{GENDER:$1|사용자}}의 권한 바꾸기",
        "userrights-editusergroup": "사용자 그룹 편집",
-       "saveusergroups": "사용자 권한 저장",
+       "saveusergroups": "{{GENDER:$1|사용자}} 권한 저장",
        "userrights-groupsmember": "현재 권한:",
        "userrights-groupsmember-auto": "자동으로 부여된 권한:",
        "userrights-groups-help": "이 사용자의 권한을 바꿀 수 있습니다.\n* 사용자는 체크 표시가 있는 권한을 갖습니다.\n* 사용자는 체크 표시가 없는 권한을 갖지 않습니다.\n* <nowiki>*</nowiki>표시는 권한을 주거나 거두는 것 중 하나만 할 수 있다는 뜻입니다.",
        "userrights-changeable-col": "바꿀 수 있는 권한",
        "userrights-unchangeable-col": "바꿀 수 없는 권한",
        "userrights-conflict": "사용자 권한 바꾸기가 충돌합니다! 바뀜을 검토하고 확인하세요.",
-       "userrights-removed-self": "ì\9e\90ì\8b ì\9d\98 ê¶\8cí\95\9cì\9d\84 ì \9cê±°í\95\98ë\8a\94 ë\8d° ì\84±ê³µí\96\88ì\8aµë\8b\88ë\8b¤. ë\94°ë\9d¼ì\84\9c ë\8d\94 ì\9d´ì\83\81 ì\9d´ ë¬¸ì\84\9cì\97\90 ì \91ê·¼í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤.",
+       "userrights-removed-self": "자신의 권한을 제거했습니다. 따라서 더 이상 이 문서에 접근할 수 없습니다.",
        "group": "그룹:",
        "group-user": "사용자",
        "group-autoconfirmed": "자동 인증된 사용자",
        "grant-group-file-interaction": "미디어로 상호 작용",
        "grant-group-watchlist-interaction": "당신의 주시문서로 상호작용",
        "grant-group-email": "이메일 보내기",
-       "grant-group-high-volume": "대량의 작업 수행",
+       "grant-group-high-volume": "대량의 작업 수행",
        "grant-group-customization": "사용자 최적화 및 환경 설정",
        "grant-group-administration": "관리 기능 수행",
        "grant-group-other": "기타 활동",
        "grant-sendemail": "다른 사용자에게 이메일 보내기",
        "grant-uploadeditmovefile": "파일 올리기, 바꾸기, 이동",
        "grant-uploadfile": "새 파일 올리기",
+       "grant-basic": "기본 권한",
        "grant-viewdeleted": "삭제된 파일과 문서 보기",
        "grant-viewmywatchlist": "내 주시문서 목록 보기",
        "newuserlogpage": "사용자 만들기 기록",
        "action-createpage": "문서 만들기",
        "action-createtalk": "토론 문서 만들기",
        "action-createaccount": "새 계정 만들기",
+       "action-autocreateaccount": "자동으로 이 외부 사용자 계정 생성하기",
        "action-history": "이 문서의 역사 보기",
        "action-minoredit": "이 편집을 사소한 편집으로 표시하기",
        "action-move": "이 문서 이동",
        "recentchanges-label-bot": "봇이 수행한 편집",
        "recentchanges-label-unpatrolled": "아직 점검하지 않은 편집",
        "recentchanges-label-plusminus": "바이트로 표기된 바뀐 문서 크기",
-       "recentchanges-legend-heading": "'''범례:'''",
+       "recentchanges-legend-heading": "<strong>범례:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|새 문서 목록]]도 보세요)",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "보기",
        "uploaddisabledtext": "파일 올리기 기능이 비활성화되어 있습니다.",
        "php-uploaddisabledtext": "PHP 파일 올리기가 비활성화되었습니다. 파일 올리기 설정을 확인하십시오.",
        "uploadscripted": "이 파일에는 HTML이나 다른 스크립트 코드가 포함되어 있어, 웹 브라우저에서 오류를 일으킬 수 있습니다.",
+       "upload-scripted-pi-callback": "XML 스타일시트 프로세싱 명령을 포함하는 파일은 업로드 할 수 없습니다.",
+       "uploaded-script-svg": "업로드 된 SVG 파일에서 스크립트로 만들 수 있는 \"$1\" 요소를 발견했습니다.",
+       "uploaded-hostile-svg": "업로드 된 SVG 파일의 스타일 요소에 안전하지 못한 CSS가 있습니다.",
        "uploaded-remote-url-svg": "원격 URL로 style 속성이 설정된 SVG파일은 금지됩니다. 업로드된 SVG 파일에서 <code>$1=\"$2\"</code>를 발견하였습니다.",
        "uploadscriptednamespace": "이 SVG 파일은 사용할 수 없는 이름공간 '$1'을 포함하고 있습니다.",
        "uploadinvalidxml": "업로드된 파일의 XML의 구문을 분석할 수 없습니다.",
        "foreign-structured-upload-form-label-own-work": "자작입니다",
        "foreign-structured-upload-form-label-infoform-categories": "분류",
        "foreign-structured-upload-form-label-infoform-date": "날짜",
-       "foreign-structured-upload-form-label-not-own-work-message-shared": "이 파일의 저작권을 소유하지 않거나 다른 라이선스로 배포하고 싶다면 [https://commons.wikimedia.org/wiki/Special:UploadWizard 공용 파일 올리기 마법사]를 이용해 보세요.",
+       "foreign-structured-upload-form-label-own-work-message-shared": "나는 이 파일에 대한 저작권을 소유하고 있음을 입증하고, 영구히 위키미디어 공용에 이 파일을 [https://creativecommons.org/licenses/by-sa/4.0/ 크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0]에 따라 배포하는 데 동의하며, [https://wikimediafoundation.org/wiki/Terms_of_Use 이용 약관]에 동의합니다.",
+       "foreign-structured-upload-form-label-not-own-work-message-shared": "이 파일의 저작권을 소유하지 않거나 다른 라이선스로 배포하고 싶다면 [https://commons.wikimedia.org/wiki/Special:UploadWizard 공용 파일 올리기 마법사]를 사용하는 것을 고려해보세요.",
        "backend-fail-stream": "\"$1\" 파일을 스트림할 수 없습니다.",
        "backend-fail-backup": "\"$1\" 파일을 백업할 수 없습니다.",
        "backend-fail-notexists": "$1 파일이 존재하지 않습니다.",
        "backend-fail-read": "\"$1\" 파일을 읽을 수 없습니다.",
        "backend-fail-create": "\"$1\" 파일을 저장할 수 없습니다.",
        "backend-fail-maxsize": "{{PLURAL:$2|1 바이트|$2 바이트}}보다 커서 \"$1\" 파일을 저장하지 못했습니다.",
-       "backend-fail-readonly": "\"$1\" 저장 백엔드가 읽기 전용입니다. 자세한 이유는 다음과 같습니다: \"$2\"",
+       "backend-fail-readonly": "\"$1\" 저장 백엔드가 읽기 전용입니다. 자세한 이유는 다음과 같습니다: <em>$2</em>",
        "backend-fail-synced": "\"$1\" 파일은 내부 저장 백엔드에 불안정한 상태로 있습니다",
        "backend-fail-connect": "\"$1\" 저장 백엔드에 접속하지 못했습니다.",
        "backend-fail-internal": "\"$1\" 저장 백엔드에 알 수 없는 오류가 발생했습니다.",
        "lockmanager-fail-deletelock": "\"$1\"에 대한 잠금 파일을 삭제하지 못했습니다.",
        "lockmanager-fail-acquirelock": "\"$1\"에 대한 잠금이 실패했습니다.",
        "lockmanager-fail-openlock": "\"$1\"에 대한 잠금 파일을 열지 못했습니다.",
-       "lockmanager-fail-releaselock": "\"$1\"ì\97\90 ë\8c\80í\95\9c ì\9e ê¸\88ì\9d\84 í\95´ì \9cí\95\98지 못했습니다.",
+       "lockmanager-fail-releaselock": "\"$1\"ì\97\90 ë\8c\80í\95\9c ì\9e ê¸\88ì\9d\84 í\92\80지 못했습니다.",
        "lockmanager-fail-db-bucket": "데이터베이스의 버킷 $1의 잠금을 풀지 못했습니다.",
        "lockmanager-fail-db-release": "데이터베이스 $1의 잠금을 풀지 못했습니다.",
        "lockmanager-fail-svr-acquire": "서버 $1의 잠금을 걸지 못했습니다.",
        "uploadstash-summary": "이 문서는 위키에 등록되지는 않았지만 올리는 과정 중에 있는 파일을 접근할 수 있습니다. 이 파일은 올린이 외에는 볼 수 없습니다.",
        "uploadstash-clear": "임시 저장한 파일 제거하기",
        "uploadstash-nofiles": "임시 저장한 파일이 없습니다.",
-       "uploadstash-badtoken": "ì\9d´ ë\8f\99ì\9e\91ì\9d\84 ì\88\98í\96\89í\95\98ë\8a\94 ë\8d° ì\8b¤í\8c¨í\96\88ì\8aµë\8b\88ë\8b¤. í\8e¸ì§\91 í\86 í\81°ì\9d´ ë§\8cë£\8cë\90\98ì\97\88ì\9d\84 ê°\80ë\8a¥ì\84±ì\9d´ ì\9e\88ì\8aµë\8b\88ë\8b¤. ë\8b¤ì\8b\9c ì\8b\9cë\8f\84í\95\98세요.",
-       "uploadstash-errclear": "í\8c\8cì\9d¼ì\9d\84 ì \9cê±°í\95\98는 데 실패했습니다.",
+       "uploadstash-badtoken": "ì\9d´ ë\8f\99ì\9e\91ì\9d\84 ì\88\98í\96\89í\95\98ë\8a\94 ë\8d° ì\8b¤í\8c¨í\96\88ì\8aµë\8b\88ë\8b¤. í\8e¸ì§\91 í\86 í\81°ì\9d´ ë§\8cë£\8cë\90\98ì\97\88ì\9d\84 ê°\80ë\8a¥ì\84±ì\9d´ ì\9e\88ì\8aµë\8b\88ë\8b¤. ë\8b¤ì\8b\9c ì\8b\9cë\8f\84í\95´ì£¼세요.",
+       "uploadstash-errclear": "í\8c\8cì\9d¼ì\9d\84 ì§\80ì\9a°는 데 실패했습니다.",
        "uploadstash-refresh": "파일 목록을 새로 고침",
        "invalid-chunk-offset": "청크 오프셋이 잘못되었습니다.",
        "img-auth-accessdenied": "접근이 거부됨",
        "apihelp-no-such-module": "\"$1\" 모듈을 찾을 수 없습니다.",
        "apisandbox": "API 실험실",
        "apisandbox-api-disabled": "이 사이트에서는 API가 꺼져 있습니다.",
-       "apisandbox-intro": "'''미디어위키 웹 서비스 API'''를 시험해보려면 이 페이지를 이용해보세요. API 용법에 대해서는 [//www.mediawiki.org/wiki/API:Main_page API 문서]을 참고하십시오. 예: [//www.mediawiki.org/wiki/API#A_simple_example 대문의 내용 요청하기]. 더 많은 예를 보려면 액션을 선택하세요.\n\n여기가 연습장이라도 이 페이지에서 실행하는 동작때문에 위키를 변경할 수도 있다는 점에 유의하십시오.",
+       "apisandbox-intro": "<strong>미디어위키 웹 서비스 API</strong>를 시험해보려면 이 페이지를 이용해보세요. API 용법에 대해서는 [[mw:API:Main page|API 문서]]을 참고하십시오. 예: [//www.mediawiki.org/wiki/API#A_simple_example 대문의 내용 요청하기]. 더 많은 예를 보려면 액션을 선택하세요.\n\n여기가 연습장이라도 이 페이지에서 실행하는 동작때문에 위키를 변경할 수도 있다는 점에 유의하십시오.",
+       "apisandbox-fullscreen": "패널 늘리기",
+       "apisandbox-fullscreen-tooltip": "브라우저 창에 맞도록 샌드박스 패널 늘리기",
        "apisandbox-unfullscreen": "페이지 보기",
        "apisandbox-submit": "요청하기",
        "apisandbox-reset": "지우기",
        "apisandbox-retry": "재시도",
+       "apisandbox-loading": "API 모듈 \"$1\"의 정보 불러오는 중...",
+       "apisandbox-no-parameters": "이 API 모듈은 변수가 없습니다.",
        "apisandbox-helpurls": "도움 링크들",
        "apisandbox-examples": "예시",
+       "apisandbox-dynamic-parameters": "추가 변수",
+       "apisandbox-dynamic-parameters-add-label": "변수 추가:",
+       "apisandbox-dynamic-parameters-add-placeholder": "변수 이름",
+       "apisandbox-dynamic-error-exists": "\"$1\"이라는 변수 이름은 이미 존재합니다.",
+       "apisandbox-deprecated-parameters": "앞으로 제거될 변수",
+       "apisandbox-submit-invalid-fields-title": "부적절한 필드가 있음",
        "apisandbox-results": "결과",
+       "apisandbox-sending-request": "API 요청을 보내는 중...",
+       "apisandbox-loading-results": "API 결과를 받는 중...",
+       "apisandbox-results-error": "API 질의 요청을 로딩하는 도중 에러 발생: $1.",
        "apisandbox-request-url-label": "요청 URL:",
-       "apisandbox-request-time": "요청 처리 시간: $1",
+       "apisandbox-request-time": "요청 처리 시간: {{PLURAL:$1|$1 ms}}",
+       "apisandbox-results-fixtoken-fail": "\"$1\" 토크을 가져오는데 실패했습니다.",
+       "apisandbox-alert-page": "이 문서에 있는 필드가 유효하지 않습니다.",
+       "apisandbox-alert-field": "이 필드의 값이 유효하지 않습니다.",
        "booksources": "책 찾기",
        "booksources-search-legend": "책 원본 검색",
        "booksources-isbn": "ISBN:",
        "listgrouprights-namespaceprotection-header": "이름공간 제한",
        "listgrouprights-namespaceprotection-namespace": "이름공간",
        "listgrouprights-namespaceprotection-restrictedto": "사용자가 편집할 수 있는 권한",
-       "listgrants-summary": "다음은 사용자 권한에 관련된 접근 권한을 통해 부여된 OAuth 부여 목록입니다. 사용자는 자신의 계정에 대해 권한을 부여 할 수 있지만, 사용자가 응용 프로그램에 부여한 권한 설정에 따라 제한이 있습니다. 사용자를 대신하여 동작하는 응용 프로그램은 사용자가 갖고 있지 않은 권한은 사용할 수 없습니다. \n각각의 권한에 대한 [[{{MediaWiki:Listgrouprights-helppage}}|추가 정보]]가 있습니다.",
+       "listgrants": "부여",
+       "listgrants-summary": "다음은 사용자 권한에 관련된 접근 권한을 통해 부여된 부여 목록입니다. 사용자는 자신의 계정에 대해 권한을 부여 할 수 있지만, 사용자가 애플리케이션에 부여한 권한 설정에 따라 제한이 있습니다. 사용자를 대신하여 동작하는 애플리케이션은 사용자가 갖고 있지 않은 권한은 사용할 수 없습니다. \n각각의 권한에 대한 [[{{MediaWiki:Listgrouprights-helppage}}|추가 정보]]가 있습니다.",
        "listgrants-grant": "부여",
        "listgrants-rights": "권한",
        "trackingcategories": "추적용 분류",
        "emailccsubject": "$1에게 보낸 메시지의 복사본: $2",
        "emailsent": "이메일 보냄",
        "emailsenttext": "이메일을 보냈습니다.",
-       "emailuserfooter": "이 이메일은 {{SITENAME}}의 $1 사용자가 $2 사용자에게 \"{{int:emailuser}}\" 기능을 통해 보냈습니다.",
+       "emailuserfooter": "이 이메일은 {{SITENAME}}의 $1님이 $2 사용자에게 \"{{int:emailuser}}\" 기능을 통해 보냈습니다.",
        "usermessage-summary": "시스템 메시지 남기기",
        "usermessage-editor": "시스템 메신저",
        "usermessage-template": "MediaWiki:UserMessage",
        "delete-toobig": "이 문서에는 {{PLURAL:$1|편집 역사}}가 $1개 이상 있습니다.\n{{SITENAME}}에 의도하지 않은 혼란을 줄 수 있기 때문에 이런 문서의 삭제는 제한됩니다.",
        "delete-warning-toobig": "이 문서에는 {{PLURAL:$1|편집 역사}}가 $1개 있습니다.\n편집 역사가 긴 문서를 삭제하면 {{SITENAME}} 데이터베이스 동작에 큰 영향을 줄 수 있습니다.\n주의해 주세요.",
        "deleteprotected": "이 문서가 보호되어 있기 때문에 삭제할 수 없습니다.",
-       "deleting-backlinks-warning": "'''경고:''' 삭제하려는 문서가 [[Special:WhatLinksHere/{{FULLPAGENAME}}|다른 문서]]에 링크되어 있거나 끼워져 있습니다.",
+       "deleting-backlinks-warning": "<strong>경고:/<strong> 삭제하려는 문서가 [[Special:WhatLinksHere/{{FULLPAGENAME}}|다른 문서]]에 링크되어 있거나 끼워져 있습니다.",
        "rollback": "편집 되돌리기",
        "rollbacklink": "되돌리기",
        "rollbacklinkcount": "{{PLURAL:$1|편집}} $1회 되돌리기",
        "rollbackfailed": "되돌리기 실패",
        "cantrollback": "편집을 되돌릴 수 없습니다.\n문서를 편집한 사용자가 한 명뿐입니다.",
        "alreadyrolled": "[[:$1]]에서 [[User:$2|$2]] ([[User talk:$2|토론]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])의 편집을 되돌릴 수 없습니다.\n누군가가 이미 문서를 고치거나 되돌렸습니다.\n\n마지막으로 이 문서를 편집한 사용자는 [[User:$3|$3]] ([[User talk:$3|토론]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])입니다.",
-       "editcomment": "편집 요약: \"$1\"",
+       "editcomment": "편집 요약: <em>$1</em>",
        "revertpage": "[[Special:Contributions/$2|$2]]([[User talk:$2|토론]])의 편집을 [[User:$1|$1]]의 마지막 판으로 되돌림",
        "revertpage-nouser": "숨긴 사용자의 편집을 {{GENDER:$1|[[User:$1|$1]]}}의 마지막 판으로 되돌림",
        "rollback-success": "$1의 편집을 되돌렸습니다.\n$2의 마지막 판으로 바뀌었습니다.",
        "changecontentmodel-title-label": "문서 제목",
        "changecontentmodel-model-label": "새 콘텐츠 모델",
        "changecontentmodel-reason-label": "이유:",
+       "changecontentmodel-submit": "바꾸기",
        "changecontentmodel-success-title": "콘텐츠 모델이 변경되었습니다",
        "changecontentmodel-success-text": "[[:$1]]의 콘텐츠 종류가 변경되었습니다.",
        "changecontentmodel-cannot-convert": "[[:$1]]의 콘텐츠 모델이 $2의 모델로 전환될 수 없습니다.",
        "changecontentmodel-nodirectediting": "$1 콘텐츠 모델은 직접 편집을 지원하지 않습니다",
        "log-name-contentmodel": "콘텐츠 모델 변경 기록",
        "log-description-contentmodel": "페이지의 콘텐츠 모델과 관련된 행위",
-       "logentry-contentmodel-change": "$1 사용자가 $3 의 콘텐츠 모델을 \"$4\"에서 \"$5\"로 {{GENDER:$2|변경하였습니다}}.",
+       "logentry-contentmodel-new": "$1님이 비 기본값 \"$5\" 콘텐츠 모델을 사용해  $3 문서를 {{GENDER:$2|만들었습니다}}",
+       "logentry-contentmodel-change": "$1님이 $3 문서의 콘텐츠 모델을 \"$4\"에서 \"$5\"로 {{GENDER:$2|바꾸었습니다}}",
        "logentry-contentmodel-change-revertlink": "되돌리기",
        "logentry-contentmodel-change-revert": "되돌리기",
        "protectlogpage": "문서 보호 기록",
        "tooltip-namespace_association": "선택한 이름공간과 관련된 토론이나 본문 이름공간을 포함하려면 이 상자를 선택하세요",
        "blanknamespace": "(일반)",
        "contributions": "{{GENDER:$1|사용자}} 기여",
-       "contributions-title": "$1 사용자의 기여",
+       "contributions-title": "$1의 사용자 기여",
        "mycontris": "기여",
        "anoncontribs": "기여",
        "contribsub2": "{{GENDER:$3|$1}}($2)의 기여",
        "unblock": "사용자 차단 해제",
        "blockip": "{{GENDER:$1|사용자}} 차단",
        "blockip-legend": "사용자 차단",
-       "blockiptext": "차단할 IP 주소나 사용자 이름을 아래에 적어 주세요.\n차단은 문서 훼손을 막기 위해, [[{{MediaWiki:Policy-url}}|정책]]에 의해서만 이루어져야 합니다.\n차단 이유를 같이 적어주세요(예: 특정 문서 훼손).",
+       "blockiptext": "차단할 IP 주소나 사용자 이름을 아래에 적어 주세요.\n차단은 문서 훼손을 막기 위해, [[{{MediaWiki:Policy-url}}|정책]]에 의해서만 이루어져야 합니다.\n차단 이유를 같이 적어주세요(예: 특정 문서 훼손).\n[https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] 형식을 사용해 IP 대역을 차단할 수 있습니다. IPv4에서는 /$1, IPv6에서는 /$2까지 허용됩니다.",
        "ipaddressorusername": "IP 주소 또는 사용자 이름:",
        "ipbexpiry": "기한:",
        "ipbreason": "이유:",
        "change-blocklink": "차단 설정 바꾸기",
        "contribslink": "기여",
        "emaillink": "이메일 보내기",
-       "autoblocker": "당신의 IP 주소는 최근에 \"[[User:$1|$1]]\" 사용자가 사용하였기 때문에 자동으로 차단되었습니다.\n$1 사용자가 차단된 이유는 다음과 같습니다: \"$2\"",
+       "autoblocker": "당신의 IP 주소는 최근에 \"[[User:$1|$1]]\" 사용자가 사용하였기 때문에 자동으로 차단되었습니다.\n$1님이 차단된 이유는 다음과 같습니다: \"$2\"",
        "blocklogpage": "차단 기록",
        "blocklog-showlog": "이 사용자는 과거에 차단된 기록이 있습니다.\n해당 사용자의 차단 기록은 다음과 같습니다:",
        "blocklog-showsuppresslog": "이 사용자는 과거에 차단된 적이 있으며, 그 기록이 숨겨져 있습니다.\n해당 사용자의 차단 기록은 다음과 같습니다:",
-       "blocklogentry": "사용자가 [[$1]] 사용자를 $2 차단했습니다 $3",
-       "reblock-logentry": "사용자가 [[$1]] 사용자의 차단 기간을 $2(으)로 바꾸었습니다 $3",
+       "blocklogentry": "님이 [[$1]]님을 $2 차단했습니다 $3",
+       "reblock-logentry": "님이 [[$1]]님의 차단 기간을 $2(으)로 바꾸었습니다 $3",
        "blocklogtext": "이 목록은 사용자 차단/차단 해제 기록입니다.\n자동으로 차단된 IP 주소는 여기에 나오지 않습니다.\n[[Special:BlockList|여기]]에서 현재 차단된 사용자 목록을 볼 수 있습니다.",
-       "unblocklogentry": "사용자가 $1 사용자를 차단 해제했습니다",
+       "unblocklogentry": "님이 $1님을 차단 해제했습니다",
        "block-log-flags-anononly": "IP만 막음",
        "block-log-flags-nocreate": "계정 만들기 금지됨",
        "block-log-flags-noautoblock": "자동 차단 비활성화됨",
        "block-log-flags-hiddenname": "사용자 이름 숨겨짐",
        "range_block_disabled": "IP 범위 차단 기능이 비활성화되어 있습니다.",
        "ipb_expiry_invalid": "차단 기간이 잘못되었습니다.",
+       "ipb_expiry_old": "기한을 과거로 입력했습니다.",
        "ipb_expiry_temp": "사용자 이름을 숨기는 차단은 반드시 무기한이어야 합니다.",
        "ipb_hide_invalid": "해당 계정은 막을 수 없습니다. {{PLURAL:$1|1회|$1회}} 이상 편집했습니다.",
-       "ipb_already_blocked": "\"$1\" 사용자는 이미 차단되었습니다",
-       "ipb-needreblock": "$1 사용자는 이미 차단되었습니다. 차단 설정을 바꾸시겠습니까?",
+       "ipb_already_blocked": "\"$1\"님은 이미 차단되었습니다.",
+       "ipb-needreblock": "$1님은 이미 차단되었습니다. 차단 설정을 바꾸시겠습니까?",
        "ipb-otherblocks-header": "다른 {{PLURAL:$1|차단}} 기록",
        "unblock-hideuser": "이 사용자 이름이 숨겨져 있기 때문에 이 사용자를 차단 해제할 수 없습니다.",
        "ipb_cant_unblock": "오류: $1 차단 ID가 존재하지 않습니다. 이미 차단 해제되었을 수 있습니다.",
        "export-download": "파일로 저장",
        "export-templates": "틀 포함하기",
        "export-pagelinks": "다음 단계로 링크된 문서를 포함:",
+       "export-manual": "직접 문서 추가하기:",
        "allmessages": "시스템 메시지 목록",
        "allmessagesname": "이름",
        "allmessagesdefault": "기본 메시지 글",
        "import-nonewrevisions": "가져온 판 없음(모든 판이 이미 존재하거나 오류로 인해 건너뛰었을 수도 있습니다.)",
        "xml-error-string": "$3단 $2줄 (바이트 $4)에서 $1: $5",
        "import-upload": "XML 데이터 올리기",
-       "import-token-mismatch": "세션 데이터가 손실되었습니다.\n다시 시도하세요.",
+       "import-token-mismatch": "세션 데이터가 손실되었습니다.\n\n로그아웃 되었는지도 모릅니다. <strong>아직 로그인 상태인지 확인하고 다시 시도해주세요</strong>.\n다시 시도해도 되지 않으면 [[Special:UserLogout|로그아웃]]한 다음 다시 로그인하세요. 그리고 브라우저 설정에서 쿠키 사용을 허용하는지 확인하세요.",
        "import-invalid-interwiki": "해당 위키에서 문서를 가져올 수 없습니다.",
        "import-error-edit": "문서를 편집할 수 없기 때문에 \"$1\" 문서를 가져올 수 없었습니다.",
        "import-error-create": "문서를 만들 수 없기 때문에 \"$1\" 문서를 가져올 수 없었습니다.",
        "javascripttest-pagetext-frameworks": "다음 실험용 프레임워크 중 하나를 선택하세요: $1",
        "javascripttest-pagetext-skins": "실험할 스킨을 선택하세요:",
        "javascripttest-qunit-intro": "mediawiki.org의 [$1 테스트 설명서]를 참고하세요.",
-       "tooltip-pt-userpage": "내 사용자 문서",
+       "tooltip-pt-userpage": "{{GENDER:|내 사용자}} 문서",
        "tooltip-pt-anonuserpage": "현재 사용하는 IP 주소의 사용자 문서",
-       "tooltip-pt-mytalk": " 토론 문서",
+       "tooltip-pt-mytalk": "{{GENDER:|내}} 토론 문서",
        "tooltip-pt-anontalk": "현재 사용하는 IP 주소에 대한 토론 문서",
-       "tooltip-pt-preferences": "사용자 환경 설정",
+       "tooltip-pt-preferences": "{{GENDER:|사용자}} 환경 설정",
        "tooltip-pt-watchlist": "주시문서에 대한 바뀜 목록",
-       "tooltip-pt-mycontris": " 기여의 목록",
+       "tooltip-pt-mycontris": "{{GENDER:|내}} 기여의 목록",
        "tooltip-pt-anoncontribs": "이 IP 주소의 편집 목록",
        "tooltip-pt-login": "꼭 로그인해야 하는 것은 아니지만, 로그인을 권장합니다.",
        "tooltip-pt-logout": "로그아웃",
        "tooltip-t-recentchangeslinked": "이 문서에서 링크한 문서의 최근 바뀜",
        "tooltip-feed-rss": "이 문서의 RSS 피드",
        "tooltip-feed-atom": "이 문서의 Atom 피드",
-       "tooltip-t-contributions": "이 사용자의 기여 목록",
-       "tooltip-t-emailuser": "이 사용자에게 이메일 보내기",
+       "tooltip-t-contributions": "{{GENDER:$1|이 사용자}}의 기여 목록",
+       "tooltip-t-emailuser": "{{GENDER:$1|이 사용자}}에게 이메일 보내기",
        "tooltip-t-info": "이 문서에 대한 자세한 정보",
        "tooltip-t-upload": "파일 올리기",
        "tooltip-t-specialpages": "모든 특수 문서의 목록",
        "lastmodifiedatby": "이 문서는 $3 사용자가 $1 $2에 마지막으로 바꾸었습니다.",
        "othercontribs": "$1의 작업을 바탕으로 합니다.",
        "others": "기타",
-       "siteusers": "{{SITENAME}} {{PLURAL:$2|사용자}} $1",
+       "siteusers": "{{SITENAME}} {{PLURAL:$2|{{GENDER:$1|사용자}}}} $1",
        "anonusers": "{{SITENAME}} 익명 {{PLURAL:$2|사용자}} $1",
        "creditspage": "문서 기여자",
        "nocredits": "이 문서에서는 기여자 정보가 없습니다.",
        "pageinfo-visiting-watchers": "이 문서를 최근에 방문한 주시하는 사용자 수",
        "pageinfo-few-watchers": "{{PLURAL:$1|주시하는 사용자}} $1명보다 적음",
        "pageinfo-redirects-name": "이 문서의 넘겨주기 수",
-       "pageinfo-redirects-value": "$1",
+       "pageinfo-redirects-value": "$1",
        "pageinfo-subpages-name": "이 문서의 하위 문서 수",
        "pageinfo-subpages-value": "$1개 ({{PLURAL:$2|넘겨주기}} $2개, {{PLURAL:$3|넘겨주기 아님}} $3개)",
        "pageinfo-firstuser": "문서 작성자",
        "pageinfo-category-files": "파일 수",
        "markaspatrolleddiff": "점검한 문서로 표시",
        "markaspatrolledtext": "이 문서를 점검한 것으로 표시",
+       "markaspatrolledtext-file": "이 파일 버전을 점검한 것으로 표시",
        "markedaspatrolled": "점검한 문서로 표시",
        "markedaspatrolledtext": "[[:$1]] 문서의 선택한 판을 점검한 것으로 표시했습니다.",
        "rcpatroldisabled": "최근 바뀜 점검 기능 비활성화됨",
        "svg-long-error": "잘못된 SVG 파일: $1",
        "show-big-image": "원본 파일",
        "show-big-image-preview": "미리 보기 크기: $1",
+       "show-big-image-preview-differ": "$2 파일의 $3 형식의 미리보기 크기: $1.",
        "show-big-image-other": "다른 {{PLURAL:$2|해상도}}: $1",
        "show-big-image-size": "$1 × $2 픽셀",
        "file-info-gif-looped": "반복됨",
        "newimages-legend": "필터",
        "newimages-label": "파일 이름 (또는 그 일부분):",
        "newimages-showbots": "봇이 올린 것 보기",
+       "newimages-hidepatrolled": "점검한 업로드 숨기기",
        "noimages": "그림이 없습니다.",
        "ilsubmit": "검색",
        "bydate": "날짜",
        "exif-compression-32946": "수축 (PKZIP)",
        "exif-copyrighted-true": "저작권의 보호를 받음",
        "exif-copyrighted-false": "저작권 상태를 설정하지 않음",
+       "exif-photometricinterpretation-0": "흑백 (백은 0)",
+       "exif-photometricinterpretation-1": "검은색과 흰색 (검은색이 0)",
+       "exif-photometricinterpretation-3": "팔레트",
+       "exif-photometricinterpretation-4": "투명 마스크",
+       "exif-photometricinterpretation-5": "분리 (아마도 CMYK)",
+       "exif-photometricinterpretation-9": "CIE L*a*b* (ICC 인코딩)",
+       "exif-photometricinterpretation-10": "CIE L*a*b* (ITU 인코딩)",
+       "exif-photometricinterpretation-32803": "컬러 필터 어레이",
        "exif-unknowndate": "날짜를 알 수 없음",
        "exif-orientation-1": "일반",
        "exif-orientation-2": "수평으로 뒤집음",
        "scarytranscludefailed-httpstatus": "[$1 틀을 가져오는 데 실패했습니다: HTTP $2]",
        "scarytranscludetoolong": "[URL이 너무 깁니다]",
        "deletedwhileediting": "<strong>경고:</strong> 이 문서를 편집하던 중에 이 문서가 삭제되었습니다!",
-       "confirmrecreate": "[[User:$1|$1]] 사용자([[User talk:$1|토론]])가 당신이 편집하는 도중에 문서를 삭제했습니다. 삭제 이유는 다음과 같습니다:\n: $2\n문서를 다시 만들어야 하는지 확인해주세요.",
-       "confirmrecreate-noreason": "[[User:$1|$1]] 사용자([[User talk:$1|토론]])가 당신이 편집하는 도중에 문서를 삭제했습니다. 문서를 다시 만들어야 하는지 확인해주세요.",
+       "confirmrecreate": "[[User:$1|$1]] 사용자([[User talk:$1|토론]])가 당신이 편집하는 도중에 문서를 {{GENDER:$1|삭제했습니다}}. 삭제 이유는 다음과 같습니다:\n: $2\n문서를 다시 만들어야 하는지 확인해주세요.",
+       "confirmrecreate-noreason": "[[User:$1|$1]] 사용자([[User talk:$1|토론]])가 당신이 편집하는 도중에 문서를 {{GENDER:$1|삭제했습니다}}. 문서를 다시 만들어야 하는지 확인해주세요.",
        "recreate": "새로 만들기",
        "confirm_purge_button": "확인",
        "confirm-purge-top": "이 문서의 캐시를 지울까요?",
        "autoredircomment": "[[$1]] 문서로 넘겨주기",
        "autosumm-new": "새 문서: $1",
        "autosumm-newblank": "빈 문서를 만듦",
+       "size-bytes": "$1 {{PLURAL:$1|바이트}}",
+       "size-pixel": "$1 {{PLURAL:$1|픽셀}}",
        "lag-warn-normal": "최근 $1{{PLURAL:$1|초}} 안에 바뀐 문서는 이 목록에서 빠졌을 수 있습니다.",
        "lag-warn-high": "데이터베이스 서버의 과도한 부하 때문에 최근 $1{{PLURAL:$1|초}} 안에 바뀐 문서 목록은 보이지 않을 수 있습니다.",
        "watchlistedit-normal-title": "주시문서 목록 편집하기",
        "watchlisttools-edit": "주시문서 목록 보기/편집하기",
        "watchlisttools-raw": "주시문서 목록 직접 편집하기",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|토론]])",
+       "timezone-local": "로컬",
        "duplicate-defaultsort": "<strong>경고:</strong> 기본 정렬 키 \"$2\"가 이전의 기본 정렬 키 \"$1\"를 덮어쓰고 있습니다.",
        "duplicate-displaytitle": "<strong>경고:</strong> \"$2\" 제목 표시는 기존의 표시되는 제목 \"$1\"을 덮어씁니다.",
        "invalid-indicator-name": "<strong>오류:</strong> 문서 상태 표시기의 <code>name</code> 특성은 비어 있지 않아야 합니다.",
        "version-libraries-license": "라이선스",
        "version-libraries-description": "설명",
        "version-libraries-authors": "저자",
-       "redirect": "파일, 사용자, 문서나 판 ID로 넘겨주기",
+       "redirect": "파일, 사용자 ID, 문서 ID, 판 ID나 로그 ID로 넘겨주기",
        "redirect-legend": "파일이나 문서로 넘겨주기",
-       "redirect-summary": "이 특수 문서는 파일(파일 이름이 주어짐), 문서(판 ID나 문서 ID가 주어짐)나 사용자 문서(숫자로 표시된 사용자 ID가 주어짐)로 넘겨줍니다. 사용법: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], 또는 [[{{#Special:Redirect}}/user/101]].",
+       "redirect-summary": "이 특수 문서는 파일(파일 이름이 주어짐), 문서(판 ID나 문서 ID가 주어짐), 사용자 문서(숫자로 표시된 사용자 ID가 주어짐)나 로그 항목(로그 ID가 주어짐)으로 넘겨줍니다. 사용법: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], 또는 [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "보기",
        "redirect-lookup": "찾을 종류:",
        "redirect-value": "값:",
        "redirect-page": "문서 ID",
        "redirect-revision": "문서 판",
        "redirect-file": "파일 이름",
+       "redirect-logid": "Log 아이디",
        "redirect-not-exists": "값을 찾을 수 없습니다",
        "fileduplicatesearch": "중복된 파일 검색",
        "fileduplicatesearch-summary": "파일 해시값을 이용해 중복 파일을 검색합니다.",
        "tags-edit-revision-legend": "{{PLURAL:$1|이 판|$1개 판 모두}}에 태그를 추가하거나 제거",
        "tags-edit-logentry-legend": "{{PLURAL:$1|이 기록|$1개 기록 모두}}에 태그를 추가하거나 제거",
        "tags-edit-existing-tags": "기존 태그:",
-       "tags-edit-existing-tags-none": "''없음''",
+       "tags-edit-existing-tags-none": "<em>없음</em>",
        "tags-edit-new-tags": "새 태그:",
        "tags-edit-add": "다음 태그를 추가:",
        "tags-edit-remove": "다음 태그를 제거:",
        "tags-edit-chosen-no-results": "일치하는 태그를 찾을 수 없습니다",
        "tags-edit-reason": "이유:",
        "tags-edit-revision-submit": "{{PLURAL:$1|이 판|$1개 판}}에 수정 사항을 적용",
-       "tags-edit-logentry-submit": "{{PLURAL:$1|이 기록|$1개 기록}}에 수정 사항을 적용",
-       "tags-edit-success": "수정사항이 성공적으로 적용되었습니다.",
+       "tags-edit-logentry-submit": "{{PLURAL:$1|이 기록 항목|$1개 기록 항목}}에 수정 사항을 적용",
+       "tags-edit-success": "바뀜이 적용되었습니다.",
        "tags-edit-failure": "수정 사항이 적용될 수 없습니다: $1",
        "tags-edit-nooldid-title": "대상 판이 잘못되었습니다",
        "tags-edit-nooldid-text": "이 기능을 수행할 특정 판을 제시하지 않았거나 해당 판이 없습니다.",
        "htmlform-user-not-valid": "<strong>$1</strong>은 올바른 사용자 이름이 아닙니다.",
        "sqlite-has-fts": "$1 (본문 전체 검색 지원)",
        "sqlite-no-fts": "$1 (본문 전체 검색 지원 제외)",
-       "logentry-delete-delete": "$1 사용자가 $3 문서를 {{GENDER:$2|삭제했습니다}}",
-       "logentry-delete-restore": "$1 사용자가 $3 문서를 {{GENDER:$2|되살렸습니다}}",
-       "logentry-delete-event": "$1 사용자가 $3의 {{PLURAL:$1|기록 $5개}}에 대해 보이기 설정을 {{GENDER:$2|바꾸었습니다}}: $4",
-       "logentry-delete-revision": "$1 사용자가 $3 문서의 {{PLURAL:$5|$5개 편집}}의 설정을 {{GENDER:$2|바꾸었습니다}}: $4",
-       "logentry-delete-event-legacy": "$1 사용자가 $3 문서 기록의 보이기 설정을 {{GENDER:$2|바꾸었습니다}}",
-       "logentry-delete-revision-legacy": "$1 사용자가 $3 문서 편집의 보이기 설정을 {{GENDER:$2|바꾸었습니다}}",
-       "logentry-suppress-delete": "$1 사용자가 $3 문서를 {{GENDER:$2|숨겼습니다}}",
-       "logentry-suppress-event": "$1 사용자가 비공개적으로 $3의 {{PLURAL:$5|기록 $5개}}에 대해 보이기 설정을 {{GENDER:$2|바꾸었습니다}}: $4",
-       "logentry-suppress-revision": "$1 사용자가 비공개적으로 $3 문서의 {{PLURAL:$5|판 $5개}}에 대해 보이기 설정을 {{GENDER:$2|바꾸었습니다}}: $4",
-       "logentry-suppress-event-legacy": "$1 사용자가 비공개적으로 $3의 항목에 대한 보이기 설정을 {{GENDER:$2|바꾸었습니다}}",
-       "logentry-suppress-revision-legacy": "$1 사용자가 비공개적으로 $3 문서의 특정 판에 대한 보이기 설정을 {{GENDER:$2|바꾸었습니다}}",
+       "logentry-delete-delete": "$1님이 $3 문서를 {{GENDER:$2|삭제했습니다}}",
+       "logentry-delete-restore": "$1님이 $3 문서를 {{GENDER:$2|되살렸습니다}}",
+       "logentry-delete-event": "$1님이 $3의 {{PLURAL:$1|기록 $5개}}에 대해 보이기 설정을 {{GENDER:$2|바꾸었습니다}}: $4",
+       "logentry-delete-revision": "$1님이 $3 문서의 {{PLURAL:$5|$5개 편집}}의 설정을 {{GENDER:$2|바꾸었습니다}}: $4",
+       "logentry-delete-event-legacy": "$1님이 $3 문서 기록의 보이기 설정을 {{GENDER:$2|바꾸었습니다}}",
+       "logentry-delete-revision-legacy": "$1님이 $3 문서 편집의 보이기 설정을 {{GENDER:$2|바꾸었습니다}}",
+       "logentry-suppress-delete": "$1님이 $3 문서를 {{GENDER:$2|숨겼습니다}}",
+       "logentry-suppress-event": "$1님이 비공개적으로 $3의 {{PLURAL:$5|기록 $5개}}에 대해 보이기 설정을 {{GENDER:$2|바꾸었습니다}}: $4",
+       "logentry-suppress-revision": "$1님이 비공개적으로 $3 문서의 {{PLURAL:$5|판 $5개}}에 대해 보이기 설정을 {{GENDER:$2|바꾸었습니다}}: $4",
+       "logentry-suppress-event-legacy": "$1님이 비공개적으로 $3의 항목에 대한 보이기 설정을 {{GENDER:$2|바꾸었습니다}}",
+       "logentry-suppress-revision-legacy": "$1님이 비공개적으로 $3 문서의 특정 판에 대한 보이기 설정을 {{GENDER:$2|바꾸었습니다}}",
        "revdelete-content-hid": "내용 숨겨짐",
        "revdelete-summary-hid": "편집 요약 숨겨짐",
        "revdelete-uname-hid": "사용자 이름 숨겨짐",
        "revdelete-uname-unhid": "사용자 이름 숨김 해제됨",
        "revdelete-restricted": "관리자에게 제한을 적용함",
        "revdelete-unrestricted": "관리자에 대한 제한을 해제함",
-       "logentry-block-block": "$1 {{GENDER:$2|사용자가}} {{GENDER:$4|$3}} 사용자를 $5 $6 설정으로 차단했습니다.",
-       "logentry-block-unblock": "$1 {{GENDER:$2|사용자가}} {{GENDER:$4|$3}} 사용자의 차단을 해제했습니다.",
-       "logentry-block-reblock": "$1 {{GENDER:$2|사용자가}} {{GENDER:$4|$3}} 사용자의 차단을 $5 $6 설정으로 변경했습니다.",
-       "logentry-suppress-block": "$1 {{GENDER:$2|사용자가}} {{GENDER:$4|$3}} 사용자를 $5 $6 설정으로 차단했습니다.",
-       "logentry-suppress-reblock": "$1 {{GENDER:$2|사용자가}} {{GENDER:$4|$3}} 사용자의 차단을 $5 $6 설정으로 변경했습니다.",
-       "logentry-import-upload": "$1 사용자가 $3 문서를 파일 올리기로 {{GENDER:$2|가져왔습니다}}",
-       "logentry-import-interwiki": "$1 사용자가 $3을 다른 위키에서 {{GENDER:$2|가져왔습니다}}",
-       "logentry-merge-merge": "$1 사용자가 $3 문서를 $4 안에 {{GENDER:$2|병합했습니다}} (판은 $5까지)",
-       "logentry-move-move": "$1 사용자가 $3 문서를 $4 문서로 {{GENDER:$2|이동했습니다}}",
-       "logentry-move-move-noredirect": "$1 사용자가 $3 문서를 넘겨주기를 만들지 않고 $4 문서로 {{GENDER:$2|옮겼습니다}}",
-       "logentry-move-move_redir": "$1 사용자가 $3 문서를 $4 문서로 {{GENDER:$2|이동하면서}} 넘겨주기를 덮어썼습니다",
-       "logentry-move-move_redir-noredirect": "$1 사용자가 $3 문서를 $4 문서로 넘겨주기를 남기지 않고 {{GENDER:$2|이동하면서}} 이동할 대상에 있던 넘겨주기를 덮어썼습니다",
-       "logentry-patrol-patrol": "$1 사용자가 $3 문서의 $4판을 점검한 것으로 {{GENDER:$2|표시했습니다}}",
-       "logentry-patrol-patrol-auto": "$1 사용자가 자동적으로 $3 문서의 $4판을 점검한 것으로 {{GENDER:$2|표시했습니다}}",
+       "logentry-block-block": "$1님이 {{GENDER:$4|$3}}님을 $5 {{GENDER:$2|차단했습니다}} $6",
+       "logentry-block-unblock": "$1님이 {{GENDER:$4|$3}} 사용자의 {{GENDER:$2|차단을 해제했습니다}}",
+       "logentry-block-reblock": "$1님이 {{GENDER:$4|$3}} 사용자의 차단 기간을 $5 설정으로 {{GENDER:$2|바꾸었습니다}} $6",
+       "logentry-suppress-block": "$1님이 {{GENDER:$4|$3}} 사용자를 $5 {{GENDER:$2|차단했습니다}} $6",
+       "logentry-suppress-reblock": "$1님이 {{GENDER:$4|$3}} 사용자의 차단 기간을 $5 설정으로 {{GENDER:$2|바꾸었습니다}} $6",
+       "logentry-import-upload": "$1님이 $3 문서를 파일 올리기로 {{GENDER:$2|가져왔습니다}}",
+       "logentry-import-upload-details": "$1님이 $3 문서 ({{PLURAL:$4|판}} $4개)를 파일 올리기로 {{GENDER:$2|가져왔습니다}}",
+       "logentry-import-interwiki": "$1님이 $3 문서를 다른 위키에서 {{GENDER:$2|가져왔습니다}}",
+       "logentry-import-interwiki-details": "$1님이 $3 문서 ({{PLURAL:$4|판}} $4개)를 다른 위키에서 {{GENDER:$2|가져왔습니다}}",
+       "logentry-merge-merge": "$1님이 $3 문서를 $4 안에 {{GENDER:$2|병합했습니다}} (판은 $5까지)",
+       "logentry-move-move": "$1님이 $3 문서를 $4 문서로 {{GENDER:$2|이동했습니다}}",
+       "logentry-move-move-noredirect": "$1님이 $3 문서를 넘겨주기를 만들지 않고 $4 문서로 {{GENDER:$2|이동했습니다}}",
+       "logentry-move-move_redir": "$1님이 $3 문서를 $4 문서로 {{GENDER:$2|이동하면서}} 넘겨주기를 덮어썼습니다",
+       "logentry-move-move_redir-noredirect": "$1님이 $3 문서를 $4 문서로 넘겨주기를 남기지 않고 {{GENDER:$2|이동하면서}} 이동할 대상에 있던 넘겨주기를 덮어썼습니다",
+       "logentry-patrol-patrol": "$1님이 $3 문서의 $4판을 점검한 것으로 {{GENDER:$2|표시했습니다}}",
+       "logentry-patrol-patrol-auto": "$1님이 자동적으로 $3 문서의 $4판을 점검한 것으로 {{GENDER:$2|표시했습니다}}",
        "logentry-newusers-newusers": "$1 사용자 계정을 {{GENDER:$2|만들었습니다}}",
        "logentry-newusers-create": "$1 사용자 계정을 {{GENDER:$2|만들었습니다}}",
-       "logentry-newusers-create2": "$1 사용자가 $3 사용자 계정을 {{GENDER:$2|만들었습니다}}",
+       "logentry-newusers-create2": "$3 사용자 계정을 $1님이 {{GENDER:$2|만들었습니다}}",
        "logentry-newusers-byemail": "$3 사용자 계정을 $1님이 {{GENDER:$2|만들었고}} 비밀번호는 이메일로 보냈습니다",
        "logentry-newusers-autocreate": "$1 사용자 계정을 자동으로 {{GENDER:$2|만들었습니다}}",
-       "logentry-protect-move_prot": "$1 사용자가 보호 설정을 $4에서 $3으로 {{GENDER:$2|이동했습니다}}",
-       "logentry-protect-unprotect": "$1 사용자가 $3 문서의 보호를 {{GENDER:$2|해제했습니다}}",
-       "logentry-protect-protect": "$1 사용자가 $3 문서를 {{GENDER:$2|보호했습니다}} $4",
-       "logentry-protect-protect-cascade": "$1 사용자가 $3 문서를 {{GENDER:$2|보호했습니다}} $4 [연쇄적]",
-       "logentry-protect-modify": "$1 사용자가 $3 문서의 보호 수준을 {{GENDER:$2|바꾸었습니다}} $4",
-       "logentry-protect-modify-cascade": "$1 사용자가 $3 문서의 보호 수준을 {{GENDER:$2|바꾸었습니다}} $4 [연쇄적]",
-       "logentry-rights-rights": "$1 사용자가 $3 사용자의 권한을 $4에서 $5(으)로 {{GENDER:$2|바꾸었습니다}}",
-       "logentry-rights-rights-legacy": "$1 사용자가 $3 사용자의 권한을 {{GENDER:$2|바꾸었습니다}}",
-       "logentry-rights-autopromote": "$1 사용자의 권한을 자동적으로 $4에서 $5으로 {{GENDER:$2|바꾸었습니다}}",
-       "logentry-upload-upload": "$1 사용자가 $3 파일을 {{GENDER:$2|올렸습니다}}",
-       "logentry-upload-overwrite": "$1 사용자가 $3의 새 판을 {{GENDER:$2|올렸습니다}}",
-       "logentry-upload-revert": "$1 사용자가 $3 파일을 {{GENDER:$2|올렸습니다}}",
+       "logentry-protect-move_prot": "$1님이 보호 설정을 $4에서 $3으로 {{GENDER:$2|이동했습니다}}",
+       "logentry-protect-unprotect": "$1님이 $3 문서의 보호를 {{GENDER:$2|해제했습니다}}",
+       "logentry-protect-protect": "$1님이 $3 문서를 {{GENDER:$2|보호했습니다}} $4",
+       "logentry-protect-protect-cascade": "$1님이 $3 문서를 {{GENDER:$2|보호했습니다}} $4 [연쇄적]",
+       "logentry-protect-modify": "$1님이 $3 문서의 보호 수준을 {{GENDER:$2|바꾸었습니다}} $4",
+       "logentry-protect-modify-cascade": "$1님이 $3 문서의 보호 수준을 {{GENDER:$2|바꾸었습니다}} $4 [연쇄적]",
+       "logentry-rights-rights": "$1님이 $3 사용자의 권한을 $4에서 $5(으)로 {{GENDER:$2|바꾸었습니다}}",
+       "logentry-rights-rights-legacy": "$1님이 $3 사용자의 권한을 {{GENDER:$2|바꾸었습니다}}",
+       "logentry-rights-autopromote": "$1님이 권한을 자동적으로 $4에서 $5으로 {{GENDER:$2|바꾸었습니다}}",
+       "logentry-upload-upload": "$1님이 $3 파일을 {{GENDER:$2|올렸습니다}}",
+       "logentry-upload-overwrite": "$1님이 $3의 새 판을 {{GENDER:$2|올렸습니다}}",
+       "logentry-upload-revert": "$1님이 $3 파일을 {{GENDER:$2|올렸습니다}}",
        "log-name-managetags": "태그 관리 기록",
        "log-description-managetags": "이 문서는 [[Special:Tags|태그]]에 관한 관리 작업의 목록입니다. 이 기록에는 관리자가 직접 실행한 동작만이 기록되며, 위키 소프트웨어에 의해 태그가 생성 및 삭제되는 경우는 기록되지 않습니다.",
-       "logentry-managetags-create": "$1 {{GENDER:$2|사용자가}} \"$4\" 태그를 만들었습니다",
-       "logentry-managetags-delete": "$1 {{GENDER:$2|사용자가}} \"$4\" 태그를 삭제하였습니다 ($5개 {{PLURAL:$5|판 및 기록}}에서 제거되었습니다)",
-       "logentry-managetags-activate": "$1 {{GENDER:$2|사용자가}} \"$4\" 태그를 사용자나 봇이 사용하도록 활성화시켰습니다",
-       "logentry-managetags-deactivate": "$1 {{GENDER:$2|사용자가}} \"$4\" 태그를 사용자나 봇이 사용하지 못하도록 비활성화시켰습니다",
+       "logentry-managetags-create": "$1님이 \"$4\" 태그를 {{GENDER:$2|만들었습니다}}",
+       "logentry-managetags-delete": "$1님이 \"$4\" 태그를 삭제하였습니다 ($5개 {{PLURAL:$5|판 및 기록}}에서 {{GENDER:$2|제거되었습니다}})",
+       "logentry-managetags-activate": "$1님이 \"$4\" 태그를 사용자나 봇이 사용하도록 {{GENDER:$2|활성화시켰습니다}}",
+       "logentry-managetags-deactivate": "$1님이 \"$4\" 태그를 사용자나 봇이 사용하지 못하도록 {{GENDER:$2|비활성화시켰습니다}}",
        "log-name-tag": "태그 기록",
        "log-description-tag": "이 문서는 사용자들이 특정 판이나 기록 항목에서 [[Special:Tags|태그]]를 추가하고 제거한 경우를 보여줍니다. 이 기록에는 편집이나 삭제, 이와 유사한 행위를 통해 태그가 붙는 경우는 기록되지 않습니다.",
-       "logentry-tag-update-add-revision": "$1 사용자가 $3 문서의 $4판에 $6 {{PLURAL:$7|태그}}를 {{GENDER:$2|추가했습니다}}",
-       "logentry-tag-update-add-logentry": "$1 사용자가 $3 문서의 기록 항목 $5에 $6 {{PLURAL:$7|태그}}를 {{GENDER:$2|추가했습니다}}",
-       "logentry-tag-update-remove-revision": "$1 사용자가 $3 문서의 $4판에서 $8 {{PLURAL:$9|태그}}를 {{GENDER:$2|제거했습니다}}",
-       "logentry-tag-update-remove-logentry": "$1 사용자가 $3 문서의 기록 항목 $5에서 $8 {{PLURAL:$9|태그}}를 {{GENDER:$2|제거했습니다}}",
-       "logentry-tag-update-revision": "$1 사용자가 $3 문서의 $4 판에서 태그를 {{GENDER:$2|수정했습니다}} ($6을(를) {{PLURAL:$7|추가함}}; $8을(를) {{PLURAL:$9|제거함}})",
+       "logentry-tag-update-add-revision": "$1님이 $3 문서의 $4판에 $6 {{PLURAL:$7|태그}}를 {{GENDER:$2|추가했습니다}}",
+       "logentry-tag-update-add-logentry": "$1님이 $3 문서의 기록 항목 $5에 $6 {{PLURAL:$7|태그}}를 {{GENDER:$2|추가했습니다}}",
+       "logentry-tag-update-remove-revision": "$1님이 $3 문서의 $4판에서 $8 {{PLURAL:$9|태그}}를 {{GENDER:$2|제거했습니다}}",
+       "logentry-tag-update-remove-logentry": "$1님이 $3 문서의 기록 항목 $5에서 $8 {{PLURAL:$9|태그}}를 {{GENDER:$2|제거했습니다}}",
+       "logentry-tag-update-revision": "$1님이 $3 문서의 $4 판에서 태그를 {{GENDER:$2|업데이트했습니다}} ($6 {{PLURAL:$7|추가함}}; $8 {{PLURAL:$9|제거함}})",
+       "logentry-tag-update-logentry": "$1님이 $3 문서의 기록 항목 $5에 있는 태그를 {{GENDER:$2|업데이트했습니다}} ($6 {{PLURAL:$7|추가함}}; $8 {{PLURAL:$9|제거함}})",
        "rightsnone": "(없음)",
        "revdelete-summary": "편집 요약",
        "feedback-adding": "문서에 피드백을 올리는 중...",
        "expand_templates_generate_xml": "XML 구문 트리 보기",
        "expand_templates_generate_rawhtml": "원본 HTML 보이기",
        "expand_templates_preview": "미리 보기",
-       "pagelanguage": "문서 언어 선택기",
+       "expand_templates_input_missing": "전개할 내용을 입력해야 합니다.",
+       "pagelanguage": "문서 언어 바꾸기",
        "pagelang-name": "문서",
        "pagelang-language": "언어",
        "pagelang-use-default": "기본 언어 사용",
        "action-pagelang": "문서 언어 바꾸기",
        "log-name-pagelang": "언어 바꾸기 기록",
        "log-description-pagelang": "문서 언어를 바꾼 기록입니다.",
-       "logentry-pagelang-pagelang": "$1 사용자가 $3의 문서 언어를 $4에서 $5로 {{GENDER:$2|바꾸었습니다}}.",
+       "logentry-pagelang-pagelang": "$1님이 $3의 언어를 $4에서 $5로 {{GENDER:$2|바꾸었습니다}}",
        "default-skin-not-found": "이런! 당신의 위키에 <code dir=\"ltr\">$wgDefaultSkin</code>에 <code>$1</code>(으)로 지정한 기본 스킨은 사용할 수 없습니다.\n\n설치에는 다음 {{PLURAL:$4|스킨}}이 포함된 것으로 보입니다. 스킨을 활성화{{PLURAL:$4||하고 기본값으로 선택}}하는 방법에 대한 정보에 대해서는 [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: 스킨 설정]을 보세요.\n\n$2\n\n; 미디어위키를 설치했다면:\n: 아마 git에서 설치했거나, 어떤 다른 방법을 사용하여 직접 설치했을 수 있을 것으로 봅니다. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org의 스킨 디렉터리]에서 어떤 스킨을 설치해보세요:\n:* 여러 스킨과 확장 기능이 들어 있는 [https://www.mediawiki.org/wiki/Download tarball 설치 관리자]를 다운로드하세요. 거기서 <code>skins/</code> 디렉터리를 복사하여 붙여 넣을 수 있습니다.\n:* [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]에서 개별 스킨 tarball을 다운로드하세요.\n:* 미디어위키 설치의 <code dir=\"ltr\">skins/</code> 디렉터리 안에 git를 통해 <code>mediawiki/skins/*</code> 저장소 중 하나를 복제하세요.\n: 당신이 미디어위키 개발자이면 당신의 git 저장소를 방해하면 안됩니다.\n\n; 미디어위키를 업그레이드했다면:\n: 미디어위키 1.24와 새 버전은 더 이상 설치된 스킨을 자동으로 활성화하지 않습니다 ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: 스킨 자동발견]을 보세요). 현재 설치된 {{PLURAL:$5|스킨|모든 스킨}}을 활성화하려면 <code>LocalSettings.php</code> 안에 다음 {{PLURAL:$5|줄}}을 붙여 넣을 수 있습니다:\n\n<pre dir=\"ltr\">$3</pre>\n\n; <code>LocalSettings.php</code>를 수정했다면:\n: 스킨 이름에 오타가 났는지 다시 확인하세요.",
        "default-skin-not-found-no-skins": "이런! 당신의 위키에 <code dir=\"ltr\">$wgDefaultSkin</code>에 <code>$1</code>(으)로 지정한 기본 스킨은 사용할 수 없습니다.\n\n설치된 스킨은 없습니다.\n\n; 미디어위키를 설치했거나 업그레이드했다면:\n: 아마 git에서 설치했거나, 어떤 다른 방법을 사용하여 직접 설치했을 수 있을 것으로 봅니다. 미디어위키 1.24와 새 버전은 주 저장소에 어떠한 스킨도 포함되어 있지 않습니다. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org의 스킨 디렉터리]에서 어떤 스킨을 설치해보세요:\n:* 여러 스킨과 확장 기능이 들어 있는 [https://www.mediawiki.org/wiki/Download tarball 설치 관리자]를 다운로드하세요. 거기서 <code>skins/</code> 디렉터리를 복사하여 붙여 넣을 수 있습니다.\n:* [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]에서 개별 스킨 tarball을 다운로드하세요.\n:* 미디어위키 설치의 <code dir=\"ltr\">skins/</code> 디렉터리 안에 git를 통해 <code>mediawiki/skins/*</code> 저장소 중 하나를 복제하세요.\n: 당신이 미디어위키 개발자이면 당신의 git 저장소를 방해하면 안됩니다. 스킨을 활성화하고 기본값으로 선택하는 방법에 대한 정보에 대해서는 [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: 스킨 설정]을 보세요.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (활성화)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''비활성화''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>비활성화</strong>)",
        "mediastatistics": "미디어 통계",
        "mediastatistics-summary": "올려진 파일 유형에 대한 통계입니다. 이 통계는 파일의 가장 최신 판만을 포함합니다. 오래되거나 삭제된 파일의 판은 제외됩니다.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 바이트}} ($2; $3%)",
-       "mediastatistics-bytespertype": "이 문단의 총 파일 크기:$1 바이트",
-       "mediastatistics-allbytes": "모든 파일의 총 파일 크기:$1 바이트",
+       "mediastatistics-bytespertype": "이 문단의 총 파일 크기: {{PLURAL:$1|$1}} 바이트 ($2; $3%).",
+       "mediastatistics-allbytes": "모든 파일의 총 파일 크기: {{PLURAL:$1|$1}} 바이트 ($2).",
        "mediastatistics-table-mimetype": "MIME 종류",
        "mediastatistics-table-extensions": "가능한 확장 기능",
        "mediastatistics-table-count": "파일 수",
        "mw-widgets-titleinput-description-new-page": "문서가 존재하지 않습니다",
        "mw-widgets-titleinput-description-redirect": "$1 문서로 넘겨주기",
        "api-error-blacklisted": "이 파일을 설명할 수 있는 다른 제목을 선택하세요.",
+       "sessionmanager-tie": "여러 요청 인증 유형 결합할 수 없습니다: $1.",
+       "sessionprovider-generic": "$1 세션",
+       "sessionprovider-mediawiki-session-cookiesessionprovider": "쿠키 기반 세션",
+       "sessionprovider-nocookies": "브라우저의 쿠키 기능이 꺼져 있는지 확인하십시오. 쿠키 기능을 켠 다음 다시 시작해야 합니다.",
        "randomrootpage": "임의 루트 페이지"
 }
index f7f31a6..dd0a5b2 100644 (file)
        "customjsprotected": "Бу JavaScript-бетни тюрлендирирге эркинлигигиз джокъду, бу бетде башха къошулуучуну энчи джарашдырыулары барды.",
        "mycustomcssprotected": "Бу CSS бетни тюрлендирирге эркинлигигиз джокъду.",
        "ns-specialprotected": "«{{ns:special}}» ат аламны бетлерин тюрлендирирге болмайды.",
-       "titleprotected": "Быллай атлы бет къураргъа [[User:$1|$1]]  къоймайды.\nБелгиленнген чурум: ''$2''.",
+       "titleprotected": "Быллай атлы бет къураргъа [[User:$1|$1]]  къоймайды.\nБелгиленнген чурум: <em>$2</em>.",
        "filereadonlyerror": "«$2» гезен «къуру окъур ючюн» режимде болгъаны себебли «$1» файл тюрленмейди.\n\nБу режимни салгъан администратор бу ангылатыуну къойгъанды: «''$3''».",
        "invalidtitle-knownnamespace": "«$2» ат аламы бла эм «$3» тексти бла джарамагъан башлыкъ.",
        "invalidtitle-unknownnamespace": "$1 белгили болмагъан алам номери бла эм «$2» тексти бла джарамагъан башлыкъ",
        "recentchanges-label-bot": "Бу тюрлендириуню бот этгенди",
        "recentchanges-label-unpatrolled": "Бу тюрлендириу алкъын патруль этилинмегенди",
        "recentchanges-label-plusminus": "Бетни ёлчеми быллай бир байтха тюрленнгенди",
-       "recentchanges-legend-heading": "'''Легенда:&nbsp;'''",
+       "recentchanges-legend-heading": "<strong>Легенда:&nbsp;</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (къарагъыз: [[Special:NewPages|джангы бетлени тизмеси]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Тюбюрекде <strong>$2</strong> башлаб (<strong>$1</strong> дери) тюрлендириуле кёрюнедиле",
        "filewasdeleted": "Быллай аты бла файл алгъаракъ джюкленнгенди, алай а артдан кетерилгенди. Файлны джюклеуню аллы бла, $1 бетге бир кёз джетдиригиз.",
        "filename-bad-prefix": "Джюклене тургъан файлны аты '''«$1»''' бла башланады эмда цифра камера суратларына берген шаблон ат болургъа болур.\nФайлны ангылатхан ат атаргъа кюрешигиз.",
        "filename-prefix-blacklist": " #<!-- бу тизгинни тургъаныча къоюгъуз --> <pre>\n# Синтаксис быллайды:\n#  * «#» символдан башланнган барысыда комментарийге саналады (тизгинни артына дери)\n#  * Хар джараусуз тизгин — файлны стандарт атыны префиксиди (цифра камера бериуюченди)\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # бир-бир мобил телефонла\nIMG # орта\nJD # Jenoptik\nMGP # Pentax\nPICT # тюрлю-тюрлюле\n  #</pre> <!-- бу тизгинни тургъаныча къоюгъуз -->",
-       "upload-success-subj": "Джюклеу тыйыншлы ётдю",
-       "upload-success-msg": "[$2] джюклемигиз тыйыншлы ётдю. Сиз джюклеген былайдады: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Джюклеу бла проблема",
-       "upload-failure-msg": "[$2] адресден джюклемигиз бла проблема болгъанды:\n\n$1",
-       "upload-warning-subj": "Джюклеуде эсгертиу",
-       "upload-warning-msg": "[$2] джюклеуюгюз бла халат болду. Халатны тюзетир ючюн [[Special:Upload/stash/$1|джюклеу формагъа]] къайтыгъыз.",
        "upload-proto-error": "Халатлы протокол",
        "upload-proto-error-text": "Узакъдан джюклеу,<code>http://</code> неда <code>ftp://</code> бла башланнган URL-ле керекдиле.",
        "upload-file-error": "Ич халат",
        "wlheader-showupdated": "Ахыр кириуюгюзден сора бетни тюрлениулери '''къалын''' джазыу бла кёргюзюлгенди.",
        "wlnote": "Тюбюндеди кёргюзюлгенди: ахыр '''$2''' сагъатха этилген ахыр '''$1''' тюрлениу, $3 $4 заманнга дери.",
        "wlshowlast": "Арт $1 сагъат $2 кюннге  кёргюз",
-       "watchlistall2": "бютеу",
        "watchlist-options": "Кёзде тургъан тизмени джарашдырыулары",
        "watching": "Кёзде тургъан тизмеге къошуу...",
        "unwatching": "Кёзде тургъан тизмеден кетериу...",
        "rollbackfailed": "Ызына алыу джетишимсизди",
        "cantrollback": "Бетге ахыр юлюш къошхан къошулуучу, бетге юлюшюн къошхан джангыз адам болгъаны себебли, тюрлендириуле ызына алыналмайдыла.",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|сюзюу]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) джанындан [[:$1]] бетде этилген ахыр тюрлендириу ызына алыналмайды;\nбашха бири бетде тюрлендириу этди неда бетни ызына алды.\n\nАхыр тюрлендириуюню этген: [[User:$3|$3]] ([[User talk:$3|сюзюу]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Тюрлениу былай ангылатылгъанды: ''«$1»''.",
+       "editcomment": "Тюрлениу былай ангылатылгъанды: <em>$1</em>.",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|сюзюу]]) къошулуучуну тюрлендириулери кетерилиб, [[User:$1|$1]] къошулуучуну версиясы къайтарылды.",
        "revertpage-nouser": "Тюрлендириуле (къошулуучуну аты кетерилгенди) [[User:$1|$1]] къошулуучуну версиясына къайтарылдыла",
        "rollback-success": "$1 этген тюрлендириуле ызына алыныб;\n$2 тюрлендирген алгъаракъ версиясына къайтылды.",
index b2bdd0b..a180506 100644 (file)
        "june": "Juni",
        "july": "Juli",
        "august": "Aujuss",
-       "september": "September",
+       "september": "Septämber",
        "october": "Oktober",
-       "november": "November",
-       "december": "Dezember",
+       "november": "Novämber",
+       "december": "Dezämber",
        "january-gen": "Janewar",
        "february-gen": "Febrewar",
        "march-gen": "Määz",
        "june-gen": "Juni",
        "july-gen": "Juli",
        "august-gen": "Aujuss",
-       "september-gen": "September",
+       "september-gen": "Septämber",
        "october-gen": "Oktober",
-       "november-gen": "November",
-       "december-gen": "Dezember",
+       "november-gen": "Novämber",
+       "december-gen": "Dezämber",
        "jan": "Jan",
        "feb": "Feb",
        "mar": "Mäz",
        "october-date": "$1. Oktoober",
        "november-date": "$1. Novämber",
        "december-date": "$1. Dezämber",
+       "period-am": "Vörmeddaach",
+       "period-pm": "Nommendaach",
        "pagecategories": "{{PLURAL:$1|Saachjropp|Saachjroppe|nix}}",
        "category_header": "Atikkele en dä Saachjropp „$1“",
        "subcategories": "Ongerjroppe",
        "pool-timeout": "Zick zem Waade affjeloufe, diweil mer op en Sperr am Waade wohre",
        "pool-queuefull": "De Schlang zom Waade op ene freie Prozäß zom Beärbeide es vull",
        "pool-errorunknown": "Dä Fähler kenne mer nit",
-       "pool-servererror": "Dä Dehns „<i lang=\"en\" xml:lang=\"en\">pool counter</i>“ schteiht nit zor Verföhjong ($1).",
+       "pool-servererror": "Dä „<i lang=\"en\" xml:lang=\"en\" dir=\"rtl\">pool-counter</i>“-Dehns schteiht nit zor Verföhjong ($1).",
        "poolcounter-usage-error": "Fähler beim Aanwände: $1",
        "aboutsite": "Övver {{GRAMMAR:Akkusativ|{{ucfirst:{{SITENAME}}}}}}",
        "aboutpage": "Project:Övver {{GRAMMAR:Akkusativ|{{ucfirst:{{SITENAME}}}}}}",
        "myprivateinfoprotected": "Do häs nit dat Rääsch, Ding päsöhnlesche Aanjahbe ze verändere.",
        "mypreferencesprotected": "Do häs nit dat Rääsch, Ding Enschtällonge ze verändere.",
        "ns-specialprotected": "{{int:nstab-special}}e künne mer nit ändere.",
-       "titleprotected": "Di Övverschreff för en Sigg eß fum [[User:$1]] verbodde woode, un der Jrond wohr: ''„$2“''",
+       "titleprotected": "Di Övverschreff för en Sigg eß fum [[User:$1|$1]] verbodde woode, un der Jrond wohr: „$2“",
        "filereadonlyerror": "Mer künne di Dattei „$1“ nit ändere, weil dä Dateijebeshtand „$2“ bloß för ze Lässe doh es.\n\nDä Verantwootlesche doför hät beim Deeschmaache als Jrond aanjejovve: „$3“",
        "invalidtitle-knownnamespace": "„$3“ es en onjöltijje Övverschreff för em Appachtemang „$2“",
        "invalidtitle-unknownnamespace": "„$2“ es sn onjöltijje Övverschreff em onbikannte Appachtemang met dä Nommer $1",
        "virus-scanfailed": "Dat Söhke eß donevve jejange, dä Kood för dä Fähler es „$1“.",
        "virus-unknownscanner": "Dat Projamm fö noh Komjuterviere ze sööke kenne mer nit:",
        "logouttext": "'''Jäz bes de usjelogg'''\n\nKünnt sin, dat De de ein udder andere Sigg noch wigger aanjezeich kriß, wie wann de noch enjelogg wörs. Dun Dingem Brauser singe <i lang=\"en\">Cache</i> fottschmieße udder läddesch maache, öm uß dä Nommer erus ze kumme!",
+       "cannotlogoutnow-title": "Ußlogge jeiht jrahd nit",
+       "cannotlogoutnow-text": "Ußlogge jeiht jrahd nit wam_mer $1 bruch.",
        "welcomeuser": "Wellkumme $1!",
        "welcomecreation-msg": "Dinge Zohjang es enjerescht.\nWann De wells, künnts De Ding [[Special:Preferences|Enschtällonge aanpaße]].",
        "yourname": "Metmaacher_Naame:",
        "remembermypassword": "Op Duur aanmelde (hält {{PLURAL:$1|för eine Daach|bes op $1 Dääsch|bloß för hück}})",
        "userlogin-remembermypassword": "Op Duur enlogge",
        "userlogin-signwithsecure": "Verschlößeld enlogge",
+       "cannotloginnow-title": "Ennlogge jeiht jrahd nit",
+       "cannotloginnow-text": "Ennlogge jeiht jrahd nit wam_mer $1 bruche well.",
        "yourdomainname": "Ding Domain",
        "password-change-forbidden": "Do kanns en heh däm Wiki kein Paßwööter ändere.",
        "externaldberror": "Do wor ene Fähler en de externe Daatebank, oder Do darfs Ding extern Daate nit ändere. Dat Aanmelde jingk jedenfalls donevve.",
        "nocookieslogin": "{{ucfirst:{{GRAMMAR:Nominativ|{{SITENAME}}}}}} bruch <i lang=\"en\">cookies</i> för et Enlogge. Et süht esu us, als hätts De de <i lang=\"en\">cookies</i> avjeschalt. Dun se aanschalte un dann versök et noch ens. Odder söök Der ene Brauser, dä et kann.",
        "nocookiesfornew": "Et wood keine Zohjang opjemaat, weil mer nit jeweß sin künne, woh de Daate her kohme.\nDinge Brauser moß <i lang=\"en\">cookies</i> enjeschalldt han.\nDonn dat prööfe, donn heh di Sigg norr_ens neu laade, un dann versöhk et norr_ens.",
        "noname": "Dat jeiht nit als ene Metmaacher Name. Jetz muss De et noch ens versöke.",
-       "loginsuccesstitle": "Dat Enlogge hät jeflupp.",
+       "loginsuccesstitle": "Enjelogg",
        "loginsuccess": "'''Do bes jetz enjelogg {{GRAMMAR:en|{{SITENAME}}}}, un Dinge Name als ene Metmaacher es „$1“.'''",
        "nosuchuser": "Dä Metmaacher Name „$1“ wor verkihrt.\nJroß- un Kleinboochshtabe maache ene Ungerscheid!\n<br />\nJetz muss De et noch ens versöke.\nUdder donn_[[Special:UserLogin/signup|ene neue Metmaacher aanmelde]].",
        "nosuchusershort": "Dä Metmaacher Name „$1“ wor verkihrt. Jetz muss De et noch ens versöke.",
        "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.",
+       "botpasswords": "Bot-Paßwööter",
+       "botpasswords-disabled": "Bot-Paßwööter sin ußjeschallt",
+       "botpasswords-no-central-id": "Öm Bot-Paßwööter bruche ze künne, moß De övve en jemeinsamme Aanmälldong ennjelogg sin.",
+       "botpasswords-existing": "Vörhande Bot-Paßwööter",
+       "botpasswords-createnew": "Lääsch e neu Bot-Paßwööter aan",
+       "botpasswords-editexisting": "Verännder a Bot-Paßwööter",
+       "botpasswords-label-appid": "Däm Bot singe Nahme",
+       "botpasswords-label-create": "Neu maache",
+       "botpasswords-label-update": "Änndere",
+       "botpasswords-label-cancel": "Ophüre",
+       "botpasswords-label-delete": "Fottschmiiße",
+       "botpasswords-label-resetpassword": "Paßwoot neu säze",
+       "botpasswords-label-restrictions": "Beschränkonge:",
+       "botpasswords-bad-appid": "„$1“ es keine jölltejje Nahme för ene Bot.",
+       "botpasswords-insert-failed": "Kunnt keine Bot mem Nahme „$1“ derbei donn. Wohr velleijsch ald doh.",
+       "botpasswords-update-failed": "Kunnt keine Bot mem Nahme „$1“ veränndere. Es velleijsch fottjeschmeße?",
+       "botpasswords-created-title": "Dat Bot-Paßwood es aanjelaat",
+       "botpasswords-created-body": "Dat Bot-Paßwoot för dä Bot „$1“ {{GENDER:$2|vum|vum|vumm Metmaacher|vun dä|vum}} „$2“ wood ennjerescht.",
+       "botpasswords-updated-title": "Dat Bot-Paßwood es veränndert",
+       "botpasswords-updated-body": "Dat Bot-Paßwoot för dä Bot „$1“ {{GENDER:$2|vum|vum|vumm Metmaacher|vun dä|vum}} „$2“ wood veränndert.",
+       "botpasswords-deleted-title": "Dat Bot-Paßwood es fott",
+       "botpasswords-deleted-body": "Dat Bot-Paßwoot för dä Bot „$1“ {{GENDER:$2|vum|vum|vumm Metmaacher|vun dä|vum}} „$2“ wood fott jeschmeße.",
        "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",
        "revdelete-unsuppress": "De Beschrängkonge för der widderjehollte Versione ophevve",
        "revdelete-log": "Aanlaß odder Jrund:",
        "revdelete-submit": "Op de aanjekrützte {{PLURAL:$1|Version|Versione|-nix-}} aanwende",
-       "revdelete-success": "'''De Väsjohn wood verschtoche udder seeschba jemaat.'''",
+       "revdelete-success": "De Väsjohn wood verschtoche udder seeschba jemaat.",
        "revdelete-failure": "'''Dä Version ier Seeschbaakeit kunnte mer nit ändere:'''\n$1",
-       "logdelete-success": "'''Dä Enndraach em Logbohch wood verschtoche udder seeschbaa jemaat.'''",
+       "logdelete-success": "Dä Enndraach em Logbohch wood verschtoche udder seeschbaa jemaat.",
        "logdelete-failure": "'''Däm Enndraach em Logbohch sing Seeschbaakeit kunnte mer nit ändere:''' $1",
        "revdel-restore": "Verschteische udder seeschba maache",
        "pagehist": "Älldere Väsjohne",
        "mergehistory-empty": "Mer han kei Versione för zesammezeläje",
        "mergehistory-done": "{{PLURAL:$3|Ein Väsjohn es|$3 Väsjohn sen|Kei Väsjohn wood}} fun „$1“ noh „[[:$2]]“ övverdraare un domet zosamme jelaat.",
        "mergehistory-fail": "Dat Versione zesamme läje is nit müjjelisch. Don ens di Sigge un de Zigge pröfe!",
+       "mergehistory-fail-self-merge": "De Quell-Sigg un de Ziel-Sigg sin deselve Sigg.",
        "mergehistory-fail-toobig": "Mih wi {{PLURAL:$1|ein Väsjohn|$1 Väsjohne|kein Väsjohne}} wöödte zesamme jelaat. Esu vill künne mer nit, un maache mer nit.",
        "mergehistory-no-source": "En Ursprungssigg „$1“ jidd_et nit.",
        "mergehistory-no-destination": "En Zielsigg „$1“ jidd_et nit.",
        "userrights": "De Metmaacher ehr Rääschde verwallde",
        "userrights-lookup-user": "Metmaacherjruppe verwalde",
        "userrights-user-editname": "Däm Metmaacher singe Nahme:",
-       "editusergroup": "Metmaacher ier Jroppe un Räächde änndere",
+       "editusergroup": "{{GENDER:$1|Däm|Däm|Däm Metmaacher|Dä|Däm}} [[User:$1|$1]] {{GENDER:$1|sing|singe|sing|ier|sing}} Jroppe un Räächde änndere",
        "editinguser": "Heh deihs De däm {{GENDER:$1|däm|däm|däm Metmaacher|dä|däm}} '''[[User:$1|$1]]''' {{GENDER:$1|singe|singe|singe|iere|singe}} Rääschde änndere. $2",
        "userrights-editusergroup": "Metmaacher en Jroppe donn un uß Jroppe nämme",
-       "saveusergroups": "Metmaacherjruppe avspeichere",
+       "saveusergroups": "Donn {{GENDER:$1|däm|dem|däm Metmaacher|dä|däm}} [[User:$1|$1]] {{GENDER:$1|sing|singe|sing|ier|sing}} Jroppe faßhalle",
        "userrights-groupsmember": "Dä Metmaacher es en {{PLURAL:$1|dä Jropp:|dä Jroppe:|keine Jropp.}}",
        "userrights-groupsmember-auto": "Dä Metmaacher es automattesch en {{PLURAL:$1|dä Jropp:|dä Jroppe:|keine Jropp.}}",
        "userrights-groups-help": "Do kanns de Jroppe för dä Metmaacher heh änndere, ävver opjepaß:\n* E Käßje met Höksche bedüg, dat dä Metmaacher en dä Jropp es.\n* E Käßje ohne Höksche bedüg, dat dä Metmaacher nit en dä Jropp es.\n* E Käßje met Stähnsche donävve bedüg, dat De dat Rääsch zwa ändere, ävver de Änderong nit mih zeröck nämme kanns.",
        "recentchanges-label-bot": "Di Änderong es fun enem Bot jemaat woode",
        "recentchanges-label-unpatrolled": "Heh di Änderong es noch nit nohjelohrt",
        "recentchanges-label-plusminus": "Der Ömvang vun dä Sigg hät sesch öm di Aanzahl <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Bytes</i> verändert.",
-       "recentchanges-legend-heading": "'''Lejänd:&nbsp;'''",
+       "recentchanges-legend-heading": "<strong>Lejänd:&nbsp;</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (Loor och noh de [[Special:NewPages|Leß met de neue Sigge]])",
        "recentchanges-legend-plusminus": "(''±123'')",
+       "recentchanges-submit": "Aanzeije!",
        "rcnotefrom": "Hee {{PLURAL:$5|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": "Zeisch de Änderonge avv em $3 öm $2 Uhr aan.",
        "rcshowhideminor": "de klein Mini-Änderonge $1",
        "uploadstash-refresh": "De Leß met de Dateie op ene neue Shtand bränge",
        "invalid-chunk-offset": "Ene onjöltijje Aanfangspungk för dä Rötsch",
        "img-auth-accessdenied": "Keine Zohjang",
-       "img-auth-nopathinfo": "De <code xml:lang=\"en\" lang=\"en\">PATH_INFO</code> fäält.\nDä Webßööver es nit doför ennjerescht, di Ennfommazjuhn wigger ze jävve.\nHä künnd_op <code lang=\"en\">CGI</code> opjebout sin, un dröm <code lang=\"en\">img_auth</code> nit ongschtöze künne. Loor em [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization Handbooch] noh, wat domet es.",
+       "img-auth-nopathinfo": "De <code xml:lang=\"en\" lang=\"en\" dir=\"rtl\">PATH_INFO</code> fäält.\nDä Webßööver es nit doför ennjerescht, di Ennfommazjuhn wigger ze jävve.\nHä künnd_op <code xml:lang=\"en\" lang=\"en\" dir=\"rtl\">CGI</code> opjebout sin, un dröm <code xml:lang=\"en\" lang=\"en\" dir=\"rtl\">img_auth</code> nit ongschtöze künne. Loor em [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization Handbohch] noh, wat domed es.",
        "img-auth-notindir": "Dä aanjefroochte Pat is nit em enjeschtallte Verzeischneß för et Huhlaade.",
        "img-auth-badtitle": "Uß „$1“ löht sesch kein jöltijje Övverschreff maache.",
        "img-auth-nologinnWL": "Do bes nit ennjelogg, un „$1“ es nit op dä Leß met de zohjelohße Datteiname.",
        "mostrevisions": "Atikkele met de mihste Änderonge",
        "prefixindex": "Alle Sigge, dänne ehr Nahme med enem beschtemmpte Wood udder Täx aanfängk",
        "prefixindex-namespace": "Alle Sigge med enem beschtemmpte Aanfang em Appachtemang „$1“",
+       "prefixindex-submit": "Lohß jonn!",
        "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",
        "protectedpages-performer": "Jeschöz vum Metmaacher",
        "protectedpages-params": "De Zoot Schpär",
        "protectedpages-reason": "Der Jrond",
+       "protectedpages-submit": "Lohß jonn!",
        "protectedpages-unknown-timestamp": "Onbikannt",
        "protectedpages-unknown-performer": "Onbikannte Metmaacher",
        "protectedtitles": "Verbodde Titele för Sigge",
        "protectedtitles-summary": "Hee sin verbodde Sigge-Tittele opjeleß. Onger dä Name ka_mer kein neu Sigge aanläje.\nEn Leß met dä Sigge, di jäje et Verändere udder jäje et Ömnenne jeschötz sin, fengk mer op dä Sigg [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
        "protectedtitlesempty": "Op di Aat sin jrad kein Sigge jäje et neu Aanlääje jeschötz.",
+       "protectedtitles-submit": "Lohß jonn!",
        "listusers": "De Metmaacherleß",
        "listusers-editsonly": "Donn nor Metmaacher zeije, di och ens jät jeschrevve han.",
        "listusers-creationsort": "Noh em Dattum vum Aanmellde zoteere",
        "usereditcount": "{{PLURAL:$1|Ein Änderong|$1 Änderonge|Nix jedonn}}",
        "usercreated": "{{GENDER:$3|}}Aanjemelldt aam $1 öm $2 Uhr",
        "newpages": "Neu Sigge",
+       "newpages-submit": "Lohß jonn!",
        "newpages-username": "Metmaacher_Naame:",
        "ancientpages": "Atikele zoteet vun Ahl noh Neu",
        "move": "Ömnenne",
        "apihelp": "Hölp för de <i lang=\"en\" xml:lang=\"en\" title=\"Application Programmers Interface\">API</i>",
        "apihelp-no-such-module": "Et Moduhl „$1“ wood nit jefonge.",
        "apisandbox": "De <i lang=\"en\">API</i> ußprobeere",
+       "apisandbox-jsonly": "Der ohne JavaSkrepp kam_mer de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> för zom erömprobehre nit bruche.",
        "apisandbox-api-disabled": "Dat <i lang=\"en\">API</i> es en heh dämm Wiki afjeschalldt.",
-       "apisandbox-intro": "Op heh dä Sigg kanns De met dä '''MediaWiki web service <i lang=\"en\">API</i>''' eröm schpelle.\nBeloor Der de Einzelheite, wi di jebruch weed, op dä iere [//www.mediawiki.org/wiki/API:Main_page Sigg met de Verklieronge].\nE Beiscpell: [//www.mediawiki.org/wiki/API#A_simple_example De Houpsigg holle].\nSöhk ene {{int:Apisb-label-action}} uß, öm mieh Beishpell aanjezeisch ze krijje.\nOch wann dat heh nor zom Ußprobeere es, kann dat, wat De heh mähß, et Wiki verändere.",
+       "apisandbox-intro": "Op heh dä Sigg kanns De met dä <strong>MediaWiki web service <i lang=\"en\">API</i></strong> eröm schpelle.\nBeloor Der de Einzelheite, wi di jebruch weed, op dä iere [[mw:API:Main_page Sigg met de Verklieronge]].\nE Beiscpell: [//www.mediawiki.org/wiki/API#A_simple_example De Houpsigg holle].\nSöhk ene {{int:Apisb-label-action}} uß, öm mieh Beishpell aanjezeisch ze krijje.\nOch wann dat heh nor zom Ußprobeere es, kann dat, wat De heh mähß, et Wiki verändere.",
        "apisandbox-submit": "Lohß jonn!",
        "apisandbox-reset": "Läddesch maache",
-       "apisandbox-examples": "Bäijshpell",
+       "apisandbox-retry": "Norr_ens versöhke",
+       "apisandbox-examples": "Bäijshpelle",
        "apisandbox-dynamic-parameters": "Zohsäzlejje Parrameetere",
        "apisandbox-results": "Erus jekumme es",
        "apisandbox-request-url-label": "Dä <i lang=\"en\">URL</i> vun dä Aanfrooch:",
        "log-title-wildcard": "Sök noh Titelle, di aanfange met …",
        "showhideselectedlogentries": "Ußjesöhk Endrääsch verschteische udder zeije",
        "log-edit-tags": "Donn de Makehronge vun de ußjesöhk Enndrähsch em Logbohch beärbeide",
+       "checkbox-all": "Alle",
+       "checkbox-none": "Keine",
+       "checkbox-invert": "Ußwahl ömdrihje",
        "allpages": "Alle Sigge",
        "nextpage": "De nächste Sigg: „$1“",
        "prevpage": "Vörijje Sigg ($1)",
        "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 di all fottschmiiße wells, dat kann dem Wikki sing Dahtebangk schwer ußbremse.",
        "deleteprotected": "Di Sigg es jeschöz, un dröm kam_mer se nit fott schmiiße.",
-       "deleting-backlinks-warning": "<strong>Opjepaß:</strong> Es jitt Sigge met Lengks noh heh, udder Sigge, di heh di Sigg enbenge!",
+       "deleting-backlinks-warning": "<strong>Opjepaß:</strong> Es jitt [[Special:WhatLinksHere/{{FULLPAGENAME}}|annder Sigge ]] met Lengks noh heh, udder Sigge, di heh di Sigg enbenge!",
        "rollback": "Em Läzde sing Änderonge zeröcknämme",
        "rollbacklink": "All dem Läzde sing Änderonge zeröckdrihje",
        "rollbacklinkcount": "{{PLURAL:$1|Ein Änderong|$1 Änderonge|Kein Änderonge}} schtantepee retuur nämme",
        "rollbackfailed": "Dat Zeröcknemme jingk scheiv",
        "cantrollback": "De läzde Änderong zeröckzenemme es nit müjjelich. Dä läzde Schrihver es dä eijnzeje, dä aan dä Sigg heh jht jedonn hät!",
        "alreadyrolled": "Mer künne de letzte Änderonge vun dä Sigg „[[:$1]]“ vum Metmaacher „[[User:$2|$2]]“ ([[User talk:$2|Klaaf]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) nimieh zeröcknemme, dat hät ene Andere enzwesche ald jedon, udder de Sigg ömjeändert.\n\nDe Neuste Änderong aan dä Sigg es jetz vun däm Metmaacher „[[User:$3|$3]]“ ([[User talk:$3|Klaaf]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Bei dä Änderong schtundt: „''$1''“.",
+       "editcomment": "Bei dä Änderong schtundt: „$1“.",
        "revertpage": "Änderunge vun däm Metmaacher „[[Special:Contributions/$2|$2]]“ ([[User talk:$2|däm sing Klaafsigg]]) fottjeschmeße, un doför de lätzde Väsjohn vum „[[User:$1|$1]]“ widder zeröckjehollt",
        "revertpage-nouser": "Änderunge vun enem Metmaacher, däm singe Name vershtoche es, retuur jemaat op de letzte Version {{GENDER:$1|vum|vum|vumm Metmaacher|vun dä|vum}} [[User:$1|$1]]",
        "rollback-success": "De Änderungen vum $1 zeröckjenumme, un dobei de letzte Version vum $2 widder jehollt.",
        "changecontentmodel-title-label": "Dä Sigg ier Övverschreff",
        "changecontentmodel-model-label": "Et neuje Modäll för der Enhalld",
        "changecontentmodel-reason-label": "Der Jrond:",
+       "changecontentmodel-submit": "Lohß jonn!",
        "changecontentmodel-success-title": "Et Modäll för der Enhalld wohd veränndert",
        "changecontentmodel-success-text": "Et Modäll för der Enhalld vun dä Sigg „[[:$1]]“ wohd veränndert",
        "logentry-contentmodel-change-revertlink": "retuhr_nämme",
        "whatlinkshere-hidelinks": "de nommahle Lengks $1",
        "whatlinkshere-hideimages": "$1 de Lengks op Datteihje",
        "whatlinkshere-filters": "Ußsööke",
+       "whatlinkshere-submit": "Lohß jonn!",
        "autoblockid": "Automattesche Sperr Nommer $1",
        "block": "Metmaacher udder en <i lang=\"en\">IP</i>-Addräß sperre",
        "unblock": "Don en Sperr för ene Metmaacher udder en <i lang=\"en\">IP</i>-Addräß ophävve",
        "scarytranscludefailed-httpstatus": "[De Schablohn „$1“ enzebenge hät nit jeflupp. Dä HTTP-Fähler es: $2]",
        "scarytranscludetoolong": "[Schad, de URL es ze lang]",
        "deletedwhileediting": "<strong>Opjepaß:</strong> De Sigg wood fottjeschmeße, nohdäm Do ald aanjefange häs, draan ze Ändere.\nEm <span class=\"plainlinks\">[{{fullurl:Special:Log|type=delete&page=}}{{FULLPAGENAMEE}} Logbohch vum Sigge-Fottschmiiße]</span> künnt der Jrond schtonn.\nWann De de Sigg avschpeischere deis, weed se widder aanjelaat.",
-       "confirmrecreate": "Dä Metmaacher [[User:$1|$1]] ([[User talk:$1|Klaaf]]) hät di Sigg fottjeschmeße, nohdäm Do do dran et Ändere aanjefange häs. Dä Jrond:\n: „<i>$2</i>“\nWells Do jetz met en neu Väsjohn di Sigg widder neu aanläje?",
-       "confirmrecreate-noreason": "Dä [[User:$1|$1]] ([[User talk:$1|Klaaf]]) hät heh di Sigg fottjeschmeße, nohdämm Do aanjefange häs, draan ze ändere. Bes esu jood un donn beshtääteje, dat De di Sigg widder neu aanjelaat han wells.",
+       "confirmrecreate": "{{GENDER:$1|Dä|Dat|Dä Metmaacher|De|Dat}} [[User:$1|$1]] ([[User talk:$1|Klaaf]]) hät di Sigg fottjeschmeße, nohdäm Do do dran et Ändere aanjefange häs. Dä Jrond:\n: „<i>$2</i>“\nWells Do jäz medd en neuje Väsjohn di Sigg widder neu aanläje?",
+       "confirmrecreate-noreason": "{{GENDER:$1|Dä|Dat|Dä Metmaacher|De|Dat}} [[User:$1|$1]] ([[User talk:$1|Klaaf]]) hät heh di Sigg fottjeschmeße, nohdämm Do aanjefange häs, draan ze ändere. Bes esu jood un donn beschtähteje, dat De di Sigg widder neu aanjelaat han wells.",
        "recreate": "Widder neu aanlääje",
        "unit-pixel": "px",
        "confirm_purge_button": "Jo — loss jonn!",
        "tags-delete-not-allowed": "Kännzeijsche, di övver Zohsazprojramme faßjelaat wääde, kam_mer blß fottschmiiße, wann dat Zohsazprojramm et zohlöht.",
        "tags-delete-not-found": "E Kännzeijsche „$1“ jidd_et nit.",
        "tags-delete-too-many-uses": "Dat Kännzeijsche „$1“ es för {{PLURAL:$2|mih wi ein Väsjohn|övver $2 Väsjohn|kein Väsjohn}} em jebruch, dröm kam_mer et nit fottschmiiße.",
-       "tags-delete-warnings-after-delete": "Dat Kännzeijsche „$1“ es fottjeschmeße, ävver {{PLURAL:$2|ei Problem|$2 Probleme|kein Problem}} es opjevalle:",
+       "tags-delete-warnings-after-delete": "Dat Kännzeijsche „$1“ es fottjeschmeße, ävver {{PLURAL:$2|ei Problehm|$2 Problehme|kein Problhem}} es opjevalle:",
        "tags-activate-title": "Kännzeijsche aanschallde",
        "tags-activate-question": "Do bes om bäßte Wähsch, et Kännzeijsche „$1“ aanzeschallde.",
        "tags-activate-reason": "Jrond:",
        "pagelang-language": "De Schprohch",
        "pagelang-use-default": "Nemm de Schtandatt_Schprohch",
        "pagelang-select-lang": "Donn en Schprohch ußwähle",
+       "pagelang-submit": "Lohß jonn!",
        "right-pagelang": "Ener Sigg ier Schprohch tuusche",
        "action-pagelang": "Sigge ier Schprohch zu tuusche",
-       "log-name-pagelang": "Logbooch vum Tuusche vun Sige iehr Schprohche",
+       "log-name-pagelang": "Logbohch vum Tuusche vun Sige iehr Schprohche",
        "log-description-pagelang": "Dat heh es et Logbohch vun de Veränderonge aan de Schprohch vun de Sigge.",
        "logentry-pagelang-pagelang": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät de Schprohch vun dä Sigg „$3“ vun $4 op $5 verändert.",
        "default-skin-not-found": "De schtandattmähßejje Bedehnbovverfläsch <code>$1</code> för et Wikki es nit ze fenge. Se weed övver dä Enndrahch <code lang=\"en\" xml:lang=\"en\">$wgDefaultSkin</code> en dä Dattei <code lang=\"en\" xml:lang=\"en\">LocalSettings.php</code> om ẞööver faßjelaat.\n\n{{PLURAL:$4|Heh di Bedehnbovverfläsch es|Heh di Bedehnbovverfläsche sin|Kein Bedehnbovverfläsche sin}} doh:\n\n$2\n\nLohr och en et [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de Handbohch övver et Enschtälle vun Bedehnbovverfläsche].\n\n*'''Falls dat heh e fresch enjereesch MehdijaWikki es:'''\n*: MehdijaWikki wood velleisch övver <i lang=\"en\" xml:lang=\"en\">Git</i> enschtallehrt, udder der Quälltäx wood tiräk obb_en ander Manier enschtallehrt. Met däm Problehm heh wohr ze rääschne. Donn winneschßdens eine vun dä Bovverfläsche uss_em [https://www.mediawiki.org/wiki/Category:All_skins Verzeischneß vun de Bedehnbovverfläsche vum MehdijaWikki] enschtallehre. Dat jeihd, endämm dat De:\n*:* einzel veröffentleschte Bovverfläsche us [https://www.mediawiki.org/wiki/Special:SkinDistributor MediaWiki.org] erongerlähds un en et Verzeischneß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skins/</code> vun dä MehdijaWikki_Enschtallazuhn holls,\n*:* winneschsdens eins vun dä Verzeischneße us <code lang=\"en\" xml:lang=\"en\">mediawiki/skins/*</code> met <i lang=\"en\" xml:lang=\"en\">Git</i> en et Verzeischneß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skins/</code> vun Dinge MehdijaWikki_Enschtallazuhn holls,\n*:* de [https://www.mediawiki.org/wiki/Download Dattei vum MehdijaWikki] erongerlähds, woh ongerscheidlejje Bedehnbovverfläsche dren sin un Zohsäz derzoh. Uß däm Verzeischneß doh dren kam_mer Saache en et Verzeischneß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skins/</code> vun dä MehdijaWikki_Enschtallazuhn holle.\n*: Dat sullt sesch nit met Dingem <i lang=\"en\" xml:lang=\"en\">git</i>-Verzeischneß schtühre, falls De och ene Äntweckler vum MehdijaWikki bes.\n*'''Falls dat MehdijaWikki heh jrahd obb ene neue Schtand jebraht wood:'''\n*: Bei MehdijaWikki en dä Väsjohn 1.24 un hüüter wääde de enschtallehrte Bedehnbovverfläsche nit mieh automattesch alle aanjemaat; süsch och em [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Handbohch] dernoh. Do kanns heh di {{PLURAL:$5|Reih|Reihje|kein Reihje}} en de Dattei <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">LocalSettings.php</code> eren koppehre, öm {{PLURAL:$5|di enschtallehrte Bedehnbovverfläsch|alle enschtallehrte Bedehnbovverfläsche|kein Bedehnbovverfläsch}} aanzeschallde:\n<pre lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$3</pre>\n* '''Falls de jrahd aan dä Dattei <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">LocalSettings.php</code> jät geändert häs:'''\n*: Donn de Nahme vun de Bedehnbovverfläsche en dä Dattei pröhve. Se künnte verhehrt jeschrevve sin.",
        "default-skin-not-found-no-skins": "De schtandattmähßejje Bedehnbovverfläsch <code>$1</code> för et Wikki es nit ze fenge. Se weed övver dä Enndraach <code lang=\"en\" xml:lang=\"en\">$wgDefaultSkin</code> en dä Dattei <code lang=\"en\" xml:lang=\"en\">LocalSettings.php</code> om ẞööver faßjelaat.\n\nEt sinn_er kein Bedehnbovverfläsche doh.\n\n*'''Falls dat heh e fresch enjereesch MehdijaWikki, es udder jrahd obb ene neue Schtand jebraht wood:'''\n*: MehdijaWikki wood velleisch övver <i lang=\"en\" xml:lang=\"en\">Git</i> enschtallehrt, udder der Quälltäx wood tiräk obb_en ander Manier enschtallehrt. Met däm Problehm heh wohr ze rääschne. Bei MehdijaWikki en dä Väsjohn 1.24 un hüüter sin kein Bedehnbovverfläsche mieh automattesch derbei. Donn winneschßdens eine vun dä Bovverfläsche uss_em [https://www.mediawiki.org/wiki/Category:All_skins Verzeischneß vun de Bedehnbovverfläsche] enschtallehre. Dat jeihd, endämm dat De:\n*:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins <i lang=\"en\" xml:lang=\"en\">Git</i> nemms, öm de Bedehnbovverfläsche eronger ze lahde].\n*:* einzel veröffentleschte Bovverfläsche us [https://www.mediawiki.org/wiki/Special:SkinDistributor MediaWiki.org] erongerlähds un en et Verzeischneß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skins/</code> vun Dinge MehdijaWikki_Enschtallazuhn holls,\n*:* de [https://www.mediawiki.org/wiki/Download Dattei vum MehdijaWikki] erongerlähds, woh ongerscheidlejje Bedehnbovverfläsche dren sin un Zohsäz derzoh. Uß däm Verzeischneß doh dren kam_mer Saache en et Verzeischneß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skins/</code> vun Dinge vun dä MehdijaWikki_Enschtallazuhn holle.\n*: Dat sullt sesch nit met Dingem <i lang=\"en\" xml:lang=\"en\">Git</i>-Verzeischneß schtühre, falls De och ene Äntweckler vum MehdijaWikki bes. Lohr em [https://www.mediawiki.org/wiki/Manual:Skin_configuration Handbohch] dernoh, wi mer Bedehnbovverfläsche aanmääd un ene Schtandatt faßlähsch.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (enjeschalldt)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ußjeschalldt''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>ußjeschalldt</strong>)",
        "mediastatistics": "Schtateßteke övver de Meedije",
        "mediastatistics-summary": "Schtatißteke övver de huhjelahde Zoote Datteije. Von de Datteije weed bloß de jeweils neuste Väsjohn jezallt. Fottjeschmeße un övverhollte Datteije wähde nit metjezallt.",
        "mediastatistics-nfiles": "$1 ($2%)",
index 5303796..9499c11 100644 (file)
@@ -16,7 +16,8 @@
                        "아라",
                        "Bikarhêner",
                        "Uygar",
-                       "MikaelF"
+                       "MikaelF",
+                       "Macofe"
                ]
        },
        "tog-underline": "Xetekê di bin girêdanê de çêke:",
        "myprivateinfoprotected": "Destûra te tune ye ku tu agahiyên xwe yên kesane biguherînî.",
        "mypreferencesprotected": "Destûr tune ye ku tu eyarên xwe biguherînî.",
        "ns-specialprotected": "Rûpelên taybet {{ns:special}} nikarin werin guherandin.",
-       "titleprotected": "Rûpelek bi vî navî nikare bê çêkirin. Ev astengkirin ji [[User:$1|$1]] bi sedema ''$2'' hatiye çêkirin.",
+       "titleprotected": "Rûpelek bi vî navî nikare bê çêkirin. Ev astengkirin ji [[User:$1|$1]] bi sedema <em>$2</em> hatiye çêkirin.",
        "exception-nologin": "Têneketî",
        "virus-unknownscanner": "Antîvîrusa nenas:",
        "logouttext": "'''Tu niha derketî.'''\n\nTu dikarî {{SITENAME}} niha weke bikarhênerekî nediyarkirî bikarbînî, yan jî tu dikarî dîsa bi vî navê xwe yan navekî din wek bikarhêner <span class='plainlinks'>[$1 dîsa têkevî]</span>.\nBila di bîra te de be ku gengaz e hin rûpel mîna ku tu hîn bi navê xwe qeyd kiriyî werin nîşandan, heta ku tu nîşanên çavlêgerandina (browser) xwe jênebî.",
        "recentchanges-label-bot": "Ev guherîn ji aliyê botekê ve hate çêkirin",
        "recentchanges-label-unpatrolled": "Ev gotar hêjî nehatiye sererastkirin",
        "recentchanges-label-plusminus": "Qebareya vê rûpelê bi ev qas biteyan hate guherandin",
-       "recentchanges-legend-heading": "'''Ravekirina kurtenavan:'''",
+       "recentchanges-legend-heading": "<strong>Ravekirina kurtenavan:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (here [[Special:NewPages|lîsteya rûpelên nû]])",
        "rclistfrom": "Guherandinên ji $3 $2 şûnde nîşan bide",
        "rcshowhideminor": "Guherandinên biçûk $1",
        "activeusers-hidebots": "Bot'an veşêre",
        "activeusers-hidesysops": "Rêveberan veşêre",
        "activeusers-noresult": "Tu bikarhêner nehate dîtin.",
+       "activeusers-submit": "Bikarhênerên çalak nîşan bide",
        "listgrouprights": "Mafên koma bikarhêner",
        "listgrouprights-group": "Kom",
        "listgrouprights-rights": "Maf",
        "rollbacklinkcount": "ji {{PLURAL:$1|guhertin|guhertina}} $1 vegere",
        "cantrollback": "Guherto naye vegerandin;\nbikarhênerê dawî, tenya nivîskarê vê rûpelê ye.",
        "alreadyrolled": "Guherandina dawiya [[$1]]\nbi [[User:$2|$2]] ([[User talk:$2|gotûbêj]]) venizivre; kesekî din ew rûpel zîvirandiye an guherandiye.\n\nGuhertoya dawî bi [[User:$3|$3]] ([[User talk:$3|gotûbêj]]).",
-       "editcomment": "Kurtenivîsê guherandinê ev bû: \"''$1''\".",
+       "editcomment": "Kurtenivîsê guherandinê ev bû: <em>$1</em>.",
        "revertpage": "Guherandina $2 hat betal kirin, vegerand guhartoya dawî ya $1",
        "rollback-success": "Guherandina $1 şondakir; dîsa guharte verzyona $2.",
        "changecontentmodel-title-label": "Sernavê rûpelê",
index a40a73e..6b316da 100644 (file)
        "createaccountreason": "Acheson:",
        "createacct-reason": "Acheson",
        "createacct-reason-ph": "Prag yth esowgh ow kwruthyl akont aral",
-       "createacct-captcha": "Gwiryans sekerder",
-       "createacct-imgcaptcha-ph": "Entrewgh an tekst a welowgh a-ugh",
        "createacct-submit": "Gwruthyl agas akont",
        "createacct-benefit-heading": "Gwrys yw {{SITENAME}} gans tus kepar ha hwi.",
        "createacct-benefit-body1": "{{PLURAL:$1|janj|chanj}}",
        "passwordreset-domain": "Tiredh:",
        "passwordreset-email": "Trigva ebost:",
        "passwordreset-emailtitle": "Manylyon agas akont war {{SITENAME}}",
-       "passwordreset-emailsent": "Ebost dassettya ger tremena re beu danvenys.",
+       "passwordreset-emailsentemail": "Ebost dassettya ger tremena re beu danvenys.",
        "passwordreset-emailsent-capture": "Ebost dassettya ger tremena re beu danvenys, hag y hyllir y weles a-woles.",
        "changeemail": "Chanjya trigva ebost",
-       "changeemail-text": "Lenwewgh an furvlen-ma rag chanjya agas trigva ebost. Y fydh res dhywgh entra agas ger tremena rag afydhya an chanj-ma.",
+       "changeemail-header": "Chanjya trigva ebost an akont",
        "changeemail-oldemail": "Agas trigva ebost a-lemmyn:",
        "changeemail-newemail": "Agas trigva ebost nowyth:",
        "changeemail-none": "(nagonan)",
        "recentchanges-label-minor": "Chanj byghan yw hemma",
        "recentchanges-label-bot": "Gwrys veu an chanj ma gans bott",
        "recentchanges-label-unpatrolled": "Ny veu an chanj ma patrolyes hwath",
-       "recentchanges-legend-heading": "'''Alhwedh:'''",
+       "recentchanges-legend-heading": "<strong>Alhwedh:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (gweler ynwedh an [[Special:NewPages|rol a folennow nowydh]])",
        "rclistfrom": "Diskwedhes chanjyow nowydh yn unn dhalleth dhyworth $3 $2",
        "rcshowhideminor": "$1 chanjyow byghan",
        "activeusers-hidesysops": "Kudha menystroryon",
        "listgrouprights-members": "(rol eseli)",
        "emailuser": "Ebostya an devnydhyer-ma",
-       "emailpage": "Ebostya devnydhyer",
        "defemailsubject": "Ebost danvenys dre {{SITENAME}} gans an devnydhyer \"$1\"",
        "emailfrom": "Dhyworth:",
        "emailto": "Dhe:",
        "move-page": "Gwaya $1",
        "move-page-legend": "Gwaya folen",
        "movepagetext": "Devnydhya an furvlen a-woles a dhashenow folen, yn unn waya oll y istori dhe'n hanow nowyth.\nAn titel koth a vydh folen dhaskedyans dhe'n titel nowyth.\nHwi a yll nowedhi daskedyansow a boynt dhe'n titel derowel yn awtomatek.\nMar ny wrewgh, surhewgh hwi dhe jeckya rag [[Special:DoubleRedirects|daskedyansow dobyl]] po [[Special:BrokenRedirects|terrys]].\nOmgemeryansek owgh rag surhe y pes kevrennow poyntya dhe'n tyller ewn.\n\nNotyewgh '''na wayir''' an folen mars eus folen orth an titel nowyth seulabrys, marnas bos an pyth kampollys diwettha daskedyans ha ny'n jeves istori chanjya kyns vyth.\nHemm a styr y hyllowgh diswul dashenwel folen mar kwrewgh kammwrians, ha ny yllowgh gorskrifa folen eus ena seulabrys.\n\n'''Gwarnyans!'''\nHemm a yll bos chanj tromm ha bras dres ehen rag folen gerys-da;\nSurhewgh mar pleg hwi dhe gonvedhes sewyansow an gwrians-ma kyns mos yn-rag.",
-       "movearticle": "Gwaya an folen:",
        "moveuserpage-warning": "'''Gwarnyans''': Yth esowgh ow mos dhe waya folen dhevnydhyer. Notyewgh mar pleg ny vydh marnas an folen gwayys ha ''ny vydh'' an devnydhyer dashenwys.",
        "newtitle": "Dhe ditel nowyth:",
        "move-watch": "Golya an folen-ma",
index 5bb32c1..58fbcef 100644 (file)
        "tog-hideminor": "Recensiones minores in indice nuper mutatorum supprimere",
        "tog-hidepatrolled": "Redactiones censae inter nuper mutatas celandae",
        "tog-newpageshidepatrolled": "Paginae censae inter nouissime creatas celandae",
+       "tog-hidecategorization": "Classificationes paginarum supprimere",
        "tog-extendwatchlist": "In indice paginarum observandarum non solum recentissimas, verum omnes mutationes ostendere",
        "tog-usenewrc": "Indices per paginas redigere",
        "tog-numberheadings": "Subtituli numeris adornandi",
-       "tog-showtoolbar": "Affigere trabem redigentem",
-       "tog-editondblclick": "Percussus duplex redactionem hortetur",
-       "tog-editsectiononrightclick": "Paginarum segmenta dextero percussu in titulis redigenda",
+       "tog-showtoolbar": "Trabem editoriam affigere",
+       "tog-editondblclick": "Duplici ictu liceat paginam recensere",
+       "tog-editsectiononrightclick": "Titulis a dextra tactis liceat paginarum partes recensere",
        "tog-watchcreations": "Paginas, quas creavero, et fasciculos, quos imposuero, observare",
        "tog-watchdefault": "Paginas et fasciculos, quos recensuero, observare",
        "tog-watchmoves": "Paginas et fasciculos, quos movero, observare",
        "tog-watchdeletion": "Paginas et fasciculos, quos delevero, paginarum observandarum indici addere",
-       "tog-minordefault": "Notare omnes recensiones quasi minores",
+       "tog-minordefault": "Omnes recensiones per se ut minores notare",
        "tog-previewontop": "Prospectum supra capsam recensoriam ostendere",
        "tog-previewonfirst": "Prospectum novae paginae perhibere",
        "tog-enotifwatchlistpages": "Mutata vel pagina vel fasciculo observando certior fiam",
        "tog-enotifminoredits": "Etiam de minoribus recensionibus certior fiam",
        "tog-enotifrevealaddr": "Ostendatur inscriptio mea electronica in nuntiis notificantibus",
        "tog-shownumberswatching": "Numerum usorum observantium monstrare",
-       "tog-oldsig": "Subscriptio, qua nunc uteris:",
+       "tog-oldsig": "Subscriptio, qua adhuc uteris:",
        "tog-fancysig": "Subscriptio vicitext (sine nexu automatico)",
        "tog-uselivepreview": "Prospectum viventem perhibere",
-       "tog-forceeditsummary": "Si recensionem non summatim descripsero, me roga si continuare velim",
+       "tog-forceeditsummary": "Cavere, ut recensionem summatim describam",
        "tog-watchlisthideown": "Recensiones meas in paginarum observandarum indice supprimere",
        "tog-watchlisthidebots": "Recensiones per automaton factas in paginarum observandarum indice supprimere",
        "tog-watchlisthideminor": "Minores recensiones in paginarum observandarum indice supprimere",
        "tog-watchlisthideanons": "Recensiones ab usoribus ignotis factas in paginarum observandarum indice supprimere",
        "tog-watchlisthidepatrolled": "Recensiones custoditas supprimere",
        "tog-ccmeonemails": "Transcriptiones earum, quas ad alios usores misero litteras, mihi ipsi mittantur",
-       "tog-diffonly": "Nihil nisi differentiam in pagina factam ostendatur",
+       "tog-diffonly": "Nihil nisi differentia in pagina facta ostendatur",
        "tog-showhiddencats": "Categorias celatas monstrare",
        "tog-norollbackdiff": "Post reversionem paginae differentia neglegatur",
+       "tog-useeditwarning": "Prohibere, ne paginam nondum servatam relinquam",
        "underline-always": "Semper",
        "underline-never": "Numquam",
        "underline-default": "Defalta navigatri interretialis",
+       "editfont-style": "Stilus:",
+       "editfont-default": "iuxta navigatrum",
        "sunday": "dies Solis",
        "monday": "dies Lunae",
        "tuesday": "dies Martis",
        "delete": "Delere",
        "deletethispage": "Delere hanc paginam",
        "undeletethispage": "Hanc paginam restituere",
-       "undelete_short": "Restituere {{PLURAL:$1|unam emendationem|$1 emendationes}}",
-       "viewdeleted_short": "Inspicere {{PLURAL:$1|unam emendationem deletam|$1 emendationes deletas}}",
+       "undelete_short": "{{PLURAL:$1|Unam recensionem|$1 recensiones}} restituere",
+       "viewdeleted_short": "{{PLURAL:$1|unam redactionem deletam|$1 redactiones deletas}} inspicere",
        "protect": "Protegere",
        "protect_change": "mutare",
        "protectthispage": "Protegere hanc paginam",
        "collapsible-expand": "Dilatare",
        "thisisdeleted": "Videre aut restituere $1?",
        "viewdeleted": "Visne conspicere $1?",
-       "restorelink": "{{PLURAL:$1|unam emendationem deletam|$1 emendationes deletas}}",
+       "restorelink": "{{PLURAL:$1|unam redactionem deletam|$1 redactiones deletas}}",
        "feedlinks": "Fluxus:",
        "feed-invalid": "Typus subscriptionis fluxus invalidus.",
        "feed-unavailable": "Fluxus syndicationis non praestiti",
        "error": "Erratum",
        "databaseerror": "Erratum in basi datorum",
        "readonly": "Basis datorum obstructa",
-       "missingarticle-rev": "(numerus emendationis: $1)",
+       "missingarticle-rev": "(ID numerus redactionis: $1)",
        "missingarticle-diff": "(Diss: $1, $2)",
        "internalerror": "Erratum internum",
        "internalerror_info": "Erratum internum: $1",
        "viewsource": "Fontem inspicere",
        "viewsource-title": "Fontem paginae $1 inspicere",
        "actionthrottled": "Actio strangulata",
-       "protectedpagetext": "Haec pagina protecta est, ut emendationes prohibeantur.",
+       "protectedpagetext": "Huic paginae protectio data est, ne redigatur neu aliter tractetur.",
        "viewsourcetext": "Fontem videas et exscribeas:",
        "protectedinterface": "Haec pagina dat textum interfaciei pro logiciali, et est protecta ad vandalismum vetandum.",
        "editinginterface": "'''Caveat censor:''' Emendas iam paginam quae textum interfaciei logicialem dat. Mutationes vultum {{grammar:genitive|{{SITENAME}}}} omnibus usoribus afficient. In nuntia MediaWiki vertendo, quaesumus te uti [//translatewiki.net/wiki/Main_Page?setlang=la translatewiki.net].",
        "namespaceprotected": "Tibi non licet paginas spatii nominalis '''$1''' recensere.",
        "ns-specialprotected": "Paginae speciales recenseri non possunt.",
-       "titleprotected": "Hic titulus protectus est ab usore [[User:$1|$1]] ne creetur.\nRatio data est \"''$2''\".",
+       "titleprotected": "Hic titulus protectus est ab usore [[User:$1|$1]] ne creetur.\nRatio data est <em>$2</em>.",
        "exception-nologin": "Nomen datum non est",
        "exception-nologin-text": "Ad hanc paginam recensendam nomen dari oportet.",
        "virus-badscanner": "Configuratio mala: scrutator virorum ignotus: ''$1''",
        "virus-unknownscanner": "antivirus incognitus:",
        "logouttext": "<strong>Secessisti a {{grammar:ablative|{{SITENAME}}}}.</strong>\n\nNota bene, paginae fortasse videantur quasi nomen tuum dedisses, priusquam navigatrum purgaveris.",
        "welcomeuser": "Salve, $1!",
-       "welcomecreation-msg": "Tibi nomen impositum est.\nCura [[Special:Preferences|praeferentias]] tuas apud {{grammar:accusative|{{SITENAME}}}} deligas.",
+       "welcomecreation-msg": "Tibi nomen impositum est.\nCura, ut [[Special:Preferences|modos tuos]] deligas.",
        "yourname": "Nomen usoris:",
        "userlogin-yourname": "Nomen usoris",
        "userlogin-yourname-ph": "Nomen usoris tuum inscribe",
        "summary-preview": "Prospectus summarii:",
        "subject-preview": "Prospectus rei/tituli:",
        "blockedtitle": "Usor obstructus est",
-       "blockedtext": "'''Nomen usoris aut locus IP tuus obstructus est''' a magistratu $1.\n\nRatio data est: ''$2''.\n\n* Initium obstructionis: $8\n* Finis obstructionis: $6\n* Obstructus destinatus: $7\n\nPotes ad $1 aut [[{{MediaWiki:Grouppage-sysop}}|magistratum]] alium nuntium mittere ad impedimentum disputandum.\nNota bene te non posse proprietate \"Litteras electronicas usori mittere\" uti, nisi tibi est inscriptio electronica confirmata apud [[Special:Preferences|praeferentias usoris tuas]] vel si tibi etiam litterae electronicae obstructi sunt.\nLocus IP tuus temporarius est $3, et numerus obstructionis est #$5. Quaesumus te eos scripturum si quaestiones ullas roges.",
-       "autoblockedtext": "Locus IP tuus automatice obstructus est quia usor alius, qui a magistratu $1 obstructus est, eum adhiberat.\nRatio data est:\n\n:''$2''\n\n* Initium obstructionis: $8\n* Finis obstructionis: $6\n* Obstructus destinatus: $7\n\nPotes ad $1 aut [[{{MediaWiki:Grouppage-sysop}}|magistratum]] alium nuntium mittere ad impedimentum disputandum.\n\nNota bene te non posse proprietate \"Litteras electronicas usori mittere\" uti, nisi tibi est inscriptio electronica confirmata apud [[Special:Preferences|praeferentias usoris tuas]].\n\nLocus IP tuus temporarius $3 est et numerus obstructionis tuus est #$5. Quaesumus te eos scripturum si quaestiones ullas roges.",
+       "blockedtext": "<strong>Nomen tuum vel iste locus IP obstructus est</strong> a magistratu $1.\nRatio: <em>$2</em>\n\n* Initium obstructionis: $8\n* Finis obstructionis: $6\n* Obstructio pertinet ad: $7\n\nTibi licet ad $1 vel [[{{MediaWiki:Grouppage-sysop}}|magistratum]] alium nuntium mittere, ut obstructio tua disceptetur.\n\nNota bene te litteras electronicas mittere non posse, nisi inscriptio electronica in [[Special:Preferences|modis tuis deligendis]] data confirmata est neu ab ea utenda non arceris!\n\nLocus IP tuus temporarius $3 est, haec obstructio sub numero #$5 relata est.\nQuaesumus haec omnia supra dicta cuipiam consultationi subiungas.",
+       "autoblockedtext": "Locus IP tuus automatice obstruitur, quia alius quidam, qui a magistratu $1 obstructus est, eo usus erat.\nRatio:\n\n:''$2''\n\n* Initium obstructionis: $8\n* Finis obstructionis: $6\n* Obstructio pertinet ad: $7\n\nTibi licet ad $1 vel [[{{MediaWiki:Grouppage-sysop}}|magistratum]] alium nuntium mittere, ut obstructio tua disceptetur.\n\nNota bene te litteras electronicas mittere non posse, nisi inscriptio electronica in [[Special:Preferences|modis tuis deligendis]] data confirmata est neu ab ea utenda non arceris!\n\nLocus IP tuus temporarius $3 est, haec obstructio sub numero #$5 relata est.\nQuaesumus haec omnia supra dicta cuipiam consultationi subiungas.",
        "blockednoreason": "nulla causa data",
        "whitelistedittext": "Necesse est tibi $1 priusquam paginas recenseas.",
-       "confirmedittext": "Tua inscriptio electronica est adfirmanda priusquam paginas recenseas. Quaesumus eam selige et adfirma per tuas [[Special:Preferences|praeferentias]].",
+       "confirmedittext": "Inscriptio tua electronica adfirmanda est priusquam paginas recenseas.\nQuaesumus eam in [[Special:Preferences|modis tuis seligendis]] notifices et confirmes.",
        "nosuchsectiontitle": "Haec pars inveniri non potest",
        "nosuchsectiontext": "Partem inexistentem recensere conaris.\nFortasse aliquis hanc partem movit vel delevit.",
        "loginreqtitle": "Nomen dare necesse est",
        "editingcomment": "Recensens $1 (nova pars)",
        "editconflict": "Contentio recensionis: $1",
        "explainconflict": "Alius hanc paginam mutavit postquam eadem recensere incipiebas.\nCapsa superior paginae verba recentissima continet.\nMutationes tuae in capsa inferiore monstrantur.\nMutationes tuae in verba superiora adiungare debes.\n'''Solum''' verba capsae superioris servabuntur quando \"{{int:savearticle}}\" premes.",
-       "yourtext": "Sententia tua",
-       "storedversion": "Versio ante recensionem tuam novissime facta",
+       "yourtext": "Tua redactio",
+       "storedversion": "Redactio modo servata",
        "nonunicodebrowser": "'''CAVETO: Navigatorium retiale tuum systemati UNICODE morem non gerit. Modum habemus quo commentationes sine damno recenseas: litterae non-ASCII in capsa sub veste hexadecimali ostendentur.'''",
-       "editingold": "'''MONITIO: Emendationem obsoletam huius paginae mutas.\nSi eam servaveris, omnes mutationes recentiores obrogatae peribunt!'''",
+       "editingold": "'''CAVE, ne huius paginae redactionem recenses obsoletam!\nQua servata omnes recensiones abhinc factas peribunt.'''",
        "yourdiff": "Differentia",
        "copyrightwarning": "Nota bene omnia contributa divulgari sub ''$2'' (vide singula apud $1).\nNisi vis verba tua crudelissime recenseri, mutari, et ad libidinem redistribui, noli ea submittere.<br />\nNobis etiam spondes te esse ipsum horum verborum scriptorem primum, aut ex opere in \"dominio publico\" exscripsisse.\n'''NOLI OPERIBUS SUB IURE DIVULGANDI UTI SINE POTESTATE!'''",
        "copyrightwarning2": "Nota bene omnia contributa apud {{grammar:accusative|{{SITENAME}}}} ab aliis recenseri, mutari vel removi posse.\nNisi vis verba tua crudelissime recenseri, noli ea submittere.<br />\nNobis etiam spondes te esse ipsum horum verborum scriptorem primum, aut ex opere in \"dominio publico\" vel ex libere fonte simili exscripsisse (vide singula apud $1).\n'''NOLI OPERIBUS SUB IURE DIVULGANDI UTI SINE POTESTATE!'''",
        "cantcreateaccount-text": "Ex hoc loco IP ('''$1''') nomen sibi imponere ab usore [[User:$3|$3]] interdicitur.\nQui hanc causam dedit: ''$2''",
        "viewpagelogs": "Vide acta huius paginae",
        "nohistory": "Huic paginae non est historia.",
-       "currentrev": "Versio novissime facta",
-       "currentrev-asof": "Versio novissime (die $2, hora $3) facta",
-       "revisionasof": "Emendatio ex $1",
-       "revision-info": "Emendatio ex $1 ab $2$7",
-       "previousrevision": "← Emendatio senior",
-       "nextrevision": "Emendatio novior →",
-       "currentrevisionlink": "Emendatio currens",
+       "currentrev": "Redactio novissima",
+       "currentrev-asof": "Redactio novissime (die $2, hora $3) facta",
+       "revisionasof": "Redactio $1 facta",
+       "revision-info": "Redactio $1 a conlatore $2 facta$7",
+       "previousrevision": "← Redactio superior",
+       "nextrevision": "Redactio recentior →",
+       "currentrevisionlink": "Redactio novissima",
        "cur": "nov",
        "next": "seq",
        "last": "prox",
        "historysize": "({{PLURAL:$1|1 octetus|$1 octeti}})",
        "historyempty": "(vacua)",
        "history-feed-title": "Historia",
-       "history-feed-description": "Historia emendationum huius paginae",
+       "history-feed-description": "Historia recensionum huius paginae",
        "history-feed-item-nocomment": "$1 ad $2",
        "rev-deleted-comment": "(summarium celatum)",
        "rev-deleted-user": "(nomen usoris celatum est)",
        "rev-deleted-event": "(perscriptio celata)",
        "rev-delundel": "monstrare/celare",
        "rev-showdeleted": "monstrare",
-       "revisiondelete": "Emendationem delere",
-       "revdelete-nooldid-title": "Emendatio-scopus invalida",
+       "revisiondelete": "Redactiones delere vel restituere",
+       "revdelete-nooldid-title": "Redactio scopo invalida",
        "revdelete-show-file-submit": "Sic",
-       "revdelete-selected-text": "{{PLURAL:$1|Emendatio selecta|Emendationes selectae}} paginae [[:$2]]:",
-       "revdelete-selected-file": "{{PLURAL:$1|Emendatio selecta|Emendationes selectae}} fasciculi [[:$2]]:",
+       "revdelete-selected-text": "{{PLURAL:$1|Redactio selecta|Redactiones selectae}} paginae [[:$2]]:",
+       "revdelete-selected-file": "{{PLURAL:$1|Redactio selecta|Redactiones selectae}} fasciculi [[:$2]]:",
        "revdelete-legend": "Modificare cohibitiones visibilitatis",
-       "revdelete-hide-text": "Textus emendationis",
+       "revdelete-hide-text": "Textus redactionis",
        "revdelete-hide-image": "Celare contentum fasciculi",
-       "revdelete-hide-comment": "Summarium emendationis",
+       "revdelete-hide-comment": "Summarium recensionis",
        "revdelete-hide-user": "Nomen usoris/locus IP",
        "revdelete-radio-same": "non mutare",
        "revdelete-radio-set": "Celare",
        "revdelete-otherreason": "Causa alia vel explicatio:",
        "revdelete-reasonotherlist": "Causa alia",
        "revdelete-edit-reasonlist": "Causas deletionum recensere",
-       "revdelete-offender": "Auctor emendationis:",
+       "revdelete-offender": "Redegit:",
        "suppressionlog": "Acta suppressionum",
        "mergehistory": "Historias paginarum confundere",
-       "mergehistory-box": "Emendationes duarum paginarum confundere:",
+       "mergehistory-box": "Redactiones duarum paginarum conflare:",
        "mergehistory-from": "Pagina imponenda:",
        "mergehistory-into": "Pagina petita:",
        "mergehistory-list": "Historia recensionum confusibilis",
        "mergehistory-go": "Monstrare recensiones confusibiles",
-       "mergehistory-submit": "Confundere emendationes",
-       "mergehistory-empty": "Nullae emendationes confusibiles.",
+       "mergehistory-submit": "Redactiones conflare",
+       "mergehistory-empty": "Nullae redactiones, quae conflari possint.",
        "mergehistory-autocomment": "confundavit [[:$1]] cum [[:$2]]",
        "mergehistory-comment": "confundavit [[:$1]] cum [[:$2]]: $3",
        "mergehistory-reason": "Causa:",
        "mergelog": "Acta confundendi",
        "revertmerge": "Inconfundere",
        "history-title": "Historia paginae \"$1\"",
+       "difference-title": "Quantum redactiones paginae \"$1\" differant",
        "lineno": "Linea $1:",
        "compareselectedversions": "Redactiones selectas conferre",
-       "showhideselectedversions": "Monstrare/celare emendationes selectas",
+       "showhideselectedversions": "Redactiones selectas vel ostendi vel celari iubere",
        "editundo": "abrogare",
        "diff-empty": "(eadem)",
        "searchresults": "Eventum investigationis",
        "search-suggest": "Nonne dicere voluisti: $1",
        "search-rewritten": "Ostenduntur, quae per \"$1\" inveniuntur. Profecto scrutinari, ubi \"$2\" contineatur!",
        "search-interwiki-caption": "Alia incepta",
-       "search-interwiki-default": "$1 eventus:",
+       "search-interwiki-default": "Inventa apud $1:",
        "search-interwiki-more": "(plus)",
        "search-relatedarticle": "Relata",
        "searchrelated": "relata",
        "search-external": "Inquisitio externalis",
        "searchdisabled": "Per {{grammar:accusative|{{SITENAME}}}} ad tempus non potes quaerere. Interea per [http://www.google.com Googlem] quaeras. Nota indices {{grammar:genitive|{{SITENAME}}}} contentorum apud Googlem fortasse antiquiores esse.",
        "search-error": "Error in quaerendo: $1",
-       "preferences": "Praeferentiae",
-       "mypreferences": "Praeferentiae",
+       "preferences": "Modi",
+       "mypreferences": "Modi",
        "prefs-edits": "Numerus recensionum:",
-       "prefs-skin": "Aspectum",
+       "prefs-skin": "Formae delectus",
        "skin-preview": "Prospectus",
-       "datedefault": "Nullum praeferentiae",
+       "datedefault": "Modus nondum delectus",
        "prefs-user-pages": "Paginae usoris",
        "prefs-personal": "Proprietates",
        "prefs-rc": "Nuper mutata",
        "prefs-watchlist": "Paginae observandae",
        "prefs-watchlist-days": "Quot dies index respiciat:",
-       "prefs-watchlist-days-max": "Numerus maximus: $1 {{PLURAL:$1|dies|dies}}",
+       "prefs-watchlist-days-max": "Maximum spatium: $1 {{PLURAL:$1|dies|dies}}",
        "prefs-watchlist-edits": "Quot mutationes index summum respiciat:",
-       "prefs-watchlist-edits-max": "Numerus maximus: 1000",
+       "prefs-watchlist-edits-max": "Maximus numerus: 1000",
        "prefs-misc": "Misc",
        "prefs-resetpass": "Tesseram mutare",
-       "prefs-email": "Modi de inscriptione electronica servandi",
-       "prefs-rendering": "Conspectus",
+       "prefs-email": "Modi ad litteras electronicas spectantes",
+       "prefs-rendering": "Aspectus",
        "saveprefs": "Hos modos servare",
-       "prefs-editing": "Mensura capsae verbi",
+       "restoreprefs": "Omnes (diversi) modi in integrum restituantur",
+       "prefs-editing": "Recensere",
        "rows": "Lineae:",
        "columns": "Columnae:",
        "searchresultshead": "Figuratio eventorum investigationis",
        "recentchangesdays": "Quot dies index respiciat:",
+       "recentchangesdays-max": "$1 maxime {{PLURAL:$1|diem|dies}}",
        "recentchangescount": "Quot mutationes index respiciat:",
-       "savedprefs": "Praeferentiae tuae servatae sunt.",
-       "timezonelegend": "Zona temporis:",
+       "prefs-help-recentchangescount": "Inclusis nuper mutatis, paginarum historiis, actis",
+       "savedprefs": "Modi tui servati sunt.",
+       "timezonelegend": "Zona temporalis:",
        "localtime": "Hora indigena:",
        "timezoneuseoffset": "Alia (da dissimilitudinem cinguli horae)",
        "servertime": "Hora moderatri:",
        "prefs-files": "Fasciculi",
        "prefs-custom-css": "CSS proprium",
        "prefs-custom-js": "JS proprium",
+       "prefs-reset-intro": "Hac pagina tuos modos in integrum restituere poteris.\nQuod infectum fieri nequit.",
        "prefs-emailconfirm-label": "Adfirmatio inscriptionis electronicae:",
        "youremail": "Inscriptio electronica:",
        "username": "Nomen usoris:",
        "prefs-info": "Generalia",
        "prefs-i18n": "Sermonis delectus",
        "prefs-signature": "Subscriptio",
+       "prefs-dateformat": "Forma temporalium",
+       "prefs-timeoffset": "Zona temporalis",
+       "prefs-advancedediting": "Generalia",
+       "prefs-editor": "Capsa editoria",
        "prefs-preview": "Prospectus",
        "prefs-advancedrc": "Modi speciales",
-       "prefs-advancedwatchlist": "Indicis modi speciales",
+       "prefs-advancedwatchlist": "Modi speciales",
        "prefs-displayrc": "Modi generales",
        "prefs-displaywatchlist": "Modi generales",
        "prefs-diffs": "Differentiae",
        "right-autoconfirmed": "Paginas semiprotectas recensere",
        "right-delete": "Paginas delere",
        "right-bigdelete": "Paginas magnarum historiarum delere",
-       "right-deleterevision": "Emendationes paginarum delere vel restituere",
+       "right-deleterevision": "Quasdam paginarum redactiones delere vel restituere",
        "right-browsearchive": "Paginas deletas quaerere",
        "right-undelete": "Paginam restituere",
-       "right-suppressrevision": "Emendationes magistratus celatas inspicere vel restituere",
+       "right-suppressrevision": "Quasvis redactiones cuiuscumque conlatoris inspicere nec non celare vel visibiles reddere",
        "right-suppressionlog": "Acta privata inspicere",
        "right-block": "Usores alios obstruere ne recensere possunt",
        "right-blockemail": "Usorem obstruere ne litteras electronicas mittere potest",
        "action-upload_by_url": "hunc fasciculum imponere ex inscriptione URL",
        "action-writeapi": "API scripturae usere",
        "action-delete": "hanc paginam delere",
-       "action-deleterevision": "hanc emendationem delere",
+       "action-deleterevision": "hanc redactionem delere",
        "action-browsearchive": "paginas deletas quaerere",
        "action-undelete": "hanc paginam restituere",
-       "action-suppressrevision": "hanc emendationem magistratus celatam inspicere vel restituere",
+       "action-suppressrevision": "hanc redactionem celatam inspicere neu restituere",
        "action-suppressionlog": "haec acta privata inspicere",
        "action-block": "hunc usorem obstruere ne recensere potest",
        "action-protect": "protectionem huius paginae mutare",
        "recentchanges-label-bot": "Hanc recensionem automaton fecit",
        "recentchanges-label-unpatrolled": "Haec recensio nondum est examinata",
        "recentchanges-label-plusminus": "Tot octetis magnitudo paginae mutata est",
-       "recentchanges-legend-heading": "'''Legenda:'''",
+       "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vide etiam [[Special:NewPages|indicem paginarum novarum]])",
        "rcnotefrom": "Subter sunt '''$1''' nuperrime mutata in proxima '''$2''' die.",
        "rclistfrom": "Monstrare mutata nova incipiens ab $3 $2",
        "rcshowhidemine": "$1 conlationes meas",
        "rcshowhidemine-show": "Monstrare",
        "rcshowhidemine-hide": "Celare",
+       "rcshowhidecategorization": "$1 classificationes",
+       "rcshowhidecategorization-show": "Ostendere",
+       "rcshowhidecategorization-hide": "Supprimere",
        "rclinks": "Monstrare $1 nuperrime mutata in $2 diebus proximis.<br />$3",
-       "diff": "diss",
+       "diff": "diff",
        "hist": "hist",
        "hide": "celare",
        "show": "monstrare",
        "listfiles_user": "Usor",
        "listfiles_size": "Magnitudo",
        "listfiles_description": "Descriptio",
-       "listfiles_count": "Emendationes",
+       "listfiles_count": "Redactiones",
        "file-anchor-link": "Fasciculus",
        "filehist": "Historia fasciculi",
-       "filehist-help": "Ad emendationem fasciculi inspiciendum, preme in diem/tempus.",
-       "filehist-deleteall": "delere omnes emendationes",
+       "filehist-help": "Presso die vel tempore fasciculum videbis, sicut tunc temporis apparuit.",
+       "filehist-deleteall": "omnes redactiones delere",
        "filehist-deleteone": "delere",
        "filehist-revert": "revertere",
        "filehist-current": "recentissima",
        "filehist-datetime": "Dies/Tempus",
        "filehist-thumb": "Minutio",
-       "filehist-thumbtext": "Minutio emendationis ex $1",
+       "filehist-thumbtext": "Minutum speculum redactionis $1 factae",
        "filehist-nothumb": "Nulla minutio",
        "filehist-user": "Usor",
        "filehist-dimensions": "Dimensiones",
        "sharedupload-desc-create": "Hic fasciculus apud {{grammar:accusative|$1}} iacet; in aliis inceptis adhiberi potest.\nFortasse [$2 paginam descriptionis fasciculi] ibi sitam recensere vis.",
        "filepage-nofile": "Fasciculus huius nominis non est.",
        "filepage-nofile-link": "Fasciculus huius nominis non est, sed [$1 fasciculum imponere] potes.",
-       "uploadnewversion-linktext": "Emendationem novam huius fasciculi imponere",
+       "uploadnewversion-linktext": "Novam huius fasciculi redactionem imponere",
        "shared-repo-from": "apud {{grammar:accusative|$1}}",
        "shared-repo": "repositorium commune",
        "shared-repo-name-wikimediacommons": "Vicimedia Communia",
        "filerevert": "Revertere $1",
        "filerevert-legend": "Reverti fasciculum",
-       "filerevert-intro": "Reverteris '''[[Media:$1|$1]]''' ad [emendationem $4 ex $3, $2].",
+       "filerevert-intro": "Reversurus es '''[[Media:$1|$1]]''' ad [redactionem $4, sicut $2, $3 facta erat].",
        "filerevert-comment": "Causa:",
-       "filerevert-defaultcomment": "Reverti ad emendationem ex $2, $1 ($3)",
+       "filerevert-defaultcomment": "Reverti ad redactionem die $1, hora $2 ($3) factam",
        "filerevert-submit": "Revertere",
-       "filerevert-success": "'''[[Media:$1|$1]]''' reversum est ad [emendationem $4 ex $3, $2].",
+       "filerevert-success": "'''[[Media:$1|$1]]''' reversum est ad redactionem [$4, quae $2, $3 facta erat].",
        "filedelete": "Delere $1",
        "filedelete-legend": "Fasciculum delere",
        "filedelete-intro": "Deles fasciculum '''[[Media:$1|$1]]''' una cum tota eius historia.",
-       "filedelete-intro-old": "Deles fasciculi '''[[Media:$1|$1]]''' emendationem [$4 ex $3, $2].",
+       "filedelete-intro-old": "Delebis fasciculi '''[[Media:$1|$1]]''' redactionem [$4 die $2, hora $3 factam].",
        "filedelete-comment": "Causa:",
        "filedelete-submit": "Delere",
-       "filedelete-success": "'''$1''' deletum est.",
-       "filedelete-success-old": "Emendatio fasciculi '''[[Media:$1|$1]]''' ex $3, $2 deletum est.",
+       "filedelete-success": "Fasciculus '''$1''' deletus est.",
+       "filedelete-success-old": "Redactio fasciculi '''[[Media:$1|$1]]''', sicut $2, $3 facta erat, deleta est.",
        "filedelete-nofile": "'''$1''' non existit.",
        "filedelete-otherreason": "Causa alia vel explicatio:",
        "filedelete-reason-otherlist": "Causa alia",
        "ncategories": "$1 {{PLURAL:$1|categoria|categoriae}}",
        "nlinks": "$1 {{PLURAL:$1|nexus|nexus}}",
        "nmembers": "$1 {{PLURAL:$1|inest|insunt}}",
-       "nrevisions": "$1 {{PLURAL:$1|emendatio|emendationes}}",
+       "nrevisions": "$1 {{PLURAL:$1|redactio|redactiones}}",
        "lonelypages": "Paginae non annexae",
        "uncategorizedpages": "Paginae sine categoriis",
        "uncategorizedcategories": "Categoriae sine categoriis",
        "listusers-noresult": "Nullus usor inventus.",
        "listusers-blocked": "(obstructus)",
        "activeusers": "Index usorum activorum",
-       "activeusers-count": "{{PLURAL:$1|una recensio recens|$1 recensiones recentes}} {{PLURAL:$3|die proximo|in diebus $3 proximis}}",
+       "activeusers-count": "{{PLURAL:$1|una recensio {{PLURAL:$3|hodie|his $3 diebus}} facta|$1 recensiones {{PLURAL:$3|hodie|his $3 diebus}} factae}}",
        "activeusers-hidebots": "Celare automata",
        "activeusers-hidesysops": "Celare magistratus",
        "activeusers-noresult": "Nullus usor inventus.",
        "listgrouprights-addgroup-self-all": "Addere omnes greges personae tuae",
        "listgrouprights-removegroup-self-all": "Removere omnes greges ex ratione propria",
        "emailuser": "Litteras electronicas usori mittere",
-       "emailpagetext": "Forma subter nuntium ad usorem mittet.\nInscriptio electronica quam in [[Special:Preferences|praeferentiis tuis]] dedis ut \"Ab\" inscriptione apparebit. Hoc modo usor tibi directe respondere poterit.",
+       "emailpagetext": "Hac capsa utere, ut ad $1 litteras des!\nQuae illi videbuntur tamquam missae ex ea inscriptione electronica, quam in [[Special:Preferences|modis tuis]] dedisti. Hoc modo ille tibi directe respondere poterit.",
        "defemailsubject": "{{SITENAME}} - Litterae electronicae ab usore \"$1\"",
        "noemailtitle": "Nulla inscriptio electronica",
        "noemailtext": "Hic usor inscriptionem electronicam ratam non dedit.",
        "unwatch": "Non iam observare",
        "unwatchthispage": "Non iam observare",
        "notanarticle": "Res non est",
-       "notvisiblerev": "Emendatio deleta est",
+       "notvisiblerev": "Superior redactio ab alio conlatore facta deleta est",
        "watchlist-details": "{{PLURAL:$1|$1 paginam|$1 paginas}} observas.",
        "wlheader-enotif": "Mutationes si quae factae erunt, electronice tibi nuntiabuntur.",
        "wlheader-showupdated": "Paginae nondum a te inspectae <strong>typis crassioribus</strong> ostenduntur.",
        "wlnote": "{{PLURAL:$1|Indicatur mutatio novissima|Indicantur '''$1''' mutationes novissimae}} abhinc {{PLURAL:$2|superiorem horam|superiores '''$2''' horas}} (ab $3, $4) factae.",
        "wlshowlast": "Monstrare proximas $1 horas $2 dies",
        "watchlist-hide": "Supprimere recensiones",
-       "watchlist-submit": "Porrige",
-       "wlshowtime": "Temporis spatium porrigendum:",
+       "watchlist-submit": "Ostendere",
+       "wlshowtime": "Index respiciat:",
        "wlshowhideminor": "minores",
        "wlshowhidebots": "automatice factas",
        "wlshowhideliu": "a conlatoribus notis factas",
        "wlshowhideanons": "sine nomine factas",
        "wlshowhidemine": "meas",
+       "wlshowhidecategorization": "classificationes",
        "watchlist-options": "Huius indicis modi",
        "watching": "Custodiens...",
        "unwatching": "Decustodiens...",
        "enotif_impersonal_salutation": "Usor {{grammar:genitive|{{SITENAME}}}}",
        "enotif_lastdiff": "Vide $1 ad hanc recensionem inspiciendum.",
        "enotif_anon_editor": "usor ignotus $1",
-       "enotif_body": "\nSalve $WATCHINGUSERNAME,\n\nPagina {{grammar:genitive|{{SITENAME}}}} $PAGETITLE ab $PAGEEDITOR die $PAGEEDITDATE $CHANGEDORCREATED est, vide emendationem currentem apud $PAGETITLE_URL\n\n$NEWPAGE\n\nAuctor hunc summarium dedit: $PAGESUMMARY $PAGEMINOREDIT\n\nContact the editor:\nlitterae electronicae: $PAGEEDITOR_EMAIL\nvici: $PAGEEDITOR_WIKI\n\nThere will be no other notifications in case of further changes unless you visit this page.\nYou could also reset the notification flags for all your watched pages on your watchlist.\n\n             Your friendly {{SITENAME}} notification system\n\n--\nTo change your watchlist settings, visit\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nFeedback and further assistance:\n$HELPPAGE",
+       "enotif_body": "\nSalve $WATCHINGUSERNAME,\n\nPagina {{grammar:genitive|{{SITENAME}}}} $PAGETITLE ab $PAGEEDITOR die $PAGEEDITDATE $CHANGEDORCREATED est. Vide redactionem currentem apud $PAGETITLE_URL\n\n$NEWPAGE\n\nCuius auctor hoc summarium dedit: $PAGESUMMARY $PAGEMINOREDIT\n\nUt conlatorem adloquaris:\nlitterae electronicae: $PAGEEDITOR_EMAIL\nvici: $PAGEEDITOR_WIKI\n\nDe futuris recensionibus non certior fies nisi nomine dato paginam ipsam inspexeris. Praeterea licet omnes paginas non iam observandas notare.\n\n             Your friendly {{SITENAME}} notification system\n\n--\nUt paginarum observandarum modos spectes, ito ad\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nFeedback and further assistance:\n$HELPPAGE",
        "created": "creata",
        "changed": "mutata",
        "deletepage": "Delere paginam",
        "confirm": "Adfirmare",
-       "excontent": "contenta erant: '$1'",
-       "excontentauthor": "contenta erant: '$1' (et contributor unicus erat '[[Special:Contributions/$2|$2]]')",
-       "exbeforeblank": "contenta priusquam pagina facta vacua erant: '$1'",
+       "excontent": "contenta fuerant: \"$1\"",
+       "excontentauthor": "contenta fuerant: \"$1\", conlata a solo \"[[Special:Contributions/$2|$2]]\" ([[User talk:$2|Disputatio]])",
+       "exbeforeblank": "pagina rasa continuerat: \"$1\"",
        "delete-confirm": "Delere \"$1\"",
        "delete-legend": "Delere",
-       "historywarning": "'''Monitio:''' Pagina quam delere vis historiam {{PLURAL:$1|unius fere emendationis|$1 fere emendationum}} habet:",
+       "historywarning": "'''Cave:''' Paginae, quam deleturus es, historia est {{PLURAL:$1|unius redactionis|$1 redactionum}}:",
        "confirmdeletetext": "Paginam cum tota historia eius delebis.\nAdfirma quaesumus te paginam re vera delere velle, te consequentias intellere, et actionem tuam [[{{MediaWiki:Policy-url}}|consilio]] congruere.",
        "actioncomplete": "Actum perfectum",
        "actionfailed": "Actum non feliciter evenit",
        "dellogpage": "Index deletionum",
        "dellogpagetext": "Subter est index deletionum recentissimarum.",
        "deletionlog": "index deletionum",
-       "reverted": "Reversum ad emendationem proximam",
+       "reverted": "Reversa in superiorem redactionem",
        "deletecomment": "Causa:",
        "deleteotherreason": "Causa alia vel explicatio:",
        "deletereasonotherlist": "Causa alia",
        "rollbacklinkcount": "reverti {{PLURAL:$1|unam recensionem|$1 recensiones}}",
        "rollbacklinkcount-morethan": "reverti plus quam {{PLURAL:$1|unam recensionem|$1 recensiones}}",
        "rollbackfailed": "Reversum defecit",
-       "cantrollback": "Haec non potest reverti; conlator proximus solus auctor huius rei est.",
-       "alreadyrolled": "Ad emendationem proximam paginae [[:$1]] ab usore [[User:$2|$2]] ([[User talk:$2|Disputatio]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) reverti non potest; alius paginam iam recensuit vel revertit.\n\nEmendatio proxima ab usore [[User:$3|$3]] ([[User talk:$3|Disputatio]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) effecta est.",
-       "editcomment": "Summarium erat: \"''$1''\".",
-       "revertpage": "Reverti recensiones ab usore [[Special:Contributions/$2|$2]] ([[User talk:$2|Disputatio]]) ad emendationem proximam ab [[User:$1|$1]]",
-       "rollback-success": "Reverti recensiones ab usore $1\nad emendationem proximam ab $2.",
+       "cantrollback": "Haec reverti non potest;\nhic conlator solus auctor huius paginae est.",
+       "alreadyrolled": "Ad superiorem redactionem paginae [[:$1]] a conlatore [[User:$2|$2]] ([[User talk:$2|Disputatio]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) facta reverti non potest;\nalius quisquam paginam iam recensuit vel revertit.\n\nQuae novissima redactio effecta est a conlatore [[User:$3|$3]] ([[User talk:$3|Disputatio]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+       "editcomment": "Summarium erat: <em>$1</em>.",
+       "revertpage": "Recensiones a conlatore [[Special:Contributions/$2|$2]] ([[User talk:$2|Disputatio]]) factas in superiorem redactionem a conlatore [[User:$1|$1]] factam restitui",
+       "rollback-success": "Redactiones a conlatore $1 factae reversae sunt;\nrestitutae in superiorem redactionem a conlatore $2 factam.",
        "protectlogpage": "Index protectionum",
        "protectlogtext": "Subter est index protectionum et deprotectionum paginarum. Vide [[Special:ProtectedPages|indicem paginarum nunc protectarum]].",
        "protectedarticle": "protegit \"[[$1]]\"",
        "undeletepage": "Videre et restituere paginas deletas",
        "viewdeletedpage": "Paginas deletas inspicere",
        "undeletepagetext": "{{PLURAL:$1|Pagina sequens deleta est sed tabulis manens restitui potest.|Paginae $1 sequentes deletae sunt sed tabulis manentes restitui possunt.}}\nTabulae nonnumquam deletae sunt.",
-       "undelete-fieldset-title": "Emendationes restituere",
-       "undeleterevisions": "$1 {{PLURAL:$1|emendatio servata|emendationes servatae}}",
-       "undeletehistory": "Si paginam restituis, omnes emendationes restituentur ad historiam.\nSi pagina nova cum ipso nomine post deletionem creata est, emendationes restitutae in historia priori apparebunt.",
-       "undelete-revision": "Emendatio deleta paginae $1 (ex $5, $4) ab usore $3:",
-       "undelete-nodiff": "Nulla emendatio prior inventa.",
+       "undelete-fieldset-title": "Redactiones restituere",
+       "undeleterevisions": "$1 {{PLURAL:$1|redactio deleta|redactiones deletae}}",
+       "undeletehistory": "Si paginam restitueris, omnes redactiones restituentur ad historiam.\nSi pagina nova eiusdem nominis post deletionem creata est, redactiones restitutae in historia priori apparebunt.",
+       "undelete-revision": "Redactio deletae paginae $1 (sicut $4, $5 a conlatore $3 facta erat):",
+       "undelete-nodiff": "Redactio prior non est.",
        "undeletebtn": "Restituere",
        "undeletelink": "inspicere/restituere",
        "undeleteviewlink": "inspicere",
        "undeleteinvert": "Selectionem invertere",
        "undeletecomment": "Causa:",
-       "undeletedrevisions": "{{PLURAL:$1|1 emendatio recuperata|$1 emendationes recuperatae}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 emendatio recuperata|$1 emendationes recuperatae}} et {{PLURAL:1 fasciculus recuperatus|$2 fasciculi recuperati}}",
-       "undeletedfiles": "{{PLURAL:$1|1 fasciculus recuperatus|$1 fasciculi recuperati}}",
+       "undeletedrevisions": "{{PLURAL:$1|1 redactio restituta est|$1 redactiones restitutae sunt}}",
+       "undeletedrevisions-files": "{{PLURAL:$1|1 redactio restituta est|$1 redactiones restitutae sunt}} et {{PLURAL:1 fasciculus restitutus est|$2 fasciculi restituti sunt}}",
+       "undeletedfiles": "{{PLURAL:$1|1 fasciculus restitutus est|$1 fasciculi restituti sunt}}",
        "cannotundelete": "Abrogatio deletionis fefellit; fortasse aliquis iam paginam restituit.",
        "undelete-header": "Pro paginis nuper deletis, vide [[Special:Log/delete|indicem deletionum]].",
        "undelete-search-box": "Quaerere inter paginas iam deletas",
        "proxyblocker": "Instrumentum obstructionis moderatorum",
        "lockdb": "Basem datorum obstruere",
        "unlockdb": "Basem datorum deobstruere",
-       "lockdbtext": "Obstructio basis datorum potestatem omnium usorum suspendebit paginas recensendi et praeferentiarum earum et indicem paginarum custoditarum mutandi.\nAdfirma te basem datorum obstruere velle, et te dein basem datorum deobstruendum.",
+       "lockdbtext": "Obstructo isto datorum repositorio omnes conlatores arcebuntur a recensendis paginis vel earum observatione et a deligendis modis ceterisque rebus, quae mutationibus istic fiendis necesse habent.\nConfirmes, quaesumus, te id ipsum studio et intentione agere et munere tuo functum huic obstructioni finem facere velle.",
        "lockconfirm": "Ita, vere basem datorum obstruere volo.",
        "unlockconfirm": "Ita, vere basem datorum deobstruere volo.",
        "lockbtn": "Basem datorum obstruere",
        "import-upload-filename": "Nomen fasciculi:",
        "import-comment": "Sententia:",
        "importstart": "Adportare paginas...",
-       "import-revision-count": "$1 {{PLURAL:$1|emendatio|emendationes}}",
+       "import-revision-count": "$1 {{PLURAL:$1|redactio|redactiones}}",
        "importbadinterwiki": "Nexus intervicius malus",
        "importsuccess": "Adportatio finita!",
        "import-noarticle": "Nulla pagina importanda!",
        "xml-error-string": "$1 in linea $2 et columna $3 (octetus $4): $5",
        "import-upload": "XML imponere et importare",
        "importlogpage": "Acta adportationum",
-       "import-logentry-upload-detail": "$1 {{PLURAL:$1|emendatio|emendationes}}",
-       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|emendatio|emendationes}} ex $2",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|redactio importata est|redactiones importatae sunt}}",
+       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|redactio ex $2 importata est|redactiones ex $2 importatae sunt}}",
        "tooltip-pt-userpage": "Pagina usoris tua",
        "tooltip-pt-mytalk": "Pagina disputationis tuae",
        "tooltip-pt-anontalk": "Disputatio de recensionibus ex hoc loco IP factis",
-       "tooltip-pt-preferences": "Praeferentiae tuae",
+       "tooltip-pt-preferences": "Modi tui",
        "tooltip-pt-watchlist": "Mutationes in paginis observandis factae",
        "tooltip-pt-mycontris": "Index conlationum tuarum",
        "tooltip-pt-anoncontribs": "Ostendit recensiones ex hoc loco IP factas",
        "tooltip-ca-history": "Superiores huius paginae versiones",
        "tooltip-ca-protect": "Protegere hanc paginam",
        "tooltip-ca-delete": "Delere hanc paginam",
-       "tooltip-ca-undelete": "Restituere emendationes huic paginae conlatas antequam haec pagina deleta esset",
+       "tooltip-ca-undelete": "Restituere recensiones ante paginam deletam factas",
        "tooltip-ca-move": "Movere hanc paginam",
        "tooltip-ca-watch": "Hanc paginam observandam habere",
        "tooltip-ca-unwatch": "Hanc paginam non iam observandam habere",
        "tooltip-t-upload": "Fasciculos imponere",
        "tooltip-t-specialpages": "Index paginarum specialium",
        "tooltip-t-print": "Forma impressibilis huius paginae",
-       "tooltip-t-permalink": "Nexus perpetuus ad hanc emendationem paginae",
+       "tooltip-t-permalink": "Nexus perpetuus ad hanc paginae redactionem",
        "tooltip-ca-nstab-main": "Videre paginam",
        "tooltip-ca-nstab-user": "Videre paginam usoris",
        "tooltip-ca-nstab-special": "Haec est pagina specialis. Pagina ipsa recenseri non potest.",
        "pageinfo-firstuser": "Creator paginae",
        "pageinfo-firsttime": "Dies et tempus creationis paginae",
        "pageinfo-lastuser": "Usor qui ultimam recensionem fecit",
-       "pageinfo-lasttime": "Dies ultimae emendationis",
+       "pageinfo-lasttime": "Quando novissime recensita sit",
        "pageinfo-recent-edits": "Praesens numerus recensionum (intra praeterita $1)",
        "pageinfo-hidden-categories": "{{PLURAL:$1|Categoria celata|Categoriae celatae}} ($1)",
        "pageinfo-toolboxlink": "De hac pagina",
        "markedaspatrolled": "Indicare hanc paginam qua circumita",
        "patrol-log-page": "Acta emendationum circumitarum",
        "log-show-hide-patrol": "$1 acta emendationum circumitarum",
-       "deletedrevision": "Delevit emendationem $1 veterem",
+       "deletedrevision": "Abolita redactio imaginis $1",
        "previousdiff": "← Differentia superior",
        "nextdiff": "Differentia proxima →",
        "imagemaxsize": "Magnitudo maxima fasciculorum:<br />\n''(in pagina descriptionis fasciculi)''",
        "file-info-size": "$1 × $2 elementa imaginalia, magnitudo fasciculi: $3, typus MIME: $4",
        "file-nohires": "Nulla maior resolutio exstat.",
        "svg-long-desc": "fasciculus SVG, nominale $1 × $2 elementa imaginalia, magnitudo fasciculi: $3",
-       "show-big-image": "Resolutio completa",
+       "show-big-image": "Sua resolutio",
        "show-big-image-size": "$1 × $2 elementa imaginalia",
        "file-info-gif-frames": "$1 {{PLURAL:$1|replum|repla}}",
        "newimages": "Fasciculi novi",
        "noimages": "Nullum videndum.",
        "ilsubmit": "Quaerere",
        "bydate": "ex die",
+       "hours": "{{PLURAL:$1|hanc horam|has $1 horas}}",
+       "days": "{{PLURAL:$1|hunc diem|hos $1 dies}}",
+       "hours-ago": "abhinc $1 {{PLURAL:$1|horam|horas}}",
        "metadata": "Metadata",
        "metadata-help": "Hic fasciculus alias res continet, saepius a machina originatore additas, et (si fasciculus postea recensus sit) fortasse corrigendas.",
        "metadata-expand": "Plura ostende",
        "exif-imagedescription": "Descriptio imaginis",
        "exif-model": "Typus photomachinae",
        "exif-artist": "Auctor",
-       "exif-exifversion": "Emendatio Exif",
+       "exif-exifversion": "Redactio modi \"Exif\"",
        "exif-colorspace": "Spatium colorimetricum",
        "exif-pixelydimension": "Amplitudo imaginis",
        "exif-pixelxdimension": "Altitudo imaginis",
        "namespacesall": "omnia",
        "monthsall": "omnes",
        "confirmemail": "Inscriptionem electronicam adfirmare",
-       "confirmemail_noemail": "Non est tibi inscriptio electronica valida in [[Special:Preferences|tuis praeferentiis]] posita.",
+       "confirmemail_noemail": "In [[Special:Preferences|modis tuis]] non est valida inscriptio electronica.",
        "confirmemail_text": "{{SITENAME}} te postulat inscriptionem tuam electronicam adfirmare priusquam proprietatibus litterarum electronicarum fruaris. Imprime botonem subter ut nuntium adfirmationis tibi mittatur. Nuntio nexus inerit quod est scribendus in tuo navigatro interretiali ut validum adfirmes tuam inscriptionem electronicam.",
        "confirmemail_send": "Mittere codicem adfirmationis",
        "confirmemail_sent": "Missae sunt litterae electronicae adfirmationis.",
        "tags-hitcount": "$1 {{PLURAL:$1|mutatum|mutata}}",
        "compare-page1": "Pagina 1",
        "compare-page2": "Pagina 2",
-       "compare-rev1": "Emendatio 1",
-       "compare-rev2": "Emendatio 2",
+       "compare-rev1": "Redactio una",
+       "compare-rev2": "Redactio altera",
        "htmlform-submit": "Submittere",
        "htmlform-reset": "Mutationes abrogare",
        "htmlform-selectorother-other": "Aliud",
index 5867da1..7a623c5 100644 (file)
        "myprivateinfoprotected": "Dir hutt net d'Recht fir Är privat Informatiounen z'änneren.",
        "mypreferencesprotected": "Dir hutt net d'Recht fir Är Astellungen z'änneren.",
        "ns-specialprotected": "Spezialsäite kënnen net verännert ginn.",
-       "titleprotected": "Eng Säit mat dësem Numm kann net ugeluecht ginn. Dës Spär gouf vum [[User:$1|$1]] gemaach deen als Grond ''$2'' uginn huet.",
+       "titleprotected": "Dësen Titel gouf vum [[User:$1|$1]] esou gespaart datt en net kann ugeluecht ginn. De Grond deen ugi gouf ass <em>$2</em>",
        "filereadonlyerror": "De Fichier \"$1\" konnt net geännert ginn well de Repertoire vun de Fichieren \"$2\" nëmme geliest däerf ginn.\n\nDe System-Administrateur den d'Schreiwe gespaart huet, huet dës Erklärung uginn: \"$3\"",
        "invalidtitle-knownnamespace": "Net valabelen Titel mam Nummraum \"$2\" a mam Text \"$3\"",
        "invalidtitle-unknownnamespace": "Net valabelen Titel mat der onbekannter Nummraum-Zuel $1 a mam Text \"$2\"",
        "nocookieslogin": "{{SITENAME}} benotzt Cookië beim Umelle vun de Benotzer.\nDir hutt Cookien ausgeschalt.\nAktivéiert d'Cookien w.e.g. a versicht et nach eng Kéier.",
        "nocookiesfornew": "De Benotzerkont gouf net ugeluecht, well mir seng Quell net bestëmme konnten.\nVergewëssert Iech datt Dir Cookien zouloosst, luet dës Säit nei a probéiert nach emol.",
        "noname": "Dir hutt kee gëltege Benotzernumm uginn.",
-       "loginsuccesstitle": "Umeldung huet geklappt",
+       "loginsuccesstitle": "Ageloggt",
        "loginsuccess": "'''Dir sidd elo als \"$1\" op {{SITENAME}} ugemellt.'''",
        "nosuchuser": "Et gëtt kee Benotzernumm mam Numm \"$1\".\nBeim Benotzernumm gëtt tëscht groussen a klenge Buschtawen ënnerscheet (casesensitive).\nKuckt w.e.g. op d'Schreifweis richteg ass, oder [[Special:UserLogin/signup|maacht en neie Benotzerkont op]].",
        "nosuchusershort": "De Benotzernumm \"$1\" gëtt et net.\nKuckt w.e.g. op d'Schreifweis richteg ass.",
        "botpasswords-label-resetpassword": "D'Passwuert zrécksetzen",
        "botpasswords-label-grants-column": "Accordéiert",
        "botpasswords-bad-appid": "Den Numm vum Bot \"$1\" ass net valabel.",
+       "botpasswords-created-body": "D'Botpasswuert fir de Bot-Numm \"$1\" vum Benotzer ''$2'' gouf ugeluecht.",
        "botpasswords-updated-title": "Botpasswuert aktualiséiert",
-       "botpasswords-updated-body": "D'Botpasswuert \"$1\" gouf aktualiséiert.",
+       "botpasswords-updated-body": "D'Botpasswuert fir de Bot-Numm \"$1\" vum Benotzer ''$2'' gouf aktualiséiert.",
        "botpasswords-deleted-title": "Botpasswuert geläscht",
-       "botpasswords-deleted-body": "D'Botpasswuert \"$1\" gouf geläscht.",
+       "botpasswords-deleted-body": "D'Botpasswuert fir de Bot-Numm \"$1\" vum Benotzer ''$2'' gouf geläscht.",
        "botpasswords-not-exist": "De Benotzer \"$1\" huet kee Botpasswuert mam Numm \"$2\".",
        "resetpass_forbidden": "Passwierder kënnen net geännert ginn.",
        "resetpass-no-info": "Dir musst ageloggt sinn, fir direkt op dës Säit ze kommen.",
        "undo-summary-username-hidden": "Versioun $1 vun engem verstoppte Benotzer zrécksetzen",
        "cantcreateaccounttitle": "Benotzerkont konnt net opgemaach ginn",
        "cantcreateaccount-text": "D'Opmaache vu Benotzerkonten vun dëser IP Adress ('''$1''') gouf vum [[User:$3|$3]] gespaart.\n\nDe Benotzer $3 huet \"$2\" als Grond uginn.",
-       "cantcreateaccount-range-text": "D'Uleeë vu Benotzerkonte vun IP-Adressen aus dem Beräich \"$1\", zu deem Är IP-Adress ('''$4''') gehéiert, gouf vum [[User:$3|$3]] gespaart.\n\nDe Grond den den $3 uginn huet ass ''$2''",
+       "cantcreateaccount-range-text": "D'Uleeë vu Benotzerkonte vun IP-Adressen aus dem Beräich \"$1\", zu deem Är IP-Adress (<strong>$4</strong>) gehéiert, gouf vum [[User:$3|$3]] gespaart.\n\nDe Grond den den $3 uginn huet ass <em>$2</em>",
        "viewpagelogs": "Logbicher fir dës Säit weisen",
        "nohistory": "Et gëtt keng al Versioune vun dëser Säit.",
        "currentrev": "Aktuell Versioun",
        "rev-delundel": "weisen/verstoppen",
        "rev-showdeleted": "Weisen",
        "revisiondelete": "Versioune läschen/restauréieren",
-       "revdelete-nooldid-title": "Ongülteg Zilversioun",
+       "revdelete-nooldid-title": "Ongëlteg Zilversioun",
        "revdelete-nooldid-text": "Dir hutt entweder keng Versioun ugi fir dës Funktioun ze benotzen, oder déi Versioun déi Dir uginn hutt gëtt et net, oder Dir versicht déi aktuell Versioun ze verstoppen.",
        "revdelete-no-file": "De Fichier deen ugi war gëtt et net.",
        "revdelete-show-file-confirm": "Sidd Dir sécher datt Dir déi geläschte Versioun vum Fichier \"<nowiki>$1</nowiki>\" vum $2 ëm $3 gesi wëllt?",
        "revdelete-submit": "Op déi gewielt {{PLURAL:$1|Versioun|Versiounen}} uwenden",
        "revdelete-success": "'''Sichtbarkeet vun de Versioune gouf aktualiséiert.''''",
        "revdelete-failure": "'''Sichtbarkeet vun der Versioun konnt net aktualiséiert ginn:'''\n$1",
-       "logdelete-success": "'''Sichbarkeet vum Logbuch geännert.'''",
+       "logdelete-success": "'''Sichbarkeet vum Logbuch agestallt.'''",
        "logdelete-failure": "'''D'Sichtbarkeet vum Logbuch konnt net agestllt ginn:'''\n$1",
        "revdel-restore": "Sichtbarkeet änneren",
        "pagehist": "Versioune vun dëser Säit",
        "recentchanges-label-bot": "Dës Ännerung gouf vun engem Bot gemaacht",
        "recentchanges-label-unpatrolled": "Dës Ännerung gouf nach net nogekuckt",
        "recentchanges-label-plusminus": "D'Gréisst vun der Säit huet sech ëm déi Zuel vu Bytes geännert",
-       "recentchanges-legend-heading": "'''Legend:'''",
+       "recentchanges-legend-heading": "<strong>Legend:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (kuckt och [[Special:NewPages|Lëscht vun den neie Säiten]])",
        "recentchanges-legend-plusminus": "''(±123)''",
        "recentchanges-submit": "Weisen",
        "backend-fail-read": "De Fichier $1 konnt net geliest ginn.",
        "backend-fail-create": "De Fichier $1 konnt net geschriwwe ginn.",
        "backend-fail-maxsize": "De Fichier $1 konnt net geschriwwe gi well e méi grouss ass wéi {{PLURAL:$2|ee Byte|$2 Byten}}.",
-       "backend-fail-readonly": "De Späicher-Backend \"$1\" kann elo nëmme geliest ginn (read-only). De Grond deen ugi gouf war: \"$2\"",
+       "backend-fail-readonly": "De Späicher-Backend \"$1\" kann elo nëmme geliest ginn (read-only). De Grond deen ugi gouf war: <em>$2</em>",
        "backend-fail-synced": "De Fichier \"$1\" ass an den internen Späichersystemer am Hannergrond an engem net konsistenten Zoustand",
        "backend-fail-connect": "Keng Verbindung mam Backend vum Späicher \"$1\".",
        "backend-fail-internal": "Onbekannte Feeler am Backend vum Späicher: \"$1\"",
        "uploadstash-summary": "Op dëser Säit huet en Zougrëff op Fichieren déi eropgeluede sinn (oder am Gaang sinn eropgelueden ze ginn) déi awer nach net op der Wiki publizéiert sinn. Dës Fichier kënnen eenzeg an eleng vun deem Benotzer deen se eropgelueden huet gesi ginn.",
        "uploadstash-clear": "Um Server gespäichert Fichieren déi nach net eropgeluede si läschen",
        "uploadstash-nofiles": "Dir hutt keng gespäichert Fichieren déi Dir nach net eropgelueden hutt.",
-       "uploadstash-badtoken": "D'Ausféiere vun dëser Aktioun huet net funktionéiert, vläicht well d'Informatiounen iwwer Är Rechter ofgelaf sinn. Probéiert et nach emol.",
+       "uploadstash-badtoken": "D'Ausféiere vun dëser Aktioun huet net funktionéiert, vläicht well d'Informatiounen iwwer Är Rechter ofgelaf sinn. Probéiert et w.e.g. nach emol.",
        "uploadstash-errclear": "D'Läsche vun de Fichieren huet net funktionéiert.",
        "uploadstash-refresh": "Lëscht vun de Fichieren aktualiséieren",
        "img-auth-accessdenied": "Zougang refuséiert",
        "alllogstext": "Dëst ass eng kombinéiert Lëscht vu Logbicher op {{SITENAME}}.\nDir kënnt d'Siche limitéieren wann Dir e Log-Typ, e Benotzernumm (case-senisitive) oder déi gefrote Säit (och case-senisitive) agitt.",
        "logempty": "Näischt fonnt.",
        "log-title-wildcard": "Titel fänkt mat dësem Text un",
-       "showhideselectedlogentries": "Déi erausgesichte Entréeën am Logbuch weisen/verstoppen",
+       "showhideselectedlogentries": "Déi erausgesicht Entréeën am Logbuch weisen/verstoppen",
        "checkbox-select": "Eraussichen:$1",
        "checkbox-all": "All",
        "checkbox-none": "Keen",
        "delete-toobig": "Dës Säit huet e laangen Historique, méi wéi $1 {{PLURAL:$1|Versioun|Versiounen}}.\nD'Läsche vu sou Säite gouf limitéiert fir ongewollte Stéierungen op {{SITENAME}} ze verhënneren.",
        "delete-warning-toobig": "Dës Säit huet eng laang Versiounsgeschicht, méi wéi $1 {{PLURAL:$1|Versioun|Versiounen}}.\nD'Läschen dovu kann zu Stéierungen am Fonctionnement vun {{SITENAME}} féieren;\ndës Aktioun soll mat Virsiicht gemaach ginn.",
        "deleteprotected": "Dir däerft dëst Säit net läsche well se gespaart ass.",
-       "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.",
+       "deleting-backlinks-warning": "<strong>Opgepasst:</strong> [[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": "Ännerungen zrécksetzen",
        "rollbacklink": "Zrécksetzen",
        "rollbacklinkcount": "{{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 zréckgesat ginn;\neen Aneren huet dat entweder scho gemaach oder nei Ännerungen agedroen.\n\nDéi lescht Ännerung vun der Säit war vum [[User:$3|$3]] ([[User talk:$3|Diskussioun]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "De Resumé vun der Ännerung war: \"''$1''\".",
+       "editcomment": "De Resumé vun der Ännerung war: <em>$1</em>.",
        "revertpage": "Ännerunge vum [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussioun]]) zréckgesat op déi lescht Versioun vum [[User:$1|$1]]",
        "revertpage-nouser": "Zréckgesaten Ännerungen duerch e verstoppte Benotzer op déi lescht Versioun vum {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "D'Ännerunge vum $1 goufen zréckgesat op déi lescht Versioun vum $2.",
        "changecontentmodel-title-label": "Titel vun der Säit",
        "changecontentmodel-model-label": "Neie Modell vun enger Säit mat Inhalt",
        "changecontentmodel-reason-label": "Grond:",
+       "changecontentmodel-submit": "Änneren",
        "changecontentmodel-success-title": "De Modell vum Inhalt gouf geännert",
        "changecontentmodel-success-text": "Den Typ vum Inhalt vu(n) [[:$1]] gouf geännert.",
        "logentry-contentmodel-change-revertlink": "zrécksetzen",
        "tags-edit-title": "Markéierungen (tags) änneren",
        "tags-edit-manage-link": "Markéierunge geréieren",
        "tags-edit-revision-selected": "{{PLURAL:$1|Erausgesicht Versioun|Erausgesicht Versioune}} vu(n) [[:$2]]:",
-       "tags-edit-existing-tags-none": "''Keng''",
+       "tags-edit-existing-tags-none": "<em>Keng</em>",
        "tags-edit-new-tags": "Nei Markéierungen (tags):",
        "tags-edit-add": "Dës Markéierungen (tags) dobäisetzen:",
        "tags-edit-remove-all-tags": "(all Markéierungen ewechhuelen)",
        "log-description-pagelang": "Dëst ass a Log mat den Ännerunge vun de Sprooche vun de Säiten.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|huet}} d'Sprooch vun der Säit $3 vu(n) $4 op $5 geännert.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktivéiert)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desaktivéiert''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>desaktivéiert</strong>)",
        "mediastatistics": "Statistike vun de Medien",
        "mediastatistics-summary": "Statistike vun den Type vun den eropgeluedene Fichieren. Dobäi gëtt nëmmen déi lescht Versioun vun engem Fichier gezielt, al oder geläscht Versioune vu Fichiere sinn ausgeschloss.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 Byte|$1 Byten}} ($2; $3%)",
index fe50952..11c7397 100644 (file)
@@ -2,7 +2,8 @@
        "@metadata": {
                "authors": [
                        "Kizito",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Enyunzi ebengako olukoloboze?",
        "cascadeprotected": "Olupapula luno lulandideko ekikugizo ekirugaana okukyusibwako ekisibuka ku {{PLURAL:$1|lunnaalwo luno olulukozesa|zinnalwo zino ezirukozesa}}:<br />\n$2",
        "namespaceprotected": "Tolina buyinza bwa kukyusa ku mpapula ez'omu kkuŋaanizo erya '''$1'''.",
        "ns-specialprotected": "Empapula enjawule tezikukkiriza kuzikyusaako.",
-       "titleprotected": "[[User:$1|$1]] ataddewo ekikugizo ekigaana okukozesa omutwe guno.<br />\nEnsonga gy'awadde eri nti \"''$2''\".",
+       "titleprotected": "[[User:$1|$1]] ataddewo ekikugizo ekigaana okukozesa omutwe guno.<br />\nEnsonga gy'awadde eri nti <em>$2</em>.",
        "virus-badscanner": "Kiremya mu nteekateeka: ekinoonya vayirasi kino tekimanyidwa: ''$1''",
        "virus-scanfailed": "okunoonya vayirasi kulemye (obubaka buli $1)",
        "virus-unknownscanner": "ekinoonya vayirasi ekitamanyidwa:",
        "move-page-legend": "Simbuliza olupapula luno",
        "movepagetext": "Foomu eno ekyusa erinnya ly'olupapula era n'ekyusa n'olukalala lw'ebyafaayo lwa lwo lwogere ku linnya ppya.\n\nWajjakukolebwawo n'olupapula olulina erinnya kkadde nga lwo lukutwalabutwazi ku lupapula olukyusidw'erinnya.\nOsobola okulagira sisitemu n'ekukyusiza empapula endala ezikutwalabutwazi ku linnya kkadde, zikutwalenga ku linnya ppya.\n\nBw'oba ng'ekyo toyagadde ekikukolere, laba nti onoonya n'ogolola empapula [[Special:DoubleRedirects|'''ezikutwalabutwazi ku ndala ng'ate ne'yo eyagala okukutwalabutwazi ku ndala''']] n'ezo [[Special:BrokenRedirects|'''ezikutwalabutwazi ku ndala etaliwo''']] zonna ezireetedwawo okusimbuliza kw'okoze.\n\nBuvunaanyizibwa bwo okulaba nti enyunzi zonna zisigala nga ziggukira gye wali ogenderedde.\n\nGenderera nti olupapula terujjakukyusibwa linnya ssinga waba nga waliwo olupapula olulala olulina erinnya ly'oyagala okukozesa, okugyako nga olwo lwereere oba nga lukutwalabutwazi ku lulala era nga teruliko olukalala lw'ebyafayo.\nKino kitegeeza nti bw'okola nsobi mu kukyusa linnya, oyinza okuluzzayo ku linnya kkadde, naye tosobola okubuutikira olupapula olusangidwawo.\n\n'''Kulabula!'''\n\nOlupapula lw'oyagala okusimbuliza luyinz'okuba nga lujjumbirwa bangi. Okulukyusa erinnya kiyinz'okubagwakobugwi nga tebakiriindiridde. Sooka weroowoze nnyo olabe nti ebiyinz'okuva mu kikolwa kino obitegeera era tebireetewo obukosefu okuteetaagisibwa.",
        "movepagetalktext": "Olupapula olwa yogera nange nalwo sisitemu ejjakulukyusizaako '''okugyako nga:'''\n\n*Ku linnya ppya wasangibwawo olupapula lya yogera nange olulala olutali lwereere, oba\n\n*Ogyamu akali mu kabokisi akalagira sistemu okukikola.\n\n\nEkimu ku ebyo ebibiri bwe kibawo, olwo gwe oba olina okwekyusiza olwa yogera nange.",
-       "movearticle": "Simbuliza olupapula luno",
        "newtitle": "Luyitibwe:",
        "move-watch": "Goberera olupapula luno",
        "movepagebtn": "Lusimbulize",
index 4cc3907..4684903 100644 (file)
@@ -17,7 +17,8 @@
                        "아라",
                        "Robin0van0der0vliet",
                        "Macofe",
-                       "Matma Rex"
+                       "Matma Rex",
+                       "Robin van der Vliet"
                ]
        },
        "tog-underline": "Links óngersjtriepe",
        "customcssprotected": "De kèns dees CSS-pagina neet bewirke ómdet die persuunlike insjtèllinge van 'ne angere gebroeker bevat.",
        "customjsprotected": "De kèns dees javapagina neet bewirke ómdet die persuunlike insjtèllinge van 'ne angere gebroeker bevat.",
        "ns-specialprotected": "Pagina's in de naamruumde \"{{ns:special}}\" kinne neet bewirk waere.",
-       "titleprotected": "'t aanmake van deze pagina is beveilig door [[User:$1|$1]].\nDe gegaeve ree is ''$2''.",
+       "titleprotected": "'t aanmake van deze pagina is beveilig door [[User:$1|$1]].\nDe gegaeve ree is <em>$2</em>.",
        "filereadonlyerror": "'t Waar neet meugelik óm 't bestandj \"$1\" aan te passe went de bestandjsrepositoir \"$2\" steit noe op allein-laeze.\n\nd'n Opgegaeve raej vanne sloetendje admin waar \"''$3''\".",
        "invalidtitle-knownnamespace": "Óngèljige titel mit naamruumdje \"$2\" en teks \"$3\"",
        "invalidtitle-unknownnamespace": "Óngèljige titel mit ónbekèndj naamruumdenómmer $1 en teks \"$2\"",
        "passwordreset-emailtext-ip": "Emes, wersjienlik doe, vanaaf 't IP-adres $1, haet dien gebroekersgegaeves veur {{SITENAME}} ($4) ópgevraog.\nDe volgende {{PLURAL:$3|gebroeker is|gebroekers zint}} gekoppeld aan dit e-mailadres:\n\n$2\n\n{{PLURAL:$3|Dit tiedelik wachwaord vervilt|Dees tiedelike wachweurd vervallen}} euver {{PLURAL:$5|einen daag|$5 daag}}.\nMel dich aan en veranger 't wachwaord noe. Es se dit verzeuk neet zelf hes gedaon, of es se 't oorspronkelik wachwaord nog kins en 't neet anges wils, laot dit berich den en blief dien aad wachwaord gebroeke.",
        "passwordreset-emailtext-user": "Gebroeker $1 op de site {{SITENAME}} haet dien gebroekersgegaeves veur {{SITENAME}} ($4) ópgevraog.\nDe volgende {{PLURAL:$3|gebroeker is|gebroekers zint}} gekoppeld aan dit e-mailadres:\n\n$2\n\n{{PLURAL:$3|Dit tiedelik wachwaord vervilt|Dees tiedelike wachweurd vervallen}} euver {{PLURAL:$5|einen daag|$5 daag}}.\nMel dich aan en veranger 't wachwaord noe. Es se dit verzeuk neet zelf hes gedaon, of es se 't oorspronkelik wachwaord nog kins en 't neet anges wils, laot dit berich den en blief dien aad wachwaord gebroeke.",
        "passwordreset-emailelement": "Gebroekersnaam: \n$1\n\nTiedelik wachwaord: \n$2",
-       "passwordreset-emailsent": "d'r Is per mail 'n herinnering versjik.",
+       "passwordreset-emailsentemail": "d'r Is per mail 'n herinnering versjik.",
        "passwordreset-emailsent-capture": "d'r Is 'ne herinneringse-mail versjik. Deze weurt hieónger getuind.",
        "passwordreset-emailerror-capture": "d'r Is 'ne herinneringse-mail aangemaak. Deze weurt hieónger getuind. 't Verzènje nao de gebroeker is mislök óm de volgende raeje: $1",
        "changeemail": "Veranger dien e-mailadres",
        "prefs-displayrc": "Toeaningsinstèllinger",
        "prefs-displaywatchlist": "Toeaningsinstèllinger",
        "prefs-diffs": "Vers",
-       "email-address-validity-valid": "'t E-mailadres liek geldig",
-       "email-address-validity-invalid": "Gif 'n geldig e-mailadres op",
        "userrights": "Gebroekersrechtebeheer",
        "userrights-lookup-user": "Beheer gebroekersgróppe",
        "userrights-user-editname": "Veur 'ne gebroekersnaam in:",
        "right-blockemail": "'ne gebroeker 't rech ontnaeme om e-mail te versture",
        "right-hideuser": "'ne gebroeker veur de euverige gebroekers verberge",
        "right-ipblock-exempt": "IP-blokkades omzeile",
-       "right-proxyunbannable": "Blokkades veur proxy's gelde neet",
        "right-unblockself": "Óntblok eige gebroeker",
        "right-protect": "Beveiligingsniveaus wijzige",
        "right-editprotected": "Beveiligde pagina's bewerke",
        "watchthisupload": "Volg dit bestandj",
        "filewasdeleted": "d'r Is eerder 'n bestandj mit deze naam verwiederd. Raodpleeg 't $1 veurdetse 't opnuuj toevoegs.",
        "filename-bad-prefix": "De naam van 't bestand detse aan 't uploade bös begint met '''\"$1\"''', wat 'ne neet-besjrievende naam is dae meestal automatisch door 'ne digitale camera wörd gegaeve. Kees estebleef 'ne dudelike naam veur dien bestand.",
-       "upload-success-subj": "De upload is geluk",
-       "upload-success-msg": "Dienen upload van [$2] is geslaag en is besjikbaar: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Uploadperbleem",
-       "upload-failure-msg": "dr Waas e perbleem mit dienen upload veur [$2]:\n\n$1",
-       "upload-warning-subj": "Uploadwaorsjoewing",
-       "upload-warning-msg": "dr Waas e perbleem mit dienen upload van [$2].\nGank trök nao t [[Special:Upload/stash/$1|uploadformuleer]] om dit perbleem te verhelpe.",
        "upload-proto-error": "Verkeerd protocol",
        "upload-proto-error-text": "Uploads via deze methode vereise URL's die beginne met <code>http://</code> of <code>ftp://</code>.",
        "upload-file-error": "Interne fout",
        "pager-older-n": "{{PLURAL:$1|auwer 1|auwer $1}}",
        "suppress": "Toezich",
        "querypage-disabled": "Dees speciaal pagina steit oet veur performanceredene.",
+       "apisandbox": "API-zandjbak",
+       "apisandbox-api-disabled": "API is oetgesjakeld op deze site.",
+       "apisandbox-intro": "Gebroek dees pagina óm te experimentere mit de '''MediaWiki API'''.\nZuuch de [//www.mediawiki.org/wiki/API:Main_page API-dokkemèntatie] veur mier details euver 't gebroek van de API.",
+       "apisandbox-submit": "Verzeuk oetveure",
+       "apisandbox-results": "Rizzeltaat",
+       "apisandbox-request-url-label": "Verzeuk-URL:",
        "booksources": "Bookwinkele",
        "booksources-search-legend": "Zeuk informatie euver 'n book",
        "booksources-search": "Zeuk",
        "rollbackfailed": "Ongedaon make van wieziginge mislùk.",
        "cantrollback": "Trökdrejje van verangeringe neet meugelik: Dit artikel haet mer einen auteur.",
        "alreadyrolled": "'t Is neet mäögelik óm de lètste verangering van [[:$1]] door [[User:$2|$2]] ([[User talk:$2|euverlèk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) óngedaon te make.\nEmes angers haet de pagina al hersjtèld of haet 'n anger bewirking gedaon.\n\nDe lètste bewirking is gedaon door [[User:$3|$3]] ([[User talk:$3|euverlik]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "'t Bewirkingscommentair waor: \"''$1''\".",
+       "editcomment": "'t Bewirkingscommentair waor: <em>$1</em>.",
        "revertpage": "Wieziginge door [[Special:Contributions/$2|$2]] ([[User talk:$2|Euverlik]]) trukgedriejd tot de lètste versie door [[User:$1|$1]]",
        "revertpage-nouser": "Wieziginge door (gwösdje gebroeker) trögkgezadj nao bie [[User:$1|$1]]",
        "rollback-success": "Wieziginge door $1 trökgedrèjd; letste versie van $2 hersteld.",
        "movenosubpage": "Deze pagina haet gein subpagina's.",
        "movereason": "Reeje:",
        "revertmove": "trökdrieje",
-       "delete_and_move": "Wis en verplaats",
        "delete_and_move_text": "==Wisse vereis==\n\nDe doeltitel \"[[:$1]]\" besjteit al. Wils te dit artikel wisse óm ruumde te make veur de verplaatsing?",
        "delete_and_move_confirm": "Jao, wis de pazjena",
        "delete_and_move_reason": "Gewis óm artikel [[$1]] te kónne verplaatse",
index c029ed4..483b3a7 100644 (file)
@@ -10,7 +10,8 @@
                        "ZeneizeForesto",
                        "아라",
                        "V6rg",
-                       "C.R."
+                       "C.R.",
+                       "Macofe"
                ]
        },
        "tog-underline": "Sottolineâ i collegamenti",
        "myprivateinfoprotected": "No ti g'hæ o permisso pe modificâ i teu dæti personali.",
        "mypreferencesprotected": "No ti g'hæ o permisso pe modificâ e teu preferense.",
        "ns-specialprotected": "No se pœu modificâ e paggine speciali",
-       "titleprotected": "A creaçion de 'na paggina con sto tittolo a l'è stæta bloccâ da [[User:$1|$1]].\nA raxon a l'è: ''$2''.",
+       "titleprotected": "A creaçion de 'na paggina con sto tittolo a l'è stæta bloccâ da [[User:$1|$1]].\nA raxon a l'è: <em>$2</em>.",
        "filereadonlyerror": "N'ho posciuo modificâ o file \"$1\" perché o repository de file \"$2\" o l'è in modalitæ de sola lettua.\n\nL'amministratô ch'o l'ha bloccòu o l'ha fornio sta motivaçion: \"$3\".",
        "invalidtitle-knownnamespace": "Tittolo non vallido con namespace \"$2\" e testo \"$3\"",
        "invalidtitle-unknownnamespace": "Tittolo non vallido con namespace sconosciuo \"$1\" e testo \"$2\"",
        "undo-summary-username-hidden": "Anullou a modiffica $1 de un utente ascoso",
        "cantcreateaccounttitle": "Non se peu registrâ l'utente",
        "cantcreateaccount-text": "A registrassion da questo addresso IP (<b>$1</b>) a l'è stæta bloccâ da [[User:$3|$3]].\n\nA raxon dæta a l'è ''$2''",
-       "cantcreateaccount-range-text": "A registraçion da di addressi IP inte l'intervallo '''$1''', ch'o  l'includde o teu ('''$4'''), a l'è stæta bloccâ da [[User:$3|$3]].\n\nA raxon dæta da $3 a l'è ''$2''",
+       "cantcreateaccount-range-text": "A registraçion da di addressi IP inte l'intervallo <strong>$1</strong>, ch'o  l'includde o teu (<strong>$4</strong>), a l'è stæta bloccâ da [[User:$3|$3]].\n\nA raxon dæta da $3 a l'è <em>$2</em>",
        "viewpagelogs": "Veddi i log relativi a 'sta paggina.",
        "nohistory": "A stoia de verscioin de sta paggina a no gh'è.",
        "currentrev": "Verscion attuâle",
        "recentchanges-label-bot": "Sto cangiaménto o l'à fæto in bot",
        "recentchanges-label-unpatrolled": "Sto cangiaménto o no l'é stæto ancón verificòu",
        "recentchanges-label-plusminus": "Variassion da paggina in nummero de byte",
-       "recentchanges-legend-heading": "'''Legenda:'''",
+       "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (veddi e [[Special:NewPages|neuve paggine]])",
        "rcnotefrom": "Chì sotta gh'è i cangiamenti fæti comensando da '''$2''' (scin a '''$1''').",
        "rclistfrom": "Fanni vedde e modiffiche apportæ partindo da $3 $2",
        "unwatch": "Leva da sott'oservaçion",
        "watchlist-details": "A lista d'oservaçión speçiâle a contegne {{PLURAL:$1|ina pàgina (co-a seu pàgina de discusción)|$1 de pàgine (co-e so pàgine de discusción)}}.",
        "wlshowlast": "Famme vedde e ûrtime $1 ôe $2 giorni",
-       "watchlistall2": "Tùtti",
        "watchlist-options": "Inpostaçioìn di oservæ speciâli",
        "watching": "Inti osservæ speçiâli...",
        "unwatching": "Scassâ da-i osservæ speçiâli",
index 643c334..35c9724 100644 (file)
@@ -4,7 +4,8 @@
                        "Arash71",
                        "Hosseinblue",
                        "Lakzon",
-                       "Mjbmr"
+                       "Mjbmr",
+                       "Macofe"
                ]
        },
        "tog-underline": "کڕ(خط)کیشائن ژێر پیوندەل:",
        "specialpage": "وةڵگة/پةرة  ویژة",
        "personaltools": "ابزارەل ووژی(شخصی)",
        "articlepage": "نمایش مةقاڵة",
-       "talk": "قسۀل-گۀپۀل",
+       "talk": "گەپ قسە",
        "views": "دیین/سئرکردن",
        "toolbox": "ابزارەل",
        "userpage": "وةڵگة کاربۀر بؤین",
        "copyright": " محتوایۀل هانإ ژئرنظر اجازه‌نامهٔ $1 مۀگۀر یۀگإ خلاف یۀ بوشرئ/ذکر بو",
        "copyrightpage": "{{ns:project}}:حق تکثیر",
        "currentevents": "پێش هەتێەل ایسگە",
-       "currentevents-url": "Project:رویدادةل ایسة",
+       "currentevents-url": "پێش هەتێەل ایسگە(ایسە)",
        "disclaimers": "دروو نامه -تکذیب نامه",
        "disclaimerpage": "Project:تکذیب‌نامهٔ عمومی",
        "edithelp": "راهنمای دۀسکاری کردن",
        "myprivateinfoprotected": "شما دارای مجوز ویرایش اطلاعات شخصی خود نیستید.",
        "mypreferencesprotected": "شما دارای مجوز ویرایش تنظیمات خود نیستید.",
        "ns-specialprotected": ".وةڵگةل ویژه غیر قابل دةسکاریِن",
-       "titleprotected": "این عنوان توسط [[User:$1|$1]] در برابر ایجاد محافظت شده‌است.\nدلیل ارائه‌شده این است: «''$2''».",
+       "titleprotected": "این عنوان توسط [[User:$1|$1]] در برابر ایجاد محافظت شده‌است.\nدلیل ارائه‌شده این است: <em>$2</em>.",
        "filereadonlyerror": "تغییر پروندهٔ «$1» ممکن نیست چون مخزن پروندهٔ «$2» در حالت فقط خواندنی قرار دارد.\n\nمدیری که آن را قفل کرده چنین توضیحی را ذکر کرده:  «$3».",
        "invalidtitle-knownnamespace": "عنوان نامعتبر با فضای نام «$2» و متن «$3»",
        "invalidtitle-unknownnamespace": "عنوان نامعتبر با فضای نام ناشناختهٔ شمارهٔ $1 و متن «$2»",
        "undo-summary-username-hidden": "خنثی‌سازی نسخهٔ $1 به دست یک کاربر پنهان‌شده",
        "cantcreateaccounttitle": "نمی‌توان حساب باز کرد",
        "cantcreateaccount-text": "امكان ساختن حساب کاربری از این این نشانی آی‌پی ('''$1''') توسط [[User:$3|$3]] سلب شده است.\n\nدلیل ارائه شده توسط $3 چنین است: $2",
-       "cantcreateaccount-range-text": "ایجاد حساب از آدرس آی‌پی در مجموعه‌ی '''$1'''، که شامل آدرس آی‌پی شما ('''$4''') است، توسط [[User:$3|$3]] متوقف شده‌است.\nدلیل ارائه شده توسط $3، $2 است.",
+       "cantcreateaccount-range-text": "ایجاد حساب از آدرس آی‌پی در مجموعه‌ی <strong>$1</strong>، که شامل آدرس آی‌پی شما (<strong>$4</strong>) است، توسط [[User:$3|$3]] متوقف شده‌است.\nدلیل ارائه شده توسط $3، $2 است.",
        "viewpagelogs": "نمایش سیاهه‌های این صفحه",
        "nohistory": "این صفحه تاریخچهٔ ویرایش ندارد.",
        "currentrev": "نسخهٔ فعلی",
        "recentchanges-label-bot": "اێ دەسکاریە رباتێ انجۆم دائه",
        "recentchanges-label-unpatrolled": "این ویرایش هنوز گشت‌زنی نشده است",
        "recentchanges-label-plusminus": "حجم وۀلگۀ به اندازه این مقدار بایت تغییر یافته است",
-       "recentchanges-legend-heading": "'''اختصارۀل:'''",
+       "recentchanges-legend-heading": "<strong>اختصارۀل:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (همچنین به [[Special:NewPages|فهرست صفحات تازه]] نگاه کنید)",
        "recentchanges-submit": "نیشان دائن",
        "rcnotefrom": "در زیر تغییرات از <strong>$3, $4</strong> (تا <strong>$1</strong> {{PLURAL:$5|نشان داده شده‌است|نشان داده شده‌اند}}).",
        "upload-dialog-button-done": "انجؤم بی",
        "upload-dialog-button-save": "هیشتن(ذخیره)",
        "upload-dialog-button-upload": "بارگذاری بی",
-       "upload-form-label-select-file": "فایلئ انتخاب کۀ",
        "upload-form-label-infoform-title": "جزئیات",
        "upload-form-label-infoform-name": "نۆم",
        "upload-form-label-infoform-description": "توضیحةل",
        "foreign-structured-upload-form-label-own-work-message-shared": "تصدیق می‌کنم که مالک حق تکثیر این پرونده هستم و موافق اشتراک‌گذاری آن تحت مجوز [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Attribution-ShareAlike 4.0] هستم و موافق [https://wikimediafoundation.org/wiki/Terms_of_Use سیاست نحوهٔ استفاده] هستم.",
        "foreign-structured-upload-form-label-not-own-work-message-shared": "اگر مالک حق تکثیر این پرونده نیستید یا قصد بارگذاری تحت مجوز دیگری دارید، از [https://commons.wikimedia.org/wiki/Special:UploadWizard جادوگر بارگذاری ویکی‌انبار] استفاده کنید.",
        "foreign-structured-upload-form-label-not-own-work-local-shared": "در صورتی که سایت امکان بارگذاری پرونده را تحت سیاست‌ها بارگذاری می‌دهد ممکن است بخواهید از [[Special:Upload|پنجرهٔ بارگذاری در {{SITENAME}}]] استفاده کنید.",
-       "foreign-structured-upload-form-2-label-intro": "از این که تصویری را واگذار می‌کنید تا در {{SITENAME}} استفاده شود متشکریم. شما باید این کار را تنها در صورتی انجام دهید که چندین شرط برقرار باشد:",
-       "foreign-structured-upload-form-2-label-ownwork": "باید تماماً <strong>کار خود شما </strong> باشد، نه این که از اینترنت برداشته باشید",
-       "foreign-structured-upload-form-2-label-noderiv": "باید حاوی چیزی که <strong>دیگران خلق کرده باشند نباشد<strong>، و یا متاثر از اثر کسی دیگر نباشد",
-       "foreign-structured-upload-form-2-label-useful": "این باید <strong>مفید و دانشورانه</strong> برای تدریس به دیگران باشد.",
-       "foreign-structured-upload-form-2-label-ccbysa": "باید <strong>بشود برای همیشه</strong> آن را در اینترنت با مجوز [https://creativecommons.org/licenses/by-sa/4.0/ عامه خلاق با ذکر صاحب اثر و نشر بدون تغییر نسخه ۴٫۰] منتشر کرد",
-       "foreign-structured-upload-form-2-label-alternative": "اگر تمام شرایط بالا برقرار نیست، شما ممکن است کماکان بتوانید آن را از طریق [https://commons.wikimedia.org/wiki/Special:UploadWizard جادوگر بارگذاری ویکی‌انبار] بارگذاری کنید، به شرط آن که تحت یک مجوز آزاد باشد.",
-       "foreign-structured-upload-form-2-label-termsofuse": "با بارگذاری پرونده، شما تایید می‌کنید که صاحب حق تکثیر این پرونده هستید، و قبول می‌کنید که حقوق آن را طبق مجوز عامه خلاق با ذکر صاحب اثر و نشر بدون تغییر نسخه  ۴٫۰ و به صورت غیر قابل برگشت به ویکی‌انبار ببخشید، و نیز [https://wikimediafoundation.org/wiki/Terms_of_Use قوانین استفاده] ویکی‌مدیا را می‌پذیرید.",
-       "foreign-structured-upload-form-3-label-question-website": "آیا شما این تصویر را از یک وب‌سایت دانلود کرده‌اید یا از یک سرویس جستجوی تصویر استفاده کردید؟",
-       "foreign-structured-upload-form-3-label-question-ownwork": "آیا این تصویر را خودتان تولید کردید؟ (عکس گرفتن، طراحی با دست و غیره)",
-       "foreign-structured-upload-form-3-label-question-noderiv": "آیا این اثر متعلق یا مشتق شده از اثر فرد دیگری است مانند نشان؟",
-       "foreign-structured-upload-form-3-label-yes": "أرێ-بةلئ",
-       "foreign-structured-upload-form-3-label-no": "نة-نةخئر",
-       "foreign-structured-upload-form-3-label-alternative": "متاسفانه در این شرایط این ابزار از بارگذاری این پرونده پشتیبانی نمی‌کند.  شما ممکن است کماکان بتوانید آن را از طریق [https://commons.wikimedia.org/wiki/Special:UploadWizard جادوگر بارگذاری ویکی‌انبار] بارگذاری کنید، به شرط آن که تحت یک مجوز آزاد باشد.",
-       "foreign-structured-upload-form-4-label-good": "با استفاده از این ابزار شما می‌توانید تصاویر آموزشی که خود ساخته‌اید یا خودتان عکاسی کرده‌اید را بارگذاری کنید، مادامی که حاوی اثری که دیگری تولید کرده نباشند.",
-       "foreign-structured-upload-form-4-label-bad": "شما نمی‌توانید تصویر بدست آمده از جستجو در موتورهای جستجو یا متعلق به سایر وب‌گاه‌ها را بارگذاری کنید.",
        "backend-fail-stream": "نمی‌توان پروندهٔ $1 را ارسال کرد.",
        "backend-fail-backup": "نمی‌توان نسخهٔ پشتیبان برای پروندهٔ $1 ایجاد کرد",
        "backend-fail-notexists": "پروندهٔ $1 وجود ندارد.",
index 3c51189..554ddad 100644 (file)
        "passwordreset-email": "Indirìs e-mail:",
        "passwordreset-emailtitle": "Detài de l'ütènsa sö {{SITENAME}}",
        "passwordreset-emailelement": "Nòm ütènt: \n$1\n\nPassword temporànea: \n$2",
-       "passwordreset-emailsent": "Gh'è stat mandàt vià 'na e-mail de redefinisiù de la password.",
+       "passwordreset-emailsentemail": "Gh'è stat mandàt vià 'na e-mail de redefinisiù de la password.",
        "passwordreset-emailsent-capture": "Gh'è stat mandàt vià chèsta e-mail de redefinisiù de la password:",
        "changeemail": "Càmbia l'indirìs e-mail",
        "changeemail-header": "Càmbia l'indirìs e-mail de l'ütènsa",
        "undo-summary": "Scancelada la mudifega $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|Ciciarada]])",
        "cantcreateaccounttitle": "Impusìbol creà 'n ütènt",
        "cantcreateaccount-text": "La creasiù de ütènse de part de chèsto indirìs IP (<strong>$1</strong>) l'è stàda blocàda de l'ütènt [[User:$3|$3]]. El mutìf specificàt de $3 l'è <em>$2</em>",
-       "cantcreateaccount-range-text": "La creasiù de ütènse de part de indirìs IP endèl interval '''$1''', del qual el fà part apò a 'l tò ('''$4'''), l'è stàda blocàda de [[User:$3|$3]].\n\nEl mutìf specificàt de $3 l'è ''$2''.",
+       "cantcreateaccount-range-text": "La creasiù de ütènse de part de indirìs IP endèl interval <strong>$1</strong>, del qual el fà part apò a 'l tò (<strong>$4</strong>), l'è stàda blocàda de [[User:$3|$3]].\n\nEl mutìf specificàt de $3 l'è <em>$2</em>.",
        "viewpagelogs": "Varda i register de quela pagina chì",
        "nohistory": "El sistéma el rìa mìa a catà la crunulugìa de le versiù de chèsta pàgina.",
        "currentrev": "Versiù de adès",
        "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Diferènse",
        "prefs-help-prefershttps": "Chèsta preferènsa la g'harà efèt la pròsima ólta che te se autèntichet.",
-       "email-address-validity-valid": "L'indirìs e-mail el par bù",
-       "email-address-validity-invalid": "Mèt dét en indirìs e-mail che funsiùna",
        "userrights": "Gestión di dirit di druvadur",
        "userrights-lookup-user": "Gestion di grüp di druvaduu",
        "userrights-user-editname": "Butée dent un nom da dovrat",
        "unwatchthispage": "Desmèt de tègner d'öcc",
        "watchlist-details": "{{PLURAL:$1|$1 pagina|$1 paginn}} tegnüü sot ögg, fö che i paginn de discüssión.",
        "wlshowlast": "Fa vidé i ültim $1 ur $2 dì",
-       "watchlistall2": "tücc",
        "watchlist-options": "Upzión lista d'ussevazión",
        "watching": "Giuntà ai pagin da ten d'ögg...",
        "unwatching": "Eliminà dai pagin da ten d'ögg...",
index 93f2e58..1582bb3 100644 (file)
        "myprivateinfoprotected": "شوما صئلا ڤیرایئشت کاری دونئسمأنیا شأصقی خوتوٙنە ناریت.",
        "mypreferencesprotected": "شوما صئلا ڤیرایئشت کاری ڤیجە یی یا هأنی خوتوٙنە ناریت.",
        "ns-specialprotected": "نبوٙە بألگە یا ڤئجە نع ڤیرایئشت کئرد.",
-       "titleprotected": "ئی داسوٙن د رأڤأندیاری ڤئ دأس [[کاریار:$1|$1]] نئهاگئری بییە.\nدألیلئش ڤئ نە\"<em>$2</em>\".",
+       "titleprotected": "ئی داسوٙن د رأڤأندیاری ڤئ دأس [[User:$1|$1]] نئهاگئری بییە.\nدألیلئش ڤئ نە<em>$2</em>.",
        "filereadonlyerror": "نأبوٙە جانیا \"$1\" نە آلئشت کاری بأکیت سی یە کئ ئمایە جا \"$2\" ئیسئ ها د حال و بال حأنئن.\n\nدیڤوٙنداری کئ ڤئ نە قولف کئردە ها د حال و بال گوتە دیاری \"$3\" .",
        "invalidtitle-knownnamespace": "داسوٙن نادیار سی نوم جا \"$2\" و نیسئسە \"$3\"",
        "invalidtitle-unknownnamespace": "داسوٙن نادیار سی شومارە نادیار نوم جا \"$2\" و نیسئسە \"$3\"",
        "undo-summary-username-hidden": "خومثی بیئن وانئری $1 وا یه گل کاریار قام بیه",
        "cantcreateaccounttitle": "نأبوٙە حئساڤ راس بأکیت",
        "cantcreateaccount-text": "حساو دروس بیه و ا ای تیرنشون آی پی(<strong>$1</strong>) وه دس ای [[کاریار:$3|$3]] قلف بیه.\n\n\nدلیل دئه بیه وا $3 ها د<em>$2</em>",
-       "cantcreateaccount-range-text": "حساو دروس بیه وا تیرنشون آی پی که د پوشینه '''$1''' ، که وه ئم مینونه دار تیرنشون آی پی شما ئم هئ('''$4''')، وه دس [[کاریار:$3|$3]]قلف بیه.\n\nدلیل دئه بیه وا $3، \"$2\" ئه.",
+       "cantcreateaccount-range-text": "حساو دروس بیه وا تیرنشون آی پی که د پوشینه <strong>$1</strong> ، که وه ئم مینونه دار تیرنشون آی پی شما ئم هئ(<strong>$4</strong>)، وه دس [[کاریار:$3|$3]]قلف بیه.\n\nدلیل دئه بیه وا $3، \"$2\" ئه.",
        "viewpagelogs": "سئیل پئرئستنوٙمە یا ئی بألگە بأکیت",
        "nohistory": "هیچ ویرگار ویرایشتی د ای بلگه نئ.",
        "currentrev": "آخرین دوواره دیئن",
        "recentchanges-label-bot": "ای ويرايشت نه يه بوت انجوم دئه",
        "recentchanges-label-unpatrolled": "ای ويرايشت هنی تيه واداشت نبيه",
        "recentchanges-label-plusminus": "انازه بلگه وه شمار ای بایتیا آلشت کرده.",
-       "recentchanges-legend-heading": "'''میراث:'''",
+       "recentchanges-legend-heading": "<strong>میراث:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (همچنو بوینیت [[ویجه:بلگیا تازه|نوم گه بلگیا تازه]])",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "rcnotefrom": "د هار آلشتیا د $2 هیئن(د بال د $1 نشون دئه بیه)",
index 64339a4..a366600 100644 (file)
        "myprivateinfoprotected": "Jūs neturite teisių redaguoti savo asmeninę informaciją.",
        "mypreferencesprotected": "Jūs neturite teisių redaguoti jūsų parinktys.",
        "ns-specialprotected": "Specialieji puslapiai negali būti redaguojami.",
-       "titleprotected": "[[User:$1|$1]] apsaugojo šį pavadinimą nuo sukūrimo.\nNurodyta priežastis yra ''$2''.",
+       "titleprotected": "[[User:$1|$1]] apsaugojo šį pavadinimą nuo sukūrimo.\nNurodyta priežastis yra <em>$2</em>.",
        "filereadonlyerror": "Neįmanoma pakeisti failo \"$1\" nes failų saugykla \"$2\" yra nustatyta tik skaitymo režimu.\n\nJą užrakinęs sistemos administratorius pateikė šį paaiškinimą: \"$3\".",
        "invalidtitle-knownnamespace": "Klaidingas pavadinimas vardų erdvėje \"$2\" ir tekstu \"$3\"",
        "invalidtitle-unknownnamespace": "Klaidingas pavadinimas nežinomoje vardų erdvėje numeriu $1 ir tekstu \"$2\"",
        "blocked-mailpassword": "Jūsų IP adresas yra užblokuotas nuo redagavimo, taigi neleidžiama naudoti slaptažodžio priminimo funkcijos, kad apsisaugotume nuo piktnaudžiavimo.",
        "eauthentsent": "Patvirtinimo laiškas buvo nusiųstas į paskirtąjį el. pašto adresą.\nPrieš išsiunčiant kitą laišką į jūsų dėžutę, jūs turite vykdyti nurodymus laiške, kad patvirtintumėte, kad dėžutė tikrai yra jūsų.",
        "throttled-mailpassword": "Slaptažodžio priminimas jau buvo išsiųstas, per {{PLURAL:$1|$1 paskutinę valandą|$1 paskutines valandas|$1 paskutinių valandų}}.\n\nNorint apsisaugoti nuo piktnaudžiavimo, slaptažodžio priminimas gali būti išsiųstas tik kas {{PLURAL:$1|$1 valandą|$1 valandas|$1 valandų}}.",
-       "mailerror": "Klaida siunčiant paštą: $1",
+       "mailerror": "Klaida siunčiant laišką: $1",
        "acct_creation_throttle_hit": "Šio projekto lankytojai, naudojantys jūsų IP adresą, sukūrė {{PLURAL:$1|$1 paskyrą|$1 paskyras|$1 paskyrų}} per paskutiniąją dieną, o tai yra didžiausias leidžiamas kiekis per šį laiko tarpą.\nTodėl šiuo metu lankytojai, naudojantys šį IP adresą, daugiau negali kurti paskyrų.",
        "emailauthenticated": "Jūsų el. pašto adresas buvo patvirtintas $2 d. $3.",
        "emailnotauthenticated": "Jūsų el. pašto adresas dar nėra patvirtintas. Jokie laiškai\nnebus siunčiami nei vienai žemiau išvardintai paslaugai.",
        "botpasswords-insert-failed": "Nepavyko pridėti boto vardo \"$1\". Gal jis jau pridėtas?",
        "botpasswords-update-failed": "Nepavyko atnaujinti boto vardo \"$1\". Gal jis buvo ištrintas?",
        "botpasswords-created-title": "Boto slaptažodis sukurtas",
-       "botpasswords-created-body": "Boto slaptažodis \"$1\" buvo sukurtas sėkmingai.",
+       "botpasswords-created-body": "Naudotojo $2 boto „$1“ slaptažodis buvo sukurtas.",
        "botpasswords-updated-title": "Boto slaptažodis atnaujintas",
-       "botpasswords-updated-body": "Boto slaptažodis \"$1\" buvo atnaujintas sėkmingai.",
+       "botpasswords-updated-body": "Naudotojo $2 boto „$1“ slaptažodis buvo atnaujintas.",
        "botpasswords-deleted-title": "Boto slaptažodis ištrintas",
-       "botpasswords-deleted-body": "Boto slaptažodis \"$1\" buvo ištrintas.",
+       "botpasswords-deleted-body": "Naudotojo $2 boto „$1“ slaptažodis buvo ištrintas.",
        "botpasswords-newpassword": "Naujas slaptažodis prisijungimui su <strong>$1</strong> yra <strong>$2</strong>. <em>Prašome įsiminti jį naudojimui ateityje.</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider nėra prieinamas.",
        "botpasswords-restriction-failed": "Boto slaptažodžio apribojimai draudžia šį prisijungimą.",
        "newarticle": "(Naujas)",
        "newarticletext": "Jūs patekote į dar neegzistuojantį puslapį.\nNorėdami sukurti puslapį, pradėkite rašyti žemiau esančiame įvedimo lauke\n(plačiau [$1 pagalbos puslapyje]).\nJei patekote čia per klaidą, paprasčiausiai spustelkite  naršyklės mygtuką '''atgal'''.",
        "anontalkpagetext": "----''Tai yra anoniminio naudotojo, nesusikūrusio arba nenaudojančio paskyros, aptarimų puslapis.\nDėl to naudojamas IP adresas jo identifikavimui.\nŠis IP adresas gali būti dalinamas keliems naudotojams.\nJeigu Jūs esate anoniminis naudotojas ir atrodo, kad komentarai nėra skirti Jums, [[Special:UserLogin/signup|sukurkite paskyrą]] arba [[Special:UserLogin|prisijunkite]], ir nebūsite tapatinamas su kitais anoniminiais naudotojais.''",
-       "noarticletext": "Šiuo metu šiame puslapyje nėra jokio teksto.\nJūs galite [[Special:Search/{{PAGENAME}}|ieškoti šio puslapio pavadinimo]] kituose puslapiuose,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ieškoti susijusių įrašų],\narba [{{fullurl:{{FULLPAGENAME}}|action=edit}} redaguoti šį puslapį]</span>.",
+       "noarticletext": "Šiuo metu šiame puslapyje nėra jokio teksto.\nJūs galite [[Special:Search/{{PAGENAME}}|ieškoti šio puslapio pavadinimo]] kituose puslapiuose,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ieškoti susijusių įrašų] arba [{{fullurl:{{FULLPAGENAME}}|action=edit}} sukurti šį puslapį]</span>.",
        "noarticletext-nopermission": "Šiuo metu šiame puslapyje nėra jokio teksto.\nJūs galite [[Special:Search/{{PAGENAME}}|ieškoti šio puslapio pavadinimo]] kituose puslapiuose,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ieškoti susijusių įrašų]</span>, bet jūs neturite teisės sukurti šį puslapį.",
        "missing-revision": "Puslapio peržiūra #$1 pavadinto „{{FULLPAGENAME}}“ neegzistuoja.\n\nTai paprastai atsitinka kai pasenusi nuoroda veda į puslapį, kuris buvo ištrintas.\nInformaciją galima rasti [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
        "userpage-userdoesnotexist": "Naudotojo paskyra „<nowiki>$1</nowiki>“ yra neužregistruota. Prašom patikrinti, ar jūs norite kurti/redaguoti šį puslapį.",
        "editwarning-warning": "Palikdamas šį puslapį jūs galite prarasti visus padarytus pakeitimus.\nJei esate prisijungęs, galite išjungti šį perspėjimą jūsų nustatymų skyrelyje \"{{int:prefs-editing}}\".",
        "editpage-notsupportedcontentformat-title": "Turinio formatas nepalaikomas",
        "editpage-notsupportedcontentformat-text": "Turinio formatas $1 nepalaiko turinio modelio $2.",
-       "content-model-wikitext": "wikitekstas",
+       "content-model-wikitext": "vikitekstas",
        "content-model-text": "paprastasis tekstas",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
        "undo-summary-username-hidden": "Atmesti versiją $1, atliktą paslėpto naudotojo",
        "cantcreateaccounttitle": "Paskyrų kūrimas negalimas",
        "cantcreateaccount-text": "Paskyrų kūrimą iš šio IP adreso ('''$1''') užblokavo [[User:$3|$3]].\n\n$3 nurodyta priežastis yra ''$2''",
-       "cantcreateaccount-range-text": "Naudotojas [[User:$3|$3]] nustatė draudimą kurti paskyras iš IP adresų plotmės '''$1''', į kurią patenka ir jūsiškis IP adresas ('''$4''').",
+       "cantcreateaccount-range-text": "Naudotojas [[User:$3|$3]] nustatė draudimą kurti paskyras iš IP adresų plotmės <strong>$1</strong>, į kurią patenka ir jūsiškis IP adresas (<strong>$4</strong>).",
        "viewpagelogs": "Rodyti šio puslapio specialiuosius veiksmus",
        "nohistory": "Šis puslapis neturi keitimų istorijos.",
        "currentrev": "Dabartinė versija",
        "mergehistory-empty": "Versijos negali būti sujungtos",
        "mergehistory-done": "$3 $1 {{PLURAL:$3|versija|versijos|versijų}} sėkmingai {{PLURAL:$3|sujungta|sujungtos|sujungta}} su [[:$2]].",
        "mergehistory-fail": "Nepavyksta atlikti istorijų sujungimo, prašome patikrinti puslapio ir laiko parametrus.",
+       "mergehistory-fail-invalid-dest": "Paskirties puslapis yra neteisingas.",
        "mergehistory-fail-toobig": "Nepavyksta sulieti istorijos, nes būtina pernešti daugiau, nei leidžia $1 riba, {{PLURAL:$1|versijos|versijų}}.",
        "mergehistory-no-source": "Šaltinio puslapis $1 neegzistuoja.",
        "mergehistory-no-destination": "Rezultato puslapis $1 neegzistuoja.",
        "prefs-reset-intro": "Jūs galite pasinaudoti šiuo puslapiu, kad grąžintumėte savo nustatymus į svetainės numatytuosius.\nTai nebeatšaukiama.",
        "prefs-emailconfirm-label": "El. pašto patvirtinimas:",
        "youremail": "El. paštas:",
-       "username": "{{GENDER:$1Naudotojo vardas}}:",
+       "username": "{{GENDER:$1|Naudotojo vardas}}:",
        "prefs-memberingroups": "{{PLURAL:$1|Grupės|Grupių}} {{GENDER:$2|narys|narė}}:",
        "prefs-registration": "Registravimosi laikas:",
        "yourrealname": "Tikrasis vardas:",
        "group-all": "(visi)",
        "group-user-member": "{{GENDER:$1|naudotojas|naudotoja}}",
        "group-autoconfirmed-member": "{{GENDER:$1|automatiškai patvirtintas naudotojas|automatiškai patvirtinta naudotoja}}",
-       "group-bot-member": "Botas",
+       "group-bot-member": "Robotas",
        "group-sysop-member": "Administratorius",
        "group-bureaucrat-member": "Biurokratas",
        "group-suppress-member": "{{GENDER:$1|slopintojas|slopintoja}}",
        "recentchanges-label-bot": "Šį keitimą atliko automatinė programa",
        "recentchanges-label-unpatrolled": "Šis keitimas dar nebuvo patikrintas",
        "recentchanges-label-plusminus": "Šiuo baitų skaičiumi pakeista puslapio apimtis",
-       "recentchanges-legend-heading": "'''Paaiškinimai:'''",
+       "recentchanges-legend-heading": "<strong>Paaiškinimai:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (taip pat žiūrėkite [[Special:NewPages|naujausių straipsnių sąrašą]])",
        "recentchanges-submit": "Rodyti",
        "rcnotefrom": "Žemiau yra {{PLURAL:$5|pakeitimas|pakeitimai}} pradedant <strong>$3, $4</strong> (rodoma iki <strong>$1</strong> pakeitimų).",
        "rcshowhidemine": "$1 mano keitimus",
        "rcshowhidemine-show": "Rodyti",
        "rcshowhidemine-hide": "Slėpti",
-       "rcshowhidecategorization": "$1 puslapio kategorizavimas",
+       "rcshowhidecategorization": "$1 puslapių kategorizavimus",
        "rcshowhidecategorization-show": "Rodyti",
        "rcshowhidecategorization-hide": "Slėpti",
        "rclinks": "Rodyti paskutinius $1 pakeitimų per paskutiniąsias $2 dienų<br />$3",
        "upload-dialog-button-done": "Atlikta",
        "upload-dialog-button-save": "Išsaugoti",
        "upload-dialog-button-upload": "Įkelti",
-       "upload-form-label-select-file": "Pasirinkti failą",
        "upload-form-label-infoform-title": "Detalės",
        "upload-form-label-infoform-name": "Pavadinimas",
        "upload-form-label-infoform-name-tooltip": "Unikalus aprašantis pavadinimas failo, kuris bus tarnaus kaip failo pavadinimas. Galite naudoti įprastą kalbą su tarpais. Nereikia pridėti failo plėtinio.",
        "foreign-structured-upload-form-label-own-work-message-shared": "Aš patvirtinu, kad man priklauso šio failo autorinės teisės ir sutinku neatšaukiamai išleisti šį failą į Wikimedia Commons su [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Attribution-ShareAlike 4.0] licencija, ir aš sutinku su [https://wikimediafoundation.org/wiki/Terms_of_Use paslaugų teikimo sąlygomis].",
        "foreign-structured-upload-form-label-not-own-work-message-shared": "Jeigu Jums nepriklauso šio failo autorinės teisės arba Jūs norite išleisti jį su kitokia licencija, apsvarstykite naudojimą [https://commons.wikimedia.org/wiki/Special:UploadWizard Commons įkėlimo vedlį].",
        "foreign-structured-upload-form-label-not-own-work-local-shared": "Jūs taip pat galite norėti išbandyti [[Special:Upload|{{SITENAME}} įkėlimo puslapį]], jeigu šis puslapis leidžia failų įkėlimą pagal jų politiką.",
-       "foreign-structured-upload-form-2-label-intro": "Ačiū jums, kad dovanojate šį paveikslėlį naudojimuisi {{SITENAME}}. Tęskite tik jeigu jis atitinka kelias sąlygas:",
-       "foreign-structured-upload-form-2-label-ownwork": "Tai turi būti visiškai <strong>jūsų paties kūryba</strong>, o ne tiesiog paimta iš interneto",
-       "foreign-structured-upload-form-2-label-noderiv": "Jame <strong>neturi būti kieno nors kito darbo</strong>, arba įkvėpto kitų",
-       "foreign-structured-upload-form-2-label-useful": "Tai turėtų būti <strong>edukaciška ir naudinga</strong> mokyti kitus",
-       "foreign-structured-upload-form-2-label-ccbysa": "Jis turi būti <strong>tinkamas publikuoti visam laikui</strong> internete su [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Attribution-ShareAlike 4.0] licencija",
-       "foreign-structured-upload-form-2-label-alternative": "Jeigu ne viskas viršuje yra tiesa, jūs dar galite pabandyti įkelti šį failą naudodamiesi [https://commons.wikimedia.org/wiki/Special:UploadWizard Bendrybių įkėlimo vedliu], kol jis prieinamas pagal laisvąją licenciją.",
-       "foreign-structured-upload-form-2-label-termsofuse": "Įkeldami failą, jūs patvirtinate, kad jums priklauso autorinės šio failo teisės ir sutinkate besąlygiškai išleisti šį failą į Wikimedia Commons pagal Creative Commons Attribution-ShareAlike 4.0 licenciją, ir jūs sutinkate su [https://wikimediafoundation.org/wiki/Terms_of_Use Naudojimosi sąlygomis].",
-       "foreign-structured-upload-form-3-label-question-website": "Ar atsisiuntėte šį paveikslėlį iš tinklapio, ar gavote jį iš paveikslėlių paieškos?",
-       "foreign-structured-upload-form-3-label-question-ownwork": "Ar jūs sukūrėte šį paveikslėlį (nufotografavote, nupiešėte, kt.) pats?",
-       "foreign-structured-upload-form-3-label-question-noderiv": "Ar jame yra, arba jis įkvėptas, kitiems priklausančio darbo, kaip pavyzdžiui logotipas?",
-       "foreign-structured-upload-form-3-label-yes": "Taip",
-       "foreign-structured-upload-form-3-label-no": "Ne",
-       "foreign-structured-upload-form-3-label-alternative": "Deja, šiuo atveju, šis įrankis nepalaiko šio failo įkėlimo. Jūs dar galite pabandyti įkelti jį pasinaudodami [https://commons.wikimedia.org/wiki/Special:UploadWizard Bendrybių įkėlimo vedliu], tol, kol jis yra prieinamas pagal laisvąją licenciją.",
-       "foreign-structured-upload-form-4-label-good": "Naudodami šį įrankį, galite įkelti edukacinius grafikus, kuriuos jūs sukūrėte ar fotografijas, kurias padarėte ir kuriose nėra darbo, kuris priklauso kam nors kitam.",
-       "foreign-structured-upload-form-4-label-bad": "Jūs negalite įkelti paveikslėlių rastų paieškos variklyje ar atsisiųstų iš kitų tinklapių.",
        "backend-fail-stream": "Negali būti apdorotas failas $1.",
        "backend-fail-backup": "Negali būti išsaugotas failas $1.",
        "backend-fail-notexists": "Failas $1 neegzistuoja.",
        "suppress": "Slopinti",
        "querypage-disabled": "Šiame specialiajame puslapyje yra išjungta dėl neefektyvumo.",
        "apihelp": "API pagalba",
-       "apihelp-no-such-module": "Nerasta modulio $1.",
+       "apihelp-no-such-module": "Modulis „$1“ nerastas.",
        "apisandbox": "API smėlio dėžės",
        "apisandbox-api-disabled": "API yra išjungtas šioje svetainėje.",
        "apisandbox-intro": "Naudokite šį puslapį norėdami eksperimentuoti su '''MediaWiki API \"„.\n\tIeškokite [//www.mediawiki.org/wiki/API:Main_page API dokumentacijoje] Išsamesnės informacijos apie API naudojimo.",
+       "apisandbox-fullscreen": "Išplėsti skydelį",
+       "apisandbox-unfullscreen": "Rodyti puslapį",
        "apisandbox-submit": "Pateikti prašymą",
        "apisandbox-reset": "Išvalyti",
-       "apisandbox-examples": "Pavyzdys",
+       "apisandbox-retry": "Bandykite dar kartą",
+       "apisandbox-no-parameters": "Šis API modulis neturi parametrų.",
+       "apisandbox-helpurls": "Pagalbinės nuorodos",
+       "apisandbox-examples": "Pavyzdžiai",
+       "apisandbox-dynamic-parameters": "Papildomi parametrai",
+       "apisandbox-dynamic-parameters-add-label": "Pridėti parametrą:",
+       "apisandbox-dynamic-parameters-add-placeholder": "Parametro pavadinimas",
+       "apisandbox-dynamic-error-exists": "Parametras, pavadinimu „$1“ jau yra.",
+       "apisandbox-deprecated-parameters": "Nebenaudojami parametrai",
+       "apisandbox-submit-invalid-fields-title": "Kai kurie laukai yra neteisingi",
        "apisandbox-results": "Rezultatai",
        "apisandbox-request-url-label": "Prašyti URL:",
        "apisandbox-request-time": "Užklausos laikas: $1",
+       "apisandbox-alert-field": "Šio lauko reikšmė yra neteisinga.",
        "booksources": "Knygų šaltiniai",
        "booksources-search-legend": "Knygų šaltinių paieška",
        "booksources-search": "Ieškoti",
        "rollbackfailed": "Atmetimas nepavyko",
        "cantrollback": "Negalima atmesti redagavimo; paskutinis keitęs naudotojas yra šio puslapio autorius.",
        "alreadyrolled": "Nepavyko atmesti paskutinio [[User:$2|$2]] ([[User talk:$2|Aptarimas]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) daryto puslapio [[:$1]] keitimo;\nkažkas jau pakeitė puslapį arba suspėjo pirmas atmesti keitimą.\n\nPaskutimas keitimas darytas naudotojo [[User:$3|$3]] ([[User talk:$3|Aptarimas]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Pateiktas toks keitimo paaiškinimas: „''$1''“.",
+       "editcomment": "Pateiktas toks keitimo paaiškinimas: <em>$1</em>.",
        "revertpage": "Atmestas [[Special:Contributions/$2|$2]] ([[User talk:$2|Aptarimas]]) pakeitimas; sugrąžinta [[User:$1|$1]] versija",
        "revertpage-nouser": "Atversti pakeitimai paslėpto vartotojo, grąžino prieš tai buvusią versiją {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Atmesti $1 pakeitimai;\ngrąžinta prieš tai buvusi $2 versija.",
        "changecontentmodel-title-label": "Puslapio pavadinimas",
        "changecontentmodel-model-label": "Naujas turinio modelis",
        "changecontentmodel-reason-label": "Priežastis:",
+       "changecontentmodel-submit": "Keisti",
        "changecontentmodel-success-title": "Turinio modelis buvo atnaujintas",
        "changecontentmodel-success-text": "Turinys, kurio tipas [[:$1]], buvo atnaujintas.",
        "changecontentmodel-cannot-convert": "Turinys [[:$1]] negali būti konvertuotas į $2 tipą.",
        "tags-edit-revision-legend": "Pridėti arba pašalinti žymas iš {{PLURAL:$1|šios versijos|visų $1 versijų}}",
        "tags-edit-logentry-legend": "Pridėti arba pašalinti žymas iš {{PLURAL:$1|šio žurnalo įrašo|visų $1 žurnalo įrašų}}",
        "tags-edit-existing-tags": "Egzistuojančios žymos:",
-       "tags-edit-existing-tags-none": "\"Nėra\"",
+       "tags-edit-existing-tags-none": "<em>Nėra</em>",
        "tags-edit-new-tags": "Naujos žymos:",
        "tags-edit-add": "Pridėti šias žymas:",
        "tags-edit-remove": "Pašalinti šias žymas:",
        "expand_templates_preview_fail_html": "<em>Nes {{SITENAME}} turi įgalinta gryną HTML ir įvyko sesijos duomenų praradimas, peržiūra yra paslėpta kaip atsargos priemonė prieš JavaScript atakas.</em>\n\n<strong>Jei tai teisėtas peržiūros bandymas, prašome bandyti dar kartą.</strong>\nJei tai vistiek neveikia, pabandykite [[Special:UserLogout|atsijungti]] ir vėl prisijungti.",
        "expand_templates_preview_fail_html_anon": "<em>Nes {{SITENAME}} turi įgalinta gryną HTML ir jūs esate neprisijungęs, peržiūra paslėpta kaip atsargumo priemonė prieš JavaScript atakas.</em>\n\n<strong>Jei tai teisėtas peržiūros bandymas prašome [[Special:UserLogin|prisijungti]] ir bandyti vėl.</strong>",
        "expand_templates_input_missing": "Turite pateikti bent truputį įvesties teksto.",
-       "pagelanguage": "Puslapio kalbos pasirinkimas",
+       "pagelanguage": "Keisti puslapio kalbą",
        "pagelang-name": "Puslapis",
        "pagelang-language": "Kalba",
        "pagelang-use-default": "Naudoti numatytąją kalbą",
        "default-skin-not-found": "Ups! Jūsų viki numatytoji išvaizda, nustatyta <code dir=\"ltr\">$wgDefaultSkin</code> kaip <code>$1</code>, yra negalima.\n\nPanašu, kad Jūsų instaliacija turi {{PLURAL:$4|šią išvaizdą|šias išvaizdas}}. Žiūrėkite [https://www.mediawiki.org/wiki/Manual:Skin_configuration Instrukcija: Išvaizdos konfigūracija] dėl informacijos kaip įgalinti {{PLURAL:$4|ją|jas ir pasirinkti numatytąją}}.\n\n$2\n\n; Jei ką tik įsidiegėte MediaWiki:\n: Jūs tikriausiai įsidiegėte iš git arba tiesiai iš kodo naudodami kitą metodą. To ir buvo tikimasi. Pabandykite įdiegti išvaizdų iš [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org išvaizdų katalogo]:\n:* Atsisiųsti [https://www.mediawiki.org/wiki/Download tvarkyklę], kuri turi keletą išvaizdų ir plėtinių. Jūs galėsite nukopijuoti ir įklijuoti <code>skins/</code> katalogą iš jo.\n:* Atsisiųsti individualias išvaizdas iš [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Naudoti Git išvaizdoms atsisiųsti].\n: Tai neturėtų trukdyti jūsų git saugyklai jei Jūs esate MediaWiki kūrėjas.\n\n; Jei Jūs ką tik atnaujinote MediaWiki:\n: MediaWiki 1.24 ir naujesnės versijos daugiau automatiškai nebeįgalina įdiegtų išvaizdų (žiūrėkite [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Instrukcija: Išvaizdų automatinis aptikimas]). Jūs galite įklijuoti {{PLURAL:$5|šią eilutę|šias eilutes}} į <code>LocalSettings.php</code>, kad įgalintumėte {{PLURAL:$5||visus}} šiuo metu {{PLURAL:$5|įdiegtą išvaizdą|įdiegtas išvaizdas}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Jei Jūs ką tik pakeitėte <code>LocalSettings.php</code>:\n: Dar kartą patikrinkite išvaizdos pavadinimą ar nepadarėte spausdinimo klaidos.",
        "default-skin-not-found-no-skins": "Ups! Jūsų viki numatytoji išvaizdą, nurodyta <code>$wgDefaultSkin</code> <code>$1</code>, yra negalima.\n\nJūs neturite įdiegtų išvaizdų.\n\n; Jei ką tik įsidiegėte MediaWiki:\n: Jūs tikriausiai įsidiegėte iš git arba tiesiai iš kodo naudodami kitą metodą. To buvo tikimasi. Pabandykite įsidiegti išvaizdų iš [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org išvaizdų katalogo] taip:\n:* Parsisiųsdami  [https://www.mediawiki.org/wiki/Download tvarkyklę], kuri turi kelias išvaizdas ir plėtinius. Jūs galite nukopijuoti ir įklijuoti <code>skins/</code> katalogą iš jos.\n:* Persiųsdami individualias išvaizdas iš [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Naudodami Git išvaizdų parsisiuntimui].\n: Tai neturėtų trukdyti Jūsų git saugyklai jei Jūs esate MediaWiki kūrėjas. Žiūrėkite [https://www.mediawiki.org/wiki/Manual:Skin_configuration Instrukcija: Išvaizdos konfigūracija] dėl informacijos kaip įgalinti išvaizdas ir pasirinkti numatytąją.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (įgalinta)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''išjungtas''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>išjungtas</strong>)",
        "mediastatistics": "Daugialypės terpės statistika",
        "mediastatistics-summary": "Statistika apie įkeltus failo tipus. Tai apima tik naujausias failo versijas. Senos ar ištrintos failų versijos nėra įtrauktos.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 bitas|$1 bitai}} ($2; $3%)",
index c56b3b6..1a5e27b 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Lpachuau",
                        "RMizo",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Zawmna hnuairinna",
        "customcssprotected": "Hmangtu dang mimal thil a awm avangin he CSS phêk hi siam danglam phal a ni lo.",
        "customjsprotected": "Hmangtu dang mimal thil a tel avangin he JavaScript phêk hi siamţhat phalsak i ni lo.",
        "ns-specialprotected": "Phêk vohbîkte siam danglam theih a ni lo.",
-       "titleprotected": "He phêk hi hmangtu [[User:$1|$1]] siam phalsak a ni lo. A chhan hetah: \"''$2''\" hian pêk a ni.",
+       "titleprotected": "He phêk hi hmangtu [[User:$1|$1]] siam phalsak a ni lo. A chhan hetah: <em>$2</em> hian pêk a ni.",
        "invalidtitle-knownnamespace": "Hming pawm loh hminghmun \"$2\"-a \"$3\" tih thu chuang.",
        "invalidtitle-unknownnamespace": "Hming pawm loh leh hminghmun zât hriat loh $1-a thu chuang \"$2\"",
        "exception-nologin": "I la lût lo",
        "passwordreset-email": "E-chenhmun:",
        "passwordreset-emailtitle": "{{SITENAME}}-a siangchan chanchin kim",
        "passwordreset-emailelement": "Hmangtuhming: \n$1\n\nThurûk lailâwk: \n$2",
-       "passwordreset-emailsent": "Hriat nawntirna e-lehkha thawn fel a ni.",
+       "passwordreset-emailsentemail": "Hriat nawntirna e-lehkha thawn fel a ni.",
        "passwordreset-emailsent-capture": "Hriat nawntirna e-lehkha thawn a ni, a hnuaia tarlan ang khuan.",
        "passwordreset-emailerror-capture": "Hriat nawntirna e-lehkha siam chhuah a ni a, a hnuaia tarlan ang khuan; mahsé thawn hlawhchham a ni: $1",
        "changeemail": "E-chenhmun thlâk rawh",
        "prefs-displayrc": "Duhthlanna tilang rawh",
        "prefs-displaywatchlist": "Duhthlanna tilang rawh",
        "prefs-diffs": "Danglamna",
-       "email-address-validity-valid": "E-chenhmun a dik hmel",
-       "email-address-validity-invalid": "E-chenhmun dik ziak rawh",
        "userrights": "Hmangtu dikna-chanvo enkawlna",
        "userrights-lookup-user": "Hmangtu pawl enkawl rawh",
        "userrights-user-editname": "Hmangtu hming ziak rawh:",
        "upload-options": "Hlankai duhdàn thlanna",
        "watchthisupload": "Hë taksa hi vil rawh",
        "filewasdeleted": "He hming pu taksa hi ahmaah lo hlankai tawh a ni a, paihbo leh nghâl a ni.\nHlankai leh i tum hmain $1 i thlïthläi deuh dawn nia.",
-       "upload-success-subj": "Hlawhtling taka hlankai a ni",
-       "upload-success-msg": "[$2] aṭangin i hlangkai hlawhtling ta e. Hetah hian hman theihin a awm ta: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Hlankai rokhawlhna",
-       "upload-failure-msg": "[$2] aṭanga i hlankai tumnaah rokhawlhna a awm tlat:\n\n$1",
-       "upload-warning-subj": "Hlankai vauhkhànna",
-       "upload-warning-msg": "[$2] aṭanga i hlankaiah rokhawlhna a awm tlat. [[Special:Upload/stash/$1|Hlankaina lehkha]]-ah chingfel tùrin i lêt leh thei ang.",
        "upload-proto-error": "Inpawhphung dikhlel",
        "upload-file-error": "Chhúnglam dik lohna",
        "license": "Phalphung:",
        "rollbacklink": "sûtlêtna",
        "rollbackfailed": "Sûtlêt a tlawlh",
        "cantrollback": "Siamṭhatna a sûtlêt theih loh;\na siamṭhatu hnuhnüng ber hi hë phêk tawktu awm chhun a la ni tlat.",
-       "editcomment": "Siamṭhatna kaihtawi: \"''$1''\".",
+       "editcomment": "Siamṭhatna kaihtawi: <em>$1</em>.",
        "rollback-success": "$1-in siamṭhana a sûtlêt a;\n$2-in a awmphung ngäiah a dahlêt leh.",
        "sessionfailure-title": "Hun hman tlawlh!",
        "protectlogpage": "Venhim chhinchhiahna",
        "movenosubpage": "He phêk hian phêkpéng a nei lo.",
        "movereason": "A chhan:",
        "revertmove": "tihlêtna",
-       "delete_and_move": "Nuaibo paha sawnna",
        "delete_and_move_text": "==Paih ngai a awm==\n\"[[:$1]]\" tih hming pu phêk a awm tawh.\nHming thlâk thei tùra phêk awmsa paih i duh em?",
        "delete_and_move_confirm": "Aw, a phêk awmsa chu paih ka duh",
        "delete_and_move_reason": "\"[[$1]]\" hming putu hmasa paih a ni ta.",
index 5c0bf4b..0adbac6 100644 (file)
        "recentchanges-label-bot": "ئی ئیصلاح تأڤأسۉط یە روٙبات انجام ڤابیە",
        "recentchanges-label-unpatrolled": "ئی ئیصلاح هۉنۉ گأشت نأڤابیدھ",
        "recentchanges-label-plusminus": "أندازھ بألگە ڤا ئی تیعداد بایت تأغییر دادھ بیە",
-       "recentchanges-legend-heading": "'''تأغییرل نۉ :'''",
+       "recentchanges-legend-heading": "<strong>تأغییرل نۉ :</strong>",
        "recentchanges-legend-newpage": "{{عۉضڤل أنجوٙمأن:تأغییرل أخیر-بأرچأسب-بألگە نۉ}} (هأنی سل کۉ [[Special:NewPages|لیست بألگل نۉ]])",
        "rclistfrom": "نیشۉ دائن تأغییرل نۉ ڤا شۉرۉ زھ $3 $2",
        "rcshowhideminor": "ئیصلاحل کچک $1",
index 018bc88..2c27943 100644 (file)
        "moredotdotdot": "Vairāk...",
        "morenotlisted": "Šis saraksts nav pilnīgs.",
        "mypage": "Lapa",
+       "anonuserpage": "Nezināms lietotājs",
        "mytalk": "Diskusijas",
        "anontalk": "Diskusijas",
        "navigation": "Navigācija",
        "myprivateinfoprotected": "Jums nav tiesību rediģēt savu privāto informāciju.",
        "mypreferencesprotected": "Jums nav tiesību rediģēt savus iestatījumus.",
        "ns-specialprotected": "Nevar izmainīt īpašās lapas.",
-       "titleprotected": "Šī lapa ir aizsargāta pret izveidošanu. To aizsargāja [[User:$1|$1]].\nNorādītais iemesls bija ''$2''.",
+       "titleprotected": "Šī lapa ir aizsargāta pret izveidošanu. To aizsargāja [[User:$1|$1]].\nNorādītais iemesls bija <em>$2</em>.",
        "exception-nologin": "Neesat pieslēdzies",
        "virus-badscanner": "Nekorekta konfigurācija: nezināms vīrusu skeneris: ''$1''",
        "virus-scanfailed": "skenēšana neizdevās (kods $1)",
        "userrights": "Dalībnieku tiesību pārvaldība",
        "userrights-lookup-user": "Pārvaldīt dalībnieka grupas",
        "userrights-user-editname": "Ievadi lietotājvārdu:",
-       "editusergroup": "Izmainīt dalībnieka grupas",
+       "editusergroup": "Izmainīt {{GENDER:$1|dalībnieka|dalībnieces}} grupas",
        "editinguser": "Izmainīt lietotāja '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]]) statusu",
        "userrights-editusergroup": "Izmainīt lietotāja grupas",
-       "saveusergroups": "Saglabāt dalībnieka grupas",
+       "saveusergroups": "Saglabāt {{GENDER:$1|dalībnieka|dalībnieces}} grupas",
        "userrights-groupsmember": "Šobrīd ietilpst grupās:",
        "userrights-groupsmember-auto": "Netiešs dalībnieks:",
        "userrights-groups-help": "Tu vari izmainīt kādās grupās šis lietotājs ir:\n* Ieķeksēts lauciņš norāda, ka lietotājs ir attiecīgajā grupā.\n* Neieķeksēts lauciņš norāda, ka lietotājs nav attiecīgajā grupā.\n* * norāda, ka šo grupu tu nevarēsi noņemt, pēc tam, kad to būsi pielicis, vai otrādāk (tu nevarēsi atcelt savas izmaiņas).",
        "recentchanges-label-bot": "Šis ir bota veikts labojums",
        "recentchanges-label-unpatrolled": "Šis labojums vēl nav pārbaudīts",
        "recentchanges-label-plusminus": "Par tik baitiem tika izmainīts lapas izmērs",
-       "recentchanges-legend-heading": "'''Apzīmējumi:'''",
+       "recentchanges-legend-heading": "<strong>Apzīmējumi:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (skatīt arī [[Special:NewPages|jaunās lapas]])",
        "recentchanges-submit": "Rādīt",
        "rcnotefrom": "Šobrīd redzamas izmaiņas kopš '''$2''' (parādītas ne vairāk par '''$1''').",
        "upload-dialog-button-done": "Gatavs",
        "upload-dialog-button-save": "Saglabāt",
        "upload-dialog-button-upload": "Augšupielādēt",
-       "upload-form-label-select-file": "Izvēlieties file",
        "upload-form-label-infoform-title": "Papildinformācija",
        "upload-form-label-infoform-description": "Apraksts",
        "upload-form-label-usage-title": "Pielietojums",
        "querypage-disabled": "Šī īpašā lapā ir atspējota veiktspējas iemeslu dēļ.",
        "apihelp": "API palīdzība",
        "apihelp-no-such-module": "Modulis \"$1\" nav atrasts.",
+       "apisandbox": "API smilškaste",
+       "apisandbox-api-disabled": "API ir atspējots šajā tīmekļa vietnē.",
+       "apisandbox-reset": "Notīrīt",
+       "apisandbox-examples": "Piemēri",
+       "apisandbox-results": "Rezultāti",
+       "apisandbox-request-url-label": "Pieprasījuma URL:",
+       "apisandbox-request-time": "Pieprasījuma izpildes laiks: $1",
        "booksources": "Grāmatu avoti",
        "booksources-search-legend": "Meklēt grāmatu avotus",
        "booksources-search": "Meklēt",
        "rollbackfailed": "Novēršana neizdevās",
        "cantrollback": "Nav iespējams novērst labojumu; iepriekšējais labotājs ir vienīgais lapas autors.",
        "alreadyrolled": "Nav iespējams novērst pēdējās izmaiņas, ko lapā [[:$1]] saglabāja [[User:$2|$2]] ([[User talk:$2|diskusija]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]). Kāds cits jau ir labojis šo lapu vai novērsis izmaiņas.\n\nPēdējās izmaiņas saglabāja [[User:$3|$3]] ([[User talk:$3|diskusija]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Attiecīgās izmaiņas kopsavilkums bija: \"''$1''\".",
+       "editcomment": "Attiecīgās izmaiņas kopsavilkums bija: <em>$1</em>.",
        "revertpage": "Novērsu izmaiņas, ko izdarīja [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskusija]]), atjaunoju versiju, ko saglabāja [[User:$1|$1]]",
        "revertpage-nouser": "Novērsu (lietotājvārds slēpts) izmaiņas, atjaunoju [[User:$1|$1]] versiju.",
        "rollback-success": "Novērsu izmaiņas, ko izdarīja $1;\natjaunoju versiju, ko saglabāja $2.",
        "sessionfailure-title": "sesijas kļūda",
        "sessionfailure": "Ir radusies problēma ar sesijas autentifikāciju;\nšī darbība ir atcelta, lai novērstu lietotājvārda iespējami ļaunprātīgu izmantošanu.\nLūdzu, spied \"''back''\" un atjaunini iepriekšējo lapu. Tad mēģini vēlreiz.",
        "changecontentmodel-reason-label": "Iemesls:",
+       "changecontentmodel-submit": "Mainīt",
        "protectlogpage": "Aizsargāšanas reģistrs",
        "protectedarticle": "aizsargāja \"[[$1]]\"",
        "modifiedarticleprotection": "izmainīja aizsardzības līmeni \"[[$1]]\"",
        "movenotallowedfile": "Tev nav atļaujas pārvietot failus.",
        "cant-move-user-page": "Tev nav atļaujas pārvietot lietotāju lapas (neskaitot apakšlapas).",
        "cant-move-to-user-page": "Tev nav atļaujas pārvietot lapu uz lietotāja lapu (neskaitot lietotāja lapas apakšlapu).",
-       "newtitle": "Uz šādu lapu",
+       "newtitle": "Jaunais nosaukums:",
        "move-watch": "Uzraudzīt šo lapu",
        "movepagebtn": "Pārvietot lapu",
        "pagemovedsub": "Pārvietošana notikusi veiksmīgi",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versijas|versija|versijas}} no $2",
        "javascripttest": "JavaScript testēšana",
        "javascripttest-pagetext-unknownaction": "Nezināma darbība \"$1\".",
-       "tooltip-pt-userpage": "Tava lietotāja lapa",
+       "tooltip-pt-userpage": "Tava {{GENDER:|dalībnieka|dalībnieces}} lapa",
        "tooltip-pt-anonuserpage": "Manas IP adreses lietotāja lapa",
-       "tooltip-pt-mytalk": "Tava diskusiju lapa",
+       "tooltip-pt-mytalk": "{{GENDER:|Tava}} diskusiju lapa",
        "tooltip-pt-anontalk": "Diskusija par labojumiem, kas izdarīti no šīs IP adreses",
-       "tooltip-pt-preferences": "Tavas izvēles",
+       "tooltip-pt-preferences": "{{GENDER:|Tavas}} izvēles",
        "tooltip-pt-watchlist": "Tevis uzraudzītās lapas",
        "tooltip-pt-mycontris": "{{GENDER:|Tavs}} devums",
        "tooltip-pt-anoncontribs": "Labojumi, kas veikti no šīs IP adreses",
index 8d79620..f1a6561 100644 (file)
@@ -18,7 +18,9 @@
                        "RalfX",
                        "Davidzdh",
                        "Nemo bis",
-                       "飞舞回堂前"
+                       "飞舞回堂前",
+                       "Macofe",
+                       "Bowleerin"
                ]
        },
        "tog-underline": "鏈墊線:",
        "october-date": "十月$1日",
        "november-date": "十一月$1日",
        "december-date": "十二月$1日",
+       "period-am": "晨",
+       "period-pm": "午後",
        "pagecategories": "$1類",
        "category_header": "「$1」中之頁",
        "subcategories": "次類",
        "morenotlisted": "列未成。",
        "mypage": "寒舍",
        "mytalk": "書房",
-       "anontalk": "è\88\87ï¼\88IPï¼\89ç§\81è­°",
+       "anontalk": "議",
        "navigation": "導",
        "and": "與",
        "qbfind": "尋",
        "disclaimers": "免責宣",
        "disclaimerpage": "Project:免責宣",
        "edithelp": "助纂塾",
+       "helppage-top-gethelp": "助",
        "mainpage": "卷首",
        "mainpage-description": "卷首",
        "policy-url": "Project:策",
        "cascadeprotected": "此頁\"迭緘\"矣。$1頁牽連如下:\n$2",
        "namespaceprotected": "子權未逮,莫能纂'''$1'''。",
        "ns-specialprotected": "奇頁禁纂。",
-       "titleprotected": "緘焉自[[User:$1|$1]]防建。以''$2''之故也。",
+       "titleprotected": "緘焉自[[User:$1|$1]]防建。以<em>$2</em>之故也。",
        "invalidtitle-knownnamespace": "無效卷題,含名域\"$2\"與文本\"$3\"",
        "exception-nologin": "尚未登簿",
        "virus-badscanner": "壞設:不明之病掃:''$1''",
        "gotaccount": "已有簿矣?惠往$1。",
        "gotaccountlink": "登簿",
        "userlogin-resetlink": "汝忘登簿所需?",
-       "userlogin-resetpassword-link": "輸子符節",
+       "userlogin-resetpassword-link": "亡子符節?",
        "userlogin-helplink2": "助以登簿",
+       "userlogin-createanother": "增另一簿",
        "createacct-emailrequired": "電郵",
        "createacct-emailoptional": "電郵(可選)",
+       "createacct-email-ph": "書君郵址",
        "createaccountmail": "同郵",
        "createacct-realname": "實名(可選)",
        "createaccountreason": "因:",
        "createacct-reason": "因:",
        "createacct-reason-ph": "汝另立一簿者何哉?",
        "createacct-submit": "增簿",
-       "createacct-another-submit": "復ç«\8bä¸\80簿",
+       "createacct-another-submit": "å¢\9e簿",
        "createacct-benefit-heading": "吾等立{{SITENAME}}者,或黔首,或專戶。",
        "createacct-benefit-body1": "纂",
        "createacct-benefit-body2": "頁",
        "noname": "缺簿名,或不格也。",
        "loginsuccesstitle": "登簿成矣",
        "loginsuccess": "'''$1'''登{{SITENAME}}矣",
-       "nosuchuser": "查無此人。惠請更名,查大小寫或立此簿。",
+       "nosuchuser": "查無此人。惠請更名,查大小寫或[[Special:UserLogin/signup|立此簿]]。",
        "nosuchusershort": "查無\"$1\",惠核之。",
        "nouserspecified": "簿名必須",
        "login-userblocked": "此簿見錮矣。是之登未見許可。",
        "resetpass_submit": "設符再登",
        "changepassword-success": "汝之符節已改!",
        "changepassword-throttled": "爾嘗登簿甚矣。\n請候 $1 再試之。",
+       "botpasswords": "僕之符節",
+       "botpasswords-label-appid": "僕名:",
+       "botpasswords-label-create": "立",
+       "botpasswords-label-update": "更",
+       "botpasswords-label-cancel": "棄",
+       "botpasswords-label-delete": "刪",
+       "botpasswords-label-resetpassword": "重設符節",
+       "botpasswords-deleted-title": "僕之符節已刪",
+       "botpasswords-deleted-body": "\"$2\"所執之僕\"$1\"之符節已刪也。",
        "resetpass_forbidden": "符節之更也不可。",
        "resetpass-no-info": "欲入此頁,爾須登簿。",
        "resetpass-submit-loggedin": "改符節",
        "resetpass-submit-cancel": "消",
        "resetpass-wrong-oldpass": "無效之臨符或現符。\n爾或改符,或求新臨符。",
+       "resetpass-recycled": "請君更至與原符節相異之符節。",
        "resetpass-temp-password": "臨時符節:",
        "resetpass-abort-generic": "符節不可更",
        "passwordreset": "重設符節",
        "passwordreset-username": "簿名:",
        "passwordreset-domain": "域:",
        "passwordreset-email": "電郵址",
-       "changeemail": "更郵址",
+       "changeemail": "更或刪郵址",
        "changeemail-oldemail": "當前郵驛:",
        "changeemail-newemail": "添新郵驛:",
        "changeemail-none": "(無)",
        "changeemail-password": "汝 {{SITENAME}} 之符節",
+       "changeemail-submit": "更郵址",
        "changeemail-throttled": "汝嘗登簿甚矣。\n請候 $1 而試之。",
        "bold_sample": "粗體",
        "bold_tip": "粗體",
        "edit-gone-missing": "無更頁。\n刪之也。",
        "edit-conflict": "纂突。",
        "edit-no-change": "爾之纂已略,由字無改也。",
+       "postedit-confirmation-created": "其頁已建。",
        "postedit-confirmation-saved": "汝之纂已成",
        "edit-already-exists": "不建新頁。\n已存也。",
        "defaultmessagetext": "慣話文",
        "revdelete-confirm": "爾確作之,解之果焉,合之[[{{MediaWiki:Policy-url}}|策]]矣。",
        "revdelete-suppress-text": "'''限'''於此壓:\n* 無適之個訊\n*: ''地、號、保等之。''",
        "revdelete-legend": "見,規之以",
-       "revdelete-hide-text": "審文",
+       "revdelete-hide-text": "審文",
        "revdelete-hide-image": "藏檔容",
-       "revdelete-hide-comment": "摘",
+       "revdelete-hide-comment": "摘",
        "revdelete-hide-user": "簿、IP址以藏",
        "revdelete-hide-restricted": "廢有秩與簿之事",
        "revdelete-radio-same": "(無改)",
        "compareselectedversions": "辨二擇",
        "showhideselectedversions": "示/藏之擇",
        "editundo": "悔",
+       "diff-empty": "(無異)",
        "diff-multi-manyusers": "($2多作未示之審有$1)",
        "searchresults": "得尋",
        "searchresults-title": "\"$1\"得尋",
        "notextmatches": "無文合",
        "prevn": "前{{PLURAL:$1|$1}}",
        "nextn": "次{{PLURAL:$1|$1}}",
+       "prev-page": "前頁",
+       "next-page": "次頁",
        "prevn-title": "前$1之尋",
        "nextn-title": "後$1之尋",
        "shown-title": "每頁示 $1",
        "prefs-personal": "概簿",
        "prefs-rc": "近易",
        "prefs-watchlist": "哨站",
+       "prefs-editwatchlist": "治哨站",
+       "prefs-editwatchlist-clear": "清哨站",
        "prefs-watchlist-days": "哨報有日",
        "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|day|days}}",
        "prefs-watchlist-edits": "哨站有易",
        "prefs-misc": "雜",
        "prefs-resetpass": "更符節",
        "prefs-changeemail": "更郵址",
+       "prefs-setemail": "設電郵址",
        "prefs-email": "傳書",
        "prefs-rendering": "觀",
        "saveprefs": "儲",
        "columns": "列數:",
        "searchresultshead": "尋",
        "stub-threshold": "<a href=\"#\" class=\"stub\">短頁連</a>格式門檻(位元組):",
+       "stub-threshold-sample-link": "例",
        "stub-threshold-disabled": "禁",
        "recentchangesdays": "近易示日:",
        "recentchangesdays-max": "最大有$1",
        "right-siteadmin": "鎖與解鎖資料庫",
        "right-override-export-depth": "出有五層深之頁",
        "right-sendemail": "擬書傳予他簿",
+       "grant-group-email": "遞電郵",
+       "grant-createaccount": "立簿",
+       "grant-editmywatchlist": "纂哨站",
+       "grant-viewmywatchlist": "閱哨站",
        "newuserlogpage": "誌簿",
        "newuserlogpagetext": "此為誌簿之記也",
        "rightslog": "職權志",
        "action-userrights": "纂全權",
        "action-userrights-interwiki": "纂他wiki上之權",
        "action-siteadmin": "鎖及解鎖其庫",
+       "action-editmywatchlist": "纂爾哨站",
+       "action-viewmywatchlist": "閱爾哨站",
        "nchanges": "$1易",
        "enhancedrc-since-last-visit": "$1未示",
        "enhancedrc-history": "誌",
        "recentchanges-label-bot": "此乃機纂",
        "recentchanges-label-unpatrolled": "是纂未巡",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}}([[Special:NewPages|新灶]])",
+       "recentchanges-submit": "示",
        "rcnotefrom": "下為自'''$2'''至'''$1'''之易也。",
        "rclistfrom": "自$3 $2起之易也",
        "rcshowhideminor": "$1校",
        "upload-proto-error": "協訂錯誤",
        "upload-too-many-redirects": "網址含多轉",
        "upload-http-error": "發一HTTP之錯:$1",
+       "upload-dialog-button-cancel": "捨",
+       "upload-dialog-button-done": "成",
+       "upload-dialog-button-save": "存",
+       "upload-dialog-button-upload": "貢",
+       "upload-form-label-infoform-title": "細事",
+       "upload-form-label-infoform-name": "名",
+       "upload-form-label-infoform-description": "述",
        "backend-fail-notexists": "無檔 $1 。",
        "backend-fail-alreadyexists": "$1 已含。",
        "backend-fail-read": "\"$1\"不可見。",
        "rollbackfailed": "未能反正",
        "cantrollback": "獨一作者,無以反正。",
        "alreadyrolled": "[[User:$2|$2]]([[User talk:$2|議]] | [[Special:Contributions/$2|{{int:contribslink}}]])作[[:$1]],退不成也。有易或已退焉。新纂者為[[User:$3|$3]]([[User talk:$3|議]] | [[Special:Contributions/$3|{{int:contribslink}}]])",
-       "editcomment": "贊曰\"''$1''\"",
+       "editcomment": "贊曰<em>$1</em>",
        "revertpage": "去[[Special:Contributions/$2|$2]]之作(欲言之,可至[[User talk:$2|此]])為[[User:$1|$1]]之本耳",
        "revertpage-nouser": "去(刪簿)之作為[[User:$1|$1]]之本耳",
        "rollback-success": "去$1之作,復為$2之本耳。",
index 3fca0eb..d4544dd 100644 (file)
                        "Macofe"
                ]
        },
-       "tog-underline": "लिंककेँ रेखांकित करू:",
-       "tog-hideminor": "सन्निकट परिवर्त्तनमे छोट परिवर्त्तन नुकाऊ",
-       "tog-hidepatrolled": "सन्निकट परिवर्त्तनमे छोट परिवर्त्तन नुकाऊ",
-       "tog-newpageshidepatrolled": "नियंत्रित सम्पादनकेँ नव पन्ना सूचीसँ नुकाऊ",
-       "tog-extendwatchlist": "सन्निकट परिवर्तन नै,अखन ध्यानसूचीमे रहल सभ परिवर्तन देखाऊ",
-       "tog-usenewrc": "नीक सन्निकट परिवर्तन प्रयोग करू (जावास्क्रिप्ट चाही)",
-       "tog-numberheadings": "शीर्षक स्वयं-क्रमांकित करू",
-       "tog-showtoolbar": "संपादन ओजारपेटी देखाऊ (जावास्क्रीप्ट)",
-       "tog-editondblclick": "दू बेर क्लीक कए पन्ना संपादित करू (जावास्क्रीप्ट)",
-       "tog-editsectiononrightclick": "ऐ खण्डक सम्पादन खण्डक शीर्षकेँ दहिन क्लिक कऽ सम्भव (जावास्क्रिप्ट चाही)",
-       "tog-watchcreations": "हमर बनाओल पृष्ठ हमर साकांक्ष सूचीमे राखू",
-       "tog-watchdefault": "हमर संपादित पृष्ठ हमर साकांक्ष सूचीमे देखाऊ",
-       "tog-watchmoves": "हमरा द्वारा हटाओल पृष्ठ हमर साकांक्ष सूचीमे राखू",
-       "tog-watchdeletion": "हमरा द्वारा हटाओल पृष्ठ हमर साकांक्ष सूचीमे राखू",
-       "tog-watchrollback": "हमरा द्वारा जोडलगेल पृष्ठ हमार सांकक्ष सूचीमे राखू",
+       "tog-underline": "लिङ्कके रेखाङ्कित करी:",
+       "tog-hideminor": "सन्निकट परिवर्तनमे छोट परिवर्तन नुकाबी",
+       "tog-hidepatrolled": "सन्निकट परिवर्तनमे नियन्त्रित कएल सम्पादन नुकाबी",
+       "tog-newpageshidepatrolled": "नियन्त्रित सम्पादनक नव पन्ना सूचीसँ नुकाबी",
+       "tog-hidecategorization": "पृष्ठसभक श्रेणीकरण हटाबी",
+       "tog-extendwatchlist": "सन्निकट परिवर्तन नै,अखन ध्यानसूचीमे रहल सभ परिवर्तन देखाबी",
+       "tog-usenewrc": "नीक सन्निकट परिवर्तन प्रयोग करी (जावास्क्रिप्ट चाही)",
+       "tog-numberheadings": "शीर्षक स्वयं-क्रमाङ्कित करी",
+       "tog-showtoolbar": "सम्पादन ओजारपेटी देखाबी",
+       "tog-editondblclick": "दू बेर क्लीक कए पन्ना सम्पादित करी",
+       "tog-editsectiononrightclick": "अनुभाग शीर्षक पर दाहिन क्लिक करै पर अनुभाग सम्पादित करी",
+       "tog-watchcreations": "हमर बनाओल पृष्ठ हमर साकांक्ष सूचीमे राखी",
+       "tog-watchdefault": "हमर सम्पादित पृष्ठ हमर साकांक्ष सूचीमे देखाबी",
+       "tog-watchmoves": "हमराद्वारा घस्काओल पृष्ठ हमर साकांक्ष सूचीमे राखी",
+       "tog-watchdeletion": "हमराद्वारा मेटाओल पृष्ठ हमर साकांक्ष सूचीमे राखी",
+       "tog-watchrollback": "हमराद्वारा रोलब्याक कएल पृष्ठ हमर सांकक्ष सूचीमे राखी",
        "tog-minordefault": "हमर सभ सम्पादन पूर्वन्यस्त रूपेँ मामूली कहू",
-       "tog-previewontop": "सà¤\82पादन à¤ªà¥\87à¤\9fà¥\80à¤\95 à¤\8aपर à¤¦à¥\83शà¥\8dय à¤¦à¥\87à¤\96ाà¤\8a",
-       "tog-previewonfirst": "पहिल à¤¸à¤\82पादनà¤\95 à¤¬à¤¾à¤¦ à¤ªà¥\82रà¥\8dवावलà¥\8bà¤\95न à¤¦à¥\87à¤\96ाà¤\89",
-       "tog-enotifwatchlistpages": "à¤\9cà¥\8cà¤\82 à¤¹à¤®à¤° à¤§à¥\8dयानसà¥\82à¤\9aà¥\80à¤\95 à¤\95à¥\8bनà¥\8b à¤ªà¤¨à¥\8dनामà¥\87 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤¹à¥\81à¤\85à¤\8f à¤¤à¤\81 à¤¹à¤®à¤°à¤¾ à¤\88-पतà¥\8dर à¤ªà¤ à¤¾à¤\89",
-       "tog-enotifusertalkpages": "हमर à¤¸à¤¦à¤¸à¥\8dय à¤µà¤¾à¤°à¥\8dता à¤ªà¥\83षà¥\8dठ à¤ªà¤° à¤­à¥\87ल à¤ªà¤°à¤¿à¤µà¤°à¥\8dतà¥\8dतनà¤\95 à¤¹à¥\87तà¥\81 à¤¹à¤®à¤°à¤¾ à¤\88-मà¥\87ल à¤\95रथि",
-       "tog-enotifminoredits": "à¤\9bà¥\8bà¤\9f à¤ªà¤°à¤¿à¤µà¤°à¥\8dतà¥\8dतनà¤\95 à¤¹à¥\87तà¥\81 à¤¸à¥\87हà¥\8b à¤¹à¤®à¤°à¤¾ à¤\88-मà¥\87ल à¤ªà¤ à¤¾à¤\8a",
-       "tog-enotifrevealaddr": "हमर à¤\88-पतà¥\8dर à¤¸à¤\82à¤\95à¥\87त à¤¸à¥\82à¤\9aना à¤\88-पतà¥\8dरमà¥\87 à¤¦à¥\87à¤\96ाà¤\89",
-       "tog-shownumberswatching": "धà¥\8dयान à¤°à¤¾à¤\96à¥\88बला à¤ªà¥\8dरयà¥\8bà¤\95्ताक संख्या",
+       "tog-previewontop": "समà¥\8dपादन à¤ªà¥\87à¤\9fà¥\80à¤\95 à¤\8aपर à¤¦à¥\83शà¥\8dय à¤¦à¥\87à¤\96ाबà¥\80",
+       "tog-previewonfirst": "पहिल à¤¸à¤®à¥\8dपादनà¤\95 à¤¬à¤¾à¤¦ à¤ªà¥\82रà¥\8dवावलà¥\8bà¤\95न à¤¦à¥\87à¤\96ाबà¥\80",
+       "tog-enotifwatchlistpages": "à¤\9cà¥\8cà¤\82 à¤¹à¤®à¤° à¤§à¥\8dयानसà¥\82à¤\9aà¥\80à¤\95 à¤\95à¥\8bनà¥\8b à¤ªà¤¨à¥\8dनामà¥\87 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤¹à¥\81à¤\85à¤\8f à¤¤à¤\81 à¤¹à¤®à¤°à¤¾ à¤\87मà¥\87ल à¤ªà¤ à¤¾à¤¬à¥\80",
+       "tog-enotifusertalkpages": "हमर à¤µà¤¾à¤°à¥\8dता à¤ªà¥\83षà¥\8dठ à¤ªà¤°à¤¿à¤µà¤°à¥\8dतित à¤­à¥\87ला à¤ªà¤° à¤¹à¤®à¤°à¤¾ à¤\87मà¥\87ल à¤\95रà¥\80",
+       "tog-enotifminoredits": "à¤\9bà¥\8bà¤\9f à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¤\95 à¤¹à¥\87तà¥\81 à¤¸à¥\87हà¥\8b à¤¹à¤®à¤°à¤¾ à¤\87मà¥\87ल à¤­à¥\87à¤\9cà¥\80",
+       "tog-enotifrevealaddr": "à¤\85धिसà¥\82à¤\9aना à¤\87मà¥\87लमà¥\87 à¤¹à¤®à¤° à¤\87मà¥\87ल à¤ªà¤¤à¤¾ à¤¦à¥\87à¤\96ाबà¥\80",
+       "tog-shownumberswatching": "धà¥\8dयान à¤°à¤¾à¤\96à¥\88बला à¤ªà¥\8dरयà¥\8bà¤\97à¤\95र्ताक संख्या",
        "tog-oldsig": "अखुनका दस्खत:",
-       "tog-fancysig": "दस्खतकें विकिटेक्सटक रूपमे देखू (स्वचालित श्रृंखला हीन)",
+       "tog-fancysig": "दस्खतक विकिटेक्सटक समान मानी (स्वचालित श्रृंखला हीन)",
        "tog-uselivepreview": "पूर्वावलोकनके उपयोग करी",
-       "tog-forceeditsummary": "हमरा à¤¸à¤\9aà¥\87त à¤\95रà¥\82 à¤\9cà¤\96न à¤¹à¤® à¤\96ालà¥\80 à¤¸à¤®à¥\8dपादम à¤¸à¤¾à¤°à¤¾à¤\82शमà¥\87 à¤\9cाà¤\87",
+       "tog-forceeditsummary": "यदि à¤¸à¤®à¥\8dपादन à¤¸à¤¾à¤°à¤¾à¤\82श à¤¨à¥\88 à¤¦à¥\87ल à¤\97à¥\87ल à¤¹à¥\8bà¤\8f à¤¤à¤¹à¤¨ à¤¹à¤®à¤°à¤¾ à¤¸à¥\82à¤\9aित à¤\95रà¥\80",
        "tog-watchlisthideown": "हमर साकांक्ष सूचीसँ हमर सम्पादन नुकाउ",
        "tog-watchlisthidebots": "हमर साकांक्ष सूचीसँ स्वचालित सम्पादन हटाउ",
        "tog-watchlisthideminor": "हमर साकांक्ष सूचीसँ मामूली सम्पादन नुकाउ",
        "myprivateinfoprotected": "अहाके अपन व्यक्तिगत जानकारी बदलैक अनुमति नै अछि।",
        "mypreferencesprotected": "अहाके अपन प्राथमिकता बदलैक अनुमति नै अछि।",
        "ns-specialprotected": "विशेष पन्ना सभकेँ सम्पादित नै कएल जा सकैए।",
-       "titleprotected": "ऐ शीर्षकक निर्माण प्रतिबन्धित अछि [[User:$1|$1]] द्वारा।\nकारण एतऽ देल अछि \"''$2''\"।",
+       "titleprotected": "ऐ शीर्षकक निर्माण प्रतिबन्धित अछि [[User:$1|$1]] द्वारा।\nकारण एतऽ देल अछि <em>$2</em>।",
        "filereadonlyerror": "\"$1\" फाइलके बदलैलेल अक्षम कियाक भण्डार \"$2\" इ समय 'मात्र पाठन के लेल' (रीड ओनली) अछि।\n\nजे प्रबंधक इ प्रबंध लगोनै अछि हुनका निम्न विवरण प्रदान कएल गेल अछि: \"$3\"।",
        "invalidtitle-knownnamespace": "\"$2\" नामस्थान आर \"$3\" नाम बला गलत शीर्षक",
        "invalidtitle-unknownnamespace": "अज्ञात नामस्थान संख्या $1 आर नाम \"$2\" वाला गलत शीर्षक",
        "virus-unknownscanner": "अज्ञात विषविधि निरोधक",
        "logouttext": "'''अहाँ निष्क्रमण कऽ गेल छी।'''\n\nअहाँ {{अन्तर्जाल}} प्रयोग अनाम भऽ कऽ सकै छी, वा अहाँ <span class='plainlinks'>[$1 log in again]</span> वएह आकि कोनो आन प्रयोक्ताक रूपमे सेहू प्रयोक कऽ सकै छी।\nई मोन राखू जे किछु पन्ना एना देखा पड़ि सकैए जेना अहाँ अखनो सम्प्रवेशित होइ, जावत अहाँ अपन गवेषकक उपस्मृति मेटा नै दै छी।",
        "welcomeuser": "अहाके स्वागत अछि, $1!",
-       "welcomecreation-msg": "à¤\85हाà¤\95à¥\87 à¤\96ाता à¤¬à¤¨à¤¾à¤µà¥\8bल à¤\97à¥\87ल à¤\85à¤\9bि à¥¤\nà¤\85पन [[Special:Preferences|{{SITENAME}} à¤ªà¥\8dराथमिà¤\95तासभ]] à¤¬à¤¦à¤²à¥\88ल नै बिसरब।",
+       "welcomecreation-msg": "à¤\85हाà¤\81à¤\95 à¤\96ाता à¤¬à¤¨à¤¾à¤\8fल à¤\97à¥\87ल à¤\85à¤\9bि।\nà¤\85पन [[Special:Preferences|{{SITENAME}} à¤ªà¤¸à¤¨à¥\8dद]] à¤¬à¤¦à¤²à¥\88 à¤²à¥\87ल नै बिसरब।",
        "yourname": "प्रयोक्ता:",
        "userlogin-yourname": "प्रयोक्ता:",
        "userlogin-yourname-ph": "अपन प्रयोक्तानाम लिखु",
        "undo-summary-username-hidden": "नुकाएल गेल प्रयोक्ताद्वारा केल गेल परिवर्तन $1 के पूर्ववत केल गेल",
        "cantcreateaccounttitle": "खाता नै बना सकल",
        "cantcreateaccount-text": "('''$1''') अनिकेत पतासँ खाता निर्माण प्रतिबन्धित कएल गेल [[User:$3|$3]]।\n$3 द्वारा देल कारण अछि ''$2''",
-       "cantcreateaccount-range-text": "'''$1''' के श्रेणी में आबई वाला आई॰पी पता सऽ, जएमें आहाँ कें आई॰पी पता ('''$4''') शामिल अछि, नया खाता के रचना [[User:$3|$3]] द्वारा अवरोधित केल गेल अछि। \n\n$3 द्वारा देल गेल कारण अछि: \"$2\"",
+       "cantcreateaccount-range-text": "<strong>$1</strong> के श्रेणी में आबई वाला आई॰पी पता सऽ, जएमें आहाँ कें आई॰पी पता (<strong>$4</strong>) शामिल अछि, नया खाता के रचना [[User:$3|$3]] द्वारा अवरोधित केल गेल अछि। \n\n$3 द्वारा देल गेल कारण अछि: \"$2\"",
        "viewpagelogs": "ऐ पन्नाक वृत्तलेख सभ देखू",
        "nohistory": "ऐ पन्ना लेल कोनो सम्पादन इतिहास नै अछि।",
        "currentrev": "नूतन संशोधन",
        "recentchanges-label-bot": "ई सम्पादन यांत्रिक छल।",
        "recentchanges-label-unpatrolled": "ऐ सम्पादनक पुनरीक्षण अखन धरि नै कएल गेल अछि।",
        "recentchanges-label-plusminus": "पन्नाके आकार इ बाइट संख्यासे बदलल गेल",
-       "recentchanges-legend-heading": "'''कुंजी:'''",
+       "recentchanges-legend-heading": "<strong>कुंजी:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नयाँ पन्नसभके सूची]] सहो देखु)",
        "rcnotefrom": "नीचाँमे '''$2''' सँ भेल परिवर्तन अछि ('''$1''' धरि देखाएल)।",
        "rclistfrom": "$3 $2 सँ शुरू भेल नव परिवर्तन देखू",
        "rollbackfailed": "प्रत्यावर्तन असफल",
        "cantrollback": "सम्पादन आपस नै भऽ सकै अछि;\nअन्तिम योगदान दैबला ऐ पन्नाक एकमात्र लेखक छी।",
        "alreadyrolled": "अन्तिम सम्पादनक प्रत्यावर्तन नै भऽ सकैए [[:$1]] by [[User:$2|$2]] ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nकियो आन ऐ पन्नाकेँ पहिनहिये सम्पादित वा प्रत्यावर्तित कऽ देने अछि।\nऐ पन्नाक अन्तिम सम्पादन भेल अछि एकरा द्वारा [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])।",
-       "editcomment": "सम्पादन सार छल : \"''$1''\"।",
+       "editcomment": "सम्पादन सार छल : <em>$1</em>।",
        "revertpage": "सम्पादन आपस कएल गेल [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]]) सँ अन्तिम संशोधन धरि एकरा द्वारा [[User:$1|$1]]।",
        "revertpage-nouser": "(प्रयोक्ताक नाम हटा देल गेल अछि) द्वारा केल गेल संपादनकेँ फेरसँ पुरान स्थितिमे आनि कऽ एकर पहिलुक [[User:$1|$1]] सँ बनल संस्करणकेँ फेरसँ ताजा संस्करण बनाऊ।",
        "rollback-success": "$1 केर संपादन हटाऊ. \n$2 केर संपादित आखिरी अवतरण क पुनर्स्थापित करल गेल.",
index 9607de3..f6f6ef7 100644 (file)
@@ -6,7 +6,8 @@
                        "StefanusRA",
                        "לערי ריינהארט",
                        "Bennylin",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Garisen ngisoré pranala:",
        "myprivateinfoprotected": "Rika ora duwe idin kanggo ngowaih informasi pribadine Rika.",
        "mypreferencesprotected": "Rika ora duwe idin kanggo ngowaih preferensine rika.",
        "ns-specialprotected": "Kaca astaiwa ora teyeng disunting.",
-       "titleprotected": "Judul kiye wis direksa ora olih digawe nang [[User:$1|$1]].\nAlesane yakuwe \"''$2''\".",
+       "titleprotected": "Judul kiye wis direksa ora olih digawe nang [[User:$1|$1]].\nAlesane yakuwe <em>$2</em>.",
        "filereadonlyerror": "Ora teyeng ngowaih berkas \"$1\" jalaran panyimpenan berkas \"$2\" ana nang mode-mung-teyeng-diwaca.\n\nAdministrator sing ngunci aweh keterangan: \"$3\".",
        "invalidtitle-knownnamespace": "Irah-irahan ora sah nang bilikjeneng \"$2\" lan teks \"$3\"",
        "invalidtitle-unknownnamespace": "Judhul ora sah nang bilik jeneng sing ora dingerteni nomer $1 lan teks \"$2\"",
        "createaccountreason": "Alesan:",
        "createacct-reason": "Alesan",
        "createacct-reason-ph": "Kenangapa Rika nggawe akun sejen",
-       "createacct-captcha": "Priksa keamanan",
-       "createacct-imgcaptcha-ph": "Lebokna teks sing keton nang dhuwur",
        "createacct-submit": "Gawe akune Rika",
        "createacct-another-submit": "Gawe akun liyane",
        "createacct-benefit-heading": "{{SITENAME}} kuwe digawe nang wong kaya Rika.",
        "passwordreset-email": "Alamat imel:",
        "passwordreset-emailtitle": "Detil akun nang {{SITENAME}}",
        "passwordreset-emailelement": "Jeneng panganggo: \n$1\n\nTembung sandhi sauntara: \n$2",
-       "passwordreset-emailsent": "Imel nggo nyetel maning tembung sandhi uwis dikirim.",
+       "passwordreset-emailsentemail": "Imel nggo nyetel maning tembung sandhi uwis dikirim.",
        "passwordreset-emailsent-capture": "Imel kanggo nyetel maning tembung sandhi uwis dikirim, kaya sing ditidokna nang ngisor kiye.",
        "passwordreset-emailerror-capture": "Imel nggo nyetel maning tembung sandhi uwis digawe, kaya sing ditidokna nang ngisor kiye, ningen gole ngirim maring {{GENDER:$2|panganggo}} ora teyeng: $1",
        "changeemail": "Ganti alamat imel",
-       "changeemail-text": "Rampungna formulir kiye kanggo ngganti alamat imel Rika. Rika bakal perlu nglebokna tembung sandhi Rika nggo konfirmasi owahan kiye.",
+       "changeemail-header": "Ganti alamat imel-e akun",
        "changeemail-no-info": "Rika kudu mlebu log kanggo ngakses kaca kiye sacara langsung.",
        "changeemail-oldemail": "Alamat imel sekiye:",
        "changeemail-newemail": "Alamat imel anyar:",
        "prefs-displayrc": "Opsi tampilan",
        "prefs-displaywatchlist": "Opsi tampilan",
        "prefs-diffs": "Prabédan",
-       "email-address-validity-valid": "Alamatimel ketone wis sah",
-       "email-address-validity-invalid": "Monggo dilebokna alamat imel sing bener",
        "userrights": "Manajemen hak panganggo",
        "userrights-lookup-user": "Ngatur kelompok panganggo",
        "userrights-user-editname": "Lebokna jeneng panganggo:",
        "right-blockemail": "Mblokir pangganggo ben ora teyeng ngirim imel",
        "right-hideuser": "Mblokir jeneng panganggo, lan ngumpetna sekang publik",
        "right-ipblock-exempt": "''Bypass'' pamblokiran IP, pamblokiran otomatis lan rentang pamblokiran",
-       "right-proxyunbannable": "''Bypass'' pamblokiran otomatis proksi",
        "right-unblockself": "Mbukak blokire awake dhewek",
        "right-protect": "Nganti tingkatan pangreksan lan nyunting kaca-kaca sing direksa",
        "right-editprotected": "Nyunting kaca-kaca sing direksa (tanpa pangreksan runtun)",
        "rollbackfailed": "Pambalèkan gagal dilakoni",
        "cantrollback": "Ora teyeng mbatalna suntingan;\nkontributor pungkasane kuwe siji-sijine sing nulis artikel kiye.",
        "alreadyrolled": "Ora teyeng mbalekna suntingan pungkasan [[:$1]] sekang [[User:$2|$2]] ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nwis ana wong sejen sing nyunting utawa mbalekna artikel kuwe.\n\nSuntingan pungkasan kaca kiye digawe nang [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Ringkesan suntingan yakuwe: \"''$1''\".",
+       "editcomment": "Ringkesan suntingan yakuwe: <em>$1</em>.",
        "revertpage": "Suntingane [[Special:Contributions/$2|$2]] ([[User talk:$2|dhiskusi]]) dibalekna maring vèrsi pungkasan sekang [[User:$1|$1]]",
        "revertpage-nouser": "Mbalekna suntingan sekang (jeneng panganggo dibusek) ming revisi pungkasan sekang [[User:$1|$1]]",
        "rollback-success": "Mbalekna suntingane $1;\ndibalekna ming revisi pungkasan sekang $2.",
        "movenosubpage": "Kaca kiye ora duwé anak-kaca.",
        "movereason": "Alesan:",
        "revertmove": "Balekna",
-       "delete_and_move": "Busek lan pindahna",
        "delete_and_move_text": "== Perlu mbusek ==\nKaca sing dituju \"[[:$1]]\" wis ana isine.\nApa Rika kepengin mbusek kuwe ben teyeng dipindahna?",
        "delete_and_move_confirm": "Ya, busek kaca kuwe",
        "delete_and_move_reason": "Dibusek nggo gawe dalan nggo mindah sekang \"[[$1]]\"",
index a9a83bc..e5169da 100644 (file)
        "customcssprotected": "Тейть аф мярьгови петнемс CSS лопать, сяс мес потмосонза иля тиить латцеманза.",
        "customjsprotected": "Тейть аф мярьгови петнемс JavaScript лопать, сяс мес потмосонза иля тиить латцеманза.",
        "ns-specialprotected": "{{ns:special}} лепнень мархта лопатне аф петневихть.",
-       "titleprotected": "[[User:$1|$1]] кардазь тя лемсь мархта лопа тиемать.\nТуфталсь ''$2''.",
+       "titleprotected": "[[User:$1|$1]] кардазь тя лемсь мархта лопа тиемать.\nТуфталсь <em>$2</em>.",
        "filereadonlyerror": "\"$1\" файлась аф полафтови сяс мес \"$2\" файлонь пърдафкссь аньцек морафтови форматса.\n\nАдминць конась сёлгозе кадсь пачфтема: \"$3\".",
        "invalidtitle-knownnamespace": "Аф кондясти лем \"$2\" лемботмоса ди \"$3\" текстть эса",
        "invalidtitle-unknownnamespace": "Аф кондясти лем $1 лемботмоса ди \"$2\" текстть эса",
        "right-blockemail": "Сёлгомс тиить электрононь сёрматнень кучемада",
        "right-hideuser": "Сёлгомс тиить лемоц, сонь кяшезь иля тиида",
        "right-ipblock-exempt": "Ётамс IP сёлгоматнень ваксс, эсь тиеви сёлгоматнень ди оцю сёлгоматнень",
-       "right-proxyunbannable": "Ётамс ваксс эсь тиеви ётка якай серверонь сёлгоматне",
        "right-protect": "Полафтомс араламань куцеманянзон ди петнемс аралаф лопатнень",
        "right-editprotected": "Петнемс аралаф лопатнень (какскадонь араламада башка)",
        "right-editinterface": "Петнемс тиить лопанц арафнеманзон",
        "watchthisupload": "Ваномс тя файлть мельге",
        "filewasdeleted": "Файл тяка лемса тонгозь ни ди меле нардазь. Тондейть пароль ваномс $1 тя файлть тонгодемац инголе.",
        "filename-bad-prefix": "Тон тонгодьсак файл конань лемоц ушеды '''\"$1\"'''-са. Стапт лепне лувовихть мезеньге аф колга азондовикс сяс мес синь эсь макссевихть тяшкскамераса тиф фотоархтофксненди (цифра камераса). Арьсек иля лем, конаса ащель информациеда лама.",
-       "upload-success-subj": "Тонгодемась ётась лац",
        "upload-proto-error": "Аф кондясти протокол",
        "upload-proto-error-text": "Ичкоздень тонгодеманди эряви URL-т ушедыхть <code>http://</code>-са эли <code>ftp://</code>-са.",
        "upload-file-error": "Потмонь эльбятькс",
        "listusersfrom": "Няфтемс тиихть ушедомс:",
        "listusers-submit": "Няфтемс",
        "listusers-noresult": "Тиихть исть мув.",
+       "activeusers-submit": "Няфтемс",
        "listgrouprights": "Тиихнень полгаснон видексонза",
        "listgrouprights-summary": "Тяса тиихнень полгасна конатне сувсихть тя Викис синь сувама видексснон мархта.\nТяса ули кода мумс [[{{MediaWiki:Listgrouprights-helppage}}|поладомань информациесь]] эсь башка видекснень колга.",
        "listgrouprights-group": "Полга",
        "rollbackfailed": "Потафтомась изь лисе",
        "cantrollback": "Аш кода петнемать потафтомс; мекольце путысь ульсь тя лопать анцек фкя тиикс.",
        "alreadyrolled": "Аш кода меки кевордамс [[:$1]]нь мекольце петнемать, конань тись [[User:$2|$2]] ([[User talk:$2|Корхнема]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nиля тиись сонь петезе эли кевордазе ни.\n\nМекольце петнема  тизе [[User:$3|$3]] ([[User talk:$3|Корхнема]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Петнема лихтема ульсь: \"''$1''\".",
+       "editcomment": "Петнема лихтема ульсь: <em>$1</em>.",
        "revertpage": "Петнематнень мърдафтозь [[Special:Contributions/$2|$2]] ([[User talk:$2|Корхнема]]) сядынгольдень верзиес мърдафтозе [[User:$1|$1]]",
        "rollback-success": "Петнематнень мърдафтозе $1; сядынгольдень верзиес мърдафтозе $2.",
        "sessionfailure": "Улема, лиссь прябала тонь сувама пингста; програмонь якамась лотказевсь сувамать върьгятемада аралама туфталонкса. Эняльттяма, люпштак \"меки\" ди одонзафтт лопать, конаста тон сать, меле тик сембе одукс.",
        "movelogpagetext": "Ала од вастс шашфтф лопатнень лувомась.",
        "movereason": "Туфтал:",
        "revertmove": "веляфтомс",
-       "delete_and_move": "Нардамс эди од вастс шашфтомс",
        "delete_and_move_text": "==Нардамась вешф==\nЭрявкстовсь лопа \"[[:$1]]\" ульсь ни.\nМяльце нардамонза од вастс шашфтомань шумордаманкса?",
        "delete_and_move_confirm": "Ина, нардак лопать",
        "delete_and_move_reason": "Нардаф од вастс шашфтомань шумордамонкса",
index eaf9f06..83925c2 100644 (file)
@@ -15,6 +15,7 @@
        "tog-hideminor": "Hanitsika ny fiovana madinika ao amin'ny fiovana farany",
        "tog-hidepatrolled": "Hanitrika ny fiovana voaara-maso ao amin'ny fiovana farany",
        "tog-newpageshidepatrolled": "Hanitsika ny pejy voaara-maso ao amin'ny pejy vaovao",
+       "tog-hidecategorization": "Hanafina ny fansokajiana pejy",
        "tog-extendwatchlist": "Hanitatra ny lisitra fanaraham-pejy mba haneho ny fanovana rehetra fa tsy ny vaovao indrindra fotsiny",
        "tog-usenewrc": "Hampivondrona ny fiovana araky ny pejy ao amin'ny fiovana farany ary ao amin'ny lisitry ny pejy arahana",
        "tog-numberheadings": "Asio laharany ny lohateny",
        "tog-watchlisthidebots": "Asitriho amin'ny lisitro ny fanovàna nataon'ny rôbô",
        "tog-watchlisthideminor": "Tsy aseho ny fisoloina kely anatin'ny pejy fanaraha-maso",
        "tog-watchlisthideliu": "Asitriho amin'ny lisitro ny fanovàna nataon'ny mpikambana hafa",
+       "tog-watchlistreloadautomatically": "Hanavao ny lisitry ny pejy arahana rehefa misy sivana niova (mila JavaScript)",
        "tog-watchlisthideanons": "Asitriho amin'ny lisitro ny fanovana nataon'ny IP",
        "tog-watchlisthidepatrolled": "Asitriho amin'ny lisitro ny fanovàna efa nojerena",
+       "tog-watchlisthidecategorization": "Hanafina ny fanasokajiana pejy",
        "tog-ccmeonemails": "Andefaso tahaka ny imailaka alefako amin'ny mpikambana hafa",
        "tog-diffonly": "Aza ampiseho ny voatonin'ny pejy eo amban'ny diff",
        "tog-showhiddencats": "Asehoy ny sokajy misitrika",
        "october-date": "$1 Oktobra",
        "november-date": "$1 Novambra",
        "december-date": "$1 Desambra",
+       "period-am": "Mrn",
+       "period-pm": "Hrv",
        "pagecategories": "{{PLURAL:$1|Sokajy|Sokajy}}",
        "category_header": "Ireo lahatsoratra ao amin'ny sokajy \"$1\"",
        "subcategories": "Zana-tsokajy",
        "morenotlisted": "Tsy feno ity lisitra ity.",
        "mypage": "Pejy",
        "mytalk": "Dinika",
-       "anontalk": "Resaka ho an'io adiresy IP io",
+       "anontalk": "Pejin-dresaka",
        "navigation": "Fikarohana",
        "and": "&#32;sy",
        "qbfind": "Tadiavina",
        "nstab-template": "Endrika",
        "nstab-help": "Fanoroana",
        "nstab-category": "Sokajy",
+       "mainpage-nstab": "Fandraisana",
        "nosuchaction": "Asa tsy fantatra",
        "nosuchactiontext": "Ny asa voafaritra tao amin'ny URL dia tsy fantatr'ity wiki ity",
        "nosuchspecialpage": "Tsy misy io pejy manokana io",
        "databaseerror-query": "Hataka: $1",
        "databaseerror-function": "Lefa: $1",
        "databaseerror-error": "Hadisoana: $1",
+       "transaction-duration-limit-exceeded": "Mba tsy hisian'ny fihalavan'ny fotoam-pandikana be loatra, dia nofoanana ity asa ity satria nihoatra ny fetra $2 {{PLURAL:$2}}segondra ny fotoana nalain'ny asa fanoratana ($1 s). Raha manova zavatra mibolongana be indray mandeha ianao dia zarazarao ho kelikely ny zavatra ataonao.",
        "laggedslavemode": "Fampitandremana: Mety ho tsy nisy fanovana vao haingana angamba io pejy io",
        "readonly": "Mihidy ny banky angona",
        "enterlockreason": "Manomeza antony hanidiana ny pejy, ahitana ny fotoana tokony hamahana izay fihidiana izay",
-       "readonlytext": "\nMihidy vonjimaika aloha ny banky angona ka tsy afaka anaovana fanovana na fanampiana vaovao. Azo inoana fa asa fikolokoloana mahazatra ihany io ka rehefa vita izay asa izay dia hverina amin'ny laoniny izy.\n\nNy mpitantana nanidy azy dia nametraka ito fanazavana ito: $1",
+       "readonlytext": "Mihidy ny banky angona ka tsy afaka anaovana fanovana na fanampiana vaovao. Azo inoana fa asa fikolokoloana mahazatra ihany io ka rehefa vita izay asa izay dia hverina amin'ny laoniny izy.\n\nNy mpitantana nanidy azy dia nametraka ito fanazavana ito: $1",
        "missing-article": "Tsy hitan'ny banky angona ilay lahatsoratra pejy iray tokony ho hitany, mitondra ny lohateny  « $1 » $2.\n\nMatetika, izany no mitranga rehefa manaraka rohy makany amina diff efa lany andro na efa makany amin'ny pejy tantaran'ny pejy voafafa iray.\n\nRaha tsy izany, mety misy olana ao amin'ny rindrankajin'ny lohamilina.\nLazao any amin'ny  [[Special:ListUsers/sysop|mpandrindra]] io olana io ary aza adino no manome azy ny URL an'ilay rohy.",
        "missingarticle-rev": "(famerenana faha : $1)",
        "missingarticle-diff": "(diff : $1 ; $2)",
        "viewsource": "Hijery fango",
        "viewsource-title": "Hijery ny fangon'i $1",
        "actionthrottled": "Tao voafetra",
-       "actionthrottledtext": "Mba hiady amin'ny spam, ny hatetika momba ny fanaovana io otao io dia ferana ho foifoy, ary niaotra io fetra io ianao.\nAndramo indray afaka minitra vitsivitsy.",
+       "actionthrottledtext": "Mba hiady amin'ny fanararaotana dia voafetra ara-katetika ny fanaovana ity zavatra ity, ary nihoatra izany fetra izany ianao.\n\nAndramo indray afaka minitra vitsivitsy.",
        "protectedpagetext": "Narovana mba tsy hisiana fanovana na tao hafa ity pejy ity.",
        "viewsourcetext": "Azonao atao no mijery sy mandrika ny votoatin'ity pejy ity.",
        "viewyourtext": "Azonao atao ny mijery ary mandika ny fangon'ny <strong>fanovanao</strong> tamin'ity pejy ity.",
        "myprivateinfoprotected": "Tsy manana alalana ahafahana manova ny fampahalalana tsy sarababem-bahoakanao ianao.",
        "mypreferencesprotected": "Tsy manana alalana ahafahana manova ny safidinao ianao.",
        "ns-specialprotected": "Tsy afaka ovaina ny pejy anatin'ny toeran'anarana « {{ns:special}} » .",
-       "titleprotected": "Voaaron'i [[User:$1|$1]] ity lohateny ity mba tsy hamorona pejy mitondra ity anarana ity.\nNy antony napetraka dia : « ''$2'' ».",
-       "filereadonlyerror": "Tsy afaka manova ny rakitra \"$1\" satria famakiana ihany no tao azo atao amin'i \"$2\".\n\nNy antony nomen'ny mpandrindra nanidy azy: \"$3\".",
+       "titleprotected": "Voaaron'i [[User:$1|$1]] ity lohateny ity mba tsy hamorona pejy mitondra ity anarana ity.\nNy antony napetraka dia : <em>$2</em>.",
+       "filereadonlyerror": "Tsy afaka manova ny rakitra \"$1\" satria famakiana ihany no azo atao amin'i \"$2\".\n\nNy antony nomen'ny mpandrindra nanidy azy: \"$3\".",
        "invalidtitle-knownnamespace": "Lohateny tsy miady amin'ny fepetra miaraka amin'ny anaram-balam-pejy \"$2\" ary soratra \"$3\"",
        "invalidtitle-unknownnamespace": "Lohateny tsy ekena miaraka amin'ny laharana anaran-tsehatra $1 ary soratra \"$2\"",
        "exception-nologin": "Tsy tafiditra",
        "virus-scanfailed": "Tsy mety alefa ny fitadiavana (kaody $1)",
        "virus-unknownscanner": "Tsy fantatra io Antivirus io :",
        "logouttext": "'''Efa tafavoaka amin'izay ianao.'''\n\nFantaro fa mety mbola misy ireo pejy milaza anao fa mbola tafiditra raha tsy namafa ny pejy voatakona (cache) ianao.",
+       "cannotlogoutnow-title": "Tsy afaka mivoaka amin'izao fotoana izao",
+       "cannotlogoutnow-text": "Tsy afaka mivoaka rehetra mampiasa $1.",
        "welcomeuser": "Tonga soa, $1",
        "welcomecreation-msg": "Noforonina ny aontinao.\nAza adin ny manova ny [[Special:Preferences|safidinao ro amin'i{{SITENAME}}]].",
        "yourname": "Solonanarana",
        "remembermypassword": "{{PLURAL:}}Tadidio ny tenimiafiko (mandritry ny $1 andro fara-fahabetsany)",
        "userlogin-remembermypassword": "Tadidio aho",
        "userlogin-signwithsecure": "Fidirana amin'ny alalan'ny fanohizana azo antoka",
+       "cannotloginnow-title": "Tsy afaka miditra izao",
+       "cannotloginnow-text": "Tsy afaka miditra rehefa mampiasa $1.",
        "yourdomainname": "faritra (domaine) misy anao",
        "password-change-forbidden": "Tsy afaka manova ny tenimiafina ianao eto amin'ity wiki ity.",
        "externaldberror": "Nisy tsy fetezana angamba teo amin'ny fanamarinana anao tamin'ny sehatra ivelan'ity wiki ity, na tsy manana alalana hanova ny kaontinao ivelany ianao.",
        "createaccountreason": "Antony :",
        "createacct-reason": "Antony",
        "createacct-reason-ph": "Inona ny antony hamoronanao kaonty hafa",
-       "createacct-captcha": "Fitsapana ny antoka",
-       "createacct-imgcaptcha-ph": "Atsofohy ny teny hitanao eo ambony",
        "createacct-submit": "Hamorona ny kaontinao",
        "createacct-another-submit": "Hamorona kaonty vaovao",
        "createacct-benefit-heading": "Olona tahaka ianao no manoratra eo amin'i {{SITENAME}}",
        "createacct-benefit-body2": "pejy{{PLURAL:$1}}",
        "createacct-benefit-body3": "mpandray anjara vao haingana{{PLURAL:$1}}",
        "badretype": "Tsy mitovy ny tenimiafina nampidirinao.",
+       "usernameinprogress": "Efa am-panatanterahana ny famoronan-kaonty amin'ity anaram-pikambana ity.\nMiandrasa azafady.",
        "userexists": "Efa miasa io anaram-pikambana natsofokao io.\nAnarana hafa safidiana.",
        "loginerror": "Tsy fetezana teo amin'ny fidirana",
        "createacct-error": "Hadisoana tam-pamoronana ny kaonty",
        "createaccount-title": "Fanokafana kaonty ho an'ny/i {{SITENAME}}",
        "createaccount-text": "Nisy olona nanokatra kaonty ho an'ny adiresy imailakao eo amin'ny {{SITENAME}} ($4) mitondra anarana « $2 » miaraka amin'ny tenimiafina « $3 ».<br />\nTokony miditra na manokatra kaonty ianao, ary ovay ny tenimiafinao dien-izao.\n\nAza mijery ity hafatra ity ianao raha voaforona an-tsifetezana ilay kaonty io.",
        "login-throttled": "Betsaka loatra ny andram-pidirana nataonao.\n\nAndraso $1 alohan'ny mamerina.",
-       "login-abort-generic": "Tsy nahomby ny fanandramanao niditra",
+       "login-abort-generic": "Tsy nahomby ny fanandramanao niditra - najanona",
        "login-migrated-generic": "Efa nafindra ny kaontinao, ary efa tsy misy eto amin'ity wiki ity intsony ny anaram-pikamnbanao",
        "loginlanguagelabel": "fiteny : $1",
        "suspicious-userlogout": "Ny fangataham-pialanao dia tsy nekena satria ohatry ny nalfan'ny mpizahan-tsehatra simba izy na kasy ny proxy.",
        "resetpass_submit": "Ovay ny tenimiafina ary midira",
        "changepassword-success": "Voaova soa aman-tsara ny tenimiafinao!",
        "changepassword-throttled": "Betsaka loatra ny andram-pidirana nataonao.\nAndraso $1 aloha ny mamerina.",
+       "botpasswords": "Tenimiafin-drôbô",
+       "botpasswords-disabled": "Tsy ampiasaina ny tenimiafin-drôbô.",
+       "botpasswords-existing": "Tenimiafin-drôbô efa misy",
+       "botpasswords-createnew": "Hamorona tenimiafina rôbô vaovao",
+       "botpasswords-editexisting": "Hanova tenimiafina rôbô efa misy",
+       "botpasswords-label-appid": "Anarana rôbô:",
+       "botpasswords-label-create": "Foronina",
+       "botpasswords-label-update": "Vaozina",
+       "botpasswords-label-cancel": "Avela",
+       "botpasswords-label-delete": "Fafàna",
+       "botpasswords-label-resetpassword": "Hamerina ny tenimiafina",
+       "botpasswords-label-grants": "Zo mihatra:",
+       "botpasswords-label-restrictions": "Fetran'ny fampiasana:",
+       "botpasswords-label-grants-column": "Nomena",
+       "botpasswords-bad-appid": "Tsy azo raisina ny anarana rôbô \"$1\".",
+       "botpasswords-insert-failed": "Tsy afaka nanampy ny anarana rôbô \"$1\". Tsy efa nampiana ve ilay izy?",
+       "botpasswords-update-failed": "Tsy afaka nanavao ny anarana rôbô \"$1\". Nofafàna ve ilay izy?",
+       "botpasswords-created-title": "Noforonina ilay tenimiafina rôbô",
+       "botpasswords-created-body": "Noforonina ny tenimiafina rôbô \"$1\".",
+       "botpasswords-updated-title": "Nohavaozina ny tenimiafina rôbô",
+       "botpasswords-updated-body": "Nohavaozina ny tenimiafina rôbô \"$1\".",
+       "botpasswords-deleted-title": "Nofafàna ny tenimiafina rôbô",
+       "botpasswords-deleted-body": "Nofafàna ny tenimiafina rôbô \"$1\".",
+       "botpasswords-newpassword": "Ny tenimiafina idirana amin'i <strong>$1</strong> dia <strong>$2</strong>. <em>Raiketo ilay izy ho an'ny fampiasàna any aoriana any.</em>",
+       "botpasswords-no-provider": "Tsy afaka antsoina ny BotPasswordsSessionProvider.",
+       "botpasswords-restriction-failed": "Manakana ity fidirana ity ny fepetra mifehy ny tenimiafina rôbô.",
        "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)\nMety efa nanova tenimiafina na nanontany tenimiafina miserana angamba ianao.",
+       "resetpass-wrong-oldpass": "Tsy izy ny tenimiafinao (ankehitriny na vonjimaika)\nMety efa nanova tenimiafina na nangataka hahazo tenimiafina vonjimaika 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.\nMba hamaranana ny fidirana, dia tsy maintsy mampiditra tenimiafina vaovao eto ianao :",
        "resetpass-temp-password": "Tenimiafina miserana :",
        "passwordreset-emailtext-ip": "Nisy olona (izay mety ianao, avy amin'ny adiresy IP $1) nangataka ny hamerina ny tenimiafin'ny kaontim-pikambany ho an'i {{SITENAME}} ($4). Mampiasa ity adiresy mailaka ity {{PLURAL:$3|ity kaontim-pikambana mpikambana io|ireo kaontim-mpikambana ireo}}:\n\n$2\n\nHitsahatra afaka $5 andro {{PLURAL:$3|io tenimiafina io|ireo tenimiafina ireo}}.\nTokony miditra ianao ary mifidy tenimiafina vaovao. Raha misy olon-kafa nanao ity hataka ity, na efa tadidinao indray ilay tenimiafinao taloha, ary raha tsy tia hanova azy intsony, azonao tsy raharahiana ity hafatra ity ary mitohy mampiasa ny tenimiafinao taloha.",
        "passwordreset-emailtext-user": "Nisy mpikambana mitondra anarana $1 eo amin'i {{SITENAME}} nangataka fampatsiahivana mikasika ny kaontinao eo amin'i {{SITENAME}} ($4). Manana io adiresy imailaka {{PLURAL:$3|io kaontim-pikambana io|ireo kaontim-pikambana ireo}} :\n\n$2\n\nHitsahatra afaka {{PLURAL:$5|iray|$5}} andro {{PLURAL:$3|io|ireo}} tenimiafina {{PLURAL:$3|io|ireo}}. Mila miditra dien'izao ianao izao ary mifidy tenimiafina vaovao. Raha tsy avy aminao ity hataka ity na efa nahatadidy ny tenimiafinao taloha ianao, ary raha tsy tianao hovaina intsony ilay tenimiafinao, dia azonao tsy raharahiana ity hafatra ity ary mampiasa ny tenimiafinao taloha.",
        "passwordreset-emailelement": "Anaram-pikambana : \n$1\n\nTenimiafina miserana : \n$2",
-       "passwordreset-emailsent": "Lasa ny mailaka famerenana tenimiafina.",
+       "passwordreset-emailsentemail": "Lasa ny mailaka famerenana tenimiafina.",
        "passwordreset-emailsent-capture": "Lasa ilay mailaka famerenana tenimiafina, izay aseho eo ambany.",
        "passwordreset-emailerror-capture": "Nosoratana ilay mailaka famerenana tenimiafina, izay aseho eo ambany, fa tsy tafalefa tany amin'ilay mpikambana ilay izy : $1{{GENDER:$2}}",
        "changeemail": "Hanova ny adiresy imailaka",
        "missingcommentheader": "'''Fampahatsiahivana :''' Tsy nampiditra lohateny amin'ity resaka ity ianao.\nRaha tsindrianao indray eo amin'ny « {{MediaWiki:Savearticle}} » ho voatahiry tsy misy lohateny ny fanovananao.",
        "summary-preview": "Topi-maso n'ilay ambangovangony :",
        "subject-preview": "Topi maso ny lazaina :",
+       "previewerrortext": "Nisy hadisoana nitranga tamin'ny fanandramana namoaka topi-mason'ny fanovanao",
        "blockedtitle": "Mpikambana voasakana",
        "blockedtext": "'''Voasakana ny solonanaranao na ny adiresy IP anao.'''\n\nNataon'i $1 ny fisakanana.\nNy antony : ''$2''.\n\n* Fanombohan'ilay fisakanana : $8\n* Farany : $6\n* Kaonty voasakana : $7.\n\nAfaka antsoinao i $1 na [[{{MediaWiki:Grouppage-sysop}}|ny mpandrindra]] mba hiresaka mombamomba n'izany.\nAfaka andefasanao imailaka ra nampiditra ny adiresy imailakanao ianao ao anatin'ny [[Special:Preferences|mombamombanao]].\n'''$3''' ny adiresy IP-nao ary ny ''identifiant de blocage''-nao dia #$5.\nAsio ao anaty ny fangatahanao io adiresy io.",
        "autoblockedtext": "Voasakana ny adiresy IP anareo satria nampiasain'ny olon-kafa io adiresy ampiasainao io. Ary voasakan'i $1 ilay olona nampiasa ny adiresinao.<br />\nIty ny antony navoakany\n\n:''$2''\n\n* nanomboka tamin'ny $8 ilay fisakanana\n* Amin'ny $6 ilay fisakanana no mijanona\n* $7 no anaran'ilay kaonty voasakana\n\nAfaka antsoinao i $1 na miantso ny [[{{MediaWiki:Grouppage-sysop}}|mpandrindra]] mba hiresaka momba ny fanakananao.\n\nJereo koa fa tsy afaka mampiasa ny asa ''emailuser'' ianao ra tsy nanometraka ny adiresy imailakao anatin'ny [[Special:Preferences|safidinao]]. Jereo koa ra tsy nesorinao ny asa ''emailuser''.\n\n$3 izao ny adiresinao, ary ny isa ny fisakananai dia $5.\nSoraty ireo fanoroana ireo anatin'ny fangatahana ataonao.",
        "previewnote": "'''Fantaro fa topi-maso fotsiny ity.'''\nMbola tsy voatahiry ny fanovanao !",
        "continue-editing": "Hanohy ny fanovàna",
        "previewconflict": "\nIty topi-maso ity no mifanaraka amin'ny lahatsoratra ao amin'ny faritra eo ambony,\nary toy izao no ho fisehon'ny pejy raha misafidy ny hitahiry azy ianao.",
-       "session_fail_preview": "'''Tsy afaka tahirizina ny fanovanao noho ny haverezan'ny fampahalalàna mikasikan'ny fidiranao. Andramo fanindroany azafady.\nRaha mbola tsy mandeha foana dia [[Special:UserLogout|mivoaha]] amin'ny kaontinao ary miverena miditra.'''",
+       "session_fail_preview": "Miala tsiny indrindra fa tsy afaka nandraikitra ny fiovanao izahay noho ny fahaverezana fampahalalana mikasika ny fidiranao teto.\n\nMety nivoaka ianao. <strong>Jereo raha mbola tafiditra ianao, ary avereno indray</strong>\nRaha tsy mbola mandeha izany, dia [[special:Userlogout|mivoaha]] amin'ny kaontinao ary midira indray, ary jereo raha manaiky cookies avy amin'ity tranonkala ity ny mpitety tranonkalanao.",
        "session_fail_preview_html": "'''Tsy afaka tehirizinay ny fanovanao noho ny haverezan'ny fampahalalàna momba ny session-nao.\n\n'''Satria nalefan'i {{SITENAME}} HTML tsotra, nasitrika ny topi-paso mba tsy hisy fanafihana atao amin'ny Javascript.\n\n'''Raha ara-dalàna ny fanovanao, avereno.'''\nRaha mbola tsy mandeha foana ilay izy, [[Special:UserLogout|mivoaha]] ary midira",
        "token_suffix_mismatch": "'''Tsy nekena ny fanovanao satria tsy voakaodin'ny rindrankajinao tsara ny soratra tao anatin'ny identifiant de modification.'''\nNilaina io tsy fanekena io mba tsy hikatso ilay pejy.\nMisy io olana io rehefa mamppiasa serveur mandataire tsy manana anarana sy manan-olana eo amin'ny tranonkala ianao.",
        "edit_form_incomplete": "'''Misy tsy tonga tany amin'ny lohamilina ny singan'ity pejy fenoina ity. Azonao ampiana ny mpandika hafa amin'ny famoronana ny fanazavana ity pejy ity.",
        "undo-summary-username-hidden": "Namafa ny famerenana $1 nataom-pikambana afenina",
        "cantcreateaccounttitle": "Tsy afaka manokatra kaonty ianao.",
        "cantcreateaccount-text": "Voasakan'i [[User:$3|$3]] ny fanokafana kaonty avy amin'ity adiresy IP (<b>$1</b>)\n\n''$2'' ny antony.",
-       "cantcreateaccount-range-text": "Nosakanan'i [[User:$3|$3]] ny fanokafana kaonty avy amin'ny adiresy IP ao amin'ny elanelana '''$1''' izay ahitana ny adiresy IP-nao ('''$4''').",
+       "cantcreateaccount-range-text": "Nosakanan'i [[User:$3|$3]] ny fanokafana kaonty avy amin'ny adiresy IP ao amin'ny elanelana <strong>$1</strong> izay ahitana ny adiresy IP-nao (<strong>$4</strong>).",
        "viewpagelogs": "Hijery ny fanovan'ity pejy ity",
        "nohistory": "Tsy manana tantaram-panovana io pejy io.",
        "currentrev": "Votoatiny ankehitriny",
        "mergehistory-empty": "tsy misy version azo hatambarana",
        "mergehistory-done": "{{PLURAL:$3|}}Versiona $3 an'i $1 no natsonika tamin'ny [[:$2]]",
        "mergehistory-fail": "Tsy afaka manatambatra ny tantara(n'asa). Avereno checheo ny pejy sy ny daty.",
+       "mergehistory-fail-bad-timestamp": "Tsy ekena ny daty sy ora.",
+       "mergehistory-fail-invalid-source": "Tsy ekena ny pejy loharano.",
+       "mergehistory-fail-invalid-dest": "Tsy ekena ny pejy tanjona.",
+       "mergehistory-fail-permission": "Zo tsy ampy amin'ny fampiraisana tantaram-pejy.",
+       "mergehistory-fail-self-merge": "Mitovy ny pejy loharano sy tanjona.",
        "mergehistory-no-source": "Tsy misy ny pejy avy amin'ny $1.",
        "mergehistory-no-destination": "Tsy misy ilay pejy tanjona $1.",
        "mergehistory-invalid-source": "Tokony manana lohateny azo ampiasaina ny pejy fiavina",
        "columns": "Tsanganana/Tioba :",
        "searchresultshead": "Fikarohana",
        "stub-threshold": "Fetra ambony ho an'i <a href=\"#\" class=\"stub\">rohim-bangovango</a> (oktety):",
+       "stub-threshold-sample-link": "santiôna",
        "stub-threshold-disabled": "Tsy alefa",
        "recentchangesdays": "Isan'ny andro ho aseho amin'ny fiovana farany:",
        "recentchangesdays-max": "($1 andro{{PLURAL:$1||}} fara-faha betsany)",
        "prefs-help-recentchangescount": "Misy ny fiovana farany, ny tantaram-pejy ary ny laogy",
        "prefs-help-watchlist-token2": "Ity ny lakilen'ny topaka Web ny lisitra arahanao. Afaka mamangy ny lisitra arahanao izay mahalala io lakileo io, ka aza zarazaraina ilay izy. Raha ilainao izany dia afaka [[Special:ResetTokens|manavao izy io ianao]]",
        "savedprefs": "Voatahiry ny mombamomba anao.",
+       "savedrights": "Voatahiry soa aman-tsara ny zom-pikambana ho an'i {{GENDER:$1|$1}}.",
        "timezonelegend": "Faritr'ora :",
        "localtime": "Ora an-toerana",
        "timezoneuseserverdefault": "Sanda tsipalotry ny wiki ($1)",
        "prefs-help-prefershttps": "Hihatra amin'ny fidiranao manaraka ity safidy ity.",
        "prefswarning-warning": "Efa nanova tamin'ny safidinao tsy mbola voatahiry ianao. Raha miala amin'ity pejy ity amin'ny alalan'ny fanindriana an'i \"$1\" ianao dia tsy ho voavao ny safidinao.",
        "prefs-tabs-navigation-hint": "Torohevitra: afaka mampiasa ny zana-tsipika havia ary havanana ianao ho an'ny fitetezana ny vakizoro ao amin'ny lisi-bakizoro",
-       "email-address-validity-valid": "Adiresy imailaka mameno fepetra",
-       "email-address-validity-invalid": "Ilaina ny mametraka adiresy imailaka mameno fepetra",
        "userrights": "Fandrindràna ny fahefahan'ny mpikambana",
        "userrights-lookup-user": "Handrindra vondrom-pikambana",
        "userrights-user-editname": "Manomeza solonanarana:",
-       "editusergroup": "Hanova satan'ny mpikambana",
-       "editinguser": "Fanovana ny zon'ny mpikambana '''[[User:$1|$1]]''' $2",
+       "editusergroup": "Hanova satan'ny {{GENDER:$1|}}mpikambana",
+       "editinguser": "Fanovana ny zon'ny mpikambana <strong>{{GENDER:$1|}}[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Hanova vondrom-pikambana",
-       "saveusergroups": "Tehirizo ny vondrom-pikambana",
+       "saveusergroups": "{{GENDER:$1|}}Tehirizo ny vondrom-pikambana",
        "userrights-groupsmember": "Mpikambana amin'ny vondrona:",
        "userrights-groupsmember-auto": "Mpikambana tsy dia voalazan'i :",
        "userrights-groups-help": "Azonao atao ny manova ny vondrona isian'ity mpikambana ity.\n* Ny boaty voa-\"check\" dia midika fa ao amin'io vondrona io ilay mpikambana.\n* Ny boaty tsy voa-\"check\" dia midika fa tsy ao amin'io vondrona io ilay mpikambana.\n* Ny * dia fa tsy azonao esorina amin'ilay vondrona nampianao/nesorinao ilay mpikambana.",
        "userrights-changeable-col": "Ny gropy azonao ovaina",
        "userrights-unchangeable-col": "Ny gropy tsy azonao ovaina",
        "userrights-conflict": "Fifandonana fanovana zom-pikambana! Avereno vakiana ary marino ny fanovanao.",
-       "userrights-removed-self": "Afakao soa aman-tsara ny zonao. Noho izany, tsy afaka mijery amin'ilay pejy intsony ianao.",
+       "userrights-removed-self": "Nanala ny zonao ianao. Noho izany dia tsy afaka mitsidika ity pejy ity intsony ianao.",
        "group": "Gropy :",
        "group-user": "Mpikambana",
        "group-autoconfirmed": "Mpikambana voamarina",
        "group-bot": "Mpikambana rôbô",
        "group-sysop": "Mpandrindra",
        "group-bureaucrat": "Borôkraty",
-       "group-suppress": "Mpitondra",
+       "group-suppress": "Mpametra",
        "group-all": "(izy rehetra)",
        "group-user-member": "{{GENDER:$1|mpikambana}}",
        "group-autoconfirmed-member": "{{GENDER:$1|Mpikambana voamarina ho azy}}",
        "group-bot-member": "{{GENDER:$1|Mpikambana rôbô}}",
        "group-sysop-member": "{{GENDER:$1|Mpandrindra}}",
        "group-bureaucrat-member": "{{GENDER:$1|Borôkraty}}",
-       "group-suppress-member": "{{GENDER:$1|Mpitondra}}",
+       "group-suppress-member": "{{GENDER:$1|mpamafa}}",
        "grouppage-user": "{{ns:project}}:Mpikambana",
        "grouppage-autoconfirmed": "{{ns:project}}:Mpikambana Voamafy",
        "grouppage-bot": "{{ns:project}}:Mpikambana rôbô",
        "grouppage-sysop": "{{ns:project}}:Mpandrindra",
        "grouppage-bureaucrat": "{{ns:project}}:Borôkraty",
-       "grouppage-suppress": "{{ns:project}}:Oversight",
+       "grouppage-suppress": "{{ns:project}}:Mpamafa",
        "right-read": "Mamaky ny pejy",
        "right-edit": "Manova ny pejy",
        "right-createpage": "Manamboatra pejy (tsy pejin-dresaka)",
        "right-createtalk": "Mamorona pejin-dresaka",
        "right-createaccount": "Manamboatra kaonty",
+       "right-autocreateaccount": "Hiditra ho azy miaraka amina kaontim-pikambana ivelany",
        "right-minoredit": "Marihana ho fanovana madinika",
        "right-move": "Manakisaka pejy",
        "right-move-subpages": "Manakisaka pejy miarak'amin'ny zana-pejiny",
        "right-blockemail": "Manakana ny mpikambana mba tsy handefa imailaka",
        "right-hideuser": "Manakana mpikambana iray amin'ny fanitrihana ny anarany amin'ny vahoaka",
        "right-ipblock-exempt": "Tsy voakasiky ny fanakanana IP, ny fanakanana mandeha ho azy (aotômatika) ary ny fanakanana sampana IP",
-       "right-proxyunbannable": "Tsy voakasiky ny fanakana mande hoazy avy amin'ny proxy",
        "right-unblockself": "Manala ny hidin'ny tena",
        "right-protect": "Manova ny lenta fiarovan'ny pejy sy manova ny pejy voaaro miriana",
        "right-editprotected": "Manova pejy voaaro (tsy misy fiarovana en cascade)",
        "right-sendemail": "Mandefa imailaka any amin'ny mpikambana hafa",
        "right-passwordreset": "Hijery ny imailaka famerenana ny tenimiafina",
        "right-managechangetags": "Mamorona ary mamafa [[Special:Tags|balizy]] ao amin'ny banky angona",
+       "grant-generic": "\"$1\" vondron-jo",
+       "grant-group-page-interaction": "Mifanakalo amin'ny pejy",
+       "grant-group-file-interaction": "Mifanakalo amin'ny hainoamanjery",
+       "grant-group-watchlist-interaction": "Mifanakalo amin'ny lisitry ny pejy arahanao",
+       "grant-group-email": "Mandefa mailaka",
+       "grant-group-high-volume": "Manao zavatra haingana",
+       "grant-group-administration": "Hanao asam-pandrindrana",
+       "grant-group-other": "Manao hetsika maro samihafa",
+       "grant-blockusers": "Manakana sy manala sakan'ny mpikambana",
+       "grant-createaccount": "Hamorona kaonty",
+       "grant-createeditmovepage": "Mamorona, manova, ary manisaka pejy",
+       "grant-delete": "Mamafa pejy, versiona ary iditry ny laogy",
+       "grant-editinterface": "Manova ny CSS/Javascript an'ny mpikambana ary anaran-tsehatra MediaWiki",
+       "grant-editmycssjs": "Manova CSS/Javascript anao",
+       "grant-editmyoptions": "Hanova ny safidim-pikambanao",
+       "grant-editmywatchlist": "Manova ny lisitry ny pejy arahana",
+       "grant-editpage": "Manova ny pejy efa misy",
+       "grant-editprotected": "Manova ny pejy voaaro",
+       "grant-highvolume": "Manova pejy ambongadiny",
+       "grant-oversight": "Manafina mpikambana ary mamafa versiona",
+       "grant-patrol": "Manamarika ireo fiovam-pejy ho voatsidika",
+       "grant-protect": "Miaro ary manala ny fiavoram-pejy",
+       "grant-rollback": "Mamafa fiovana amin'ny pejy",
+       "grant-sendemail": "Mandefa mailaka amin'ny mpikambana hafa",
+       "grant-uploadeditmovefile": "Manondrana, manova ary manisaka rakitra",
+       "grant-uploadfile": "Mampiditra rakitra vaovao",
+       "grant-basic": "Zo fototra",
+       "grant-viewdeleted": "Mitsidika ireo rakitra ary pejy voafafa",
+       "grant-viewmywatchlist": "Hijery ny lisitry ny pejy arahanao",
        "newuserlogpage": "Laogim-panokafana kaontim-pikambana",
        "newuserlogpagetext": "Ity pejy ity dia maneho ny tantaran'asan'ny fampidirana mpikambana vaovao.",
        "rightslog": "Laogim-piovan'ny zom-pikambana",
        "action-createpage": "hanao pejy",
        "action-createtalk": "hanao pejin-dresaka",
        "action-createaccount": "amboary io kaontim-pikambana io",
+       "action-autocreateaccount": "foronina ho azy io kaontim-pikambana ivelany io",
        "action-history": "hijery ny tantaran'ity pejy ity",
        "action-minoredit": "Mariho ho kely ity fanovana ity",
        "action-move": "hamindra io pejy io",
        "recentchanges-label-bot": "Nataon'ny rôbô ity fanovana ity.",
        "recentchanges-label-unpatrolled": "Ity fanovana ity dia mbola tsy voamarina",
        "recentchanges-label-plusminus": "IO ny isan'ny oktety niova tamin'ilay pejy",
-       "recentchanges-legend-heading": "'''Maribolana:'''",
+       "recentchanges-legend-heading": "<strong>Maribolana:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (jereo koa ny [[Special:NewPage|lisitry ny pejy vaovao]])",
+       "recentchanges-submit": "Aseho",
        "rcnotefrom": "Eo ambany dia ahitana ireo fiovana{{PLURAL:$5}} hatry ny <strong>$3, $4</strong> (naseho hatramin'ny <strong>$1</strong>).",
        "rclistfrom": "Asehoy izay vao niova manomboka ny $3 $2",
        "rcshowhideminor": "$1 ny fanovàna kely",
        "rcshowhidemine": "$1 ny fanovàko",
        "rcshowhidemine-show": "Haneho",
        "rcshowhidemine-hide": "Hanafina",
+       "rcshowhidecategorization": "$1 ny fisokajiam-pejy",
+       "rcshowhidecategorization-show": "Aseho",
+       "rcshowhidecategorization-hide": "Afenina",
        "rclinks": "Asehoy ny $1 niova farany tato anatin'ny $2 andro<br />$3",
        "diff": "Fampitahana",
        "hist": "tant.",
        "recentchangeslinked-summary": "Mampiseho ny fanovàna vao haingana ity pejy manokana ity. Voasoratra amin'ny '''sora-matavy''' ny lohaten'ny [[Special:Watchlist|pejy arahinao-maso]].",
        "recentchangeslinked-page": "anaram-pejy :",
        "recentchangeslinked-to": "Ampisehoy ny fanovàn'ny pejy misy rohy makany amin'ny pejy fa tsy atao mivadika",
+       "recentchanges-page-added-to-category": "Nampiana tamin'ny sokajy [[:$1]]",
+       "recentchanges-page-removed-from-category": "Nesorina tamin'ny sokajy i [[:$1]]",
+       "autochange-username": "Fiovàna vita ho azy MediaWiki",
        "upload": "Handefa rakitra",
        "uploadbtn": "Alefaso ny rakitra",
        "reuploaddesc": "Miverena any amin'ny fisy fandefasan-drakitra.",
        "watchthisupload": "Araho maso ity rakitra ity",
        "filewasdeleted": "Efa nampidirina tato ary efa voafafa ny rakitra manana io anarana io.\nTokony marina ny $1 aloha ny manao fampidirana vaovao.",
        "filename-bad-prefix": "Ny anaran-drakitra ho ampidirinareo dia manomboka amin'ny '''« $1 »''', anarana omena an'ny fakan-tsary elektirônika.\nMisafidia anaran-drakitra mambangovango.",
-       "upload-success-subj": "Voaray soa aman-tsara ny rakitra",
-       "upload-success-msg": "Vita soa aman-tsara ilay fandefasan-drakitra avy amin'i [$2]. Eto ny toerana mety ahitanao ny rakitrao : [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Olana nitranga teo am-pandefasana",
-       "upload-failure-msg": "Nisy olana tamin'ny fampidiranao [$2] :\n\n$1",
-       "upload-warning-subj": "Fampitandremana rehefa mampiditra",
-       "upload-warning-msg": "Nisy olana nitranga tam-pampidirana avy amin'i [$2] afaka miverina any amin'ny [[Special:Upload/stash/$1|formiolera fampidirana]] ianao hamahana izany olana izany.",
        "upload-proto-error": "Protokolina diso",
        "upload-proto-error-text": "Mila URL manomboka amin'ny <code>http://</code> na <code>ftp://</code> ny fampidiran-drakitra.",
        "upload-file-error": "Tsy fetezana anatiny",
        "upload-dialog-button-done": "Vita",
        "upload-dialog-button-save": "Tehirizina",
        "upload-dialog-button-upload": "Mampiditra",
-       "upload-process-error": "Nisy hadisoana nitranga",
-       "upload-process-warning": "Nisy fampitandremana nitranga",
-       "upload-form-label-select-file": "Hifidy rakitra",
        "upload-form-label-infoform-title": "Antsipirihany",
        "upload-form-label-infoform-name": "Anarana",
        "upload-form-label-infoform-description": "Famisavisana",
        "upload-form-label-usage-title": "Fampiasana",
        "upload-form-label-usage-filename": "Anaran-drakitra",
+       "foreign-structured-upload-form-label-own-work": "Asako ity",
+       "foreign-structured-upload-form-label-infoform-categories": "Sokajy",
+       "foreign-structured-upload-form-label-infoform-date": "Daty",
        "backend-fail-stream": "Tsy afaka mamaky ilay rakitra $1.",
        "backend-fail-backup": "Tsy afaka mitahiry ilay rakitra $1.",
        "backend-fail-notexists": "Tsy misy ilay rakitra $1.",
        "mostrevisions": "Lahatsoratra niova im-betsaka indrindra",
        "prefixindex": "Pejy manomboka amin'ny...",
        "prefixindex-namespace": "Ny pejy rehetra mitondra ny tovona (anaran-tsehatra $1)",
+       "prefixindex-submit": "Aseho",
+       "prefixindex-strip": "Hanala ny tovona anaty lisitra",
        "shortpages": "Pejy fohy",
        "longpages": "Pejy lavabe",
        "deadendpages": "Pejy tsy mirohy",
        "protectedpages-performer": "Fiarovana ny mpikambana",
        "protectedpages-params": "Parametatry ny fiavorana",
        "protectedpages-reason": "Antony",
+       "protectedpages-submit": "Haneho pejy",
        "protectedpages-unknown-timestamp": "Tsy fantatra",
        "protectedpages-unknown-performer": "Mpikambana tsy fantatra",
        "protectedtitles": "Lohateny voaaro",
        "protectedtitlesempty": "Tsy misy lohateny voaaro miaraka amin'ireo mpihazaka ireo.",
+       "protectedtitles-submit": "Lohateny aseho",
        "listusers": "Lisitry ny mpikambana",
        "listusers-editsonly": "Ny mpikambana manam-pandraisan'anjara ihany no aseho",
        "listusers-creationsort": "Afantina amin'ny daty fanokafana",
        "usereditcount": "fanovana $1 {{PLURAL:}}",
        "usercreated": "Noforonina ny {{GENDER:$3}} $1 tamin'ny $2",
        "newpages": "Pejy vaovao",
+       "newpages-submit": "Aseho",
        "newpages-username": "Solonanarana:",
        "ancientpages": "Ireo pejy tranainy indrindra",
        "move": "Hamindra azy toerana",
        "nopagetext": "Tsy misy ny pejy tanjona nolazainareo.",
        "pager-newer-n": "$1 {{PLURAL:$1|vao haingana|vao haingana}}",
        "pager-older-n": "$1 {{PLURAL:$1|taloha|taloha}}",
-       "suppress": "Hitondra",
+       "suppress": "Fafàna",
        "querypage-disabled": "Tsy ampiasaina ity pejy manokana ity mba hitsitsy ny solosaina",
        "apihelp": "Fanoroana API",
        "apihelp-no-such-module": "Tsy hita ny joro \"$1\".",
+       "apisandbox": "Kianjam-pasika API",
+       "apisandbox-jsonly": "Ilaina amin'ny fampiasana kianjam-pasika API ny JavaScript.",
+       "apisandbox-api-disabled": "Tsy alefa amin'ity tranonkala ity ny API.",
+       "apisandbox-fullscreen": "Hanitatra solaitra",
+       "apisandbox-unfullscreen": "Haneho pejy",
+       "apisandbox-submit": "Hanao hataka",
+       "apisandbox-reset": "Diovina",
+       "apisandbox-retry": "Andramana indray",
+       "apisandbox-helpurls": "Rohim-panoroana",
+       "apisandbox-examples": "Ohatra",
+       "apisandbox-dynamic-parameters": "Parametatra miampy",
+       "apisandbox-dynamic-parameters-add-label": "Hanampy parametatra:",
+       "apisandbox-dynamic-parameters-add-placeholder": "Anaram-parametatra",
+       "apisandbox-dynamic-error-exists": "Efa misy parametatra mitondra ny anarana \"$1\".",
+       "apisandbox-deprecated-parameters": "Parametatra tola",
+       "apisandbox-fetch-token": "Fenoina ho azy ny token",
+       "apisandbox-submit-invalid-fields-title": "Misy saha tsy azo raisina",
+       "apisandbox-results": "Valiny",
+       "apisandbox-sending-request": "Mandefa hataka API...",
+       "apisandbox-loading-results": "Mandray valiny API...",
+       "apisandbox-results-error": "Nisy hadisoana tamin'ny fakàna ny valin-kataka API: $1.",
+       "apisandbox-request-url-label": "Hataka URL:",
+       "apisandbox-request-time": "Fotoana nangatahana{{PLURAL:$1|$1 ms}}",
+       "apisandbox-results-fixtoken": "Ahitsio ny token ary alefaso indray",
+       "apisandbox-results-fixtoken-fail": "Tsy afaka naka ny token \"$1\".",
+       "apisandbox-alert-page": "Tsy ekena ny votoatin'ny saha ato amin'ity pejy ity.",
        "booksources": "boky tsiahy",
        "booksources-search-legend": "hikaroka anatin'ny boky todika",
        "booksources-search": "Fikarohana",
        "specialloguserlabel": "Mpikambana nanao :",
        "speciallogtitlelabel": "Tanjona (lohateny na mpikambana) :",
        "log": "Tatitr’asa",
+       "logeventslist-submit": "Aseho",
        "all-logs-page": "Laogy rehetra",
        "alllogstext": "Seho nakambana ho an'ny laogy rehetra azo jerena eto amin'ny {{SITENAME}}.\nAzonao ferana ny fahitana ny tao amin'ny fisafidianana karazana laogy iray, anaram-pikambana iray na pejy iray (samihafa ny sorabaventy sy soramadinika).",
        "logempty": "Tsy nahitana.",
        "log-title-wildcard": "Hitady amin'ny lohateny manomboka amin'io soratra io",
        "showhideselectedlogentries": "Haneho/Hanafina ny iditry ny laogy nofidiana",
+       "checkbox-select": "Hifidy: $1",
+       "checkbox-all": "Rehetra",
+       "checkbox-none": "Tsy misy",
+       "checkbox-invert": "Avadika",
        "allpages": "Pejy rehetra",
        "nextpage": "Pejy manaraka ($1)",
        "prevpage": "Pejy taloha ($1)",
        "allpages-bad-ns": "{{SITENAME}} dia tsy manana anaran-tsehatra mitondra anarana « $1 ».",
        "allpages-hide-redirects": "Haneho ny fihodinana",
        "cachedspecial-viewing-cached-ttl": "Mijery pejy anaty takona ianao, izay namboarina $1 taona lasa.",
+       "cachedspecial-viewing-cached-ts": "Mijery versiôna voatakon'ity pejy ity ianao, izay mety efa tsy mitaratra ny zava-misy ankehitriny intsony.",
        "cachedspecial-refresh-now": "Hijery ny farany indrindra",
        "categories": "Sokajy",
+       "categories-submit": "Aseho",
        "categoriespagetext": "{{PLURAL:$1}}Ampiasain'ny rakitra na pejy ireo sokajy manaraka ireo.\nTsy hiseho eto ny [[Special:UnusedCategories|sokajy tsy miasa]].\nVangio koa ny [[Special:WantedCategories|sokajy ilaina]].",
        "categoriesfrom": "Haneho ny sokajy manomboka amin'ny :",
        "special-categories-sort-count": "afantina amin'ny isan-javatra",
        "activeusers-hidebots": "Asitriho ny robo",
        "activeusers-hidesysops": "Asitriho ny mpandrindra",
        "activeusers-noresult": "Tsy nahitana mpikambana.",
+       "activeusers-submit": "Hanseho ny mpikambana mavitrika",
        "listgrouprights": "Fahefan'ny vondrom-pikambana",
        "listgrouprights-summary": "Ity pejy ity dia ahitana ny lisitry ny vondrom-pikambana voafaritra ato amin'ity wiki ity ary ny zo ananany. Mety misy [[{{MediaWiki:Listgrouprights-helppage}}|fampahalalana fanampiny]] mikasika ny zo manokana.",
        "listgrouprights-key": "* <span class=\"listgrouprights-granted\">Zo nomena</span>\n* <span class=\"listgrouprights-revoked\">Zo nofoanana</span>",
        "listgrouprights-namespaceprotection-header": "Fifehezana amin'ny valan'anarana",
        "listgrouprights-namespaceprotection-namespace": "Valan'anarana",
        "listgrouprights-namespaceprotection-restrictedto": "Zo ahafahan'ny mpikambana manova",
+       "listgrants": "Fahazoan-dalana",
+       "listgrants-grant": "Omena alalana",
+       "listgrants-rights": "Zo",
        "trackingcategories": "Sokajy fanarahana",
        "trackingcategories-msg": "Sokajy fanarahana",
        "trackingcategories-name": "Anaran-kafatra",
        "wlheader-showupdated": "Aseho '''sorabaventy''' ny pejy niova taorian'ny famangianao azy farany.",
        "wlnote": "Eo ambany dia ahitana ny {{PLURAL:$1|fiovana farany indrindra|ny fiovana ''$1'' farany}} natao tanatin'ny adin'ny {{PLURAL:$2|iray|'''$2'''}}, nanomboka ny $3, $4.",
        "wlshowlast": "Haneho ny $1 ora farany, ny $2 andro farany na",
+       "watchlist-hide": "Afenina",
+       "watchlist-submit": "Aseho",
+       "wlshowtime": "Vanim-potoana aseho:",
+       "wlshowhideminor": "fiovana madinika",
+       "wlshowhidebots": "rôbô",
+       "wlshowhideliu": "mpikambana nisoratra anarana",
+       "wlshowhideanons": "mpikambana tsy nisoratra anarana",
+       "wlshowhidepatr": "fiovana voavaky",
+       "wlshowhidemine": "fiovako",
+       "wlshowhidecategorization": "fanasokajiam-pejy",
        "watchlist-options": "Safidy ny lisitry ny pejy arahana",
        "watching": "Fanarahana...",
        "unwatching": "Fanalana ny fanarahana...",
        "watcherrortext": "Nisy hadisoana nitranga teo ampanovana ny safidy ny lisitry ny pejy arahanao ho an'i « $1 ».",
        "enotif_reset": "Marihana ho efa voavaky ny pejy rehetra",
        "enotif_impersonal_salutation": "Mpikamban'i {{SITENAME}}",
+       "enotif_subject_deleted": "Nofaran'i $2{{GENDER:$2|}} ny pejy $1 an'i {{SITENAME}}",
+       "enotif_subject_created": "Noforonin'i $2 ny pejy $1 tao amin'i {{SITENAME}}",
+       "enotif_subject_moved": "Nahetsik'i $2 ny pejy $1 tao amin'i {{SITENAME}}",
+       "enotif_subject_restored": "Naverin'i $2 ny pejy $1 tao amin'i {{SITENAME}}",
+       "enotif_subject_changed": "Novain'i $2 ny pejy $1 tao amin'i {{SITENAME}}",
+       "enotif_body_intro_deleted": "Nofafàn'i $2 ny pejy $1 an'i {{SITENAME}} tamin'ny $PAGEEDITDATE, jereo $3",
+       "enotif_body_intro_created": "Noforonin'i $2 ny pejy $1 an'i {{SITENAME}} tamin'ny $PAGEEDITDATE, jereo $3 ho an'ny versiona ankehitriny.",
+       "enotif_body_intro_moved": "Nahetsik'i $2 ny pejy $1 an'i {{SITENAME}} tamin'ny $PAGEEDITDATE, jereo $3 ho an'ny versiona ankehitriny.",
+       "enotif_body_intro_restored": "Naverin'i $2 ny pejy $1 an'i {{SITENAME}} tamin'ny $PAGEEDITDATE, jereo $3 ho an'ny versiona ankehitriny.",
+       "enotif_body_intro_changed": "Novain'i $2 ny pejy $1 an'i {{SITENAME}} tamin'ny $PAGEEDITDATE, jereo $3 ho an'ny versiona ankehitriny.",
        "enotif_lastvisited": "Jereo eto $1 ny niova rehetra hatramin'ny fitsidihanao farany.",
        "enotif_lastdiff": "Jereo $1 mba ahitana ireo fanovana ireo.",
        "enotif_anon_editor": "mpikambana tsy nisoratra anarana $1",
        "delete-confirm": "Hamafa ny « $1 »",
        "delete-legend": "Fafao",
        "historywarning": "'''Tandremo :''' Ny pejy hofafanao io dia manana tantaram-pejy misy famerenana $1{{PLURAL:}}",
+       "historyaction-submit": "Aseho",
        "confirmdeletetext": "Handeha hamafa tanteraka ny pejy na sary miaraka amin'ny tantarany rehetra\nao anatin'ny toby ianao. Azafady mba hamafiso fa irinao tokoa izany,\nfantatrao ny vokany ary mahalala ianao fa tsy mifanipaka amin'ny\n[[{{MediaWiki:Policy-url}}|fepetra]] izao ataonao izany.",
        "actioncomplete": "Vita ny asa",
        "actionfailed": "Tsy nandeha ny tao",
        "rollbackfailed": "Tsy voaverina amin'ny teo aloha",
        "cantrollback": "Tsy afaka iverenana ny fiovana; ny mpanova farany ihany no tompon'ny pejy.",
        "alreadyrolled": "Tsy afaka foanana ny fiovan'ny pejy « [[:$1]] » nataon'i [[User:$2|$2]] ([[User talk:$2|Dinika]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])\n\nEfa nataon'i [[User:$3|$3]] ([[User talk:$3|dinika]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) ny fiovana farany.",
-       "editcomment": "Toy izao no fanamarihana momba io fanovana io: \"''$1''\".",
+       "editcomment": "Toy izao no fanamarihana momba io fanovana io: <em>$1</em>.",
        "revertpage": "Voafafa ny fanovana ny [[Special:Contributions/$2|$2]] ([[User talk:$2|Dinika]]); voaverina amin'ny votoatiny teo aloha nataon'i [[User:$1|$1]]",
        "revertpage-nouser": "Manala ny fanovana (nataom-pikambana voaafina), miverina any amin'ny filaza faran'i  [[User:$1|$1]]",
        "rollback-success": "Fanesorana ny fiovana nataon'i $1 ;\nfiverenana amin'ny fiovana farany nataon'i $2.",
        "sessionfailure-title": "Tsi-fetezaka mikasika ny kaonty idirana",
        "sessionfailure": "Ohatry ny misy olana ny fidirana amin'ny kaontinao ; \nnofoanana ilay tao mba tsy hisy fanodinana fotaom-pidirana (session).\nTsindrio \"Mialoha\" ary vaozy ilay pejy niavianao ary andramo fanindroany.",
+       "changecontentmodel-legend": "Môdelim-botoatim-pejy",
        "changecontentmodel-title-label": "Lohatenim-pejy",
        "changecontentmodel-model-label": "Môdelim-botoatiny",
        "changecontentmodel-reason-label": "Antony :",
+       "changecontentmodel-submit": "Ovaina",
        "changecontentmodel-success-title": "Niova ny môdelim-botoatiny",
        "logentry-contentmodel-change-revertlink": "mamerina",
        "logentry-contentmodel-change-revert": "mamerina",
        "contributions": "Fandraisan'anjaran'ny mpikambana{{GENDER:$1}}",
        "contributions-title": "Fandraisan'anjaran'i $1",
        "mycontris": "Fandraisan'anjara",
+       "anoncontribs": "Fandraisan'anjara",
        "contribsub2": "Ho an'i {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Tsy misy fanovana mifanaraka amin'ireo critères ireo.",
        "uctop": "(ankehitriny)",
        "whatlinkshere-hidelinks": "$1 ny rohy",
        "whatlinkshere-hideimages": "$1 ny rakitra mirohy",
        "whatlinkshere-filters": "sivana",
+       "whatlinkshere-submit": "Andao",
        "autoblockid": "Fanakanana mandeha ho azy #$1",
        "block": "Hanakana ilay mpikambana",
        "unblock": "Hanala ny sakan'ilay mpikambana",
        "movenotallowedfile": "Tsy mahazo ovainao anarana ny rakitra.",
        "cant-move-user-page": "Tsy azo ovainao anarana ny renipejim-pikambana (any ivelan'ny zana-pejiny).",
        "cant-move-to-user-page": "Tsy azo ovainao ny manova anarana pejy makany amina pejim-pikambana (afatsy zana-pejy iray).",
-       "newtitle": "Lohateny vaovao",
+       "newtitle": "Lohateny vaovao:",
        "move-watch": "araho-maso ity pejy ity",
        "movepagebtn": "Afindrao",
        "pagemovedsub": "Voafindra ny pejy",
        "movenosubpage": "Tsy manana zana-pejy ity pejy ity.",
        "movereason": "Antony :",
        "revertmove": "averina",
-       "delete_and_move": "Ovay toerana dia fafao",
        "delete_and_move_text": "==Mila fafàna==\n\nEfa misy ny lahatsoratra hoe \"[[:$1]]\". Irinao ve ny hamafana azy mba hahafahana mamindra toerana ity lahatsoratra ity?",
        "delete_and_move_confirm": "Eny, fafao io pejy io",
        "delete_and_move_reason": "Pejy voafafa hahafahana manolo ny anaran'i ''[[$1]]''",
        "export-download": "Hitahiry azy anaty rakitra",
        "export-templates": "Ataovy ao ny endrika",
        "export-pagelinks": "Ataovy ao any pejy mmirohy amin'y halalina :",
+       "export-manual": "Ampiana amin'ny alalan'ny tanana ilay pejy:",
        "allmessages": "Hafatry ny rindrankajy",
        "allmessagesname": "Anarana",
        "allmessagesdefault": "Dikan-teny tany am-boalohany",
        "thumbnail-temp-create": "Tsy afaka namorona ilay thumbnail miserana",
        "thumbnail-dest-create": "Tsy nahatahiry ilay thumbnail tany amin'ny tanjona",
        "thumbnail_invalid_params": "Parametatry ny saritapaka tsy mety",
+       "thumbnail_toobigimagearea": "Rakitra manana habe mihoatra ny $1",
        "thumbnail_dest_directory": "Tsy mety amboarina ilay petra-drakitra tanjona",
        "thumbnail_image-type": "Karazan-drakitra tsy zaka",
        "thumbnail_image-missing": "Rakitra ohatran'ny tsy ao : $1",
        "import-interwiki-history": "Handika ny santiônan'ny tantaran'ity pejy ity",
        "import-interwiki-templates": "Ataovy ao ny endrika rehetra",
        "import-interwiki-submit": "Hampiditra",
+       "import-mapping-namespace": "Ampidirina amin'ny anaran-tsehatra:",
+       "import-mapping-subpage": "Ampidirina ho zana-pejin'ny pejy manaraka:",
        "import-upload-filename": "Anaran-drakitra :",
        "import-comment": "Resaka :",
        "importstart": "Am-pampidirana ny pejy…",
        "importlogpage": "laogin'ny fampidirana",
        "importlogpagetext": "Fampidirana ara-pandraharahana ny pejy miaraka amin'ny tantaram-panvany avy any amin'ny wiki hafa.",
        "javascripttest": "Fanandramana JavaScript",
+       "javascripttest-pagetext-unknownaction": "Asa tsy fantatra \"$1\".",
        "javascripttest-pagetext-skins": "Mifidia skin hanaovana ny fanandramana:",
        "javascripttest-qunit-intro": "Jereo ny [$1 fanoroana mikasika ny andrana] eo amin'i mediawiki.org.",
-       "tooltip-pt-userpage": "Ny pejinao",
+       "tooltip-pt-userpage": "Ny pejim-pikambanao",
        "tooltip-pt-anonuserpage": "Ny pejim-bikamban'ny IP andraisanao anjara",
        "tooltip-pt-mytalk": "Pejin-dresakao",
        "tooltip-pt-anontalk": "Ny pejin-dresaka ho an'ny fandraisan' anjara tamin'ny alànan'ity IP ity",
-       "tooltip-pt-preferences": "Ny safidinao",
+       "tooltip-pt-preferences": "Ny safidinao{{GENDER:|}}",
        "tooltip-pt-watchlist": "Ny lisitra ny pejy arahanao-maso",
        "tooltip-pt-mycontris": "Lisitra ny fandraisan'anjaranao",
        "tooltip-pt-login": "Tsara aminao no miditra na misoratra anarana, fa tsy voatery ianao.",
        "tooltip-t-recentchangeslinked": "Lisitry ny fanovàna faran'ny pejy manana rohy amin'ity zavatra ity",
        "tooltip-feed-rss": "Topaka RSS ho an'ity pejy ity",
        "tooltip-feed-atom": "Topaka atom ho an'ity pejy ity",
-       "tooltip-t-contributions": "Hijery ny lisitry ny fandraisan'anjara n'io mpikambana io",
+       "tooltip-t-contributions": "Lisitry ny fandraisan'anjara n'io mpikambana io{{GENDER:$1|}}",
        "tooltip-t-emailuser": "Handefa imailaka any amin'io mpikambana io",
        "tooltip-t-upload": "Handefa sary na rakitra",
        "tooltip-t-specialpages": "Listry ny pejy manokana rehetra",
        "duplicate-defaultsort": "'''Tandremo''' : manitsaka ny sort key taloha \"$1\" ilay sort key ankehitriny \"$2\".",
        "version": "Versiona",
        "version-extensions": "Fanitarana nampidirina",
+       "version-skins": "Fitafy efa napetraka",
        "version-specialpages": "Pejy manokana",
        "version-variables": "Miova",
+       "version-antispam": "Fisorohana maila-pako",
        "version-other": "Samihafa",
        "version-hook-subscribedby": "Nalefan'i",
        "version-version": "($1)",
        "version-license": "Lisansa Mediawiki",
+       "version-ext-license": "Fahazoan-dalana",
+       "version-ext-colheader-name": "Fanitarana",
+       "version-skin-colheader-name": "Fiseho",
+       "version-ext-colheader-version": "Versiona",
+       "version-ext-colheader-license": "Fahazoan-dalana",
+       "version-ext-colheader-description": "Famaritana",
+       "version-ext-colheader-credits": "Mpamorona",
+       "version-license-title": "Fahazoan-dalana ho an'i $1",
+       "version-credits-title": "Fisaorana ho an'i $1",
        "version-poweredby-others": "hafa",
        "version-software": "Rindrankahy voapetraka",
        "version-software-product": "Vokatra",
        "version-software-version": "Versiona",
+       "version-entrypoints": "URL ny toeram-pidirana",
+       "version-entrypoints-header-entrypoint": "Toeram-pidirana",
+       "version-entrypoints-header-url": "URL",
+       "version-libraries": "Librery napetraka",
+       "version-libraries-library": "Librery",
+       "version-libraries-version": "Versiona",
+       "version-libraries-license": "Fahazoan-dalana",
+       "version-libraries-description": "Visavisa",
+       "version-libraries-authors": "Mpamorona",
+       "redirect-submit": "Alefa",
+       "redirect-lookup": "Karohana:",
+       "redirect-value": "Sanda:",
+       "redirect-user": "ID mpikambana",
+       "redirect-page": "ID ny pejy",
+       "redirect-revision": "Versiom-pejy",
+       "redirect-file": "Anaran-drakitra",
+       "redirect-logid": "ID laogy",
+       "redirect-not-exists": "Sanda tsy hita",
        "fileduplicatesearch": "Hitady rakitra mitovy endrika",
        "fileduplicatesearch-legend": "Hitady mitovy endrika",
        "fileduplicatesearch-filename": "Anaran-drakitra :",
        "fileduplicatesearch-result-1": "Tsy misy rakitra mitovy amin'ny « $1 ».",
        "fileduplicatesearch-result-n": "Misy rakitra {{PLURAL:}}$2 mitovy amin'i « $1 ».",
        "specialpages": "Pejy manokana",
-       "specialpages-note": "* Pejy manokana tsotra\n* <strong class=\"mw-specialpagerestricted\">Pejy manokana voafetra.</strong>",
+       "specialpages-note-top": "Maribolana",
+       "specialpages-note": "* Pejy manokana tsotra\n* <span class=\"mw-specialpagerestricted\">Pejy manokana voafetra ara-pijey.</span>",
        "specialpages-group-maintenance": "laogy hikojakojana",
        "specialpages-group-other": "Pejy manokana hafa",
        "specialpages-group-login": "Hiditra / hisoratra anarana",
        "specialpages-group-wiki": "Data sy fitaovana",
        "specialpages-group-redirects": "Pejy manokana voaodina",
        "specialpages-group-spam": "Fitaovana fanalana spam",
+       "specialpages-group-developer": "Fitaovam-panitatra",
        "blankpage": "Pejy fotsy",
        "intentionallyblankpage": "Avela fananiana ho fotsy ity pejy ity.",
        "external_image_whitelist": "#Avelao tahaka izao ity andalana ity.<pre>\n#Lazao ny singana REGEX (ny singa voalaza eo anelanelan'ny //) eo ambany.\n#Miady amin'ny URL ny sary ivelany izy ireo.\n#Hiseho sahala sary izay miady, raha tsy izany dia rohy mankany amin'ilay sary ihany no haseho.\n#Ho resaka ny andalana manomboka amin'ny #.\n#Tsy miraharaha ny zanatsoratra sy ny renisoratra ity lisitra ity.\n\n#Ataovy eo ambonin'ity andalana ity ny singana REGEX. Avelao tahaka izao ity andalana farany ity.</pre>",
        "tags-tag": "Anaran'ny balizy",
        "tags-display-header": "Seho anatin'ny lisitry ny fanovana",
        "tags-description-header": "Famisavisana tanteraka an'ilay balizy",
+       "tags-source-header": "Loharano",
+       "tags-active-header": "Mandeha?",
        "tags-hitcount-header": "Fanovana voabalizy",
+       "tags-actions-header": "Tao",
+       "tags-active-yes": "Eny",
+       "tags-active-no": "Tsia",
+       "tags-source-extension": "Voafaritr'itatra",
+       "tags-source-manual": "Ampiharin'ny mpikambana sy rôbô tanana",
+       "tags-source-none": "Tsy ampiasaina intsony",
        "tags-edit": "hanova",
+       "tags-delete": "fafao",
+       "tags-activate": "alefa",
+       "tags-deactivate": "aza alefa",
        "tags-hitcount": "{{PLURAL:$1|fanovana|fanovana}} $1",
+       "tags-manage-no-permission": "Tsy manana zo mikirakira ny balizy ianao.",
+       "tags-manage-blocked": "Tsy afaka manova balizy ianao rehefa voasakana.",
+       "tags-create-heading": "Hamorona balizy vaovao",
+       "tags-create-tag-name": "Anaram-balizy:",
+       "tags-create-reason": "Antony :",
+       "tags-create-submit": "Foronona",
+       "tags-create-no-name": "Tsy maintsy manisy anaram-balizy ianao.",
+       "tags-delete-title": "Hamafa balizy",
+       "tags-delete-explanation-initial": "Mby hamafa ny balizy \"$1\" amin'ny banky angona ianao.",
+       "tags-delete-reason": "Antony:",
+       "tags-delete-submit": "Hamafa ity balizy ity mandrakizay",
+       "tags-delete-not-allowed": "Tsy afaka fafana ny balizy voafatr'itatra raha tsy mamela hanao izany ilay itatra.",
+       "tags-delete-not-found": "Tsy misy ny balizy \"$1\".",
+       "tags-activate-title": "Alefa ilay balizy",
+       "tags-activate-question": "Mby handefa balizy \"$1\" ianao.",
+       "tags-activate-reason": "Antony:",
+       "tags-activate-not-allowed": "Tsy mety atao ny mandefa balizy \"$1\".",
+       "tags-activate-not-found": "Tsy misy ny balizy \"$1\".",
+       "tags-activate-submit": "Alefa",
+       "tags-deactivate-title": "Aza alefa ny balizy",
+       "tags-deactivate-question": "Mby tsy hampandefa ny balizy \"$1\" ianao.",
+       "tags-deactivate-reason": "Antony:",
+       "tags-deactivate-not-allowed": "Tsy afaka atao ny manajanona ny balizy \"$1\".",
+       "tags-deactivate-submit": "Aza alefa",
+       "tags-edit-title": "Hanova balizy",
+       "tags-edit-manage-link": "Hikirakira balizy",
+       "tags-edit-new-tags": "Balizy vaovao:",
+       "tags-edit-add": "Ampiana ireo balizy ireo:",
+       "tags-edit-remove": "Hanala ireo balizy ireo:",
+       "tags-edit-remove-all-tags": "(hanala ny balizy rehetra)",
+       "tags-edit-chosen-placeholder": "Hifidy balizy sasany",
+       "tags-edit-chosen-no-results": "Tsy nisy balizy niady",
+       "tags-edit-reason": "Antony:",
+       "tags-edit-success": "Efa mihatra ny fiovana.",
+       "tags-edit-failure": "Tsy tafahatra ireto fiovana ireto:\n$1",
+       "tags-edit-nooldid-title": "Versiona tanjona tsy ekena",
        "comparepages": "Hampitaha pejy",
        "compare-page1": "Pejy 1",
        "compare-page2": "Pejy 2",
        "compare-rev1": "Versiona 1",
        "compare-rev2": "Versiona 2",
        "compare-submit": "Ampitahao",
+       "compare-invalid-title": "Tsy ekena ny lohateny nosoratanao.",
+       "compare-title-not-exists": "Tsy misy ny lohateny nosoratanao.",
+       "compare-revision-not-exists": "Tsy misy ny versiona nosoratanao.",
        "dberr-problems": "Azafady Tompoko ! Manana olana ara-teknika ny sehatra.",
        "dberr-again": "Miandrasa minitra vitsivitsy ary alefaso fanindroany",
-       "dberr-info": "(Tsy afaka mifandray amin'ny lohamilin'ny database : $1)",
+       "dberr-info": "(Tsy afaka mifandray amin'ny banky angona: $1)",
+       "dberr-info-hidden": "(Tsy afaka mifandray amin'ny banky angona)",
        "dberr-usegoogle": "Afaka manandrana mikaroka eo amin'ny Google ianao mandritra izay.",
+       "dberr-outofdate": "Fantaro fa mety efa lany andro ny index-n'ny votoatinay",
        "dberr-cachederror": "Izy io dia dika nasitriky ny pejy nangatahana ary mety efa tola.",
        "htmlform-invalid-input": "Nisy olana nitranga tamin'ny sanda sasany",
        "htmlform-select-badoption": "Tsy azo ekena ny sanda nambaranao.",
        "htmlform-float-invalid": "Tsy isa ny sanda nambaranao.",
        "htmlform-int-toolow": "Ny sanda nambaranao dia kely nohon'ny fetra iva indrindra $1",
        "htmlform-int-toohigh": "Ny sanda nambaranao dia ngeza nohon'ny fetra avo indrindra $1",
+       "htmlform-required": "Ilaina ny sandany.",
        "htmlform-submit": "Alefa",
        "htmlform-reset": "Hanala ny fanovana",
        "htmlform-selectorother-other": "Hafa",
+       "htmlform-no": "Tsia",
+       "htmlform-yes": "Eny",
+       "htmlform-chosen-placeholder": "Makà safidy",
+       "htmlform-cloner-create": "Hanampy be kokoa",
+       "htmlform-cloner-delete": "Esorina",
+       "htmlform-cloner-required": "Sanda iray farafahakeliny no ilaina",
+       "htmlform-title-badnamespace": "Tsy ao amin'i anaran-tsehatra \"{{ns:$2}}\" i [[:$1]].",
+       "htmlform-title-not-creatable": "Lohatenim-pejy tsy azo foronina \"$1\"",
+       "htmlform-title-not-exists": "Tsy misy $1.",
+       "htmlform-user-not-exists": "Tsy misy ny <strong>$1</strong>.",
+       "htmlform-user-not-valid": "Tsy anaram-pikambana azo raisina <strong>$1</strong>.",
+       "sqlite-has-fts": "$1 misy fikarohan-dahatsoratra tanteraka",
+       "sqlite-no-fts": "$1 tsy misy fikarohan-dahatsoratra tanteraka",
        "logentry-delete-delete": "nofafan'i $1 ny pejy $3",
+       "logentry-delete-restore": "Namerina ny pejy $3 i $1{{GENDER:$2|}}",
+       "logentry-delete-event": "Nanova ny fahitana {{PLURAL:$5|laogy iray|laogy $5}} tamin'i $3 i $1: $4",
+       "logentry-delete-revision": "Nanova ny fahitana {{GENDER:$2|}}{{PLURAL:$5|versiona $5}} tamin'ny pejy $3 i $1: $4",
+       "logentry-delete-event-legacy": "{{GENDER:$2|}}Nanova ny fahitana ny zava-mitranga amin'ny laogy momba an'i $3 i $1",
+       "logentry-delete-revision-legacy": "Nanova ny fahitana ny versiona amin'ny pejy $3 i $1",
        "logentry-suppress-delete": "{{GENDER:$2|nofafan'i}} $1 ny pejy $3",
+       "logentry-suppress-event": "Nanova{{GENDER:$2|}} antsokosoko ny fahitana amin'ny {{PLURAL:$5|zava-mitranga amin'ny laogy $5}} amin'i $3 i $1: $4",
+       "logentry-suppress-revision": "Nanova{{GENDER:$2|}} antsokosoko ny fahitana amin'ny {{PLURAL:$5|versiona $5}} amin'i $3 i $1: $4",
+       "logentry-suppress-event-legacy": "Nanova antsokosoko ny fahitana ny zava-mitranga amin'ny laogy momba an'i $3 i $1",
        "revdelete-content-hid": "votoatiny nafenina",
        "revdelete-summary-hid": "ambangovangom-panovana nafenina",
        "revdelete-uname-hid": "anaram-pikambana nafenina",
        "feedback-subject": "Lohahevitra:",
        "feedback-submit": "Alefa",
        "feedback-thanks": "Misaotra! lanefa tany amin'ilay pejy ''[$2 $1]'' ilay fanehoan-kevitrao.",
+       "feedback-useragent": "User agent:",
        "searchsuggest-search": "Karohy",
        "searchsuggest-containing": "misy...",
        "api-error-badaccess-groups": "Tsy afaka mampiditra rakitra eto amin'ity wiki ity ianao.",
index 080a3dc..5df7821 100644 (file)
        "recentchanges-label-minor": "Тиде изи тӧрлатымаш",
        "recentchanges-label-bot": "Тиде тӧрлатымашым бот ыштен",
        "recentchanges-label-unpatrolled": "Тиде тӧрлатымашым нигӧ терген огыл",
-       "recentchanges-legend-heading": "'''Легенде:'''",
+       "recentchanges-legend-heading": "<strong>Легенде:</strong>",
        "recentchanges-legend-newpage": "$1 - у лаштык",
        "rcnotefrom": "Ниже перечислены изменения с '''$2''' (не более '''$1''').",
        "rclistfrom": "$3 $2 гыч тӱҥалын у вашталтымашым ончыкташ",
        "withoutinterwiki-submit": "ончыкташ",
        "nbytes": "$1 {{PLURAL:$1|байт|байт}}",
        "nmembers": "$1 {{PLURAL:$1|1=лаштык|лаштык-влак}}",
-       "nviews": "$1 {{PLURAL:$1|1=ончымо|ончымо-влак}}",
        "lonelypages": "Тулык лаштык-влак",
        "wantedcategories": "Ыштыман категорий-влак",
        "wantedpages": "Ыштышаш лаштык-влак",
        "activeusers-count": "Пытартыш $3 {{PLURAL:$3|1=кечыште|кечылаште}} $1 {{PLURAL:$1|1=тӧрлатымаш|тӧрлатымаш-влак}}",
        "activeusers-hidebots": "Бот-влакым шылташ",
        "activeusers-hidesysops": "Сайтвиктарыше-влакым шылташ",
+       "activeusers-submit": "ончыкташ",
        "listgrouprights-members": "(тӱшкаште улшо-влак)",
        "emailuser": "Пайдаланыше дек серыш",
        "watchlist": "Эскерымаш лӱмер",
        "move-page-legend": "Лаштыкын лӱмжым вашталтымаш",
        "movepagetext": "Ӱлыл формо дене пайдаланен, тый лаштыкын лӱмым вашталтен кертат, тудын вашталтыме эртымгорныже у верыш кусарыме.\nТошто лӱмыштӧ у лӱмыш колтымо лаштык кодеш.\nТый тошто лӱмыш колтымо лаштык-влакым шке семын вашталтке кертат.\nТый тидым ынет ыште гын, [[Special:DoubleRedirects|кокытан]] да [[Special:BrokenRedirects|пудыргышо вес вере колтымашым]] терге.\nТый палемдыме верыш кылвер-влаклан шуйнымылан да тушко ончыктымылан вуйын шогет.\n\nШотыш нал: кунам у лӱман лаштык уло, тудо '''ок''' кусаралт. Тыге огыл, кунам лаштык вес вере кусаралтеш але тудо яра да вашталтымаш эртымгорныже уке.\nТый лаштыкым йонгылыш кусаренат гын менгешла тудым тошто лӱмыш кусарен кертат, но тый уже улшо лаштыкым ӱштын от керт, манын ончыкта.\n\n'''Тӱтко лий!'''\nЧӱчкыдын кучылтмо лаштыклан тиде кугу вашталтышым ыштен кертеш;\nУмбаке кайыме деч ончыч шоналте, тый тидын деч вара лиймым умылет.",
        "movepagetalktext": "Тиде лаштыкын каҥашымаш лаштык шке семын огеш кусно, '''тидлан амалже:'''\n*Тыгай лӱман яра огыл каҥашымаш лаштык уло ала\n*Ӱлыч кайыкым от корангде.\n\nТыгай годым тылат лаштыкым шке кидет дене кусараш але иктеш ушнаш кӱлеш.",
-       "movearticle": "Тиде лаштыкын лӱмжым вашталташ:",
        "newtitle": "У лӱм:",
        "move-watch": "Тиде лаштыкым эскераш",
        "movepagebtn": "Лаштыкын лӱмжым вашталташ",
index 9739123..e498c30 100644 (file)
        "customcssprotected": "Sanak indak mampunyoi izin untuak maubah laman CSS iko, karano manganduang pangaturan pribadi pangguno lain.",
        "customjsprotected": "Sanak ndak mampunyo izin untuak maubah laman JavaScript iko, karano manganduang pangaturan pribadi pangguno lain.",
        "ns-specialprotected": "Laman istimewa indak dapek disuntiang.",
-       "titleprotected": "Judul ko dilinduangi dari dibuek jo [[User:$1|$1]].\nAlasannyo adolah ''$2''.",
+       "titleprotected": "Judul ko dilinduangi dari dibuek jo [[User:$1|$1]].\nAlasannyo adolah <em>$2</em>.",
        "filereadonlyerror": "Indak bisa mangubah berkas \"$1\" karano repositori berkas \"$2\" dalam mode baco-sajo.\n\nPangurus nan manguncinyo manawarkan panjalehan: \"$3\"",
        "invalidtitle-knownnamespace": "↓Judul nan indak sah jo ruangnamo \"$2\" dan teks \"$3\"",
        "invalidtitle-unknownnamespace": "Judul nan tak sah jo nomor ruang namo indak diketahui $1 dan teks \"$2\"",
        "createaccountreason": "Alasan:",
        "createacct-reason": "Alasan",
        "createacct-reason-ph": "Manga Sanak mambuek akun lain",
-       "createacct-captcha": "Pamarisoan kaamanan",
-       "createacct-imgcaptcha-ph": "Masuakan teks nan Sanak caliak di ateh",
        "createacct-submit": "Buek akun Sanak",
        "createacct-benefit-heading": "{{SITENAME}} dibuek dek urang-urang saroman Sanak.",
        "createacct-benefit-body1": "{{PLURAL:$1|suntiangan}}",
        "passwordreset-emailtext-ip": "Sasaurang (mungkin Sanak, dari alamaik IP $1) mamintak parubahan kato sandi untuak {{SITENAME}} ($4). {{PLURAL:$3|Akun}} barikuik takaik jo alamaik surel ko:\n\n$2\n\n{{PLURAL:$3|Sandi samantaro}} barikuik akan habih masonyo dalam {{PLURAL:$5|$5 ari}}.\nSanak harus masuak dan mamiliah sandi baru. Jikok urang lain mambuek pamintaan ko atau jikok Sanak ingek sandi awal dan indak nio maubahnyo, Sanak dapek mangacuahkan pasan ko dan taruih manggunoan kato sandi lamo.",
        "passwordreset-emailtext-user": "Sasaurang (mungkin Sanak, dari alamaik IP $1) mamintak parubahan kato sandi untuak {{SITENAME}} ($4).\n{{PLURAL:$3|Akun}} barikuik takaik jo alamaik surel ko:\n\n$2\n\n{{PLURAL:$3|Sandi samantaro}} barikuik akan habih masonyo dalam {{PLURAL:$5|$5 ari}}.\nSanak harus masuak dan mamiliah sandi baru. Jikok urang lain mambuek pamintaan ko atau jikok Sanak ingek sandi awal dan indak nio maubahnyo, Sanak dapek mangacuahkan pasan ko dan taruih manggunoan kato sandi lamo.",
        "passwordreset-emailelement": "Namo pangguno: \n$1\n\nSandi samantaro: \n$2",
-       "passwordreset-emailsent": "Surel parubahan kato sandi alah dikirim.",
+       "passwordreset-emailsentemail": "Surel parubahan kato sandi alah dikirim.",
        "passwordreset-emailsent-capture": "Surel parubahan kato sandi alah dikirim, nan nampak di bawah ko.",
        "passwordreset-emailerror-capture": "Surel parubahan kato sandi nan ditampilan di bawah, alah dibuek, tapi pangirimannyo ka {{GENDER:$2|pangguno}} gagal: $1",
        "changeemail": "Tuka alamaik surel.",
        "prefs-displayrc": "Piliahan tampilan",
        "prefs-displaywatchlist": "Piliahan tampilan",
        "prefs-diffs": "Pabedoan",
-       "email-address-validity-valid": "Alamaik surel nampaknyo sah",
-       "email-address-validity-invalid": "Masuakan alamaik surel nan sah",
        "userrights": "Manajemen hak pangguno",
        "userrights-lookup-user": "Mangatua kalompok pangguno",
        "userrights-user-editname": "Masuakan namo pangguno:",
        "unusedcategoriestext": "Kategori barikuik ado, tapi indak ado laman atau kategori lain nan manggunoannyo.",
        "pager-newer-n": "{{PLURAL:$1|$1 labiah baru}}",
        "pager-older-n": "{{PLURAL:$1|$1 labiah lamo}}",
+       "apisandbox": "Bak kasiak API",
        "booksources": "Sumber buku",
        "booksources-search-legend": "Cari di sumber buku",
        "specialloguserlabel": "Pangguno:",
index df1de22..1470aec 100644 (file)
        "myprivateinfoprotected": "Немате дозвола да ги уредувате вашите лични информации.",
        "mypreferencesprotected": "Немате дозвола да ги уредувате вашите нагодувања.",
        "ns-specialprotected": "Службени страници не може да се уредуваат.",
-       "titleprotected": "Овој наслов од страна на [[User:$1|$1]] е заштитен и не може да се создаде.\nПричината за тоа е: ''$2''.",
+       "titleprotected": "Овој наслов од страна на [[User:$1|$1]] е заштитен и не може да се создаде.\nПричината за тоа е: <em>$2</em>.",
        "filereadonlyerror": "Не можам да ја изменам податотеката „$1“ бидејќи складиштето „$2“ е во незаписен режим.\n\t\nАдминистраторот што ја заклучи го понуди следново образложение: „''$3''“.",
        "invalidtitle-knownnamespace": "Неважечки наслов со именски простор „$2“ и текст „$3“",
        "invalidtitle-unknownnamespace": "Неважечки наслов со именски простор бр. $1 и текст „$2“",
        "userlogin-remembermypassword": "Запомни ме",
        "userlogin-signwithsecure": "Користи безбеден опслужувач",
        "cannotloginnow-title": "Во моментов не можам да ве најавм",
+       "cannotloginnow-text": "Не можам да ве најавам кога се користи $1.",
        "yourdomainname": "Вашиот домен:",
        "password-change-forbidden": "Не можете да ја менувате лозинката на ова вики.",
        "externaldberror": "Настана грешка при надворешното најавување на базата или пак немате дозвола да ја подновите вашата надворешна сметка.",
        "nocookiesfornew": "Корисничката сметка не е создадена бидејќи не можеше да се потврди нејзиниот извор.\nЗа оваа цел ќе ви требаат колачиња. Проверете дали се овозможени, превчитајте ја страницава и обидете се повторно.",
        "nocookiesforlogin": "{{int:nocookieslogin}}",
        "noname": "Внесовте погрешно корисничко име.",
-       "loginsuccesstitle": "Ð\9dаÑ\98аваÑ\82а Ðµ Ñ\83Ñ\81пеÑ\88на",
+       "loginsuccesstitle": "Ð\9dаÑ\98авени Ñ\81Ñ\82е",
        "loginsuccess": "Сега сте најавени на {{SITENAME}} како „$1“.",
        "nosuchuser": "Нема корисник со името „$1“.\nКорисничките имиња разликуваат мали и големи букви.\nПроверете да не сте направиле грешка во пишувањето, или [[Special:UserLogin/signup|создајте нова корисничка сметка]].",
        "nosuchusershort": "Нема корисник со името „$1“.\nПроверете дали правилно сте напишале.",
        "createaccount-title": "Создавање на сметка за {{SITENAME}}",
        "createaccount-text": "Некој направил сметка со вашата е-поштенска адреса на {{SITENAME}} ($4) со име „$2“ и  лозинка „$3“.\nБи требало сега да се пријавите и да ја промените вашата лозинка.\n\nМожете да ја занемарите оваа порака ако сметката била направена по грешка.",
        "login-throttled": "Имате премногу обиди за најава за кратко време.\nПочекајте $1 пред да се обидете повторно.",
-       "login-abort-generic": "Најавата е неуспешна - Прекинато",
+       "login-abort-generic": "Најавата е неуспешна — Откажано",
        "login-migrated-generic": "Вашата сметка е пренесена и корисничкото име веќе не постои на ова вики.",
        "loginlanguagelabel": "Јазик: $1",
        "suspicious-userlogout": "Вашето барање за одјава е одбиено бидејќи се чини дека е испратено од расипан прелистувач или кеширачки застапник (proxy).",
        "newpassword": "Нова лозинка:",
        "retypenew": "Повторете ја новата лозинка:",
        "resetpass_submit": "Поставете лозинка и најавете се",
-       "changepassword-success": "Ð\92аÑ\88аÑ\82а Ð»Ð¾Ð·Ð¸Ð½ÐºÐ° Ðµ Ñ\83Ñ\81пеÑ\88но Ñ\81менеÑ\82а!",
+       "changepassword-success": "Вашата лозинка е сменета!",
        "changepassword-throttled": "Имате премногу обиди за најава за кратко време.\nПочекајте $1 пред да се обидете повторно.",
+       "botpasswords": "Ботовски лозинки",
        "botpasswords-label-appid": "Име на ботот:",
        "botpasswords-label-create": "Создај",
        "botpasswords-label-update": "Поднови",
        "undo-summary-username-hidden": "Поништи ја преработката $1 на скриен корисник",
        "cantcreateaccounttitle": "Не може да се создаде корисничка сметка",
        "cantcreateaccount-text": "Создавањето на корисничка сметка од оваа IP-адреса ('''$1''') е блокирано од страна на [[User:$3|$3]].\n\nОбразложението дадено од страна на $3 е ''$2''",
-       "cantcreateaccount-range-text": "Создавањето на сметки од IP-адреси во опсегот '''$1''' каде спаѓа вашата IP-адреса ('''$4''') е блокирано од корисникот [[User:$3|$3]].\n\n$3 ја наведе следнава причина: ''$2''",
+       "cantcreateaccount-range-text": "Создавањето на сметки од IP-адреси во опсегот <strong>$1</strong> каде спаѓа вашата IP-адреса (<strong>$4</strong>) е блокирано од корисникот [[User:$3|$3]].\n\n$3 ја наведе следнава причина: <em>$2</em>",
        "viewpagelogs": "Преглед на дневници за оваа страница",
        "nohistory": "Страницата нема историја на уредување.",
        "currentrev": "Тековна преработка",
        "recentchanges-label-bot": "Ова уредување е направено од бот",
        "recentchanges-label-unpatrolled": "Ова уредување сè уште не е испатролирано",
        "recentchanges-label-plusminus": "Големинска промена на страницата во бајти",
-       "recentchanges-legend-heading": "'''Легенда:'''",
+       "recentchanges-legend-heading": "<strong>Легенда:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (погл. и [[Special:NewPages|списокот на нови страници]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Прикажи",
        "upload-dialog-button-done": "Готово",
        "upload-dialog-button-save": "Зачувај",
        "upload-dialog-button-upload": "Подигни",
-       "upload-form-label-select-file": "Одберете податотека",
        "upload-form-label-infoform-title": "Подробно",
        "upload-form-label-infoform-name": "Назив",
        "upload-form-label-infoform-name-tooltip": "Краток и единствен наслов на податотеката, кој ќе служи како нејзин назив. Можете да користите прост јазик со меѓупростор, но не пишувајте ја податотечната наставка.",
        "foreign-structured-upload-form-label-own-work-message-shared": "Сведочам дека јас сум имател на авторските права на оваа податотека, дека се согласувам дека неотповикливо ја објавувам на Ризницата под лиценцата [https://creativecommons.org/licenses/by-sa/4.0/deed.mk Криејтив комонс Наведи извор-Сподели под исти услови 4.0] и дека се согласувам да се придржувам до [https://wikimediafoundation.org/wiki/Terms_of_Use/mk Условите на употреба].",
        "foreign-structured-upload-form-label-not-own-work-message-shared": "Доколку вие не сте имател на авторските права на податотекава, или пак сакате да ја објавите под поинаква лиценца, веројатно ќе треба да се послужите со [https://commons.wikimedia.org/wiki/Special:UploadWizard?uselang=mk Помошникот за подигање].",
        "foreign-structured-upload-form-label-not-own-work-local-shared": "Можете да се обидете и на [[Special:Upload|страницата за подигање на {{SITENAME}}]], доколку податотеката може да се подигне под тамошните правила.",
-       "foreign-structured-upload-form-2-label-intro": "Ви благодариме што подарувате слика за употреба на {{SITENAME}}. Можете да продолжите со ова само ако се задоволени следниве неколку услови:",
-       "foreign-structured-upload-form-2-label-ownwork": "Сликата мора во целост да биде <strong>ваше дело</strong>, а не преземена некаде од семрежјето",
-       "foreign-structured-upload-form-2-label-noderiv": "Во себе не треба да содржи <strong>ничие друго дело</strong>, или пак да е инспирирана од него",
-       "foreign-structured-upload-form-2-label-useful": "По карактер треба да биде <strong>образовна и корисна</strong> за другите",
-       "foreign-structured-upload-form-2-label-ccbysa": "Мора да биде во ред <strong>да се објави засекогаш</strong> на семрежјето под лиценцата [https://creativecommons.org/licenses/by-sa/4.0/deed.mk Криејтив комонс Наведи извор - Сподели под исти услови 4.0]",
-       "foreign-structured-upload-form-2-label-alternative": "Доколку некое од горенаведените не е исполнето, сепак можете да ја објавите сликата, користејќи го [https://commons.wikimedia.org/wiki/Special:UploadWizard?uselang=mk Помошникот за подигање] на Ризницата, под услов делото да е достапно под слободна лиценца.",
-       "foreign-structured-upload-form-2-label-termsofuse": "Подигајќи ја сликава, сведочите дека Вие сте имател на авторските права на неа, и се собгласувате неотповикливо да ја предадете на Ризницата на Викимедија под лиценцата Криејтив комос Наведи извор - Сподели под исти услови 4.0 и се согласувате на [https://wikimediafoundation.org/wiki/Terms_of_Use/mk Условите на употреба].",
-       "foreign-structured-upload-form-3-label-question-website": "Дали ја преземавте сликава од некое мрежно место, или од пребарување на слики?",
-       "foreign-structured-upload-form-3-label-question-ownwork": "Дали Вие самите ја создадовте сликава (ја направивте фотографијата, го исцртавте цртежот и тн)?",
-       "foreign-structured-upload-form-3-label-question-noderiv": "Дали содржи или е инспирирана од нечие друго дело, како да речеме лого?",
-       "foreign-structured-upload-form-3-label-yes": "Да",
-       "foreign-structured-upload-form-3-label-no": "Не",
-       "foreign-structured-upload-form-3-label-alternative": "За жал, во овој случај нема да можете да ја подигнете сликата со алаткава. Сепак, можеби ќе можете да ја подигнете со [https://commons.wikimedia.org/wiki/Special:UploadWizard?uselang=mk Помошникот за подигање] на Ризницата, под услов истата да е достапна под слободна лиценца.",
-       "foreign-structured-upload-form-4-label-good": "Со алаткава можете да погидате образовни графички дела што сте ги создале или фотографии што сте ги направиле. Треба во себе да не содржат туѓи дела.",
-       "foreign-structured-upload-form-4-label-bad": "Не смеете да подигате слики што сте ги нашле од пребарувач или што сте ги презеле од друго мрежно место.",
        "backend-fail-stream": "Не можев да ја емитувам податотеката $1.",
        "backend-fail-backup": "Не можев да направам резерва на податотеката $1.",
        "backend-fail-notexists": "Податотеката $1 не постои.",
        "rollbackfailed": "Отповикувањето не успеа",
        "cantrollback": "Уредувањето не може да се отповика.\nПоследниот уредник е воедно и единствениот автор на страницата.",
        "alreadyrolled": "Не може да се отповика последното уредување на страницата „[[:$1]]“ извршено од  [[User:$2|$2]] ([[User talk:$2|разговор]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nнекој друг веќе ја изменил или отповикал страницата.\n\nПоследното уредување го изврши [[User:$3|$3]] ([[User talk:$3|разговор]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Коментарот на уредувањето беше: „''$1''“.",
+       "editcomment": "Коментарот на уредувањето беше: <em>$1</em>.",
        "revertpage": "Отстрането уредувањето на [[Special:Contributions/$2|$2]] ([[User talk:$2|разговор]]), вратено на последната верзија на [[User:$1|$1]]",
        "revertpage-nouser": "Вратени уредувања од скриен корисник на последната преработка на {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Откажани уредувањата на $1; вратено на последната верзија на $2.",
        "default-skin-not-found": "За жал, основното руво на вашето вики оопределено во <code dir=\"ltr\">$wgDefaultSkin</code> како <code>$1</code> не е достапно.\n\nВашата воспоставка {{PLURAL:$4|го опфаќа следново руво|ги опфаќа следниве рува}}. Погледајте [https://www.mediawiki.org/wiki/Manual:Skin_configuration Прирачник: Поставување на рува] за да дознаете како да ги вклучите и како да го изберете основното.\n\n$2\n\n; Ако штотуку го имате воспоставено МедијаВики:\n: Веројатно сте го воспоставиле од git, или пак непосредно од изворниот код на некој друг начин. Ова е очекувано. Пробајте да воспоставите некои рува од [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's именикот на рува] вака:\n* Со преземање на [https://www.mediawiki.org/wiki/Download tarball-воспоставувачот], кој самиот содржи неколку рува и додатоци. Можете да ја прекопирате папката <code>skins/</code> од него.\n:* Преземање на tarball-и за рува од [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Користејќи го Git за преземање рува].\n: Ова не би требало да прави пречки на вашето git-складиште ако сте програмер на МедијаВики.\n\n; Ако штотуку го имате надградено МедијаВики:\n: МедијаВики 1.24 и поновите верзии повеќе не ги вклучуваат воспоставените рува автоматски (погл. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Прирачник: Самооткривање на рува]). Можете да {{PLURAL:$5|го прекопирате следниов ред|ги прекопирате следниве редови}} во <code>LocalSettings.php</code> за да ги вклучите {{PLURAL:$5|воспоставеното руво|сите воспоставени рува}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Ако штотуку го имате изменето <code>LocalSettings.php</code>:\n: Проверете дали правилно се напишани називите на рувата.",
        "default-skin-not-found-no-skins": "За жал, основното руво на вашето вики, определено во <code>$wgDefaultSkin</code> како <code>$1</code>, не е достапно.\n\nНемате воспоставено ниедно руво.\n\n; Ако штотуку го имате воспоставено или надградено МедијаВики:\n: Веројатно сте го воспоставиле од git, или пак непосредно од изворниот код на некој друг начин. Ова е очекувано. МедијаВики 1.24 и поновите верзии немаат рува во главното складиште. Пробајте да воспоставите некои рува од [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's именикот на рува] вака:\n:* Со преземање на [https://www.mediawiki.org/wiki/Download tarball-воспоставувачот], кој самиот содржи неколку рува и додатоци. Можете да ја прекопирате папката <code dir=\"ltr\">skins/</code> од него.\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Користејќи го Git за преземање рува].\n: Ова не би требало да прави пречки на вашето git-складиште ако сте програмер на МедијаВики. Погледајте [https://www.mediawiki.org/wiki/Manual:Skin_configuration Прирачник: Поставување на рува] за да дознаете како да ги вклучите и како да го изберете основното.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (вклучено)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''исклучено''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>исклучено</strong>)",
        "mediastatistics": "Статистики за слики и снимки",
        "mediastatistics-summary": "Статистики за подигнати типови податотеки. Се зема предвид само последната верзија на податотеката. Старите и избришаните верзии не се бројат.",
        "mediastatistics-nbytes": "{{PLURAL:$1|Еден бајт|$1 бајти}} ($2; $3%)",
index fe7396e..e313abe 100644 (file)
        "myprivateinfoprotected": "താങ്കൾക്ക് സ്വന്തം സ്വകാര്യവിവരങ്ങൾ തിരുത്താനുള്ള അനുമതിയില്ല.",
        "mypreferencesprotected": "താങ്കൾക്ക് സ്വന്തം ക്രമീകരണങ്ങൾ തിരുത്താനുള്ള അനുമതിയില്ല.",
        "ns-specialprotected": "പ്രത്യേകം എന്ന നാമമേഖലയിൽ വരുന്ന താളുകൾ തിരുത്താനാവുന്നവയല്ല.",
-       "titleprotected": "[[User:$1|$1]] എന്ന ഉപയോക്താവ് ഈ താൾ ഉണ്ടാക്കുന്നതു നിരോധിച്ചിരിക്കുന്നു.\n''$2'' എന്നതാണു അതിനു കാണിച്ചിട്ടുള്ള കാരണം.",
+       "titleprotected": "[[User:$1|$1]] എന്ന ഉപയോക്താവ് ഈ താൾ ഉണ്ടാക്കുന്നതു നിരോധിച്ചിരിക്കുന്നു.\n<em>$2</em> എന്നതാണു അതിനു കാണിച്ചിട്ടുള്ള കാരണം.",
        "filereadonlyerror": "പ്രമാണ ശേഖരണി \"$2\" ഇപ്പോൾ \"കാണൽ-മാത്രം\" വിധത്തിൽ ക്രമീകരിച്ചിരിക്കുന്നതിനാൽ \"$1\" എന്ന പ്രമാണത്തിൽ മാറ്റം വരുത്താനാകില്ല.\n\nബന്ധിച്ച സിസ്റ്റം കാര്യ‌നിർവാഹക(ൻ) നൽകിയിരിക്കുന്ന കാരണം \"''$3''\" എന്നാണ്.",
        "invalidtitle-knownnamespace": "നാമമേഖല \"$2\", എഴുത്ത് \"$3\" എന്നിവ ഉപയോഗിച്ചുള്ള അസാധുവായ തലക്കെട്ട്",
        "invalidtitle-unknownnamespace": "അപരിചിതമായ നാമമേഖലാ സംഖ്യ $1, എഴുത്ത് \"$2\" എന്നിവ ഉപയോഗിച്ചുള്ള അസാധുവായ തലക്കെട്ട്",
        "undo-summary-username-hidden": "മറയ്ക്കപ്പെട്ട ഉപയോക്താവ് ചെയ്ത നാൾപ്പതിപ്പ് $1 തിരസ്കരിക്കുക",
        "cantcreateaccounttitle": "അംഗത്വം സൃഷ്ടിക്കാൻ സാധിച്ചില്ല",
        "cantcreateaccount-text": "ഈ ഐ.പി. ('''$1''') വിലാസത്തിൽ നിന്നു അംഗത്വം സൃഷ്ടിക്കുന്നത് [[User:$3|$3]] നിരോധിച്ചിരിക്കുന്നു.\n\n$3 അതിനു കാണിച്ചിരിക്കുന്ന കാരണം ''$2'' ആണ്‌.",
-       "cantcreateaccount-range-text": "താങ്കളുടെ ഐ.പി. വിലാസം ('''$4''') ഉൾപ്പെടുന്ന '''$1''' എന്ന പരിധിയിലെ ഐ.പി. വിലാസങ്ങളിൽ നിന്ന് അംഗത്വമെടുക്കുന്നത് [[User:$3|$3]] തടഞ്ഞിരിക്കുകയാണ്.\n\n$3 നൽകിയിരിക്കുന്ന കാരണം ''$2'' എന്നാണ്",
+       "cantcreateaccount-range-text": "താങ്കളുടെ ഐ.പി. വിലാസം (<strong>$4</strong>) ഉൾപ്പെടുന്ന <strong>$1</strong> എന്ന പരിധിയിലെ ഐ.പി. വിലാസങ്ങളിൽ നിന്ന് അംഗത്വമെടുക്കുന്നത് [[User:$3|$3]] തടഞ്ഞിരിക്കുകയാണ്.\n\n$3 നൽകിയിരിക്കുന്ന കാരണം <em>$2</em> എന്നാണ്",
        "viewpagelogs": "ഈ താളുമായി ബന്ധപ്പെട്ട രേഖകൾ കാണുക",
        "nohistory": "ഈ താളിന് നാൾവഴി ഇല്ല.",
        "currentrev": "ഇപ്പോഴുള്ള രൂപം",
        "recentchanges-label-bot": "ഇത് യന്ത്രം ചെയ്ത തിരുത്താണ്",
        "recentchanges-label-unpatrolled": "ഇതുവരെ റോന്തുചുറ്റപ്പെടാത്ത തിരുത്ത്",
        "recentchanges-label-plusminus": "താളിന്റെ വലിപ്പം ഇത്രയും ബൈറ്റുകൾ മാറിയിരിക്കുന്നു",
-       "recentchanges-legend-heading": "'''സൂചന:'''",
+       "recentchanges-legend-heading": "<strong>സൂചന:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|പുതിയ താളുകളുടെ പട്ടികയും]] കാണുക)",
        "recentchanges-submit": "പ്രദർശിപ്പിക്കുക",
        "rcnotefrom": "<strong>$3, $4</strong> മുതലുള്ള {{PLURAL:$5|മാറ്റം|മാറ്റങ്ങൾ}} ആണ് താഴെയുള്ളത്  (<strong>$1</strong> എണ്ണം വരെ കൊടുക്കുന്നതാണ്).",
        "upload-dialog-button-done": "ചെയ്തു കഴിഞ്ഞു",
        "upload-dialog-button-save": "സേവ് ചെയ്യുക",
        "upload-dialog-button-upload": "അപ്‌‌ലോഡ്",
-       "upload-form-label-select-file": "പ്രമാണം തിരഞ്ഞെടുക്കുക",
        "upload-form-label-infoform-title": "വിശദാംശങ്ങൾ",
        "upload-form-label-infoform-name": "പേര്‌",
        "upload-form-label-infoform-name-tooltip": "പ്രമാണത്തിനുള്ള ചെറിയ അനന്യമായ തലക്കെട്ട്. വാക്കുകൾക്കിടയിൽ ഇടവിട്ടുള്ള ലളിതഭാഷ ഉപയോഗിക്കാം. പ്രമാണത്തിന്റെ എക്സ്റ്റെൻഷൻ ഉൾപ്പെടുത്തരുത്.",
        "foreign-structured-upload-form-label-own-work-message-shared": "ഈ പ്രമാണത്തിന്റെ പകർപ്പവകാശം എനിക്ക് സ്വന്തമാണെന്നും, ഈ പ്രമാണം വിക്കിമീഡിയ കോമൺസിൽ പിന്നീട് മാറ്റാനാവത്തവിധം [https://creativecommons.org/licenses/by-sa/4.0/ ക്രിയേറ്റീവ് കോമൺസ് ആട്രിബ്യൂഷൻ-ഷെയർഎലൈക് 4.0] ഉപയോഗാനുമതിയിൽ പ്രസിദ്ധീകരിക്കാമെന്നും [https://wikimediafoundation.org/wiki/Terms_of_Use/ml ഉപയോഗനിബന്ധനകൾ] അംഗീകരിക്കുന്നുവെന്നും സാക്ഷ്യപ്പെടുത്തുന്നു.",
        "foreign-structured-upload-form-label-not-own-work-message-shared": "ഈ പ്രമാണത്തിന്റെ പകർപ്പവകാശം താങ്കളുടെ സ്വന്തമല്ലെങ്കിൽ അഥവാ മറ്റൊരു ഉപയോഗാനുമതിയിലാണ് പ്രമാണം പ്രസിദ്ധീകരിക്കാൻ ഉദ്ദേശിക്കുന്നതെങ്കിൽ [https://commons.wikimedia.org/wiki/Special:UploadWizard?uselang=ml കോമൺസിലെ അപ്‌ലോഡ് സഹായി] ഉപയോഗിക്കുന്നത് പരിഗണിക്കുക.",
        "foreign-structured-upload-form-label-not-own-work-local-shared": "ഈ പ്രമാണം അവരുടെ നയങ്ങൾക്കനുസൃതമായി അപ്‌ലോഡ് ചെയ്യാൻ സൈറ്റ് അനുവദിക്കുമെങ്കിൽ [[Special:Upload|{{SITENAME}} സംരംഭത്തിലെ അപ്‌ലോഡ് താൾ]] പരീക്ഷിച്ചു നോക്കാവുന്നതാണ്.",
-       "foreign-structured-upload-form-2-label-intro": "{{SITENAME}} സംരംഭത്തിലേക്ക് ഒരു ചിത്രം സംഭാവന ചെയ്യുന്നതിന് നന്ദി. നിബന്ധനകൾ പാലിക്കുന്നുണ്ടോയെന്ന് പരിശോധിക്കുക:",
-       "foreign-structured-upload-form-2-label-ownwork": "ഇത് <strong>താങ്കളുടെ സ്വന്തം സൃഷ്ടി</strong> ആയിരിക്കണം, ഇന്റർനെറ്റിൽ നിന്ന് സംഘടിപ്പിച്ചത് ആയിരിക്കരുത്",
-       "foreign-structured-upload-form-2-label-noderiv": "ഇതിൽ <strong>മറ്റുള്ളവരുടെ സൃഷ്ടികൾ ഉൾപ്പെടരുത്</strong>, അവയിൽ നിന്ന് പ്രചോദിതമായി സൃഷ്ടിച്ചതും പാടില്ല",
-       "foreign-structured-upload-form-2-label-useful": "ഇത് <strong>വൈജ്ഞാനിക  മൂല്യമുള്ളതും</strong> മറ്റുള്ളവർക്ക് വിദ്യാഭ്യാസാവശ്യങ്ങൾക്ക് ഉപയോഗിക്കാനാകുന്നതുമാവണം",
-       "foreign-structured-upload-form-2-label-ccbysa": "ഇത് ഇന്റർനെറ്റിൽ  [https://creativecommons.org/licenses/by-sa/4.0/ ക്രിയേറ്റീവ് കോമൺസ് ആട്രിബ്യൂഷൻ-ഷെയർഎലൈക് 4.0] ഉപയോഗാനുമതിയിൽ <strong>എന്നെന്നേയ്ക്കുമായി പ്രസിദ്ധീകരിക്കുന്നതുമാവണം</strong>",
-       "foreign-structured-upload-form-2-label-alternative": "മുകളിൽ കൊടുത്തിരിക്കുന്നതത്രയും പാലിക്കുന്നില്ലെങ്കിലും, അതൊരു സ്വതന്ത്ര ഉപയോഗാനുമതിയിൽ ഉള്ളതാണെങ്കിൽ [https://commons.wikimedia.org/wiki/Special:UploadWizard കോമൺസിലെ അപ്‌ലോഡ് സഹായി] ഉപയോഗിച്ച് താങ്കൾക്ക് ഈ പ്രമാണം അപ്‌ലോഡ് ചെയ്യാൻ സാധിച്ചേക്കാം.",
-       "foreign-structured-upload-form-2-label-termsofuse": "ഈ പ്രമാണം അപ്‌ലോഡ് ചെയ്യുന്നത് വഴി, ഈ പ്രമാണത്തിന്റെ പകർപ്പവകാശം താങ്കൾക്ക് സ്വന്തമാണെന്ന് താങ്കൾ സാക്ഷ്യപ്പെടുത്തുന്നുണ്ട്, അതോടൊപ്പം ഈ പ്രമാണം ഇനി മാറ്റാനാവാത്ത വിധം വിക്കിമീഡിയ കോമൺസിൽ ക്രിയേറ്റീവ് കോമൺസ് ആട്രിബ്യൂഷൻ-ഷെയർഎലൈക് 4.0 ഉപയോഗാനുമതി പ്രകാരമാണ് താങ്കൾ പ്രസിദ്ധീകരിക്കുന്നതെന്നും, [https://wikimediafoundation.org/wiki/Terms_of_Use ഉപയോഗനിബന്ധനകൾക്കും] സമ്മതിക്കുകയും ചെയ്യുന്നുണ്ട്.",
-       "foreign-structured-upload-form-3-label-question-website": "ഈ ചിത്രം ഏതെങ്കിലും വെബ്‌സൈറ്റിൽ നിന്ന് ഡൗൺലോഡ് ചെയ്തതോ, ചിത്രങ്ങൾ തിരഞ്ഞ് ലഭ്യമാക്കിയതോ ആണോ?",
-       "foreign-structured-upload-form-3-label-question-ownwork": "താങ്കൾ ഈ ചിത്രം സ്വന്തമായി (ഫോട്ടോ എടുത്ത്, ചിത്രം വരച്ച് തുടങ്ങിയ രീതികളിൽ) സൃഷ്ടിച്ചതാണോ?",
-       "foreign-structured-upload-form-3-label-question-noderiv": "ഇത് ലോഗോ പോലുള്ള മറ്റാരുടെയെങ്കിലും സൃഷ്ടി ഉൾപ്പെടുന്ന ചിത്രം ആണോ, അല്ലെങ്കിൽ അതിൽ നിന്ന് പ്രചോദനം ഉൾക്കൊണ്ട് സൃഷ്ടിച്ചതാണോ?",
-       "foreign-structured-upload-form-3-label-yes": "അതെ",
-       "foreign-structured-upload-form-3-label-no": "അല്ല",
-       "foreign-structured-upload-form-3-label-alternative": "അങ്ങനെയെങ്കിൽ നിർഭാഗ്യവശാൽ, ഈ ഉപകരണം ഉപയോഗിച്ച് ഈ പ്രമാണം അപ്‌ലോഡ് ചെയ്യുന്നത് പിന്തുണയ്ക്കാനാവില്ല. അതൊരു സ്വതന്ത്ര ഉപയോഗാനുമതിയിൽ ഉള്ളതാണെങ്കിൽ [https://commons.wikimedia.org/wiki/Special:UploadWizard കോമൺസിലെ അപ്‌ലോഡ് സഹായി] ഉപയോഗിച്ച് താങ്കൾക്ക് ഈ പ്രമാണം അപ്‌ലോഡ് ചെയ്യാൻ സാധിച്ചേക്കാം.",
-       "foreign-structured-upload-form-4-label-good": "ഈ ഉപകരണം ഉപയോഗിച്ച്, മറ്റുള്ളവരുടെ സൃഷ്ടികൾ ഉൾപ്പെടാത്ത, വിദ്യാഭ്യാസ ആവശ്യങ്ങൾക്ക് താങ്കൾ സൃഷ്ടിച്ച പടങ്ങളോ, താങ്കൾ എടുത്ത ഫോട്ടോഗ്രാഫുകളോ താങ്കൾക്ക് അപ്‌ലോഡ് ചെയ്യാവുന്നതാണ്.",
-       "foreign-structured-upload-form-4-label-bad": "സേർച്ച് എഞ്ചിനിൽ നിന്ന ലഭിച്ച അല്ലെങ്കിൽ മറ്റ് വെബ്‌സൈറ്റുകളിൽ നിന്ന് അപ്‌ലോഡ് ചെയ്ത ചിത്രങ്ങൾ അപ്‌ലോഡ് ചെയ്യാൻ കഴിയില്ല.",
        "backend-fail-stream": "$1 എന്ന പ്രമാണം സ്ട്രീം ചെയ്യാൻ കഴിഞ്ഞില്ല.",
        "backend-fail-backup": "$1 എന്ന പ്രമാണത്തിന്റെ ബാക്ക്അപ് എടുക്കാൻ കഴിഞ്ഞില്ല.",
        "backend-fail-notexists": "$1 എന്ന പ്രമാണം നിലവിലില്ല.",
        "rollbackfailed": "റോൾബാക്ക് പരാജയപ്പെട്ടു",
        "cantrollback": "തിരുത്ത് തിരസ്കരിക്കുവാൻ സാധിക്കുകയില്ല. ഒരു ഉപയോക്താവ് മാത്രമാണ് ഈ താളിൽ സം‌ഭാവന ചെയ്തിരിക്കുന്നത്.",
        "alreadyrolled": "[[:$1]] എന്ന താളിൽ [[User:$2|$2]] ([[User talk:$2|സംവാദം]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) നടത്തിയ തിരുത്തലുകൾ മുൻപ്രാപനം ചെയ്യാൻ സാധിക്കുന്നതല്ല. മറ്റാരോ താൾ തിരുത്തുകയോ മുൻപ്രാപനം ചെയ്യുകയോ ചെയ്തിരിക്കുന്നു.\n\nതാളിലെ അവസാന തിരുത്തൽ ചെയ്തിരിക്കുന്നത് [[User:$3|$3]] ([[User talk:$3|സംവാദം]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) ആണ്.",
-       "editcomment": "തിരുത്തലിന്റെ ചുരുക്കം: \"''$1''\" എന്നായിരുന്നു.",
+       "editcomment": "തിരുത്തലിന്റെ ചുരുക്കം: <em>$1</em> എന്നായിരുന്നു.",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|സംവാദം]]) നടത്തിയ തിരുത്തലുകൾ നീക്കം ചെയ്തിരിക്കുന്നു; നിലവിലുള്ള പതിപ്പ് [[User:$1|$1]] സൃഷ്ടിച്ചതാണ്",
        "revertpage-nouser": "മറയ്ക്കപ്പെട്ട ഉപയോക്താവ് നടത്തിയ തിരുത്തലുകൾ {{GENDER:$1|[[User:$1|$1]]}} സൃഷ്ടിച്ച അവസാന പതിപ്പിലേയ്ക്ക് മുൻപ്രാപനം ചെയ്തിരിക്കുന്നു",
        "rollback-success": "$1 ചെയ്ത തിരുത്ത് തിരസ്ക്കരിച്ചിരിക്കുന്നു; $2 ചെയ്ത തൊട്ടു മുൻപത്തെ പതിപ്പിലേക്ക് സേവ് ചെയ്യുന്നു.",
        "default-skin-not-found": "അയ്യോ! <code dir=\"ltr\"> $wgDefaultSkin</code> നിർവചിക്കപ്പെട്ടതുപ്രകാരമുള്ള താങ്കളുടെ വിക്കിയുടെ സ്വതേയുള്ള ദൃശ്യരൂപമായ <code>$1</code>, ലഭ്യമല്ല.\n\nതാങ്കളുടെ ഇൻസ്റ്റലേഷനിൽ താഴെക്കൊടുക്കുന്ന {{PLURAL:$4|ദൃശ്യരൂപം|ദൃശ്യരൂപങ്ങൾ}} ഉണ്ടാകേണ്ടതാണ്. അവ എങ്ങനെ ക്രമീകരിക്കാം എന്നും സ്വതേ വേണ്ടത് എങ്ങനെ സജ്ജമാക്കാം എന്നും [https://www.mediawiki.org/wiki/Manual:Skin_configuration ദൃശ്യരൂപം സജ്ജമാക്കൽ സഹായിയിൽ] കാണുക.\n\n$2\n\n; താങ്കൾ മീഡിയവിക്കി ഇൻസ്റ്റോൾ ചെയ്തതേ ഉള്ളുവെങ്കിൽ:\n: ഗിറ്റിൽ നിന്ന് അല്ലെങ്കിൽ മറ്റെങ്കിലും മാർഗ്ഗം ഉപയോഗിച്ച് സോഴ്സ് കോഡ് നേരിട്ട് ഉപയോഗിക്കുകയായിരിന്നെങ്കിൽ ഇത് സംഭവിച്ചേക്കാം. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's ദൃശ്യരൂപ ഡയറക്ടറിയിൽ നിന്ന്], ഇനിക്കൊടുക്കുന്ന മാർഗ്ഗങ്ങൾ ഉപയോഗിച്ച് ഏതാനം ദൃശ്യരൂപങ്ങൾ ഇൻസ്റ്റോൾ ചെയ്യാൻ നോക്കുക:\n:* [https://www.mediawiki.org/wiki/Download ടാർബോൾ ഇൻസ്റ്റോളർ] ഡൗൺലോഡ് ചെയ്യുക, അതിൽ നിരവധി ദൃശ്യരൂപങ്ങളും അനുബന്ധങ്ങളും ഉൾപ്പെടുത്തിയിരിക്കുന്നു. അതിൽ നിന്നും താങ്കൾക്ക് <code>skins/</code> ഡയറക്ടറി പകർത്താവുന്നതാണ്.\n:* ഓരോരോ ദൃശ്യരൂപങ്ങളും ടാർബോളുകളായി ഒറ്റയ്ക്കൊറ്റയ്ക്കും  [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org സംരംഭത്തിൽ] നിന്നും ഡൗൺലോഡ് ചെയ്യാവുന്നതാണ്.\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins ഗിറ്റ് ഉപയോഗിച്ച് ദൃശ്യരൂപങ്ങൾ ഡൗൺലോഡ് ചെയ്യൽ].\n: താങ്കളൊരു മീഡിയവിക്കി ഡവലപ്പറാണെങ്കിൽ ഇത് താങ്കളുടെ ഗിറ്റ് ഡെപ്പോസിറ്ററിയെ ബാധിക്കുന്നതല്ല.\n\n; മീഡിയവിക്കി താങ്കൾ അപ്ഗ്രേഡ് ചെയ്തതേ ഉള്ളുവെങ്കിൽ:\n: മീഡിയവിക്കി 1.24 ഒപ്പം അതിനു ശേഷമുള്ളവയും ഇൻസ്റ്റോൾ ചെയ്തിട്ടുള്ള ദൃശ്യരൂപങ്ങൾ സ്വതേ സജ്ജമാക്കുന്നില്ല ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery ദൃശ്യരൂപം ഓട്ടോഡിസ്കവറി സഹായം] കാണുക). ഇൻസ്റ്റോൾ ചെയ്ത {{PLURAL:$5|ദൃശ്യരൂപം|ദൃശ്യരൂപങ്ങൾ}} {{PLURAL:$5||എല്ലാം}} സജ്ജമാക്കാൻ <code>LocalSettings.php</code> താളിൽ ഇനിക്കൊടുക്കുന്ന {{PLURAL:$5|വരി|വരികൾ}} ചേർക്കുക:\n\n<pre dir=\"ltr\">$3</pre>\n\n; <code>LocalSettings.php</code> താളിൽ മാറ്റം വരുത്തിയതേയുള്ളുവെങ്കിൽ:\n: ദൃശ്യരൂപങ്ങളുടെ പേരിൽ അക്ഷരപിശകുകളുണ്ടോയെന്ന് ആവർത്തിച്ച് പരിശോധിക്കുക.",
        "default-skin-not-found-no-skins": "അയ്യോ! <code dir=\"ltr\"> $wgDefaultSkin</code> നിർവചിക്കപ്പെട്ടതുപ്രകാരമുള്ള താങ്കളുടെ വിക്കിയുടെ സ്വതേയുള്ള ദൃശ്യരൂപമായ <code>$1</code>, ലഭ്യമല്ല.\n\nതാങ്കൾ ദൃശ്യരൂപങ്ങളൊന്നും ഇൻസ്റ്റോൾ ചെയ്തിട്ടില്ല.\n\n; താങ്കൾ മീഡിയവിക്കി ഇൻസ്റ്റോൾ ചെയ്തതേ അല്ലെങ്കിൽ അപ്‌ഗ്രേഡ് ചെയ്തതേ ഉള്ളുവെങ്കിൽ:\n: ഗിറ്റിൽ നിന്ന് അല്ലെങ്കിൽ മറ്റെങ്കിലും മാർഗ്ഗം ഉപയോഗിച്ച് സോഴ്സ് കോഡ് നേരിട്ട് ഉപയോഗിക്കുകയായിരിന്നെങ്കിൽ ഇത് സംഭവിച്ചേക്കാം. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's ദൃശ്യരൂപ ഡയറക്ടറിയിൽ നിന്ന്], ഇനിക്കൊടുക്കുന്ന മാർഗ്ഗങ്ങൾ ഉപയോഗിച്ച് ഏതാനം ദൃശ്യരൂപങ്ങൾ ഇൻസ്റ്റോൾ ചെയ്യാൻ നോക്കുക:\n:* [https://www.mediawiki.org/wiki/Download ടാർബോൾ ഇൻസ്റ്റോളർ] ഡൗൺലോഡ് ചെയ്യുക, അതിൽ നിരവധി ദൃശ്യരൂപങ്ങളും അനുബന്ധങ്ങളും ഉൾപ്പെടുത്തിയിരിക്കുന്നു. അതിൽ നിന്നും താങ്കൾക്ക് <code>skins/</code> ഡയറക്ടറി പകർത്താവുന്നതാണ്.\n:* ഓരോരോ ദൃശ്യരൂപങ്ങളും ടാർബോളുകളായി ഒറ്റയ്ക്കൊറ്റയ്ക്കും  [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org സംരംഭത്തിൽ] നിന്നും ഡൗൺലോഡ് ചെയ്യാവുന്നതാണ്.\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins ഗിറ്റ് ഉപയോഗിച്ച് ദൃശ്യരൂപങ്ങൾ ഡൗൺലോഡ് ചെയ്യൽ].\n: താങ്കളൊരു മീഡിയവിക്കി ഡവലപ്പറാണെങ്കിൽ ഇത് താങ്കളുടെ ഗിറ്റ് ഡെപ്പോസിറ്ററിയെ ബാധിക്കുന്നതല്ല. ദൃശ്യരൂപങ്ങൾ എങ്ങനെ ക്രമീകരിക്കാം എന്നും സ്വതേ വേണ്ടത് എങ്ങനെ സജ്ജമാക്കാം എന്നും [https://www.mediawiki.org/wiki/Manual:Skin_configuration ദൃശ്യരൂപം സജ്ജമാക്കൽ സഹായിയിൽ] കാണുക.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (സജ്ജം)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''സജ്ജമല്ല''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>സജ്ജമല്ല</strong>)",
        "mediastatistics": "മീഡിയ സ്ഥിതിവിവരക്കണക്കുകൾ",
        "mediastatistics-summary": "അപ്‌ലോഡ് ചെയ്തിട്ടുള്ള പ്രമാണ തരങ്ങളെക്കുറിച്ചുള്ള സ്ഥിതിവിവരക്കണക്കുകൾ. ഇത് പ്രമാണത്തിന്റെ ഏറ്റവും പുതിയ പതിപ്പ് മാത്രമേ ഉൾക്കൊള്ളുന്നുള്ളു. പഴയ അഥവാ മായ്ക്കപ്പെട്ട പ്രമാണപതിപ്പുകൾ ഉൾക്കൊള്ളുന്നില്ല.",
        "mediastatistics-nbytes": "{{PLURAL:$1|ഒരു ബൈറ്റ്|$1 ബൈറ്റ്}} ($2; $3%)",
index 27d49c6..89929c0 100644 (file)
@@ -13,7 +13,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Sembuk",
-                       "Munkhzaya.E"
+                       "Munkhzaya.E",
+                       "Macofe"
                ]
        },
        "tog-underline": "Линкүүдийн доогуур зураас зур:",
        "myprivateinfoprotected": "Танд хувийн мэдээллээ засварлах эрх байхгүй байна.",
        "mypreferencesprotected": "Та өөрийн тохиргоог өөрчлөх зөвшөөрөлгүй байна.",
        "ns-specialprotected": "Тусгай хуудсуудыг засварлах боломжгүй.",
-       "titleprotected": "[[User:$1|$1]] нь энэ хуудсыг үүсгэх явдыг хорьжээ.\nШалтгаан нь: ''$2''.",
+       "titleprotected": "[[User:$1|$1]] нь энэ хуудсыг үүсгэх явдыг хорьжээ.\nШалтгаан нь: <em>$2</em>.",
        "filereadonlyerror": "\"$1\" файлыг өөрчилж чадсангүй, \"$2\" файлын санг зөвхөн уншихаар тохируулсан байна.\n\nТүүнийг түгжсэн админы тайлбар: \"$3\".",
        "invalidtitle-knownnamespace": "Гарчигийг \"$2\" namespace, \"$3\" бичвэртэй буруу оруулсан байна",
        "invalidtitle-unknownnamespace": "$1 гэсэн үл мэдэгдэх неймспайсын дугаар, \"$2\" бичвэртэй буруу гарчиг байна.",
        "recentchanges-label-bot": "Робот гүйцэтгэсэн засвар",
        "recentchanges-label-unpatrolled": "Энэ засварыг манаж амжаагүй",
        "recentchanges-label-plusminus": "Өөрчлөгдсөн байт хэмжээ",
-       "recentchanges-legend-heading": "'''Таних үсэг:'''",
+       "recentchanges-legend-heading": "<strong>Таних үсэг:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|жагсааж харах]])",
        "rcnotefrom": "Доорх нь '''$2'''-с хойших өөрчлөлтүүд ('''$1''' хүртэлхийг харуулав) юм.",
        "rclistfrom": "$3 $2-с хойших шинэ засваруудыг үзүүлэх",
        "rollbackfailed": "Буцааж чадсангүй",
        "cantrollback": "Засварласан хэсгийг хуучин төлөвт шилжүүлж чадсангүй;\nсүүлчийн засварыг хийгч нь энэ хуудасны цорын ганц бичигч байна.",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|яриа]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])-н хийсэн [[:$1]] дэх сүүлчийн засварыг буцаах боломжгүй байна; хэн нэг нь аль хэдийн уг хуудсыг засварласан буюу буцаасан байна.\n\n\nХуудаст хамгийн сүүлд засвар хийсэн хэрэглэгч нь [[User:$3|$3]] ([[User talk:$3|яриа]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Засварлалтын агуулга нь: \"''$1''\".",
+       "editcomment": "Засварлалтын агуулга нь: <em>$1</em>.",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|яриа]])-н хийсэн засваруудыг [[User:$1|$1]]-ий хийсэн сүүлийн засварт буцаан шилжүүллээ.",
        "revertpage-nouser": "(Хэрэглэгийн нэрийг устгасан)-н хийсэн засварыг [[User:$1|$1]]-н сүүлийн засвар руу буцаав",
        "rollback-success": "$1-н өөрчлөлтүүдийг $2-н үйлдсэн сүүлийн хувилбар руу буцаалаа.",
index 338ed14..1f7e833 100644 (file)
        "myprivateinfoprotected": "आपणास आपली वैयक्तिक माहिती बदलण्याची परवानगी नाही.",
        "mypreferencesprotected": "आपणास आपला पसंतीक्रम बदलण्याची परवानगी नाही.",
        "ns-specialprotected": "विशेष पाने संपादित करता येत नाहीत.",
-       "titleprotected": "या शीर्षकाचे पान सदस्य [[User:$1|$1]]ने निर्मितीपासून सुरक्षित केलेले आहे.त्याने याचे \"\"$2\"\" हे कारण नमूद केलेले आहे.",
+       "titleprotected": "या शीर्षकाचे पान सदस्य [[User:$1|$1]]ने निर्मितीपासून सुरक्षित केलेले आहे.त्याने याचे <em>$2</em> हे कारण नमूद केलेले आहे.",
        "filereadonlyerror": "\"$1\" संचिकेचा सुधार अशक्य आहे कारण संचिकाभांडार  \"$2\" हे 'फक्त वाचा'(रीड ओन्ली) या स्थितीतच आहे.\n\nज्या प्रशासकाने हे कुलुपबंद केले त्यांनी त्यांनी दिलेले स्पष्टीकरण आहे: \"$3\".",
        "invalidtitle-knownnamespace": "\"$2\" नामविश्वात \"$3\" मजकूराचे अयोग्य शीर्षक",
        "invalidtitle-unknownnamespace": "अनोळखी नामविश्वाच्या आकड्यासह अवैध मथळा $1 व मजकूर \"$2\"",
        "undo-summary-username-hidden": "अज्ञात सदस्याची $1 आवृत्ती परतवा",
        "cantcreateaccounttitle": "खाते उघडू शकत नाही",
        "cantcreateaccount-text": "('''$1''')या आंतरजाल अंकपत्त्याकडूनच्या खाते निर्मितीस [[User:$3|$3]]ने अटकाव केला आहे.\n\n$3ने ''$2'' कारण दिले आहे.",
-       "cantcreateaccount-range-text": "'''$1'''आवाक्यातील आंतरजाल अंकपत्ते,ज्यात आपल्या ('''$4''') या अंकपत्त्याचा समावेश आहे, [[User:$3|$3]] ने त्यांच्या खाते निर्मितीस प्रतिबंध केला आहे.\n\n$3 ने ''$2''कारण दिले आहे.",
+       "cantcreateaccount-range-text": "<strong>$1</strong>आवाक्यातील आंतरजाल अंकपत्ते,ज्यात आपल्या (<strong>$4</strong>) या अंकपत्त्याचा समावेश आहे, [[User:$3|$3]] ने त्यांच्या खाते निर्मितीस प्रतिबंध केला आहे.\n\n$3 ने <em>$2</em>कारण दिले आहे.",
        "viewpagelogs": "या पानाच्या नोंदी पहा",
        "nohistory": "या पृष्ठासाठी संपादन इतिहास अस्तित्वात नाही.",
        "currentrev": "सध्याची आवृत्ती",
        "recentchanges-label-bot": "हे संपादन एका सांगकाम्याकडून केले गेले आहे",
        "recentchanges-label-unpatrolled": "हे संपादन अजून तपासल्या गेले नाही",
        "recentchanges-label-plusminus": "या पानाचा आकार इतक्या बाइटस् ने बदलला",
-       "recentchanges-legend-heading": "'''विवरण:'''",
+       "recentchanges-legend-heading": "<strong>विवरण:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नविन पानांची यादी]] हेही पाहा)",
        "recentchanges-legend-plusminus": "(''±१२३'')",
        "recentchanges-submit": "दाखवा",
        "watchthisupload": "या पानावर बदलांसाठी लक्ष ठेवा.",
        "filewasdeleted": "या नावाची संचिका या पूर्वी एकदा चढवून नंतर वगळली होती.तुम्ही ती पुन्हा चढवण्या अगोदर $1 तपासा.",
        "filename-bad-prefix": "तुम्ही चढवत असलेल्या संचिकेचे नाव '''\"$1\"''' पासून सुरू होते, जे की अंकीय छाउ (कॅमेरा) ने दिलेले अवर्णनात्मक नाव आहे.कृपया तुमच्या संचिकेकरिता अधिक वर्णनात्मक नाव निवडा.",
-       "upload-success-subj": "यशस्वीरीत्या अपभारित केले",
-       "upload-success-msg": "तुमचे [$2] येथून अपभारण यशस्वी ठरले. ते येथे उपलब्ध आहे: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "अपभारणातील त्रूटि",
-       "upload-failure-msg": "[$2] येथून तुमच्या अपभारणात अडचण निर्माण झाली:\n\n$1",
-       "upload-warning-subj": "अपभारण ताकिद",
-       "upload-warning-msg": "तुमच्या अपभारणात [$2] येथून अडचण निर्माण झाली. तुम्ही [[Special:Upload/stash/$1|चढवण्याचा अर्ज]] पुन्हा भरून ही चूक दूर करू शकता.",
        "upload-proto-error": "चूकीचा शिष्टाचार",
        "upload-proto-error-text": "दूरस्थ अपभारणाच्या क्रियेत <code>http://</code>पासून किंवा <code>ftp://</code>पासून सुरू होणारी URL लागतात.",
        "upload-file-error": "अंतर्गत त्रुटी",
        "upload-dialog-button-done": "झाले",
        "upload-dialog-button-save": "जतन करा",
        "upload-dialog-button-upload": "अपभारण करा",
-       "upload-form-label-select-file": "संचिका निवडा",
        "upload-form-label-infoform-title": "तपशील",
        "upload-form-label-infoform-name": "नाव",
        "upload-form-label-infoform-description": "वर्णन",
        "foreign-structured-upload-form-label-own-work": "हे माझे स्वत:चे काम आहे",
        "foreign-structured-upload-form-label-infoform-categories": "वर्ग",
        "foreign-structured-upload-form-label-infoform-date": "दिनांक",
-       "foreign-structured-upload-form-3-label-yes": "होय",
-       "foreign-structured-upload-form-3-label-no": "नाही",
        "backend-fail-stream": "$1 या संचिकेचा स्त्रोत शोधता आला नाही.",
        "backend-fail-backup": "$1 या संचिकेची आधारप्रत बनविता आली नाही.",
        "backend-fail-notexists": "$1 ही संचिका अस्तित्वात नाही.",
        "querypage-disabled": "हे विषेश पान कार्यमापन (performance) करणांमुळे प्रतिबंधित करण्यात आले आहे.",
        "apihelp": "एपीआय साहाय्य",
        "apihelp-no-such-module": "मॉड्यूल \"$1\" सापडत नाही.",
+       "apisandbox": "एपीआय(API) धूळपाटी",
+       "apisandbox-api-disabled": "या संकेतस्थळावर एपीआय अक्षम केला आहे.",
+       "apisandbox-intro": "\"मिडियाविकि वेब सर्व्हीस एपीआय\" वर प्रयोग करण्यासाठी या पानाचा वापर करा. एपीआय वापरण्याच्या अधिक तपशिलासाठी [//www.mediawiki.org/wiki/API:Main_page एपीआय दस्ताऐवजीकरण] हे पान बघा. उदाहरणार्थ:[//www.mediawiki.org/wiki/API#A_simple_example मुख्य पानाचा आशय मिळवा]. अधिक उदाहरणे बघण्यास एखादी क्रिया निवडा.\n\n\"याची नोंद घ्या कि ही धूळपाटी असली तरी, या पानावर आपण केलेल्या क्रियांद्वारे विकिवर फेरफार होऊ शकतो.\"",
+       "apisandbox-submit": "विनंती करा",
+       "apisandbox-reset": "हटवा",
+       "apisandbox-examples": "उदाहरण",
+       "apisandbox-results": "निकाल",
+       "apisandbox-request-url-label": "'यूआरएल'ची विनंती करा:",
+       "apisandbox-request-time": "विनंती वेळ:$1",
        "booksources": "पुस्तक स्रोत",
        "booksources-search-legend": "पुस्तक स्रोत शोधा",
        "booksources-search": "शोधा",
        "wlheader-showupdated": "ती पाने, जी आपण दिलेल्या शेवटच्या भेटीनंतर बदललेली आहेत, '''ठळक''' दाखवली आहेत.",
        "wlnote": "खाली $3, $4 चे गेल्या {{PLURAL:$2|तासातील|<strong>$2</strong> तासांतील}} {{PLURAL:$1|शेवटचा बदल दिला आहे|शेवटाचे<strong>$1</strong>बदल दिले आहेत}}.",
        "wlshowlast": "मागील $1 तास $2 दिवस दाखवा",
-       "watchlistall2": "सर्व",
        "watchlist-hide": "लपवा",
        "watchlist-submit": "दर्शवा",
        "wlshowtime": "शेवटचे दाखवा:",
        "rollbackfailed": "द्रूतमाघार फसली",
        "cantrollback": "जुन्या आवृत्तीकडे परतवता येत नाही; शेवटचा संपादक या पानाचा एकमात्र लेखक आहे.",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|Talk]] [[Special:Contributions/$2|{{int:contribslink}}]])चे शेवटाचे [[:$1]]वे संपादन माघारी परतवता येत नाही; पान आधीच कुणी माघारी परतवले आहे किंवा संपादित केले आहे.\n\nशेवटचे संपादन [[User:$3|$3]] ([[User talk:$3|Talk]] [[Special:Contributions/$3|{{int:contribslink}}]])-चे होते.",
-       "editcomment": "संपादन सारांश \"''$1''\" होता.",
+       "editcomment": "संपादन सारांश <em>$1</em> होता.",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|चर्चा]]) यांनी केलेले बदल [[User:$1|$1]] यांच्या आवृत्तीकडे पूर्वपदास नेले.",
        "revertpage-nouser": "लपविलेल्या सदस्याची संपादने उलटवून {{GENDER:$1|[[User:$1|$1]]}}च्या मागील आवृत्तीप्रमाणे पूर्ववत केले",
        "rollback-success": "$1 ने उलटवलेली संपादने;$2 च्या आवृत्तीस परत नेली.",
        "log-description-pagelang": "या पानातील भाषाबदलाच्या नोंदी आहेत.",
        "logentry-pagelang-pagelang": "$1 ने $3 करीता पानाची भाषा $4 वरुन $5 ला {{GENDER:$2|बदलली}}",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (सक्षम केला)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''अक्षम केला''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>अक्षम केला</strong>)",
        "mediastatistics": "माध्यम सांख्यिकी",
        "mediastatistics-table-extensions": "शक्य विस्तारके",
        "mediastatistics-table-count": "संचिकांची संख्या",
index cad0551..aa44e04 100644 (file)
        "myprivateinfoprotected": "Anda tidak mempunyai kebenaran untuk menyunting maklumat peribadi anda.",
        "mypreferencesprotected": "Anda tidak mempunyai kebenaran untuk menyunting tetapan keutamaan anda.",
        "ns-specialprotected": "Laman khas tidak boleh disunting.",
-       "titleprotected": "Tajuk ini telah dilindungi oleh [[User:$1|$1]] daripada dicipta. Sebab yang diberikan ialah ''$2''.",
+       "titleprotected": "Tajuk ini telah dilindungi oleh [[User:$1|$1]] daripada dicipta. Sebab yang diberikan ialah <em>$2</em>.",
        "filereadonlyerror": "Fail \"$1\" tidak dapat diubah suai kerana repositori fail \"$2\" berada dalam mod baca sahaja.\n\nPenyelia yang telah menguncinya memberikan penjelasan berikut: \"$3\".",
        "invalidtitle-knownnamespace": "Tajuk tidak sah dengan ruang nama \"$2\" dan teks \"$3\"",
        "invalidtitle-unknownnamespace": "Tajuk tidak sah dengan nombor ruang nama tidak dikenali $1 dan teks \"$2\"",
        "undo-summary-username-hidden": "Buat asal semakan $1 oleh pengguna tersembunyi",
        "cantcreateaccounttitle": "Akaun tidak dapat dibuka",
        "cantcreateaccount-text": "Pembukaan akaun daripada alamat IP ini (<b>$1</b>) telah disekat oleh [[User:$3|$3]].\n\nSebab yang diberikan oleh $3 ialah ''$2''",
-       "cantcreateaccount-range-text": "Pembukaan akaun dari alamat-alamat IP dalam julat '''$1''', termasuk alamat IP anda ('''$4'''), telah disekat oleh [[User:$3|$3]].\n\nSebab yang diberikan oleh $3 ialah ''$2''",
+       "cantcreateaccount-range-text": "Pembukaan akaun dari alamat-alamat IP dalam julat <strong>$1</strong>, termasuk alamat IP anda (<strong>$4</strong>), telah disekat oleh [[User:$3|$3]].\n\nSebab yang diberikan oleh $3 ialah <em>$2</em>",
        "viewpagelogs": "Lihat log bagi laman ini",
        "nohistory": "Tiada sejarah suntingan bagi laman ini.",
        "currentrev": "Semakan semasa",
        "recentchanges-label-bot": "Suntingan ini dilakukan oleh bot",
        "recentchanges-label-unpatrolled": "Suntingan ini belum dirondai",
        "recentchanges-label-plusminus": "Saiz laman telah berubah sebanyak jumlah bait ini",
-       "recentchanges-legend-heading": "'''Petunjuk:'''",
+       "recentchanges-legend-heading": "<strong>Petunjuk:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (lihat juga [[Special:NewPages|senarai laman baru]])",
        "rcnotefrom": "Yang berikut adalah {{PLURAL:$5|suntingan|suntingan-suntingan}} sejak <strong>$3, $4</strong> (selebihi <strong>$1</strong> dipaparkan).",
        "rclistfrom": "Paparkan perubahan sejak $3 $2",
        "upload-dialog-button-done": "Siap",
        "upload-dialog-button-save": "Simpan",
        "upload-dialog-button-upload": "Muat naik",
-       "upload-form-label-select-file": "Pilih fail",
        "upload-form-label-infoform-title": "Butiran",
        "upload-form-label-infoform-name": "Nama",
        "upload-form-label-infoform-description": "Keterangan",
        "rollbackfailed": "Pengunduran gagal",
        "cantrollback": "Suntingan tersebut tidak dapat dibalikkan: penyumbang terakhir adalah satu-satunya pengarang bagi rencana ini.",
        "alreadyrolled": "Suntingan terakhir bagi [[:$1]] oleh [[Pengguna:$2|$2]] ([[Perbincangan pengguna:$2|bincang]]{{int:pipe-separator}}[[Khas:Sumbangan/$2|{{int:contribslink}}]]) tidak dapat dibalikkan; seorang pengguna lain sudahpun menyunting atau membalikkan laman itu.\n\nSuntingan terakhir kepada laman ini telah dibuat oleh [[Pengguna:$3|$3]] ([[Perbincangan pengguna:$3|bincang]]{{int:pipe-separator}}[[Khas:Sumbangan/$3|{{int:contribslink}}]]).",
-       "editcomment": "Ringkasan sutingan: \"''$1''\".",
+       "editcomment": "Ringkasan sutingan: <em>$1</em>.",
        "revertpage": "Membalikkan suntingan oleh [[Special:Contributions/$2|$2]] ([[User talk:$2|Perbincangan]]) kepada versi terakhir oleh [[User:$1|$1]]",
        "revertpage-nouser": "Membalikkan suntingan oleh seorang pengguna tersorok kepada semakan terakhir oleh {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Membalikkan suntingan oleh $1 kepada versi terakhir oleh $2.",
        "default-skin-not-found": "Maaf, tidak terdapat rupa asali wiki anda yang tertakrif dalam <code dir=\"ltr\">$wgDefaultSkin</code> sebagai <code>$1</code>.\n\nNampaknya pemasangan anda merangkumi {{PLURAL:$4|rupa|rupa-rupa}} yang berikut. Rujuk [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] untuk cara-cara membolehkan {{PLURAL:$4|rupa tersebut|rupa-rupa tersebut serta memilih rupa asali}}.\n\n$2\n\n; Jika anda baru memasang MediaWiki:\n: Mungkin anda memasangnya dari git, atau terus dari kod sumber dengan menggunakan suatu kaedah lain. Perkara ini dijangka. Cuba pasang beberapa rupa dari [https://www.mediawiki.org/wiki/Category:All_skins direktori rupa mediawiki.org], dengan:\n:* Memuat turun [https://www.mediawiki.org/wiki/Download pemasang tarball] yang datang dengan beberapa rupa dan sambungan. Anda boleh menyalin-tampal direktori <code>skins/</code> daripadanya.\n:* Memuatkan satu persatu tarball rupa dari [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Menggunakan Git untuk memuat turun rupa].\n: Tindakan ini seharusnya tidak mengganggu repositori git anda jika anda seorang pembangun MediaWiki.\n\n; Jika anda baru menaik taraf MediaWiki:\n: MediaWiki 1.24 ke atas tidak lagi membolehkan  secara automatik rupa-rupa yang terpasang dari luaran (rujuk [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Anda boleh menampalkan {{PLURAL:$5|baris|baris-baris}} berikut kepada <code>LocalSettings.php</code> untuk membolehkan {{PLURAL:$5|rupa|semua rupa}} yang terpasang:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Jika anda baru mengubahsuai <code>LocalSettings.php</code>:\n: Semak nama-nama rupa untuk kesilapan ejaan.",
        "default-skin-not-found-no-skins": "Maaf, tidak terdapat rupa asali wiki anda yang tertakrif dalam <code dir=\"ltr\">$wgDefaultSkin</code> sebagai <code>$1</code>.\n\nTiadanya rupa yang terpasang.\n\n; Jika anda baru memasang atau menaik taraf MediaWiki:\n: Mungkin anda memasangnya dari git, atau terus dari kod sumber dengan menggunakan suatu kaedah lain. Perkara ini dijangka. MediaWiki 1.24 ke atas tidak menyertakan sebarang rupa dalam repositori utama.  Cuba pasang beberapa rupa dari [https://www.mediawiki.org/wiki/Category:All_skins direktori rupa mediawiki.org], dengan:\n:* Memuatkan tarball rupa satu persatu dari [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Menggunakan Git untuk memuat turun rupa].\n: Tindakan ini seharusnya tidak mengganggu repositori git anda jika anda seorang pembangun MediaWiki. Rujuk [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] untuk cara-cara membolehkan penggunaan rupa-rupa serta memilih rupa asali.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (dibolehkan)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''dimatikan''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>dimatikan</strong>)",
        "mediastatistics": "Statistik media",
        "mediastatistics-summary": "Statistik mengenai jenis-jenis fail yang dimuat naik. Ini hanya mencakupi versi terbaru setiap fail. Versi-versi fail yang lama atau terpadam tidak disertakan.",
        "mediastatistics-nbytes": "$1 bait ($2; $3%)",
index af31a1c..f09f565 100644 (file)
        "myprivateinfoprotected": "Ma għandekx permess li teditja l-informazzjoni privata tiegħek.",
        "mypreferencesprotected": "Ma għandekx permess li teditja l-preferenzi tiegħek.",
        "ns-specialprotected": "Il-paġni speċjali ma jistgħux jiġu mmodifikati.",
-       "titleprotected": "Dan it-titlu ġie protett mill-ħolqien minn [[User:$1|$1]].\nIr-raġuni li ġiet mogħtija kienet ''$2''.",
+       "titleprotected": "Dan it-titlu ġie protett mill-ħolqien minn [[User:$1|$1]].\nIr-raġuni li ġiet mogħtija kienet <em>$2</em>.",
        "filereadonlyerror": "L-amministratur li sakkar offra din l-ispjegazzjoni: \"$3\".",
        "invalidtitle-knownnamespace": "Titolu validu bin-namespace \"$2\" u t-test\"$3\"",
        "invalidtitle-unknownnamespace": "Titolu validu b'numru tan-namespace mhux magħruf  $1 u t-test \"$2\"",
        "createaccountreason": "Raġuni:",
        "createacct-reason": "Raġuni",
        "createacct-reason-ph": "Għala qiegħed toħloq kont ġdid",
-       "createacct-captcha": "Kontroll tas-sigurtà",
-       "createacct-imgcaptcha-ph": "Daħħal it-test li qed tara hawn fuq",
        "createacct-submit": "Oħloq il-kont",
        "createacct-another-submit": "Oħloq kont ieħor",
        "createacct-benefit-heading": "{{SITENAME}} hi magħmula minn persuni bħalek.",
        "passwordreset-emailtext-ip": "Xi ħadd (probabbilment int, mill-indirizz IP $1) għamel rikjesta sabiex jingħata password ġdida sabiex jaċċessa l-{{SITENAME}} ($4). L-{{PLURAL:$3|utent assoċjat|utenti assoċjati}} ma' dan l-indirizz elettroniku {{PLURAL:$3|huwa|huma}}:\n\n$2\n\n{{PLURAL:$3|Din il-password temporanja se tiskadi|Dawn il-passwords temporanji se jiskadu}} fi żmien {{PLURAL:$5|ġurnata|$5 jum}}. Inti għadek tidħol fil-kont tiegħek u tagħżel password ġdida issa. Jekk xi ħadd ieħor għamel din ir-rikjesta, jew jekk ftakart il-password oriġinali, u m'għadekx trid tbiddilha, inti tista' tinjora dan il-messaġġ u tibqa' tuża' l-password il-qadima.",
        "passwordreset-emailtext-user": "{{PLURAL:$3|Din il-password temporanja se tiskadi|Dawn il-passwords temporanji se jiskadu}} fi żmien {{PLURAL:$5|ġurnata|$5 jum}}. Inti għadek tidħol fil-kont tiegħek u tagħżel password ġdida issa. Jekk xi ħadd ieħor għamel din ir-rikjesta, jew jekk ftakart il-password oriġinali, u m'għadikx trid tbiddilha, inti tista' tinjora dan il-messaġġ u tibqa' tuża' l-password il-qadima.",
        "passwordreset-emailelement": "Isem tal-utent: \n$1\n\nPassword temporanja: \n$2",
-       "passwordreset-emailsent": "Intbagħtet ittra-e għall-issettjar mill-ġdid tal-password.",
+       "passwordreset-emailsentemail": "Intbagħtet ittra-e għall-issettjar mill-ġdid tal-password.",
        "passwordreset-emailsent-capture": "Intbagħtet ittra-e għall-ssettjar mill-ġdid tal-password u l-kontenut jidher hawn taħt.",
        "passwordreset-emailerror-capture": "Ġiet ġenerata ittra-e ta' tfakkira, li l-kontenut tagħha jidher hawn taħt. Madanakollu, il-posta ma ntbagħtitx lill-utent: $1",
        "changeemail": "Biddel l-indirizz elettroniku",
        "prefs-help-prefershttps": "Din il-preferenza se tieħu effett mal-login li jmiss.",
        "prefswarning-warning": "Għamilt xi tibdil fil-preferenzi tiegħek li għandhomx ma ġewx issejvjati. Jekk se titlaq minn din il-paġna mingħajr ma tagħfas fuq \"$1\", il-preferenzi tiegħek mhumiex se jiġu aġġornati.",
        "prefs-tabs-navigation-hint": "Suġġeriment: Tista' tuża l-vleġġeġ tax-xellug u l-lemin tat-tastiera sabiex tinnaviga bejn sezzjoni u oħra.",
-       "email-address-validity-valid": "L-indirizz elettroniku jidher validu",
-       "email-address-validity-invalid": "Daħħal indirizz elettroniku validu",
        "userrights": "Ġestjoni tad-drittijiet tal-utent",
        "userrights-lookup-user": "Ġestjoni tal-gruppi tal-utent",
        "userrights-user-editname": "Daħħal isem tal-utent:",
        "right-blockemail": "Blokka utent milli jkun jista' jibgħat posta elettronika",
        "right-hideuser": "Blokka isem ta' utent, aħbih mill-pubbliku",
        "right-ipblock-exempt": "Tgħatix każ blokki tal-IP, blokki awtomatiċi u blokki ta' range ta' IP",
-       "right-proxyunbannable": "Tgħatix każ blokki fuq il-''proxy''",
        "right-unblockself": "Jiżblokkaw lilhom infushom",
        "right-protect": "Modifika l-livell ta' protezzjoni",
        "right-editprotected": "Modifika paġni protetti",
        "recentchanges-label-bot": "Din il-modifika ġiet effettwata minn bot",
        "recentchanges-label-unpatrolled": "Din il-modifika għadha ma ġietx verifikata",
        "recentchanges-label-plusminus": "Id-daqs tal-paġna nbidel b'dan in-numru ta' bytes",
-       "recentchanges-legend-heading": "'''Leġenda:'''",
+       "recentchanges-legend-heading": "<strong>Leġenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ara wkoll il-[[Special:NewPages|lista tal-paġni l-ġodda]])",
        "rcnotefrom": "Ħawn taħt jinsabu l-modifiki minn '''$2''' (sa '''$1''').",
        "rclistfrom": "Uri l-modifiki ġodda li jibdew minn $3 $2",
        "filewasdeleted": "Fajl b'dan l-isem kien itella' diġa u wara ġie mħassar.\nInti għandek tiverifika ir-$1 qabel ma tkompli bl-''upload'' mill-ġdid.",
        "filename-bad-prefix": "L-Isem tal-fajl li qiegħed itella' jibda' b''''\"$1\"''',\nli huma isem mhux deskrittiv u huwa tipikament mogħti awtomatikament minn kameras diġitali. Jekk jogħġbok agħżel isem għal fajl tiegħek aktar deskrittiv.",
        "filename-prefix-blacklist": " #<!-- ħalli din il-linja eżattament kif inhi --> <pre>\n# Is-Sintassi huwa dan segwenti:\n#   * Kollox mill-karattru \"#\" sa l-aħħar tal-linja tal-kumment\n#   * Kull linja li mhux vojta huwa prefiss għal ismijiet ta' fajl tipiċi li jiġu mogħtija minn kameras diġitali\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # ċerta mobiles\nIMG # generic\nJD # Jenoptik\nMGP # Pentax\nPICT # misc.\n #</pre> <!-- ħalli din il-linja eżattament kif inhi -->",
-       "upload-success-subj": "Mtella' b'suċċess",
-       "upload-success-msg": "It-tlugħ tal-fajl minn [$2] irnexxa. Il-fajl tiegħek huwa disponibbli hawnhekk: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Problem fit-tlugħ tal-fajl",
-       "upload-failure-msg": "Kien hemm problema bit-tlugħ tiegħek minn [$2]:\n\n$1",
-       "upload-warning-subj": "Twissija dwar it-tlugħ tal-fajls",
-       "upload-warning-msg": "Kien hemm problem bit-tlugħ tal-fajl tiegħek minn [$2]. Tista' tirritorna lura għal [[Special:Upload/stash/$1|formola]] sabiex tikkoreġi din il-problema.",
        "upload-proto-error": "Protocol ħażin",
        "upload-proto-error-text": "Għal upload remote huwa neċessarju tispeċifika l-URL li jibda' b'<code>http://</code> jew <code>ftp://</code>.",
        "upload-file-error": "Problema interna",
        "querypage-disabled": "Din il-paġna speċjali hija diżattivata għal raġunijiet ta' prestazzjoni.",
        "apihelp": "Għajnuna fuq l-API",
        "apihelp-no-such-module": "Il-modulu \"$1\" ma nstabx.",
+       "apisandbox": "Paġna tal-provi tal-API",
+       "apisandbox-api-disabled": "L-API hija diżattivata fuq dan is-sit.",
+       "apisandbox-intro": "Uża din il-paġna sabiex tesperimenta mal-'''MediaWiki web service API'''.\nŻur id-[//www.mediawiki.org/wiki/API:Main_page dokumentazzjoni tal-API] għal aktar dettalji dwar l-użu tal-API. Eżempju: [//www.mediawiki.org/wiki/API#A_simple_example ikseb il-kontenut tal-paġna prinċipali]. Agħżel azzjoni sabiex tara aktar eżempji.",
+       "apisandbox-submit": "Agħmel rikjesta",
+       "apisandbox-reset": "Ħassar",
+       "apisandbox-examples": "Eżempju",
+       "apisandbox-results": "Riżultat",
+       "apisandbox-request-url-label": "URL ta' rikjesta:",
+       "apisandbox-request-time": "Ħin ta' rikjesta: $1",
        "booksources": "Sorsi tal-kotba",
        "booksources-search-legend": "Fittex għal sorsi tal-kotba",
        "booksources-isbn": "Kodiċi ISBN:",
        "rollbackfailed": "Rollback ma ħadmitx",
        "cantrollback": "Impossibli tħassar il-modifiki; l-utent li wettaqhom huwa l-unika li għamel kontributi lil din il-paġna.",
        "alreadyrolled": "Mhuwiex possibbli li tneħħi l-modifiki ta' [[User:$2|$2]] ([[User talk:$2|diskussjoni]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) fil-paġna [[:$1]]; utent ieħor diġà immodifika din il-paġna jew inkella reġġa' lura.\n\nL-iktar modifika riċenti fuq dil-paġna saret minn [[User:$3|$3]] ([[User talk:$3|diskussjoni]]).",
-       "editcomment": "It-taqsira tal-modifika kienet: \"''$1''\".",
+       "editcomment": "It-taqsira tal-modifika kienet: <em>$1</em>.",
        "revertpage": "Modifiki mneħħa minn [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) għall-aħħar verżjoni ta' [[User:$1|$1]]",
        "revertpage-nouser": "Modifiki annullati minn (isem tal-utent imneħħi) għall-aħħar reviżjoni ta' [[User:$1|$1]]",
        "rollback-success": "Modifiki mneħħa ta' $1;\nModifikata lura għall-aħħar verżjoni ta' $2.",
        "movenosubpage": "Din il-paġna m'għandha l-ebda sottopaġna.",
        "movereason": "Raġuni:",
        "revertmove": "irkupra",
-       "delete_and_move": "Ħassar u mexxi",
        "delete_and_move_text": "==Rikjesta ta' tħassir==\nIl-Paġna tad-destinazzjoni \"[[:$1]]\" ġa teżisti.\nTrid tħassara sabiex tkun tista' tagħmel triq għal ċaqlieqa?",
        "delete_and_move_confirm": "Iva, ħassar il-paġna",
        "delete_and_move_reason": "Imħassra sabiex isseħħ it-tmexxija minn \"[[$1]]\"",
index 1412293..7ad983a 100644 (file)
@@ -21,7 +21,8 @@
                        "ကိုရာဝီ",
                        "아라",
                        "9.sinistra",
-                       "Ninjastrikers"
+                       "Ninjastrikers",
+                       "Penguinlay"
                ]
        },
        "tog-underline": "လင့်ကို မျဉ်းသားသည့် ပုံစံ -",
        "specialpage": "အထူး စာမျက်နှာ",
        "personaltools": "ကိုယ်ပိုင် ကိရိယာများ",
        "articlepage": "မာတိကာ ကြည့်ရန်",
-       "talk": "ဆွေးနွေးချက်များ",
-       "views": "á\80\95á\80¯á\80¶á\80\95á\80\94á\80ºá\80¸á\80\9eá\80½á\80\84á\80ºá\80\95á\80¼á\80\84á\80º",
+       "talk": "ဆွေးနွေးချက်",
+       "views": "á\80¡á\80\99á\80¼á\80\84á\80ºá\80\95á\80¯á\80¶á\80\85á\80¶á\80\99á\80»á\80¬á\80¸",
        "toolbox": "ကိရိယာများ",
        "userpage": "အသုံးပြုသူ၏ စာမျက်နှာကို ကြည့်ရန်",
        "projectpage": "ပရောဂျက်စာမျက်နှာကို ကြည့်ရန်",
        "viewhelppage": "အကူအညီစာမျက်နှာကို ကြည့်ရန်",
        "categorypage": "ကဏ္ဍစာမျက်နှာကို ကြည့်ရန်",
        "viewtalkpage": "ဆွေးနွေးမှုကို ကြည့်ရန်",
-       "otherlanguages": "á\80\90ခြား ဘာသာဖြင့်",
+       "otherlanguages": "á\80¡ခြား ဘာသာဖြင့်",
        "redirectedfrom": "($1 မှ ပြန်ညွှန်းထားသည်)",
        "redirectpagesub": "ပြန်ညွှန်းသော စာမျက်နှာ",
        "redirectto": "ပြန်ညွှန်းရန် -",
        "site-atom-feed": "Atom feed $1 ခု",
        "page-rss-feed": "RSS feed \"$1\" ခု",
        "page-atom-feed": "Atom feed \"$1\" ခု",
-       "red-link-title": "$1 (á\80¤á\80\85á\80¬á\80\99á\80»á\80\80á\80ºá\80\94á\80¾á\80¬ á\80\99á\80\9bá\80¾á\80­ပါ)",
+       "red-link-title": "$1 (á\80\85á\80¬á\80\99á\80»á\80\80á\80ºá\80\94á\80¾á\80¬ á\80\99á\80\9bá\80¾á\80­á\80\9eá\80±á\80¸ပါ)",
        "sort-descending": "အစဉ်လိုက်စီရန်",
        "sort-ascending": "အစဉ်လိုက် ပြောင်းပြန်စီရန်",
        "nstab-main": "စာ​မျက်​နှာ​",
        "createacct-error": "အကောင့်ဖန်တီးမှု အမှား",
        "createaccounterror": "ဤအကောင့်ကို မဖန်တီးနိုင်ပါ - $1",
        "noname": "တရားဝင် အသုံးပြုသူအမည်ကို မသတ်မှတ်ရသေးပါ။",
-       "loginsuccesstitle": "Login ဝင်​ခြင်း အောင်မြင်သည်။",
+       "loginsuccesstitle": "လော့ဂ်အင်ဝင်ပြီးပြီ",
        "loginsuccess": "'''သင်သည် {{SITENAME}} သို့ \"$1\" အဖြစ် Login ဝင်ပြီးဖြစ်သည်။'''",
        "nosuchusershort": "\"$1\" အမည်ဖြင့် အသုံးပြုသူမရှိပါ။\nစာလုံးပေါင်း ပြန်စစ်ပေးပါရန်။",
        "nouserspecified": "အသုံးပြုသူအမည်ကို ဖော်ပြရမည်ဖြစ်သည်။",
        "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|ဆွေးနွေး]]) အတွက် အကောင့်ကို ဖန်တီးပြီး ဖြစ်သည်။",
        "createaccount-title": "{{SITENAME}} အတွက် အကောင့်ပြုလုပ်ခြင်း",
        "login-throttled": "သင်သည် login ဝင်ရန် အကြိမ်မြောက်မြားစွာ အားထုတ်ခဲ့ပြီးဖြစ်သည်။\nကျေးဇူးပြု၍ ထပ်မဝင်ခင် $1 စောင့်ပေးပါ။",
-       "login-abort-generic": "Login ဝင်ခြင်း မအောင်မြင်ပါ - ထွက်သွားပြီ",
+       "login-abort-generic": "လော့ဂ်အင်ဝင်ခြင်း မအောင်မြင်ပါ - ဖျက်သိမ်းပြီး",
        "loginlanguagelabel": "ဘာသာ: $1",
        "pt-login": "အကောင့်ဝင်ရန်",
        "pt-login-button": "အကောင့်ဝင်ရန်",
        "newpassword": "စကားဝှက် အသစ် -",
        "retypenew": "စကားဝှက် အသစ်ကို ထပ်ရိုက်ပါ -",
        "resetpass_submit": "စကားဝှက်ကို သတ်မှတ်ပြီးနောက် Log in ဝင်ရန်",
-       "changepassword-success": "á\80\9eá\80\84á\80·á\80ºá\80\85á\80\80á\80¬á\80¸á\80\9dá\80¾á\80\80á\80ºá\80\80á\80­á\80¯ á\80¡á\80±á\80¬á\80\84á\80ºá\80\99á\80¼á\80\84á\80ºá\80\85á\80½á\80¬ á\80\95á\80¼á\80±á\80¬á\80\84á\80ºá\80¸á\80\9cá\80²á\80\95á\80¼á\80®á\80¸á\80\95á\80«á\80\95á\80¼á\80®á\81\8b",
+       "changepassword-success": "á\80\9eá\80\84á\80·á\80ºá\80\85á\80\80á\80¬á\80¸á\80\9dá\80¾á\80\80á\80ºá\80\80á\80­á\80¯ á\80\95á\80¼á\80±á\80¬á\80\84á\80ºá\80¸á\80\9cá\80²á\80\95á\80¼á\80®á\80¸á\80\95á\80«á\80\95á\80¼á\80®!",
        "botpasswords-label-appid": "ဘော့အမည်-",
        "botpasswords-label-create": "ဖန်တီး",
        "botpasswords-label-cancel": "မလုပ်တော့ပါ",
        "accmailtitle": "စကားဝှက်ကို ပို့ပြီးပြီ",
        "newarticle": "(အသစ်)",
        "newarticletext": "သင်သည် မရှိသေးသော စာမျက်နှာလင့် ကို ရောက်လာခြင်းဖြစ်သည်။\nစာမျက်နှာအသစ်စတင်ရန် အောက်မှ သေတ္တာထဲတွင် စတင်ရိုက်ထည့်ပါ (နောက်ထပ် သတင်းအချက်အလက်များအတွက်[$1 အကူအညီ စာမျက်နှာ]ကို ကြည့်ပါ)။\nမတော်တဆရောက်လာခြင်း ဖြစ်ပါက ဘရောက်ဆာ၏ နောက်ပြန်ပြန်သွားသော <strong>back</strong> ခလုတ်ကို နှိပ်ပါ။",
-       "noarticletext": "ဤစာမျက်နှာတွင် ယခုလက်ရှိတွင် မည်သည့်စာသားမှ မရှိပါ။\nသင်သည် အခြားစာမျက်နှာများတွင် [[Special:Search/{{PAGENAME}}|ဤစာမျက်နှာ၏ ခေါင်းစဉ်ကို ရှာနိုင်သည်]]၊ <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ဆက်စပ်ရာ Logs များကို ရှာနိုင်သည်]၊ သို့မဟုတ် [{{fullurl:{{FULLPAGENAME}}|action=edit}} ဤစာမျက်နှာကို တည်းဖြတ်နိုင်သည်]</span>။",
+       "noarticletext": "ဤစာမျက်နှာတွင် ယခုလက်ရှိတွင် မည်သည့်စာသားမှ မရှိပါ။\nသင်သည် အခြားစာမျက်နှာများတွင် [[Special:Search/{{PAGENAME}}|ဤစာမျက်နှာ၏ ခေါင်းစဉ်ကို ရှာနိုင်သည်]]၊ <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ဆက်စပ်ရာ မှတ်တမ်းများကို ရှာနိုင်သည်]၊ သို့မဟုတ် [{{fullurl:{{FULLPAGENAME}}|action=edit}} ဤစာမျက်နှာကို ဖန်တီးနိုင်သည်]</span>။",
        "noarticletext-nopermission": "ဤစာမျက်နှာတွင် ယခုလက်ရှိတွင် မည်သည့်စာသားမှ မရှိပါ။\nသင်သည် အခြားစာမျက်နှာများတွင် [[Special:Search/{{PAGENAME}}|ဤစာမျက်နှာ၏ ခေါင်းစဉ်ကို ရှာနိုင်သည်]]၊ သို့မဟုတ် <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ဆက်စပ်ရာ Logs များကို ရှာနိုင်သည်]</span>။ သို့သော် ဤစာမျက်နှာကို ဖန်တီးရန် သင့်တွင် အခွင့်အရေး မရှိပါ။",
        "note": "'''မှတ်ချက် -'''",
        "previewnote": "<strong>ဤသည်မှာ နမူနာ ကြည့်နေခြင်းသာဖြစ်ကြောင်း မမေ့ပါနှင့်။</strong>\nသင်ပြောင်းလဲထားသည်များကို မသိမ်းရသေးပါ။",
        "continue-editing": "တည်းဖြတ်ဧရိယာသို့ သွားရန်",
        "editing": "$1 ကို တည်းဖြတ်နေသည်",
+       "creating": "$1 ကို ဖန်တီးနေသည်",
        "editingsection": "$1 (အပိုင်း) ကို ပြင်ဆင်နေသည်။",
        "editingcomment": "$1 (အပိုင်းသစ်) ကို ပြင်ဆင်နေသည်။",
        "editconflict": "အငြင်းပွားမှုကို တည်းဖြတ်ရန် - $1",
        "copyrightwarning2": "{{SITENAME}} တွင် ရေးသားမှုအားလုံးသည် အခြားပုံပိုးသူများ၏ တည်းဖြတ်၊ ပြောင်းလဲ၊ ဖယ်ရှားခံရနိုင်သည်ကို သတိပြုပါ။\nအကယ်၍ သင့်ရေးသားချက်များကို အညှာအတာမရှိ တည်းဖြတ်ခံရခြင်း၊ စိတ်တိုင်းကျ ဖြန့်ဝေခံရခြင်းတို့ကို အလိုမရှိပါက ဤနေရာတွင် မတင်ပါနှင့်။<br />\nသင်သည် ဤဆောင်းပါးကို သင်ကိုယ်တိုင်ရေးသားခြင်း၊ သို့မဟုတ် အများပြည်သူဆိုင်ရာဒိုမိန်းများ၊ ယင်းကဲ့သို့ လွတ်လပ်သည့် ရင်းမြစ်မှ ကူးယူထားခြင်း ဖြစ်ကြောင်းလည်း ဝန်ခံ ကတိပြုပါသည် (အသေးစိတ်ကို $1 တွင်ကြည့်ပါ)။\n<strong>မူပိုင်ခွင့်ရှိသော စာ၊ပုံများကို ခွင့်ပြုချက်မရှိဘဲ မတင်ပါနှင့်။</strong>",
        "templatesused": "{{PLURAL:$1|တမ်းပလိတ်|တမ်းပလိတ်}} ခုကို ဤစာမျက်နှာကို သုံးထားသည် -",
        "templatesusedpreview": "{{PLURAL:$1|တမ်းပလိတ်|တမ်းပလိတ်}} ခုကို ဤနမူနာတွင် သုံးထားသည် -",
+       "templatesusedsection": "ဤအပိုင်းတွင် အသုံးပြုထားသော {{PLURAL:$1|တမ်းပလိတ်|တမ်းပလိတ်များ}}:",
        "template-protected": "(ကာကွယ်ထားသည်)",
        "template-semiprotected": "(တစ်စိတ်တစ်ပိုင်း ကာကွယ်ထားသည်)",
        "hiddencategories": "ဤစာမျက်နှာသည် {{PLURAL:$1|ဝှက်ထားသော ကဏ္ဍတစ်ခု|ဝှက်ထားသော ကဏ္ဍ $1 ခု}} ၏ အဖွဲ့ဝင် ဖြစ်သည်။",
        "nocreate-loggedin": "သင်သည် စာမျက်နှာအသစ် ဖန်တီးခွင့်မရှိပါ။",
        "sectioneditnotsupported-title": "ခေါင်းစဉ်ခွဲအလိုက် တည်းဖြတ်ခြင်းကို မထောက်ပံ့ထားပါ",
+       "sectioneditnotsupported-text": "အပိုင်းလိုက်တည်းဖြတ်ခြင်းကို ဤစာမျက်နှာတွင် မရနိုင်ပါ။",
        "permissionserrors": "ခွင့်ပြုချက်အမှား",
        "permissionserrorstext": "အောက်ပါ {{PLURAL:$1|အကြောင်းပြချက်|အကြောင်းပြချက်များ}}ကြောင့် ထိုအရာအတွက် ခွင့်ပြုချက်မရှိပါ -",
        "permissionserrorstext-withaction": "အောက်ပါ အကြောင်းပြချက် {{PLURAL:$1|ခု|ခု}} ကြောင့် $2 အတွက် ခွင့်ပြုချက်မရှိပါ -",
        "edit-gone-missing": "စာမျက်နှာကို အပ်ဒိတ်မလုပ်နိုင်ပါ။\nအဖျက်ခံလိုက်ရပုံပေါ်သည်။",
        "edit-conflict": "အငြင်းပွားမှုကို တည်းဖြတ်ရန်။",
        "edit-no-change": "စာသားကို အပြောင်းအလဲ မလုပ်ခဲ့သောကြောင့် တည်းဖြတ်မှုကို လျစ်လျူရှုလိုက်သည်။",
+       "postedit-confirmation-created": "စာမျက်နှာကို ဖန်တီးပြီးပြီ။",
+       "postedit-confirmation-restored": "စာမျက်နှာကို ပြန်လည်ထိန်းသိမ်းပြီးပြီ။",
+       "postedit-confirmation-saved": "သင့်တည်းဖြတ်မှုကို သိမ်းဆည်းပြီးပြီ။",
        "edit-already-exists": "စာမျက်နှာအသစ်တစ်ခု မဖန်တီးနိုင်ပါ။\nယင်းစာမျက်နှာ တည်ရှိပြီး ဖြစ်သည်။",
        "duplicate-args-category": "တမ်းပလိတ်တွင်းရှိ arguments ထပ်နေသော စာမျက်နှာများ",
        "post-expand-template-inclusion-warning": "'''သတိပေးချက် -''' တမ်းပလိတ်အရွယ်အစား ကြီးလွန်းနေသည်။\nအချို့တမ်းပလိတ်တို့ ပါဝင်မည်မဟုတ်။",
        "histlast": "အသစ်ဆုံး",
        "historyempty": "(ဘာမှမရှိ)",
        "history-feed-title": "မူရာဇဝင်မှတ်တမ်း",
+       "history-feed-description": "ဝီကီပေါ်ရှိ ဤစာမျက်နှာ၏ တည်းဖြတ်မှုရာဇဝင်",
        "history-feed-item-nocomment": "$2 က $1",
        "rev-deleted-comment": "(တည်းဖြတ်မှုအတိုချုပ် ဖယ်ရှားပြီး)",
        "rev-deleted-user": "(အသုံးပြုသူအမည် ဖယ်ရှားပြီး)",
+       "rev-deleted-event": "(အသေးစိတ် မှတ်တမ်း ဖယ်ရှားပြီးပြီ)",
+       "rev-deleted-text-permission": "ဤစာမျက်နှာ ရာဇဝင်များသည် <strong>ဖျက်ထားပြီး</strong>ဖြစ်သည်။\nအသေးစိတ်များကို [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ဖျက်ထားသည့် မှတ်တမ်း]တွင် တွေ့ရှိနိုင်ပါသည်။",
        "rev-delundel": "အမြင်ပုံစံ ပြောင်းလဲရန်",
        "rev-showdeleted": "ပြ",
        "revisiondelete": "မူများကို ဖျက်ရန်/မဖျက်တော့ရန်",
        "revdelete-nooldid-title": "တရားမဝင်သော မူအမည်",
        "revdelete-no-file": "ဖော်ပြထားသောဖိုင် မရှိပါ။",
        "revdelete-show-file-submit": "မှန်",
+       "revdelete-selected-file": "[[:$2]] ၏ ရွေးချယ်ထားသော {{PLURAL:$1|ဖိုင်ဗားရှင်း|ဖိုင်ဗားရှင်းများ}}:",
+       "revdelete-text-text": "ဖျက်လိုက်သည့် မူများသည် စာမျက်နှာရာဇဝင်တွင် ရှိနေဦးမည်ဖြစ်သော်လည်း ထိုပါဝင်အကြောင်းအရာသည် အများပြည်သူမှ မြင်ရတော့မည် မဟုတ်ပေ။",
+       "logdelete-text": "ဖျက်လိုက်သော မှတ်တမ်းသည် မှတ်တမ်းများထဲတွင် ပေါ်နေဦးမည်ဖြစ်သော်လည်း ပါဝင်အကြောင်းအရာကို အများပြည်သူများ မြင်ရတော့မည် မဟုတ်ပေ။",
+       "revdelete-text-others": "အပိုကန့်သတ်ချက်များကို မထည့်ထားပါက အခြားသော အက်ဒမင်များအနေဖြင့် ဝှက်ထားသော အကြောင်းအရာကို ကြည့်နိုင်ပြီး ဖျက်ထားခြင်းကို ပယ်ဖျက်နိုင်သည်။",
+       "revdelete-confirm": "ဤသို့ ဖျက်ပစ်ရန် သင် အမှန်တကယ် ရည်ရွယ်လျက် နောက်ဆက်တွဲ အကျိုးဆက်များကို သိရှိနားလည်ပြီး [[{{MediaWiki:Policy-url}}|မူဝါဒ]]အတိုင်း လုပ်ဆောင်နေခြင်းဖြစ်ကြောင်းကို ကျေးဇူးပြု၍ အတည်ပြုပေးပါ။",
        "revdelete-legend": "မြင်နိုင်စွမ်းရှိမှုတို့အား ကန့်သတ်ခြင်းကို သတ်မှတ်ရန်",
        "revdelete-hide-text": "တည်းဖြတ်မူမှ စာသား",
        "revdelete-hide-image": "ဖိုင်ပါ အေကြာင်းအရာများကို ဝှက်ရန်",
        "revdelete-unsuppress": "ပြန်လည်ထိန်းသိမ်းထားသော မူများမှ ကန့်သတ်ချက်များကို ဖယ်ရှားရန်",
        "revdelete-log": "အ​ကြောင်း​ပြ​ချက်:",
        "revdelete-submit": "ရွေးချယ်ထားသော {{PLURAL:$1|မူ|မူများ}}ကို သက်ရောက်စေရန်",
-       "revdelete-success": "'''မူမြင်နိုင်စွမ်းရှိမှုကို အောင်မြင်စွာ update လုပ်ပြီးပါပြီ။'''",
+       "revdelete-success": "မူမြင်နိုင်စွမ်းရှိမှုကို update လုပ်ပြီးပါပြီ။",
        "revdel-restore": "မည်မျှ ရှုမြင်နိုင်သည်ကို ပြောင်းရန်",
        "pagehist": "စာမျက်နှာ မှတ်တမ်း",
        "deletedhist": "ဖျက်ပစ်လိုက်သော မှတ်တမ်း",
        "mergehistory-reason": "​ကြောင်း​ပြ​ချက် -",
        "mergelog": "ပေါင်းလိုက်သော မှတ်တမ်း",
        "revertmerge": "ပြန်ခွဲထုတ်ရန်",
+       "mergelogpagetext": "အောက်ပါတို့သည် စာမျက်နှာ ရာဇဝင်ကို အခြားတစ်ခုသို့  မကြာမီက ပေါင်းလိုက်သော စာရင်းဖြစ်သည်။",
        "history-title": "\"$1\"၏ တည်းဖြတ်မှု ရာဇဝင်",
        "difference-title": "\"$1\" ၏ တည်းဖြတ်မှု မူကွဲများ",
+       "difference-title-multipage": "စာမျက်နှာ \"$1\" နှင့် \"$2\" အကြား ကွဲပြားမှု",
        "difference-multipage": "(စာမျက်နှာများကြားမှ ကွဲပြားချက်များ)",
        "lineno": "စာကြောင်း $1 -",
        "compareselectedversions": "ရွေးချယ်ထားသော မူများကို နှိုင်းယှဉ်ရန်",
        "showhideselectedversions": "ရွေးချယ်ထားသော မူများကို ပြရန်/ဝှက်ရန်",
        "editundo": "နောက်ပြန် ပြန်ပြင်ရန်",
+       "diff-empty": "(ကွဲပြားမှု မရှိ)",
        "searchresults": "ရှာဖွေမှု ရလဒ်များ",
        "searchresults-title": "\"$1\" အတွက် ရှာတွေ့သည့် ရလဒ်များ",
        "titlematches": "စာမျက်နှာခေါင်းစဉ်ကိုက်ညီသည်",
        "search-result-category-size": "{{PLURAL:$1|အသင်းဝင်တစ်ခု|အသင်းဝင် $1 ခု}} ({{PLURAL:$2|ကဏ္ဍခွဲတစ်ခု|ကဏ္ဍခွဲ $2 ခု}}, {{PLURAL:$3|ဖိုင်တစ်ခု|ဖိုင် $3 ခု}})",
        "search-redirect": "($1 သို့ ပြန်ညွှန်းသည်)",
        "search-section": "(အပိုင်း $1)",
+       "search-category": "(ကဏ္ဍ $1)",
        "search-suggest": "$1 ဟု ဆိုလိုပါသလား။",
        "search-interwiki-caption": "ညီအစ်မ ပရောဂျက်များ",
        "search-interwiki-default": "$1 မှ ရလဒ်များ -",
        "right-userrights": "အသုံးပြုသူ၏အခွင့်အရေးများအားလုံးကို တည်းဖြတ်ရန်",
        "right-userrights-interwiki": "အခြားဝီကီများမှ အသုံးပြုသူများ၏ အသုံးပြုသူအခွင့်အရေးများကို တည်းဖြတ်ရန်",
        "right-sendemail": "အခြားအသုံးပြုသူများကို အီးမေးပို့ရန်",
+       "grant-editmywatchlist": "သင့် စောင့်ကြည့်စာရင်းကို တည်းဖြတ်ရန်",
        "newuserlogpage": "အသုံးပြုသူအသစ်ရောက်လာခြင်း မှတ်တမ်း",
-       "newuserlogpagetext": "á\80¤á\80\9eá\80\8aá\80ºá\80\99á\80¾á\80¬ á\80¡á\80\9eá\80¯á\80¶á\80¸á\80\95á\80¼á\80¯á\80\9eá\80°á\80¡á\80\9eá\80\85á\80º á\80\96á\80\90်တီးမှု မှတ်တမ်း ဖြစ်သည်။",
+       "newuserlogpagetext": "á\80¤á\80\9eá\80\8aá\80ºá\80\99á\80¾á\80¬ á\80¡á\80\9eá\80¯á\80¶á\80¸á\80\95á\80¼á\80¯á\80\9eá\80°á\80¡á\80\9eá\80\85á\80º á\80\96á\80\94်တီးမှု မှတ်တမ်း ဖြစ်သည်။",
        "rightslog": "အသုံးပြုသူ၏ အခွင့်အရေးများ မှတ်တမ်း",
        "rightslogtext": "ဤသည်မှာ အသုံးပြုသူအခွင့်အရေးများ၏ ပြောင်းလဲမှုများမှတ်တမ်းဖြစ်သည်။",
        "action-read": "ဤစာမျက်နှာကို ဖတ်ရန်",
        "rcshowhideanons": "အမည်မသိ အသုံးပြုသူ $1ရန်",
        "rcshowhideanons-show": "ပြသရန်",
        "rcshowhideanons-hide": "ဝှက်",
-       "rcshowhidepatr": "á\80\85á\80±á\80¬á\80\84á\80·á\80ºá\80¼á\80\80ပ်တည်းဖြတ်မှု $1ရန်",
+       "rcshowhidepatr": "á\80\85á\80±á\80¬á\80\84á\80·á\80ºá\80\80á\80¼ပ်တည်းဖြတ်မှု $1ရန်",
        "rcshowhidepatr-show": "ပြသရန်",
        "rcshowhidepatr-hide": "ဝှက်ရန်",
        "rcshowhidemine": "ကျွန်ုပ်တည်းဖြတ်ထားသည်များ $1",
        "uploadnologin": "logged in ဝင်မထားပါ",
        "uploadnologintext": "ဖိုင်များကို တင်ရန် ကျေးဇူးပြု၍ $1 ပါ။",
        "uploaderror": "အပ်လုပ်တင်ခြင်း အမှား",
+       "upload-recreate-warning": "<strong>သတိပေးချက်။ ဤအမည်ဖြင့်ဖိုင်သည် ဖျက်ထားခြင်း သို့မဟုတ် ရွေ့ပြောင်းထားခြင်း ခံထားရသည်။</strong>\n\nဖျက်ထားခြင်းနှင့် ရွေ့ပြောင်းထားခြင်း မှတ်တမ်းကို သိရှိနိုင်ရန် ဖော်ပြထားပါသည်။",
        "upload-permitted": "ခွင့်ပြုထားသော ဖိုင် {{PLURAL:$2|အမျိုးအစား|အမျိုးအစားများ}}: $1။",
        "upload-preferred": "အလေးပေးထားသော ဖိုင် {{PLURAL:$2|အမျိုးအစား|အမျိုးအစားများ}}: $1။",
        "upload-prohibited": "တားမြစ်ထားသော ဖိုင် {{PLURAL:$2|အမျိုးအစား|အမျိုးအစားများ}}: $1။",
        "uploadlogpage": "Upload တင်သည့် မှတ်တမ်း",
+       "uploadlogpagetext": "အောက်ပါတို့သည် မကြာမီက upload လုပ်ထားသော ဖိုင်စာရင်း ဖြစ်သည်။\nပိုမို၍ ခြုံငုံသုံးသပ်ကြည့်ရှုနိုင်ရန် [[Special:NewFiles|ဖိုင်အသစ်များ ပြခန်း]]ကို ကြည့်ပါ။",
        "filename": "ဖိုင်အမည်",
        "filedesc": "အ​ကျဉ်း​ချုပ်​",
        "fileuploadsummary": "အ​ကျဉ်း​ချုပ်​ -",
        "statistics-edits-average": "စာတစ်မျက်နှာလျှင် ပျမ်းမျှတည်းဖြတ်မှုနှုန်း",
        "statistics-users": "မှတ်ပုံတင်ထားသော [[Special:ListUsers|အသုံးပြုသူများ]]",
        "statistics-users-active": "လက်ရှိလုပ်ကိုင်နေသော အသုံးပြုသူများ",
+       "statistics-users-active-desc": "နောက်ဆုံး {{PLURAL:$1|ရက်|$1 ရက်}}အတွင်း ဆောင်ရွက်ချက်ရှိသည့် အသုံးပြုသူများ",
        "doubleredirects": "နှစ်ဆင့်ပြန် ပြန်ညွှန်းများ",
        "double-redirect-fixed-move": "[[$1]] ကို ရွှေ့ပြောင်းပြီးဖြစ်သည်။ ၎င်းအား အလိုအလျောက် ပြင်ဆင်ပြီး [[$2]] သို့ ပြန်ညွှန်းထားသည်။",
        "brokenredirects": "ကျိုးပျက်နေသော ပြန်ညွှန်းများ",
        "log": "မှတ်​တမ်း​များ​",
        "logeventslist-submit": "ပြသရန်",
        "all-logs-page": "အများနှင့်ဆိုင်သောမှတ်တမ်းအားလုံး",
+       "alllogstext": "{{SITENAME}}၏ ရရှိနိုင်သော မှတ်တမ်းများအားလုံး ပေါင်းစည်းပြသခြင်း ဖြစ်သည်။\nမှတ်တမ်းအမျိုးအစား၊ အသုံးပြုသူအမည် (စာလုံးအကြီးအသေး)၊ သို့မဟုတ် သက်ဆိုင်ရာ စာမျက်နှာ (စာလုံးအကြီးအသေး) ကို ရွေးချယ်ခြင်းဖြင့် ကြည့်ရှုမှုကို အကျဉ်းချုံးနိုင်ပါသည်။",
+       "logempty": "မှတ်တမ်းထဲတွင် ကိုက်ညီသော အရာများ မရှိပါ။",
        "allpages": "စာမျက်နှာအားလုံး",
        "nextpage": "နောက်ထပ်စာမျက်နှာ ($1)",
        "prevpage": "ယခင် စာမျက်နှာ ($1)",
        "listusers-noresult": "အသုံးပြုသူ မတွေ့ပါ။",
        "listusers-blocked": "(ပိတ်ပင်ထားသည်)",
        "activeusers": "တက်ကြွလှုပ်ရှားသည့် အသုံးပြုသူစာရင်း",
+       "activeusers-intro": "ဤသည်မှာ နောက်ဆုံး $1 {{PLURAL:$1|ရက်|ရက်}}အတွင်း တက်ကြွလှုပ်ရှားသည့် အသုံးပြုသူများ စာရင်း ဖြစ်သည်။",
        "activeusers-from": "ဤမှစသော အသုံးပြုသူများကို ပြရန် -",
        "activeusers-hidebots": "ဘော့များကို ဝှက်ရန်",
        "activeusers-hidesysops": "အက်ဒမင်များကို ဝှက်ရန်",
        "notanarticle": "မာတိကာစာမျက်နှာတစ်ခု မဟုတ်",
        "watchlist-details": "{{PLURAL:$1|စာမျက်နှာ $1 ခု|စာမျက်နှာ $1 ခု}} သည် သင့်စောင့်ကြည့်စာရင်းတွင် ရှိပြီး ဆွေးနွေးချက်စာမျက်နှာများကို ထည့်တွက် မထားပါ။",
        "wlheader-showupdated": "သင် နောက်ဆုံးကြည့်ရှုခဲ့ပြီးနောက် ပြောင်းလဲမှုရှိခဲ့သော စာမျက်နှာများကို <strong>စာလုံးမဲ</strong> ဖြင့် ပြသထားသည်",
+       "wlnote": "အောက်ပါတို့သည် $3၊ $4 အထိ နောက်ဆုံး {{PLURAL:$2|နာရီ|<strong>$2</strong> နာရီ}}အတွင်း {{PLURAL:$1|နောက်ဆုံးပြောင်းလဲချက် တစ်ခု|နောက်ဆုံးပြောင်းလဲချက်များ <strong>$1</strong> ခု}} ဖြစ်သည်။",
        "wlshowlast": "နောက်ဆုံး $1 နာရီ $2 ရက်  ကိုပြရန်",
        "watchlist-hide": "ဝှက်",
        "watchlist-submit": "ပြသရန်",
+       "wlshowtime": "ပြသပေးရမည့် အချိန်ကာလ:",
        "wlshowhideminor": "အရေးမကြီးသော ပြင်ဆင်မှုများ",
        "wlshowhideliu": "မှတ်ပုံတင်ထားသော အသုံးပြုသူများ",
        "wlshowhideanons": "အမည်မသိ အသုံးပြုသူများ",
+       "wlshowhidemine": "ကျွန်ုပ်၏ တည်းဖြတ်မှုများ",
        "wlshowhidecategorization": "စာမျက်နှာ ကဏ္ဍထည့်သွင်းခြင်း",
        "watchlist-options": "စောင့်ကြည့်စာရင်းအတွက် ရွေးချယ်စရာများ",
        "watching": "စောင့်ကြည့်လျက်ရှိ...",
        "excontentauthor": "ပါဝင်အကြောင်းအရာမှာ - \"$1\"၊ ဖြစ်ပြီး တစ်ဦးတည်းသော အကူအညီပေးအပ်သူမှာ \"[[Special:Contributions/$2|$2]]\" ([[User talk:$2|ဆွေးနွေး]])  ဖြစ်သည်",
        "delete-confirm": "\"$1\"ကို ဖျက်ပါ",
        "delete-legend": "ဖျက်",
+       "historywarning": "<strong>သတိပေးချက်။</strong> သင်ဖျက်ပစ်တော့မည့် စာမျက်နှာတွင် {{PLURAL:$1|တည်းဖြတ်မူ|တည်းဖြတ်မူများ}} $1 ခု ရှိနေသည်-",
        "historyaction-submit": "ပြသရန်",
        "confirmdeletetext": "သင်သည် စာမျက်နှာတစ်ခုကို ယင်း၏ မှတ်တမ်းများနှင့်တကွ ဖျက်ပစ်တော့မည် ဖြစ်သည်။\nဤသို့ ဖျက်ပစ်ရန် သင် အမှန်တကယ် ရည်ရွယ်လျက်  နောက်ဆက်တွဲ အကျိုးဆက်များကို သိရှိနားလည်ပြီး [[{{MediaWiki:Policy-url}}|မူဝါဒ]] အတိုင်းလုပ်ဆောင်နေခြင်းဖြစ်ကြောင်းကို အတည်ပြုပေးပါ။",
        "actioncomplete": "လုပ်ဆောင်ချက် ပြီးပြီ",
        "actionfailed": "ဆောင်ရွက်မှုမအောင်မြင်ပါ",
        "deletedtext": "\"$1\" ကို ဖျက်ပစ်လိုက်ပြီးဖြစ်သည်။\nလတ်တလောဖျက်ထားသည်များ၏ မှတ်တမ်းကို $2 တွင် ကြည့်ပါ။",
        "dellogpage": "ဖျက်ထားသည်များ မှတ်တမ်း",
+       "dellogpagetext": "အောက်ပါတို့သည် မကြာမီက ဖျက်ထားမှုများ စာရင်း ဖြစ်သည်။",
        "deletionlog": "ဖျက်ပစ်သည့်မှတ်တမ်း",
        "deletecomment": "အ​ကြောင်း​ပြ​ချက် -",
        "deleteotherreason": "အခြားသော/နောက်ထပ် အကြောင်းပြချက် -",
        "rollbacklink": "နောက်ပြန် ပြန်သွားရန်",
        "rollbacklinkcount": "{{PLURAL:$1|တည်းဖြတ်မှု|တည်းဖြတ်မှုများ}} $1 ကို နောက်ပြန်ပြင်ရန်",
        "protectlogpage": "ကာကွယ်မှုများ၏ မှတ်တမ်း",
+       "protectlogtext": "အောက်ပါတို့သည် စာမျက်နှာ ကာကွယ်မှုများအတွက် အပြောင်းအလဲ စာရင်း ဖြစ်သည်။\nလက်ရှိ စာမျက်နှာ ကာကွယ်မှုများ စာရင်းအတွက် [[Special:ProtectedPages|ကာကွယ်ထားသော စာမျက်နှာများ စာရင်း]]ကို ကြည့်ပါ။",
        "protectedarticle": "\"[[$1]]\" ကို ကာကွယ်ထားသည်",
        "modifiedarticleprotection": "\"[[$1]]\" ၏ ကာကွယ်မှု အဆင့်ကို ပြောင်းရန်",
        "protect-title": "\"$1\" ၏ ကာကွယ်မှုအဆင့်ကို ပြောင်းလဲရန်",
        "prot_1movedto2": "[[$1]]  မှ​ [[$2]] သို့​",
+       "protect-legend": "ကာကွယ်မှု အတည်ပြုရန်",
        "protectcomment": "အ​ကြောင်း​ပြ​ချက်:",
        "protectexpiry": "သက်တမ်းကုန်လွန်မည် -",
        "protect_expiry_invalid": "သက်တမ်းကုန်လွန်မည့် အချိန်သည် တရားမဝင်ပါ။",
        "protect_expiry_old": "သက်တမ်းသည် အတိတ်ကာလတွင် ကုန်လွန်ခဲ့ပြီး ဖြစ်သည်။",
+       "protect-unchain-permissions": "နောက်ထပ် ကာကွယ်မှု ရွေးချယ်စရာများ ဖော်ပြရန်",
        "protect-text": "'''$1''' စာမျက်နှာအတွက် ကာကွယ်မှုအဆင့်ကို ဤနေရာတွင် ကြည့်ရှုပြောင်းလဲနိုင်သည်။",
        "protect-locked-access": "သင့်အကောင့်သည် စာမျက်နှာ၏ ကာကွယ်မှုအဆင့်ကို ပြောင်းလဲနိုင်ရန် ခွင့်ပြုချက် မရှိပါ။\nဤသည်မှာ '''$1''' စာမျက်နှာအတွက် လက်ရှိ settings သတ်မှတ်ချက်များ ဖြစ်သည်။",
        "protect-cascadeon": "ပြန်စီစဉ်ခြင်း cascading ကို ကာကွယ်ထားသော အောက်ပါ{{PLURAL:$1|စာမျက်နှာ|စာမျက်နှာများ}} ပါဝင်နေသောကြောင့် ဤစာမျက်နှာကို လက်ရှိတွင် ကာကွယ်ထားသည်။\nဤစာမျက်နှာ၏ ကာကွယ်မှုအဆင့်ကို ပြောင်းလဲသော်လည်း ပြန်စီစဉ်ခြင်းကို အကျိုးသက်ရောက်လိမ့်မည် မဟုတ်။",
        "protect-level-sysop": "စီမံခန့်ခွဲသူများသာ",
        "protect-summary-cascade": "အစီအစဉ်ကျအောင် စီနေသည်",
        "protect-expiring": "$1 (UTC) တွင် သက်တမ်းကုန်မည်",
+       "protect-expiry-indefinite": "အနန္တ",
        "protect-cascade": "ဤစာမျက်နှာအတွင်း ပါဝင်သော စာမျက်နှာများကို ထိန်းသိမ်းကာကွယ်ပါ (အများခွင့်ပြုချက်ဖြင့်သာ ပြင်ဆင်သင့်သည်)",
        "protect-cantedit": "ကာကွယ်ထားသောစာမျက်နှာဖြစ်သည့်အတွက် ပြင်ဆင်၍ မရနိုင်ပါ။ အဘယ့်ကြောင့်ဆိုသော် သင့်မှာ တည်းဖြတ်ပိုင်ခွင့် မရှိ၍ ဖြစ်ပါသည်။",
        "protect-otherreason": "အခြားသော/နောက်ထပ် အကြောင်းပြချက် -",
        "undelete-show-file-submit": "မှန်",
        "namespace": "အမည်ညွှန်း -",
        "invert": "ရွေးချယ်ထားခြင်းကို ပြောင်းပြန်လှန်ရန်",
+       "tooltip-invert": "ဤအကွက်ကို အမှန်ခြစ်၍ ရွေးချယ်ထားသော အမည်ညွှန်း (နှင့် ဆက်စပ်အမည်ညွှန်း)တွင် ပြောင်းလဲမှုများကို ဝှက်ပါ။",
        "namespace_association": "ဆက်စပ်နေသော အမည်ညွှန်း",
        "blanknamespace": "(ပင်မ)",
        "contributions": "{{GENDER:$1|အသုံးပြုသူ}}၏ ဆောင်ရွက်ချက်များ",
        "contributions-title": "$1 အတွက် အသုံးပြုသူ၏ ဆောင်ရွက်ချက်များ",
-       "mycontris": "á\80\86á\80±á\80¬á\80\84á\80ºá\80\9bá\80½á\80\80á\80ºá\80\95á\80±á\80¸á\80\91á\80¬á\80¸á\80\99á\80¾á\80¯များ",
+       "mycontris": "á\80\86á\80±á\80¬á\80\84á\80ºá\80\9bá\80½á\80\80á\80ºá\80\81á\80»á\80\80á\80ºများ",
        "anoncontribs": "ဆောင်ရွက်ချက်များ",
        "contribsub2": "{{GENDER:$3|$1}}အတွက် ($2)",
        "uctop": "(လက်ရှိ)",
        "sp-contributions-blocklog": "ပိတ်ပင်တားဆီးမှု မှတ်တမ်း",
        "sp-contributions-uploads": "အပ်လုပ်တင်ထားသည်များ",
        "sp-contributions-logs": "မှတ်​တမ်း​များ​",
-       "sp-contributions-talk": "ဆွေးနွေးချက်",
+       "sp-contributions-talk": "ဆွေးနွေး",
        "sp-contributions-userrights": "အသုံးပြုသူ၏ အခွင့်အရေးများကို စီမံခန့်ခွဲခြင်း",
        "sp-contributions-search": "ပံ့ပိုးမှုများကို ရှာရန်",
        "sp-contributions-username": "အိုင်ပီလိပ်စာ သို့ အသုံးပြုသူအမည် :",
        "whatlinkshere-prev": "{{PLURAL:$1|နောက်သို့|နောက်သို့ $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|ရှေ့သို့|ရှေ့သို့ $1}}",
        "whatlinkshere-links": "← လင့်များ",
-       "whatlinkshere-hideredirs": "redirect ပြန်ညွှန်း $1 ခု",
+       "whatlinkshere-hideredirs": "ပြန်ညွှန်းများ $1ရန်",
        "whatlinkshere-hidetrans": "ထည့်သွင်းကူးယူချက် $1 ခု",
        "whatlinkshere-hidelinks": "လင့် $1 ခု",
        "whatlinkshere-hideimages": "ဖိုင်အချိတ်အဆက်များ $1 ခု",
        "contribslink": "ပံ့ပိုး",
        "blocklogpage": "ပိတ်ပင်တားဆီးမှု မှတ်တမ်း",
        "blocklogentry": "[[$1]] ကို $2 ကြာအောင် ပိတ်ပင် တားဆီးလိုက်သည် $3",
+       "blocklogtext": "ဤသည်မှာ အသုံးပြုသူအား ပိတ်ပင်ခြင်းနှင့် ပိတ်ပင်မှုဖယ်ရှားခြင်း ဆောင်ရွက်မှု မှတ်တမ်း ဖြစ်သည်။\nအလိုအလျောက် ပိတ်ပင်ထားသည့် အိုင်ပီလိပ်စာများအား မထည့်သွင်းထားပါ။\nလက်ရှိ တားမြစ်မှုများနှင့် ပိတ်ပင်မှုများ စာရင်းအတွက် [[Special:BlockList|ပိတ်ပင်စာရင်း]]ကို ကြည့်ပါ။",
        "unblocklogentry": "$1 ကို ပိတ်ထားရာမှ ပြန်ဖွင့်ရန်",
        "block-log-flags-anononly": "အမည်မသိ အသုံးပြုသူများသာ",
        "block-log-flags-nocreate": "အကောင့်ဖန်တီးခြင်းကို ပိတ်ထားသည်",
        "ipb_already_blocked": "\"$1\" ကို အစကတည်းက ပိတ်ထားသည်",
        "move-page": "$1 ကို ရွှေ့ရန်",
        "move-page-legend": "စာ​မျက်​နှာ​ကို ရွှေ့ပြောင်းရန်",
-       "movepagetext": "အောက်ပါပုံစံကို အသုံးပြုခြင်းသည် စာမျက်နှာကို အမည်ပြောင်းလဲပေးမည် ဖြစ်ပြီး အမည်သစ်သို့ ယင်း၏ မှတ်တမ်းနှင့်တကွ ရွှေ့ပေးမည် ဖြစ်သည်။\nအမည်ဟောင်းသည် အမည်သစ်သို့ ပြန်ညွှန်းစာမျက်နှာ ဖြစ်လာမည်။\nသင်သည် မူလခေါင်းစဉ်သို့ ပြန်ညွှန်းများကို အလိုအလျောက် အပ်ဒိတ် update လုပ်နိုင်သည်။\nအကယ်၍ မပြုလုပ်လိုပါက [[Special:DoubleRedirects|နှစ်ခါထပ်]][[Special:BrokenRedirects|ပြန်ညွှန်း အပျက်များ]] ကို မှတ်သားရန် မမေ့ပါနှင့်။\nလင့်များ ညွှန်းလိုသည့် နေရာသို့ ညွှန်ပြနေရန် သင့်တွင် တာဝန် ရှိသည်။\n\nအကယ်၍ ခေါင်းစဉ်အသစ်တွင် စာမျက်နှာတစ်ခု ရှိနှင့်ပြီး ဖြစ်ပါက (သို့) ယင်းစာမျက်နှာသည် အလွတ်မဖြစ်ပါက (သို့) ပြန်ညွှန်းတစ်ခု မရှိပါက (သို့) ယခင်က ပြုပြင်ထားသော မှတ်တမ်း မရှိပါက စာမျက်နှာသည် <strong>ရွေ့မည်မဟုတ်</strong> သည်ကို သတိပြုပါ။ \nဆိုလိုသည်မှာ သင်သည် အမှားတစ်ခု ပြုလုပ်မိပါက စာမျက်နှာကို ယခင်အမည်ကို ပြန်လည် ပြောင်းလဲပေးနိုင်သည်။ ရှိပြီသားစာမျက်နှာတစ်ခုကို စာမျက်နှာ အသစ်နှင့် ပြန်အုပ် overwrite ခြင်း မပြုနိုင်။\n\n<strong>မှတ်ချက်။</strong>\nဤသည်မှာ လူဖတ်များသော စာမျက်နှာတစ်ခုဖြစ်ပါက မမျှော်လင့်ထားသော၊ ကြီးမားသော အပြောင်းအလဲတစ်ခု ဖြစ်ပေါ်လာနိုင်သည်။\nထို့ကြောင့် ဆက်လက် မဆောင်ရွက်မီ သင်သည် နောက်ဆက်တွဲ အကျိုးဆက်များကို နားလည်ကြောင်း ကျေးဇူးပြု၍ သေချာပါစေ။",
+       "movepagetext": "အောက်ပါပုံစံကို အသုံးပြုခြင်းသည် စာမျက်နှာကို အမည်ပြောင်းလဲပေးမည် ဖြစ်ပြီး အမည်သစ်သို့ ယင်း၏ မှတ်တမ်းနှင့်တကွ ရွှေ့ပေးမည် ဖြစ်သည်။\nအမည်ဟောင်းသည် အမည်သစ်သို့ ပြန်ညွှန်းစာမျက်နှာ ဖြစ်လာမည်။\nသင်သည် မူလခေါင်းစဉ်သို့ ပြန်ညွှန်းများကို အလိုအလျောက် အပ်ဒိတ် update လုပ်နိုင်သည်။\nအကယ်၍ မပြုလုပ်လိုပါက [[Special:DoubleRedirects|နှစ်ဆင့်ပြန်ညွှန်းများ]] သို့မဟုတ် [[Special:BrokenRedirects|ပြန်ညွှန်း အပျက်များ]] ကို မှတ်သားရန် မမေ့ပါနှင့်။\nလင့်များ ညွှန်းလိုသည့် နေရာသို့ ညွှန်ပြနေရန် သင့်တွင် တာဝန် ရှိသည်။\n\nအကယ်၍ ခေါင်းစဉ်အသစ်တွင် စာမျက်နှာတစ်ခု ရှိနှင့်ပြီး ဖြစ်ပါက (သို့) ယင်းစာမျက်နှာသည် အလွတ်မဖြစ်ပါက (သို့) ပြန်ညွှန်းတစ်ခု မရှိပါက (သို့) ယခင်က ပြုပြင်ထားသော မှတ်တမ်း မရှိပါက စာမျက်နှာသည် <strong>ရွေ့မည်မဟုတ်</strong> သည်ကို သတိပြုပါ။ \nဆိုလိုသည်မှာ သင်သည် အမှားတစ်ခု ပြုလုပ်မိပါက စာမျက်နှာကို ယခင်အမည်ကို ပြန်လည် ပြောင်းလဲပေးနိုင်သည်။ ရှိပြီသားစာမျက်နှာတစ်ခုကို စာမျက်နှာ အသစ်နှင့် ပြန်အုပ် overwrite ခြင်း မပြုနိုင်။\n\n<strong>မှတ်ချက်။</strong>\nဤသည်မှာ လူဖတ်များသော စာမျက်နှာတစ်ခုဖြစ်ပါက မမျှော်လင့်ထားသော၊ ကြီးမားသော အပြောင်းအလဲတစ်ခု ဖြစ်ပေါ်လာနိုင်သည်။\nထို့ကြောင့် ဆက်လက် မဆောင်ရွက်မီ သင်သည် နောက်ဆက်တွဲ အကျိုးဆက်များကို နားလည်ကြောင်း ကျေးဇူးပြု၍ သေချာပါစေ။",
+       "movepagetext-noredirectfixer": "အောက်ပါပုံစံကို အသုံးပြုခြင်းသည် စာမျက်နှာကို အမည်ပြောင်းလဲပေးမည် ဖြစ်ပြီး အမည်သစ်သို့ ယင်း၏ မှတ်တမ်းနှင့်တကွ ရွှေ့ပေးမည် ဖြစ်သည်။\n[[Special:DoubleRedirects|နှစ်ဆင့်ပြန်ညွှန်းများ]] သို့မဟုတ် [[Special:BrokenRedirects|ပြန်ညွှန်း အပျက်များ]] ကို စစ်ဆေးရန် မမေ့ပါနှင့်။\nလင့်ခ်များ ညွှန်းလိုသည့် နေရာသို့ ညွှန်ပြနေရန် သင့်တွင် တာဝန် ရှိသည်။\n\nအကယ်၍ ခေါင်းစဉ်အသစ်တွင် စာမျက်နှာတစ်ခု ရှိနေနှင့်ပြီး ပြန်ညွှန်းတစ်ခု မရှိပါက သို့မဟုတ် ယခင်က ပြုပြင်ထားသော မှတ်တမ်း ရှိနေပါက စာမျက်နှာသည် <strong>ရွေ့မည်မဟုတ်</strong> သည်ကို သတိပြုပါ။ \nဆိုလိုသည်မှာ သင်သည် အမှားတစ်ခု ပြုလုပ်မိပါက စာမျက်နှာကို ယခင်အမည်ကို ပြန်လည် ပြောင်းလဲပေးနိုင်သည်။ ရှိပြီသားစာမျက်နှာတစ်ခုကို စာမျက်နှာ အသစ်နှင့် ပြန်အုပ် overwrite ခြင်း မပြုနိုင်။\n\n<strong>မှတ်ချက်။</strong>\nဤသည်မှာ လူဖတ်များသော စာမျက်နှာတစ်ခုဖြစ်ပါက မမျှော်လင့်ထားသော၊ ကြီးမားသော အပြောင်းအလဲတစ်ခု ဖြစ်ပေါ်လာနိုင်သည်။\nထို့ကြောင့် ဆက်လက် မဆောင်ရွက်မီ သင်သည် နောက်ဆက်တွဲ အကျိုးဆက်များကို နားလည်ကြောင်း ကျေးဇူးပြု၍ သေချာပါစေ။",
        "movepagetalktext": "ဤအကွက်ကို အမှန်ခြစ်လိုက်ခြင်းဖြင့် ဗလာမဟုတ်သော ဆွေးနွေးချက်စာမျက်နှာသည် ရှိနှင့်ပြီး မဟုတ်လျှင် ဆက်နွယ်နေသော ဆွေးနွေးချက် စာမျက်နှာကို ခေါင်းစဉ်အသစ်သို့  အလိုအလျောက် ရွှေ့ပစ်မည် ဖြစ်သည်။\n\nဤကိစ္စရပ်တွင် သင် ဆန္ဒရှိလျှင် စာမျက်နှာကို မိမိကိုယ်တိုင် သွားရောက်ရွှေ့ပြောင်း ပေါင်းစပ်နိုင်သည်။",
        "newtitle": "ခေါင်းစဉ်အသစ်:",
        "move-watch": "မူရင်းစာမျက်နှာနှင့် ဦးတည်ထားသော စာမျက်နှာတို့ကို စောင့်ကြည့်ရန်",
        "pagemovedsub": "ပြောင်းရွှေ့ခြင်းအောင်မြင်သည်",
        "movepage-moved": "'''\"$1\" ကို \"$2\" သို့ ရွှေ့ပြီးဖြစ်သည်'''",
        "movepage-moved-redirect": "ပြန်ညွှန်းတစ်ခုကို ဖန်တီးပြီးဖြစ်သည်။",
+       "movepage-moved-noredirect": "ပြန်ညွှန်းဖန်တီးခြင်းအား ချေဖျက်ပြီး ဖြစ်သည်။",
        "articleexists": "ထိုအမည်ဖြင့် စာမျက်နှာတစ်ခု ရှိနှင့်ပြီးဖြစ်သည် (သို့) သင်ရွေးလိုက်သော အမည်သည် တရားမဝင်ပါ။\nကျေးဇူးပြု၍ အခြားအမည်တစ်ခုကို ရွေးပေးပါ။",
        "movetalk": "ယှက်နွယ်နေသော ဆွေးနွေးချက်စာမျက်နှာများကို ရွှေ့ရန်",
        "movepage-page-moved": "စာမျက်နှာ $1 ကို $2 သို့ ရွှေ့ပြီးပြီ ဖြစ်သည်။",
        "movepage-page-unmoved": "စာမျက်နှာ $1 ကို $2 သို့ ရွှေ့မရနိုင်ပါ။",
        "movelogpage": "ရွှေ့ပြောင်းခြင်း မှတ်တမ်း",
+       "movelogpagetext": "အောက်ပါတို့သည် စာမျက်နှာ ရွေ့ပြောင်းမှုများ အားလုံး စာရင်း ဖြစ်သည်။",
        "movereason": "အ​ကြောင်း​ပြ​ချက် -",
        "revertmove": "ပြောင်းရန်",
        "delete_and_move_confirm": "ဟုတ်ပါသည်။ စာမျက်နှာကို ဖျက်ပါ။",
        "immobile-source-page": "ဤစာမျက်နှာကို ရွှေ့မရပါ။",
+       "move-leave-redirect": "ပြန်ညွှန်းတစ်ခု ချန်ထားရန်",
        "export": "စာမျက်နှာများကို Export ထုတ်ရန်",
        "export-submit": "Export ထုတ်ရန်",
        "export-addcattext": "ကဏ္ဍမှ စာမျက်နှာများကို ပေါင်းထည့်ရန် -",
        "tooltip-ca-move": "ဤစာမျက်နှာကို ရွှေ့ပြောင်းရန်",
        "tooltip-ca-watch": "ဤစာမျက်နှာကို စောင့်ကြည့်စာရင်းသို့ ထည့်ရန်",
        "tooltip-ca-unwatch": "ဤစာမျက်နှာကို စောင့်ကြည့်စာရင်းမှ ဖြုတ်ရန်",
-       "tooltip-search": "{{SITENAME}} ကို ရှာရန်",
+       "tooltip-search": "{{SITENAME}}ကို ရှာရန်",
        "tooltip-search-go": "ဤအမည်နှင့် ထပ်တူညီသော စာမျက်နှာရှိပါက ယင်းသို့ သွားရန်",
-       "tooltip-search-fulltext": "á\80¤á\80\85á\80¬á\80\9cá\80¯á\80¶á\80¸á\80\99á\80»á\80¬á\80¸á\80\95á\80«á\80\9eá\80±á\80¬ á\80\85á\80¬á\80\99á\80»á\80\80á\80ºá\80\94á\80¾á\80¬ကို ရှာရန်",
+       "tooltip-search-fulltext": "á\80¤á\80\85á\80¬á\80\95á\80«á\80\9eá\80±á\80¬ á\80\85á\80¬á\80\99á\80»á\80\80á\80ºá\80\94á\80¾á\80¬á\80\99á\80»á\80¬á\80¸ကို ရှာရန်",
        "tooltip-p-logo": "ဗဟိုစာမျက်နှာသို့ သွားရန်",
        "tooltip-n-mainpage": "ဗဟိုစာမျက်နှာသို့ သွားရန်",
        "tooltip-n-mainpage-description": "ဗဟိုစာမျက်နှာသို့ သွားရန်",
        "tooltip-t-contributions": "{{GENDER:$1|ဤအသုံးပြုသူ}}၏ ဆောင်ရွက်ချက်များ စာရင်း",
        "tooltip-t-emailuser": "{{GENDER:$1|ဤအသုံးပြုသူထံ}} အီးမေးပေးပို့ရန်",
        "tooltip-t-upload": "ဖိုင်တင်ရန်",
-       "tooltip-t-specialpages": "အထူး စာမျက်နှာ စာရင်းများ",
+       "tooltip-t-specialpages": "အထူး စာမျက်နှာများအားလုံး စာရင်း",
        "tooltip-t-print": "ဤစာမျက်နှာ၏ ပရင့်ထုတ်နိုင်သောမူ",
        "tooltip-t-permalink": "ယခုမူအတွက် ပုံသေလိပ်စာ",
        "tooltip-ca-nstab-main": "မာတိကာ ကြည့်ရန်",
        "tooltip-preferences-save": "ရေးချယ်စရာများကို သိမ်းရန်",
        "tooltip-summary": "အတိုချုပ်ထည့်ရန်",
        "others": "အခြား",
+       "pageinfo-language": "စာမျက်နှာ စာကိုယ် ဘာသာစကား",
        "pageinfo-toolboxlink": "စာမျက်နှာ အချက်အလက်များ",
        "filedeleteerror-short": "ဖိုင်ဖျက်ရာတွင် အမှားအယွင်း - $1",
        "previousdiff": "← တည်းဖြတ်မူ အဟောင်း",
        "svg-long-desc": "SVG ဖိုင်, $1 × $2 pixels ကို အကြံပြုသည်, ဖိုင်အရွယ်အစား - $3",
        "show-big-image": "မူရင်းဖိုင်",
        "show-big-image-preview": "ဤနမူနာ၏ အရွယ်အစား - $1။",
+       "show-big-image-other": "အခြား {{PLURAL:$2|ပုံရိပ်ပြတ်သားမှု|ပုံရိပ်ပြတ်သားမှု}}: $1။",
        "newimages": "ပုံအသစ်များပြခန်း",
        "newimages-legend": "စိစစ်မှု",
        "newimages-label": "ဖိုင်အမည် (သို့ ယင်း၏အစိတ်အပိုင်း) -",
        "exif-software": "အသုံးပြုထားသော ဆော့ဝဲ",
        "exif-artist": "ဖန်တီးသူ",
        "exif-copyright": "မူပိုင်ခွင့်ပိုင်ရှင်",
+       "exif-exifversion": "Exif ဗားရှင်း",
+       "exif-colorspace": "အရောင်နေရာ",
        "exif-pixelydimension": "ပုံအကျယ်",
        "exif-pixelxdimension": "ပုံအမြင့်",
        "exif-usercomment": "အသုံးပြုသူ မှတ်ချက်များ",
        "exif-gpslongitude": "လောင်ဂျီကျု",
        "exif-gpsaltitude": "အမြင့်",
        "exif-gpsdatestamp": "ဂျီပီအက်စ်ရက်စွဲ",
+       "exif-languagecode": "ဘာသာစကား",
        "exif-orientation-1": "ပုံမှန်",
        "exif-componentsconfiguration-0": "မတည်ရှိပါ",
        "exif-subjectdistance-value": "$1 မီတာ",
        "imgmultipagenext": "နောက်စာမျက်နှာ →",
        "imgmultigo": "သွား​ပါ!",
        "imgmultigoto": "စာမျက်နှာ $1 ကို သွားရန်",
+       "img-lang-default": "(ပင်မ ဘာသာစကား)",
        "table_pager_next": "နောက်စာမျက်နှာ",
        "table_pager_prev": "ပြီးခဲ့သော စာမျက်နှာ",
        "table_pager_first": "ပထမဆုံး စာမျက်နှာ",
        "autosumm-new": "\"$1\" အစချီသော စာလုံးတို့နှင့် စာမျက်နှာကို ဖန်တီးလိုက်သည်",
        "watchlistedit-normal-title": "စောင့်ကြည့်စာရင်းကို တည်းဖြတ်ရန်",
        "watchlistedit-normal-legend": "စောင့်ကြည့်စာရင်းမှ ခေါင်းစဉ်များကို ဖျက်ရန်",
+       "watchlistedit-normal-explain": "သင်၏ စောင့်ကြည့်စာရင်းရှိ ခေါင်းစဉ်များကို အောက်တွင် ပြသထားသည်။\nခေါင်းစဉ်တစ်ခုကို ဖယ်ရှားရန် ထိုခေါင်းစဉ်ဘေးရှိ အကွက်တွင် အမှန်ခြစ်ပြီး \"{{int:Watchlistedit-normal-submit}}\" ကိုနှိပ်ပါ။\n[[Special:EditWatchlist/raw|စောင့်ကြည့်စာရင်း အကြမ်း]]ကိုလည်း ကြည့်နိုင်ပါသည်။",
        "watchlistedit-normal-submit": "ခေါင်းစဉ်များကို ဖယ်ရှားရန်",
+       "watchlistedit-normal-done": "{{PLURAL:$1|ခေါင်းစဉ်တစ်ခု|ခေါင်းစဉ် $1 ခုတို့}}ကို သင်၏ စောင့်ကြည့်စာရင်းမှ ဖယ်ရှားပြီးပြီ:",
        "watchlistedit-raw-titles": "ခေါင်းစဉ်များ -",
        "watchlisttools-view": "ကိုက်ညီသော အပြောင်းအလဲများကို ကြည့်ရန်",
        "watchlisttools-edit": "စောင့်ကြည့်စာရင်းများကို ကြည့်ပြီး တည်းဖြတ်ပါ။",
        "htmlform-reset": "ပြောင်းလဲထားသည်များ မလုပ်တော့ရန်",
        "htmlform-selectorother-other": "အခြား",
        "logentry-delete-delete": "$3 စာမျက်နှာကို $1 က {{GENDER:$2|ဖျက်ပစ်ခဲ့သည်}}",
+       "logentry-delete-revision": "$3 စာမျက်နှာပေါ်ရှိ {{PLURAL:$5|တည်းဖြတ်မူတစ်ခု|တည်းဖြတ်မူ $5 ခု}}၏ အမြင်ပုံစံကို $1 က {{GENDER:$2|ပြောင်းလဲခဲ့သည်}}: $4",
+       "revdelete-content-hid": "အကြောင်းအရာ ဝှက်ခြင်း",
        "revdelete-restricted": "အက်ဒမင်များသို့ ကန့်သတ်ချက်များ သက်ရောက်ရန်",
        "revdelete-unrestricted": "အက်ဒမင်များအတွက် ကန့်သတ်ချက်များကို ဖယ်ရှားရန်",
        "logentry-move-move": "$3 စာမျက်နှာကို $4 သို့ $1က {{GENDER:$2|ရွှေ့ခဲ့သည်}}",
+       "logentry-move-move-noredirect": "$3 မှ $4 သို့ စာမျက်နှာကို ပြန်ညွှန်းချန်မထားပဲ $1 {{GENDER:$2|က ရွှေ့ခဲ့သည်}}",
        "logentry-newusers-create": "အသုံးပြုသူအကောင့် $1 ကို {{GENDER:$2|ဖန်တီးခဲ့သည်}}",
        "logentry-upload-upload": "$1 သည် $3 ကို {{GENDER:$2|upload တင်ခဲ့သည်}}",
+       "logentry-upload-overwrite": "$3 ၏ ဗားရှင်းအသစ်ကို $1 {{GENDER:$2|upload တင်ခဲ့သည်}}",
        "rightsnone": "(ဘာမှမရှိ)",
        "revdelete-summary": "အကျဉ်းချုပ်ကို တည်းဖြတ်ရန်",
        "searchsuggest-search": "ရှာဖွေရန်",
        "api-error-unknown-code": "အမည်မသိ အမှား - \"$1\"",
        "api-error-unknown-warning": "အမည်မသိ သတိပေးချက် - $1",
        "api-error-uploaddisabled": "ဤဝီကီတွင် ဖိုင်တင်ခြင်း ပိတ်ထားသည်။",
-       "api-error-verification-error": "ဖိုင်ပျက်နေသည် (သို့) ဖိုင်နောက်ဆက် extension မှားနေသည်။"
+       "api-error-verification-error": "ဖိုင်ပျက်နေသည် (သို့) ဖိုင်နောက်ဆက် extension မှားနေသည်။",
+       "pagelanguage": "စာမျက်နှာ ဘာသာစကား ပြောင်းလဲရန်",
+       "pagelang-language": "ဘာသာစကား",
+       "pagelang-use-default": "ပင်မ ဘာသာစကားကို အသုံးပြုရန်",
+       "right-pagelang": "စာမျက်နှာ ဘာသာစကား ပြောင်းလဲရန်",
+       "log-name-pagelang": "ဘာသာစကား ပြောင်းလဲမှု မှတ်တမ်း",
+       "log-description-pagelang": "ဤအရာသည် စာမျက်နှာ၏ဘာသာစကားများ ပြောင်းလဲမှုမှတ်တမ်း ဖြစ်သည်။"
 }
index 9898372..a1a9bb1 100644 (file)
@@ -12,7 +12,8 @@
                        "Urhixidur",
                        "Игорь Бродский",
                        "아라",
-                       "Denö"
+                       "Denö",
+                       "Macofe"
                ]
        },
        "tog-underline": "Сюлмавома петнень алга черькстамс:",
        "viewsourcetext": "Те лопанть лисьмапрясь маштови ваномскак, лангстонзо саемс копияяк:",
        "namespaceprotected": "'''$1''' лемпотмосонть арась видечить витнемс-петнемс лопатнесэ.",
        "ns-specialprotected": "{{ns:special}} лем марто лопатне а витневить-петневить.",
-       "titleprotected": "Те коняксонть ванстызе [[Теиця:$1|$1]], кияк иляссо тее.\nТувталось вана ''$2''.",
+       "titleprotected": "Те коняксонть ванстызе [[User:$1|$1]], кияк иляссо тее.\nТувталось вана <em>$2</em>.",
        "exception-nologin": "Эзить сова",
        "virus-scanfailed": "сканнось эзь лисе (код $1)",
        "virus-unknownscanner": "апак содань антивирус:",
        "prefs-signature": "Кедь путовкс",
        "prefs-dateformat": "Ков чинь форматозо",
        "prefs-diffs": "Мейсэ явовить верзиятне",
-       "email-address-validity-valid": "Е-сёрмапаргот маряви маштови",
        "userrights-lookup-user": "Сови куротнень ветямось",
        "userrights-user-editname": "Сёрмадт теицянь лем:",
        "editusergroup": "Витнемс-петнемс сови куротнень",
        "upload-description": "Файланть йовтамозо",
        "upload-options": "Йовкстамонь параметрат",
        "watchthisupload": "Ваномс те лопанть мельга",
-       "upload-success-subj": "Совавтовсь кода эряви",
-       "upload-failure-subj": "Ёвкстамосо стакачи",
-       "upload-warning-subj": "Ёвкстамодо кардамонь пачтямо",
        "upload-proto-error": "Аволь истямо протокол",
        "upload-file-error": "Потмонь ильведькс",
        "upload-misc-error": "Файлань ёвкстамонь апак содань ильведевкс",
        "move-page-legend": "Печтевтемс лопанть",
        "movepagetext": "Ало максозь лувонть тевс нолдазь, одс лемдят лопа, ве шкасто печтевтят од таркас сонзэ лиякстомтома юронзо-журналонзо.\nИкелень лемезэ тееви печтевтема лопакс, кона ютавты лисийть-совийть од лементень.\nНевтевкстнэ икелень лементь лангс а кармить лиякстомтовомо (инеськеть, вант улить - арасть [[Special:DoubleRedirects|кавтонь кирдань]] ды [[Special:BrokenRedirects|сезень печтевтемат]]).\nЭсеть лангсо вана невтевкстнэ невтест сев, ков эряви.\n\nМель явт, улиндеряй анок лопа од лементь таркасо, лопась  '''а печтевтеви'''. Печтевтеви ансяк сестэ, зярдо лопась чаво эли ашти певтевтема лопакс, конань арась витнемань-петнемань икелькс умазо. Лиякс меремга, маштови одов лемдемс лопа икелень лемсэнзэ, зярдо теят ильведевкс; уликс лия лопа а нардави.\n\n'''ВАНОК!'''\nОдс лемдямось тусы покш ды пек апак учонь полавтовомат лопатненень, конатнес ''весеменень пек содавикст''.\nИнеськеть, поладомадо икеле васня вант, чарькодят - чарькодят козонь те тевесь вети.",
        "movepagetalktext": "Поладозь кортавтома лопась, кодак истямось ули ютавтови автоматика вельде одс лемдязенть марто, '''а ютавтови, зярдо:'''<br />\n\n*Истямо лем марто кортавтома лопа, конась аволь чаво муеви\n*Эзить путо тешкст паксясонть ало.<br />\n\nЗярдо истят тевтне, сави тонстеть лопатнень кучомс-сюлмамс, кедьсэ.",
-       "movearticle": "Одов лемдемс лопанть:",
        "movenotallowed": "Арась меремат печтевтемс лопатнесэ.",
        "newtitle": "Од леменьтэ:",
        "move-watch": "Ваномс лопанть",
        "movenosubpage": "Те лопасонть алкслопат арасть.",
        "movereason": "Тувталось:",
        "revertmove": "велявтодо",
-       "delete_and_move": "Нардык ды печтевтик",
        "delete_and_move_confirm": "Нардыка те лопанть",
        "delete_and_move_reason": "«[[$1]]» нардазель од таркань теемга",
        "immobile-source-namespace": "\"$1\" лемпотмосонть лопатне а печтевтевить",
        "expand_templates_preview": "Васнянь неевтезэ",
        "special-characters-group-latin": "Латиница",
        "special-characters-group-symbols": "Тешкстт",
-       "special-characters-group-cyrillic": "Кириллица"
+       "special-characters-group-cyrillic": "Кириллица",
+       "randomrootpage": "Кодама понгсь юрт лопа"
 }
index 6728fed..dc66e13 100644 (file)
        "createacct-email-ph": "شه ایمیل ره باوّین",
        "createaccountmail": "ایمیل جه",
        "createaccountreason": "دلیل:",
-       "createacct-captcha": "امنیتی چک",
-       "createacct-imgcaptcha-ph": "این بنویشته‌یی که بالا وینّی ره بنویسین",
        "createacct-submit": "شه اکانت ره بسازین",
        "createacct-benefit-heading": "{{SITENAME}} ره شِمه واری آدِمون بِساتنه",
        "createacct-benefit-body1": "{{PLURAL:$1|دچی‌ین}}",
        "recentchanges-label-bot": "اینتا ویرایش‌ره اته ربات انجام هدائه",
        "recentchanges-label-unpatrolled": "این دَچی‌یه ره هَنتا بررسی نَکاردنه.",
        "recentchanges-label-plusminus": "صفحه‌ی ِقایده انده بایت تغییر هاکرده",
-       "recentchanges-legend-heading": "'''اختصارون:'''",
+       "recentchanges-legend-heading": "<strong>اختصارون:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|تازه بساته صفحه‌ئون]] ره هم هارشین)",
        "rclistfrom": "نِمایش تازه‌دگاردسته‌ئون با شروع از $3 $2",
        "rcshowhideminor": "پچیک دچی‌یه‌ئون $1",
index 419cd72..ddbb9a1 100644 (file)
@@ -10,7 +10,8 @@
                        "Teòtlalili",
                        "아라",
                        "Fitoschido",
-                       "Taresi"
+                       "Taresi",
+                       "Macofe"
                ]
        },
        "tog-underline": "Mokìnxòîkuilòtzàswis tzòwilistìn:",
        "viewsourcetext": "Tihuelīti tiquitta auh ticcopīna inīn zāzanilli ītlahtōlcaquiliztilōni:",
        "namespaceprotected": "Ahmo tiquihuelīti tiquimpatla zāzaniltin īpan '''$1'''.",
        "ns-specialprotected": "In nònkuâkìskàtlaìxtlapaltìn awel ìmpan nemàtilòs mokinyèktlàlis.",
-       "titleprotected": "Inīn zāzanilli ōmoquīxti ic tlachīhualiztli ic [[User:$1|$1]].\nŌquihto: ''$2''",
+       "titleprotected": "Inīn zāzanilli ōmoquīxti ic tlachīhualiztli ic [[User:$1|$1]].\nŌquihto: <em>$2</em>",
        "exception-nologin": "Ahmō timocalac",
        "virus-unknownscanner": "ahmatic antivirus:",
        "welcomeuser": "Ximopanōlti, $1!",
        "sourceurl": "Mēyal-URL:",
        "destfilename": "Tōcāhuīc:",
        "watchthisupload": "Tictlachiyāz inīn zāzanilli",
-       "upload-success-subj": "Cualli quetzaliztli",
        "upload-form-label-infoform-name": "Tōcāitl",
        "upload-form-label-usage-filename": "Ihcuilōlli ītōcā",
        "upload_source_file": " (cē tlahcuilōlli mochīuhpōhualhuazco)",
        "unwatch": "Ahtictlachiyāz",
        "watchlist-details": "{{PLURAL:$1|$1 zāzanilli|$1 zāzaniltin}} motlachiyaliz, ahmo mopōhua tēixnāmiquiliztli.",
        "wlshowlast": "Tiquinttāz tlapatlaliztli īhuīcpa achto $1 yēmpohualminuhtli, $2 tōnaltin",
-       "watchlistall2": "mochīntīn",
        "watching": "Tlachiyacah...",
        "unwatching": "Ahtlachiyacah...",
        "enotif_impersonal_salutation": "tlatequitiltilīlli īpan {{SITENAME}}",
        "special-characters-group-gujarati": "Guyaratitlahcuilōlli",
        "special-characters-group-thai": "Taitlahcuilōlli",
        "special-characters-group-lao": "Laotlahcuilōlli",
-       "special-characters-group-khmer": "Jemertlahcuilōlli"
+       "special-characters-group-khmer": "Jemertlahcuilōlli",
+       "randomrootpage": "Sâsaìntlèn nelwatlaìxtlapalli"
 }
index bd45273..69be88a 100644 (file)
@@ -6,7 +6,8 @@
                        "Kaihsu",
                        "아라",
                        "唐吉訶德的侍從",
-                       "Luuva"
+                       "Luuva",
+                       "Macofe"
                ]
        },
        "tog-underline": "Liân-kiat oē té-sûn:",
        "tagline": "Ùi {{SITENAME}}",
        "help": "Soat-bêng-su",
        "search": "Chhiau-chhoē",
-       "searchbutton": "Chhiau",
+       "searchbutton": "Chh",
        "go": "Lâi-khì",
        "searcharticle": "Lâi-khì",
        "history": "Ia̍h le̍k-sú",
        "disclaimers": "Bô-hū-chek seng-bêng",
        "disclaimerpage": "Project:It-poaⁿ ê seng-bêng",
        "edithelp": "Án-choáⁿ siu-kái",
+       "helppage-top-gethelp": "soat-bêng",
        "mainpage": "Thâu-ia̍h",
        "mainpage-description": "Thâu-ia̍h",
        "policy-url": "Project:Chèng-chhek",
        "toc": "Bo̍k-lo̍k",
        "showtoc": "khui",
        "hidetoc": "siu",
-       "collapsible-collapse": "Siu",
-       "collapsible-expand": "Khui",
+       "collapsible-collapse": "Am",
+       "collapsible-expand": "Hiàn",
        "confirmable-confirm": "{{GENDER:$1|你}}敢確定唅?",
        "confirmable-yes": "著啦",
        "confirmable-no": "無啦!毋是!",
        "myprivateinfoprotected": "你無授權改你家己的私人資訊。",
        "mypreferencesprotected": "你無授權改你的家己的喜愛設定。",
        "ns-specialprotected": "特殊頁袂得改。",
-       "titleprotected": "這个標題已經予[[User:$1|$1]]保護起來,袂得提來用。\n原因是 \"<em>$2</em>。",
+       "titleprotected": "這个標題已經予[[User:$1|$1]]保護起來,袂得提來用。\n原因是 <em>$2</em>。",
        "filereadonlyerror": "因為檔案庫這馬只會使看,所以袂得改 \"$1\"這个檔案。\n鎖檔案庫的管理員講是因為:\"$3\"。",
        "invalidtitle-knownnamespace": "佇名空間 \"$2\"佮文字\"$3\"的標題袂使得。",
        "invalidtitle-unknownnamespace": "名空間編號 $1(毋知名)的\"$2\"文字標題袂使用。",
        "searchprofile-advanced": "chìn-chi̍t-pō͘",
        "searchprofile-articles-tooltip": "Tī $1 chhoé",
        "searchprofile-images-tooltip": "Chhoé tóng-àn",
-       "searchprofile-everything-tooltip": "Chhiau choân-pō͘ (pau-koat thó-lūn-ia̍h)",
+       "searchprofile-everything-tooltip": "Chh choân-pō͘ (pau-koat thó-lūn-ia̍h)",
        "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ó.",
-       "search-nonefound": "揣無",
+       "search-nonefound": "Chhoē m̄ tio̍h",
        "powersearch-legend": "Kiám-sek",
        "preferences": "Siat-tēng",
        "mypreferences": "Góa ê siat-tēng",
        "grouppage-sysop": "{{ns:project}}:Hêng-chèng jîn-oân",
        "grouppage-bureaucrat": "{{ns:project}}:Koaⁿ-liâu",
        "right-writeapi": "用API寫",
-       "newuserlogpage": "開賬戶日誌",
+       "newuserlogpage": "khui kháu-chō ji̍t-chì",
        "rightslogtext": "Chit-ê log lia̍t-chhut kái-piàn iōng-chiá koân-lī ê tōng-chok.",
        "action-edit": "Siu-kái chit ia̍h",
        "nchanges": "$1 {{PLURAL:$1|kái|kái}}",
        "recentchanges-label-minor": "Che sī sió siu-kái",
        "recentchanges-label-bot": "Che sī ki-khì-lâng kái--ê",
        "recentchanges-label-unpatrolled": "這个編輯抑無巡視過",
-       "recentchanges-label-plusminus": "彼頁改了;精差的位元組",
-       "recentchanges-legend-heading": "'''Ké-soeh:'''",
+       "recentchanges-label-plusminus": "Hit ia̍h kái liáu; cheng-chha ê ūi-goân-cho͘",
+       "recentchanges-legend-heading": "<strong>Ké-soeh:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (請參考[[Special:NewPages|新頁清單]])",
        "rcnotefrom": "Ē-kha sī <b>$2</b> kàu taⁿ ê kái-piàn (ke̍k-ke hián-sī <b>$1</b> hāng).",
        "rclistfrom": "Hián-sī tùi $3 $2 kàu taⁿ ê sin kái-piàn",
        "rcshowhideminor": "$1 sió siu-kái",
-       "rcshowhideminor-hide": "藏起來",
+       "rcshowhideminor-show": "hiàn",
+       "rcshowhideminor-hide": "am",
        "rcshowhidebots": "$1 機器儂",
-       "rcshowhidebots-show": "",
+       "rcshowhidebots-show": "hiàn",
        "rcshowhideliu": "$1 teng-ji̍p ê iōng-chiá",
-       "rcshowhideliu-hide": "藏起來",
+       "rcshowhideliu-show": "hiàn",
+       "rcshowhideliu-hide": "am",
        "rcshowhideanons": "$1 bû-bêng-sī",
-       "rcshowhideanons-hide": "藏起來",
+       "rcshowhideanons-show": "hiàn",
+       "rcshowhideanons-hide": "am",
        "rcshowhidemine": "$1 góa ê pian-chi̍p",
-       "rcshowhidemine-hide": "藏起來",
+       "rcshowhidemine-show": "hiàn",
+       "rcshowhidemine-hide": "am",
        "rclinks": "Hían-sī $2 ji̍t lāi siōng sin ê $1 hāng kái-piàn<br />$3",
        "diff": "Cheng-chha",
        "hist": "ls",
        "minoreditletter": "~",
        "newpageletter": "!",
        "boteditletter": "b",
-       "rc-change-size-new": "改了後;變做$1{{PLURAL:$1|位元}}",
+       "rc-change-size-new": "Kái liáu āu, piàn-choè $1 {{PLURAL:$1|ūi-goân}}",
        "recentchangeslinked": "Siong-koan ê kái-piàn",
        "recentchangeslinked-feed": "Siong-koan ê kái-piàn",
        "recentchangeslinked-toolbox": "Siong-koan ê kái-piàn",
-       "recentchangeslinked-title": "佮 \"$1\" 相關的改變",
+       "recentchangeslinked-title": "kap \"$1\" siong-koan ê kái-piàn",
        "recentchangeslinked-summary": "這是有相接到指定頁(抑是指定分類的所有成員),而且最近家己頁的內容有改過的清單。\n遐的頁[[Special:Watchlist|佇你的監視清單]]會用<strong>粗體</strong> 標示。",
        "recentchangeslinked-page": "Ia̍h ê miâ:",
        "upload": "Kā tóng-àn chiūⁿ-bāng",
        "filehist-thumbtext": "$1版本的細圖",
        "filehist-user": "Iōng-chiá",
        "filehist-dimensions": "寸尺",
-       "filehist-comment": "說明",
+       "filehist-comment": "soat-bêng",
        "imagelinks": "tóng-àn sù-iōng ê chōng-hòng",
        "linkstoimage": "ē-kha {{PLURAL:$1|ê ia̍h}} ū iōng tio̍h chit ê iáⁿ-siōng:",
        "nolinkstoimage": "Bô poàⁿ ia̍h liân kàu chit tiuⁿ iáⁿ-siōng.",
        "rollbackfailed": "Ká bē tńg khì",
        "cantrollback": "Bô-hoat-tō· kā siu-kái ká-tńg--khì; téng ūi kòng-hiàn-chiá sī chit ia̍h î-it ê chok-chiá.",
        "alreadyrolled": "Bô-hoat-tō· kā [[User:$2|$2]] ([[User talk:$2|Thó-lūn]]) tùi [[:$1]] ê siu-kái ká-tńg-khì; í-keng ū lâng siu-kái a̍h-sī ká-tńg chit ia̍h. Téng 1 ūi siu-kái-chiá sī [[User:$3|$3]] ([[User talk:$3|Thó-lūn]]).",
-       "editcomment": "Siu-kái phêng-lūn sī: \"''$1''\".",
+       "editcomment": "Siu-kái phêng-lūn sī: <em>$1</em>.",
        "protectedarticle": "pó-hō͘ \"[[$1]]\"",
        "protect-title": "Pó-hō· \"$1\"",
        "prot_1movedto2": "[[$1]] sóa khì tī [[$2]]",
        "version": "Pán-pún",
        "specialpages": "Te̍k-sû-ia̍h",
        "tag-filter": "[[Special:Tags|Piau-chhiam]] chhoē mi̍h:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|个標籤}}]]:$2)",
+       "tag-list-wrapper": "([[Special:Tags|$1 ê piau-chhiam]]: $2)",
        "logentry-move-move": "$1 {{GENDER:$2|sóa}} $3 chit ia̍h khì $4",
        "logentry-newusers-create": "已經{{GENDER:$2|開好}}用者口座 $1",
-       "searchsuggest-search": "Chhiau",
+       "searchsuggest-search": "Chh",
        "expandtemplates": "Khok-chhiong pang-bô͘",
        "expand_templates_input": "Su-ji̍p bûn-jī:",
        "expand_templates_output": "Kiat-kó:",
index a228f8d..d1b54bd 100644 (file)
        "moredotdotdot": "Cchiù...",
        "morenotlisted": "Chisto elenco nun è cumpreto.",
        "mypage": "Paggena",
+       "anonuserpage": "Utente scanusciuto",
        "mytalk": "'E chiàcchieriate mmie",
        "anontalk": "Chiacchierate",
        "navigation": "Navigazzione",
        "view-foreign": "Vide ncopp'a $1",
        "edit": "Càgna",
        "edit-local": "Càgna descrizione lucale",
-       "create": "Cria",
+       "create": "Crèa",
        "create-local": "Azzecca descrizione lucale",
        "editthispage": "Càgna chesta paggena",
-       "create-this-page": "Cria sta paggena",
+       "create-this-page": "Crèa sta paggena",
        "delete": "Scancèlla",
        "deletethispage": "Scancèlla chésta paggena",
        "undeletethispage": "Arrepiglia chista paggena",
        "myprivateinfoprotected": "Nun v'è permesso a cagnà 'a nfurmaziona privata vuosta.",
        "mypreferencesprotected": "Nun v'è permesso 'a cagnà 'e preferenze tuoje.",
        "ns-specialprotected": "'E paggene spiciale nun se ponno cagnà.",
-       "titleprotected": "'A criazione 'e stu titolo è stata bloccata 'a ll'utente [[User:$1|$1]].\n'A ragione è chesta: ''$2''.",
+       "titleprotected": "'A criazione 'e stu titolo è stata bloccata 'a ll'utente [[User:$1|$1]].\n'A ragione è chesta: <em>$2</em>.",
        "filereadonlyerror": "Nun se può cagnà 'o file \"$1\" pecché 'o repository 'e file \"$2\" sta 'n modo sulo-lettura.\n\nL'ammenistratore 'e sistema che l'ha bloccato ha dato sta ragione: \"$3\".",
        "invalidtitle-knownnamespace": "Titolo nun buono c' 'o namespace \"$2\" e testo \"$3\"",
        "invalidtitle-unknownnamespace": "Titolo nun buono c' 'o namespace scanusciuto \"$1\" e testo \"$2\"",
        "userlogin-joinproject": "Facite 'o riggistro ncopp'a {{SITENAME}}",
        "nologin": "Nun tenite ancora n'acciesso? '''$1'''.",
        "nologinlink": "Crialo mmo",
-       "createaccount": "Cria nu cunto nuovo",
+       "createaccount": "Crèa nu cunto nuovo",
        "gotaccount": "Tiene già nu cunto? '''$1'''.",
        "gotaccountlink": "Tràse",
        "userlogin-resetlink": "V'avite scurdato 'e dettaglie d'acciesso vuoste?",
        "userlogin-resetpassword-link": "Te sì scurdat' 'a password?",
        "userlogin-helplink2": "Aiuto cu l'accieso",
        "userlogin-loggedin": "Sì già {{GENDER:$1|connesso comme $1|connessa comme $1|connesso/a comme $1}}.\nUsa 'o modulo ccà abbascio pe trasì com'a n'atu utente.",
-       "userlogin-createanother": "Cria n'at'account",
+       "userlogin-createanother": "Crèa n'at'account",
        "createacct-emailrequired": "Indirizzo email",
        "createacct-emailoptional": "Indirizzo 'e posta elettronica (ozzionale)",
        "createacct-email-ph": "Scrivite 'o nderizzo mail vuosto",
        "createaccountreason": "Mutivo:",
        "createacct-reason": "Mutivo",
        "createacct-reason-ph": "Pecché staje crianno n'at'utenza",
-       "createacct-submit": "Cria 'a toja utenza",
-       "createacct-another-submit": "Cria nu cunto",
+       "createacct-submit": "Crèa 'o cunto utente vuosto",
+       "createacct-another-submit": "Crèa nu cunto",
        "createacct-benefit-heading": "{{SITENAME}} è fatta 'e perzone comme te.",
        "createacct-benefit-body1": "{{PLURAL:$1|càgnamiento|càgnamiente}}",
        "createacct-benefit-body2": "{{PLURAL:$1|paggena|paggene}}",
        "createaccount-title": "Criazione 'e nu cunto pe' {{SITENAME}}",
        "createaccount-text": "Coccherun ave fatto nu cunto ncoppa {{SITENAME}} ($4) a nomme 'e $2, associato a st'indirizzo 'e posta elettronica. 'A password pe l'utente \"$2\" è abbiàta a comme \"$3\".\nFosse buono 'e trasì ampressa e cagnà 'a password subbeto.\n\nSi 'a criazione d' 'o cunto è stata nu sbaglio, allora putite lassà perde sta mmasciata.",
        "login-throttled": "Songo state fatte troppe tentative 'a trasì dint'a nu periodo troppo curto.\nAspetta nu $1 e prova aròppo.",
-       "login-abort-generic": "'O login tujo nun ha avuto succiesso - Annullato",
+       "login-abort-generic": "'O login vuosto scassaje - Annullato",
        "login-migrated-generic": "'O cunto tuo nun sè mmigrato, e l'username d' 'o tuojo nun esiste cchiù dint'a sta wiki.",
        "loginlanguagelabel": "Lengua: $1",
        "suspicious-userlogout": "'A richiesta 'e disconnessione d' 'a toja è stata negate pecché pare ca fosse mannata 'a nu navigatóre rutto o nu proxy 'e \"caching\".",
        "createacct-another-realname-tip": "'O nomme overo vuosto è ozzionale.\nSi sciglite 'e nzertà 'o nomme overo, chesto s'ausarrà pe' dà l'utente l'attribuzione d' 'a fatica fatta.",
        "pt-login": "Tràse",
        "pt-login-button": "Tràse",
-       "pt-createaccount": "Cria nu cunto nuovo",
+       "pt-createaccount": "Crèa nu cunto nuovo",
        "pt-userlogout": "Jèsce",
        "php-mail-error-unknown": "Errore scanusciuto dint'a funzione PHP mail()",
        "user-mail-no-addy": "Avite cercato 'e mannà na mmasciata e-mail senza indirizzo.",
        "newpassword": "Password nova:",
        "retypenew": "Ripete 'a password:",
        "resetpass_submit": "Stabbelite 'a password e trasite",
-       "changepassword-success": "'A password è stata cagnata currettamente!",
+       "changepassword-success": "'A password è stata cagnata!",
        "changepassword-throttled": "Songo state fatte troppe tentative 'a trasì.\nAspetta nu $1 apprimma 'e pruvà n'ata vota.",
        "botpasswords": "Password bot",
        "botpasswords-summary": "<em>Password bot</em> premmettesse 'e trasì a n'utente pe' bbìa d'API senza ausà 'e credenziale d'acciesso prencepale 'e ll'utenza. 'E deritte utente disponibbele quanno s'affettuasse l'accesso cu na password 'e bot se ponn'apprisentà lemmetate.\n\nSi nun canuscite 'o mutivo p' 'o quale 'o putite fà, allora può darse ca nun l'avissev'a ffà. Nisciuno avesse maje 'addimannà 'e crià una 'e chiste p' 'e ddà a chille.",
        "botpasswords-insert-failed": "Nun se pò azzeccà 'o nomme bot \"$1\". Fosse stato già azzeccato?",
        "botpasswords-update-failed": "Se scassaje a carrecà 'o nomme bot \"$1\". È stato scancellato?",
        "botpasswords-created-title": "Password bot criata",
-       "botpasswords-created-body": "'A password bot \"$1\" fuje criata cu' succiesso.",
+       "botpasswords-created-body": "'A password bot \"$1\" 'a ll'utente \"$2\" fuje criata.",
        "botpasswords-updated-title": "Password bot agghiurnata",
-       "botpasswords-updated-body": "'A password bot \"$1\" è fuje agghiurnata cu' succiesso.",
+       "botpasswords-updated-body": "'A password bot \"$1\" 'a ll'utente \"$2\" fuje agghiurnata.",
        "botpasswords-deleted-title": "Password bot scancellata",
-       "botpasswords-deleted-body": "'A password bot \"$1\" è stata scancellata.",
+       "botpasswords-deleted-body": "'A password bot \"$1\" 'a ll'utente \"$2\" è stata scancellata.",
        "botpasswords-newpassword": "'A password nòva pe' puté trasì cu <strong>$1</strong> è <strong>$2</strong>. <em>Pe' piacere signatevello chesto pe' ve ffà conzurtaziune future.</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider nun è disponibbele.",
        "botpasswords-restriction-failed": "'E restriziune 'e password bot nun ve permettessero st'acciesso.",
        "summary": "Riepilego:",
        "subject": "Suggietto:",
        "minoredit": "Chisto è nu cagnamiénto piccerillo",
-       "watchthis": "Tiene d'uocchio chesta paggena",
+       "watchthis": "Tiene d'uocchio sta paggena",
        "savearticle": "Sarva 'a paggena",
        "preview": "Anteprimma",
        "showpreview": "Vire anteprimma",
        "newarticle": "(Nuovo)",
        "newarticletext": "Site ghiuto/a addò nu link 'e na paggena ca nun esiste ancora.\nP' 'a crià sta paggena, accummenciate a scrivere dint'a cascia cà abbascio (vedite 'a [$1 paggena d'aiuto] pe liegge cchiù nfurmazziune).\nSi site venuto/a ccà pe' sbaglio, vedite 'e sprémmere 'o buttòne '''Arreto''' d' 'o navigatóre.",
        "anontalkpagetext": "----\n''Chest'è 'a paggena 'e discussione 'e n'utente anonimo, ca nun ave criàt' 'ancora n'utenza o ca nun sta ausanno. Pe' l'identificà avite 'e truvà 'o nummero d' 'o ndirizzo IP d' 'o sujo. L'indirizze IP se ponno spartì però sempe ausanno cunte differente. Si site n'utente anonimo e penzate ca 'e cummente ccà dint'a sta paggena nun parlano 'e vuje, allora [[Special:UserLogin/signup|criate n'utenza nnova]] o [[Special:UserLogin|trasite cu chella ca tenite già]] pe' nun sta' mmescato mmiez'a l'ati utente anonime n futuro.''",
-       "noarticletext": "Mo' mo' 'a paggena richiesta è abbacante. Se pò [[Special:Search/{{PAGENAME}}|ascià stu titolo]] dint'a l'ati paggene d' 'o sito, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ascià dint'e riggistre azzeccate] o pure [{{fullurl:{{FULLPAGENAME}}|action=edit}} cagnà 'a paggena mo']</span>.",
+       "noarticletext": "Mo' mo' 'a paggena richiesta è abbacante. Se pò [[Special:Search/{{PAGENAME}}|ascià stu titolo]] dint'a l'ati paggene d' 'o sito, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ascià dint'e riggistre azzeccate] o pure [{{fullurl:{{FULLPAGENAME}}|action=edit}} crià 'a paggena mo']</span>.",
        "noarticletext-nopermission": "Mo' mo' 'a paggena richiesta è abbacante. Se pò [[Special:Search/{{PAGENAME}}|ascià stu titolo]] dint'a l'ati paggene d' 'o sito, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ascià dint'e riggistre azzeccate]</span>, però nun tenite 'o permesso 'a crià sta paggena.",
        "missing-revision": "'A verziona #$1 d' 'a paggena \"{{FULLPAGENAME}}\" nun esiste.\n\nChest'è causato quanno se và dint'a nu link a na paggena ch'è stata scancellata.\n'E dettaglie se ponno truvà dint'a [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 'o riggistro 'e scancellamiente].",
        "userpage-userdoesnotexist": "'O cunto utente \"<nowiki>$1</nowiki>\" nun è riggistrato. Cuntrolla ca si buò overo crià o cagnà sta paggena.",
        "undo-summary-username-hidden": "Annullato 'o cagnamiento $1 pe n'utente annascunnuto",
        "cantcreateaccounttitle": "Nun se può crià cunto",
        "cantcreateaccount-text": "'A riggistraziona è stata bloccata 'a l'utente [[User:$3|$3]] 'a st'innerizzo IP ('''$1''').\n\n'O mutivo dato 'a $3 è chistu ccà: ''$2''",
-       "cantcreateaccount-range-text": "'A criazione 'e cunte 'a ll'indirizze int'o ntervallo '''$1''', che cummiglia 'o vuosto ('''$4'''), è stata bloccata 'a l'utente [[User:$3|$3]].\n\n'O mutivo dato 'a $3 è chistu ccà: ''$2''",
+       "cantcreateaccount-range-text": "'A criazione 'e cunte 'a ll'indirizze int'o ntervallo <strong>$1</strong>, che cummiglia 'o vuosto (<strong>$4</strong>), è stata bloccata 'a l'utente [[User:$3|$3]].\n\n'O mutivo dato 'a $3 è chistu ccà: <em>$2</em>",
        "viewpagelogs": "Vide 'e log azzeccate a sta paggena",
        "nohistory": "Nun esiste na cronologgia 'e verziune pe' sta paggena.",
        "currentrev": "Verzione 'e mmo",
        "revdelete-unsuppress": "Scancella 'e limmete ncopp' 'e verziune arripigliate",
        "revdelete-log": "Mutivo:",
        "revdelete-submit": "Applica {{PLURAL:$1|â virziona scigliuta|a 'e virziune scigliute}}",
-       "revdelete-success": "'''Visibbelità d' 'a verziona agghiurnata e apposto.'''",
+       "revdelete-success": "Visibbelità d' 'a verziona agghiurnata e apposto.",
        "revdelete-failure": "'''Int'a sta virziona 'a visibbelità nun se può agghiurnà:'''\n$1",
-       "logdelete-success": "'''Int'a stu riggistro 'a visibbelità è stata scigliuta currettamente.'''",
+       "logdelete-success": "Visebbiletà d' 'o riggistro mpustata.",
        "logdelete-failure": "'''Int'a stu riggistro 'a visibbelità nun se può scegliere:'''\n$1",
        "revdel-restore": "càgna visiblità",
        "pagehist": "Verziune 'e primma",
        "shown-title": "Fa vere {{PLURAL:$1|'nu risultato|$1 risultate}} ppe paggena",
        "viewprevnext": "Vere($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''Ncopp' 'o sito esiste na paggena c' 'o nomme \"[[:$1]]\"'''\n{{PLURAL:$2|0=|Vedite pure dint'a l'ati risultate 'e cerca.}}",
-       "searchmenu-new": "<strong>'''Cria a paggena \"[[:$1]]\" ncopp'â chisto wiki!'''</strong> {{PLURAL:$2|0=|Vide anche 'a paggena truovata cu 'a recerca vuosta|Vede anche 'e risultate d\"a recerca}}",
+       "searchmenu-new": "<strong>'''Crèa 'a paggena \"[[:$1]]\" ncopp'a stu wiki!'''</strong> {{PLURAL:$2|0=|Vedite pure 'a paggena truvata c' 'a recerca vuosta|Vedite pure 'e risultate d\"a recerca}}",
        "searchprofile-articles": "Paggene 'e contenute",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Tutto",
        "userrights-changeable-col": "Gruppe ca putite cagnà",
        "userrights-unchangeable-col": "Gruppe ca nun putite cagnà",
        "userrights-conflict": "Conflitto 'e cagnamiento 'e deritte utente! Cuntrullate e cunfermate 'e cagnamiente vuoste.",
-       "userrights-removed-self": "Avete rimosso buono 'e deritte vuoste. Picciò nun putite trasì cchiù dint'a sta paggena.",
+       "userrights-removed-self": "Avite rimosso 'e deritte vuoste. Picciò nun putite trasì cchiù dint'a sta paggena.",
        "group": "Gruppo:",
        "group-user": "Utente",
        "group-autoconfirmed": "Utente autocunfermate",
        "recentchanges-label-bot": "Cagnamiento affettuato 'a nu bot",
        "recentchanges-label-unpatrolled": "Chista modifica nun è stata 'ncora verificata",
        "recentchanges-label-plusminus": "'A grannezza d' 'a paggena s'è cagnata pe' bbia 'e stu nummero 'e bytes",
-       "recentchanges-legend-heading": "'''Liggenda:'''",
+       "recentchanges-legend-heading": "<strong>Liggenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vide [[Special:NewPages|'e paggene nove]])",
        "recentchanges-submit": "Faje vedé",
        "rcnotefrom": "Ccà abbascio {{PLURAL:$5|è alencato 'o cagnamiento appurtato|song' alincate 'e cagnamiente appurtate}} 'a <strong>$3, $4</strong> (mmustate nfin'a <strong>$1</strong>).",
        "upload-maxfilesize": "Diminsione massima d' 'o file: $1",
        "upload-description": "Descrizione d' 'o file",
        "upload-options": "Opziune 'e carreca",
-       "watchthisupload": "Tiene d'uocchio chistu file",
+       "watchthisupload": "Tiene d'uocchio stu file",
        "filewasdeleted": "Nu file ca se chiamave cumm'a chillo c'avete primma carrecato e pò è stato scancellato.\nVedite 'e cuntrullà 'o $1 apprimma ca cuntinuate c' 'a carreca.",
        "filename-thumb-name": "Chesto pare nu titolo 'e miniatura. Pe' piacere nun carrecate miniature 'a stessa wiki. 'E n'atu modo, cagnate pe' piacere 'o nomme d' 'o file, facenno chesto cchiù significativo e senza prefisso 'e miniatura.",
        "filename-bad-prefix": "'O nomme d' 'o file ca state a carrecà accummencia pe' ''\"$1\"''', ca nurmalmente è 'o nomme c'assegnasse na machina fotografeca automatecamente ed è nu nomme nun descrittivo.\nPe' piacere scigliete n'atu nomme ca fosse cchiù descrittivo.",
        "backend-fail-read": "Nun se può lieggere 'o file \"$1\".",
        "backend-fail-create": "Nun se può scrivere 'o file \"$1\"",
        "backend-fail-maxsize": "Nun se può scrivere 'o file \"$1\" pecché chist'è cchiù gruosso 'e {{PLURAL:$2|nu byte|$2 byte}}",
-       "backend-fail-readonly": "L'archivio 'e rezza \"$1\" è mò mò 'n sola-lettura. 'O mutivo è: \"$2\"",
+       "backend-fail-readonly": "L'archivio 'e rezza \"$1\" è mò mò 'n sola-lettura. 'O mutivo è: <em>$2</em>",
        "backend-fail-synced": "'O file \"$1\" è int' 'a nu stato ncunzistente dint'a l'archivie nterne.",
        "backend-fail-connect": "Nun se può cunnettà â memoria 'e rezza \"$1\".",
        "backend-fail-internal": "N'errore scanusciuto s'è verificato int'a l'archivie 'e rezza \"$1\".",
        "uploadstash-summary": "Sta paggena dà l'accesso a 'e file ca songo carrecate o ca stanno pe' se carrecà, ma nun songo pubbrecat'ancora ncopp'a sta wiki. Sti file nun songo visibbele a nisciuno, sulamente a chill'utente ca l'ha carrecato.",
        "uploadstash-clear": "Pulezza 'e file annascunnute",
        "uploadstash-nofiles": "Nun tenite file annascunnute.",
-       "uploadstash-badtoken": "L'esecuzione 'e sta azione nun ha avuto successo, forse pecché 'e credenziale 'e cagnamiento so' mmaturate. Prova n'ata vota.",
-       "uploadstash-errclear": "'A pulezzia d' 'e file nun ha avuto successo.",
+       "uploadstash-badtoken": "L'esecuzione 'e sta azione scassaje.\nForse pecché 'e credenziale 'e cagnamiento so' mmaturate.\nPruvate n'ata vota.",
+       "uploadstash-errclear": "'A pulezzia d' 'e file scassaje.",
        "uploadstash-refresh": "Agghiuorna l'elenco d' 'e file",
        "invalid-chunk-offset": "Distanza d' 'a parte nun valida",
        "img-auth-accessdenied": "Acciesso negato",
        "removedwatchtext": "\"[[:$1]]\" 'e 'a paggena 'e chiacchiera soja so' state scancellata 'a l'elenco [[Special:Watchlist|'e paggene cuntrullate]] vuosto.",
        "removedwatchtext-short": "Chista paggena \"$1\" è stata luvata a l'elenco 'e paggene cuntrullate.",
        "watch": "Secuta",
-       "watchthispage": "Tiene d'uocchio chesta paggena",
+       "watchthispage": "Tiene d'uocchio sta paggena",
        "unwatch": "Nun segui",
        "unwatchthispage": "Nun cuntrullà cchiù sta paggena",
        "notanarticle": "Chesta paggena nun è na voce",
        "delete-toobig": "Sta paggena tene na storia 'e cagnamiente troppo longa, ncopp'a $1 {{PLURAL:$1|verzione|verziune}}.\n'O scancellamiento 'e chiste paggene è stato ristretto pe nce 'e putè astipà si ce sta cocche probblema dint' 'o database 'e {{SITENAME}}.",
        "delete-warning-toobig": "Sta paggena tene na cronologgia troppo longa, ncopp'a $1 {{PLURAL:$1|verzione|verziune}}.\nScancellannole se putesse crià troppo burdello ncopp' 'e operaziune 'e database dint'a {{SITENAME}};\niate cuoncio cuoncio.",
        "deleteprotected": "Nun putite scancellà sta paggena pecché è stata prutetta.",
-       "deleting-backlinks-warning": "'''Attenzione:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|ati paggene]] cunteneno cullegamiente o paggene appennute â n'ata paggena ca state pe' scancellà.",
+       "deleting-backlinks-warning": "<strong>Attenzione:</strong>\n[[Special:WhatLinksHere/{{FULLPAGENAME}}|ati paggene]] cunteneno cullegamiente o paggene appennute â n'ata paggena ca state pe' scancellà.",
        "rollback": "Ausa na revizione 'e primma",
        "rollbacklink": "a vascio",
        "rollbacklinkcount": "annulla {{PLURAL:$1|nu cagnamiento|$1 cagnamiente}}",
        "rollbackfailed": "Annullamento fallito",
        "cantrollback": "Nun se può annullà stu cagnamiento;\nsapite ca l'urdemo autore è stato pure sul'isso a faticà dint'a sta paggena (nun ce sta n'at'autore).",
        "alreadyrolled": "Nun se può turna arreto a l'urdemo cagnamiento [[:$1]] 'a [[User:$2|$2]] ([[User talk:$2|Chiacchiera]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\ncocch'ato ha cagnato o annullato 'a paggena già.\n\nL'urdemo cangamiento d' 'a paggena fuje 'a [[User:$3|$3]] ([[User talk:$3|Chiacchiera]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "'O riepilego d' 'o cagnamiento era: \"''$1''\".",
+       "editcomment": "'O riepilego d' 'o cagnamiento era: <em>$1</em>.",
        "revertpage": "Cangiaje 'e cagnamiénte 'e [[Special:Contributions/$2|$2]] ([[User talk:$2|discussione]]), cu â verzione 'e pprimma 'e  [[User:$1|$1]]",
        "revertpage-nouser": "Annullate 'e cagnamiente 'e n'utente annascunnuto, è stata ripigliata ll'urdema verzione 'e {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Cagnamiente annullate 'a $1;\ns'è turnat arreto a l'urdema verzione 'e $2.",
        "changecontentmodel-title-label": "Titulo d\"a paggena",
        "changecontentmodel-model-label": "Mudello 'e cuntenute nuovo",
        "changecontentmodel-reason-label": "Mutivo:",
+       "changecontentmodel-submit": "Cagnato",
        "changecontentmodel-success-title": "'O mudello 'e cuntenuto fuje cagnato",
        "changecontentmodel-success-text": "'O tipo 'e cuntenut 'e [[:$1]] è stato cagnato.",
        "changecontentmodel-cannot-convert": "'E cuntenute dint'a [[:$1]] nun se ponno scagnà a nu tipo 'e $2.",
        "changecontentmodel-nodirectediting": "'O mudello 'e cuntenute $1 nun suppurtasse 'o cagnamiento diretto",
        "log-name-contentmodel": "Riggistro 'e cagnamiente d' 'o mudello 'e cuntenute",
        "log-description-contentmodel": "Evvente azzeccate c' 'o mudello 'e cuntenute 'e na paggena",
+       "logentry-contentmodel-new": "$1 {{GENDER:$2|criaje}} 'a paggena $3 ausanno nu mudell' 'e cuntenute nun-predefinito \"$5\"",
        "logentry-contentmodel-change": "$1 {{GENDER:$2|cagnaje}} 'o mudello 'e cuntenute 'e na paggena $3 'a \"$4\" a \"$5\"",
        "logentry-contentmodel-change-revertlink": "arrepiglia",
        "logentry-contentmodel-change-revert": "arrepiglia",
        "pagesize": "(byte)",
        "restriction-edit": "Càgna",
        "restriction-move": "Mòve",
-       "restriction-create": "Cria",
+       "restriction-create": "Crèa",
        "restriction-upload": "Carreca",
        "restriction-level-sysop": "prutetta",
        "restriction-level-autoconfirmed": "semi-prutetta",
        "import-nonewrevisions": "Nisciuna verziona mpurtata (Tutt' 'e verziune so' state già mpurtate o pure zumpajeno pe' bbia 'e cocch'errore).",
        "xml-error-string": "$1 a 'a linea $2, culonne $3 (byte $4): $5",
        "import-upload": "Carreca 'e date 'e XML",
-       "import-token-mismatch": "Se so' perdut' 'e date d' 'a sessione.\nProva n'ata vota.",
+       "import-token-mismatch": "Se so' perdut' 'e date d' 'a sessione.\n\nPuò darse ca site asciuto/a. <strong>Pe' piacere cuntrullate si site ancora dinto e tentate n'ata vota</strong>.\n\nSi chesto nun funziunasse ancora, tentate 'e ve n'[[Special:UserLogout|ascì]] e trasì n'ata vota dinto, cuntrullate si 'o navigatore vuosto premmettesse 'e cookies 'e stu sito.",
        "import-invalid-interwiki": "Nun se può mpurtà d' 'a wiki specificata.",
        "import-error-edit": "'A paggena \"$1\" nun è stata mpurtata pecché nun avite 'o permesso p' 'a putè cagnà.",
        "import-error-create": "'A paggena \"$1\" nun è stata mpurtata pecché nun avite 'o permesso p' 'a putè crià.",
        "tags-delete-not-allowed": "'E tag ca se so' definite 'a na stensiona nun se ponno scancellà si nun è c' 'a stensiona 'o premmettesse.",
        "tags-delete-not-found": "'O tag $1 nun esiste.",
        "tags-delete-too-many-uses": "'O tag \"$1\" è apprecato a cchiù 'e $2 {{PLURAL:$2|verziona|verziune}}, cosa ca vulesse dicere ca nun se ò scancellà.",
-       "tags-delete-warnings-after-delete": "'O tag \"$1\" s'è scancellato buono, ma {{PLURAL:$2|s'è ncuntrato ll'avviso|se songhe ncuntrate ll'avise}} ccà:",
+       "tags-delete-warnings-after-delete": "'O tag \"$1\" s'è scancellato, ma {{PLURAL:$2|s'è ncuntrato ll'avviso|se songhe ncuntrate ll'avise}} ccà:",
        "tags-activate-title": "Appiccia 'o tag",
        "tags-activate-question": "Vuje state p'appiccià 'o tag \"$1\".",
        "tags-activate-reason": "Mutivo:",
        "tags-edit-revision-legend": "Azzecca o leva tags 'a {{PLURAL:$1|sta verziona|'e tutte sti $1 verziune}}",
        "tags-edit-logentry-legend": "Azzecca o leva tags 'a {{PLURAL:$1|sta verziona|'e tutte sti $1 verziune}}",
        "tags-edit-existing-tags": "Tag 'e mo:",
-       "tags-edit-existing-tags-none": "''Nisciuno''",
+       "tags-edit-existing-tags-none": "<em>Nisciuno</em>",
        "tags-edit-new-tags": "Nnove tag:",
        "tags-edit-add": "Azzecca sti tag:",
        "tags-edit-remove": "Lèva sti tag:",
        "expand_templates_generate_xml": "Fà vedè l'arvero 'e l'analisi XML",
        "expand_templates_generate_rawhtml": "Fà verè 'o codece HTML 'n cruro",
        "expand_templates_preview": "Anteprimma",
-       "expand_templates_preview_fail_html": "<em>Siccomme {{SITENAME}} téne 'o HTML 'ncruro appicciato e se songhe spierze 'e date d' 'a sessiona, 'a previsualizzaziona s'è annascunnuta comm'a na prutezione annanz'e uerre 'e JavaScript.</em>\n\n<strong>Si chist'è nu tentativo giustificato 'e previsualizzaziona, pe' piacere facite n'ata vota.</strong>\nSi nun funziona ancora, facite d'[[Special:UserLogout|ascì]] e trasì n'ata vota.",
+       "expand_templates_preview_fail_html": "<em>Siccomme {{SITENAME}} téne 'o HTML 'ncruro appicciato e se songhe spierze 'e date d' 'a sessiona, 'a previsualizzaziona s'è annascunnuta comm'a na prutezione annanz'e uerre 'e JavaScript.</em>\n\n<strong>Si chist'è nu tentativo giustificato 'e previsualizzaziona, pe' piacere facite n'ata vota.</strong>\nSi nun funziona ancora, facite d'[[Special:UserLogout|ascì]] e trasì n'ata vota.\n\nSi chesto nun funziunasse ancora, tentate 'e ve n'[[Special:UserLogout|ascì]] e trasì n'ata vota dinto, cuntrullate si 'o navigatore vuosto premmettesse 'e cookies 'e stu sito.",
        "expand_templates_preview_fail_html_anon": "<em>Siccomme {{SITENAME}} téne 'o HTML 'ncruro e vuje nun site trasute 'o sito, 'a previsualizzaziona s'è annascunnuta comm'a na prutezione annanz'e uerre 'e JavaScript.</em>\n\n<strong>Si chist'è nu tentativo giustificato 'e previsualizzaziona, pe' piacere facite d'[[Special:UserLogout|ascì]] e trasì n'ata vota.</strong>",
        "expand_templates_input_missing": "Avita dà minimo nu poco 'e testo scritto.",
        "pagelanguage": "Cagna 'o nomme d' 'a paggena",
        "default-skin-not-found": "Oops! 'A skin predefinta ' 'o wiki vuosto, definita 'n <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, nun se tròva.\n\n'A installazione pare ca tenesse {{PLURAL:$4|'a skin|'e skin}} ccà abbascio. Vedite [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] pe' n'avè cchiù nfurmaziune ncopp' 'a manera {{PLURAL:$4|'e ll'abbià}} o scegliere chilla predefinita.\n\n$2\n\n; Si avite installato MediaWiki mò mò:\n: Probabbilmente l'avite installato 'a git, o direttamente 'a 'o codece sorgente ausanno cocch'atu metodo. Chesto era permesso. Verite 'e installà cocche skin 'a [https://www.mediawiki.org/wiki/Category:All_skins directory ncoppa mediawiki.org], tramite:\n:* Scarrecanno 'o [https://www.mediawiki.org/wiki/Download programma 'e installazione tarball], ca venesse fornito ch' 'e diverze skin ed estenziune. Putite fare copia-azzecca d' 'a directory <code dir=\"ltr\">skins/</code>.\n:* Scarrecanne 'e tarballs individuale 'e skin 'a [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Ausanno Git pe' scarrecà skin].\n: Facenno accussì nun se mmescasse 'o repository git vuosto si site sviluppatore MediaWiki.\n\n; Si avite MediaWiki agghiurnato MediaWiki mò mò:\n: MediaWiki 1.24 e verziune appriesso nun abbìa automatecamente 'e skin installate (vedite [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automateco skin]). Putite copià {{PLURAL:$5|'a linea|'e linee}} ccà abbascio dint' 'o <code>LocalSettings.php</code> pe' putè appiccià {{PLURAL:$5|'o|tutt' 'e}} {{PLURAL:$5|skin}} installate mò mò:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si avite cagnato mò mò <code>LocalSettings.php</code>:\n: Cuntrullate 'e nomme d' 'e skin n'ata vota pe' ve sparagnà cocch'errore 'e battitura.",
        "default-skin-not-found-no-skins": "oops! 'O skin predefinito p' 'a wiki vuosta, definito int'a <code>$wgDefaultSkin</code> comm'a <code>$1</code>, nun è a disposizione.\n\nVuje nun tenite nisciuno skin installato.\n\n; Si avite installato o agghiurnato MediaWiki mo' mo':\n: È possibbele ca l'avite installato 'a git, o direttamente d' 'o codece sorgente ausanno n'atu metodo. Chesto s'aspettava. Mediawiki 1.24 o cchiù nuova nun include nisciuno skin dint' 'o repositorio prencepale. Tentate 'e installà cocche skin 'a [https://www.mediawiki.org/wiki/Category:All_skins sta cartella 'e mediawiki.org], facenno:\n:* Scarreca 'e [https://www.mediawiki.org/wiki/Download tarball installer], ca venesse cu nu cuofeno 'e skin e estensiune. Vuje putite cupià e azzeccà 'a cartella <code>skins/</code> 'a chiste.\n:* Scarrecanno tarball 'e skin individuale 'a [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Ausanno Git pe' puté scarrecà skin].\n: A ffà chesto nun avesse nteferì c' 'o repositorio d' 'o git vuosto, si vuje site sviluppatore MediaWiki. Vedite [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: Mpustaziona skin] pe' n'avé nfurmaziune ncopp'a comme s'avesser'appiccià skin e scegliere 'o valore predefinito.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (funzione appicciata)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''funzione stutata''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>funzione stutata</strong>)",
        "mediastatistics": "Statistiche d' 'e media",
        "mediastatistics-summary": "Statistiche ncopp' 'e tipe d' 'e file carrecate. Ce truvate azzeccata sulamente 'a verziona cchiù recente d' 'o file. Verziune viecchie o scancellate se so' luvate.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte}} ($2; $3%)",
index 46f849e..4bdecee 100644 (file)
        "myprivateinfoprotected": "Du har ikke tillatelse til å redigere den private informasjonen din.",
        "mypreferencesprotected": "Du har ikke tillatelse til å redigere innstillingene dine.",
        "ns-specialprotected": "Spesialsider kan ikke redigeres.",
-       "titleprotected": "Denne tittelen har blitt låst for oppretting av [[User:$1|$1]].\nDen angitte grunnen er «''$2''».",
+       "titleprotected": "Denne tittelen har blitt låst for oppretting av [[User:$1|$1]].\nDen angitte grunnen er <em>$2</em>.",
        "filereadonlyerror": "Kan ikke endre filen «$1» fordi filsamlingen «$2» er skrivebeskyttet.\n\nSystemadministrator ga følgende begrunnelse: «$3».",
        "invalidtitle-knownnamespace": "Ugyldig tittel med navnerommet «$2» og teksten «$3»",
        "invalidtitle-unknownnamespace": "Ugyldig tittel med ukjent navneromsnummer $1 og teksten «$2»",
        "undo-summary-username-hidden": "Fjern revisjon $1 av en skjult bruker",
        "cantcreateaccounttitle": "Kan ikke opprette konto",
        "cantcreateaccount-text": "Kontooppretting fra denne IP-adressen ('''$1''') har blitt blokkert av [[User:$3|$3]].\n\nGrunnen som ble oppgitt av $3 er ''$2''",
-       "cantcreateaccount-range-text": "Opprettelsen av en brukerkonto fra IP-adresser i intervallet '''$1''', som inneholder din IP-adresse ('''$4'''), er blitt blokkert av [[User:$3|$3]].\n\nÅrsaken angitt av $3 er ''$2''",
+       "cantcreateaccount-range-text": "Opprettelsen av en brukerkonto fra IP-adresser i intervallet <strong>$1</strong>, som inneholder din IP-adresse (<strong>$4</strong>), er blitt blokkert av [[User:$3|$3]].\n\nÅrsaken angitt av $3 er <em>$2</em>",
        "viewpagelogs": "Vis logger for denne siden",
        "nohistory": "Denne siden har ingen historikk.",
        "currentrev": "Nåværende versjon",
        "prefs-help-prefershttps": "Denne preferansen vil virke etter neste innlogging.",
        "prefswarning-warning": "Du har gjort endringer i dine innstillinger som ikke er lagret ennå.\nDersom du forlater denne siden utenk å klikke på \"$1\" blir ikke innstillingene dine oppdatert.",
        "prefs-tabs-navigation-hint": "Tips: Du kan bruke venstre- og høyrepiltastene for å navigere mellom fanene i fanelisten",
-       "userrights": "Bruker&shy;rettighets&shy;kontroll",
+       "userrights": "Rettighets&shy;kontroll",
        "userrights-lookup-user": "Ordne brukergrupper",
        "userrights-user-editname": "Fyll inn et brukernavn:",
        "editusergroup": "Endre {{GENDER:$1|brukergrupper}}",
        "recentchanges-label-bot": "Denne redigeringen ble gjort av en bot",
        "recentchanges-label-unpatrolled": "Denne redigeringen har ikke blitt patruljert ennå",
        "recentchanges-label-plusminus": "Sidestørrelsen ble endret med dette antallet byte",
-       "recentchanges-legend-heading": "'''Tegnforklaring:'''",
+       "recentchanges-legend-heading": "<strong>Tegnforklaring:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (se også [[Special:NewPages|liste over nye sider]])",
        "recentchanges-legend-plusminus": "«(±123)»",
        "recentchanges-submit": "Vis",
        "rollbackfailed": "Kunne ikke tilbakestille",
        "cantrollback": "Kan ikke fjerne redigering; den siste brukeren er den eneste forfatteren.",
        "alreadyrolled": "Kan ikke fjerne den siste redigeringen på [[$1]] av [[User:$2|$2]] ([[User talk:$2|diskusjon]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); en annen har allerede redigert siden eller fjernet redigeringen.\n\nDen siste redigeringen ble foretatt av [[User:$3|$3]] ([[User talk:$3|diskusjon]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Redigeringskommentaren var: «''$1''»",
+       "editcomment": "Redigeringskommentaren var: <em>$1</em>",
        "revertpage": "Tilbakestilte endringer av [[Special:Contributions/$2|$2]] ([[User talk:$2|brukerdiskusjon]]) til siste versjon av [[User:$1|$1]]",
        "revertpage-nouser": "Tilbakestilt endringer av skjult bruker til siste versjon av\n{{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Tilbakestilte endringer av $1; endret til siste versjon av $2.",
        "default-skin-not-found": "Ops! Standarddrakten for wikien din, definert i <code dir=\"ltr\">$wgDefaultSkin</code> som <code>$1</code>, er ikke tilgjengelig.\n\nInstallasjonen din ser ut til å inneholde følgende {{PLURAL:$4|drakt|drakter}}. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for informasjon om hvordan du kan slå {{PLURAL:$4|denne på|disse på og velge en standarddrakt}}.\n\n$2\n\n; Om du nettopp har installert MediaWiki:\n: Du har trolig installert fra git, eller direkte fra kildekoden med en annen metode. Dette er forventet. Prøv å installere noen drakter fra [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org sin draktbase] ved å\n:* laste ned [https://www.mediawiki.org/wiki/Download tarball-installereren], som kommer med flere drakter og utvidelser. Du kan kopiere og lime inn <code>skins/</code>-mappen fra denne.\n:* laste ned individuelle drakter fra [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* klone en av <code>mediawiki/skins/*</code>-lagrene via git inn i <code>skins/</code> -mappen av din MediaWiki-installasjon.\n: Å gjøre dette skal ikke forstyrre git-mappen din om du er en MediaWiki-utvikler.\n\n; Om du nettopp har oppgradert MediaWiki:\n: MediaWiki 1.24 og nyere slår ikke lenger på automatisk installerte drakter (se [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Du kan lime inn følgende {{PLURAL:$5|linje|linjer}} i <code>LocalSettings.php</code> for å slå på {{PLURAL:$5|den|alle}} nåværende installerte {{PLURAL:$5|drakten|drakter}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Om du nettopp har endret <code>LocalSettings.php</code>:\n: Dobbelsjekk draktnavnene for skrivefeil.",
        "default-skin-not-found-no-skins": "Ops! Standarddrakten for wikien din, definert i <code>$wgDefaultSkin</code> som <code>$1</code>, er ikke tilgjengelig.\n\nDu har ingen installerte drakter.\n\n;Om du nettopp har installert eller oppgradert MediaWiki:\n: Du installerte trolig fra git, eller direkte fra kildekoden med en annen metode. Dette er forventet. MediaWiki 1.24 og nyere inkluderer ingen drakter i hovedarkivet. Prøv å installere noen drakter fra [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.orgs draktmappe], ved å:\n:* laste ned [https://www.mediawiki.org/wiki/Download tarball-installereren], som kommer med mange drakter og tillegg. Du kan kopiere og lime inn <code>skins/</code>-mappen fra denne.\n:* laste ned individuelle drakt-tarballer fra [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* klone en av <code>mediawiki/skins/*</code>-arkivene via git til <code dir=\"ltr\">skins/</code>-mappa i din MediaWiki-installasjon.\n: Å gjøre dette vil ikke forstyrre ditt git-arkiv om du er en MediaWiki-utvikler. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] for informasjon om hvordan du slår på drakter og velger en standarddrakt.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (slått på)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''slått av''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>slått av</strong>)",
        "mediastatistics": "Mediestatistikk",
        "mediastatistics-summary": "Statistikk over opplastede filtyper. Dette inkluderer bare den nyeste versjonen av hver fil. Eldre eller slettede versjoner av filene er eksludert.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte}} ($2; $3 %)",
index 0292bf1..e122c0e 100644 (file)
        "toc": "Inhold",
        "showtoc": "Bekieken",
        "hidetoc": "Verbarg",
-       "collapsible-collapse": "Inklappen",
+       "collapsible-collapse": "Samenvouwen",
        "collapsible-expand": "Uutklappen",
        "confirmable-confirm": "{{GENDER:$1|Bi'j}} daor wisse van?",
        "confirmable-yes": "Ja",
        "myprivateinfoprotected": "Je hebben gien rechten um joew priveegegevens an te passen.",
        "mypreferencesprotected": "Je hebben gien rechten um joew veurkeuren an te passen.",
        "ns-specialprotected": "Spesiale ziejen kunnen niet bewarkt wörden.",
-       "titleprotected": "t Anmaken van disse zied is beveiligd deur [[User:$1|$1]].\nDe op-egeven reden is ''$2''.",
+       "titleprotected": "t Anmaken van disse zied is beveiligd deur [[User:$1|$1]].\nDe op-egeven reden is <em>$2</em>.",
        "filereadonlyerror": "Kon t bestaand \"$1\" niet anpassen umdat de bestaandsmap \"$2\" op dit moment op allinnig-lezen steet.\n\nDe beheerder gaf hierveur de volgende reden: \"$3\".",
        "invalidtitle-knownnamespace": "Ongeldige titel mit naamruumte \"$2\" en tekste \"$3\"",
        "invalidtitle-unknownnamespace": "Ongeldige titel mit onbekend naamruumtenummer $1 en tekste \"$2\"",
        "createaccountreason": "Reden:",
        "createacct-reason": "Reden",
        "createacct-reason-ph": "Waorumme je n aandere gebrukerskonto anmaken",
-       "createacct-captcha": "Veiligheidskontraole",
-       "createacct-imgcaptcha-ph": "Voer de tekste in die'j hierboven zien",
        "createacct-submit": "Gebrukerskonto anmaken",
        "createacct-another-submit": "n Aandere gebrukerskonto anmaken",
        "createacct-benefit-heading": "{{SITENAME}} wörden emaakt deur meensen zo as jie.",
        "passwordreset-emailtext-ip": "Der hef der ene, waorschienlik jie zelf vanaof t IP-adres $1, n anvraag edaon um joew wachtwoord veur {{SITENAME}} ($4) opniej in te stellen.\nDe volgende {{PLURAL:$3|gebruker is|gebrukers bin}} ekoppeld an dit netpostadres:\n\n$2\n\n{{PLURAL:$3|Dit tiejelike wachtwoord vervölt|Disse tiejelike wachtwoorden vervallen}} over {{PLURAL:$5|één dag|$5 dagen}}.\nMeld je eigen noen an en wiezig t wachtwoord. A'j dit verzeuk niet zelf edaon hebben, of a'j t oorspronkelike wachtwoord nog kennen en t niet wiezigen willen, negeer dit bericht dan en blief joew ouwe wachtwoord gebruken.",
        "passwordreset-emailtext-user": "De gebruker $1 van {{SITENAME}} hef n anvraag edaon um joew wachtwoord veur {{SITENAME}} ($4) opniej in te stellen. \nDe volgende {{PLURAL:$3|gebruker is|gebrukers bin}} ekoppeld an dit netpostadres:\n\n$2\n\n{{PLURAL:$3|Dit tiejelike wachtwoord vervölt|Disse tiejelike wachtwoorden vervallen}} over {{PLURAL:$5|één dag|$5 dagen}}.\nMeld je eigen noen an en wiezig t wachtwoord. A'j dit verzeuk niet zelf edaon hebben, of a'j t oorspronkelike wachtwoord nog kennen en t niet wiezigen willen, negeer dit bericht dan en blief joew ouwe wachtwoord gebruken.",
        "passwordreset-emailelement": "Gebrukersnaam: \n$1\n\nTiedelik wachtwoord: \n$2",
-       "passwordreset-emailsent": "Der is n bericht verstuurd um t wachtwoord opniej in te stellen.",
+       "passwordreset-emailsentemail": "Der is n bericht verstuurd um t wachtwoord opniej in te stellen.",
        "passwordreset-emailsent-capture": "Der is n bericht verstuurd um joew wachtwoord opniej in te stellen. Dit ku'j hieronder lezen.",
        "passwordreset-emailerror-capture": "Der is n bericht veur t opniej opstellen van joew wachwoord an-emaakt, dit ku'j hieronder lezen. t Versturen naor de {{GENDER:$2|gebruker}} is mislokt um de volgende reden: $1",
        "changeemail": "Wiezig netpostadres",
        "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Verschillen",
        "prefs-help-prefershttps": "Disse veurkeur wörden toe-epast a'j je eigen de volgende keer anmelden.",
-       "email-address-validity-valid": "Geldig netpostadres",
-       "email-address-validity-invalid": "Geef n geldig netpostadres op",
        "userrights": "Gebrukersrechtenbeheer",
        "userrights-lookup-user": "Beheer gebrukersgroepen",
        "userrights-user-editname": "Vul n gebrukersnaam in:",
        "right-blockemail": "n Gebruker t recht ontnemen um berichjes te versturen",
        "right-hideuser": "n Gebruker veur de aandere gebrukers verbargen",
        "right-ipblock-exempt": "IP-blokkeringen ummezeilen",
-       "right-proxyunbannable": "Blokkeringen veur proxy's gelden niet",
        "right-unblockself": "Eigen gebruker deblokkeren",
        "right-protect": "Beveiligingsnivo's wiezigen",
        "right-editprotected": "Ziejen bewarken die beveiligd bin as \"{{int:protect-level-sysop}}\"",
        "recentchanges-label-bot": "Disse bewarking is uutevoerd deur n bot",
        "recentchanges-label-unpatrolled": "Disse bewarking is nog niet nao-ekeken",
        "recentchanges-label-plusminus": "Disse ziedgrootte is mit dit antal bytes ewiezigd",
-       "recentchanges-legend-heading": "'''Legenda:'''",
+       "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (zie oek de [[Special:NewPages|lieste mit nieje ziejen]])",
        "rcnotefrom": "Dit bin de wiezigingen sinds <strong>$2</strong> (maximum van <strong>$1</strong> wiezigingen).",
        "rclistfrom": "Bekiek wiezigingen vanaof $3 $2",
        "watchthisupload": "Volg dit bestaand",
        "filewasdeleted": "n Bestaand mit disse naam is al eerder vortedaon. Kiek t $1 nao veurda'j t opniej opsturen.",
        "filename-bad-prefix": "De naam van t bestaand da'j opsturen, begint mit '''\"$1\"''', dit is n niet-beschrievende naam die meestentieds automaties deur n digitale kamera egeven wörden. Kies n dudelike naam veur t bestaand.",
-       "upload-success-subj": "t Bestaand is op-estuurd",
-       "upload-success-msg": "t Bestaand [$2] steet derop. Je kunnen t hier vienen: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Probleem bie t oplaojen van t bestaand",
-       "upload-failure-msg": "Der was n probleem bie t oplaojen van [$2]:\n\n$1",
-       "upload-warning-subj": "Waorschuwing veur t opsturen van bestaanden",
-       "upload-warning-msg": "Der was n probleem mit t oplaojen van t bestaand [$2].\nGao weerumme naor t [[Special:Upload/stash/$1|opstuurformulier]] um dit probleem te verhelpen.",
        "upload-proto-error": "Verkeerd protokol",
        "upload-proto-error-text": "Um op disse maniere bestaanden toe te voegen mutten webadressen beginnen mit <code>http://</code> of <code>ftp://</code>.",
        "upload-file-error": "Interne fout",
        "pager-older-n": "{{PLURAL:$1|1 ouwere|$1 ouwere}}",
        "suppress": "Toezichte",
        "querypage-disabled": "Disse spesiale zied is uutezet um prestasieredens.",
+       "apisandbox": "API-zaandkule",
        "booksources": "Boekinformasie",
        "booksources-search-legend": "Zeuk informasie over n boek",
        "booksources-search": "Zeuken",
        "rollbackfailed": "Wieziging herstellen is mislokt",
        "cantrollback": "De wiezigingen konnen niet hersteld wörden; der is mer 1 auteur.",
        "alreadyrolled": "Kan de leste wieziging van de zied [[:$1]] deur [[User:$2|$2]] ([[User talk:$2|Overleg]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); niet weerummedreien.\nn Aander hef disse zied al bewarkt of hersteld naor n eerdere versie.\n\nDe leste bewarking op disse zied is edaon deur [[User:$3|$3]] ([[User talk:$3|Overleg]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "De bewarkingssamenvatting was: ''$1''.",
+       "editcomment": "De bewarkingssamenvatting was: <em>$1</em>.",
        "revertpage": "Wiezigingen deur [[Special:Contributions/$2|$2]] hersteld tot de versie nao de leste wieziging deur [[User:$1|$1]]",
        "revertpage-nouser": "Wiezigingen deur n verbörgen gebruker weerummedreid naor de leste versie deur {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Wiezigingen van $1; weerummedreid naor de leste versie van $2.",
        "movenosubpage": "Onder disse zied hangen gien aandere ziejen.",
        "movereason": "Reden:",
        "revertmove": "weerummedreien",
-       "delete_and_move": "Vortdoon en herneumen",
        "delete_and_move_text": "==Mut vortedaon wörden==\n<div style=\"color: red\"> De zied \"[[:$1]]\" besteet al. Wi'j t vortdoon um te kunnen herneumen?</div>",
        "delete_and_move_confirm": "Ja, disse zied vortdoon",
        "delete_and_move_reason": "Vortedaon vanwegen de herneuming van \"[[$1]]\"",
index 8531d9e..f83ab14 100644 (file)
        "namespaceprotected": "Du hest keen Rechten, Sieden in’n Naamruum '''$1''' to ännern.",
        "customcssprotected": "Du hest keen Rechten, düsse CSS-Sied to bearbeiden, wieldat se de persöönlichen Instellen vun en annern Bruker to'n Inhaalt hett.",
        "ns-specialprotected": "Spezialsieden köönt nich ännert warrn.",
-       "titleprotected": "Disse Siet is gegen dat nee Opstellen vun [[User:$1|$1]] schuult worrn.\nAs Grund is angeven: ''$2''.",
+       "titleprotected": "Disse Siet is gegen dat nee Opstellen vun [[User:$1|$1]] schuult worrn.\nAs Grund is angeven: <em>$2</em>.",
        "virus-badscanner": "Slechte Konfiguratschoon: unbekannten Virenscanner: ''$1''",
        "virus-scanfailed": "Scan hett nich klappt (Code $1)",
        "virus-unknownscanner": "Unbekannten Virenscanner:",
        "prefs-displayrc": "Weddergaav-Instellungen",
        "prefs-displaywatchlist": "Weddergaav-Instellungen",
        "prefs-diffs": "Ünnerscheed",
-       "email-address-validity-valid": "E-Mail-Adress lett good",
        "userrights": "Brukerrechten inrichten",
        "userrights-lookup-user": "Brukergruppen verwalten",
        "userrights-user-editname": "Brukernaam ingeven:",
        "right-blockemail": "Brukers dat Schrieven vun E-Mails sperren",
        "right-hideuser": "Brukernaam sperrn un nich mehr apen wiesen",
        "right-ipblock-exempt": "IP-Sperrn, Autoblocks un Rangesperrn ümgahn",
-       "right-proxyunbannable": "Utnahm vun automaatsche Proxysperren",
        "right-protect": "Schuulstatus vun Sieden ännern",
        "right-editprotected": "Schuulte Sieden ännern (ahn Kaskadensperr)",
        "right-editinterface": "Systemnarichten ännern",
        "watchthisupload": "Op disse Datei oppassen",
        "filewasdeleted": "En Datei mit dissen Naam hett dat al mal geven un is denn wegsmeten worrn. Kiek doch toeerst in dat $1 na, ehrdat du de Datei afspiekerst.",
        "filename-bad-prefix": "De Naam vun de Datei fangt mit '''„$1“''' an. Dat is normalerwies en Naam, den de Datei automaatsch vun de Digitalkamera kriggt. De Naam beschrievt de Datei nich un seggt dor ok nix över ut. Söök di doch en Naam för de Datei ut, de ok wat över den Inholt seggt.",
-       "upload-success-subj": "Datei hoochladen hett Spood",
        "upload-proto-error": "Verkehrt Protokoll",
        "upload-proto-error-text": "De URL mutt mit <code>http://</code> oder <code>ftp://</code> anfangen.",
        "upload-file-error": "Internen Fehler",
        "pager-newer-n": "{{PLURAL:$1|nächste|nächste $1}}",
        "pager-older-n": "{{PLURAL:$1|vörige|vörige $1}}",
        "suppress": "Oversight",
+       "apisandbox-examples": "Bispeel",
+       "apisandbox-results": "Resultat",
        "booksources": "Bookhannel",
        "booksources-search-legend": "Na Böker bi Bookhökers söken",
        "booksources-search": "Söken",
        "rollbackfailed": "Trüchnahm hett kenen Spood",
        "cantrollback": "De Ännern kann nich trüchnahmen warrn; de letzte Autor is de eenzige.",
        "alreadyrolled": "Dat Trüchnehmen vun de Ännern an de Siet [[:$1]] vun [[User:$2|$2]] ([[User talk:$2|Diskuschoonssiet]]{{int:pipe-separator}}[[Special:Contributions/$2|Bidrääg]]) is nich mööglich, vun wegen dat dor en annere Ännern oder Trüchnahm wesen is.\n\nDe letzte Ännern is vun [[User:$3|$3]] ([[User talk:$3|Diskuschoon]]{{int:pipe-separator}}[[Special:Contributions/$3|Bidrääg]]).",
-       "editcomment": "De Ännerkommentar weer: „''$1''“.",
+       "editcomment": "De Ännerkommentar weer: <em>$1</em>.",
        "revertpage": "Ännern vun [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskuschoon]]) rut un de Version vun [[User:$1|$1]] wedderhaalt",
        "rollback-success": "Ännern vun $1 trüchsett op letzte Version vun $2.",
        "sessionfailure": "Dor weer en Problem mit diene Brukersitzung.\nDisse Akschoon is nu ut Sekerheitsgrünn afbraken, dat de Ännern nich verkehrt en annern Bruker toornt warrt.\nGah een Sied trüch un versöök dat noch wedder.",
        "movenosubpage": "Disse Sied hett keen Ünnersieden.",
        "movereason": "Grund:",
        "revertmove": "trüchschuven",
-       "delete_and_move": "Wegsmieten un Schuven",
        "delete_and_move_text": "== Siet gifft dat al, wegsmieten? ==\n\nDe Siet „[[:$1]]“ gifft dat al. Wullt du ehr wegsmieten, dat disse Siet schaven warrn kann?",
        "delete_and_move_confirm": "Jo, de Siet wegsmieten",
        "delete_and_move_reason": "wegsmeten, Platz to maken för Schuven",
index fc37e41..ac0d25c 100644 (file)
        "myprivateinfoprotected": "तपाईँसँग तपाईँको निजी जानकारीहरू सम्पादन गर्ने अनुमती छैन",
        "mypreferencesprotected": "तपाईँसँग तपाईँको अभिरुचीहरू सम्पादन गर्ने अनुमती छैन",
        "ns-specialprotected": "विशेष पृष्ठहरू सम्पादन गर्न सकिदैन।",
-       "titleprotected": "[[User:$1|$1]]द्वारा यो शीर्षक निर्माणहुनबाट जोगाइएको छ।\nकारण \"<em>$2</em>\" हो ।",
+       "titleprotected": "[[User:$1|$1]]द्वारा यो शीर्षक निर्माणहुनबाट जोगाइएको छ।\nकारण <em>$2</em> हो ।",
        "filereadonlyerror": "फाइल \"$1\" लाई परिवर्तन गर्न सकिँदैन किन भने फाइल भण्डार  \"$2\" केवल पढ्ने स्थिति (read-only mode)मा छ।\n\nयसलाई सुरक्षित गर्ने प्रवन्धकले  यो कारण दिएकाछन् : ''$3''।",
        "invalidtitle-knownnamespace": "नेमस्पेस \"$2\" तथा अक्षर \"$3\" सहितको अवैश शिर्षक",
        "invalidtitle-unknownnamespace": "अज्ञात नेमस्पेस अंक $1 तथा अक्षर \"$2\" भएको अवैध शिर्षक",
        "undo-summary-username-hidden": "अदृश्य प्रयोगकर्ताको संशोधन $1 लाई पहिला जस्तै बनाउने",
        "cantcreateaccounttitle": "खाता बनाउन सकिएन",
        "cantcreateaccount-text": "IP ठेगाना ('''$1''')बाट खाता खोल्न  [[User:$3|$3]]द्वारा बन्देज लगाइएको छ।\n\n $3ले दिनुभएको कारण  ''$2'' हो",
-       "cantcreateaccount-range-text": "'''$1''' को श्रेणीमा आउने आइपि ठेगानाबाट, जसमा तपाईंको आइपि ठेगाना ('''$4''') सामेल छ, नयाँ खाता सृजना [[User:$3|$3]]द्वारा अवरोधित गरिएको छ। \n\n$3 द्वारा दिइएको कारण: \"$2\"",
+       "cantcreateaccount-range-text": "<strong>$1</strong> को श्रेणीमा आउने आइपि ठेगानाबाट, जसमा तपाईंको आइपि ठेगाना (<strong>$4</strong>) सामेल छ, नयाँ खाता सृजना [[User:$3|$3]]द्वारा अवरोधित गरिएको छ। \n\n$3 द्वारा दिइएको कारण: \"$2\"",
        "viewpagelogs": "यस पृष्ठका लगहरू हेर्नुहोस्",
        "nohistory": "यस पृष्ठको लागी कुनै सम्पादन इतिहास छैन।",
        "currentrev": "हालको संस्करण",
        "recentchanges-label-bot": "यो सम्पादन बोटद्वारा गरिएको थियो",
        "recentchanges-label-unpatrolled": "यो सम्पादन अहिले सम्म गस्ती गरिएको छैन",
        "recentchanges-label-plusminus": "यति बाइटहरू संख्याले पृष्ठको आकार परिवर्तन भएको छ",
-       "recentchanges-legend-heading": "'''आदर्श वाक्य:'''",
+       "recentchanges-legend-heading": "<strong>आदर्श वाक्य:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नयाँ पृष्ठहरूको सूची]] यो पनि हेर्नुहोस्)",
        "recentchanges-legend-plusminus": "(''±१२३'')",
        "recentchanges-submit": "देखाउनुहोस्",
        "upload-dialog-button-done": "सकियो",
        "upload-dialog-button-save": "सङ्ग्रह गर्ने",
        "upload-dialog-button-upload": "अपलोड गर्ने",
-       "upload-form-label-select-file": "फाइल छान्नुहोस्",
        "upload-form-label-infoform-title": "विवरणहरू",
        "upload-form-label-infoform-name": "नाम",
        "upload-form-label-infoform-description": "वर्णन",
        "querypage-disabled": "यो विशेष पृष्ठलाई कार्यसम्पादनको कारणहरूले गर्दा निस्क्रिय गरिएको छ ।",
        "apihelp": "एपिआइ सहायता",
        "apihelp-no-such-module": "मोड्युल \"$1\" भेटिएन ।",
+       "apisandbox-submit": "अनुरोध गर्ने",
+       "apisandbox-reset": "हटाउने",
+       "apisandbox-examples": "उदाहरण",
+       "apisandbox-results": "परिणाम",
+       "apisandbox-request-url-label": "अनुरोध युआरयल:",
+       "apisandbox-request-time": "अनुरोधको समयावधी: $1",
        "booksources": "किताबका श्रोतहरु",
        "booksources-search-legend": "किताबका श्रोतहरु खोज्ने",
        "booksources-search": "खोज",
        "rollbackfailed": "रोलब्याक असफल",
        "cantrollback": "फर्काउन सकिंदैन;\nअन्तिम योगदान कर्ता मात्र यस पृष्ठका लेखक थिए।",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|वार्ता]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) द्वारा गरिएको [[:$1]] पछिल्लो सम्पादनलाई फेरी पुरानै स्थितिमा ल्याउन सकिंदैन;\nकसैले यस बीचमै वा यस पृष्ठलाई फेरी सम्पादित गरिसकेको छ वा पहिले नै यस पृष्ठलाई पुरानो स्थितिमा ल्याई सकिएको छ।\n\nयस पृष्ठको अन्तिम सम्पादन [[User:$3|$3]] ([[User talk:$3|वार्ता]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) ले गरेओ हो।",
-       "editcomment": "सम्पादन सारांश : \"''$1''\" ।",
+       "editcomment": "सम्पादन सारांश : <em>$1</em> ।",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|वार्तालाप]])द्वारा [[User:$1|$1]]द्वारा गरिएको पछिल्लो संशोधनतर्फ उल्टाइएका सम्पादनहरू",
        "revertpage-nouser": "(सदस्य नाम हटाइएको छ) को सम्पादनहरूलाई हटाएर {{GENDER:$1|[[User:$1|$1]]}} ले अन्तिम अवतरणमा पूर्ववत गर्यो।",
        "rollback-success": "$1द्वारा उल्टाइएका सम्पादनहरू;\nपछिल्लो संशोधनमा $2द्वारा परिवर्तन गरि पुनः फर्काइएको।",
        "version-hook-subscribedby": "ग्राह्यता गर्ने",
        "version-version": "($1)",
        "version-no-ext-name": "[नाम नभएको]",
-       "version-svn-revision": "(r$2)",
        "version-license": "मिडीयाविकि इजाजतपत्र",
        "version-ext-license": "इजाजतपत्र",
        "version-ext-colheader-name": "एक्सटेन्सन",
        "default-skin-not-found": "ओह! तपाईंको विकिको पूर्व निर्धारित खोल जस्तो कि <code dir=\"ltr\">$wgDefaultSkin</code> मा बताइएको<code>$1</code>, उपलब्ध छैन ।\n\nतपाईंको इन्स्टलेसन यी खोलहरूलाई सम्मिलित गर्दछ {{PLURAL:$4|खोल|खोलहरू}}। हेर्नुहोस् [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: खोललाई सम्मिलित गर्नु] ताकि तपाईंलाई जानकारी होस् कि कसरि {{PLURAL:$4|उसलाई|उसलाई सम्मिलित गर्न सकियोस् र निर्धारितलाई तय गर्ने}}।\n\n$2\n\n; यदि तपाईंले अहिले मीडियाविकि इन्स्टाल गर्नुभएको छ:\n: तपाईंले सम्भवत गिटबाट इन्स्टाल गर्नुभएको छ, वा सिधै स्रोत कोडबाट गर्नुभएको छ जसको लागि कुनै अर्कै तारिका प्रयोग गरिएको छ। यो आशा अनुरूप छ। कोशिश गर्नुहोस् केहि खोलहरू\n[https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's मीडियाविकिको खोल डाइरेक्ट्रीबाट डाउनलोड गर्ने], जसको लागि तपाईं:\n:* डाउनलोड गर्नुहोस् [https://www.mediawiki.org/wiki/Download टरबल इन्स्टलर], जुन कयौं खोलहरू र विस्तारमा उपलब्ध छन्। तपाईं खोलहरूको कोड <code>skins/</code> त्यसको डाइरेक्ट्रीबाट कपी-पेस्ट गर्न सक्नुहुन्छ। \n:* व्यक्तिगत खोलहरू टरबलबाट डाउनलोड गर्नुहोस् [https://www.mediawiki.org/wiki/Special:SkinDistributor मीडिया विकि] बाट।\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins गिटको प्रयोग गरेर डाउनलोड गर्न सक्नुहुन्छ]।\n: यदि तपाईं विकासकर्ता हो भने यसो गर्दा  तपाईंको गिट-रिपजिटरीमा केहि हुनुहुँदैन । \n; यदि तपाईंले अहिले मीडियाविकिलाई अपग्रेड गर्नुभएको छ:\n: मीडियाविकि १.२४ र यसको नवीन रूप स्वतः रूपले खोलहरूलाई सक्षम गर्दैनन् (हेर्नुहोस् [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual:खोलहरूको स्वतः खोज])। तपाईं निम्नलिखितलाई पेस्ट गर्न सक्नुहुन्छ: {{PLURAL:$5|लाइन|लाइनहरू}}  <code>LocalSettings.php</code> मा ताकि {{PLURAL:$5|उसले|सबै}} सक्षम होस् जस्तो कि तपाईंले इन्स्टाल गरेको {{PLURAL:$5|खोल|खोलहरू}}को मामिलामा:\n\n<pre dir=\"ltr\">$3</pre>\n\n; यदि तपाईंले अहिले परिवर्तन गर्नुभएको छ<code>LocalSettings.php</code>:\n: खोल नामहरूको अगाडी डबल-क्लिक गर्नुहोस् जसले तपाईंलाई विभिन्न प्रकारहरूको विकल्प दिन्छ।",
        "default-skin-not-found-no-skins": "ओह! तपाईंको विकिको पूर्व निर्धारित खोल जस्तो कि <code>$wgDefaultSkin</code> मा बताइएको <code>$1</code>, उपलब्ध छैन।\nतपाईंसँग कुनै इन्स्टल गरिएको खोल छैन।\n; यदि तपाईंले अहिले मीडियाविकि इन्स्टल गर्नुभएको छ वा यसलाई अपडेट गर्नुभएको छ:\nतपाईंले सम्भवत गिटबाट इन्स्टल गर्नुभएको छ, वा सिधै स्रोत कोडबाट गर्नुभएको छ जसको लागि कुनै अर्कै तारिका प्रयोग गरिएको छ। यो आशा अनुरूप छ। कोशिश गर्नुस केहि खोलहरू\n[https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's मीडियाविकिको खोल डाइरेक्ट्रीबाट डाउनलोड गर्ने], जसको लागि तपाईं:\n:* डाउनलोड गर्नुस [https://www.mediawiki.org/wiki/Download टरबल इन्स्टलर], जुन कयौं खोलहरू र विस्तारमा उपलब्ध छन्। तपाईं खोलहरूको कोड <code>skins/</code> त्यसको डाइरेक्ट्रीबाट कपी-पेस्ट गर्न सक्नुहुन्छ। \n:* व्यक्तिगत खोलहरू टरबलबाट डाउनलोड गर्नुस [https://www.mediawiki.org/wiki/Special:SkinDistributor मीडिया विकि] बाट।\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins गिटको प्रयोग गरेर डाउनलोड गर्न सक्नुहुन्छ]।\n:यदि तपाईं विकासकर्ता हो भने यसो गर्दा समय तपाईंको गिट-रिपजिटरीमा केहि हुनुहुँदैन।",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (सक्रिय)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''निष्क्रिय''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>निष्क्रिय</strong>)",
        "mediastatistics": "मिडिया तथ्याङ्कहरू",
        "mediastatistics-summary": "अपलोड गरिएको फाइल प्रकारहरूको तथ्याङ्कहरू। यसमा मात्रै नवीनतम फाइलको अवतरण समेटिएको छ। पुरानो वा हटाइएको फाइलहरूको अवतरणहरूलाई बेग्लै राखिएको छ।",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 बाइट|$1 बाइटहरू}} ($2; $3%)",
index 39f5ca9..ecc8830 100644 (file)
        "toc": "Inhoud",
        "showtoc": "weergeven",
        "hidetoc": "verbergen",
-       "collapsible-collapse": "Inklappen",
+       "collapsible-collapse": "Samenvouwen",
        "collapsible-expand": "Uitvouwen",
        "confirmable-confirm": "Weet {{GENDER:$1|u}} het zeker?",
        "confirmable-yes": "Ja",
        "myprivateinfoprotected": "U hebt geen rechten om uw privégegevens te bewerken.",
        "mypreferencesprotected": "U hebt geen rechten om uw voorkeuren aan te passen.",
        "ns-specialprotected": "Pagina's in de naamruimte \"{{ns:special}}\" kunnen niet bewerkt worden.",
-       "titleprotected": "Het aanmaken van deze pagina is beveiligd door [[User:$1|$1]].\nDe gegeven reden is \"<em>$2</em>\".",
+       "titleprotected": "Het aanmaken van deze pagina is beveiligd door [[User:$1|$1]].\nDe gegeven reden is <em>$2</em>.",
        "filereadonlyerror": "Het was niet mogelijk het bestand \"$1\" aan te passen omdat de bestandsrepository \"$2\" op dit moment alleen-lezen is.\n\nDe opgegeven reden is \"''$3''\".",
        "invalidtitle-knownnamespace": "Ongeldige titel met naamruimte \"$2\" en tekst \"$3\"",
        "invalidtitle-unknownnamespace": "Ongeldige titel met onbekend naamruimtenummer $1 en tekst \"$2\"",
        "nocookieslogin": "{{SITENAME}} gebruikt cookies voor het aanmelden van gebruikers.\nCookies zijn uitgeschakeld in uw browser.\nSchakel deze optie in en probeer het opnieuw.",
        "nocookiesfornew": "De gebruiker is niet gemaakt omdat de bron niet bevestigd kon worden.\nZorg ervoor dat u cookies hebt ingeschakeld, herlaad deze pagina en probeer het opnieuw.",
        "noname": "U hebt geen geldige gebruikersnaam opgegeven.",
-       "loginsuccesstitle": "Aanmelden geslaagd",
+       "loginsuccesstitle": "Aangemeld",
        "loginsuccess": "<strong>U bent nu aangemeld bij {{SITENAME}} als \"$1\".</strong>",
        "nosuchuser": "De gebruiker \"$1\" bestaat niet.\nGebruikersnamen zijn hoofdlettergevoelig.\nControleer de schrijfwijze of [[Special:UserLogin/signup|maak een nieuw gebruiker aan]].",
        "nosuchusershort": "De gebruiker \"$1\" bestaat niet.\nControleer de schrijfwijze.",
        "botpasswords-newpassword": "Het nieuwe wachtwoord om aan te melden met <strong>$1</strong> is nu <strong>$2</strong>. <em>Bewaar dit goed voor toekomstig gebruik.</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider is niet beschikbaar.",
        "botpasswords-restriction-failed": "Botwachtwoordbeperkingen maken het aanmelden onmogelijk.",
-       "botpasswords-invalid-name": "De gebruikersnaam mag niet het scheidingsteken van het botwachtwoord (\"$1\") bevatten.",
+       "botpasswords-invalid-name": "De gebruikersnaam bevat niet het scheidingsteken van het botwachtwoord (\"$1\").",
        "botpasswords-not-exist": "Gebruiker \"$1\" heeft geen botwachtwoord genaamd \"$2\"",
        "resetpass_forbidden": "Wachtwoorden kunnen niet gewijzigd worden",
        "resetpass-no-info": "U dient aangemeld zijn voordat u deze pagina kunt gebruiken.",
        "passwordreset-emailtext-ip": "Iemand, waarschijnlijk u, heeft vanaf het IP-adres $1 een aanvraag gedaan om uw wachtwoord voor {{SITENAME}} ($4) opnieuw in te stellen. De volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:\n\n$2\n\n{{PLURAL:$3|Dit tijdelijke wachtwoord vervalt|Deze tijdelijke wachtwoorden vervallen}} over {{PLURAL:$5|een dag|$5 dagen}}. Meld u aan en wijzig het wachtwoord nu. Als u dit verzoek niet zelf heeft gedaan, of als u het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf uw oude wachtwoord gebruiken.",
        "passwordreset-emailtext-user": "Gebruiker $1 op de site {{SITENAME}} heeft een aanvraag gedaan om uw wachtwoord voor {{SITENAME}} ($4) opnieuw in te stellen. De volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:\n\n$2\n\n{{PLURAL:$3|Dit tijdelijke wachtwoord vervalt|Deze tijdelijke wachtwoorden vervallen}} over {{PLURAL:$5|een dag|$5 dagen}}.\nMeld u aan en wijzig het wachtwoord nu. Als u dit verzoek niet zelf heeft gedaan, of als u het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf uw oude wachtwoord gebruiken.",
        "passwordreset-emailelement": "Gebruikersnaam: \n$1\n\nTijdelijk wachtwoord: \n$2",
-       "passwordreset-emailsentemail": "Als dit een e-mailadres is dat gekoppeld is aan uw account, dan wordt er een e-mail verzonden om uw wachtwoord opnieuw in te stellen.",
+       "passwordreset-emailsentemail": "Als dit e-mailadres aan uw account gekoppeld is, dan wordt er een e-mail verzonden om uw wachtwoord opnieuw in te stellen.",
        "passwordreset-emailsentusername": "Als er een e-mailadres geregistreerd is voor die gebruikersnaam, dan wordt er een e-mail verzonden om uw wachtwoord opnieuw in te stellen.",
        "passwordreset-emailsent-capture": "Er is een e-mail voor het opnieuw instellen van een wachtwoord verzonden. Deze wordt hieronder weergegeven.",
        "passwordreset-emailerror-capture": "Er is een e-mail voor het opnieuw instellen van een wachtwoord aangemaakt. Deze wordt hieronder weergegeven. Het verzenden naar de {{GENDER:$2|gebruiker}} is mislukt om de volgende reden: $1",
        "newarticle": "(Nieuw)",
        "newarticletext": "Deze pagina bestaat niet.\nTyp in het onderstaande veld om de pagina aan te maken (meer informatie staat op de [$1 hulppagina]).\nGebruik de knop <strong>Terug</strong> in uw browser als u hier per ongeluk terecht bent gekomen.",
        "anontalkpagetext": "----\n<em>Deze overlegpagina hoort bij een anonieme gebruiker die geen gebruikersnaam heeft of deze niet gebruikt.</em>\nDaarom wordt het IP-adres ter identificatie gebruikt.\nHet is mogelijk dat meerdere personen hetzelfde IP-adres gebruiken.\nMogelijk ontvangt u hier berichten die niet voor u bedoeld zijn.\nAls u dat wilt voorkomen, [[Special:UserLogin/signup|registreer u]] of [[Special:UserLogin|meld u aan]] om verwarring met andere anonieme gebruikers te voorkomen.",
-       "noarticletext": "Deze pagina bevat geen tekst.\nU kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina's, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken] of [{{fullurl:{{FULLPAGENAME}}|action=edit}} deze pagina bewerken]</span>.",
+       "noarticletext": "Deze pagina bevat geen tekst.\nU kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina's, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken] of [{{fullurl:{{FULLPAGENAME}}|action=edit}} deze pagina aanmaken]</span>.",
        "noarticletext-nopermission": "Deze pagina bevat geen tekst.\nU kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina's of\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken]</span>, maar u mag de pagina niet aanmaken.",
        "missing-revision": "De versie #$1 van de pagina \"{{FULLPAGENAME}}\" bestaat niet.\n\nDit wordt meestal veroorzaakt door het volgen van een verouderde koppeling naar een pagina die is verwijderd.\nMeer gegevens zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
        "userpage-userdoesnotexist": "U bewerkt een gebruikerspagina van een gebruiker die niet bestaat (gebruiker \"$1\").\nControleer of u deze pagina wel wilt aanmaken of bewerken.",
        "copyrightwarning2": "Al uw bijdragen aan {{SITENAME}} kunnen bewerkt, gewijzigd of verwijderd worden door andere gebruikers.\nAls u niet wilt dat uw teksten rigoureus aangepast worden door anderen, plaats ze hier dan niet.<br />\nU belooft ook dat u de oorspronkelijke auteur bent van dit materiaal of dat u het hebt gekopieerd uit een bron in het publieke domein of een soortgelijke vrije bron (zie $1 voor details).\n'''Gebruik geen materiaal dat beschermd wordt door auteursrecht, tenzij u daarvoor toestemming hebt!'''",
        "editpage-cannot-use-custom-model": "Het inhoudsmodel van deze pagina kan niet worden gewijzigd.",
        "longpageerror": "'''Fout: de tekst die u hebt toegevoegd is {{PLURAL:$1|één kilobyte|$1 kilobyte}} groot, wat groter is dan het maximum van {{PLURAL:$2|één kilobyte|$2 kilobyte}}.'''\nOpslaan is niet mogelijk.",
-       "readonlywarning": "<strong>Waarschuwing: u kunt deze bewerking nu niet opslaan omdat de database is geblokkeerd voor bewerkingen wegens onderhoudswerkzaamheden.</strong>\nHet is misschien verstandig om uw tekst tijdelijk in een tekstbestand op te slaan om dit te bewaren voor wanneer de blokkering van de database opgeheven is.\n\nDe systeembeheerder heeft de database geblokkeerd om de volgende reden: $1",
+       "readonlywarning": "<strong>Waarschuwing: u kunt deze bewerking nu niet opslaan omdat de database is geblokkeerd voor bewerkingen wegens onderhoudswerkzaamheden.</strong>\nHet is misschien verstandig om uw tekst tijdelijk in een tekstbestand op te slaan en te bewaren voor een later moment.\n\nDe systeembeheerder heeft de database geblokkeerd om de volgende reden: $1",
        "protectedpagewarning": "'''Waarschuwing: deze beveiligde pagina kan alleen door gebruikers met beheerdersrechten bewerkt worden.'''\nDe laatste logboekregel staat hieronder:",
        "semiprotectedpagewarning": "'''Let op:''' deze pagina is beveiligd en kan alleen door geregistreerde gebruikers bewerkt worden.\nDe laatste logboekregel staat hieronder:",
        "cascadeprotectedwarning": "<strong>Waarschuwing:</strong> deze pagina is beveiligd en kan alleen door beheerders bewerkt worden, omdat ze is opgenomen in de volgende {{PLURAL:$1|pagina|pagina's}} die beveiligd {{PLURAL:$1|is|zijn}} met de cascade-optie:",
        "revdelete-unsuppress": "Beperkingen op teruggeplaatste wijzigingen verwijderen",
        "revdelete-log": "Reden:",
        "revdelete-submit": "Toepassen op de geselecteerde {{PLURAL:$1|bewerking|bewerkingen}}",
-       "revdelete-success": "Zichtbaarheid van de wijziging is succesvol bijgewerkt.",
-       "revdelete-failure": "Zichtbaarheid van de wijziging kon niet bijgewerkt worden:\n$1",
+       "revdelete-success": "Deze zichtbaarheid van de wijziging is bijgewerkt.",
+       "revdelete-failure": "De zichtbaarheid van de wijziging kon niet bijgewerkt worden:\n$1",
        "logdelete-success": "De zichtbaarheid van de gebeurtenis is ingesteld.",
-       "logdelete-failure": "Zichtbaarheid van de logboekregel kon niet ingesteld worden:\n$1",
+       "logdelete-failure": "De zichtbaarheid van de logboekregel kon niet ingesteld worden:\n$1",
        "revdel-restore": "zichtbaarheid wijzigen",
        "pagehist": "Geschiedenis",
        "deletedhist": "verwijderde geschiedenis",
        "recentchanges-label-bot": "Deze bewerking is uitgevoerd door een bot",
        "recentchanges-label-unpatrolled": "Deze bewerking is nog niet gecontroleerd",
        "recentchanges-label-plusminus": "Deze paginagrootte is met dit aantal bytes gewijzigd",
-       "recentchanges-legend-heading": "'''Legenda:'''",
+       "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (zie ook de [[Special:NewPages|lijst met nieuwe pagina's]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Weergeven",
        "filewasdeleted": "Er is eerder een bestand met deze naam verwijderd.\nRaadpleeg het $1 voordat u het opnieuw toevoegt.",
        "filename-thumb-name": "Dit ziet eruit als de naam van een miniatuurbestand. Upload alstublieft geen miniaturen opnieuw in de wiki. Is dit niet het geval, corrigeer dan de bestandsnaam naar een meer betekenisvolle naam zonder het voorvoegsel voor miniaturen.",
        "filename-bad-prefix": "De naam van het bestand dat u aan het uploaden bent begint met '''\"$1\"''', wat een niet-beschrijvende naam is die meestal automatisch door een digitale camera wordt gegeven.\nKies een duidelijke naam voor uw bestand.",
-       "filename-prefix-blacklist": " #<!-- leave this line exactly as it is --> <pre>\n# De syntaxis is als volgt:\n#   * Alle tekst vanaf het karakter \"#\" tot het einde van de regel wordt gezien als opmerking\n#   * Iedere niet-lege regel is een voorvoegsel voor bestandsnamen die vaak automatisch worden toegekend door digitale camera's\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # sommige mobiele telefoons\nIMG # algemeen\nJD # Jenoptik\nMGP # Pentax\nPICT # overig\n #</pre> <!-- leave this line exactly as it is -->",
+       "filename-prefix-blacklist": " #<!-- leave this line exactly as it is --> <pre>\n# De syntaxis is als volgt:\n#   * Alle tekst vanaf het teken \"#\" tot het einde van de regel wordt gezien als opmerking\n#   * Iedere niet-lege regel is een voorvoegsel voor bestandsnamen die vaak automatisch worden toegekend door digitale camera's\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # sommige mobiele telefoons\nIMG # algemeen\nJD # Jenoptik\nMGP # Pentax\nPICT # overig\n #</pre> <!-- leave this line exactly as it is -->",
        "upload-proto-error": "Verkeerd protocol",
        "upload-proto-error-text": "Uploads via deze methode vereisen URL's die beginnen met <code>http://</code> of <code>ftp://</code>.",
        "upload-file-error": "Interne fout",
        "upload-too-many-redirects": "De URL bevatte te veel doorverwijzingen",
        "upload-http-error": "Er is een HTTP-fout opgetreden: $1",
        "upload-copy-upload-invalid-domain": "Uploaden per kopie is niet beschikbaar vanuit dit domein.",
-       "upload-foreign-cant-upload": "Deze wiki is niet geconfigureerd om bestanden te uploaden naar de buiten deze wiki geplaatste file repository.",
+       "upload-foreign-cant-upload": "Deze wiki is niet geconfigureerd om bestanden te uploaden naar de bestandsrepository op een andere site.",
        "upload-dialog-title": "Bestand uploaden",
        "upload-dialog-button-cancel": "Annuleren",
        "upload-dialog-button-done": "Afgerond",
        "apisandbox-fullscreen": "Paneel uitvouwen",
        "apisandbox-fullscreen-tooltip": "Het zandbakvenster uitvoeren om het browservenster te vullen.",
        "apisandbox-unfullscreen": "Pagina weergeven",
-       "apisandbox-unfullscreen-tooltip": "Het zandbakvenster inklappen zodat de navigatie voor MediaWiki weer beschikbaar is.",
+       "apisandbox-unfullscreen-tooltip": "Het zandbakvenster samenvouwen zodat de navigatie voor MediaWiki weer beschikbaar is.",
        "apisandbox-submit": "Verzoek uitvoeren",
        "apisandbox-reset": "Wissen",
        "apisandbox-retry": "Opnieuw proberen",
        "apisandbox-loading": "Bezig met laden van gegevens voor API-module \"$1\"...",
+       "apisandbox-load-error": "Er is een fout opgetreden tijdens het laden van gegevens voor API-module \"$1\": $2",
+       "apisandbox-no-parameters": "Deze API-module heeft geen parameters.",
+       "apisandbox-helpurls": "Hulp",
        "apisandbox-examples": "Voorbeelden",
+       "apisandbox-dynamic-parameters": "Extra parameters",
+       "apisandbox-dynamic-parameters-add-label": "Parameter toevoegen:",
+       "apisandbox-dynamic-parameters-add-placeholder": "Parameternaam",
+       "apisandbox-dynamic-error-exists": "Er bestaat al een parameter met de naam \"$1\".",
+       "apisandbox-deprecated-parameters": "Verouderde parameters",
+       "apisandbox-fetch-token": "Het token automatisch invullen",
+       "apisandbox-submit-invalid-fields-title": "Sommige velden zijn ongeldig",
+       "apisandbox-submit-invalid-fields-message": "Corrigeer de gemarkeerde velden en probeer het opnieuw.",
        "apisandbox-results": "Resultaten",
+       "apisandbox-sending-request": "API-verzoek verzenden...",
+       "apisandbox-loading-results": "API-resultaten ontvangen...",
+       "apisandbox-results-error": "Er is een fout opgetreden tijdens het laden van het antwoord op het API-verzoek: $1.",
        "apisandbox-request-url-label": "Verzoek-URL:",
-       "apisandbox-request-time": "Doorlooptijd verzoek: $1",
+       "apisandbox-request-time": "Doorlooptijd verzoek: {{PLURAL:$1|$1 ms}}",
+       "apisandbox-results-fixtoken": "Token corrigeren en opnieuw verzenden",
+       "apisandbox-results-fixtoken-fail": "Het ophalen van het token van type \"$1\" is mislukt.",
+       "apisandbox-alert-page": "Velden op deze pagina zijn niet geldig.",
+       "apisandbox-alert-field": "De waarde van dit veld is niet geldig.",
        "booksources": "Boekinformatie",
        "booksources-search-legend": "Bronnen en gegevens over een boek zoeken",
        "booksources-search": "Zoeken",
        "rollbackfailed": "Ongedaan maken van wijzigingen mislukt.",
        "cantrollback": "Ongedaan maken van wijzigingen onmogelijk: deze pagina heeft slechts 1 auteur.",
        "alreadyrolled": "Het is niet mogelijk om de bewerking van de pagina [[:$1]] door [[User:$2|$2]] ([[User talk:$2|overleg]]{{int:pipe-separator}}[[Special:Contributions/$2|bijdragen]]) ongedaan te maken.\nIemand anders heeft deze pagina al bewerkt of hersteld naar een eerdere versie.\n\nDe meest recente bewerking is gemaakt door [[User:$3|$3]] ([[User talk:$3|overleg]]{{int:pipe-separator}}[[Special:Contributions/$3|bijdragen]]).",
-       "editcomment": "De bewerkingssamenvatting was: \"''$1''\".",
+       "editcomment": "De bewerkingssamenvatting was: <em>$1</em>.",
        "revertpage": "Wijzigingen door [[Special:Contributions/$2|$2]] ([[User talk:$2|Overleg]]) hersteld tot de laatste versie door [[User:$1|$1]]",
        "revertpage-nouser": "Wijzigingen door een verborgen gebruiker teruggedraaid naar de laatste versie door {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "De wijzigingen door $1 zijn teruggedraaid.\nDe laatste versie van $2 is hersteld.",
        "changecontentmodel-title-label": "Paginanaam",
        "changecontentmodel-model-label": "Nieuw inhoudsmodel",
        "changecontentmodel-reason-label": "Reden:",
+       "changecontentmodel-submit": "Wijzigen",
        "changecontentmodel-success-title": "Het inhoudsmodel is gewijzigd",
        "changecontentmodel-success-text": "Het inhoudstype van [[:$1]] is gewijzigd.",
        "changecontentmodel-cannot-convert": "De inhoud van [[:$1]] kan niet worden omgezet in een type van $2.",
        "unblock": "Gebruiker deblokkeren",
        "blockip": "{{GENDER:$1|Gebruiker}} blokkeren",
        "blockip-legend": "Gebruiker blokkeren",
-       "blockiptext": "Gebruik het onderstaande formulier om schrijftoegang voor een gebruiker of IP-adres in te trekken.\nDoe dit alleen als bescherming tegen vandalisme en in overeenstemming met het [[{{MediaWiki:Policy-url}}|beleid]].\nGeef hieronder een reden op (bijvoorbeeld welke pagina's gevandaliseerd zijn).\nU kunt IP-ranges blokkeren door gebruik te maken van de [https://nl.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]-syntax, tot een maximum range van /$1 voor IPv4 en /$2 voor IPv6.",
+       "blockiptext": "Gebruik het onderstaande formulier om schrijftoegang voor een gebruiker of IP-adres in te trekken.\nDoe dit alleen als bescherming tegen vandalisme en in overeenstemming met het [[{{MediaWiki:Policy-url}}|beleid]].\nGeef hieronder een reden op (bijvoorbeeld welke pagina's gevandaliseerd zijn).\nU kunt IP-ranges blokkeren door gebruik te maken van de [https://nl.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]-syntaxis, tot een maximum range van /$1 voor IPv4 en /$2 voor IPv6.",
        "ipaddressorusername": "IP-adres of gebruikersnaam:",
        "ipbexpiry": "Vervalt (maak een keuze):",
        "ipbreason": "Reden:",
        "import-nonewrevisions": "Geen versies geïmporteerd (alle waren al aanwezig, of overgeslagen vanwege fouten).",
        "xml-error-string": "$1 op regel $2, kolom $3 (byte $4): $5",
        "import-upload": "XML-gegevens uploaden",
-       "import-token-mismatch": "De sessiegegevens zijn verloren gegaan. Probeer het opnieuw.",
+       "import-token-mismatch": "De sessiegegevens zijn verloren gegaan.\n\nMogelijk bent u afgemeld. <strong>Controleer of u nog steeds bent aangemeld en probeert het opnieuw.</strong>\nAls het dan nog steeds niet werkt, [[Special:UserLogout|meld u dan af]] en meld u daarna opnieuw aan en controleer of uw browser cookies van deze website accepteert.",
        "import-invalid-interwiki": "Het is niet mogelijk van de opgegeven wiki te importeren.",
        "import-error-edit": "De pagina \"$1\" is niet geïmporteerd omdat u niet de rechten hebt om die te bewerken.",
        "import-error-create": "De pagina \"$1\" is niet geïmporteerd omdat u niet de rechten hebt om die aan te maken.",
        "tags-edit-revision-legend": "Labels van {{PLURAL:$1|deze versie|alle $1 versies}} toevoegen of verwijderen",
        "tags-edit-logentry-legend": "Labels van {{PLURAL:$1|deze logboekregel|alle $1 logboekregels}} toevoegen of verwijderen",
        "tags-edit-existing-tags": "Bestaande labels:",
-       "tags-edit-existing-tags-none": "''Geen''",
+       "tags-edit-existing-tags-none": "<em>Geen</em>",
        "tags-edit-new-tags": "Nieuwe labels:",
        "tags-edit-add": "Deze labels toevoegen:",
        "tags-edit-remove": "Deze labels verwijderen:",
        "expand_templates_generate_xml": "XML-parserboom bekijken",
        "expand_templates_generate_rawhtml": "Ruwe HTML weergeven",
        "expand_templates_preview": "Voorvertoning",
-       "expand_templates_preview_fail_html": "<em>Omdat voor {{SITENAME}} ruwe HTML is ingeschakeld, en er sessiegegevens verloren zijn gegaan, is de voorvertoning verborgen als voorzorgmaatregel tegen JavaScriptaanvallen.</em>\n\n<strong>Als dit een legitieme poging is voor het weergeven van een voorvertoning, probeer het dan opnieuw.</strong>\nAls het dan nog steeds niet werkt, probeer dan [[Special:UserLogout|af te melden]] en opnieuw aan te melden.",
+       "expand_templates_preview_fail_html": "<em>Omdat voor {{SITENAME}} ruwe HTML is ingeschakeld, en er sessiegegevens verloren zijn gegaan, is de voorvertoning verborgen als voorzorgmaatregel tegen JavaScriptaanvallen.</em>\n\n<strong>Als dit een legitieme poging is voor het weergeven van een voorvertoning, probeer het dan opnieuw.</strong>\nAls het dan nog steeds niet werkt, probeer dan [[Special:UserLogout|af te melden]] en opnieuw aan te melden, en controleer of uw browser cookies van deze website accepteert.",
        "expand_templates_preview_fail_html_anon": "<em>Omdat in {{SITENAME}} ruwe HTML is ingeschakeld en u niet bent aangemeld, is de voorvertoning verborgen als voorzorgsmaatregel tegen de JavaScriptaanvallen.</em>\n\n<strong>Als dit een legitieme poging is voor het maken van een voorvertoning, [[Special:UserLogin|meld u dan aan]] en probeer het opnieuw.</strong>",
        "expand_templates_input_missing": "U moet wel iets invullen.",
        "pagelanguage": "Paginataal wijzigen",
index 36c098f..d751514 100644 (file)
        "myprivateinfoprotected": "Du har ikkje løyve til endra den private informasjonen din.",
        "mypreferencesprotected": "Du har ikkje løyve til å endra innstillingane dine.",
        "ns-specialprotected": "Sider i {{ns:special}}-namnerommet kan ikkje endrast.",
-       "titleprotected": "Denne sidetittelen er verna mot oppretting av [[User:$1|$1]].\nGrunnen som er gjeven er: ''$2''.",
+       "titleprotected": "Denne sidetittelen er verna mot oppretting av [[User:$1|$1]].\nGrunnen som er gjeven er: <em>$2</em>.",
        "filereadonlyerror": "Kan ikkje endra fila «$1» av di filsamlinga «$2» er skriveverna.\n\nAdministratoren som låste filsamlinga oppgav den fylgjande årsaka: «$3».",
        "invalidtitle-knownnamespace": "Ugyldig tittel med namnerommet «$2» og teksten «$3»",
        "invalidtitle-unknownnamespace": "Ugyldig tittel med ukjend namneromstal $1 og teksten «$2»",
        "preview": "Førehandsvising",
        "showpreview": "Førehandsvis",
        "showdiff": "Sjå skilnader",
-       "anoneditwarning": "'''Åtvaring:''' Du er ikkje innlogga.\nIP-adressa di vil verta lagra i den offentlege endringshistorikken til sida. Om du <strong>[$1 loggar inn]</strong> eller <strong>[$2 lager ein konto]</strong>, vil endringane dine knyttast til brukarnamnet ditt, saman med andre fordelar.",
+       "anoneditwarning": "'''Åtvaring:''' Du er ikkje innlogga.\nIP-adressa di vil verta lagra i den offentlege endringshistorikken til sida. Om du <strong>[$1 loggar inn]</strong> eller <strong>[$2 lagar ein konto]</strong>, vil endringane dine knytast til brukarnamnet ditt, saman med andre fordelar.",
        "anonpreviewwarning": "''Du er ikkje innlogga. Lagrar du vil IP-adressa di verta ført opp i endringshistorikken til denne sida.''",
        "missingsummary": "'''Påminning:''' Du har ikkje skrive noko endringssamandrag. Dersom du trykkjer «Lagre» ein gong til, vert endringa di lagra utan.",
        "selfredirect": "<strong>Åtvaring:</strong> Du omdirigerer sida til seg sjølv.\nDu kan ha oppgjeve feil mål for omdirigeringa, eller det kan vera at du endrar feil side.\nKlikkar du «{{int:savearticle}}» på nytt vil omdirigeringa opprettast kor som er.",
        "recentchanges-label-bot": "Endringa vart gjord av ein robot",
        "recentchanges-label-unpatrolled": "Endringa er ikkje patruljert enno",
        "recentchanges-label-plusminus": "Storleiken til sida vart endra med så mange byte",
-       "recentchanges-legend-heading": "'''Tyding:'''",
+       "recentchanges-legend-heading": "<strong>Tyding:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sjå dessutan [[Special:NewPages|lista over nye sider]])",
        "recentchanges-submit": "Vis",
        "rcnotefrom": "Nedanfor er endringane gjorde sidan <strong>$2</strong> viste (opp til <strong>$1</strong> stykke)",
        "rollbackfailed": "Kunne ikkje rulle attende",
        "cantrollback": "Kan ikkje rulle attende fordi den siste brukaren er den einaste forfattaren.",
        "alreadyrolled": "Kan ikkje rulla attende den siste endringa på [[:$1]] gjord av [[User:$2|$2]] ([[User talk:$2|diskusjon]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) av di nokon andre alt har endra eller attenderulla sida.\n\nDen siste endringa vart gjord av [[User:$3|$3]] ([[User talk:$3|brukardiskusjon]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Samandraget for endringa var: «''$1''».",
+       "editcomment": "Samandraget for endringa var: <em>$1</em>.",
        "revertpage": "Attenderulla endring gjord av [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusjon]]) til siste versjonen av [[User:$1|$1]]",
        "revertpage-nouser": "Tilbakestilte endringar av (brukarnamn fjerna) til den siste versjonen av [[User:$1|$1]]",
        "rollback-success": "Rulla attende endringane av $1, attende til siste versjonen av $2.",
index c7923ee..36a22e4 100644 (file)
        "deleteotherreason": "Mabaka a mangwe:",
        "deletereasonotherlist": "Mabaka a mangwe",
        "rollbacklink": "bošetša morago",
-       "editcomment": "Ahlaahlo ya phetogo e bile : \"''$1''\".",
+       "editcomment": "Ahlaahlo ya phetogo e bile : <em>$1</em>.",
        "protectlogpage": "''Log'' yago lota",
        "protectedarticle": "lotilwe \"[[$1]]\"",
        "modifiedarticleprotection": "fetotše  mokgwa wa go lota \"[[$1]]\"",
index 4af83d6..3a68073 100644 (file)
@@ -22,6 +22,7 @@
        "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-hidecategorization": "Amagar la categorizacion de las paginas",
        "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",
        "tog-numberheadings": "Numerotar automaticament los títols",
        "october-date": "$1 d'octobre",
        "november-date": "$1 de novembre",
        "december-date": "$1 de decembre",
+       "period-am": "AM",
+       "period-pm": "PM",
        "pagecategories": "{{PLURAL:$1|Categoria|Categorias}}",
        "category_header": "Articles dins la categoria « $1 »",
        "subcategories": "Soscategorias",
        "morenotlisted": "Aquesta lista es pas completa.",
        "mypage": "Pagina",
        "mytalk": "Discussion",
-       "anontalk": "Discussion amb aquesta adreça IP",
+       "anontalk": "Discussion",
        "navigation": "Navigacion",
        "and": "&#32;e",
        "qbfind": "Recercar",
        "nstab-template": "Modèl",
        "nstab-help": "Ajuda",
        "nstab-category": "Categoria",
+       "mainpage-nstab": "Acuèlh",
        "nosuchaction": "Accion desconeguda",
        "nosuchactiontext": "L'accion especificada dins l'Url es invalida.\nBenlèu avètz mal picat l’URL o seguit un ligam incorrècte.\nAquò tanben pòt indicar un problèma dins lo logicial utilizat per {{SITENAME}}.",
        "nosuchspecialpage": "Pagina especiala inexistanta",
        "myprivateinfoprotected": "Avètz pas los dreches per modificar vòstras informacions personalas.",
        "mypreferencesprotected": "Avètz pas los dreches per modificar vòstras preferéncias.",
        "ns-specialprotected": "Las paginas dins l’espaci de noms « {{ns:special}} » pòdon pas èsser modificadas",
-       "titleprotected": "Aqueste títol es estat protegit a la creacion per [[User:$1|$1]].\nLo motiu avançat es « ''$2'' ».",
+       "titleprotected": "Aqueste títol es estat protegit a la creacion per [[User:$1|$1]].\nLo motiu avançat es <em>$2</em>.",
        "filereadonlyerror": "Impossible de modificar lo fichièr « $1 » perque lo repertòri de fichièrs « $2 » es en lectura sola.\n\nL'administrator que l'a varrolhat a provesit aqueste motiu : « $3 ».",
        "invalidtitle-knownnamespace": "Títol invalid amb l'espaci de noms « $2 » e l'intitulat « $3 »",
        "invalidtitle-unknownnamespace": "Títol invalid amb lo numèro d'espaci de noms $1 e l'intitulat « $2 » desconeguts",
        "virus-scanfailed": "Fracàs de la recèrca (còde $1)",
        "virus-unknownscanner": "antivirús desconegut :",
        "logouttext": "'''Ara, sètz desconnectat.'''\n\nNotatz 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.",
+       "cannotlogoutnow-title": "Impossible de se desconnectar ara",
        "welcomeuser": "Benvenguda, $1&nbsp;!",
        "welcomecreation-msg": "Vòstre compte d'utilizaire es estat creat.\nDoblidetz pas de modificar [[Special:Preferences|vòstras preferéncias per {{SITENAME}}]].",
        "yourname": "Nom d'utilizaire :",
        "remembermypassword": "Me reconnectar automaticament a las visitas venentas (al maximum $1 {{PLURAL:$1|jorn|jorns}})",
        "userlogin-remembermypassword": "Gardar ma sesilha activa",
        "userlogin-signwithsecure": "Utilizar una connexion securizada",
+       "cannotloginnow-title": "Impossible de se connectar ara",
        "yourdomainname": "Vòstre domeni",
        "password-change-forbidden": "Podètz pas modificar los senhals sus aqueste wiki.",
        "externaldberror": "Siá una error s’es producha amb la banca de donadas d’autentificacion extèrna, siá sètz pas autorizat a metre a jorn vòstre compte extèrne.",
        "createacct-reason": "Motiu",
        "createacct-reason-ph": "Perqué creatz un autre compte",
        "createacct-submit": "Creatz vòstre compte",
-       "createacct-another-submit": "Crear un autre compte",
+       "createacct-another-submit": "Crear un compte",
        "createacct-benefit-heading": "{{SITENAME}} es escrich per de monde coma vos.",
        "createacct-benefit-body1": "{{PLURAL:$1|cambiament|cambiaments}}",
        "createacct-benefit-body2": "{{PLURAL:$1|pagina|paginas}}",
        "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.\nEsperatz $1 abans d’ensajar tornarmai.",
+       "botpasswords": "Senhals de robòts",
        "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",
        "passwordreset-emailtext-ip": "Qualqu'un (probablament vos, dempuèi l'adreça IP $1) a demandat una reïnicializacion de vòstre senhal per {{SITENAME}} ($4). {{PLURAL:$3|Lo compte d'utilizaire seguent es associat|Los comptes d'utilizaires seguents son associats}} a aquesta adreça de corrièr electronic :\n\n$2\n\n{{PLURAL:$3|Aqueste senhal temporari expirarà|Aquestes senhals temporaris expiraràn}} dins {{PLURAL:$5|un jorn|$5 jorns}}. Ara, vos cal vos connectar e causir un senhal novèl. Se aquesta demanda proven pas de vos, o que vos sètz remembrat de vòstre senhal inicial, e que volètz pas mai lo modificar, podètz ignorar aqueste messatge e contunhar d'utilizar vòstre ancian senhal.",
        "passwordreset-emailtext-user": "L'utilizaire $1 sus {{SITENAME}} a demandat una reïnicializacion de vòstre senhal per {{SITENAME}} ($4). {{PLURAL:$3|Lo compte d'utilizaire seguent es associat|Los comptes d'utilizaires seguents son associats}} a aquesta adreça de corrièr electronic :\n\n$2\n\n{{PLURAL:$3|Aqueste senhal temporari expirarà|Aquestes senhals temporaris expiraràn}} dins {{PLURAL:$5|un jorn|$5 jorns}}. Ara, vos cal vos connectar e causir un senhal novèl. Se aquesta demanda proven pas de vos, o que vos sètz remembrat de vòstre senhal inicial, e que lo volètz pas mai modificar, podètz ignorar aqueste messatge e contunhar d'utilizar vòstre ancian senhal.",
        "passwordreset-emailelement": "Utilizaire: \n$1\n\nSenhal temporari: \n$2",
-       "passwordreset-emailsent": "Un corrièr electronic de reïnicializacion de senhal es estat mandat.",
+       "passwordreset-emailsentemail": "Un corrièr electronic de reïnicializacion de senhal es estat mandat.",
        "passwordreset-emailsent-capture": "Un corrièr electronic de reïnicializacion senhal es estat mandat, qu'es afichat çaijós.",
        "passwordreset-emailerror-capture": "Un corrièr electronic de reïnicializacion de senhal es estat generat, qu'es afichat çaijós, mas lo mandadís a l'{{GENDER:$2|utilizaire}} a fracassat : $1",
-       "changeemail": "Cambiar l'adreça electronica:",
+       "changeemail": "Cambiar o suprimir l'adreça electronica",
        "changeemail-header": "Cambiar l'adreça electronica del compte",
        "changeemail-no-info": "Vos cal èsser connectat per aver accès a aquesta pagina.",
        "changeemail-oldemail": "Adreça electronica actuala:",
        "sig_tip": "Vòstra signatura amb la data",
        "hr_tip": "Linha orizontala (n'abusetz pas)",
        "summary": "Resumit :",
-       "subject": "Subjècte/títol :",
+       "subject": "Subjècte :",
        "minoredit": "Aquò es un cambiament menor",
        "watchthis": "Seguir aquesta pagina",
        "savearticle": "Salvar",
        "missingcommenttext": "Mercé de metre un comentari çaijós.",
        "missingcommentheader": "'''*Rampèl:''' Avètz pas escrich de títol per aqueste comentari. Se tornatz clicar sus \"{{*int:*savearticle}}\" serà enregistrat sens títol.",
        "summary-preview": "Previsualizacion del resumit :",
-       "subject-preview": "Previsualizacion del subjècte/títol :",
+       "subject-preview": "Previsualizacion del subjècte",
        "blockedtitle": "L'utilizaire es blocat",
        "blockedtext": "'''Vòstre compte d'utilizaire o vòstra adreça IP es estat blocat'''\n\nLo blocatge es estat efectuat per $1.\nLa rason invocada es la seguenta : ''$2''.\n\n* Començament del blocatge : $8\n* Expiracion del blocatge : $6\n* Compte blocat : $7.\n\nPodètz contactar $1 o un autre [[{{MediaWiki:Grouppage-sysop}}|administrator]] per ne discutir.\nPodètz pas utilizar la foncion « Mandar un corrièr electronic a aqueste utilizaire » que se una adreça de corrièr valida es especificada dins vòstras [[Special:Preferences|preferéncias]].\nVòstra adreça IP actuala es $3 e vòstre identificant de blocatge es #$5.\nIncluissètz aquesta adreça dins tota requèsta.",
        "autoblockedtext": "Vòstra adreça IP es estada blocada automaticament perque es estada utilizada per un autre utilizaire, ele-meteis blocat per $1.\nLa rason invocadaa es :\n\n:''$2''\n\n* Començament del blocatge : $8\n* Expiracion del blocatge : $6\n* Compte blocat : $7\n\nPodètz contactar $1 o un dels autres [[{{MediaWiki:Grouppage-sysop}}|administrators]] per discutir d'aqueste blocatge.\n\nNotatz que podètz pas utilizar la foncionalitat \"Mandar un messatge a aqueste utilizaire\" tant qu'auretz pas  una adreça e-mail enregistrada dins vòstras [[Special:Preferences|preferéncias]] e tant que seretz pas blocat per son utilizacion.\n\nVòstra adreça IP actuala es $3, e lo numèro de blocatge es $5.\nPrecisatz aquestas indicacions dins totas las requèstas que faretz.",
        "anontalkpagetext": "---- ''Sètz sus la pagina de discussion d'un utilizaire anonim qu'a pas encara creat un compte o que n'utiliza pas.\nPer aquesta rason, devèm utilizar son adreça IP per l'identificar. Una adreça d'aqueste tipe pòt èsser partejada entre mantun utilizaire. Se sètz un utilizaire anonim e se constatatz que de comentaris que vos concernisson pas vos son estats adreçats, podètz [[Special:UserLogin/signup|crear un compte]] o [[Special:UserLogin|vos connectar]] per evitar tota confusion venenta amb d’autres contributors anonims.''",
        "noarticletext": "Pel moment, i a pas cap de tèxte sus aquesta pagina ;\npodètz [[Special:Search/{{PAGENAME}}|aviar una recèrca sul títol d'aqueste títol de pagina]] dins las autras pagina,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} recercar dins las operacions ligadas]\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} crear aquesta pagina]</span>.",
        "noarticletext-nopermission": "Actualament i a pas cap de tèxte dins aquesta pagina.\nPodètz [[Special:Search/{{PAGENAME}}|far una recèrca sul títol de la pagina]] dins las autras paginas,\no <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} recercar dins los jornals associats]</span>.",
-       "missing-revision": "La revision n° $1 de la pagina intitulada « {{FULLPAGENAME}} » existís pas.\n\nAquò se produsís en general en seguent un ligam istoric obsolet cap a una pagina qu'es estada suprimida.\nPodètz trobar mai de detalhs dins lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de las supressions].",
+       "missing-revision": "La revision n° $1 de la pagina intitulada « {{FULLPAGENAME}} » existís pas.\n\nAquò se produsís en general en seguent un ligam istoric obsolèt cap a una pagina qu'es estada suprimida.\nPodètz trobar mai de detalhs dins lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de las supressions].",
        "userpage-userdoesnotexist": "Lo compte d'utilizaire « <nowiki>$1</nowiki> » es pas enregistrat. Indicatz se volètz crear o editar aquesta pagina.",
        "userpage-userdoesnotexist-view": "Lo compte d'utilizaire « $1 » es pas enregistrat.",
        "blocked-notice-logextract": "Aqueste utilizaire es actualament blocat.\nLa darrièra entrada del jornal dels blocatges es indicada çaijós a títol d’informacion :",
        "undo-summary-username-hidden": "Anullar la revision $1 per un utilizaire amagat",
        "cantcreateaccounttitle": "Podètz pas crear de compte.",
        "cantcreateaccount-text": "La creacion de compte dempuèi aquesta adreça IP ('''$1''') es estada blocada per [[User:$3|$3]].\n\nLa rason balhada per $3 èra ''$2''.",
-       "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]].\n\nLo motiu provesit per $3 es ''$2''",
+       "cantcreateaccount-range-text": "La creacion de compte dempuèi las adreças IP dins la plaja <strong>$1</strong>, que compren vòstra agreça IP (<strong>$4</strong>) son estadas blocadas per [[User:$3|$3]].\n\nLo motiu provesit per $3 es <em>$2</em>",
        "viewpagelogs": "Vejatz las operacions per aquesta pagina",
        "nohistory": "Existís pas d'istoric per aquesta pagina.",
        "currentrev": "Version actuala",
        "prefs-watchlist-token": "Geton per la lista de seguiment :",
        "prefs-misc": "Preferéncias divèrsas",
        "prefs-resetpass": "Modificar lo senhal",
-       "prefs-changeemail": "Cambiar l'adreça electronica:",
+       "prefs-changeemail": "Cambiar o suprimir l'adreça electronica",
        "prefs-setemail": "Entrar una adreça electronica",
        "prefs-email": "Opcions del corrièr electronic",
        "prefs-rendering": "Aparéncia",
        "prefs-diffs": "Diferéncias",
        "prefs-help-prefershttps": "Aquesta preferéncia serà efectiva al moment de vòstra connexion que ven.",
        "prefs-tabs-navigation-hint": "Astúcia : Podètz utilizar las flèchas d'esquèrra e de drecha per navigar entre los onglets.",
-       "email-address-validity-valid": "L'adreça electronica sembla bona",
-       "email-address-validity-invalid": "entrar una adreça electronica valida",
        "userrights": "Gestion dels dreches d'utilizaire",
        "userrights-lookup-user": "Gestion dels dreches d'utilizaire",
        "userrights-user-editname": "Entrar un nom d’utilizaire :",
-       "editusergroup": "Modificacion dels gropes d'utilizaires",
-       "editinguser": "Modificacion dels dreches de l'{{GENDER:$1|utilizaire|utilizaire}} '''[[User:$1|$1]]''' $2",
+       "editusergroup": "Modificacion dels gropes d’{{GENDER:$1|utilizaires}}",
+       "editinguser": "Modificacion dels dreches de l’{{GENDER:$1|utilizaire|utilizaira}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Modificar los gropes de l’utilizaire",
-       "saveusergroups": "Salvar los gropes d'utilizaires",
+       "saveusergroups": "Enregistrar los gropes de l’{{GENDER:$1|utilizaire|utilizaira}}",
        "userrights-groupsmember": "Membre de :",
        "userrights-groupsmember-auto": "Membre implicit de :",
        "userrights-groups-help": "Podètz modificar los gropes alsquals aparten aqueste utilizaire.\n* Una casa marcada significa que l'utilizaire se tròba dins aqueste grop.\n* Una casa pas marcada significa, al contrari, que s’i tròba pas.\n* Una * indica que podretz pas levar aqueste grop un còp que l'auretz apondut e vice-versa.",
        "group-bot": "Bòts",
        "group-sysop": "Administrators",
        "group-bureaucrat": "Burocratas",
-       "group-suppress": "Supervisors",
+       "group-suppress": "Limitadors",
        "group-all": "(totes)",
        "group-user-member": "Utilizaire",
        "group-autoconfirmed-member": "Utilizaire enregistrat",
        "group-bot-member": "Robòt",
        "group-sysop-member": "Administrator",
        "group-bureaucrat-member": "Burocrata",
-       "group-suppress-member": "{{GENDER:$1|supervisor|supervisora}}",
+       "group-suppress-member": "{{GENDER:$1|limitador|limitatritz}}",
        "grouppage-user": "{{ns:project}}:Utilizaires",
        "grouppage-autoconfirmed": "{{ns:project}}:Utilizaires enregistrats",
        "grouppage-bot": "{{ns:project}}:Bòts",
        "grouppage-sysop": "{{ns:project}}:Administrators",
        "grouppage-bureaucrat": "{{ns:project}}:Burocratas",
-       "grouppage-suppress": "{{ns:project}}:Supervisor",
+       "grouppage-suppress": "{{ns:project}}:Supressors",
        "right-read": "Legir las paginas",
        "right-edit": "Modificar las paginas",
        "right-createpage": "Crear de paginas (que son pas de paginas de discussion)",
        "right-createtalk": "Crear de paginas de discussion",
        "right-createaccount": "Crear de comptes d'utilizaire novèls",
        "right-minoredit": "Marcar de cambiaments coma menors",
-       "right-move": "Tornar nomenar de paginas",
+       "right-move": "Renomenar de paginas",
        "right-move-subpages": "Desplaçar de paginas amb lor sospaginas",
        "right-move-rootuserpages": "Tornar nomenar las paginas de l’utilizaire de banca.",
        "right-move-categorypages": "Renomenar de paginas de categoria",
        "right-blockemail": "Empachar un utilizaire de mandar de corrièrs electronics",
        "right-hideuser": "Blocar un utilizaire en amagant son nom al public",
        "right-ipblock-exempt": "Èsser pas afectat per las IP blocadas, los blocatges automatics e los blocatges de plajas d'IP",
-       "right-proxyunbannable": "Èsser pas afectat pels blocatges automatics de servidors mandataris",
        "right-unblockself": "Se desblocar se-meteis",
        "right-protect": "Modificar los nivèls de proteccion e modificar las paginas protegidas en cascada",
        "right-editprotected": "Modificar las paginas protegidas amb « {{int:protect-level-sysop}} »",
        "right-sendemail": "Mandar un corrièl als autres utilizaires",
        "right-passwordreset": "Veire los corrièrs electronics de reïnicializacion dels senhals",
        "right-applychangetags": "Aplicar [[Special:Tags|las balisas]] amb sas pròprias modificacions",
+       "grant-generic": "ensemble de dreches « $1 »",
+       "grant-blockusers": "Blocar e desblocar d'utilizaires",
+       "grant-patrol": "Marcar de paginas coma patrolhadas",
        "newuserlogpage": "Istoric de las creacions de comptes",
        "newuserlogpagetext": "Jornal de las creacions de comptes d'utilizaires.",
        "rightslog": "Istoric de las modificacions d'estatut",
        "action-createaccount": "crear aqueste compte d'utilizaire",
        "action-history": "afichar l’istoric d'aquesta pagina",
        "action-minoredit": "marcar aqueste cambiament coma menor",
-       "action-move": "tornar nomenar aquesta pagina",
+       "action-move": "renomenar aquesta pagina",
        "action-move-subpages": "tornar nomenar aquesta pagina e sas sospaginas",
        "action-move-rootuserpages": "tornar nomenar las paginas de l’utilizaire de banca.",
        "action-move-categorypages": "Renomenar de paginas de categoria",
-       "action-movefile": "tornar nomenar aqueste fichièr",
+       "action-movefile": "renomenar aqueste fichièr",
        "action-upload": "importar aqueste fichièr",
        "action-reupload": "espotir aqueste fichièr existent",
        "action-reupload-shared": "passar otra aqueste fichièr sus un depaus partejat",
        "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-heading": "<strong>Legenda :</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (veire tanben la [[Special:NewPages|lista de las paginas novèlas]]).",
        "rcnotefrom": "Çaijós {{PLURAL:$5|la modificacion efectuada|las modificacions efectuadas}} dempuèi lo <strong>$3, $4</strong> (afichadas fins a <strong>$1</strong>).",
        "rclistfrom": "Afichar las modificacions novèlas dempuèi lo $3 $2",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|utilizaire seguent|utilizaires seguents}}]",
        "rc_categories": "Limit de las categorias (separacion amb « | »)",
-       "rc_categories_any": "Totas",
+       "rc_categories_any": "Una de las seleccionadas",
        "rc-change-size-new": "$1 {{PLURAL:$1|octet|octets}} aprèp cambiament",
        "newsectionsummary": "/* $1 */ seccion novèla",
        "rc-enhanced-expand": "Vejatz los detalhs",
        "filewasdeleted": "Un fichièr amb aqueste nom ja es estat copiat, puèi suprimit. Vos caldriá verificar lo $1 abans de procedir a una còpia novèla.",
        "filename-bad-prefix": "Lo nom del fichièr qu'importatz comença per '''\"$1\"''' qu'es un nom generalament donat pels aparelhs de fòto numerica e que decritz pas lo fichièr. Causissetz un nom de fichièr descrivent vòstre fichièr.",
        "filename-prefix-blacklist": " #<!-- daissatz aquesta linha coma es --> <pre>\n# La sintaxi es la seguenta :\n#   * Tot çò que seguís lo caractèr \"#\" fins a la fin de la linha es un comentari\n#   * Tota linha non vioda es un prefix tipic de nom de fichièr assignat automaticament pels aparelhs numerics\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # some mobil phones\nIMG # generic\nJD # Jenoptik\nMGP # Pentax\nPICT # misc.\n #</pre> <!-- daissatz aquesta linha coma es -->",
-       "upload-success-subj": "Importacion capitada",
-       "upload-success-msg": "Vòstre impòrt dempuèi [$2] a capitat. Es disponible aicí : [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Problèma de mandadís",
-       "upload-failure-msg": "I a agut un problèma amb vòstre mandadís [$2]: $1",
-       "upload-warning-subj": "Avertiment al moment del telecargament",
-       "upload-warning-msg": "Un problèma s'es produch al moment de l'impòrt dempuèi [$2]. Podètz tornar al [[Special:Upload/stash/$1|formulari d'impòrt]] per lo resòlvre.",
        "upload-proto-error": "Protocòl incorrècte",
        "upload-proto-error-text": "L’impòrt requerís d'URLs començant per <code>http://</code> o <code>ftp://</code>.",
        "upload-file-error": "Error intèrna",
        "licenses-edit": "Modificar las opcions de licéncia",
        "license-nopreview": "(Previsualizacion impossibla)",
        "upload_source_url": "(lo fichièr qu'avètz causit dempuèi una URL valida e accessibla publicament)",
-       "upload_source_file": "(vòstre fichièr causit dempuèi vòstre ordenador)",
+       "upload_source_file": "(vòstre fichièr causit dempuèi vòstre ordinator)",
        "listfiles-delete": "suprimir",
        "listfiles-summary": "Aquesta pagina especiala permet de far la lista de totes los fichièrs importats.",
        "listfiles_search_for": "Recèrca del mèdia nomenat :",
        "newpages": "Paginas novèlas",
        "newpages-username": "Nom d'utilizaire :",
        "ancientpages": "Articles mai ancians",
-       "move": "Tornar nomenar",
-       "movethispage": "Tornar nomenar la pagina",
+       "move": "Renomenar",
+       "movethispage": "Renomenar la pagina",
        "unusedimagestext": "Los fichièrs seguents existisson, mas son pas incluses dins cap de pagina.\nNotatz que d’autres sites pòdon aver un ligam dirècte cap a un fichièr, e doncas qu’un fichièr pòt èsser listat aicí alara qu’es en realitat utilisat sus aqueles sites.",
        "unusedcategoriestext": "Las categorias seguentas existisson mas cap d'article o de categoria los utilizan pas.",
        "notargettitle": "Pas de cibla",
        "nopagetext": "La pagina cibla qu'avètz indicada existís pas.",
        "pager-newer-n": "{{PLURAL:$1|1 mai recenta|$1 mai recentas}}",
        "pager-older-n": "{{PLURAL:$1|1 mai anciana|$1 mai ancianas}}",
-       "suppress": "Supervisor",
+       "suppress": "Supressor",
        "querypage-disabled": "Aquesta pagina especiala es desactivada per de rasons de performàncias.",
        "apihelp": "Ajuda de l'API",
        "apihelp-no-such-module": "Lo modul « $1 » es introbable.",
+       "apisandbox": "Nauc de sabla API",
+       "apisandbox-api-disabled": "API es desactivat sus aqueste site.",
+       "apisandbox-submit": "Far la demanda",
+       "apisandbox-reset": "Escafar",
+       "apisandbox-examples": "Exemples",
+       "apisandbox-results": "Resultats",
+       "apisandbox-request-url-label": "Requèsta URL :",
+       "apisandbox-request-time": "Durada de la demanda : {{PLURAL:$1|$1 ms}}",
        "booksources": "Obratges de referéncia",
        "booksources-search-legend": "Recercar demest d'obratges de referéncia",
        "booksources-isbn": "ISBN :",
        "wlheader-showupdated": "Las paginas que son estadas modificadas dempuèi vòstra darrièra visita son afichadas en '''gras'''.",
        "wlnote": "Çaijós {{PLURAL:$1|figura la darrièra modificacion efectuada|figuran las <strong>$1</strong> darrièras modificacions efectuadas}} pendent {{PLURAL:$2|la darrièra ora|las <strong>$2</strong> darrièras oras}}, dempuèi $3, $4.",
        "wlshowlast": "Far veire las darrièras $1 oras, los darrièrs $2 jorns",
-       "watchlistall2": "tot",
        "watchlist-options": "Opcions de la lista de seguiment",
        "watching": "Seguit...",
        "unwatching": "Fin del seguit...",
        "rollbackfailed": "L'anullacion a pas capitat",
        "cantrollback": "Impossible d'anullar : l'autor es la sola persona a aver efectuat de modificacions sus aqueste article",
        "alreadyrolled": "Impossible d'anullar la darrièra modificacion de l'article « [[:$1]] » efectuada per [[User:$2|$2]] ([[User talk:$2|Discutir]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ;\nqualqu’un mai ja a modificat o revocat la pagina.\n\nLa darrièra modificacion es estada efectuada per [[User:$3|$3]] ([[User talk:$3|Discutir]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Lo resumit de la modificacion èra : « ''$1'' ».",
+       "editcomment": "Lo resumit de la modificacion èra : <em>$1</em>.",
        "revertpage": "Anullacion de las modificacions de [[Special:Contributions/$2|$2]] ([[User talk:$2|Discussion]]) cap a la darrièra version de [[User:$1|$1]]",
        "revertpage-nouser": "Revocacion de las modificacions per un utilizaire amagat a la darrièra version per {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Anullacion de las modificacions de $1 ; retorn a la version de $2.",
        "contributions": "Contribucions de l'{{GENDER:$1|utilizaire|utilizaira}}",
        "contributions-title": "Lista de las contribucions de l’utilizaire $1",
        "mycontris": "Contribucions",
+       "anoncontribs": "Contribucions",
        "contribsub2": "Per {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Lo compte d'utilizaire « $1 » es pas enregistrat.",
        "nocontribs": "Cap de modificacion correspondenta a aquestes critèris es pas estada trobada.",
        "lockfilenotwritable": "Lo fichièr de blocatge de la banca de donadas es pas inscriptible. Per blocar o desblocar la banca de donadas, vos cal poder escriure sul servidor web.",
        "databasenotlocked": "La banca de donadas es pas varrolhada.",
        "lockedbyandtime": "(per $1 lo $2 a $3)",
-       "move-page": "Tornar nomenar $1",
+       "move-page": "Renomenar $1",
        "move-page-legend": "Tornar nomenar una pagina",
        "movepagetext": "Utilizatz lo formulari çaijós per tornar nomenar una pagina, en desplaçant tot son istoric cap al nom novèl. Lo títol ancian vendrà una pagina de redireccion cap al títol novèl. Podètz metre a jorn automaticament las redireccions actualas que puntan cap al títol original. Se causissètz de lo far pas, asseguratz-vos de verificar tota [[Special:DoubleRedirects|redireccion dobla]] o [[Special:BrokenRedirects|redireccion copada]]. Avètz la responsabilitat de vos assegurar que los ligams contunhen de puntar cap a lor destinacion supausada.\n\nNotatz que la pagina serà '''pas''' renomada s'existís ja una pagina amb lo novèl títol, levat se aquesta darrièra a un istoric de modificacions verge e es una simpla redireccion. Aquò permet de renomenar una pagina cap a sa posicion d'origina se lo desplaçament s'avera erronèu.\n\n'''ATENCION !'''\nAquò pòt provocar un cambiament radical e imprevist per una pagina consultada frequentament ; asseguratz-vos de n'aver comprés las consequéncias abans de contunhar.",
        "movepagetalktext": "La pagina de discussion associada, se presenta, serà automaticament desplaçada amb ''' levat se :'''\n*Desplaçatz una pagina cap a un autre espaci,\n*Una pagina de discussion ja existís amb lo nom novèl, o\n*Avètz deseleccionat lo boton çaijós.\n\nDins aqueste cas, vos caldrà desplaçar o fusionar la pagina manualament se o volètz.",
        "cant-move-user-page": "Avètz pas la permission de renomenar las paginas principalas d'utilizaires.",
        "cant-move-to-user-page": "Avètz pas la permission de tornar nomenar una pagina cap a una pagina d'utilizaire (a l'excepcion d'una sospagina).",
        "cant-move-category-page": "Avètz pas la permission de renomenar las paginas de categorias.",
-       "newtitle": "Títol novèl",
+       "newtitle": "Títol novèl :",
        "move-watch": "Seguir aquesta pagina",
-       "movepagebtn": "Tornar nomenar l'article",
+       "movepagebtn": "Renomenar l'article",
        "pagemovedsub": "Cambiament de nom capitat",
        "movepage-moved": "'''« $1 » es estada renomenada en « $2 »'''",
        "movepage-moved-redirect": "Una redireccion es estada creada.",
        "movepage-moved-noredirect": "La creacion de la redireccion es estada suprimida.",
        "articleexists": "Existís ja un article que pòrta aqueste títol, o lo títol qu'avètz causit es pas valid.\nCausissètz-ne un autre.",
        "cantmove-titleprotected": "Avètz pas la possibilitat de desplaçar una pagina cap a aqueste emplaçament perque lo títol es estat protegit a la creacion.",
-       "movetalk": "Tornar nomenar tanben la pagina de discussion associada",
+       "movetalk": "Renomenar tanben la pagina de discussion associada",
        "move-subpages": "Tornar nomenar las sospaginas (fins a $1 paginas)",
        "move-talk-subpages": "Tornar nomenar las sospaginas de la pagina de discussion (fins a $1 paginas)",
        "movepage-page-exists": "La pagina $1 existís ja e pòt pas èsser espotida automaticament.",
        "allmessages-prefix": "Filtrar per prefix :",
        "allmessages-language": "Lenga :",
        "allmessages-filter-submit": "Aplicar",
-       "allmessages-filter-translate": "Tradusir",
+       "allmessages-filter-translate": "Traduire",
        "thumbnail-more": "Agrandir",
        "filemissing": "Fichièr absent",
        "thumbnail_error": "Error al moment de la creacion de la miniatura : $1",
        "javascripttest-pagetext-frameworks": "Causissètz una de las estructuras de tèst seguentas : $1",
        "javascripttest-pagetext-skins": "Causissètz un abilhatge amb lo qual cal aviar los tèsts :",
        "javascripttest-qunit-intro": "Veire [$1 la documentacion de tèst] sus mediawiki.org.",
-       "tooltip-pt-userpage": "Vòstra pagina d'utilizaire",
+       "tooltip-pt-userpage": "Vòstra pagina d'{{GENDER:|utilizaire|utilizaira}}",
        "tooltip-pt-anonuserpage": "La pagina d'utilizare de l’IP amb la quala contribuissètz",
-       "tooltip-pt-mytalk": "Vòstra pagina de discussion",
+       "tooltip-pt-mytalk": "{{GENDER:|Vòstra}} pagina de discussion",
        "tooltip-pt-anontalk": "La pagina de discussion per aquesta adreça IP",
-       "tooltip-pt-preferences": "Mas preferéncias",
+       "tooltip-pt-preferences": "{{GENDER:|Vòstras}} preferéncias",
        "tooltip-pt-watchlist": "La lista de las paginas que seguissètz",
-       "tooltip-pt-mycontris": "Lista de vòstras contribucions",
+       "tooltip-pt-mycontris": "Lista de {{GENDER:|vòstras}} contribucions",
        "tooltip-pt-login": "Sètz convidat(ada) a vos identificar, mas es pas obligatòri.",
        "tooltip-pt-logout": "Se desconnectar",
        "tooltip-pt-createaccount": "Vos es conselhat de crear un compte e de vos connectar ; pasmens, es pas obligatòri",
        "tooltip-t-recentchangeslinked": "Lista dels darrièrs cambiaments de las paginas ligadas a aquesta",
        "tooltip-feed-rss": "Flux RSS per aquesta pagina",
        "tooltip-feed-atom": "Flux Atom per aquesta pagina",
-       "tooltip-t-contributions": "Veire la lista de las contribucions d'aqueste utilizaire",
+       "tooltip-t-contributions": "Veire la lista de las contribucions d'{{GENDER:$1|aqueste utilizaire|aquesta utilizaira}}",
        "tooltip-t-emailuser": "Mandar un corrièr electronic a aqueste utilizaire",
        "tooltip-t-info": "Mai d’informacion sus aquesta pagina",
        "tooltip-t-upload": "Mandar un imatge o fichièr mèdia sul servidor",
        "tooltip-ca-nstab-main": "Veire l’article",
        "tooltip-ca-nstab-user": "Veire la pagina d'utilizaire",
        "tooltip-ca-nstab-media": "Veire la pagina del mèdia",
-       "tooltip-ca-nstab-special": "Aquò es una pagina especiala, la podètz pas modificar.",
+       "tooltip-ca-nstab-special": "Aquò es una pagina especiala, la podètz pas modificar.",
        "tooltip-ca-nstab-project": "Veire la pagina del projècte",
        "tooltip-ca-nstab-image": "Veire la pagina del fichièr",
        "tooltip-ca-nstab-mediawiki": "Vejatz lo messatge del sistèma",
        "lastmodifiedatby": "Aquesta pagina es estada modificada pel darrièr còp lo $1 a $2 per $3.",
        "othercontribs": "Basat sul trabalh de $1.",
        "others": "autres",
-       "siteusers": "{{PLURAL:$2|utilizaire|utilizaires}} $1 de {{SITENAME}}",
+       "siteusers": "{{PLURAL:$2|{{GENDER:$1|l’utilizaire|l’utilizaira}}|{{Gender:$1|los utilizaires|las utilizairas}}}} $1 de {{SITENAME}}",
        "anonusers": "{{PLURAL:$2|l'utilizaire anonim|los utilizaires anonims}} $1 de {{SITENAME}}",
        "creditspage": "Crèdits de la pagina",
        "nocredits": "I a pas d’entresenhas d’atribucion disponiblas per aquesta pagina.",
        "pageinfo-magic-words": "{{PLURAL:$1|Mot magic|Mots magics}} ($1)",
        "pageinfo-hidden-categories": "{{PLURAL:$1|Categoria amagada|Categorias amagadas}} ($1)",
        "pageinfo-templates": "{{PLURAL:$1|Modèl inclús|Modèls incluses}} ($1)",
-       "pageinfo-transclusions": "{{PLURAL:$1|Pagina tradusida|Paginas tradusidas}} sus ($1)",
+       "pageinfo-transclusions": "{{PLURAL:$1|Pagina traducha|Paginas traduchas}} sus ($1)",
        "pageinfo-toolboxlink": "Informacion sus la pagina",
        "pageinfo-redirectsto": "Redirigir cap a",
        "pageinfo-redirectsto-info": "info",
        "exif-exposureprogram-4": "Prioritat a l’obturacion",
        "exif-exposureprogram-5": "Programa de creacion (preferéncia a la prigondor de camp)",
        "exif-exposureprogram-6": "Programa d'accion (preferéncia a la velocitat d’obturacion)",
-       "exif-exposureprogram-7": "Mòde retrach (per clichats de prèp amb rèire plan fosc)",
+       "exif-exposureprogram-7": "Mòde retrach (per clichats de prèp amb rèireplan fosc)",
        "exif-exposureprogram-8": "Mòde païsatge (per de clichats de païsatges nets)",
        "exif-subjectdistance-value": "{{PLURAL:$1|$1 mètre|$1 mètres}}",
        "exif-meteringmode-0": "Desconegut",
        "expand_templates_generate_xml": "Veire l'arborescéncia XML",
        "expand_templates_generate_rawhtml": "Afichar lo HTML brut",
        "expand_templates_preview": "Previsualizacion",
-       "pagelanguage": "Selector de lenga de la pagina",
+       "pagelanguage": "Cambiar la lenga de la pagina",
        "pagelang-name": "Pagina",
        "pagelang-language": "Lenga",
        "pagelang-use-default": "Utilizar la lenga per defaut",
        "log-description-pagelang": "Aquò es un jornal dels cambiaments dins las lengas de las paginas.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|a cambiat}} la lenga de la pagina $3 de $4 a $5.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activat)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desactivat''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>desactivat</strong>)",
        "mediastatistics": "Estatisticas suls mèdias",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 octet|$1 octets}} ($2 ; $3%)",
        "mediastatistics-table-mimetype": "Tipe MIME",
        "special-characters-group-greek": "Grèc",
        "special-characters-group-cyrillic": "Cirillic",
        "special-characters-group-arabic": "Arabi",
-       "special-characters-group-arabicextended": "arabi espandit",
+       "special-characters-group-arabicextended": "Arabi espandit",
        "special-characters-group-persian": "Pèrse",
        "special-characters-group-hebrew": "Ebrieu",
        "special-characters-group-bangla": "Bengali",
        "special-characters-group-khmer": "Cmèr",
        "special-characters-title-endash": "jonhent anglés",
        "special-characters-title-emdash": "jonhent em",
-       "special-characters-title-minus": "signe mens"
+       "special-characters-title-minus": "signe mens",
+       "randomrootpage": "Pagina raiç aleatòria"
 }
index 4e60293..486d5e9 100644 (file)
        "content-json-empty-object": "Tyhjy objektu",
        "cantcreateaccounttitle": "Ei voi luadie tunnustu",
        "cantcreateaccount-text": "Tunnuksien luadimine täs IP-adressaspäi ('''$1''') on estetty. Estäjänny on [[User:$3|$3]].\n\nKäyttäjän $3 annettu syy on ''$2''",
-       "cantcreateaccount-range-text": "Tunnuksien luadimine IP-adressilois adressualovehel '''$1''', kuduah kuuluu sinungi käytetty IP-adressu('''$4'''), on estetty. Eston on azetannuh [[User:$3|$3]].\n\nKäyttäjän $3 annettu syy estole on \"$2\".",
+       "cantcreateaccount-range-text": "Tunnuksien luadimine IP-adressilois adressualovehel <strong>$1</strong>, kuduah kuuluu sinungi käytetty IP-adressu(<strong>$4</strong>), on estetty. Eston on azetannuh [[User:$3|$3]].\n\nKäyttäjän $3 annettu syy estole on \"$2\".",
        "viewpagelogs": "Ozuta tämän sivun lougat",
        "nohistory": "Täl sivul ei ole kohendushistoriedu.",
        "currentrev": "Jälgimäzin versii",
        "searchall": "kai",
        "search-showingresults": "{{PLURAL:$4|Tulos <strong>$1</strong> / <strong>$3</strong>|Tulokset <strong>$1 - $2</strong> / <strong>$3</strong>}}",
        "search-nonefound": "Kyzelyh ei löydynyh tuloksii.",
-       "powersearch-legend": "Levitetty eččo",
+       "powersearch-legend": "Tarkendettu eččimine",
        "powersearch-togglelabel": "Valliče:",
        "powersearch-toggleall": "Kai",
        "powersearch-togglenone": "Nimidä",
        "mypreferences": "Azetukset",
        "prefs-edits": "Kohenduksii kaikkiedah:",
        "prefsnologintext2": "Ole hyvä, kirjuttai ku vaihtua sinun azetuksii.",
-       "prefs-skin": "Kettu",
+       "prefs-skin": "Sivun ulgonägö",
        "skin-preview": "Ezikačo",
        "prefs-user-pages": "Käyttäisivut",
        "prefs-rc": "Jälgimäzet kohendukset",
        "prefs-watchlist-days": "Ozutettuloin päivien lugu valvonduluvettelos:",
        "prefs-watchlist-days-max": "Ei enämbi $1 {{PLURAL:$1|päiviä}}",
        "prefs-watchlist-token": "Valvonduluvettelon avain:",
-       "prefs-resetpass": "Vaihta peittosana",
+       "prefs-resetpass": "Vaihta salasana",
        "prefs-changeemail": "Vaihta libo ota iäre sähköpoštuadressu",
        "prefs-setemail": "Kirjuta sähköpoštuadressu",
        "saveprefs": "Tallenda",
        "rows": "Riädyy:",
        "searchresultshead": "Eččie",
-       "timezoneregion-africa": "Afrikku",
-       "timezoneregion-america": "Amerikku",
-       "timezoneregion-antarctica": "Antarktikku",
-       "timezoneregion-arctic": "Artikku",
+       "timezoneregion-africa": "Afriekku",
+       "timezoneregion-america": "Ameriekku",
+       "timezoneregion-antarctica": "Antarktiekku",
+       "timezoneregion-arctic": "Artiekku",
        "timezoneregion-asia": "Aazii",
        "timezoneregion-atlantic": "Atlantine valdumeri",
        "timezoneregion-australia": "Australii",
        "gender-unknown": "Jätän valličemattah",
        "gender-male": "Mies",
        "gender-female": "Naine",
-       "prefs-help-gender": "Tämän azetuksen valliččemine on omatahtostu.\nProgrammu käyttäy annettuu tieduo, ku viitata sinuh oigiel kieliopillizel terminäl. \nTämä tiedo on julgine.",
+       "prefs-help-gender": "Tämän azetuksen valliččemine on omatahtoine.\nProgrammu käyttäy annettuu tieduo, ku viitata sinuh oigiel kieliopillizel terminäl. \nTämä tiedo on julgine.",
        "email": "Sähköpoštu",
-       "prefs-help-realname": "Oigien nimen andamine on omatahtostu.\nOllou annettu, sidä voijah käyttiä luadijan sanelendah.",
-       "prefs-help-email": "Sähköpoštuadresan andamine on omatahtostu, no se pidäy ku kyzyö uuzi peittosana, ku unohtannet sinun peittosanan.",
+       "prefs-help-realname": "Oigien nimen andamine on omatahtoine.\nOllou annettu, sidä voijah käyttiä luadijan sanelendah.",
+       "prefs-help-email": "Sähköpoštuadresan andamine on omatahtoine, no se pidäy ku kyzyö uuzi peittosana, ku unohtannet sinun peittosanan.",
        "prefs-help-email-required": "Sähköpoštuadressu vältämättäh pidäy.",
        "prefs-info": "Perustiijot",
        "prefs-signature": "Allekirjutus",
        "recentchanges-label-bot": "Tämän kohenduksen on luadinuh bot",
        "recentchanges-label-unpatrolled": "Tädä korjuandua vie ei ole tarkistettu",
        "recentchanges-label-plusminus": "Sivu on kazvanuh [] baital",
-       "recentchanges-legend-heading": "'''Legendu:'''",
+       "recentchanges-legend-heading": "<strong>Legendu:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (kačo sežo [[Special:NewPages|uuzien sivuloin listu]])",
        "rclistfrom": "Ozuta jälgimäzet muutokset algajen $2, $3",
        "rcshowhideminor": "$1 pienet kohendukset",
        "whatlinkshere-filters": "Filtrat",
        "blocklink": "Lukiče",
        "contribslink": "kohendukset",
-       "movelogpage": "Siirrä loga",
+       "movelogpage": "Siirrä logu",
        "export": "Vie sivut",
        "allmessages-language": "Kieli:",
        "allmessages-filter-submit": "Mene",
        "allmessages-filter-translate": "Kiännä",
        "thumbnail-more": "Suurendua",
        "filemissing": "Failua ei ole",
-       "tooltip-pt-userpage": "Sinun käyttäisivu",
-       "tooltip-pt-mytalk": "Sinun paginsivu",
-       "tooltip-pt-preferences": "Sinun azetukset",
+       "tooltip-pt-userpage": "{{GENDER:|}} käyttäisivu",
+       "tooltip-pt-mytalk": "{{GENDER:|}} paginsivu",
+       "tooltip-pt-preferences": "{{GENDER:|}} azetukset",
        "tooltip-pt-watchlist": "Listu sivulois kudamien muutoksii valvot",
-       "tooltip-pt-mycontris": "Luvettelo sinun kirjutuksis",
+       "tooltip-pt-mycontris": "Luvettelo {{GENDER:|}} kirjutuksis",
        "tooltip-pt-login": "Täs voibi registriiruijakseh, ga se ei ole vältämätöi",
        "tooltip-pt-logout": "Kirjuttai ullos",
        "tooltip-pt-createaccount": "Voit registriiruijakseh da kirjuttuakseh järjestelmäh, ga se ei ole vältämätöi",
        "tooltip-t-whatlinkshere": "Kaikkien sivuloin luvettelo, kudamis on linki täh sivuh",
        "tooltip-t-recentchangeslinked": "Jälgimäzet muutokset sivuloil, kudamile on linki täl sivul",
        "tooltip-feed-atom": "Atom-syöttö täh sivuh",
-       "tooltip-t-contributions": "Listu tämän käyttäjän kirjutuksis",
+       "tooltip-t-contributions": "Listu tämän käyttäjän kirjutuksis {{GENDER:$1|this user}}",
        "tooltip-t-upload": "Ližiä tiijostot",
        "tooltip-t-specialpages": "Kaikkien erikozien sivuloin luvettelo",
        "tooltip-t-print": "Tämän sivun tulostettavu versii",
index a127831..b728295 100644 (file)
        "listingcontinuesabbrev": "ଆହୁରି ଅଛି..",
        "index-category": "ସୂଚୀଥିବା ପୃଷ୍ଠାସବୁ",
        "noindex-category": "ସୂଚୀହୀନ ପୃଷ୍ଠାସବୁ",
-       "broken-file-category": "à¬\85ବà­\8cଧ ଫାଇଲ ଲିଙ୍କ ଥିବା ପୃଷ୍ଠାସମୂହ",
+       "broken-file-category": "à¬\85ସମà­\8dପà­\82ରà­\8dଣà­\8dଣ ଫାଇଲ ଲିଙ୍କ ଥିବା ପୃଷ୍ଠାସମୂହ",
        "about": "ଏହା ବାବଦରେ",
        "article": "ସୂଚୀପତ୍ର",
        "newwindow": "(ଏହା ନୂଆ ଉଇଣ୍ଡୋରେ ଖୋଲିବ)",
        "cancel": "ନାକଚ",
        "moredotdotdot": "ଅଧିକ...",
-       "morenotlisted": "à¬\8fହା à¬ªà­\81ରା ହୋଇ ନାହିଁ",
+       "morenotlisted": "à¬\8fହି à¬¤à¬¾à¬²à¬¿à¬\95ା à¬ªà­\82ରା ହୋଇ ନାହିଁ",
        "mypage": "ପୃଷ୍ଠା",
        "mytalk": "ଆଲୋଚନା",
        "anontalk": "ଆଲୋଚନା",
        "myprivateinfoprotected": "ନିଜର ଗୋପନୀୟ ସୂଚନା ସମ୍ପାଦନା କରିବା ପାଇଁ ଆପଣଙ୍କୁ ଅନୁମତି ମିଳିନାହିଁ ।",
        "mypreferencesprotected": "ନିଜର ପସନ୍ଦ ସମ୍ପାଦନା କରିବା ପାଇଁ ଆପଣଙ୍କୁ ଅନୁମତି ମିଳିନାହିଁ ।",
        "ns-specialprotected": "ବିଶେଷ ପୃଷ୍ଠାସବୁକୁ ବଦଳାଯାଇପାରିବ ନାହିଁ ।",
-       "titleprotected": "ଏହି ନାମଟି [[User:$1|$1]]ଙ୍କ ଦେଇ ନୂଆ ତିଆରିହେବାରୁ କିଳାଯାଇଅଛି ।\nଏହାର କାରଣ ହେଲା \"''$2''\" ।",
+       "titleprotected": "ଏହି ନାମଟି [[User:$1|$1]]ଙ୍କ ଦେଇ ନୂଆ ତିଆରିହେବାରୁ କିଳାଯାଇଅଛି ।\nଏହାର କାରଣ ହେଲା <em>$2</em> ।",
        "filereadonlyerror": "ଫାଇଲ ଧାରକ \"$2\"ଟି ଖାଲି ପଢିବା ହେବାଭଳି ରହିଥିବା ହେତୁ ଏଥିରେ ଥିବା $1 ପାଇଲଟିକୁ ବଦଳା ଯାଇପାରିବ ନାହିଁ ।\n\nଯେଉଁ ପରିଚ୍ଛା ଏହାକୁ ବନ୍ଦ କରିଛନ୍ତି ସେ ଏହି ବିବରଣୀ ଦେଇଛନ୍ତି: \"$3\"",
        "invalidtitle-knownnamespace": "\"$2\" ନେମସ୍ପେସ ଏବଂ \"$3\" ଲେଖାଥିବା ଅବୈଧ ଶୀର୍ଷକ ।",
        "invalidtitle-unknownnamespace": "\"$1\" ନେମ୍ସ୍ପେସ ଏବଂ \"$2\" ଲେଖାଥିବା ଅବୈଧ ଶୀର୍ଷକ ।",
        "createacct-another-username-ph": "ଆପଣଙ୍କ ଇଉଜର ନାମ ଟାଇପ କରନ୍ତୁ",
        "yourpassword": "ପାସୱାର୍ଡ଼",
        "userlogin-yourpassword": "ପାସୱାର୍ଡ଼",
-       "userlogin-yourpassword-ph": "ଆପଣଙ୍କ ପାସୱର୍ଡ଼ ଦିଅନ୍ତୁ",
-       "createacct-yourpassword-ph": "ପାସୱର୍ଡ଼ ଦିଅନ୍ତୁ",
+       "userlogin-yourpassword-ph": "à¬\86ପଣà¬\99à­\8dà¬\95 à¬ªà¬¾à¬¸à­±à¬¾à¬°à­\8dଡ଼ à¬¦à¬¿à¬\85ନà­\8dତà­\81",
+       "createacct-yourpassword-ph": "ପାସୱାରà­\8dଡ଼ à¬¦à¬¿à¬\85ନà­\8dତà­\81",
        "yourpasswordagain": "ପାସୱାର୍ଡ଼ ଆଉଥରେ:",
-       "createacct-yourpasswordagain": "ପାସୱର୍ଡ଼ ନିଶ୍ଚିତ କରିବେ",
+       "createacct-yourpasswordagain": "ପାସୱାରà­\8dଡ଼ à¬¨à¬¿à¬¶à­\8dà¬\9aିତ à¬\95ରିବà­\87",
        "createacct-yourpasswordagain-ph": "ଆଉଥରେ ପାସୱାର୍ଡ଼ ଦିଅନ୍ତୁ",
        "remembermypassword": "ଏହି ବ୍ରାଉଜରରେ (ସବୁଠୁ ଅଧିକ ହେଲେ $1 {{PLURAL:$1|day|ଦିନ}}) ପାଇଁ ମୋ ଲଗଇନ ମନେ ରଖିଥିବେ",
        "userlogin-remembermypassword": "ମୋତେ ଲଗ-ଇନ କରି ରଖିଥାନ୍ତୁ",
        "php-mail-error-unknown": "PHP ର ମେଲ() କାମରେ ଅଜଣା ଅସୁବିଧା ।",
        "user-mail-no-addy": "ଏକ ଇ-ମେଲ ଠିକଣା ବିନା ଇ-ମେଲ ପଠାଇବାକୁ ଚେଷ୍ଟା କଲୁଁ ।",
        "user-mail-no-body": "ଏକ ଖାଲି କିମ୍ବା ଅଦରକାରୀ ଛୋଟ ଲେଖା ଥିବା ମେଲ ପଠେଇବାକୁ ଚେଷ୍ଟା କରିଥିଲେ",
-       "changepassword": "ପାସୱର୍ଡ଼ ବଦଳାନ୍ତୁ",
+       "changepassword": "ପାସୱାରà­\8dଡ଼ à¬¬à¬¦à¬³à¬¾à¬¨à­\8dତà­\81",
        "resetpass_announce": "ଲଗ୍-ଇନ ପ୍ରକ୍ରିୟା ଶେଷ କରିବା ନିମନ୍ତେ, ଆପଣଙ୍କୁ ଏକ ନୂଆ ପାସୱାର୍ଡ଼ଟିଏ ଦେବାକୁ ପଡ଼ିବ ।",
        "resetpass_header": "ଖାତାର ପାସୱାର୍ଡ଼ଟିକୁ ବଦଳାଇ ଦିଅନ୍ତୁ",
        "oldpassword": "ପୁରୁଣା ପାସୱାର୍ଡ଼:",
        "resetpass_submit": "ପାସୱାର୍ଡ଼ଟିଏ ଦେଇ ଲଗ ଇନ କରନ୍ତୁ",
        "changepassword-success": "ଆପଣଙ୍କ ପାସୱାର୍ଡ଼ଟି ସଫଳତା ପୂର୍ବକ ବଦଳାଇ ଦିଆଗଲା !",
        "changepassword-throttled": "ଆପଣ ନିକଟରେ ଖୁବ ଅଧିକ ଥର ଲଗ ଇନ କରିବାକୁ ଚେଷ୍ଟା କରିଛନ୍ତି ।\nଆଉ ଅଧିକ ଥର ଚେଷ୍ଟା କରିବା ଆଗରୁ ଦୟାକରି $1 ପାଇଁ ଅପେକ୍ଷା କରନ୍ତୁ ।",
-       "botpasswords": "ବà¬\9f à¬ªà¬¾à¬¸à­\8dୱାରà­\8dଡ",
+       "botpasswords": "ବà¬\9f à¬ªà¬¾à¬¸à­±à¬¾à¬°à­\8dଡ଼",
        "botpasswords-label-appid": "ବଟ ନାମ:",
        "botpasswords-label-create": "ତିଆରି କରିବେ",
        "botpasswords-label-update": "ଅପଡେଟ କରିବେ",
        "showpreview": "ଦେଖଣା [Preview]",
        "showdiff": "ବଦଳଗୁଡ଼ିକ ଦେଖାଇବେ",
        "blankarticle": "<strong>ଚେତାବନୀ:</strong> ଆପଣ ସମ୍ପାଦନା କରୁଥିବା ଏହି ପୃଷ୍ଠାଟି ଫାଙ୍କା ଅଛି ।\nଯଦି ଆପଣ \"{{int:savearticle}}\" ଉପରେ ଆଉଥରେ କ୍ଲିକ କରନ୍ତି, ପୃଷ୍ଠାଟି କୌଣସି ବିଷୟବସ୍ତୁ ନଥାଇ ତିଆରି ହୋଇଯିବ ।",
-       "anoneditwarning": "<strong>ସାବଧାନ:</strong> ଆପଣ ଲଗ-ଇନ କରିନାହାନ୍ତି । ଅଧିକ ସମ୍ପାଦନା କଲେ ଆପଣଙ୍କ IP Address ଟି ସମସ୍ତଙ୍କୁ ଦେଖାଯିବ । <strong>[$1ଲଗ ଇନ କଲେ]</strong> କିମ୍ବା <strong>[$2 ନୂଆ ଖାତାଟିଏ ତିଆରି କଲେ]</strong>, ଆପଣଙ୍କ ସମ୍ପାଦନାର ଶ୍ରେୟ ଅନ୍ୟାନ୍ୟ ସୁବିଧା ସହିତ ଆପଣଙ୍କ ଇଉଜର ନାମରେ ଦିଆହେବ ।",
+       "anoneditwarning": "<strong>ସାବଧାନ:</strong> ଆପଣ ଲଗ-ଇନ କରିନାହାନ୍ତି । ଅଧିକ ସମ୍ପାଦନା କଲେ ଆପଣଙ୍କ IP Address ଟି ସମସ୍ତଙ୍କୁ ଦେଖାଯିବ । <strong>[$1 ଲଗ ଇନ କଲେ]</strong> କିମ୍ବା <strong>[$2 ନୂଆ ଖାତାଟିଏ ତିଆରି କଲେ]</strong>, ଆପଣଙ୍କ ସମ୍ପାଦନାର ଶ୍ରେୟ ଅନ୍ୟାନ୍ୟ ସୁବିଧା ସହିତ ଆପଣଙ୍କ ଇଉଜର ନାମରେ ଦିଆହେବ ।",
        "anonpreviewwarning": "''ଆପଣ ଲଗ ଇନ କରି ନାହାନ୍ତି । ବଦଳକରି ସାଇତିଲେ ଆପଣଙ୍କର IP ଠିକଣା ଏହି ପୃଷ୍ଠାର ଇତିହାସରେ ସାଇତା ହୋଇଯିବ ।''",
        "missingsummary": "'''ଚେତାବନୀ:''' ଆପଣ ଏକ ସମ୍ପାଦନା ସାରକଥା ଦେଇନାହାନ୍ତି ।\nଯଦି ଆପଣ \"{{int:savearticle}}\"ରେ ଆଉଥରେ କ୍ଲିକ କରନ୍ତି, ତେବେ ଆପଣଙ୍କ ବଦଳ ସାରକଥା ବିନା ସାଇତା ହୋଇଯିବ ।",
        "selfredirect": "<strong>ସାବଧନ :</strong> ଆପଣ ଏହି ପୃଷ୍ଠାଟିକୁ ତା ମଧ୍ୟକୁ ଲେଇଟାଉଛନ୍ତି । ଆପଣ ବୋଧ ହୁଏ ଭୁଲ ଲକ୍ଷସ୍ଥଳ ଦେଇଛନ୍ତି କିମ୍ବା ଭୁଲ ପୃଷ୍ଠଟିକୁ ବଦଳାଉଛନ୍ତି । \nଆପଣ ଯଦି \"{{int:savearticle}}\"ରେ ଆଉଥରେ କ୍ଲିକ କରିବେ ତେବେ ଲେଉଟାଣିଟି ଯାହା ହେଲେ ସାଇତା ହେଇଯିବା ।",
        "undo-summary-username-hidden": "ଜଣେ ଅଜଣା ସଭ୍ୟଙ୍କ ଦେଇ ହୋଇଥିବା $1 ସଂସ୍କରଣଟି ପଛକୁ ଫେରାନ୍ତୁ",
        "cantcreateaccounttitle": "ଖାତାଟିଏ ତିଆରି କରାଯାଇପାରିବ ନାହିଁ",
        "cantcreateaccount-text": "[[User:$3|$3]]ଙ୍କ ଦେଇ ('''$1''') IP ଠିକଣାରୁ ଖାତା ଖୋଲିବାକୁ ବାରଣ କରାଯାଇଅଛି ।\n\n$3ଙ୍କ ଦେଇ ଦିଆଯାଇଥିବା କାରଣ ହେଲା ''$2''",
-       "cantcreateaccount-range-text": "ଆପଣଙ୍କ IP Address ('''$4''') ସମେତ '''$1''' ସୀମା ଭିତରେ ଥିବା IP Address ରୁ [[User:$3|$3]]ଙ୍କ ଦ୍ୱାରା ନୂଆ ଖାତା ତିଆରିକୁ ଅଟକାଯାଇଛି ।\n\n$3ଙ୍କ ଦ୍ୱାରା ଏହାର କାରଣ ଦିଆଯାଇଛି: ''$2''",
+       "cantcreateaccount-range-text": "ଆପଣଙ୍କ IP Address (<strong>$4</strong>) ସମେତ <strong>$1</strong> ସୀମା ଭିତରେ ଥିବା IP Address ରୁ [[User:$3|$3]]ଙ୍କ ଦ୍ୱାରା ନୂଆ ଖାତା ତିଆରିକୁ ଅଟକାଯାଇଛି ।\n\n$3ଙ୍କ ଦ୍ୱାରା ଏହାର କାରଣ ଦିଆଯାଇଛି: <em>$2</em>",
        "viewpagelogs": "ଏହି ପୃଷ୍ଠା ପାଇଁ ଲଗଗୁଡ଼ିକୁ ଦେଖନ୍ତୁ ।",
        "nohistory": "ଏହି ପୃଷ୍ଠା ନିମନ୍ତେ କିଛି ବି ସମ୍ପାଦନା ଇତିହାସ ନାହିଁ ।",
        "currentrev": "ନଗଦ ସଙ୍କଳନ",
        "last": "ଆଗ",
        "page_first": "ପ୍ରଥମ",
        "page_last": "ଶେଷ",
-       "histlegend": "ଭିନà­\8dନ à¬¬à¬\9bା: à¬¬à¬¾à¬\9bିବା à¬ªà¬¾à¬\87à¬\81 à¬\97à­\8bଲ à¬¬à¬¾à¬\9bିବା à¬\98ରà­\87 à¬\95à­\8dଲିà¬\95 à¬\95ରି à¬\8fଣà­\8dà¬\9fର à¬\85ଥବା à¬¤à¬³à­\87 à¬¥à¬¿à¬¬à¬¾ à¬¬à¬\9fନ à¬¦à¬¬à¬¾à¬¨à­\8dତà­\81 à¥¤<br />\nନିରà­\8dଦà­\8dଦà­\87ଶିà¬\95ା: <strong>({{int:cur}})</strong> = à¬\97ତ à¬¸à¬\82ସà­\8dମରଣମାନà¬\99à­\8dà¬\95 à¬®à¬§à­\8dà­\9fରà­\87 à¬¤à¬«à¬¾à¬¤, <strong>({{int:last}})</strong> = à¬\86à¬\97ର à¬¸à¬\82ସà­\8dମରଣମାନଙ୍କ ମଧ୍ୟରେ ତଫାତ, <strong>{{int:minoreditletter}}</strong> = ଛୋଟମୋଟ ସମ୍ପାଦନା ।",
+       "histlegend": "ଭିନà­\8dନ à¬¬à¬\9bା: à¬¬à¬¾à¬\9bିବା à¬ªà¬¾à¬\87à¬\81 à¬\97à­\8bଲ à¬¬à¬¾à¬\9bିବା à¬\98ରà­\87 à¬\95à­\8dଲିà¬\95 à¬\95ରି à¬\8fଣà­\8dà¬\9fର à¬\85ଥବା à¬¤à¬³à­\87 à¬¥à¬¿à¬¬à¬¾ à¬¬à¬\9fନ à¬¦à¬¬à¬¾à¬¨à­\8dତà­\81 à¥¤<br />\nନିରà­\8dଦà­\8dଦà­\87ଶିà¬\95ା: <strong>({{int:cur}})</strong> = à¬\97ତ à¬¸à¬\82ସà­\8dà¬\95ରଣମାନà¬\99à­\8dà¬\95 à¬®à¬§à­\8dà­\9fରà­\87 à¬¤à¬«à¬¾à¬¤, <strong>({{int:last}})</strong> = à¬\86à¬\97ର à¬¸à¬\82ସà­\8dà¬\95ରଣମାନଙ୍କ ମଧ୍ୟରେ ତଫାତ, <strong>{{int:minoreditletter}}</strong> = ଛୋଟମୋଟ ସମ୍ପାଦନା ।",
        "history-fieldset-title": "ଇତିହାସରେ ଖୋଜନ୍ତୁ",
        "history-show-deleted": "କେବଳ ଲିଭାଯାଇଥିବା",
        "histfirst": "ସବୁଠୁ ପୁରୁଣା",
        "recentchanges-label-bot": "ଏହି ବଦଳଟି ଜଣେ '''ବଟ'''ଙ୍କ ଦେଇ କରାଯାଇଥିଲା",
        "recentchanges-label-unpatrolled": "ଏହି ବଦଳଟିକୁ ଏ ଯାଏଁ ପରଖା ଯାଇନାହିଁ",
        "recentchanges-label-plusminus": "ଏହି ବାଇଟ ତଥ୍ୟରୁ ଏଇ ପୃଷ୍ଠାର ଆକାର ବଦଳ",
-       "recentchanges-legend-heading": "'''ଆକଳନ:'''",
+       "recentchanges-legend-heading": "<strong>ଆକଳନ:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}}  (ଆହୁରି ଦେଖନ୍ତୁ: [[Special:NewPages|ନୂଆ ପୃଷ୍ଠାମାନଙ୍କ ତାଲିକା]])",
        "rcnotefrom": "<strong>$3, $4</strong> ପରଠାରୁ {{PLURAL:$5|ବଦଳଟି|ବଦଳଗୁଡ଼ିକ}} ତଳେ ଦିଆଗଲା (<strong>$1</strong> ଯାଏ ଦିଆଗଲା) ।",
        "rclistfrom": "$3 $2ରୁ ଆରମ୍ଭ କରି ନୂଆ ବଦଳଗୁଡ଼ିକ ଦେଖାଇବେ",
        "rollbackfailed": "ପୁରାପୁରି ପଛକୁ ଫେରିବା ବିଫଳ ହେଲା",
        "cantrollback": "ବଦଳକୁ ପଛକୁ ଫେରାଇ ପାରିବେ ନାହିଁ;\nଶେଷ ଦାତାଜଣଙ୍କ ଏହି ପୃଷ୍ଠାର ଜଣେମାତ୍ର ଦାତା ।",
        "alreadyrolled": "[[User:$2|$2]]([[User talk:$2|talk]] {{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])ଙ୍କ ଦେଇ [[:$1]]ରେ ହୋଇଥିବା ଶେଷ ବଦଳକୁ ପଛକୁ ଫେରାଯାଇପାରିବ ନାହିଁ ;\nଏହାକୁ ଆଉ କେହି ସମ୍ପାଦନା କରିଛି ବା ପୁରାପୁରି ପଛକୁ ଫେରାଇଦେଇଛି ।\n\nଏହି ପୃଷ୍ଠାର ଶେଷ  ସମ୍ପାଦନା  [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) ଙ୍କ ଦେଇ ହୋଇଥିଲା ।",
-       "editcomment": "ସମ୍ପାଦନାର ସାରକଥା ଥିଲା: \"''$1''\" ।",
+       "editcomment": "ସମ୍ପାଦନାର ସାରକଥା ଥିଲା: <em>$1</em> ।",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|ଆଲୋଚନା]])ଙ୍କ ଦେଇ କରାଯାଇଥିବା ବଦଳକୁ [[User:$1|$1]]ଙ୍କ ଦେଇ କରାଯାଇଥିବା ଶେଷ ବଦଳକୁ ଫେରାଇ ଦିଆଗଲା",
        "revertpage-nouser": "{{GENDER:$1|[[User:$1|$1]]}}ଙ୍କ ଦେଇ ଜଣେ ଅଜଣା ସଭ୍ୟଙ୍କ ସମ୍ପାଦନାକୁ ପଛକୁ ଫେରଗଲା",
        "rollback-success": "$1ଙ୍କ ଦେଇ ହୋଇଥିବା ସମ୍ପାଦନାକୁ ପୁରାପୁରି ପଛକୁ ଲେଉଟାଇ ଦିଆଗଲା;\n$2ଙ୍କ ଦେଇ ଶେଷଥର ହୋଇଥିବା ସଂସ୍କରଣକୁ ବଦଳାଇ ଦିଆଗଲା ।",
        "export": "ପୃଷ୍ଠାସବୁ ରପ୍ତାନି କରିବେ",
        "exporttext": "ଆପଣ ଲେଖା ଓ ଏକ ପୃଷ୍ଠାର ସମ୍ପାଦନା ଇତିହାସ ବା ଏକାପ୍ରକାର XML ରେ ଯୋଡ଼ିହୋଇଥିବା ପୃଷ୍ଠାମାନଙ୍କୁ ରପ୍ତାନି କରିପାରିବେ ।\nMediaWiki ବ୍ୟବହାର କରି [[Special:Import|ପୃଷ୍ଠା ଆମଦାନି]] ଜରିଆରେ ଏହାକୁ ଆମଦାନି କରାଯାଇପାରିବ ।\n\nପୃଷ୍ଠା ରପ୍ତାନି କରିବା ନିମନ୍ତେ ତଳେ ଥିବା ଟେକ୍ସଟ ଘରେ ନାମ ଦିଅନ୍ତୁ, ଧାଡ଼ିପ୍ରତି ଗୋଟିଏ ଲେଖାଏଁ ନାମ, ଆଉ ଆପଣ ଏବେକାର ସଂସ୍କରଣ ଚାହୁଁଛନ୍ତି ବା ପୁରୁଣା ସଂସ୍କରଣମାନ ଚାହୁଁଛନ୍ତି, ପୃଷ୍ଠାର ଇତିହାସ ସହ, କିମ୍ବା ଶେଷ ବଦଳ ବାବଦରେ ଏକ ବିବରଣୀ ସହ ଏବେକାର ସଂସ୍କରଣ ଦିଅନ୍ତୁ ।\n\nଶେଷ କ୍ଷେତ୍ରରେ ଆପଣ ଏକ ଲିଙ୍କ ବ୍ୟବହାର କରିପାରିବେ, ଯଥା ଏକ ପୃଷ୍ଠା ପାଇଁ [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] \"[[{{MediaWiki:Mainpage}}]]\" ।",
        "exportall": "ସମସ୍ତ ପୃଷ୍ଠାଗୁଡିକୁ ରପ୍ତାନି କରିବେ",
-       "exportcuronly": "à¬\95à­\87ବଳ à¬\8fବà­\87à¬\95ର à¬¸à¬\82ସà­\8dà¬\95ରଣରà­\87 à¬­à¬°à¬¿à¬¥à¬¾à¬\8f, à¬ªà­\81ରା à¬\87ତିହାସରà­\87 à¬¨à­\81ହà­\87ଁ",
-       "exportnohistory": "----\n'''ସà­\82à¬\9aନା:''' à¬¦à­\87à¬\96ଣାରà­\87 à¬\85ସà­\81ବିଧା à¬¹à­\87ବା à¬\95ାରଣରà­\81 à¬ªà­\83ଷà­\8dଠାର à¬ªà­\81ରା ଇତିହାସ ରପ୍ତାନି କରିବା ଅଚଳ କରାଯାଇଛି ।",
-       "exportlistauthors": "ପà­\8dରତି à¬ªà­\83ଷà­\8dଠା à¬¨à¬¿à¬®à¬¨à­\8dତà­\87 à¬\85ବଦାନà¬\95ାରà­\80à¬\99à­\8dà¬\95ର à¬\8fà¬\95 à¬ªà­\81ରା ତାଲିକା ରଖିବେ",
+       "exportcuronly": "à¬\95à­\87ବଳ à¬\8fବà­\87à¬\95ାର à¬¸à¬\82ସà­\8dà¬\95ରଣ à¬\85à¬\9bି, à¬ªà­\82ରା à¬\87ତିହାସ à¬¨à­\81ହଁ",
+       "exportnohistory": "----\n'''ସà­\82à¬\9aନା:''' à¬¦à­\87à¬\96ଣାରà­\87 à¬\85ସà­\81ବିଧା à¬¹à­\87ବା à¬\95ାରଣରà­\81 à¬ªà­\83ଷà­\8dଠାର à¬ªà­\82ରା ଇତିହାସ ରପ୍ତାନି କରିବା ଅଚଳ କରାଯାଇଛି ।",
+       "exportlistauthors": "ପà­\8dରତି à¬ªà­\83ଷà­\8dଠା à¬¨à¬¿à¬®à¬¨à­\8dତà­\87 à¬\85ବଦାନà¬\95ାରà­\80à¬\99à­\8dà¬\95ର à¬\8fà¬\95 à¬ªà­\82ରା ତାଲିକା ରଖିବେ",
        "export-submit": "ପଠେଇବେ",
        "export-addcattext": "ଶ୍ରେଣୀରୁ ପୃଷ୍ଠାସବୁକୁ ଯୋଡ଼ନ୍ତୁ:",
        "export-addcat": "ଯୋଡ଼ିବେ",
        "htmlform-cloner-delete": "ବାହାର କରନ୍ତୁ",
        "htmlform-cloner-required": "ଅତି କମରେ ଗୋଟିଏ ମୂଲ୍ୟ ଲୋଡ଼ା",
        "sqlite-has-fts": "ପୁରା ଟେକ୍ସ୍ଟ ଖୋଜା ସହଯୋଗ ସହିତ $1",
-       "sqlite-no-fts": "ପà­\81ରା à¬\9fà­\87à¬\95à­\8dସà­\8dଟ ଖୋଜା ସହଯୋଗ ବିନା $1",
+       "sqlite-no-fts": "ପà­\82ରା à¬\9fà­\87à¬\95à­\8dସଟ ଖୋଜା ସହଯୋଗ ବିନା $1",
        "logentry-delete-delete": "$1, $3 ପୃଷ୍ଠାଟି {{GENDER:$2|ଲିଭାଇଦେଲେ}}",
        "logentry-delete-restore": "$1, $3 ପୃଷ୍ଠାଟି {{GENDER:$2|ପୁନସ୍ଥାପନ କଲେ}}",
        "logentry-delete-event": "$1 {{PLURAL:$5|ଲଗ ଘଟଣାଟିଏ|$5 ଗୋଟି ଲଗ ଘଟଣା}}ର ଦେଖଣା $3 ପୃଷ୍ଠାରେ {{GENDER:$2|ବଦଳାଇଲେ}}: $4",
        "default-skin-not-found": "<code dir=\"ltr\">$wgDefaultSkin</code>ରେ ଦିଆଯାଇଥିବା <code>$1</code>ଏହି ଉଇକିର ଡିଫଲ୍ଟ ସ୍କିନ ମିଳିଲାନାହିଁ ।\n\nଆପଣଙ୍କ ଇନଷ୍ଟଲେସନରେ ତଳଲିଖିତ ସ୍କିନ ରହିଛି । ସେମାନଙ୍କୁ କିପରି ସକ୍ରିୟ କରିବେ ଓ ଡିଫଲ୍ଟ ଭାବେ ବାଛିବେ ଜାଣିବା ପାଇଁ [https://www.mediawiki.org/wiki/Manual:Skin_configuration ମାନୁଆଲ: ସ୍କିନ ସଂରଚନା] ଦେଖନ୍ତୁ ।\n\n$2\n\n; ଯଦି ଆପଣ ଏହି ଏବେ MediaWiki ଇନଷ୍ଟଲ କରିଥାନ୍ତି:\n: ଆପଣ ବୋଧେ git ରୁ ସିଧା, କିମ୍ବା ସୋର୍ସ କୋଡ଼ରୁ କିମ୍ବା ଆଉ କେଉଁଠାରୁ ଇନଷ୍ଟଲ କରିଛନ୍ତି । ଏହା ଆଶାନୁରୂପ । [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.orgର ]ରୁ ଆଉ କିଛି ସ୍କିନ ଇନଷ୍ଟଲ କରିପାରିବେ:\n:* ବିଭିନ୍ନ ସ୍କିନ ଓ ଏକ୍ସଟେନସନ ସହିତ ଆସୁଥିବା [https://www.mediawiki.org/wiki/Download ଟାରବଲ ଇନଷ୍ଟଲର] ଡାଉନଲୋଡ଼ କରାଯାଉଛି । ଆପଣ  <code>skins/</code> ଡାଇରେକ୍ଟରି ଏଠାରୁ କପି କରି ପେଷ୍ଟ କରିପାରିବେ । \n:* git ଦେଇ <code>mediawiki/skins/*</code> ରେପୋଜିଟରିରୁ ଗୋଟେ ସ୍କିନ ଆପଣଙ୍କର MediaWiki ଇନଷ୍ଟଲେସନର <code dir=\"ltr\">skins/</code> ଡାଇରେକ୍ଟରିକୁ କପି କରାଯାଉଛି ।\n: ଆପଣ ଯଦି ଜଣେ MediaWiki ଡେଭେଲପର ହୋଇଥାନ୍ତି ତାହେଲେ ଏହା କରିବା ଦ୍ୱାରା ଆପଣଙ୍କର git ରେପୋଜିଟୋରିରେ କିଛି ବାଧା ଉପୁଜିବା ଅନୁଚିତ ।\n\n; ଆପଣ ଯଦି ଏହି ମାତ୍ର MediaWiki ଅପଗ୍ରେଡ଼ କରିଥାନ୍ତି ତେବେ:\n: MediaWiki 1.24 ଏବଂ ନୂଆ ସଂସ୍କରଣମାନ ଆପେଆପେ ଇନଷ୍ଟଲ ହୋଇଥିବା ସ୍କିନ ସକ୍ରିୟ କରି ନଥାନ୍ତି ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]) ଦେଖନ୍ତୁ । ଏବେ ଇନଷ୍ଟଲ ହୋଇଥିବା ସମସ୍ତ ସ୍କିନ ପାଇଁ ଆପଣ ଏହି ଧାଡ଼ିଟି <code>LocalSettings.php</code>ରେ ପେଷ୍ଟ କରିପାରିବେ:\n\n<pre dir=\"ltr\">$3</pre>\n\n; ଯଦି ଆପଣ ଏହି ମାତ୍ର <code>LocalSettings.php</code> ବଦଳାଇ ଦେଇଥାନ୍ତି:\n: ବନାନ ପରଖିବା ପାଇଁ ସ୍କିନର ନାମ ଆଉଥରେ ପରଖିନିଅନ୍ତୁ ।",
        "default-skin-not-found-no-skins": "<code>$wgDefaultSkin</code>ରେ ସୂଚିତ ହେବା ଅନୁସାରେ ଆପଣଙ୍କ ଉଇକି ପାଇଁ ଡିଫଲ୍ଟ ସ୍କିନ <code>$1</code> ଉପଲବ୍ଧ ନାହିଁ ।\n\nକୌଣସି ସ୍କିନ ଇନଷ୍ଟଲ ହୋଇନାହିଁ ।\n\n; ଯଦି ଆପଣ ଏହି ଏବେ MediaWiki ଇନଷ୍ଟଲ କରିଥାନ୍ତି:\n: ଆପଣ ବୋଧେ git ରୁ ସିଧା, କିମ୍ବା ସୋର୍ସ କୋଡ଼ରୁ କିମ୍ବା ଆଉ କେଉଁଠାରୁ ଇନଷ୍ଟଲ କରିଛନ୍ତି । ଏହା ଆଶାନୁରୂପ । MediaWiki 1.24 ଓ ତା'ପରର ସଂସ୍କରଣମାନଙ୍କ ମୂଳ ରେପୋଜିଟରିରେ କୌଣସି ସ୍କିନ ରହିନଥାଏ । [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.orgର ]ରୁ ଆଉ କିଛି ସ୍କିନ ଇନଷ୍ଟଲ କରିପାରିବେ । କିପରି:\n:* ବିଭିନ୍ନ ସ୍କିନ ଓ ଏକ୍ସଟେନସନ ସହିତ ଆସୁଥିବା [https://www.mediawiki.org/wiki/Download ଟାରବଲ ଇନଷ୍ଟଲର] ଡାଉନଲୋଡ଼ କରାଯାଉଛି । ଆପଣ  <code>skins/</code> ଡାଇରେକ୍ଟରି ଏଠାରୁ କପି କରି ପେଷ୍ଟ କରି । \n:* git ଦେଇ <code>mediawiki/skins/*</code> ରେପୋଜିଟରିରୁ ଗୋଟେ ସ୍କିନ ଆପଣଙ୍କର MediaWiki ଇନଷ୍ଟଲେସନର <code dir=\"ltr\">skins/</code> ଡାଇରେକ୍ଟରିକୁ କପି କରି ।\n: ଆପଣ ଯଦି ଜଣେ MediaWiki ଡେଭେଲପର ହୋଇଥାନ୍ତି ତାହେଲେ ଏହା କରିବା ଦ୍ୱାରା ଆପଣଙ୍କର git ରେପୋଜିଟୋରିରେ କିଛି ବାଧା ଉପୁଜିବା ଅନୁଚିତ । ସ୍କିନ ସକ୍ରିୟ କରିବା ଓ ଡିଫଲ୍ଟ ଭାବେ ବାଛିବା ବାବଦରେ ଅଧିକ ସୂଚନା ପାଇଁ [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] ଦେଖନ୍ତୁ ।",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (ସକ୍ରିୟ କରାଗଲା)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ନିକ୍ରିୟ କରାଗଲା''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>ନିଷ୍କ୍ରିୟ କରାଗଲା</strong>)",
        "mediastatistics": "ମିଡ଼ିଆ ଆକଳନ",
        "mediastatistics-summary": "ଅପଲୋଡ଼ ହୋଇଥିବା ଫାଇଲର ପ୍ରକାର ବାବଦରେ ଆକଳନ । ଏଥିରେ ଏକ ଫାଇଲର ନିକଟତମ ସଂସ୍କରଣ ରହିଛି । ପୁରୁଣା କିମ୍ବା ଅପସାରିତ ସଂସ୍କରଣ ଏଥିରେ ରଖାଯାଇନାହିଁ ।",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 ବାଇଟ|$1 ବାଇଟ}} ($2; $3%)",
index b13db96..460665e 100644 (file)
@@ -6,7 +6,8 @@
                        "Bouron",
                        "HalanTul",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Æрвитæнты бын хахх:",
        "myprivateinfoprotected": "Дæ приватон информаци ивыны бар дæм нæй.",
        "mypreferencesprotected": "Дæ уагæвæрдтæ ивыны бар дæм нæй.",
        "ns-specialprotected": "Сæрмагонд фæрстæн ивæн нæй.",
-       "titleprotected": "Ацы ном уыд æхгæд саразынæй. Сæхгæдта йæ [[User:$1|$1]].\nÆхгæныны бындур уыд \"''$2''\".",
+       "titleprotected": "Ацы ном уыд æхгæд саразынæй. Сæхгæдта йæ [[User:$1|$1]].\nÆхгæныны бындур уыд <em>$2</em>.",
        "filereadonlyerror": "Нæ уайы фæивын файл \"$1\" уый тыххæй æмæ репозиторий \"$2\" кусы æрмæст фæрсыны уавæры.\n\nРадгæс, кæцы сæвæрдта ацы уавæр, ныууагъта ахæм амонæн: \"''$3''\".",
        "invalidtitle-knownnamespace": "\"$2\" номдон æмæ \"$3\" тексты рæдыд сæр",
        "invalidtitle-unknownnamespace": "Æнæзонгæ номдоны нымæц, \"$1\" æмæ \"$2\" тексты рæдыд сæр",
        "createaccountreason": "Бындур:",
        "createacct-reason": "Бындур",
        "createacct-reason-ph": "Цæмæн аразыс æндæр аккаунт?",
-       "createacct-captcha": "Æдасдзинад бæлвырдгæнæн",
-       "createacct-imgcaptcha-ph": "Уæлдæр цы текст уыныс, уый бафысс",
        "createacct-submit": "Сараз дæ аккаунт",
        "createacct-another-submit": "Æндæр аккаунт сараз",
        "createacct-benefit-heading": "{{SITENAME}} сарæзтой дæ хуызæн адæм.",
        "passwordreset-emailtext-ip": "Чидæр (уæццæгæн ды, $1 IP адрисæй) æрдомдта дæ {{grammar:genitive|{{SITENAME}}}} ($4) пароль ногæй сæвæрын. Ацы архайæджы {{PLURAL:$3|аккаунт баст у|аккаунттæ баст сты}} ацы электрон посты адрисимæ:\n\n$2\n\n{{PLURAL:$3|Ацы рæстæгмæ пароль|Ацы рæстæгмæ паролтæ}} кусдзысты {{PLURAL:$5|иу бон|$5 боны}}.\nНыр ды хъуамæ бахизай системæмæ æмæ равзарай ног пароль. Кæд ай æндæр чидæр æрдомдта, кæнæ кæд дæ пароль æрхъуыды кодтай æмæ дæ нал фæды фæивай йæ, уæд дæ бон у мацæмæ дарай ацы фыстæг æмæ дарддæр архайай дæ зæронд паролæй.",
        "passwordreset-emailtext-user": "{{grammar:genitive|{{SITENAME}}}} архайæг $1 æрдомдта дæ {{grammar:genitive|{{SITENAME}}}} ($4) аккаунты пароль ногæй сæвæрын. Ацы архайæджы {{PLURAL:$3|аккаунт баст у|аккаунттæ баст сты}} ацы электрон посты адрисимæ:\n\n$2\n\n{{PLURAL:$3|Ацы рæстæгмæ пароль|Ацы рæстæгмæ паролтæ}} кусдзысты {{PLURAL:$5|иу бон|$5 боны}}.\nНыр ды хъуамæ бахизай системæмæ æмæ равзарай ног пароль. Кæд ай æндæр чидæр æрдомдта, кæнæ кæд дæ пароль æрхъуыды кодтай æмæ дæ нал фæды фæивай йæ, уæд дæ бон у мацæмæ дарай ацы фыстæг æмæ дарддæр архайай дæ зæронд паролæй.",
        "passwordreset-emailelement": "Фæсномыг: \n$1\n\nРæстæгмæ пароль: \n$2",
-       "passwordreset-emailsent": "Ног пароль сæвæрыны фыстæг æрвыст æрцыд.",
+       "passwordreset-emailsentemail": "Ног пароль сæвæрыны фыстæг æрвыст æрцыд.",
        "passwordreset-emailsent-capture": "Ног пароль сæвæрыны фыстæг æрвыст æрцыд æмæ бындæр æвдыст у.",
        "passwordreset-emailerror-capture": "Ног пароль сæвæрыны фыстæг арæзт æрцыд æмæ бындæр æвдыст у. Фæлæ йæ {{grammar:allative|{{GENDER:$2|user}}}} арвитын нæ бантыстис: $1",
        "changeemail": "E-mail адрис фæивын",
-       "changeemail-text": "Байдзаг кæн ацы формæ, цæмæй дæ e-mail адрис фæивай. Уый тыххæй дын хъæудзæн дæ пароль бафыссын.",
+       "changeemail-header": "Аккаунты e-mail адрис фæивын",
        "changeemail-no-info": "Ды хъуамæ системæмæ хызт уай, цæмæй ацы фарсмæ комкоммæ бавналай.",
        "changeemail-oldemail": "Нырыккон e-mail адрис:",
        "changeemail-newemail": "Ног e-mail адрис:",
        "prefs-tokenwatchlist": "Токен",
        "prefs-diffs": "Иртасæнтæ",
        "prefs-help-prefershttps": "Ацы уагæвæрд скусдзæн дæ ног бахызты фæстæ.",
-       "email-address-validity-valid": "E-mail раст зыны",
-       "email-address-validity-invalid": "Раст e-mail бацамон",
        "userrights": "Архайæджы барты армдарæн",
        "userrights-lookup-user": "Архайæджы къордтæ ивын",
        "userrights-user-editname": "Фæсномыг бацамон:",
        "recentchanges-label-minor": "Ай у чысыл ивд",
        "recentchanges-label-bot": "Ацы ивд бот сарæзта",
        "recentchanges-label-unpatrolled": "Ацы ивд нырмæ нæу фидар гонд",
-       "recentchanges-legend-heading": "'''Легендæ:'''",
+       "recentchanges-legend-heading": "<strong>Легендæ:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (уый йеддæмæ фен [[Special:NewPages|ног фæрсты номхыгъд]])",
        "rcnotefrom": "Бындæр сты æвдыст ивдтытæ '''$2'''-æй ('''{{grammar:genitive|$1}}''' йонг).",
        "rclistfrom": "Равдисын ивдтытæ амæй фæстæ: $3 $2",
        "upload-description": "Файлы афыст",
        "upload-options": "Бавгæныны уагæвæрдтæ",
        "watchthisupload": "Ацы файлмæ цæст æрдарын",
-       "upload-success-subj": "Æвгæд æрцыд",
-       "upload-failure-subj": "Бавгæныны проблемæ",
        "upload-file-error": "Мидæггаг рæдыд",
        "backend-fail-notexists": "Файл $1 нæй.",
        "backend-fail-delete": "Нæ уайы файл «$1» схафын.",
        "lockedbyandtime": "($1 $2 $3)",
        "move-page": "$1 — номы ивд",
        "move-page-legend": "Фарсы ном ивын",
-       "movearticle": "Номивгæ фарс:",
        "movenotallowed": "Фæрстæн сæ нæмттæ ивыны бар дæм нæй.",
        "movenotallowedfile": "Файлты нæмттæ ивыны бар дæм нæй.",
        "cant-move-user-page": "Архайджыты фæрсты нæмттæ ивыны бар дæм нæй (дæлфæрсты йеддæмæ).",
        "movenosubpage": "Ацы фарсæн дæлфæрстæ нæй.",
        "movereason": "Бындур:",
        "revertmove": "раивын",
-       "delete_and_move": "Схафын æмæ ном фæивын",
        "delete_and_move_confirm": "Гъо, схафы ацы фарс",
        "immobile-source-namespace": "Номдон «{{grammar:genitive|$1}}» мидæг фæрсты нæмттæ ивæн нæй.",
        "immobile-source-page": "Ацы фарсæн йæ ном ивæн нæй.",
index 0460e0e..407e9b9 100644 (file)
        "myprivateinfoprotected": "ਤੁਹਾਨੂੰ ਆਪਣੀ ਨਿੱਜੀ ਜਾਣਕਾਰੀ ਵਿੱਚ ਸੋਧ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
        "mypreferencesprotected": "ਤੁਹਾਨੂੰ ਆਪਣੀਆਂ ਪਸੰਦਾਂ ਵਿੱਚ ਸੋਧ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
        "ns-specialprotected": "ਖ਼ਾਸ ਸਫ਼ਿਆਂ ’ਚ ਫੇਰ-ਬਦਲ ਨਹੀਂ ਹੋ ਸਕਦੇ।",
-       "titleprotected": "ਇਹ ਸਿਰਲੇਖ [[User:$1|$1]] ਵੱਲੋਂ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ ਹੈ ਅਤੇ ਵਰਤਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ। ਦਿੱਤਾ ਹੋਇਆ ਕਾਰਨ ਹੈ, \"''$2''\"।",
+       "titleprotected": "ਇਹ ਸਿਰਲੇਖ [[User:$1|$1]] ਵੱਲੋਂ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ ਹੈ ਅਤੇ ਵਰਤਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ। ਦਿੱਤਾ ਹੋਇਆ ਕਾਰਨ ਹੈ, <em>$2</em>।",
        "filereadonlyerror": "\"$1\" ਫ਼ਾਈਲ ਵਿੱਚ ਤਬਦੀਲੀ ਨਹੀਂ ਹੋ ਸਕਦੀ ਕਿਉਂਕਿ ਫ਼ਾਈਲ ਭੰਡਾਰ \"$2\" ਸਿਰਫ਼ ਵੇਖਣਯੋਗ ਰੂਪ ਵਿਚ ਹੈ।\n\nਉਹ ਪ੍ਰਬੰਧਕ, ਜਿਸਨੇ ਇਹ ਰੋਕ ਲਾਈ ਹੈ, ਦਾ ਕਹਿਣਾ ਹੈ: ''$3''",
        "invalidtitle-knownnamespace": "ਥਾਂ-ਨਾਮ \"$2\" ਅਤੇ ਲਿਖਤ \"$3\" ਵਾਲ਼ਾ ਗ਼ਲਤ ਸਿਰਲੇਖ",
        "invalidtitle-unknownnamespace": "ਅਣਜਾਣ ਨਾਂ-ਸਥਾਨ ਗਿਣਤੀ $1 ਅਤੇ ਲਿਖਤ $2 ਵਾਲ਼ਾ ਗ਼ਲਤ ਸਿਰਲੇਖ",
        "recentchanges-label-bot": "ਇਹ ਸੋਧ ਇੱਕ ਬੋਟ ਦੁਆਰਾ ਕੀਤੀ ਗਈ ਸੀ",
        "recentchanges-label-unpatrolled": "ਇਹ ਫੇਰ-ਬਦਲ ਹਾਲੇ ਵੇਖਿਆ ਨਹੀਂ ਗਿਆ",
        "recentchanges-label-plusminus": "ਸਫ਼ੇ ਵਿੱਚ ਇੰਨੀਆਂ ਬਾਈਟਾਂ ਦੀ ਤਬਦੀਲੀ ਹੋਈ",
-       "recentchanges-legend-heading": "'''ਟੀਕਾ:'''",
+       "recentchanges-legend-heading": "<strong>ਟੀਕਾ:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|ਨਵੇਂ ਸਫ਼ਿਆਂ ਦੀ ਸੂਚੀ]] ਵੀ ਵੇਖੋ)",
        "recentchanges-legend-plusminus": "(''±੧੨੩'')",
        "recentchanges-submit": "ਦਿਖਾਓ",
        "upload-misc-error": "ਅਣਪਛਾਤੀ ਅੱਪਲੋਡ ਗਲਤੀ",
        "upload-http-error": "ਇੱਕ HTTP ਗ਼ਲਤੀ ਹੋਈ: $1",
        "foreign-structured-upload-form-label-infoform-date": "ਤਾਰੀਖ਼",
-       "foreign-structured-upload-form-3-label-question-website": "ਕੀ ਤੁਸੀਂ ਇਹ ਚਿੱਤਰ ਜ਼ਾਲਸਥਾਨ ਤੋਂ ਉਤਾਰਿਆ ਹੈ ਜਾਂ ਚਿੱਤਰ-ਖੋਜ਼ ਤੋਂ ਇਸਨੂੰ ਪ੍ਰਾਪਤ ਕੀਤਾ ਹੈ?",
-       "foreign-structured-upload-form-3-label-question-ownwork": "ਕੀ ਤੁਸੀਂ ਇਹ ਚਿੱਤਰ ਆਪ ਬਣਾਇਆ(ਖਿੱਚਿਆ,ਵਾਹਿਆ,ਆਦਿ) ਹੈ?",
-       "foreign-structured-upload-form-3-label-yes": "ਹਾਂ",
-       "foreign-structured-upload-form-3-label-no": "ਨਹੀਂ",
        "backend-fail-notexists": "ਫ਼ਾਈਲ $1 ਮੌਜੂਦ ਨਹੀਂ ਹੈ।",
        "backend-fail-delete": "ਫ਼ਾਈਲ \"$1\" ਮਿਟਾਈ ਨਹੀਂ ਜਾ ਸਕੀ।",
        "backend-fail-alreadyexists": "ਫ਼ਾਈਲ \"$1\" ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ।",
        "rollbacklinkcount": "$1 {{PLURAL:$1|ਸੋਧ|ਸੋਧਾਂ}} ਵਾਪਸ ਮੋੜੋ",
        "rollbacklinkcount-morethan": "$1 ਤੋਂ ਜ਼ਿਆਦਾ {{PLURAL:$1|ਸੋਧ|ਸੋਧਾਂ}} ਵਾਪਸ ਮੋੜੋ",
        "rollbackfailed": "ਰੋਲਬੈਕ ਫੇਲ੍ਹ",
-       "editcomment": "ਸੋਧ ਸਾਰ ਸੀ: \"''$1''\"",
+       "editcomment": "ਸੋਧ ਸਾਰ ਸੀ: <em>$1</em>",
        "sessionfailure-title": "ਇਜਲਾਸ ਫੇਲ੍ਹ",
        "changecontentmodel-title-label": "ਸਫ਼ੇ ਦਾ ਸਿਰਲੇਖ",
        "changecontentmodel-reason-label": "ਕਾਰਨ:",
index e6af41d..7060c0b 100644 (file)
        "cascadeprotected": "Makaprotekta ya king pamag-edit ing bulung a ini uling kayabe ya king makatuking {{PLURAL:$1|bulung, a|bulung, a}} a maki proteksiun uling makasalangi ya ing  \"tuki-tuki\" o \"cascading\" option:\n$2",
        "namespaceprotected": "Ala kang paintulut a mag-edit bulung king pirinan lagyung (namespace a) '''$1'''.",
        "ns-specialprotected": "E la malyaring i-edit deng bulung a makabukud.",
-       "titleprotected": "Pinrotekta ne king pamaglalang [[User:$1|$1]] ining pamagat.\nIti ing binie nang sangkan: ''$2''.",
+       "titleprotected": "Pinrotekta ne king pamaglalang [[User:$1|$1]] ining pamagat.\nIti ing binie nang sangkan: <em>$2</em>.",
        "logouttext": "'''Maka logout na ka.'''\n\nMalyari mung isundu ing pamangamit mu king {{SITENAME}} a e ka papakilala, o malyari kang mag login pasibayu anting pareu o aliwang talagamit.\nApansingan mung mapalyaring makalto la pa murin deng aliwang bulung a bala mu maka login ka pa murin, anggang e me lilinisan (clear) ing kekang browser cache.",
        "yourname": "Lagyung talagamit (Username):",
        "yourpassword": "Kekang password:",
        "right-blockemail": "Sabatan ya king pamagparlang e-mail ing metung a talagamit",
        "right-hideuser": "Sabatan ya ing lagyungtalagamit (username), at isalikut ya king malda",
        "right-ipblock-exempt": "Lakton (bypass) la reng pamaniabat king IP: IP block, auto-block ampong range block",
-       "right-proxyunbannable": "Lakton la reng tambing a pamaniabat (automatic block) da reng proxy",
        "right-protect": "Alilan la reng sikan ning pamangambil (protection level) at i-edit la reng bulung a protektadu/makakambil",
        "right-editprotected": "I-edit la reng bulung a protektadu/makakambil (alang proteksiun a tuki-tuki o cascading protection)",
        "right-editinterface": "I-edit ya ing user interface",
        "right-userrights-interwiki": "I-edit la reng katulirang talagamit (user rights) da reng talagamit kareng aliwang karinan a wiki",
        "right-siteadmin": "Isara ya ampong ibusni ing database",
        "right-managechangetags": "Maglalang at magbura [[Special:Tags|tags]] ibat database",
+       "grant-createeditmovepage": "Alilan deng bulung (pages)",
        "newuserlogpage": "Tala ning pamaglalang talagamit (''User creation log'')",
        "rightslog": "Tala da reng katulirang talagamit (user rights log)",
        "rightslogtext": "Ini tala de reng miyalilan king katulirang talagamit (user rights).",
        "watchthisupload": "Banten ya ing bulung a ini",
        "filewasdeleted": "Ating simpan (file) a makanian lagyu a sadiang milulan, at mebura kaibat na nita.\nPakilawe me ing $1 bayu mu isundu ing pamaglulan kaniti.",
        "filename-bad-prefix": "Magumpisa ya king '''\"$1\"''' ing lagyu ning simpan (file) a kekang lululan. Iti metung yang lagyung tambing dang bibie deng digital camera, at ala yang kaugnayan ketang letratu.\nMamili ka sanang lagyung mas maglarawan keng kekang simpan.",
-       "upload-success-subj": "Melaus ing pamaglulan",
        "upload-proto-error": "E ustung protocol",
        "upload-proto-error-text": "Mangailangan yang URL a magumpisa king <code>http://</code> o <code>ftp://</code> ing pang-malaut a pamaglulan (remote upload).",
        "upload-file-error": "Pamagkamaling pangkilub (internal error)",
        "wlheader-showupdated": "'''Makapal''' la pangasulat deng bulung a miyalilan manibat aniang tauli mu lang pintalan.",
        "wlnote": "{{PLURAL:$1|Ing makatuki ing tauling|Ding makatuki ring tauling '''$1''' miyalilan}} kilub {{PLURAL:$2|ning tauling metung a oras|ding tauling '''$2''' oras}}.",
        "wlshowlast": "Pakit la reng tauling $1 oras $2 aldo",
-       "watchlistall2": "eganagana",
        "watchlist-hide": "Isalikut",
        "wlshowtime": "Ipakit ya ing tauli:",
        "wlshowhideminor": "deng malating edit",
        "rollbackfailed": "E melaus ing pamanurung",
        "cantrollback": "E malyaring ibalik itang miyalilan; bukud mung ing tawling minambag yang sinulat king bulung a ini.",
        "alreadyrolled": "E malyaring isubli king sadya ing tawling pamanalili ning [[:$1]]\na gewa nang [[User:$2|$2]] ([[User talk:$2|Talk]]); atin nang aliwang menalili o minyubli ketang bulung.\n\nI [[User:$3|$3]] ([[User talk:$3|Talk]]) ing tawling menalili.",
-       "editcomment": "Ini ing komentu king edit: \"''$1''\".",
+       "editcomment": "Ini ing komentu king edit: <em>$1</em>.",
        "revertpage": "Miurung la reng in-edit nang [[Special:Contributions/$2|$2]] ([[User talk:$2|Pamisabi-sabi]]);\nbinalik neng [[User:$1|$1]] king tauling bersion",
        "rollback-success": "Deng edit nang $1 a miurung;\nbinalik nong $2 king sadiang bersion.",
        "sessionfailure": "Balamu ating prublema king kekang login session;\nmituknang ya ing kimut (action) a ini bang milisia king session hijacking (pamaniamsam session).\nPakitimid me ing \"mibalik\" (\"back\") at luban meng pasibayu ing bulung a penibatan mu, potang kai subukan mung pasibayu.",
index ec42bff..608b0d1 100644 (file)
        "statistics-header-users": "Nummere vun Yuuser",
        "statistics-pages": "Bledder",
        "doubleredirects": "Zweefache Weiderleidinge",
-       "double-redirect-fixer": "Xqbot",
        "brokenredirects": "Kaputte Weiderleidinge",
        "brokenredirects-edit": "ennere",
        "brokenredirects-delete": "verwische",
        "contribslink": "Ardickele",
        "move-page": "„$1“ ziehe",
        "move-page-legend": "Blatt ziehe",
-       "movearticle": "Blatt ziehe:",
        "move-watch": "watsch des Blatt",
        "movepagebtn": "Blatt ziehe",
        "pagemovedsub": "Blatt iss gezoge warre",
index c39ce4c..5c0ab95 100644 (file)
        "createacct-realname": "Wie heschd (mugschds awwa nedd)",
        "createaccountreason": "Grund:",
        "createacct-reason": "Bgrindung",
-       "createacct-captcha": "Sischahaidsbriefung",
-       "createacct-imgcaptcha-ph": "Gebbde Tegschd oi, wu owwe seje duschd",
        "createacct-submit": "Leschda ä Kondo oa",
        "createacct-another-submit": "Leschda ä onnares Kondo oa",
        "createacct-benefit-heading": "{{SITENAME}} wead vun Laid wie dia gmachd.",
        "recentchanges-label-bot": "Ännarunge duaschn Bod",
        "recentchanges-label-unpatrolled": "Die Ännarung isch noch nedd iwwabriefd worre",
        "recentchanges-label-plusminus": "Ännarung vunde Saidegreeß in Bytes",
-       "recentchanges-legend-heading": "'''Bildtegschd:'''",
+       "recentchanges-legend-heading": "<strong>Bildtegschd:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (gugg a uff [[Special:NewPages|Lischd vun naije Saide]])",
        "rcnotefrom": "Unne sinn Ännarunge said <strong>$2<-strong> (bis <strong>$1<-strong>).",
        "rclistfrom": "Zaisch die ledschde Ännarunge ab $3 $2",
        "unusedcategoriestext": "Die Sachgrubb hodds, a wonnse vun känna onnare Said odda Sachgrubb gnumme werd.",
        "pager-newer-n": "{{PLURAL:$1|negschd 1|negschd $1}}",
        "pager-older-n": "{{PLURAL:$1|vorisch 1|vorische $1}}",
+       "apisandbox-api-disabled": "Die API isch uffm Wiki abgschdelld worre.",
        "booksources": "Buchgwelle",
        "booksources-search-legend": "Noch Buchgwelle gugge",
        "booksources-search": "Gugg",
        "movepagetext": "Midm Formad konnschd ä Said en naije Nome gewwe, debai werrem alli alde Ausgawe uffde nai Nome vaschowe.\nAusm alde Nome werd e Waidalaidungssaid zum naije Nome.\nWaidalaidungssaide, wu uffde ald Nome umlaide dun, konnschd vun allä uffde naischde Schdond bringe.\nWonndes ned willschd, guggschd uff [[Special:DoubleRedirects|dobbldi]] odda [[Special:BrokenRedirects|kabuddi Waidalaidunge]].\nSoasch dfia, dass Linggs waida uffdie rischdische Saide fiehan.\n\nGebb Achd, dass die Said '''ned''' vaschowe werd, wonns schunä Said midm naije Nome hod, außa wonnse lea isch odda e Waidalaidung.\nDes heeßd, Du konnschd ke Said, wus schun gibbd, iwwaschraiwe.\n\n'''BAßMAUFF!'''\nDes isch e wischdischi Ännarung fa e Said un konn zimlisch uuerwaaded soi fa wischdischi Saide;\nmach des bloß, wonn die Folsche vunde Maßnohm a abschedze konnschd.",
        "movepagetext-noredirectfixer": "Middm Foamula unne koschd die Said nai bnenne, wonnse midde gonse Gschischd uffn naije Noame bwesche duschd.\nDe ald Tidl weadä Said midd änna Waidalaidung uff die Said werre.\nBass uff unn gugg uff [[Special:DoubleRedirects|dobbelde]] odda [[Special:BrokenRedirects|kabudde Waidalaidunge]]. Du bischd dvoa vaondwoadlisch, dass Ling'gs uffs rischdische zaische dun.\n\nBass uff, die Said wead <strong>nedd</strong> vaschowe, wonns schun ä Said gewwe dud, wude selwe Noame hodd, aussa, s'isch ä Waidalaidung ohne Gschischd.\nDes heesd, wonnän Fehla gmschd hoschd, konschd ä Said zrigg. Awwa konschd kä Said iwwaschraiwe, wus schun hodd.\n\n<strong>Bassma uff, Beaschl!</strong>\nDes konn schlimme Folsche fa b'liewde Saide hawwe. Saida wiaglisch sischa, dass a alles was do due wilschd, a vaschdonne hoschd. Odda losses sunschd bessa soi.",
        "movepagetalktext": "D Dischbediersaid werd ach mid verschowe, '''ausser:'''\n* Du verschiebsch die Saide in e annere Namensraum, odder\n* s gebbt schun e Dischbediersaid mi dem Name, orrer\n* Du wählsch unne d Option, se nid z verschiewe.\n\nIn denne Fäll misst mer d Dischbediersaid vun Hand kopiere.",
-       "movearticle": "Said vaschiewe:",
        "newtitle": "Zum naije Didl:",
        "move-watch": "Die Said beowachde",
        "movepagebtn": "Said vaschiewe",
        "movelogpage": "Vaschiewungs-Logbuch",
        "movereason": "Grund:",
        "revertmove": "Zurigg vaschiewe",
-       "delete_and_move": "Lesche un Verschiewe",
        "delete_and_move_confirm": "Ja, Said lesche",
        "export": "Saide rausgewwe",
        "exportcuronly": "Bloß die ledschd Ännarung vunde Said exboadiere",
index f2e641b..0a24d1b 100644 (file)
@@ -81,7 +81,8 @@
                        "Doctore",
                        "PiotrAntosz",
                        "The Polish",
-                       "Expert3222"
+                       "Expert3222",
+                       "Mateuszek045"
                ]
        },
        "tog-underline": "Podkreślenie linków:",
        "myprivateinfoprotected": "Nie masz uprawnień do edytowania swoich prywatnych danych.",
        "mypreferencesprotected": "Nie masz uprawnień do edytowania swoich preferencji.",
        "ns-specialprotected": "Stron specjalnych nie można edytować.",
-       "titleprotected": "Utworzenie strony o tej nazwie zostało zablokowane przez [[User:$1|$1]].\nUzasadnienie blokady: ''$2''.",
+       "titleprotected": "Utworzenie strony o tej nazwie zostało zablokowane przez [[User:$1|$1]].\nUzasadnienie blokady: <em>$2</em>.",
        "filereadonlyerror": "Nie można zmodyfikować pliku „$1”, ponieważ repozytorium plików „$2” jest w trybie tylko do odczytu.\n\nBlokujący go administrator systemu podał następujący powód: „$3”.",
        "invalidtitle-knownnamespace": "Nieprawidłowa nazwa w obszarze nazw \"$2\" o treści \"$3\"",
        "invalidtitle-unknownnamespace": "Nieprawidłowa nazwa z nieznaną liczbą przestrzeni nazw  $1  o treści \"$2\"",
        "nocookieslogin": "{{SITENAME}} wykorzystuje ciasteczka do przechowywania informacji o zalogowaniu się przez użytkownika.\nMasz obecnie w przeglądarce wyłączoną obsługę ciasteczek.\nSpróbuj ponownie po jej włączeniu.",
        "nocookiesfornew": "Konto użytkownika nie zostało utworzone, ponieważ nie można było potwierdzić jego źródła.\nUpewnij się, że masz włączoną obsługę ciasteczek, przeładuj stronę i spróbuj ponownie.",
        "noname": "To nie jest poprawna nazwa użytkownika.",
-       "loginsuccesstitle": "Zalogowano pomyślnie",
+       "loginsuccesstitle": "Zalogowano",
        "loginsuccess": "'''{{GENDER:|Zalogowałeś się|Zalogowałaś się|Zalogowano}} do {{GRAMMAR:D.lp|{{SITENAME}}}} jako „$1”.'''",
        "nosuchuser": "Brak użytkownika o nazwie „$1”.\nW nazwie użytkownika ma znaczenie wielkość znaków.\nSprawdź pisownię lub [[Special:UserLogin/signup|utwórz nowe konto]].",
        "nosuchusershort": "Brak użytkownika o nazwie „$1”.\nSprawdź poprawność pisowni.",
        "newpassword": "Nowe hasło:",
        "retypenew": "Powtórz nowe hasło:",
        "resetpass_submit": "Ustaw hasło i zaloguj się",
-       "changepassword-success": "Twoje hasło zostało pomyślnie zmienione!",
+       "changepassword-success": "Twoje hasło zostało zmienione!",
        "changepassword-throttled": "Ostatnio zbyt wiele razy próbowałeś zalogować się na to konto.\nOdczekaj $1, zanim ponowisz próbę.",
+       "botpasswords": "Hasła bota",
        "botpasswords-label-appid": "Nazwa bota:",
        "botpasswords-label-create": "Utwórz",
        "botpasswords-label-update": "Aktualizuj",
        "botpasswords-label-cancel": "Anuluj",
        "botpasswords-label-delete": "Usuń",
        "botpasswords-label-resetpassword": "Zresetuj hasło",
+       "botpasswords-label-grants-column": "Przyznane",
        "resetpass_forbidden": "Hasła nie mogą zostać zmienione",
        "resetpass-no-info": "Musisz być zalogowany, by uzyskać bezpośredni dostęp do tej strony.",
        "resetpass-submit-loggedin": "Zmień hasło",
        "newarticle": "(Nowy)",
        "newarticletext": "Brak strony o tym tytule.\nJeśli chcesz ją utworzyć, wpisz treść strony w poniższym polu (więcej informacji odnajdziesz [$1 na stronie pomocy]).\nJeśli utworzenie nowej strony nie było Twoim zamiarem, wciśnij ''Wstecz'' w swojej przeglądarce.",
        "anontalkpagetext": "---- ''To jest strona dyskusji anonimowego użytkownika – takiego, który nie ma jeszcze swojego konta lub nie chce go w tej chwili używać.\nBy go identyfikować, używamy adresów IP.\nJednak adres IP może być współdzielony przez wielu użytkowników.\nJeśli jesteś anonimowym użytkownikiem i uważasz, że zamieszczone tu komentarze nie są skierowane do Ciebie, [[Special:UserLogin/signup|utwórz konto]] lub [[Special:UserLogin|zaloguj się]] – dzięki temu unikniesz w przyszłości podobnych nieporozumień.''",
-       "noarticletext": "Brak strony o tym tytule.\nMożesz [[Special:Search/{{PAGENAME}}|poszukać „{{PAGENAME}}” na innych stronach]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} przeszukać rejestr] lub [{{fullurl:{{FULLPAGENAME}}|action=edit}} utworzyć tę stronę]</span>.",
+       "noarticletext": "Obecnie ta strona nie ma zawartości.\nMożesz [[Special:Search/{{PAGENAME}}|wyszukać ten tytuł na innych stronach]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} przeszukać rejestr] \nlub [{{fullurl:{{FULLPAGENAME}}|action=edit}} utworzyć tę stronę]</span>.",
        "noarticletext-nopermission": "Ta strona nie posiada jeszcze zawartości.\nMożesz [[Special:Search/{{PAGENAME}}|wyszukać ten tytuł]] w treści innych stron\nlub <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} przeszukać powiązane rejestry]</span>, ale nie masz uprawnień do utworzenia tej strony",
        "missing-revision": "Wersja #$1 strony \"{{FULLPAGENAME}}\" nie istnieje.\n\nZazwyczaj jest to spowodowane przestarzałym linkiem do usuniętej strony. Powód usunięcia znajduje się w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejestrze].",
        "userpage-userdoesnotexist": "Użytkownik „<nowiki>$1</nowiki>” nie jest zarejestrowany.\nUpewnij się, czy na pewno zamierza{{GENDER:|łeś|łaś|sz}} utworzyć lub zmodyfikować właśnie tę stronę.",
        "previewnote": "<strong>To jest tylko podgląd.</strong>\nZmiany nie zostały jeszcze zapisane!",
        "continue-editing": "Przejdź do pola edycji",
        "previewconflict": "Podgląd odnosi się do tekstu z górnego pola edycji. Tak będzie wyglądać strona, jeśli zdecydujesz się ją zapisać.",
-       "session_fail_preview": "'''Uwaga! Serwer nie może przetworzyć tej edycji z powodu utraty danych sesji.\nSpróbuj jeszcze raz.\nJeśli to nie pomoże – [[Special:UserLogout|wyloguj się]] i zaloguj ponownie.'''",
-       "session_fail_preview_html": "'''Uwaga! Serwer nie może przetworzyć tej edycji z powodu utraty danych sesji.'''\n\n''Ponieważ w {{GRAMMAR:MS.lp|{{SITENAME}}}} włączona została opcja „surowy HTML”, podgląd został ukryty w celu zabezpieczenia przed atakami z użyciem JavaScriptu.''\n\n'''Jeśli jest to uprawniona próba dokonania edycji, spróbuj jeszcze raz.\nJeśli to nie pomoże – [[Special:UserLogout|wyloguj się]] i zaloguj ponownie.'''",
+       "session_fail_preview": "Uwaga! Serwer nie może przetworzyć tej edycji z powodu utraty danych sesji.\n\nByć może doszło do wylogowania. <strong>Proszę, upewnij się, że nadal jesteś zalogowany (zalogowana), i wtedy spróbuj ponownie.</strong>\nJeśli to nie pomoże – spróbuj [[Special:UserLogout|wylogować się]] i zalogować ponownie, a także upewnij się, że twoja przeglądarka akceptuje ciasteczka z tej witryny.",
+       "session_fail_preview_html": "Uwaga! Serwer nie może przetworzyć tej edycji z powodu utraty danych sesji.\n\n<em>Ponieważ w {{GRAMMAR:MS.lp|{{SITENAME}}}} włączona została opcja „surowy HTML”, podgląd został ukryty w celu zabezpieczenia przed atakami z użyciem JavaScriptu.</em>\n\n<strong>Jeśli jest to uprawniona próba dokonania edycji, spróbuj jeszcze raz.<strong>\nJeśli to nie pomoże – spróbuj [[Special:UserLogout|wylogować się]] i zalogować ponownie, a także upewnij się, że twoja przeglądarka akceptuje ciasteczka z tej witryny.",
        "token_suffix_mismatch": "'''Twoja edycja została odrzucona, ponieważ twój klient pomieszał znaki interpunkcyjne w żetonie edycyjnym.\nTwoja edycja została odrzucona by zapobiec zniszczeniu tekstu strony.\nTakie problemy zdarzają się w wypadku korzystania z wadliwych anonimowych sieciowych usług proxy.'''",
        "edit_form_incomplete": "'''Niektóre informacje wprowadzone do formularza nie dotarły do serwera. Upewnij się, że wprowadzone dane nie uległy uszkodzeniu i spróbuj ponownie.'''",
        "editing": "Edytujesz $1",
        "undo-summary-username-hidden": "Anulowanie wersji $1 autorstwa ukrytego użytkownika",
        "cantcreateaccounttitle": "Nie można utworzyć konta",
        "cantcreateaccount-text": "Tworzenie konta z tego adresu IP ('''$1''') zostało zablokowane przez [[User:$3|$3]].\n\nPodany przez $3 powód to ''$2''",
-       "cantcreateaccount-range-text": "Tworzenie konta z adresów IP w zakresie '''$1''', który zawiera i twój adres IP ('''$4'''), zostało zablokowane przez [[User:$3|$3]].\n\nPodany przez $3 powód to ''$2''",
+       "cantcreateaccount-range-text": "Tworzenie konta z adresów IP w zakresie <strong>$1</strong>, zawierającego twój adres IP (<strong>$4</strong>), zostało zablokowane przez [[User:$3|$3]].\n\nPodany przez $3 powód to <em>$2</em>",
        "viewpagelogs": "Zobacz rejestry operacji dla tej strony",
        "nohistory": "Ta strona nie ma swojej historii edycji.",
        "currentrev": "Aktualna wersja",
        "revdelete-unsuppress": "Wyłącz utajnianie dla odtwarzanej historii zmian",
        "revdelete-log": "Powód:",
        "revdelete-submit": "Zaakceptuj dla {{PLURAL:$1|wybranej|wybranych}} wersji",
-       "revdelete-success": "'''Uaktualniono widoczność wersji.'''",
+       "revdelete-success": "Uaktualniono widoczność wersji.",
        "revdelete-failure": "'''Widoczność wersji nie może zostać uaktualniona – '''\n$1",
-       "logdelete-success": "'''Zmieniono widoczność zdarzeń.'''",
+       "logdelete-success": "Zmieniono widoczność zdarzeń.",
        "logdelete-failure": "'''Widoczność rejestru nie może zostać ustawiona – '''\n$1",
        "revdel-restore": "zmień widoczność",
        "pagehist": "Historia edycji strony",
        "gender-female": "kobieta",
        "prefs-help-gender": "Podanie płci nie jest obowiązkowe. Jeśli zdecydujesz się ją określić, oprogramowanie dostosuje do niej interfejs. Informacja o Twojej płci będzie widoczna dla wszystkich.",
        "email": "E‐mail",
-       "prefs-help-realname": "Imię i nazwisko jest opcjonalne.\nJeśli je podasz, to może być stosowane w celu przypisania Twojej pracy.",
+       "prefs-help-realname": "Imię i nazwisko jest opcjonalne.\nJeśli zdecydujesz się je podać, zostaną użyte, by udokumentować Twoje autorstwo.",
        "prefs-help-email": "Podanie adresu e‐mail nie jest obowiązkowe, lecz jest konieczne do zresetowania zapomnianego hasła.",
        "prefs-help-email-others": "Możesz również umożliwić innym użytkownikom wysłanie do Ciebie e‐maila poprzez Twoją stronę użytkownika lub stronę dyskusji (bez ujawniania Twojego adresu).",
        "prefs-help-email-required": "Wymagany jest adres e‐mail.",
        "userrights-changeable-col": "Grupy, które możesz wybrać",
        "userrights-unchangeable-col": "Grupy, których nie możesz wybrać",
        "userrights-conflict": "Konflikt zmiany uprawnień użytkownika! Proszę sprawdzić i potwierdzić swoje zmiany.",
-       "userrights-removed-self": "Pomyślnie odebrałeś sobie uprawnienia. W związku z tym nie masz już dostępu do tej strony.",
+       "userrights-removed-self": "Odebrałeś sobie uprawnienia. W związku z tym nie masz już dostępu do tej strony.",
        "group": "Grupa:",
        "group-user": "Użytkownicy",
        "group-autoconfirmed": "Automatycznie zatwierdzeni użytkownicy",
        "grant-uploadfile": "Przesyłanie nowych plików",
        "grant-basic": "Podstawowe uprawnienia",
        "grant-viewdeleted": "Wyświetlanie usuniętych plików i stron",
-       "grant-viewmywatchlist": "Zobacz listę obserwowanych",
+       "grant-viewmywatchlist": "Zobacz swoją listę obserwowanych",
        "newuserlogpage": "Nowi użytkownicy",
        "newuserlogpagetext": "To jest rejestr ostatnio utworzonych kont użytkowników",
        "rightslog": "Uprawnienia",
        "recentchanges-label-bot": "Ta edycja została wykonana przez bota",
        "recentchanges-label-unpatrolled": "Ta edycja nie została jeszcze sprawdzona",
        "recentchanges-label-plusminus": "Zmieniony rozmiar strony (liczba bajtów)",
-       "recentchanges-legend-heading": "'''Legenda:'''",
+       "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (zobacz też [[Special:NewPages|listę nowych stron]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Pokaż",
        "backend-fail-read": "Nie można odczytać pliku $1.",
        "backend-fail-create": "Nie można utworzyć pliku $1.",
        "backend-fail-maxsize": "Nie udało zapisać pliku $1 ponieważ jest on większy niż {{PLURAL:$2|jeden bajt| $2 bajty| $2 bajtów}}.",
-       "backend-fail-readonly": "Interfejs magazynowania \"$1\" jest obecnie tylko do odczytu. Powód: \"$2\"",
+       "backend-fail-readonly": "Interfejs magazynowania „$1” jest obecnie tylko do odczytu. Powód: <em>$2</em>",
        "backend-fail-synced": "Plik \"$1\" jest w niespójnym stanie w ramach wewnętrznych funkcji magazynowania",
        "backend-fail-connect": "Nie można nawiązać połączenia do wewnętrznych funkcji magazynowania \"$1\".",
        "backend-fail-internal": "Wystąpił nieznany błąd w wewnętrznych funkcjach magazynowania \"$1\".",
        "uploadstash-summary": "Ta strona umożliwia dostęp do przesłanych lub właśnie przesyłanych plików, ale jeszcze nie opublikowanych na wiki. Pliki widzi wyłącznie użytkownik, które je przesłał.",
        "uploadstash-clear": "Wyczyść schowek z plikami",
        "uploadstash-nofiles": "Nie masz żadnych ukrytych plików.",
-       "uploadstash-badtoken": "Operacja nie powiodła się. Możliwą przyczyną jest, że Twoje upoważnienie do edytowania wygasło. Spróbuj ponownie.",
+       "uploadstash-badtoken": "Operacja nie powiodła się. Być może Twoje upoważnienie do edytowania wygasło. Spróbuj ponownie.",
        "uploadstash-errclear": "Czyszczenie plików nie powiodło się.",
        "uploadstash-refresh": "Odśwież listę plików",
        "invalid-chunk-offset": "Nieprawidłowe przesunięcie fragmentu",
        "apisandbox-jsonly": "Do korzystania z brudnopisu API wymagany jest JavaScript.",
        "apisandbox-api-disabled": "API jest wyłączone na tej stronie.",
        "apisandbox-intro": "Użyj tej strony do eksperymentowania z <strong>serwisem API MediaWiki</strong>.\nWięcej szczegółów na temat wykorzystywania API można znaleźć w [[mw:API:Main page|dokumentacji API]]. Przykład: [//www.mediawiki.org/wiki/API#A_simple_example pobranie zawartości strony głównej]. Wybierz akcję, by zobaczyć więcej przykładów.\n\nZwróć uwagę, że chociaż jest to brudnopis, to działania, które można przeprowadzać na tej stronie, mogą zmienić wiki.",
+       "apisandbox-fullscreen": "Rozszerz panel",
+       "apisandbox-fullscreen-tooltip": "Rozszerz panel środowiska testowego, aby zajmował całe okno przeglądarki.",
        "apisandbox-unfullscreen": "Pokaż stronę",
+       "apisandbox-unfullscreen-tooltip": "Zmniejsz pasek środowiska testowego, aby linki nawigacyjne MediaWiki stały się dostępne.",
        "apisandbox-submit": "Wykonaj zapytanie",
        "apisandbox-reset": "Wyczyść",
        "apisandbox-retry": "Ponów próbę",
+       "apisandbox-loading": "Ładowanie informacji o module API „$1”…",
        "apisandbox-no-parameters": "Ten moduł API nie posiada parametrów.",
        "apisandbox-helpurls": "Linki pomocy",
        "apisandbox-examples": "Przykłady",
        "apisandbox-dynamic-parameters-add-label": "Dodaj parametr:",
        "apisandbox-dynamic-parameters-add-placeholder": "Nazwa parametru",
        "apisandbox-dynamic-error-exists": "Parametr o nazwie „$1” już istnieje.",
+       "apisandbox-deprecated-parameters": "Przestarzałe parametry",
+       "apisandbox-fetch-token": "Automatycznie uzupełnij token",
        "apisandbox-submit-invalid-fields-title": "Niektóre pola są nieprawidłowe",
        "apisandbox-submit-invalid-fields-message": "Popraw zaznaczone pola i spróbuj ponownie.",
        "apisandbox-results": "Wyniki",
+       "apisandbox-sending-request": "Wysyłanie zapytania API…",
        "apisandbox-loading-results": "Pobieranie wyników API...",
        "apisandbox-request-url-label": "URL zapytania:",
        "apisandbox-request-time": "Czas przetwarzania zapytania: {{PLURAL:$1|$1 ms}}",
+       "apisandbox-results-fixtoken": "Popraw token i wyślij ponownie",
        "apisandbox-alert-page": "Pola na tej stronie są nieprawidłowe.",
        "apisandbox-alert-field": "Wartość tego pola jest nieprawidłowa.",
        "booksources": "Książki",
        "listgrouprights-namespaceprotection-header": "Ograniczenia przestrzeni nazw",
        "listgrouprights-namespaceprotection-namespace": "Przestrzeń nazw",
        "listgrouprights-namespaceprotection-restrictedto": "Uprawnienia pozwalające użytkownikom na edytowanie",
+       "listgrants": "Uprawnienia",
+       "listgrants-grant": "Uprawnienie",
        "listgrants-rights": "Uprawnienie",
        "trackingcategories": "Śledzenie kategorii",
        "trackingcategories-summary": "Ta strona zawiera listę kategorii monitorujących wypełnianych automatycznie przez oprogramowanie MediaWiki. Nazwy kategorii można zmienić edytując odpowiednie komunikaty systemowe znajdujące się w przestrzeni nazw {{ns:8}}.",
        "delete-toobig": "Ta strona ma bardzo długą historię edycji – ponad $1 {{PLURAL:$1|zmianę|zmiany|zmian}}.<br />\nUsuwanie 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 />\nBądź ostrożny, ponieważ usunięcie jej może spowodować zakłócenia w pracy {{GRAMMAR:D.lp|{{SITENAME}}}}.",
        "deleteprotected": "Nie możesz usunąć tej strony, ponieważ została zabezpieczona.",
-       "deleting-backlinks-warning": "''' Uwaga:''' Do strony, którą masz zamiar usunąć, odwołują się [[Special:WhatLinksHere/{{FULLPAGENAME}}|inne strony]].",
+       "deleting-backlinks-warning": "<strong>Uwaga:</strong> Do strony, którą masz zamiar usunąć, odwołują się [[Special:WhatLinksHere/{{FULLPAGENAME}}|inne strony]].",
        "rollback": "Cofnij edycję",
        "rollbacklink": "cofnij",
        "rollbacklinkcount": "cofnij $1 {{PLURAL:$1|edycję|edycje|edycji}}",
        "rollbackfailed": "Nie udało się cofnąć zmiany",
        "cantrollback": "Nie można cofnąć edycji tego autora, ponieważ jest jedynym autorem tej strony.",
        "alreadyrolled": "Nie można dla strony [[:$1|$1]] cofnąć ostatniej zmiany, którą wykonał [[User:$2|$2]] ([[User talk:$2|dyskusja]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]).\nKtoś inny zdążył już to zrobić lub wprowadził własne poprawki do treści strony.\n\nAutorem ostatniej zmiany jest teraz [[User:$3|$3]] ([[User talk:$3|dyskusja]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Edycję opisał „''$1''”.",
+       "editcomment": "Edycję opisał: <em>$1</em>.",
        "revertpage": "Wycofano edycje użytkownika [[Special:Contributions/$2|$2]] ([[User talk:$2|dyskusja]]). Autor przywróconej wersji to [[User:$1|$1]].",
        "revertpage-nouser": "Wycofano edycje ukrytego użytkownika. Autor przywróconej wersji to {{GENDER:$1|[[User:$1|$1]]}}.",
        "rollback-success": "Wycofano edycje użytkownika $1;\nprzywrócono ostatnią wersję autorstwa $2.",
        "changecontentmodel-title-label": "Tytuł strony",
        "changecontentmodel-model-label": "Nowy model zawartości",
        "changecontentmodel-reason-label": "Powód:",
+       "changecontentmodel-submit": "Zmień",
        "changecontentmodel-success-title": "Model zawartości został zmieniony",
        "changecontentmodel-success-text": "Typ zawartości [[:$1]] został zmieniony.",
        "changecontentmodel-cannot-convert": "Zawartość [[:$1]] nie może być przekształcona do typu $2.",
        "move-leave-redirect": "Pozostaw przekierowanie pod dotychczasowym tytułem.",
        "protectedpagemovewarning": "'''UWAGA!''' Ponieważ strona została zabezpieczona, tylko użytkownicy z uprawnieniami administratora mogą zmienić jej nazwę.\nOstatni wpis z rejestru jest pokazany poniżej.",
        "semiprotectedpagemovewarning": "'''Uwaga!''' Ponieważ strona została zabezpieczona, tylko zarejestrowani użytkownicy mogą zmienić jej nazwę.\nOstatni wpis z rejestru jest pokazany poniżej.",
-       "move-over-sharedrepo": "== Plik istnieje ==\n[[:$1]] istnieje we wspólnym repozytorium. Zmiana nazwy pliku na tę spowoduje przesłonięcie współdzielonego pliku.",
+       "move-over-sharedrepo": "[[:$1]] istnieje we wspólnym repozytorium. Zmiana nazwy pliku na tę spowoduje przesłonięcie współdzielonego pliku.",
        "file-exists-sharedrepo": "Plik o wybranej nazwie istnieje we wspólnym repozytorium.\nWybierz inną nazwę.",
        "export": "Eksport stron",
        "exporttext": "Możesz wyeksportować treść i historię edycji jednej strony lub zestawu stron w formacie XML.\nWyeksportowane informacje można później zaimportować do innej wiki, działającej na oprogramowaniu MediaWiki, korzystając ze [[Special:Import|strony importu]].\n\nWyeksportowanie wielu stron wymaga wpisania poniżej tytułów stron po jednym tytule w wierszu oraz określenia, czy ma zostać wyeksportowana bieżąca czy wszystkie wersje strony z opisami edycji lub też tylko bieżąca wersja z opisem ostatniej edycji.\n\nMożesz również użyć linku, np. [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] dla strony „[[{{MediaWiki:Mainpage}}]]”.",
        "export-download": "Zapisz do pliku",
        "export-templates": "Dołącz szablony",
        "export-pagelinks": "Dołącz linkowane strony na głębokości:",
+       "export-manual": "Dodaj strony ręcznie:",
        "allmessages": "Komunikaty systemowe",
        "allmessagesname": "Nazwa",
        "allmessagesdefault": "Tekst domyślny",
        "import-nonewrevisions": "Nie zaimportowano żadnych wersji (wszystkie były już obecne albo pominięte z powodu błędów).",
        "xml-error-string": "$1 linia $2, kolumna $3 (bajt $4): $5",
        "import-upload": "Prześlij dane w formacie XML",
-       "import-token-mismatch": "Utracono dane sesji. Proszę spróbować ponownie.",
+       "import-token-mismatch": "Utracono dane sesji. \n\nByć może doszło do wylogowania. <strong>Proszę, upewnij się, że nadal jesteś zalogowany (zalogowana), i wtedy spróbuj ponownie.</strong>\nJeśli to nie pomoże – spróbuj [[Special:UserLogout|wylogować się]] i zalogować ponownie, a także upewnij się, że twoja przeglądarka akceptuje ciasteczka z tej witryny.",
        "import-invalid-interwiki": "Nie można importować z podanej wiki.",
        "import-error-edit": "Strona „$1” nie została zaimportowana, ponieważ nie jesteś uprawniony do jej edytowania.",
        "import-error-create": "Strona „$1” nie została zaimportowana, ponieważ nie jesteś uprawniony do jej utworzenia.",
        "lastmodifiedatby": "Ostatnia edycja tej strony: $2, $1 (autor zmian: $3)",
        "othercontribs": "Inni autorzy: $1.",
        "others": "inni",
-       "siteusers": "{{PLURAL:$2|użytkownik|użytkownicy}} {{GRAMMAR:D.lp|{{SITENAME}}}}{{PLURAL:$2||:}} $1",
+       "siteusers": "{{PLURAL:$2|użytkownik |użytkownicy}}{{GRAMMAR:D.lp|{{SITENAME}}}}{{PLURAL:$2||:}} $1",
        "anonusers": "{{PLURAL:$2|niezalogowany użytkownik|niezalogowani użytkownicy}} {{GRAMMAR:D.lp|{{SITENAME}}}}{{PLURAL:$2||:}} $1",
        "creditspage": "Autorzy",
        "nocredits": "Brak informacji o autorach tej strony.",
        "pageinfo-category-files": "Liczba plików",
        "markaspatrolleddiff": "oznacz edycję jako „sprawdzoną”",
        "markaspatrolledtext": "Oznacz tę stronę jako „sprawdzoną”",
+       "markaspatrolledtext-file": "Oznacz tę wersję pliku jako „sprawdzoną”",
        "markedaspatrolled": "Sprawdzone",
        "markedaspatrolledtext": "Wybrana wersja [[:$1]] została oznaczona jako „sprawdzona”.",
        "rcpatroldisabled": "Wyłączono funkcję patrolowania na stronie ostatnich zmian",
        "newimages-legend": "Filtruj",
        "newimages-label": "Nazwa pliku (lub jej fragment):",
        "newimages-showbots": "Pokaż pliki przesłane przez boty",
+       "newimages-hidepatrolled": "Ukryj sprawdzone pliki",
        "noimages": "Brak plików do pokazania.",
        "ilsubmit": "Szukaj",
        "bydate": "według daty",
        "version-libraries-license": "Licencja",
        "version-libraries-description": "Opis",
        "version-libraries-authors": "Autorzy",
-       "redirect": "Przekierowanie według pliku, użytkownika, strony lub identyfikatora wersji",
+       "redirect": "Przekierowanie z identyfikatora pliku, użytkownika, strony, wersji lub wpisu rejestru",
        "redirect-legend": "Przekieruj do pliku lub strony",
        "redirect-summary": "Ta strona specjalna przekierowuje do: pliku (o podanej nazwie), do strony (o podanym numerze wersji lub identyfikatorze strony) albo do strony użytkownika (o podanym identyfikatorze numerycznym). Sposób użycia: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] albo [[{{#Special:Redirect}}/user/101]].",
        "redirect-submit": "Przejdź",
        "tags-delete-not-allowed": "Znaczniki określone przez rozszerzenie nie mogą zostać usunięte, chyba że dane rozszerzenie jawnie na to zezwala.",
        "tags-delete-not-found": "Znacznik „$1” nie istnieje.",
        "tags-delete-too-many-uses": "Znacznik „$1” jest stosowany w więcej niż {{PLURAL:$2|jednej wersji|$2 wersjach}}, co oznacza, że nie może być usunięty.",
-       "tags-delete-warnings-after-delete": "Znacznik „$1” został pomyślnie usunięty, ale {{PLURAL:$2|otrzymano następujące ostrzeżenie|otrzymano następujące ostrzeżenia}}:",
+       "tags-delete-warnings-after-delete": "Znacznik „$1” został usunięty, ale {{PLURAL:$2|otrzymano następujące ostrzeżenie|otrzymano następujące ostrzeżenia}}:",
        "tags-activate-title": "Aktywacja znacznika",
        "tags-activate-question": "Zamierzasz aktywować znacznik „$1”.",
        "tags-activate-reason": "Powód:",
        "tags-edit-revision-legend": "Dodaj lub usuń znaczniki {{PLURAL:$1|w tej wersji|we wszystkich $1 wersjach}}",
        "tags-edit-logentry-legend": "Dodaj lub usuń znaczniki {{PLURAL:$1|w tym wpisie|we wszystkich $1 wpisach}} w rejestrze",
        "tags-edit-existing-tags": "Istniejące znaczniki:",
-       "tags-edit-existing-tags-none": "''Brak''",
+       "tags-edit-existing-tags-none": "<em>Brak</em>",
        "tags-edit-new-tags": "Nowe znaczniki:",
        "tags-edit-add": "Dodaj te znaczniki:",
        "tags-edit-remove": "Usuń te znaczniki:",
        "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-stashedfilenotfound": "Nie odnaleziono pliku zapasowego podczas próby jego pobrania z archiwum.",
+       "api-error-stashedfilenotfound": "Nie odnaleziono pliku podczas próby pobrania go ze schowka.",
        "api-error-stashpathinvalid": "Ścieżka do pliku zapasowego jest błędna.",
        "api-error-stashfilestorage": "Wystąpił błąd podczas przesyłania pliku do archiwum.",
        "api-error-stashzerolength": "Serwer nie może zapisać pliku zapasowego do archiwum, gdyż ma on zerową długość.",
        "expand_templates_generate_xml": "Pokaż drzewo analizatora składni w formacie XML",
        "expand_templates_generate_rawhtml": "Pokaż surowy HTML",
        "expand_templates_preview": "Podgląd",
-       "expand_templates_preview_fail_html": "<em>Ponieważ {{SITENAME}} ma włączony surowy kod HTML i zaistniała strata danych z sesji, podgląd jest ukryty jako zabezpieczenie przed atakiem JavaScript.</em>\n\n<strong>Jeśli to jest próba słusznego podglądu, proszę spróbować ponownie.</strong>\nJeśli to nadal nie działa, spróbuj [[Special:UserLogout|wylogować się]] i zalogować się z powrotem.",
+       "expand_templates_preview_fail_html": "<em>Ponieważ {{SITENAME}} ma włączony surowy kod HTML i zaistniała strata danych z sesji, podgląd jest ukryty jako zabezpieczenie przed atakiem JavaScript.</em>\n\n<strong>Jeśli to jest próba słusznego podglądu, proszę spróbować ponownie.</strong>\nJeśli to nie pomoże – spróbuj [[Special:UserLogout|wylogować się]] i zalogować ponownie, a także upewnij się, że twoja przeglądarka akceptuje ciasteczka z tej witryny.",
        "pagelanguage": "Zmiana języka strony",
        "pagelang-name": "Strona",
        "pagelang-language": "Język",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|zmienił|zmieniła}} język strony $3 z „$4” na „$5”.",
        "default-skin-not-found": "Ups! Domyślna skórka dla Twojej wiki, zdefiniowana jako <code dir=\"ltr\">$wgDefaultSkin</code> jako <code>$1</code>, nie jest dostępna.\n\nTwoja instalacja, jak się wydaje, zawiera {{PLURAL:$4|następującą skórkę|następujące skórki}}. Zobacz [https://www.mediawiki.org/wiki/Manual:Skin_configuration/pl Podręcznik:Konfiguracja skórki] z informacjami o tym, jak {{PLURAL:$4|ją włączyć|je włączyć i wybrać domyślną}}.\n\n$2\n\n; Jeśli zainstalowałeś właśnie MediaWiki:\n: Prawdopodobnie zrobiłeś to z Git lub bezpośrednio z kodu źródłowego z wykorzystaniem innej metody. Wtedy jest to możliwe. Spróbuj zainstalować niektóre skórki z [https://www.mediawiki.org/wiki/Category:All_skins/pl folderu skórek serwisu mediawiki.org]:\n:* pobierając [https://www.mediawiki.org/wiki/Download/pl archiwum plików instalacyjnych], zawierające kilka skórek i rozszerzeń. Możesz skopiować i wkleić z niego folder <code>skins/</code>;\n:* pobierając archiwa poszczególnych skórek z [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org];\n:* [https://www.mediawiki.org/wiki/Download_from_Git/pl#Korzystanie_z_Git_do_pobrania_rozszerzeń_MediaWiki Używając Git do pobrania skórek].\n: Jeśli jesteś programistą MediaWiki, nie powinno to zaszkodzić twojemu repozytorium Git.\n\n\n; Jeśli tylko aktualizowałeś MediaWiki:\n: MediaWiki w wersji 1.24 i nowszej nie zawiera automatycznie zainstalowanych skórek (zobacz [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual:Skin autodiscovery]).\nMożna wstawić {{PLURAL:$5|następujący linię|następujące linie}} do <code>LocalSettings.php</code>, aby włączyć {{PLURAL:$5|zainstalowaną skórkę|wszystkie zainstalowane skórki}}: \n\n<pre dir=\"ltr\">$3</pre>\n\n; Jeśli właśnie zmodyfikowałeś <code>LocalSettings.php</code>:\n: Dokładnie sprawdź nazwy skórek pod kątem literówek.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (włączone)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''wyłączone''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>wyłączone</strong>)",
        "mediastatistics": "Statystyki mediów",
        "mediastatistics-summary": "Statystyki dotyczące przesłanych typów plików. Dotyczą one tylko najnowszej wersji pliku. Starsze lub usunięte wersje plików nie są uwzględniane.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 bajt|$1 bajty|$1 bajtów}} ($2; $3%)",
        "mw-widgets-titleinput-description-new-page": "strona jeszcze nie istnieje",
        "mw-widgets-titleinput-description-redirect": "przekierowanie do $1",
        "api-error-blacklisted": "Wybierz inny, opisowy tytuł.",
-       "randomrootpage": "Losowa strona tytułowa"
+       "randomrootpage": "Losowa strona (bez podstron)"
 }
index a416870..305806f 100644 (file)
        "nstab-template": "Stamp",
        "nstab-help": "Agiut",
        "nstab-category": "Categorìa",
+       "mainpage-nstab": "Pàgina prinsipal",
        "nosuchaction": "Operassion nen arconossùa",
        "nosuchactiontext": "L'operassion che a l'ha ciamà ant l'anliura a l'é nen arconossùa.\nA peul esse che a l'abie batù mal l'adrëssa, o che a sia andàit dapress a n'anliura nen giusta.\nSossì a podrìa ëdcò esse un givo andrinta al programa dovrà da {{SITENAME}}.",
        "nosuchspecialpage": "A-i é gnun-a pàgina special tan-me cola che chiel a l'ha ciamà.",
        "myprivateinfoprotected": "A l'ha pa ël përmess ëd modifiché soe anformassion privà.",
        "mypreferencesprotected": "A l'ha pa ël përmess ëd modifiché ij sò gust.",
        "ns-specialprotected": "As peulo nen modifichesse le pàgine speciaj.",
-       "titleprotected": "La creassion ëd pàgine con ës tìtol-sì a l'é stàita proibìa da [[User:$1|$1]].\nComa rason a l'ha butà: «''$2''».",
+       "titleprotected": "La creassion ëd pàgine con ës tìtol-sì a l'é stàita proibìa da [[User:$1|$1]].\nComa rason a l'ha butà: <em>$2</em>.",
        "filereadonlyerror": "As peul pa modifichesse l'archivi «$1» përchè ël depòsit d'archivi «$2» a l'é an sola letura.\n\nL'aministrator ch'a l'ha blocalo a l'ha lassà sta spiegassion: «$3».",
        "invalidtitle-knownnamespace": "Tìtol ch'a va nen bin con lë spassi nominal «$2» e ël test «$3»",
        "invalidtitle-unknownnamespace": "Tìtol pa bon con nùmer dë spassi nominal $1 e test «$2» sconossù",
        "undo-summary-username-hidden": "Anulé la revision $1 ëd n'utent ëstërmà",
        "cantcreateaccounttitle": "As peul pa registresse d'utent",
        "cantcreateaccount-text": "La cression ëd cont neuv a parte da st'adrëssa IP-sì ('''$1''') a l'é stàita blocà da [[User:$3|$3]].\n\nLa rason butà da $3 për ël blocagi a l'é stàita: ''$2''",
-       "cantcreateaccount-range-text": "La creassion ëd cont da l'adrëssa IP ant l'antërval '''$1''', ch'a comprend soa adrëssa IP ('''$4'''), a l'é stàita blocà da [[User:$3|$3]].\n\nLa rason dàita da $3 a l'é ''$2''",
+       "cantcreateaccount-range-text": "La creassion ëd cont da l'adrëssa IP ant l'antërval <strong>$1</strong>, ch'a comprend soa adrëssa IP (<strong>$4</strong>), a l'é stàita blocà da [[User:$3|$3]].\n\nLa rason dàita da $3 a l'é <em>$2</em>",
        "viewpagelogs": "Smon ij registr dë sta pàgina-sì",
        "nohistory": "La stòria dle version dë sta pàgina-sì a l'é pa trovasse.",
        "currentrev": "Version dël dì d'ancheuj",
        "recentchanges-label-bot": "Sa modìfica a l'é stàita fàita da un trigomiro",
        "recentchanges-label-unpatrolled": "Sta modìfica-sì a l'é pa ancó stàita verificà",
        "recentchanges-label-plusminus": "La taja dla pàgina a l'é cangià d'un nùmer ëd bytes",
-       "recentchanges-legend-heading": "'''Legend:'''",
+       "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vëdde ëdcò la [[Special:NewPages|lista dle pàgine neuve]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Ambelessì sota a-i é {{PLURAL:$5|la modìfica|le modìfiche}} da <strong>$3, $4</strong> (mostrà fin-a a <strong>$1</strong>).",
        "rollbackfailed": "A l'é pa podusse ripristiné",
        "cantrollback": "As peul pa tornesse a na version pì veja: l'ùltima modìfica a l'ha fala l'ùnich utent che a l'abia travajà a cost artìcol-sì.",
        "alreadyrolled": "As peulo pa anulé j'ultime modìfiche ëd [[:$1]] fàite da [[User:$2|$2]] ([[User talk:$2|Talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\ncheidun d'àutr a l'ha già modificà ò pura anulà le modìfiche a sta pàgina-sì.\n\nL'ùltima modìfica a la pàgina a l'é stàita fàita da [[User:$3|$3]] ([[User talk:$3|Talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Ël coment dla modìfica a l'era: \"''$1''\".",
+       "editcomment": "Ël coment dla modìfica a l'era: <em>$1</em>.",
        "revertpage": "Gavà via le modìfiche ëd [[Special:Contributions/$2|$2]] ([[User talk:$2|ciaciarade]]), ël contnù a l'é stàit tirà andaré a l'ùltima version dl'utent [[User:$1|$1]]",
        "revertpage-nouser": "Révoca dle modìfiche da part ëd n'utent ëstërmà a l'ùltima version ëd {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Modìfiche anulà da $1; tirà andré a l'ùltima version da $2.",
        "contributions": "Contribussion dë st'{{GENDER:$1|utent}}-sì",
        "contributions-title": "Contribussion ëd $1",
        "mycontris": "Contribussion",
+       "anoncontribs": "Contribussion",
        "contribsub2": "Për {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Ël cont utent «$1» a l'é pa argistrà.",
        "nocontribs": "A l'é pa trovasse gnun-a modìfica che a fussa conforma a costi criteri-sì",
        "default-skin-not-found": "Tension! La pel predeterminà për soa wiki, definìa an <code dir=\"ltr\">$wgDefaultSkin</code> tanme <code>$1</code>, a l'é nen disponìbil.\n\nSoa anstalassion a smija anclude {{PLURAL:$4|la pel|le pej}} sì-dapress. Ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_configuration ël manual ëd configurassion dle pel] për d'anformassion su coma abilite{{PLURAL:$4|la|je}} e serne cola predefinìa.\n\n$2\n\n; S'a l'ha pen-a anstalà MediaWiki:\n: A l'é probàbil che a l'abia anstalalo da git, o diretaman dal còdes sorgiss an n'àutra manera. A l'é normal. Ch'a preuva a anstalé dle pej da [https://www.mediawiki.org/wiki/Category:All_skins la lista dle pel ëd mediawiki.org], parèj:\n:* Dëscariand l' [https://www.mediawiki.org/wiki/Download archivi tar ëd l'anstalador], ch'a comprend vàire pel e estension. A peul copié e ancolé la lista dle <code>pel/</code> d'ambelelà.\n:* Dëscariand j'archivi tar për pel sìngole da [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonand un dij depòsit <code>mediawiki/skins/*</code> via git ant la lista <code dir=\"ltr\">skins/</code> ëd soa anstalassion ëd MediaWiki.\n: Sòn a dovrìa nen antërferì con sò depòsit git si chiel a l'é un dësvlupador ëd MediaWiki.\n\n; S'a l'ha pen-a agiornà MediaWiki:\n: MediaWiki 1.24 e pi neuv a përmet pi nen an automàtich le pel anstalà (ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery manual an sla dëscuverta automàtica dle pel]). A peul copié {{PLURAL:$5|la linia|le linie}} sì-dapress an <code>LocalSettings.php</code> për abilité {{PLURAL:$5|la pel|tute le pej}} ch'a son anstalà al moment:\n\n<pre dir=\"ltr\">$3</pre>\n\n; S'a l'ha pen-a modificà <code>LocalSettings.php</code>:\n: Ch'a verìfica torna ël nòm ëd dle pej për evité ij boro.",
        "default-skin-not-found-no-skins": "Darmagi! La pel dë stàndard për soa wiki, definìa da <code>$wgDefaultSkin</code> tanme <code>$1</code>, a l'é nen disponìbil.\n\nChiel a l'ha gnun-a pel anstalà.\n\n; S'a l'ha pen-a anstalà o agiornà MediaWiki:\n: A l'é probàbil ch'a l'abia falo da git, o diret dal còdes sorgiss an n'àutra manera. A l'é normal. MediaWiki 1.24 e pi recent doesn't a ancludo gnun-a pel ant ël depòsit prinsipal. Ch'a preuva a anstalé chèiche pel da [https://www.mediawiki.org/wiki/Category:All_skins la lista dle pel ëd mediawiki.org]:\n:* Dëscariand [https://www.mediawiki.org/wiki/Download l'archivi tar dl'anstalador], ch'a comprend vàire pel e estension. A peul copié e ancolé la lista <code>skins/</code> da là.\n:* Dëscariand j'archivi tar ëd pel sìngole da [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Dovré Git për dëscarié le pej].\n: Fé sòn a dovrìa nen antërferì con sò depòsit git se chiel a l'é un dësvlupador ëd MediaWiki. Ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: ël manual dla configurassion dle pel] për d'anformassion su coma ativé le pel e serne cola predefinìa.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (abilità)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disabilità''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>disabilità</strong>)",
        "mediastatistics": "Statìstiche an sij mojen",
        "mediastatistics-summary": "Statìstiche an sle sòrt d'archivi carià. A ancludo mach la version pi recent ëd n'archivi. Le version veje o dëscancelà dj'archivi a son escludùe.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 otet}} ($2 ; $3%)",
index e90a32f..57c0b42 100644 (file)
        "customcssprotected": "تسی اے CSS صفحے نوں تبدیل نئیں کر سکدے کیونجے ایدے کسے دوجے ورتن آلے دیاں من پسند تانگاں نیں۔",
        "customjsprotected": "تسی اے JavaScript  صفحے نوں تبدیل نئیں کر سکدے کیونجے ایدے کسے دوجے ورتن آلے دیاں من پسند تانگاں نیں۔",
        "ns-specialprotected": "خاص صفے تبدیل نئیں کیتے جاسکدے۔",
-       "titleprotected": "اس ناں نوں [[User:$1|$1]] نئیں بناسکدا۔\nاس دی وجہ اے دسی گئی اے: \"''$2''\"۔",
+       "titleprotected": "اس ناں نوں [[User:$1|$1]] نئیں بناسکدا۔\nاس دی وجہ اے دسی گئی اے: <em>$2</em>۔",
        "virus-badscanner": "غلط تریقہ کار: انجان وائرس کھوجی: ''$1''",
        "virus-scanfailed": "کھوج نا ہوسکی (کوڈ $1)",
        "virus-unknownscanner": "اندیکھا اینٹیوائرس:",
        "createacct-email-ph": "اپنا ای-میل پتہ دیؤ",
        "createaccountmail": "ای میل دے نال",
        "createaccountreason": "وجہ:",
-       "createacct-captcha": "بچاؤ روک",
-       "createacct-imgcaptcha-ph": "اتے ویکھی لکھت ایتھے پاؤ",
        "createacct-submit": "اپنا کھاتا کھولو",
        "createacct-benefit-heading": "پنجابی وکی نوں تواڈے ورگے لوکاں نے بنایا اے۔",
        "createacct-benefit-body1": "$1 {{PLURAL:$1|تبدیلی|تبدیلیاں}}",
        "passwordreset-emailtext-ip": "کسے نے (خورے تساں  آئی پی پتے $1) تواڈے کھاتے دا ویروا منگیا اے {{SITENAME}} ($4) لئی۔ تھلے دتا گیا ورتنوالا {{PLURAL:$3|کھاتہ|کھاتے}} ایس ای-میل پتے نال جوڑ رکھدا اے:\n\n$2\n\n{{PLURAL:$3|اے عارضی کنجی|اے عارضی کنجیاں}} {{PLURAL:$5|اک دن|$5 دناں}} چ مک جاوے گی۔ تسیں لاگان ہوو تے اپنی اک نويں کنجی چنو. اگر کسے ہور نے اے کنجی والی چٹھی پیجی اے یا توانوں پرانی کنجی یاد آگئی اے تے تسیں پرانی کنجی نال ای کم چلانا چاندے او تے تسیں ایس سنیعے نوں پل جاؤ تے پرانی کنجی ای ورتو۔",
        "passwordreset-emailtext-user": "ورتنوالے $1 نے {{سائیٹناں}} تے تواڈے کھاتے بارے پچھیا اے {{SITENAME}} لئی ($4)۔ تھلے دتا گیا ورتن {{PLURAL:$3|کھاتہ|کھاتے}} ایس ای-میل نال جڑدا اے۔\n\n$2\n\n{{PLURAL:$3|ایہ عارضی کنجی|اے عارضی کنجیاں}} مک جائیگا {{PLURAL:$5|اک دن|$5 دن}}۔ تسیں ہن لاکان ہوو تے نویں کنجی چنو۔ اگر کسے ہور نے اے چٹھی پیجی یا توانوں اپنی پہلی کنجی یاد آگئی اے تے تسیں اونوں بدلنا نئیں چاندے تے تسیں ایس سنیعے نوں پھل جاؤ تے پرانی کنجی نال ای کم چلاؤ۔",
        "passwordreset-emailelement": "ورتن ناں: \n$1\n\nعارضی کنجی: \n$2",
-       "passwordreset-emailsent": "یاد کران واسطے اک ای-میل پیج دتی گئی اے۔",
+       "passwordreset-emailsentemail": "یاد کران واسطے اک ای-میل پیج دتی گئی اے۔",
        "passwordreset-emailsent-capture": "اک یاد کران والی ای-میل پیج دتی گئی اے، جیہڑی تھلے دسی گئی اے۔",
        "passwordreset-emailerror-capture": "اک یادکراؤ ای-میل بنائی گئی اے، جیہڑی کہ تھلے دسی گئی اے، پر ورتن والے تک پیجنا نئیں ہوسکیا:$1",
        "changeemail": "ای-میل پتہ بدلو",
        "prefs-displayrc": "چنوتیاں دسو",
        "prefs-displaywatchlist": "چنوتیاں دسو",
        "prefs-diffs": "ڈفز",
-       "email-address-validity-valid": "ای_میل پتہ ٹھیک لگدا اے۔",
-       "email-address-validity-invalid": "چلن والا ای-میل پتہ دسو",
        "userrights": "ورتن والیاں دے حقاں دا سعاب کتاب",
        "userrights-lookup-user": "ورتن ٹولی بچاؤ",
        "userrights-user-editname": "اک ورتن والا ناں لکھو:",
        "right-blockemail": "ورتن آلے نوں ای میل پیجن توں روکو",
        "right-hideuser": "لوکاں توں چھپاندے ہویاں اک ورتن آلے نوں روکو",
        "right-ipblock-exempt": "آئی پی روک، اپنے آپ روکاں تے رینج روکاں ول تعیاں ناں دیو",
-       "right-proxyunbannable": "پراکسیز دے اپنے آپ روکاں تے تعیاں ناں دیو",
        "right-unblockself": "اپنے آپ کھولو",
        "right-protect": "بچاؤ پدھر نوں بدلو تے بچاۓ صفیاں نوں بدلو",
        "right-editprotected": "بچاۓ صفے بدلو",
        "recentchanges-label-bot": "ایس تبدیلی نوں بوٹ نے کیتا اے۔",
        "recentchanges-label-unpatrolled": "ایس تبدیلی تے ہلے گشت نئیں ہوئی۔",
        "recentchanges-label-plusminus": "صفے دا ناپ اینے بائٹاں نال بدلیا گیا",
-       "recentchanges-legend-heading": "'''وات:'''",
+       "recentchanges-legend-heading": "<strong>وات:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ایہ وی ویکھو [[Special:NewPages|نویں صفیاں دی لسٹ]])",
        "rcnotefrom": "ہلے تک '''$2''' توں '''$1''' تبدیلیاں تھلے دتیاں گئیاں نیں۔",
        "rclistfrom": "$3 $2 توں ہونے آلیاں نویاں تبدیلیاں وکھاؤ",
        "watchthisupload": "اس فائل تے نظر رکھو",
        "filewasdeleted": "ایس ناں دی فائل پہلے چڑھائی گئی تے فیر مٹا دتی گئی۔\nتوانوں $1 نوں ویکھنا چائیدا اے اینوں چڑھان توں پہلے۔",
        "filename-bad-prefix": "فائل ناں جینوں تسیں چڑھا رۓ او '''\"$1\"''' توں ٹردا اے، جیہڑک دسدا تے پر ڈجیٹل کیمریاں چ اپنے آپ  آجاندا اے۔\nمہربانی کرکے کوئی ہور سدا ناں چنو۔",
-       "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-proto-error": "غلط پروٹوکول",
        "upload-proto-error-text": "دوروں چڑھائی لئی فائل لئی ضروری اے جے اودی یوآرایل <code>http://</code> یا <code>ftp://</code> توں ٹرے۔",
        "upload-file-error": "اندر دا مسئلا",
        "movenosubpage": "ایس صفے دے کوئی نکے صفے نئیں۔",
        "movereason": "وجہ:",
        "revertmove": "واپس",
-       "delete_and_move": "مٹاؤ تے لے جاؤ",
        "delete_and_move_text": "== مٹان دی لوڑ ==\nپونچن والا صفہ \"[[:$1]]\" پہلے ای موجود.\nکیا تسیں اینون مٹادینا چاندے او تھاں بدلن دی گل بنان لئی؟",
        "delete_and_move_confirm": "آہو، صفحہ مٹا دیو",
        "delete_and_move_reason": "مٹایا گیا ایتھوں \"[[$1]]\" ٹورن لئی۔",
index 5cd6b7b..3a71cc6 100644 (file)
        "cascadeprotected": "Šin pāusan ast pakūnstan ezze redigīsnan, beggi ast ebīmtan en {{PLURAL:$1|ripīntsmu pāusan, kawīdan|ripīntimans pāusans, kawīdai}} turri mazīngiskwan \"pakūnsnas weldīsnan\" enklaūtan:\n$2",
        "namespaceprotected": "Tū ni assei preiwērptan, kāi redigīlai pāusans en '''$1''' tītelin plattibei.",
        "ns-specialprotected": "Speciālai pāusai ni mazzi būtwei redigītan.",
-       "titleprotected": "Šis tītels pastāi drēuditan pra [[User:$1|$1]].\nDrēudisnas pagrintinsna: \"$2\".",
+       "titleprotected": "Šis tītels pastāi drēuditan pra [[User:$1|$1]].\nDrēudisnas pagrintinsna: <em>$2</em>.",
        "virus-badscanner": "Wārga kōnfiguraciōni: niwaīsts antiwīrusas skanītajs: \"$1\"",
        "virus-scanfailed": "skanisnā niizpaltan (blānda $1)",
        "virus-unknownscanner": "niwaīsts antiwīruss:",
        "right-blockemail": "Drēudeis tērpuatajamans e-mailin tengīntun",
        "right-hideuser": "Tērpautajas blōkisna, niwidāminan perōnewingi",
        "right-ipblock-exempt": "Ebjaīs blōkisenins, autōmatiskans blōkisenins be blōkisenins stēisan IP adressin ebīmtan",
-       "right-proxyunbannable": "Ebjaīs autōmatiskans proxy blōkisnans",
        "right-protect": "Pakūnsnas klādas kitawīdinsna be preiēisenis prei redigīsnan stēisan pakūnstan pāusan",
        "right-editprotected": "Redigīs pakūnstans pāusans (šlāit weldītan pakūnsenin)",
        "right-editinterface": "Redigīs tērpautajas interfācan",
        "watchthisupload": "Nadirēis šin zūrbrukin",
        "filewasdeleted": "Zūrbrukis sen šan pabilīsnan ekzistīwuns, adder pastāi āupausintan.\nPirzdau tū wīrst din etkūmps enkraūwuns(si), izbandais $1.",
        "filename-bad-prefix": "Enkraūtas zūrbrukes pabilisnā pagaūne si sen '''\"$1\"'''. Sta ast nidekskriptīwa pabilisnā kawīda ast preipeisātan autōmatiskai pra digitālins kāmerans.\nMadli etrīnkais swajasmu zūrbrukin spārtais deskriptīwan pabilīsnan.",
-       "upload-success-subj": "Zūrbrukes enkraūsenis izpalla",
        "upload-proto-error": "Nitikrōmiskan prōtokulin",
        "upload-proto-error-text": "Iztāliska enkrausnā izkīnina, kāi URL adressi pagaūlai si sen <code>http://</code> anga <code>ftp://</code>.",
        "upload-file-error": "Ēntrewingi blānda",
        "rollbacklink": "etwārtai wartinnais",
        "rollbackfailed": "Kitawīdisnas etwārtai wartīnsna ni izpalla",
        "cantrollback": "Ni mazīngi etwārtai wartīntun redigīsenin, beggi ast tēr aīna šisse pāusas wersiōni.",
-       "editcomment": "Redigīsenes kumentārs: \"''$1''\".",
+       "editcomment": "Redigīsenes kumentārs: <em>$1</em>.",
        "revertpage": "Etwārtai wartinnā di redigīsenins stesse tērpautajan [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusiōni]]). Etwārtai wartīntas wersiōnis autōrs ast [[User:$1|$1]]",
        "rollback-success": "Naikinnā di redigīsenins stesse(s) $1.\nEtwārtai wartinnā di panzdauman wersiōnin, kawīdse autōrs ast $2.",
        "protectlogpage": "Pakūnstai",
        "movenosubpage": "Šin pāusan ni turri pōpausans.",
        "movereason": "Brewīnsli:",
        "revertmove": "etwārtai wartinnais",
-       "delete_and_move": "Āupausinais be praskajjinais",
        "delete_and_move_text": "== Praskajjinsenis izkīnina āupausenin ==\nKakīnslis pāusan \"[[:$1]]\" ekzistijja.\nKwāitu āupausintun din, kāi segīlai deīktan per praskajjintan pāusan?",
        "delete_and_move_confirm": "Jā, āupausinais pāusan",
        "delete_and_move_reason": "Āupausinā di, kāi segītun deīktan per praskajjintan pāusan",
index c092d3f..8257539 100644 (file)
@@ -5,7 +5,8 @@
                        "Kaganer",
                        "Umherirrender",
                        "아라",
-                       "عثمان خان شاہ"
+                       "عثمان خان شاہ",
+                       "Macofe"
                ]
        },
        "tog-underline": "کرښنې تړنې:",
        "myprivateinfoprotected": "تاسې د دې شخصي مالوماتو د سمولو اجازه نلرۍ.",
        "mypreferencesprotected": "تاسې د خپلو غوره توبونو د سمولو اجازه نلرۍ.",
        "ns-specialprotected": "ځانگړي مخونو کې سمون او بدلون نه شی راوستلای.",
-       "titleprotected": "د [[User:$1|$1]] لخوا د دې سرليک د جوړېدلو مخنيوی شوی.\nاو د دې کړنې سبب \"''$2''\" ورکړ شوی.",
+       "titleprotected": "د [[User:$1|$1]] لخوا د دې سرليک د جوړېدلو مخنيوی شوی.\nاو د دې کړنې سبب <em>$2</em> ورکړ شوی.",
        "invalidtitle-knownnamespace": "ناسم سرليک د \"$2\" نومتشيال او \"$3\" متن سره",
        "invalidtitle-unknownnamespace": "ناسم سرليک د ناڅرگند نومتشيال شمېرې $1 او \"$2\" متن سره",
        "exception-nologin": "غونډال کې نه ياست ننوتي",
        "nocookiesnew": "ستاسې گڼون جوړ شو، خو تاسې لا غونډال ته نه ياست ورننوتلي.\n{{SITENAME}} کې د ننوتلو لپاره کوکيز کارېږي.\nاو ستاسې د کتنمل کوکيز ناچارن دي.\nلطفاً خپل د کتنمل کوکيز چارن کړۍ او بيا د خپل کارن-نوم او پټنوم په کارولو سره غونډال ته ورننوځی.",
        "nocookieslogin": "{{SITENAME}} کې د ننوتلو لپاره کوکيز کارېږي.\nاو ستاسې د کتنمل کوکيز ناچارن دي.\nلطفاً خپل د کتنمل کوکيز چارن کړۍ او بيا د خپل کارن-نوم او پټنوم په کارولو سره غونډال ته ورننوځی.",
        "noname": "تاسې تر اوسه پورې کوم کره کارن نوم نه دی ځانگړی کړی.",
-       "loginsuccesstitle": "غونډال کې بريالی ورننوتلۍ",
+       "loginsuccesstitle": "غونډال کې ورننوتلۍ",
        "loginsuccess": "'''تاسې اوس {{SITENAME}} کې د \"$1\" په نوم ننوتي ياست.'''",
        "nosuchuser": "د \"$1\" په نوم هېڅ کارن نشته.\nد کارنانو نومونه د غټو او واړو تورو سره حساس دي.\nخپل حجا وڅارۍ، او يا هم [[Special:UserLogin/signup|يو نوی گڼون جوړ کړی]].",
        "nosuchusershort": "د \"$1\" په نوم هېڅ کوم گڼون نشته. لطفاً خپل د نوم ليکلې بڼې ته ځير شی چې پکې تېروتنه نه وي.",
        "createaccount-title": "د {{SITENAME}} د گڼون جوړېدنه",
        "createaccount-text": "يو چا د {{SITENAME}} په وېبځي ($4) کې ستاسې د برېښليک پتې لپاره د \"$2\" په نامه يو گڼون جوړ کړی چې پټنوم يې \"$3\" دی.\nتاسې بايد غونډال ته ورننوځۍ او همدا اوس خپل پټنوم بدل کړی.\n\nکه چېرته دا کړنه په تېروتنه کې شوی وي نو تاسې کولای شی چې دا پيغام بابېزه وگڼۍ.",
        "login-throttled": "تاسې څو واره هڅه کړې چې غونډال ته ورننوځۍ.\nلطفاً د بيا هڅې نه مخکې $1 شېبې تم شۍ.",
-       "login-abort-generic": "غونډال کې مو ننوتل نابريالی شو - ناڅاپي بند شو",
+       "login-abort-generic": "غونډال کې مو ننوتل نابرياله شوه - ناڅاپي بند شو",
        "loginlanguagelabel": "ژبه: $1",
        "pt-login": "ننوتل",
        "pt-login-button": "ننوتل",
        "newpassword": "نوی پټنوم:",
        "retypenew": "نوی پټنوم بيا وليکه:",
        "resetpass_submit": "پټنوم مو وټاکۍ او بيا غونډال ته ورننوځۍ",
-       "changepassword-success": "ستاسې پټنوم په برياليتوب سره بدل شو!",
+       "changepassword-success": "ستاسې پټنوم بدل شو!",
        "changepassword-throttled": "تاسې څو واره هڅه کړې چې غونډال ته ورننوځۍ.\nلطفاً د بيا هڅې نه مخکې $1 شېبې تم شۍ.",
        "botpasswords": "روباټ پټنومونه",
        "botpasswords-label-appid": "روباټ نوم:",
        "revdelete-unsuppress": "له بيازېرمل شويو بڼو څخه محدوديتونه لرې کول",
        "revdelete-log": "سبب:",
        "revdelete-submit": "{{PLURAL:$1|ټاکلې بڼه|ټاکلو بڼو}} کې پلي کول",
-       "revdelete-success": "د بڼې ښکارېدنه په برياليتوب سره هممهاله شوه.",
+       "revdelete-success": "د بياکتنې ښکارېدنه هممهاله شوه.",
        "revdelete-failure": "د بڼې ښکارېدنه نه شي هممهاله کېدای:\n$1",
-       "logdelete-success": "د ښکارېدنې يادښت په برياليتوب سره جوړ شو.",
+       "logdelete-success": "د يادښت ښکارېدنه ځانگړې شوه.",
        "logdelete-failure": "د ښکارېدنې يادښت نه شي جوړېدلی:\n$1",
        "revdel-restore": "ښکارېدنه بدلول",
        "pagehist": "د مخ پېښليک",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|له وروستنۍ کتنې راپدېخوا}}",
        "enhancedrc-history": "پېښليک",
        "recentchanges": "وروستي بدلونونه",
-       "recentchanges-legend": "د ورستي بدلونو خوښنې",
+       "recentchanges-legend": "د وروستي بدلونونو خوښنې",
        "recentchanges-summary": "په دې مخ د ويکي تر ټولو تازه بدلونونه څارلی شی.",
        "recentchanges-noresult": "د ټاکلې مودې بدلونونه کې يو يې هم د دغو معيارونو سره همغاړي نه دي.",
        "recentchanges-feed-description": "همدلته د ويکي ترټولو تازه وروستي بدلونونه وڅارۍ او وگورۍ چې څه پېښ شوي.",
        "recentchanges-label-bot": "دا سمون يو روباټ ترسره کړی",
        "recentchanges-label-unpatrolled": "دغه سمون تر اوسه پورې نه دی څارل شوی",
        "recentchanges-label-plusminus": "د بايټونو د شمېر له مخې د مخ د بدلون کچه",
-       "recentchanges-legend-heading": "'''لنډونونه:'''",
+       "recentchanges-legend-heading": "<strong>لنډونونه:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|د نويو مخونو لړليک]] هم وگورئ)",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "ښکاره کول",
        "editcomment": "د سمون لنډيز دا و: \"''$1''\".",
        "changecontentmodel-title-label": "مخ سرليک",
        "changecontentmodel-reason-label": "سبب:",
+       "changecontentmodel-submit": "بدلول",
        "logentry-contentmodel-change-revertlink": "په څټ گرځول",
        "logentry-contentmodel-change-revert": "په څټ گرځول",
        "protectlogpage": "د ژغورنې يادښت",
        "tags-deactivate-submit": "نافعالول",
        "tags-edit-title": "نښلنونه سمول",
        "tags-edit-manage-link": "نښلنونه مهارول",
-       "tags-edit-existing-tags-none": "''هېڅ''",
+       "tags-edit-existing-tags-none": "<em>هېڅ</em>",
        "tags-edit-new-tags": "نوي نښلنونه:",
        "tags-edit-add": "دا نښلنونه ورگډول:",
        "tags-edit-remove": "دا نښلنونه غورځول:",
index 9b21344..20b2d5e 100644 (file)
                        "Eduardo Addad de Oliveira",
                        "Raphaelras",
                        "Arthurteb303",
-                       "Rffontenelle"
+                       "Rffontenelle",
+                       "HenriqueCrang",
+                       "Caçador de Palavras",
+                       "Luk3",
+                       "Ryuu"
                ]
        },
        "tog-underline": "Sublinhar links:",
        "myprivateinfoprotected": "Você não tem permissão para editar suas informações privadas.",
        "mypreferencesprotected": "Você não tem permissão para editar suas preferências.",
        "ns-specialprotected": "Não é possível editar páginas especiais",
-       "titleprotected": "Este título foi protegido, para que não seja criado.\nQuem o protegeu foi [[User:$1|$1]], com a justificativa: ''$2''.",
+       "titleprotected": "Este título foi protegido, para que não seja criado.\nQuem o protegeu foi [[User:$1|$1]], com a justificativa: <em>$2</em>.",
        "filereadonlyerror": "Não é possível modificar o arquivo \"$1\" porque o repositório do arquivo \"$2\" está em modo somente leitura.\n\nO administrador de sistema que bloqueou ofereceu a seguinte explicação: \"$3\".",
        "invalidtitle-knownnamespace": "Título inválido para o espaço nominal \"$2\" e texto \"$3\"",
        "invalidtitle-unknownnamespace": "Título inválido para o espaço nominal de número desconhecido ($1) e texto \"$2\"",
        "nocookieslogin": "Você tem os <i>cookies</i> desativados no seu navegador, e a {{SITENAME}} utiliza <i>cookies</i> para ligar os usuários às suas contas. Por favor os ative e tente novamente.",
        "nocookiesfornew": "A conta de usuário não foi criada porque não foi possível confirmar a sua origem.\nCertifique-se de que tem os cookies ativados, recarregue esta página e tente novamente.",
        "noname": "Você não colocou um nome de usuário válido.",
-       "loginsuccesstitle": "Login bem sucedido",
+       "loginsuccesstitle": "Autenticado",
        "loginsuccess": "'''Agora você está {{GENDER:autenticado|autenticada}} ao wiki {{SITENAME}} como \"$1\"'''.",
        "nosuchuser": "Não existe nenhum usuário com o nome \"$1\".\nOs nomes de usuário são sensíveis a letras maiúsculas.\nVerifique o que foi digitado ou [[Special:UserLogin/signup|crie uma nova conta]].",
        "nosuchusershort": "Não existe um usuário com o nome \"$1\". Verifique o nome que introduziu.",
        "botpasswords-insert-failed": "Falha ao adicionar o nome de robô \"$1\". Ele já foi adicionado?",
        "botpasswords-update-failed": "Falha ao atualizar o nome do robô \"$1\". Elo já foi apagado?",
        "botpasswords-created-title": "Senha de robô criada",
-       "botpasswords-created-body": "A senha do robô \"$1\" foi criada com sucesso.",
+       "botpasswords-created-body": "A senha de robo para o robô de nome \"$1\" do usuário \"$2\" foi criada.",
        "botpasswords-updated-title": "Senha de robô atualizada",
-       "botpasswords-updated-body": "A senha de robô \"$1\" foi atualizada com sucesso.",
+       "botpasswords-updated-body": "A senha de robô para o robô de nome \"$1\" do usuário \"$2\" foi atualizada.",
        "botpasswords-deleted-title": "Senha de bot apagada",
-       "botpasswords-deleted-body": "A senha de bot \"$1\" foi apagada.",
+       "botpasswords-deleted-body": "A senha de robô para o robô de nome \"$1\" do usuário \"$2\" foi apagada.",
+       "botpasswords-newpassword": "A nova senha para se autenticar com <strong>$1</strong> é <strong>$2</strong>. <em>Por favor, guarde isto para referência futura.",
        "botpasswords-no-provider": "BotPasswordsSessionProvider não está disponível.",
        "botpasswords-restriction-failed": "Restrições de senha de robô evitam esta autenticação.",
        "botpasswords-invalid-name": "O nome de usuário especificado não contém o separador de senha de robô (\"$1\").",
        "newarticle": "(Nova)",
        "newarticletext": "Você seguiu um link para uma página que ainda não existe.\nPara criá-la, comece escrevendo na caixa abaixo (veja [$1 a página de ajuda] para mais informações).\nSe você chegou aqui por engano, clique no botão '''voltar''' do seu navegador.",
        "anontalkpagetext": "---- ''Esta é a página de discussão para um usuário anônimo que ainda não criou uma conta ou que não a usa, de forma que temos de utilizar o endereço de IP para identificá-lo(a). Tal endereço de IP pode ser compartilhado por vários usuários. Se você é um usuário anônimo e acha que comentários irrelevantes foram direcionados a você, por gentileza, [[Special:UserLogin/signup|crie uma conta]] ou [[Special:UserLogin|autentique-se]], a fim de evitar futuras confusões com outros usuários anônimos.''",
-       "noarticletext": "No momento, não há conteúdo nesta página.\nVocê pode [[Special:Search/{{PAGENAME}}|pesquisar pelo título desta página]] em outras páginas, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar por registros relacionados],\nou [{{fullurl:{{FULLPAGENAME}}|action=edit}} criar esta página]</span>.",
+       "noarticletext": "Não há conteúdo nesta página no momento.\nVocê pode [[Special:Search/{{PAGENAME}}|pesquisar pelo título desta página]] em outras páginas, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar por registros relacionados],\nou [{{fullurl:{{FULLPAGENAME}}|action=edit}} criar esta página]</span>.",
        "noarticletext-nopermission": "No momento, não há conteúdo nesta página\nVocê pode [[Special:Search/{{PAGENAME}}|pesquisar pelo título desta página]] em outras páginas,\nou <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar por registros relacionados] </span>. Note que, no entanto, você não tem permissão para criar esta página.",
        "missing-revision": "A revisão #$1 da página denominada \"{{FULLPAGENAME}}\" não existe.\n\nIsto é geralmente causado por seguir um link de histórico desatualizado para uma página que foi eliminada.\nOs detalhes podem ser encontrados no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de eliminação].",
        "userpage-userdoesnotexist": "A conta \"<nowiki>$1</nowiki>\" não se encontra registrada.\nVerifique se deseja mesmo criar/editar esta página.",
        "continue-editing": "Ir para a área de edição",
        "previewconflict": "Esta previsão reflete o texto que está na área de edição acima e como ele aparecerá se você escolher salvar.",
        "session_fail_preview": "Pedimos desculpas, mas não foi possível processar a sua edição devido à perda de dados da sua sessão.\n'''Por favor, verifique se você ainda está autenticado e tente novamente.'''\nCaso continue não funcionando, tente [[Special:UserLogout|sair]] e voltar a entrar na sua conta, e cheque se seu navegador permite cookies desse site.",
-       "session_fail_preview_html": "'''Desculpe-nos! Não foi possível processar a sua edição devido a uma perda de dados de sessão.'''\n\n''Como o projeto {{SITENAME}} possui HTML bruto ativo, a previsão não será exibida, como uma precaução contra ataques por JavaScript.''\n\n'''Se esta é uma tentativa de edição legítima, por favor tente novamente.\nCaso continue não funcionando, tente [[Special:UserLogout|desautenticar-se]] e voltar a entrar na sua conta.'''",
+       "session_fail_preview_html": "Desculpe! Não foi possível processar a sua edição devido a uma perda de dados de sessão.\n\n<em>Como {{SITENAME}} possui HTML bruto ativo, a previsão não será exibida como uma precaução contra ataques por JavaScript.\n\n<strong>Se esta é uma tentativa de edição legítima, por favor tente novamente.</strong>\nCaso continue não funcionando, tente [[Special:UserLogout|desautenticar-se]] e voltar a entrar na sua conta, e cheque se seu navegador permite cookies vindo deste site.",
        "token_suffix_mismatch": "'''A sua edição foi rejeitada uma vez que seu software de navegação mutilou os sinais de pontuação do sinal de edição. A edição foi rejeitada para evitar perdas no texto da página.\nIsso acontece ocasionalmente quando se usa um serviço de proxy anonimizador mal configurado.'''",
        "edit_form_incomplete": "'''Algumas partes do formulário de edição não chegaram ao servidor; verifique que a sua edição continua intacta e tente novamente, por favor.'''",
        "editing": "Editando $1",
        "permissionserrors": "Erro de permissão",
        "permissionserrorstext": "Você não possui permissão de fazer isso, {{PLURAL:$1|pelo seguinte motivo|pelos seguintes motivos}}:",
        "permissionserrorstext-withaction": "Você não possui permissão para $2, {{PLURAL:$1|pelo seguinte motivo|pelos motivos a seguir}}:",
+       "contentmodelediterror": "Você não pode editar essa revisão pois seu modelo de conteúdo é <code>$1</code>, que difere do modelo de conteúdo atual da página <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Atenção: Você está recriando uma página já eliminada em outra ocasião.'''\n\nConsidere se é realmente adequado continuar editando esta página.\nOs registros de eliminação e de movimentação desta página são exibidos a seguir, para sua comodidade:",
        "moveddeleted-notice": "Esta página foi eliminada.\nOs registros de eliminação e de movimentação para esta página estão disponibilizados abaixo, para referência.",
        "moveddeleted-notice-recent": "Desculpe, esta página foi eliminada recentemente (nos últimos 24 horas). A eliminação e se mover para a página de log são fornecidos abaixo para referência.",
        "undo-summary-username-hidden": "Desfazer a revisão $1 de um usuário oculto",
        "cantcreateaccounttitle": "Não é possível criar uma conta",
        "cantcreateaccount-text": "Este IP ('''$1''') foi bloqueado de criar novas contas por [[User:$3|$3]].\n\nA 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]].\n\nA razão dada por $3 é ''$2''",
+       "cantcreateaccount-range-text": "A criação de conta a partir dos endereços IP no intervalo <strong>$1</strong>, que inclui o seu endereço IP (<strong>$4</strong>), foi bloqueada por [[User:$3|$3]].\n\nA razão dada por $3 é <em>$2</em>",
        "viewpagelogs": "Ver registros para esta página",
        "nohistory": "Não há histórico de revisões para esta página.",
        "currentrev": "Revisão atual",
        "revdelete-unsuppress": "Remover restrições das edições restauradas",
        "revdelete-log": "Motivo:",
        "revdelete-submit": "Aplicar {{PLURAL:$1|à revisão selecionada|às revisões selecionadas}}",
-       "revdelete-success": "'''A visibilidade da revisão foi atualizada.'''",
+       "revdelete-success": "Visibilidade da revisão atualizada.",
        "revdelete-failure": "'''A visibilidade da revisão não foi atualizada:'''\n$1",
-       "logdelete-success": "'''Visibilidade de evento definida com sucesso.'''",
+       "logdelete-success": "Visibilidade do registro definida.",
        "logdelete-failure": "'''A visibilidade do registro não pôde ser estabelecida:'''\n$1",
        "revdel-restore": "alterar visibilidade",
        "pagehist": "Histórico da página",
        "mergehistory-empty": "Não existem edições habilitadas a serem fundidas.",
        "mergehistory-done": "$3 {{PLURAL:$3|revisão|revisões}} de $1 fundidas em [[:$2]] com sucesso.",
        "mergehistory-fail": "Não foi possível fundir os históricos; por gentileza, verifique a página e os parâmetros de tempo.",
+       "mergehistory-fail-bad-timestamp": "Informação data/hora inválida.",
+       "mergehistory-fail-invalid-source": "Página de origem inválida.",
+       "mergehistory-fail-invalid-dest": "Página de destino é inválida.",
+       "mergehistory-fail-no-change": "A fusão de histórico não fundiu nenhuma revisão. Por favor reavalie os parâmetros página e tempo.",
+       "mergehistory-fail-permission": "Permissões insuficientes para fundir histórico.",
+       "mergehistory-fail-self-merge": "As páginas de origem e destino são as mesmas.",
+       "mergehistory-fail-timestamps-overlap": "As revisões fonte sobrescrevem ou vêm após as revisões de destino",
        "mergehistory-fail-toobig": "Não é possível fundir o histórico, já que um número de revisão(ões) acima do limite ($1 {{PLURAL:$1|revisão|revisões}}) seriam movidos.",
        "mergehistory-no-source": "A página de origem ($1) não existe.",
        "mergehistory-no-destination": "A página de destino ($1) não existe.",
        "prefs-tabs-navigation-hint": "Dica: Você pode usar as teclas de seta esquerda e direita para navegar entre as abas da lista de abas.",
        "userrights": "Gestão de privilégios {{GENDER:{{BASEPAGENAME}}|do usuário|da usuária|de usuário(a)}}",
        "userrights-lookup-user": "Administrar grupos de usuários",
-       "userrights-user-editname": "Forneça um nome de usuário:",
-       "editusergroup": "Editar {{GENDER:$1|usuário}} grupos",
+       "userrights-user-editname": "Forneça um nome de usuário(a):",
+       "editusergroup": "Editar grupos {{GENDER:$1|do(a) usuário(a)}}",
        "editinguser": "Modificando privilégios d{{GENDER:$1|o usuário|a usuária|o(a) usuário(a)}} <strong>[[User:$1|$1]]</Strong> $2",
-       "userrights-editusergroup": "Editar grupos do usuário",
+       "userrights-editusergroup": "Editar grupos {{GENDER:$1|do usuário|da usuária|do(a) usuário(a)}}",
        "saveusergroups": "Salvar grupos de{{GENDER:$1|usuário}}",
        "userrights-groupsmember": "Membro de:",
        "userrights-groupsmember-auto": "Membro implícito de:",
        "userrights-changeable-col": "Grupos que pode alterar",
        "userrights-unchangeable-col": "Grupos que não pode alterar",
        "userrights-conflict": "Há um comflito de permissões de usuário! Por favor, revise e confirme as alterações novamente.",
-       "userrights-removed-self": "Você removeu com sucesso seus direitos de usuário. Como tal, você agora está impossibilitado de acessar esta página.",
+       "userrights-removed-self": "Você removeu seus privilégios. Portanto, você agora não pode mais acessar esta página.",
        "group": "Grupo:",
        "group-user": "Usuários",
        "group-autoconfirmed": "Usuários autoconfirmados",
        "right-managechangetags": "Criar e apagar [[Special:Tags|tags]] na base de dados",
        "right-applychangetags": "Aplicar [[Special:Tags|etiquetas]] juntamente com as alterações de alguém",
        "right-changetags": "Adicionar e remover [[Special:Tags|etiquetas]] arbitrárias em revisões e ''logs'' individuais",
+       "grant-generic": "conjunto de direitos \"$1\"",
        "grant-group-page-interaction": "Interagir com páginas",
+       "grant-group-file-interaction": "Interagir com multimídia",
        "grant-group-watchlist-interaction": "Interagir com sua lista de páginas vigiadas",
        "grant-group-email": "Enviar e-mail",
        "grant-group-high-volume": "Realizar grande volume de atividades",
        "grant-createaccount": "Criar contas",
        "grant-createeditmovepage": "Criar, editar e mover páginas",
        "grant-delete": "Excluir páginas, revisões e entradas de registro",
+       "grant-editinterface": "Editar o domínio MediaWiki e o CSS/JavaScript do usuário",
+       "grant-editmycssjs": "Editar o seu CSS/JavaScript de usuário",
        "grant-editmyoptions": "Editar suas preferências de usuário",
        "grant-editmywatchlist": "Editar sua lista de páginas vigiadas",
        "grant-editpage": "Editar páginas existentes",
        "recentchanges-label-bot": "Esta edição foi feita por um robô",
        "recentchanges-label-unpatrolled": "Esta edição ainda não foi patrulhada",
        "recentchanges-label-plusminus": "Alteração no tamanho da página, em bytes",
-       "recentchanges-legend-heading": "'''Legenda''':",
+       "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (veja também a [[Special:NewPages|lista de páginas novas]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Exibir",
        "rcshowhidemine": "$1 minhas edições",
        "rcshowhidemine-show": "Exibir",
        "rcshowhidemine-hide": "Ocultar",
+       "rcshowhidecategorization": "$1 categorização de páginas",
        "rcshowhidecategorization-show": "Exibir",
        "rcshowhidecategorization-hide": "Esconder",
        "rclinks": "Exibir as $1 alterações recentes feitas nos últimos $2 dias<br />$3",
        "recentchangeslinked-page": "Nome da página:",
        "recentchangeslinked-to": "Inversamente, mostrar mudanças nas páginas que contêm ligações para esta",
        "recentchanges-page-added-to-category": "[[:$1]]adicionada à categoria",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] e [[Special:WhatLinksHere/$1|{{PLURAL:$2|uma página|$2 páginas}}]] adicionadas à categoria",
+       "recentchanges-page-removed-from-category": "[[:$1]] removida da categoria",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] e [[Special:WhatLinksHere/$1|{{PLURAL:$2|uma página|$2 páginas}}]] removidas da categoria",
        "autochange-username": "Alteração automática do MediaWiki",
        "upload": "Enviar arquivo",
        "uploadbtn": "Enviar arquivo",
        "uploaded-script-svg": "Encontrado elemento de script \"$1\" no arquivo SVG carregado.",
        "uploaded-hostile-svg": "Encontrado CSS inseguro no elemento de estilo do arquivo SVG carregado.",
        "uploaded-event-handler-on-svg": "Não é permitido configurar atributos que manipulem eventos  <code>$1=\"$2\"</code> em arquivos SVG.",
+       "uploaded-href-attribute-svg": "os atributos href nos ficheiros SVG só están autorizados a ligar a direccións http:// ou https://, atopado <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-unsafe-target-svg": "Encontrado href para dados não seguros: alvo URI <code>&lt;$1 $2=\"$3\"&gt;</code> no arquivo SVG carregado.",
        "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!\nDetalhes: $1",
        "rollbackfailed": "A reversão falhou",
        "cantrollback": "Não foi possível reverter a edição; o último contribuidor é o único autor desta página",
        "alreadyrolled": "Não foi possível reverter a última edição de [[:$1]] por [[User:$2|$2]] ([[User talk:$2|discussão]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nalguém já editou ou reverteu a página.\n\nA última edição da página foi feita por [[User:$3|$3]] ([[User talk:$3|discussão]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "O sumário de edição era: \"''$1''\".",
+       "editcomment": "O sumário de edição era: <em>$1</em>.",
        "revertpage": "Foram revertidas as edições de [[Special:Contributions/$2|$2]] ([[User talk:$2|disc]]) para a última versão por [[User:$1|$1]]",
        "revertpage-nouser": "Revertidas as edições de um usuário oculto para a última revisão de {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Foram revertidas as edições de $1, com o conteúdo passando a estar como na última edição de $2.",
        "logentry-newusers-create2": "A conta de usuário $3 foi criada por $1",
        "logentry-newusers-byemail": "A conta de usuário $3 foi criada por $1, com a senha sendo enviada por e-mail",
        "logentry-newusers-autocreate": "A conta de usuário $1 foi criada automaticamente",
-       "logentry-protect-unprotect": "$1 {{GENDER:$2|removed}} proteção de $3",
-       "logentry-protect-protect": "$1 {{GENDER:$2|protected}} $3 $4",
-       "logentry-protect-protect-cascade": "$1 {{GENDER:$2|protected}} $3 $4 [cascading]",
+       "logentry-protect-unprotect": "$1 {{GENDER:$2|removeu}} a proteção de $3",
+       "logentry-protect-protect": "$1 {{GENDER:$2|protegeu}} $3 $4",
+       "logentry-protect-protect-cascade": "$1 {{GENDER:$2|protegeu}} $3 $4 [em cascata]",
+       "logentry-protect-modify": "$1 {{GENDER:$2|alterou}} o nível de proteção para $3 $4",
+       "logentry-protect-modify-cascade": "$1 {{GENDER:$2|alterou}} o nível de proteção para $3 $4 [em cascata]",
        "logentry-rights-rights": "$1 alterou os grupos de usuário de $3 de $4 para $5",
        "logentry-rights-rights-legacy": "$1 alterou os grupos de $3",
        "logentry-rights-autopromote": "$1 foi promovido automaticamente de $4 para $5",
-       "logentry-upload-upload": "$1 {{GENDER:$2|carregado}} $3",
+       "logentry-upload-upload": "$1 {{GENDER:$2|carregou}} $3",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|carregada}} uma nova versão de $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|carregado}} $3",
        "log-name-managetags": "Registo de gestão de etiquetas",
        "default-skin-not-found": "Ops! A aparência padrão para sua wiki, definida em <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, não está disponível.\n\nSua instalação parece incluir a(s) seguinte(s) {{PLURAL:$4|aparência|aparências}}. Veja [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Configuração de aparência] para informações sobre como  {{PLURAL:$4|habilitá-la|habilitá-las e escolha a padrão}}.\n\n$2\n\n; Se você já instalou o MediaWiki:\n: Você provavelmente instalou do git, ou diretamente do código fonte usando usando algum outro método. Isto é esperado. Tente instalar algumas aparências do [https://www.mediawiki.org/wiki/Category:All_skins diretório de aparências do mediawiki.org]:\n:* Baixando o [https://www.mediawiki.org/wiki/Download instalador tarball], que vem com várias aparências e extensões. Você pode copiar e colar o diretório <code>skins/</code> dele.\n:* Baixando tarballs individuais de aparência de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git/pt-br#Usando_o_Git_para_baixar_extensões_do_MediaWiki Usando o Git para baixar aparências].\n: Fazer isso não deve interferir no seu repositório git se você é um desenvolvedor MediaWiki.\n\n; Se você já atualizou o MediaWiki:\n: O MediaWiki 1.24 e os mais recentes não permitem mais aparências instaladas automaticamente (veja [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Você pode colar {{PLURAL:$5|a seguinte linha|as seguintes linhas}} em <code>LocalSettings.php</code> para habilitar {{PLURAL:$5|a|todas as}} {{PLURAL:$5|aparência instalada|aparências instaladas}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Se você já modificou <code>LocalSettings.php</code>:\n: Verifique cuidadosamente se não há erros de digitação nos nomes das aparências.",
        "default-skin-not-found-no-skins": "Opa! A aparência padrão da sua wiki, definida em <code>$wgDefaultSkin</code> como <code>$1</code>, não está disponível.\n\nVocê não tem aparências instaladas.\n\n; Se você acabou de instalar ou atualizar o MediaWiki:\n: Você provavelmente instalou do git, ou diretamente do código-fonte usando usando algum outro método. Isto é esperado. O MediaWiki 1.24 e mais recentes não incluem aparências no repositório principal. Tente instalar algumas aparências do [https://www.mediawiki.org/wiki/Category:All_skins/pt-br diretório de aparências do mediawiki.org]:\n:* Baixando o [https://www.mediawiki.org/wiki/Download/pt-br instalador tarball], que vem com várias aparências e extensões. Você pode copiar e colar o diretório <code>skins/</code> dele.\n:* Baixando tarballs individuais de aparência do [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Usando_o_Git_para_baixar_aparências_do_MediaWiki Usando o Git para baixar aparências].\n: Fazer isso não deve interferir no seu repositório git se você for um(a) desenvolvedor(a) do MediaWiki. Veja [https://www.mediawiki.org/wiki/Manual:Skin_configuration/pt-br Manual:Configuração de aparências] para informações sobre como habilitar aparências e escolher a padrão.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (habilitado)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desabilitado''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>desabilitado</strong>)",
        "mediastatistics": "Estatísticas de mídia",
        "mediastatistics-summary": "Estatísticas sobre os tipos de arquivos carregados. Inclui apenas a versão mais recente do arquivo. Versões antigas ou apagadas são excluídas.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
index d01a6a7..7a17015 100644 (file)
                        "Macofe",
                        "He7d3r",
                        "Ti4goc",
-                       "Jkb8"
+                       "Jkb8",
+                       "Önni",
+                       "Diniscoelho",
+                       "Josep Maria Roca Peña"
                ]
        },
        "tog-underline": "Sublinhar ligações:",
        "myprivateinfoprotected": "Não tem permissão para editar a sua informação privada.",
        "mypreferencesprotected": "Não tem permissão para editar as suas preferências.",
        "ns-specialprotected": "Não é possível editar páginas especiais.",
-       "titleprotected": "Este título foi protegido contra criação por [[User:$1|$1]].\nA justificação dada foi \"''$2''\".",
+       "titleprotected": "Este título foi protegido contra criação por [[User:$1|$1]].\nA justificação dada foi <em>$2</em>.",
        "filereadonlyerror": "Não é possível modificar o ficheiro \"$1\" porque o repositório de ficheiros \"$2\" está em modo de leitura.\n\nO administrador do sistema que efetuou o bloqueio deu a seguinte explicação: \"$3\".",
        "invalidtitle-knownnamespace": "Título inválido com o domínio \"$2\" e texto \"$3\"",
        "invalidtitle-unknownnamespace": "Título inválido com número de domínio $1 desconhecido e texto \"$2\"",
        "nocookieslogin": "A {{SITENAME}} utiliza ''cookies'' para autenticar os utilizadores.\nOs ''cookies'' estão desativados no seu navegador.\nAtive-os e tente novamente, por favor.",
        "nocookiesfornew": "A conta de utilizador não foi criada, porque não foi possível confirmar a sua origem.\nCertifique-se de que tem os ''cookies'' ativados, recarregue esta página e tente novamente.",
        "noname": "Não especificou um nome de utilizador válido.",
-       "loginsuccesstitle": "Início de sessão bem sucedido",
+       "loginsuccesstitle": "Autenticação bem sucedida",
        "loginsuccess": "'''Encontra-se agora ligado à {{SITENAME}} como \"$1\"'''.",
        "nosuchuser": "Não existe nenhum utilizador com o nome \"$1\".\nOs nomes de utilizador são sensíveis à capitalização.\nVerifique a ortografia, ou [[Special:UserLogin/signup|crie uma nova conta]].",
        "nosuchusershort": "Não existe um utilizador com o nome \"$1\". Verifique o nome que introduziu.",
        "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 eletrónico, na wiki {{SITENAME}} ($4), com a palavra-passe \"$3\".\nDeve agora iniciar sessão e alterar a sua palavra-passe.\n\nSe a conta foi criada por engano, pode ignorar esta mensagem.",
        "login-throttled": "Realizou demasiadas tentativas de início de sessão com esta conta.\nAguarde $1 antes de tentar novamente, por favor.",
-       "login-abort-generic": "O início de sessão não teve êxito - Cancelado",
+       "login-abort-generic": "O início de sessão falhou - Cancelado",
        "login-migrated-generic": "A sua conta foi migrada e o seu nome de utilizador já não existe nesta wiki.",
        "loginlanguagelabel": "Idioma: $1",
        "suspicious-userlogout": "O seu pedido para sair foi negado porque parece ter sido enviado por um navegador danificado ou por um proxy com cache.",
        "botpasswords-insert-failed": "Falhou ao adicionar o nome do robô \"$1\". Já foi adicionado?",
        "botpasswords-update-failed": "Falha ao atualizar o nome do robô \"$1\". Será que foi eliminado?",
        "botpasswords-created-title": "Criada palavra-passe para o robô",
-       "botpasswords-created-body": "A palavra-passe para o robô \"$1\" foi criada com sucesso.",
+       "botpasswords-created-body": "O robô palavra-passe para o nome do robô \"$1\" do utilizador \"$2\" foi criado.",
        "botpasswords-updated-title": "A palavra-passe de robô foi actualizada.",
-       "botpasswords-updated-body": "A palavra-passe de robô \"$1\" foi actualizada com sucesso.",
+       "botpasswords-updated-body": "O robô palavra-passe para o nome do robô \"$1\" do utilizador \"$2\" foi atualizado.",
        "botpasswords-deleted-title": "Palavra-passe de robô eliminada",
-       "botpasswords-deleted-body": "A palavra-passe de robô \"$1\" foi eliminada.",
+       "botpasswords-deleted-body": "O robô palavra-passe para o nome do robô \"$1\"do utilizador \"$2\" foi eliminado.",
        "botpasswords-newpassword": "A nova palavra-passe para iniciar sessão com <strong>$1</strong> é <strong>$2</strong>. Por favor, recorde-se dela para futura referência.</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider não está disponível.",
        "resetpass_forbidden": "Não é possível alterar palavras-passe",
        "resetpass-no-info": "Precisa de iniciar sessão para aceder diretamente a esta página.",
        "resetpass-submit-loggedin": "Alterar palavra-passe",
        "resetpass-submit-cancel": "Cancelar",
-       "resetpass-wrong-oldpass": "Palavra-passe temporária ou atual inválida.\nPode ter já alterado com sucesso a sua palavra-passe ou solicitado uma nova palavra-passe temporária.",
+       "resetpass-wrong-oldpass": "Palavra-passe temporária ou atual inválida.\nPode ter já alterado a sua palavra-passe ou solicitado uma nova palavra-passe temporária.",
        "resetpass-recycled": "Redefina a sua palavra-passe para uma diferente da atual, por favor.",
        "resetpass-temp-emailed": "Iniciou a sessão com um código temporário.\nPara completar a autenticação, tem de definir uma palavra-passe nova aqui:",
        "resetpass-temp-password": "Palavra-passe temporária:",
        "copyrightwarning2": "Note, por favor, que todas as suas contribuições na {{SITENAME}} podem ser editadas, alteradas ou removidas por outros utilizadores.\nSe não deseja que o seu texto seja inexoravelmente editado, não o envie.<br />\nGarante-nos também que isto é algo escrito por si, ou copiado do domínio público ou de outra fonte de teor livre (consulte $1 para mais detalhes).<br />\n'''Não envie conteúdos cujos direitos de autor estão protegidos, sem ter a devida permissão!'''",
        "editpage-cannot-use-custom-model": "O modelo de conteúdo desta página não pode ser alterado.",
        "longpageerror": "'''Erro: O texto que submeteu ocupa {{PLURAL:$1|um kilobyte|$1 kilobytes}}, que excede o máximo de {{PLURAL:$2|um kilobyte|$2 kilobytes}}.'''\nA página não pode ser gravada.",
-       "readonlywarning": "'''Aviso: A base de dados foi bloqueada para manutenção, pelo que não poderá gravar a sua edição neste momento.'''\nPode, no entanto, copiar e colar o seu texto num ficheiro de texto e guardá-lo para mais tarde.\n\nO administrador que bloqueou a base de dados forneceu a seguinte explicação: $1",
+       "readonlywarning": "<strong>Atenção: A base de dados foi bloqueada para manutenção, pelo que não poderá gravar as suas edições neste momento.</strong>\nPode, contudo, copiar e colar o seu texto num ficheiro de texto e guardá-lo para mais tarde.\n\nO administrador do sistema que a bloqueou forneceu a seguinte explicação: $1",
        "protectedpagewarning": "'''Aviso: Esta página foi protegida para só poder ser editada por administradores.'''\nO último registo é apresentado abaixo para referência:",
        "semiprotectedpagewarning": "'''Nota:''' Esta página foi protegida de modo a que apenas utilizadores registados a possam editar.\nA última entrada no histórico é fornecida abaixo como referência.",
        "cascadeprotectedwarning": "<strong>Aviso:</strong> Esta página está protegida de forma que apenas os administradores possam editá-la, porque se encontra transcluída {{PLURAL:$1|na seguinte página protegida|nas seguintes páginas protegidas}} em cascata:",
        "permissionserrors": "Erro de permissão",
        "permissionserrorstext": "Não possui permissão para fazer isso, {{PLURAL:$1|pelo seguinte motivo|pelos seguintes motivos}}:",
        "permissionserrorstext-withaction": "Não possui permissão para $2, {{PLURAL:$1|pelo seguinte motivo|pelos seguintes motivos}}:",
-       "contentmodelediterror": "Não pode editar esta revisão pois seu modelo de conteúdo é <code>$1</code>, e o modelo actual do conteúdo da página é <code>$2</code>.",
+       "contentmodelediterror": "Não pode editar esta revisão pois seu modelo de conteúdo é <code>$1</code>, que é diferente do modelo atual da página <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Aviso: Está a recriar uma página anteriormente eliminada.'''\n\nVerifique se é apropriado continuar a editar esta página.\nPara sua conveniência, é apresentado de seguida o registo de eliminação e de movimento da página:",
        "moveddeleted-notice": "Esta página foi eliminada.\nPara referência, é apresentado de seguida o registo de eliminações e de movimento da página.",
        "moveddeleted-notice-recent": "Desculpe, esta página foi eliminada recentemente (nas últimas 24 horas).\nA exclusão e registo de movimentação para a página são fornecidos abaixo para referência.",
        "undo-summary-username-hidden": "Desfez a edição $1 de um utilizador oculto",
        "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]].\n\nO 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]].\n\nA razão dada por $3 é ''$2''",
+       "cantcreateaccount-range-text": "A criação de conta a partir dos endereços IP no intervalo <strong>$1</strong>, que inclui o seu endereço IP (<strong>$4</strong>), foi bloqueada por [[User:$3|$3]].\n\nA razão dada por $3 é <em>$2</em>",
        "viewpagelogs": "Ver registos para esta página",
        "nohistory": "Não há histórico de edições para esta página.",
        "currentrev": "Revisão atual",
        "revdelete-unsuppress": "Remover restrições das revisões restauradas",
        "revdelete-log": "Motivo:",
        "revdelete-submit": "Aplicar {{PLURAL:$1|à revisão selecionada|às revisões selecionadas}}",
-       "revdelete-success": "'''A visibilidade da revisão foi atualizada.'''",
+       "revdelete-success": "Visibilidade da revisão atualizada.",
        "revdelete-failure": "'''A visibilidade da revisão não foi atualizada:'''\n$1",
-       "logdelete-success": "'''A visibilidade da entrada do registo foi definida.'''",
+       "logdelete-success": "Visibilidade da entrada do registo definida.",
        "logdelete-failure": "'''Não foi possível definir a visibilidade da entrada do registo:'''\n$1",
        "revdel-restore": "Alterar visibilidade",
        "pagehist": "Histórico da página",
        "mergehistory-fail-bad-timestamp": "Registo data/hora inválido",
        "mergehistory-fail-invalid-source": "Página de origem inválida.",
        "mergehistory-fail-invalid-dest": "Página de destino inválida.",
+       "mergehistory-fail-permission": "Privilégios insuficientes para fundir os históricos.",
        "mergehistory-fail-self-merge": "As páginas de origem e de destino não podem ser a mesma.",
        "mergehistory-fail-toobig": "Não é possível fundir o histórico, já que um número de revisão(ões) acima do limite ($1 {{PLURAL:$1|revisão|revisões}}) seriam movidos.",
        "mergehistory-no-source": "A página de origem $1 não existe.",
        "prefs-tabs-navigation-hint": "Dica: Pode usar as setas direita e esquerda do teclado para navegar entre os separadores.",
        "userrights": "Gestão de privilégios {{GENDER:{{BASEPAGENAME}}|do utilizador|da utilizadora|de utilizador(a)}}",
        "userrights-lookup-user": "Gerir grupos de utilizadores",
-       "userrights-user-editname": "Introduza um nome de utilizador:",
+       "userrights-user-editname": "Introduza um nome de utilizador(a):",
        "editusergroup": "Editar grupos {{GENDER:$1|do utilizador|da utilizadora|do(a) utilizador(a)}}",
        "editinguser": "A modificar os privilégios {{GENDER:$1|do utilizador|da utilizadora|do(a) utilizador(a)}}  <strong>[[User:$1|$1]]</strong> $2",
-       "userrights-editusergroup": "Editar grupos do utilizador",
+       "userrights-editusergroup": "Editar grupos {{GENDER:$1|do utilizador|da utilizadora|do(a) utilizador(a)}}",
        "saveusergroups": "Gravar grupos {{GENDER:$1|do utilizador|da utilizadora|do(a) utilizador(a)}}",
        "userrights-groupsmember": "Membro de:",
        "userrights-groupsmember-auto": "Membro implícito de:",
        "userrights-changeable-col": "Grupos que pode alterar",
        "userrights-unchangeable-col": "Grupos que não pode alterar",
        "userrights-conflict": "Conflito entre alterações de privilégios de utilizador! Por favor, reveja e confirme as suas mudanças.",
-       "userrights-removed-self": "Removeu com sucesso os seus privilégios. Como resultado disso, já não consegue aceder a esta página.",
+       "userrights-removed-self": "Removeu os seus privilégios. Como resultado disto, já não consegue aceder a esta página.",
        "group": "Grupo:",
        "group-user": "Utilizadores",
        "group-autoconfirmed": "Utilizadores autoconfirmados",
        "right-createpage": "Criar páginas (que não sejam páginas de discussão)",
        "right-createtalk": "Criar páginas de discussão",
        "right-createaccount": "Criar novas contas de utilizador",
+       "right-autocreateaccount": "Aceder ao sistema automaticamente com uma conta de usuario externa",
        "right-minoredit": "Marcar edições como menores",
        "right-move": "Mover páginas",
        "right-move-subpages": "Mover páginas com as suas subpáginas",
        "right-managechangetags": "Criar e eliminar [[Special:Tags|etiquetas]] da base de dados",
        "right-applychangetags": "Aplicar [[Special:Tags|etiquetas]] juntamente com as alterações",
        "right-changetags": "Adicionar ou remover [[Special:Tags|etiquetas]] arbitrárias em revisões e entradas de registo individuais",
-       "grant-generic": "Pacote de direitos \"$1\"",
+       "grant-generic": "Conjunto de direitos \"$1\"",
        "grant-group-page-interaction": "Interagir com páginas",
        "grant-group-file-interaction": "Interagir com conteúdo multimédia",
        "grant-group-watchlist-interaction": "Interagir com a sua lista de vigiados",
        "recentchanges-label-bot": "Esta edição foi feita por um robô",
        "recentchanges-label-unpatrolled": "Esta edição ainda não foi patrulhada",
        "recentchanges-label-plusminus": "Alteração no tamanho da página, em bytes",
-       "recentchanges-legend-heading": "'''Legenda:'''",
+       "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|lista de páginas novas]])",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "Mostrar",
        "recentchangeslinked-page": "Nome da página:",
        "recentchangeslinked-to": "Inversamente, mostrar mudanças às páginas que contêm ligações para esta",
        "recentchanges-page-added-to-category": "[[:$1]] foi adicionada à categoria",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] e {{PLURAL:$2|uma outra página|$2 outras páginas}} foram adicionadas à categoria",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] e [[Special:WhatLinksHere/$1|{{PLURAL:$2|uma outra página|$2 outras páginas}}]] foram adicionadas à categoria",
        "recentchanges-page-removed-from-category": "[[:$1]] foi removida da categoria",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] e {{PLURAL:$2|uma outra página|$2 outras páginas}} foram removidas da categoria",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] e [[Special:WhatLinksHere/$1|{{PLURAL:$2|uma outra página|$2 outras páginas}}]] foram removidas da categoria",
        "autochange-username": "Alteração automática do MediaWiki",
        "upload": "Carregar ficheiro",
        "uploadbtn": "Carregar ficheiro",
        "backend-fail-read": "Não foi possível ler o ficheiro \"$1\".",
        "backend-fail-create": "Não foi possível gravar o ficheiro \"$1\".",
        "backend-fail-maxsize": "Não foi possível gravar o ficheiro \"$1\" porque tem mais do que {{PLURAL:$2|um byte|$2 bytes}}.",
-       "backend-fail-readonly": "O servidor de armazenamento \"$1\" está atualmente no modo \"somente leitura\". A razão dada foi: \"$2\"",
+       "backend-fail-readonly": "O servidor de armazenamento \"$1\" está atualmente no modo \"somente leitura\". A razão dada foi: <em>\"$2\"</em>",
        "backend-fail-synced": "O ficheiro \"$1\" está num estado inconsistente nos servidores de armazenamento interno",
        "backend-fail-connect": "Não foi possível estabelecer ligação com o servidor de armazenamento \"$1\".",
        "backend-fail-internal": "Ocorreu um erro desconhecido no servidor de armazenamento \"$1\".",
        "uploadstash-summary": "Esta página dá acesso aos ficheiros enviados (ou que estão no processo de envio) mas que ainda não foram publicados na wiki. Estes ficheiros não são visíveis para ninguém, exceto para o utilizador que os enviou.",
        "uploadstash-clear": "Apagar os ficheiros escondidos",
        "uploadstash-nofiles": "Não tem ficheiros escondidos.",
-       "uploadstash-badtoken": "Não foi possível executar essa operação, talvez porque as suas credenciais de edição expiraram. Tente novamente.",
+       "uploadstash-badtoken": "Não foi possível executar a operação. Talvez as suas credenciais de edição tenham expirado. Tente novamente.",
        "uploadstash-errclear": "Não foi possível apagar os ficheiros.",
        "uploadstash-refresh": "Atualizar a lista de ficheiros",
        "invalid-chunk-offset": "Deslocamento de fragmento inválido",
        "apihelp-no-such-module": "Módulo \"$1\" não encontrado.",
        "apisandbox": "Testes da API",
        "apisandbox-api-disabled": "A API está desativada neste site.",
-       "apisandbox-intro": "Use esta página para fazer experiências com a '''API de <i>web services</i> do MediaWiki'''.\nConsulte a [//www.mediawiki.org/wiki/API:Main_page documentação da API] para informações sobre o uso da API. Exemplo: [//www.mediawiki.org/wiki/API#A_simple_example obter o conteúdo da Página Principal]. Selecione uma operação para ver mais exemplos.\n\nNote que, embora esta seja uma área de testes, as operações que executar nesta página podem modificar a wiki.",
+       "apisandbox-intro": "Use esta página para fazer experiências com a <strong>API de serviços da web do MediaWiki</strong>.\nConsulte a [[mw:API:Main page|documentação da API]] para informações sobre o uso da API. Exemplo: [//www.mediawiki.org/wiki/API#A_simple_example obter o conteúdo da Página Principal]. Selecione uma operação para ver mais exemplos.\n\nNote que, embora esta seja uma área de testes, as operações que executar nesta página podem modificar a wiki.",
        "apisandbox-fullscreen": "Expandir painel",
+       "apisandbox-fullscreen-tooltip": "Expandir o painel da página de testes para preencher a janela do navegador.",
        "apisandbox-unfullscreen": "Mostrar página",
        "apisandbox-submit": "Fazer o pedido",
        "apisandbox-reset": "Limpar",
        "apisandbox-retry": "Tentar novamente",
+       "apisandbox-loading": "A carregar a informação do módulo API \"$1\"...",
+       "apisandbox-load-error": "Ocorreu um erro ao carregar a informação do módulo API \"$1\": $2",
+       "apisandbox-no-parameters": "Este módulo API não possui parâmetros.",
+       "apisandbox-helpurls": "Ligações de ajuda",
        "apisandbox-examples": "Exemplos",
+       "apisandbox-dynamic-parameters": "Parâmetros adicionais",
        "apisandbox-dynamic-parameters-add-label": "Adicionar parâmetro:",
        "apisandbox-dynamic-parameters-add-placeholder": "Nome do parâmetro",
        "apisandbox-dynamic-error-exists": "Um parâmetro com o nome \"$1\" já existe.",
        "apisandbox-deprecated-parameters": "Parâmetros obsoletos",
+       "apisandbox-fetch-token": "Auto-preencher o token",
        "apisandbox-submit-invalid-fields-title": "Alguns campos são inválidos",
        "apisandbox-submit-invalid-fields-message": "Por favor, corrija os campos marcados e tente novamente.",
        "apisandbox-results": "Resultados",
        "showhideselectedlogentries": "Mostrar ou ocultar as entradas selecionadas",
        "log-edit-tags": "Editar etiquetas das entradas de registo selecionadas",
        "checkbox-select": "Selecionar: $1",
+       "checkbox-all": "Todas",
+       "checkbox-none": "Nenhuma",
        "checkbox-invert": "Inverter",
        "allpages": "Todas as páginas",
        "nextpage": "Página seguinte ($1)",
        "delete-toobig": "Esta página tem um histórico longo, com mais de $1 {{PLURAL:$1|edição|edições}}.\nA eliminação de páginas como esta foi restringida na {{SITENAME}}, para evitar problemas acidentais.",
        "delete-warning-toobig": "Esta página tem um histórico de edições longo, com mais de $1 {{PLURAL:$1|edição|edições}}.\nEliminá-la poderá causar problemas na base de dados da {{SITENAME}};\nprossiga com precaução.",
        "deleteprotected": "Não é possível eliminar esta página porque foi protegida.",
-       "deleting-backlinks-warning": "'''Aviso:''' Existem [[Special:WhatLinksHere/{{FULLPAGENAME}}|páginas]] que contêm ligações para a página que está prestes a eliminar ou que a transcluem.",
+       "deleting-backlinks-warning": "<strong>Aviso:</strong> Existem [[Special:WhatLinksHere/{{FULLPAGENAME}}|páginas]] que contêm ligações para a página que está prestes a eliminar ou que a transcluem.",
        "rollback": "Reverter edições",
        "rollbacklink": "reverter",
        "rollbacklinkcount": "reverter $1 {{PLURAL:$1|edição|edições}}",
        "rollbackfailed": "A reversão falhou",
        "cantrollback": "Não foi possível reverter a edição; o último contribuidor é o único autor desta página",
        "alreadyrolled": "Não foi possível reverter as edições de [[:$1]] por [[User:$2|$2]] ([[User talk:$2|discussão]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nalguém editou ou já reverteu a página.\n\nA última edição foi de [[User:$3|$3]] ([[User talk:$3|discussão]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "O resumo da edição era: \"''$1''\".",
+       "editcomment": "O resumo da edição era: <em$1</em>.",
        "revertpage": "Foram revertidas as edições de [[Special:Contributions/$2|$2]] ([[User talk:$2|disc]]) para a última revisão de [[User:$1|$1]]",
        "revertpage-nouser": "Foram revertidas as edições de um utilizador oculto para a última revisão de {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Foram revertidas as edições de $1, com o conteúdo passando a estar como na última edição de $2.",
        "changecontentmodel-title-label": "Título da página",
        "changecontentmodel-model-label": "Novo modelo de conteúdo",
        "changecontentmodel-reason-label": "Motivo:",
+       "changecontentmodel-submit": "Alterar",
        "changecontentmodel-success-title": "O modelo de conteúdo foi alterado",
        "changecontentmodel-success-text": "O tipo de conteúdo de [[:$1]] foi alterado.",
        "logentry-contentmodel-change-revertlink": "reverter",
        "unblock": "Desbloquear utilizador",
        "blockip": "Bloquear {{GENDER:$1|utilizador|utilizadora|utilizador(a)}}",
        "blockip-legend": "Bloquear utilizador(a)",
-       "blockiptext": "Utilize o formulário abaixo para bloquear o acesso de escrita a um endereço IP específico ou a um nome de utilizador(a).\nIsto só deve ser feito para prevenir vandalismo e de acordo com a [[{{MediaWiki:Policy-url}}|política]]. Indique a seguir um motivo de bloqueio específico (por exemplo, indicando as páginas que foram alvo de vandalismo).",
+       "blockiptext": "Utilize o formulário abaixo para bloquear o acesso de escrita a um endereço IP específico ou a um nome de utilizador(a).\nIsto só deve ser feito para prevenir vandalismo e de acordo com a [[{{MediaWiki:Policy-url}}|política]]. Indique a seguir um motivo de bloqueio específico (por exemplo, indicando as páginas que foram alvo de vandalismo).\nPode bloquear intervalos de endereços IP com a sintaxe [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]; o maior intervalo permitido é /$1 para IPv4 e /$2 para IPv6.",
        "ipaddressorusername": "Endereço de IP ou utilizador(a):",
        "ipbexpiry": "Expiração:",
        "ipbreason": "Motivo:",
        "block-log-flags-hiddenname": "nome de utilizador oculto",
        "range_block_disabled": "A funcionalidade de administrador para o bloqueio de gamas de IP está desativada.",
        "ipb_expiry_invalid": "Tempo de expiração inválido.",
+       "ipb_expiry_old": "O tempo de expiração está no passado.",
        "ipb_expiry_temp": "Bloqueios com nome de utilizador oculto devem ser permanentes.",
        "ipb_hide_invalid": "Não foi possível suprimir esta conta; ela possui mais de {{PLURAL:$1|uma edição|$1 edições}}.",
        "ipb_already_blocked": "\"$1\" já se encontra bloqueado",
        "import-interwiki-history": "Copiar todo o histórico de revisões desta página",
        "import-interwiki-templates": "Incluir todas as predefinições",
        "import-interwiki-submit": "Importar",
+       "import-mapping-default": "Importar para localizações predefinidas",
+       "import-mapping-namespace": "Importar para um domínio:",
+       "import-mapping-subpage": "Importar como sub-páginas da seguinte página:",
        "import-upload-filename": "Nome do ficheiro:",
        "import-comment": "Comentário:",
        "importtext": "Exporte o ficheiro da wiki de origem utilizando a página especial [[Special:Export|exportação de páginas]].\nGrave o ficheiro no seu computador e importe-o aqui.",
        "svg-long-error": "Ficheiro SVG inválido: $1",
        "show-big-image": "Ficheiro original",
        "show-big-image-preview": "Tamanho desta antevisão: $1.",
+       "show-big-image-preview-differ": "Tamanho desta antevisão em $3 do ficheiro $2: $1",
        "show-big-image-other": "{{PLURAL:$2|Outra resolução|Outras resoluções}}: $1.",
        "show-big-image-size": "$1 × $2 pixels",
        "file-info-gif-looped": "cíclico",
        "exif-compression-4": "CCITT Grupo 4 codificação de fax",
        "exif-copyrighted-true": "Direitos de autor reservados",
        "exif-copyrighted-false": "Situação dos direitos autorais não definida",
+       "exif-photometricinterpretation-1": "Preto e branco (Preto é 0)",
        "exif-unknowndate": "Data desconhecida",
        "exif-orientation-1": "Normal",
        "exif-orientation-2": "Espelhamento horizontal",
        "version-libraries-license": "Licença",
        "version-libraries-description": "Descrição",
        "version-libraries-authors": "Autores",
-       "redirect": "Redirecionar pelo ID do ficheiro, do utilizador ou da revisão",
+       "redirect": "Redirecionar por ficheiro, utilizador, página, revisão, ou ID de registo",
        "redirect-legend": "Redirecionar para um ficheiro ou página",
-       "redirect-summary": "Esta página especial redireciona 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-summary": "Esta página especial redireciona 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), ou para uma entrada do registo (dado o ID do registo). Utilização: [[{{#Special:Redirect}}/file/Example.jpg]], \n[[{{#Special:Redirect}}/page/64308]], [{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], ou [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Ir",
        "redirect-lookup": "Pesquisa:",
        "redirect-value": "Valor:",
        "redirect-page": "Identificador (ID) da página",
        "redirect-revision": "Revisão da página",
        "redirect-file": "Nome do ficheiro",
+       "redirect-logid": "ID do registo",
        "redirect-not-exists": "Valor não encontrado",
        "fileduplicatesearch": "Ficheiros duplicados",
        "fileduplicatesearch-summary": "Procure ficheiros duplicados tendo por base o seu resumo criptográfico.",
        "tags-delete-not-allowed": "Etiquetas definidas por uma extensão não podem ser eliminadas, a menos que a extensão, especificamente, o permita.",
        "tags-delete-not-found": "A etiqueta \"$1\" não existe.",
        "tags-delete-too-many-uses": "A etiqueta \"$1\" está aplicada em mais que $2 {{PLURAL:$2|edição|edições}}, o que significa que não pode ser eliminada.",
-       "tags-delete-warnings-after-delete": "A etiqueta \"$1\" foi eliminada com sucesso, mas {{PLURAL:$2|o seguinte aviso foi encontrado|os seguintes avisos foram encontrados}}:",
+       "tags-delete-warnings-after-delete": "A etiqueta \"$1\" foi eliminada, mas {{PLURAL:$2|o seguinte aviso foi encontrado|os seguintes avisos foram encontrados}}:",
        "tags-activate-title": "Ativar etiqueta",
        "tags-activate-question": "Está prestes a ativar a etiqueta \"$1\".",
        "tags-activate-reason": "Motivo:",
        "tags-edit-revision-legend": "Adicionar ou remover etiquetas {{PLURAL:$1|desta revisão|de todas as $1 revisões}}",
        "tags-edit-logentry-legend": "Adicionar ou remover etiquetas {{PLURAL:$1|desta entrada de registo|de todas as $1 entradas de registo}}",
        "tags-edit-existing-tags": "Etiquetas existentes:",
-       "tags-edit-existing-tags-none": "''Nenhuma''",
+       "tags-edit-existing-tags-none": "<em>Nenhuma</em>",
        "tags-edit-new-tags": "Novas etiquetas:",
        "tags-edit-add": "Adicionar estas etiquetas:",
        "tags-edit-remove": "Remover estas etiquetas:",
        "tags-edit-reason": "Motivo:",
        "tags-edit-revision-submit": "Aplicar alterações a {{PLURAL:$1|esta revisões|$1 revisões}}",
        "tags-edit-logentry-submit": "Aplicar alterações a {{PLURAL:$1|esta entrada de registo|$1 entradas de registo}}",
-       "tags-edit-success": "As alterações foram aplicadas com sucesso.",
+       "tags-edit-success": "As alterações foram aplicadas.",
        "tags-edit-failure": "As alterações não puderam ser aplicadas:\n$1",
        "tags-edit-nooldid-title": "Revisão de página inválida",
        "tags-edit-nooldid-text": "Não foi especificada nenhuma revisão na qual será realizada esta ação, ou a revisão especificada não existe.",
        "logentry-newusers-byemail": "A conta de utilizador $3 foi criada por $1 e a palavra-passe foi enviada por correio eletrónico",
        "logentry-newusers-autocreate": "A conta de utilizador $1 foi criada automaticamente",
        "logentry-protect-move_prot": "$1 {{GENDER:$2|moveu}} as preferências de proteção de $4 para $3",
-       "logentry-protect-unprotect": "$1 {{GENDER:$2|removido}} proteção de $3",
+       "logentry-protect-unprotect": "$1 {{GENDER:$2|removeu}} a proteção de $3",
        "logentry-protect-protect": "$1 {{GENDER:$2|protegeu}} $3 $4",
-       "logentry-protect-protect-cascade": "$1 {{GENDER:$2|protegido}} $3 $4 [cascading]",
-       "logentry-protect-modify": "$1 {{GENDER:$2|alterado}} nível de proteção para $3 $4",
-       "logentry-protect-modify-cascade": "$1 {{GENDER:$2|alterado}} nível de proteção para us$3 $4 [cascading]",
+       "logentry-protect-protect-cascade": "$1 {{GENDER:$2|protegeu}} $3 $4 [em cascata]",
+       "logentry-protect-modify": "$1 {{GENDER:$2|alterou}} o nível de proteção para $3 $4",
+       "logentry-protect-modify-cascade": "$1 {{GENDER:$2|alterou}} o nível de proteção para $3 $4 [em cascata]",
        "logentry-rights-rights": "$1 modificou os privilégios do utilizador $3 de $4 para $5",
        "logentry-rights-rights-legacy": "$1 alterou os grupos de $3",
        "logentry-rights-autopromote": "$1 foi automaticamente {{GENDER:$2|promovido|promovida}} de $4 a $5",
        "expand_templates_preview": "Antevisão do resultado",
        "expand_templates_preview_fail_html": "<em>Devido ao fato de {{SITENAME}} possuir código HTML puro ativado e de ter havido perda de dados da sessão, a pré-visualização ficará oculta como precaução contra ataques por JavaScript.</em>\n\n<strong>Se esta é uma legítima tentativa de visualização, por favor tente novamente.</strong>\nCaso continue a não funcionar, tente [[Special:UserLogout|sair]] e voltar a entrar na sua conta, e verifique se o seu navegador permite a utilização de ''cookies'' deste sítio.",
        "expand_templates_preview_fail_html_anon": "<em>Devido ao fato de {{SITENAME}} possuir código HTML puro ativado e de não ter sessão iniciada, a pré-visualização ficará oculta como precaução contra ataques do JavaScript.</em>\n\n<strong>Se esta é uma legítima tentativa de visualização, por favor [[Especial:UserLogin|inicie sessão]] e tente novamente.</strong>",
+       "expand_templates_input_missing": "Necessita de fornecer pelo menos algum texto de entrada.",
        "pagelanguage": "Alterar idioma da página",
        "pagelang-name": "Página",
        "pagelang-language": "Idioma",
        "log-description-pagelang": "Este é um registo de alterações aos idiomas das páginas.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|alterou}} o idioma da página $3 de $4 para $5.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (ativado)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desativado''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>desativado</strong>)",
        "mediastatistics": "Estatísticas multimédia",
        "mediastatistics-summary": "Estatísticas sobre os tipos de ficheiros carregados. Inclui apenas a versão mais recente do ficheiro. Versões antigas ou eliminadas são excluídas.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
        "mw-widgets-titleinput-description-new-page": "a página ainda não existe.",
        "mw-widgets-titleinput-description-redirect": "redirecionar para $1",
        "api-error-blacklisted": "Escolha um título diferente e descritivo, por favor.",
+       "sessionprovider-generic": "Sessões $1",
+       "sessionprovider-mediawiki-session-cookiesessionprovider": "sessões baseadas em cookie",
+       "sessionprovider-nocookies": "Os cookies podem estar desativados. Certifique-se de que os cookies estão ativados e inicie novamente.",
        "randomrootpage": "Página raiz aleatória"
 }
index 405f24b..0c588fa 100644 (file)
        "nocookiesfornew": "This message is displayed when the user tried to create a new account, but it failed the cross-site request forgery (CSRF) check. It could be blocking an attack, but most likely, the browser isn't  accepting cookies.",
        "nocookiesforlogin": "{{optional}}\nThis message is displayed when someone tried to login and the CSRF failed (most likely, the browser doesn't accept cookies).\n\nDefault:\n* {{msg-mw|Nocookieslogin}}",
        "noname": "Error message.",
-       "loginsuccesstitle": "The title of the page saying that you are logged in. The content of the page is the message {{msg-mw|Loginsuccess}}.\n{{Identical|Login successful}}",
+       "loginsuccesstitle": "The title of the page saying that you are logged in. The content of the page is the message {{msg-mw|Loginsuccess}}.\n{{Identical|Log in}}",
        "loginsuccess": "The content of the page saying that you are logged in. The title of the page is {{msg-mw|Loginsuccesstitle}}.\n\nParameters:\n* $1 - the name of the logged in user\n{{Gender}}",
        "nosuchuser": "Displayed when trying to log in with an unexisting username.\n\nWhen you are not allowed to create an account, the following message is displayed:\n* {{msg-mw|Nosuchusershort}}\nParameters:\n* $1 - username",
        "nosuchusershort": "Displayed when trying to log in with a non-existent username.\n\nThis message is only shown when you can't create an account, otherwise the following message is displayed:\n* {{msg-mw|Nosuchusershort}}\n\nParameters:\n* $1 - username",
        "botpasswords-insert-failed": "Error message when saving a new bot password failed. It's likely that the failure was because the user resubmitted the form after a previous successful save. Parameters:\n* $1 - Bot name",
        "botpasswords-update-failed": "Error message when saving changes to an existing bot password failed. It's likely that the failure was because the user deleted the bot password in another browser window. Parameters:\n* $1 - Bot name",
        "botpasswords-created-title": "Title of the success page when a new bot password is created.",
-       "botpasswords-created-body": "Success message when a new bot password is created. Parameters:\n* $1 - Bot name",
+       "botpasswords-created-body": "Success message when a new bot password is created. Parameters:\n* $1 - Bot name\n* $2 - User name",
        "botpasswords-updated-title": "Title of the success page when a bot password is updated.",
-       "botpasswords-updated-body": "Success message when a bot password is updated. Parameters:\n* $1 - Bot name",
+       "botpasswords-updated-body": "Success message when a bot password is updated. Parameters:\n* $1 - Bot name\n* $2 - User name",
        "botpasswords-deleted-title": "Title of the success page when a bot password is deleted.",
-       "botpasswords-deleted-body": "Success message when a bot password is deleted. Parameters:\n* $1 - Bot name",
+       "botpasswords-deleted-body": "Success message when a bot password is deleted. Parameters:\n* $1 - Bot name\n* $2 - User name",
        "botpasswords-newpassword": "Success message to display the new password when a bot password is created or updated. Parameters:\n* $1 - User name to be used for login.\n* $2 - Password to be used for login.",
        "botpasswords-no-provider": "Error message when login is attempted but the BotPasswordsSessionProvider is not included in <code>$wgSessionProviders</code>.",
        "botpasswords-restriction-failed": "Error message when login is rejected because the configured restrictions were not satisfied.",
        "shown-title": "Parameters:\n* $1 - number of search results",
        "viewprevnext": "This is part of the navigation message on the top and bottom of Special pages which are lists of things, e.g. the User's contributions page (in date order) or the list of all categories (in alphabetical order). ($1) and ($2) are either {{msg-mw|Pager-older-n}} and {{msg-mw|Pager-newer-n}} (for date order) or {{msg-mw|Prevn}} and {{msg-mw|Nextn}} (for alphabetical order).\n\nIt is also used by [[Special:WhatLinksHere|Whatlinkshere]] pages, where ($1) and ($2) are {{msg-mw|Whatlinkshere-prev}} and {{msg-mw|Whatlinkshere-next}}.\n($3) is made up in all cases of the various proposed numbers of results per page, e.g. \"(20 | 50 | 100 | 250 | 500)\".\nFor Special pages, the navigation bar is prefixed by \"({{msg-mw|Page first}} | {{msg-mw|Page last}})\" (alphabetical order) or \"({{msg-mw|Histfirst}} | {{msg-mw|Histlast}})\" (date order).\n\nViewprevnext is sometimes preceded by the {{msg-mw|Showingresults}} or {{msg-mw|Showingresultsnum}} message (for Special pages) or by the {{msg-mw|Linkshere}} message (for Whatlinkshere pages).\n\nRefers to {{msg-mw|Pipe-separator}}.",
        "searchmenu-exists": "An option shown in a menu beside search form offering a link to the existing page having the specified title (when using the default MediaWiki search engine).\n\nParameters:\n* $1 - page title\n* $2 - the number of search results found",
-       "searchmenu-new": "An option shown in a menu beside search form offering a red link to the not yet existing page having the specified title (when using the default MediaWiki search engine).\n\nParameters:\n* $1 - page title\n* $2 - the number of search results found",
+       "searchmenu-new": "An option shown in a menu beside search form offering a red link to the not yet existing page having the specified title (when using the default MediaWiki search engine).\nParameters:\n* $1 - page title\n* $2 - the number of search results found\nParameterless gender ({{GENDER:|male|female|unspecified}}) can be used in translations.",
        "searchmenu-new-nocreate": "{{notranslate}}",
        "searchprofile-articles": "A quick link in the advanced search box on [[Special:Search]]. Clicking on this link starts a search in the content pages of the wiki.\n\nA 'content page' is a page that forms part of the purpose of the wiki. It includes the main page and pages in the main namespace and any other namespaces that are included when the wiki is customised. For example on Wikimedia Commons 'content pages' include pages in the file and category namespaces. On Wikinews 'content pages' include pages in the Portal namespace. For technical definition of 'content namespaces' see [[mw:Manual:Using_custom_namespaces#Content_namespaces|MediaWiki]].\n\nPossible alternatives to the word 'content' are 'subject matter' or 'wiki subject' or 'wiki purpose'.\n\n{{Identical|Content page}}",
        "searchprofile-images": "An option in the [[Special:Search]].\n\nSee also:\n* {{msg-mw|Searchprofile-images|message}}\n* {{msg-mw|Searchprofile-images-tooltip|tooltip}}\n{{Identical|Muitimedia}}",
        "uploadstash-badtoken": "Used as error message in [[Special:UploadStash]].",
        "uploadstash-errclear": "Used as error message in [[Special:UploadStash]].",
        "uploadstash-refresh": "Used as link text in [[Special:UploadStash]].",
+       "uploadstash-thumbnail": "Used as link text in [[Special:UploadStash]].",
        "invalid-chunk-offset": "Error that can happen if chunks get uploaded out of order.\nAs a result of this error, clients can continue from an offset provided or restart the upload.\nUsed on [[Special:UploadWizard]].",
        "img-auth-accessdenied": "[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Access Denied\n{{Identical|Access denied}}",
        "img-auth-nopathinfo": "[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Missing PATH_INFO - see english description\n{{Doc-important|This is plain text. Do not use any wiki syntax.}}",
        "changecontentmodel-title-label": "Label for the input field where the target page title should be entered\n{{Identical|Page title}}",
        "changecontentmodel-model-label": "Label of the dropdown listing available content model types the user can change a page to",
        "changecontentmodel-reason-label": "{{Identical|Reason}}",
+       "changecontentmodel-submit": "Label of the form \"submit\" button for [[Special:ChangeContentModel]]\n{{Identical|Change}}",
        "changecontentmodel-success-title": "Title of the success page of the change content model special page",
        "changecontentmodel-success-text": "Message telling user that their change has been successfully done.\n* $1 - Target page title",
        "changecontentmodel-cannot-convert": "Error message shown if the content model cannot be changed to the specified type. $1 is the page title, $2 is the localized content model name.",
        "changecontentmodel-nodirectediting": "Error message shown if the content model does not allow for direct editing. $1 is the localized name of the content model.",
        "log-name-contentmodel": "{{doc-logpage}}\n\nTitle of [[Special:Log/contentmodel]].",
        "log-description-contentmodel": "Text in [[Special:Log/contentmodel]].",
+       "logentry-contentmodel-new": "{{Logentry}}\n$4 is not used.\n$5 is the new content model.",
        "logentry-contentmodel-change": "{{Logentry}}\n$4 is the original content model.\n$5 is the new content model.",
        "logentry-contentmodel-change-revertlink": "Text on a link that reverts the content model change. {{identical|revertmove}}.",
        "logentry-contentmodel-change-revert": "Prefilled edit summary when reverting a content model change. {{identical|revertmove}}",
        "exif-make": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nThe Manufacturer of the digital camera (or scanner) that took the photo.",
        "exif-model": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nThe model of camera (or scanner) used to take the picture.",
        "exif-software": "Short for \"The software which was used to create or modify this image\".\n\nThe property can come from the Exif Software tag, PNG software chunk, iptc-iim 2:65 Software field, or XMP's xmp:CreatorTool field.\n\nExif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].",
-       "exif-artist": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nThis message labels the author or artist of the work. Usually this means who took the photograph, or who drew the picture. The corresponding value field most commonly contains a single author, however it can contain an ordered (or unordered depending on which metadata standard is used to store the information) list of authors. Sometimes the persons position is prefixed before their name such as \"Photographer, John Smith\". The exif standard recommends multiple authors be specified by \"position, Author 1; position for author 2, Author 2's name\" however this doesn't seem to happen in practise very often. If multiple authors are specified using a non-exif standard, then a billeted (or numbered) list is used.\n\nThis property can be specified by exif Artist tag, XMP's tiff:Artist, XMP's dc:creator, iptc-iim's 2:80 byline, PNG's author textual chunk, PNG's (unofficial) artist textual chunk. XMP's photoshop:AuthorsPosition and iptc 2:85 byline-title can also affect display of this property.\n{{Identical|Author}}",
+       "exif-artist": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nThis message labels the author or artist of the work. Usually this means who took the photograph, or who drew the picture. The corresponding value field most commonly contains a single author, however it can contain an ordered (or unordered depending on which metadata standard is used to store the information) list of authors. Sometimes the persons position is prefixed before their name such as \"Photographer, John Smith\". The exif standard recommends multiple authors be specified by \"position, Author 1; position for author 2, Author 2's name\" however this doesn't seem to happen in practice very often. If multiple authors are specified using a non-exif standard, then a billeted (or numbered) list is used.\n\nThis property can be specified by exif Artist tag, XMP's tiff:Artist, XMP's dc:creator, iptc-iim's 2:80 byline, PNG's author textual chunk, PNG's (unofficial) artist textual chunk. XMP's photoshop:AuthorsPosition and iptc 2:85 byline-title can also affect display of this property.\n{{Identical|Author}}",
        "exif-copyright": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nLabel for information contained in exif Copyright tag, XMP dc:rights, IPTC-iim 2:116, or PNG copyright textual chunk.\n\nTypically the copyright statement for the photograph/drawing/video (such as ''(c) 2010 John Smith. Released under GFDL''). Sometimes contains license information. See also {{msg-mw|exif-copyrightowner}}",
        "exif-exifversion": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nVersion of exif standard photo uses. Typically this is 2.22",
        "exif-flashpixversion": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nVersion of flashpix used. Flashpix is a format used for storing some types of metadata in image. It is not as commonly used as EXIF, and mediawiki currently cannot read Flashpix data.",
        "exif-compressedbitsperpixel": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].",
        "exif-pixelydimension": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n{{Identical|Image width}}",
        "exif-pixelxdimension": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n{{Identical|Image height}}",
-       "exif-usercomment": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nComments by user. Sometimes used like ImageDescription when the ImageDescription contained non-ascii characters. (Technically ImageDescription is supposed to contain ascii characters. In practise utf-8 is used in ImageDescription, so this field isn't used too much.)",
+       "exif-usercomment": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nComments by user. Sometimes used like ImageDescription when the ImageDescription contained non-ascii characters. (Technically ImageDescription is supposed to contain ascii characters. In practice utf-8 is used in ImageDescription, so this field isn't used too much.)",
        "exif-relatedsoundfile": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nSome cameras offer the option to record an audio \"memo\" for the photo they just took. If the user did that, the name of the file is labelled with this message.",
        "exif-datetimeoriginal": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nThe date and time when the original image data was generated. For example if it was a painting from 1773, scanned in to a computer in 2007, the datetimeoriginal would be 1773 and {{msg-mw|exif-datetimedigitized}} would have the 2007 date.",
        "exif-datetimedigitized": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nThe date and time when the image was stored as digital data.",
        "tags-edit-revision-legend": "Form legend.\n\n$1 is the number of revisions.\n\nSee also:\n* {{msg-mw|tags-edit-logentry-legend}}",
        "tags-edit-logentry-legend": "Form legend.\n\n$1 is the number of entries.\n\nSee also:\n* {{msg-mw|tags-edit-revision-legend}}",
        "tags-edit-existing-tags": "Heading beneath which a list of tags already applied to the revision or log entry is presented.",
-       "tags-edit-existing-tags-none": "Shown when no tags are applied. Should be formatted differently (italicised or parenthesised).",
+       "tags-edit-existing-tags-none": "Shown when no tags are applied. Should be formatted differently (italicised or parenthesised).\n{{Identical|None}}",
        "tags-edit-new-tags": "Heading beneath which the user chooses which tags should be attached to the revision or log entry. They may add or remove tags.",
        "tags-edit-add": "Heading beneath which the user picks which tags to add to the revision or log entry.",
        "tags-edit-remove": "Heading beneath which the user picks which tags to remove from the revision or log entry.",
        "sqlite-no-fts": "Shown on [[Special:Version]].\nParameters:\n* $1 - version",
        "logentry-delete-delete": "{{Logentry|[[Special:Log/delete]]}}",
        "logentry-delete-restore": "{{Logentry|[[Special:Log/delete]]}}",
-       "logentry-delete-event": "{{Logentry|[[Special:Log/delete]]}}\n{{Logentryparam}}\n* $3 - the name of the log page inside parenthesis",
+       "logentry-delete-event": "{{Logentry|[[Special:Log/delete]]}}\n{{Logentryparam}}\n* $5 - count of affected log events",
        "logentry-delete-revision": "{{Logentry|[[Special:Log/delete]]}}\n{{Logentryparam}}\n* $5 - the number of affected revisions of the page $3",
-       "logentry-delete-event-legacy": "{{Logentry|[[Special:Log/delete]]}}\n* $3 - the name of the log page inside parenthesis",
+       "logentry-delete-event-legacy": "{{Logentry|[[Special:Log/delete]]}}",
        "logentry-delete-revision-legacy": "{{Logentry|[[Special:Log/delete]]}}",
        "logentry-suppress-delete": "{{Logentry}}\n\n'Hid' is a possible alternative to 'suppressed' in this message.",
-       "logentry-suppress-event": "{{Logentry}}\n{{Logentryparam}}\n$3 is the name of the log page inside parenthesis",
+       "logentry-suppress-event": "{{Logentry}}\n{{Logentryparam}}\n* $5 - count of affected log events",
        "logentry-suppress-revision": "{{Logentry}}\n{{Logentryparam}}\n* $5 - the number of affected revisions of the page $3.",
-       "logentry-suppress-event-legacy": "{{Logentry}}\n$3 is the name of the log page inside parenthesis",
+       "logentry-suppress-event-legacy": "{{Logentry}}",
        "logentry-suppress-revision-legacy": "{{Logentry}}",
        "revdelete-content-hid": "Used on\n* {{msg-mw|logentry-delete-event}}\n* {{msg-mw|logentry-delete-revision}}\n* {{msg-mw|logentry-suppress-event}}\n* {{msg-mw|logentry-suppress-event}}",
        "revdelete-summary-hid": "Used on\n* {{msg-mw|logentry-delete-event}}\n* {{msg-mw|logentry-delete-revision}}\n* {{msg-mw|logentry-suppress-event}}\n* {{msg-mw|logentry-suppress-event}}",
index 4ad023f..134328a 100644 (file)
        "myprivateinfoprotected": "Manam saqillasqachu kanki kikiykip akuna willaykikunata llamk'apunaykipaq.",
        "mypreferencesprotected": "Manam saqillasqachu kanki allinkachinaykikunata llamk'apunaykipaq.",
        "ns-specialprotected": "{{ns:special}} suti k'itipi p'anqakunaqa manam llamk'apunallachu.",
-       "titleprotected": "Kay p'anqa sutitaqa [[User:$1|$1]] sutiyuq ruraq kamariymanta hark'arqanmi, kayraykum nispa: ''$2''.",
+       "titleprotected": "Kay p'anqa sutitaqa [[User:$1|$1]] sutiyuq ruraq kamariymanta hark'arqanmi, kayraykum nispa: <em>$2</em>.",
        "filereadonlyerror": "Manam atinichu \"$1\" sutiyuq willañiqita hukchayta, \"$2\" sutiyuq willañiqi churamuna ñawirillanapaq kachkaptinmi.\n\nAmachaq kamachiqqa kayrayku amachani nispa nirqanmi: \"$3\".",
        "invalidtitle-knownnamespace": "\"$2\" sutisuyu, \"$3\" qillqasqayuq mana allin kaq qillqa suti",
        "invalidtitle-unknownnamespace": "Mana riqsisqa $1 kaq sutisuyu yupay, \"$2\" qillqasqayuq mana allin kaq qillqa suti",
        "right-blockemail": "Ruraqta e-chaski kachaymanta hark'ay",
        "right-hideuser": "Ruraqpa sutinta hark'ay, sapsimanta pakaspa",
        "right-ipblock-exempt": "IP hark'ayta, kikinmanta hark'ayta, tawqa hark'aytapas pulqaspa pasay",
-       "right-proxyunbannable": "Kikinmanta ''proxy'' nisqa sirwiq hark'ayta pulqaspa pasay",
        "right-unblockself": "Kikinta hark'asqamanta qispikuy",
        "right-protect": "Amachasqa kachkayta hukchay, ch'aqtasqa amachasqa p'anqakunata llamk'apuy",
        "right-editprotected": "Amachasqa p'anqakunata \"{{int:protect-level-sysop}}\" hina llamk'apuy",
        "recentchanges-label-bot": "Kayqa rurana antachap llamk'apusqanmi",
        "recentchanges-label-unpatrolled": "Kay llamk'apusqaqa manaraqmi patrullasqachu",
        "recentchanges-label-plusminus": "P'anqap chhikan, kay byte yupaywan wakinchasqa",
-       "recentchanges-legend-heading": "'''Sut'ichana:'''",
+       "recentchanges-legend-heading": "<strong>Sut'ichana:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|musuq p'anqakunatapas]] qhaway)",
        "rcnotefrom": "Kay qatiqpiqa <strong>$2</strong>-mantapacha (<strong>$1</strong>-kama) hukchasqakunatam rikunki.",
        "rclistfrom": "$3 $2-manta musuq hukchasqakunata rikuchiy",
        "watchthisupload": "Kay willañiqita watiqay",
        "filewasdeleted": "Kay sutiyuq willañiqi huk kutiña churkusqa karqaspa chaymanta qullusqam karqan. $1-ta llanchinaykim tiyanman manaraq musuqmanta churkuspayki.",
        "filename-bad-prefix": "Churkunayasqayki willañiqip sutinqa '''\"$1\"''' nisqawanmi qallarin. Chay sutinqa iliktruniku rikcha hap'inap kamasqanmanmi rikch'akun. Ama hina kaspa, willañiqiykita astawan t'iktuq sutinta akllay.",
-       "upload-success-subj": "Aypalla churkusqañam",
-       "upload-success-msg": "[$2]-manta churkusqaykiqa aypasqam. Kaypim tarinalla: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Churkuy sasachakuy",
-       "upload-failure-msg": "[$2] nisqamanta churkuyniykiwanqa sasachakuymi karqan:\n\n$1",
-       "upload-warning-subj": "Willañiqi churkuymanta paqtataq niy",
-       "upload-warning-msg": "[$2]-manta churkuyniykiwanqa sasachakuymi karqan. [[Special:Upload/stash/$1|Churkunapaq hunt'ana p'anqaman]] kutimuykiman kay sasachakuyta allinchanaykipaq.",
        "upload-proto-error": "Tantari qillqaqa manam allinchu",
        "upload-proto-error-text": "Huk p'anqamanta willañiqita churkunapaqqa URL tiyaypa <code>http://</code> icha <code>ftp://</code> nisqawan qallarinanmi.",
        "upload-file-error": "Ukhu pantasqa",
        "wlheader-showupdated": "Qayna watukamusqaykimantapacha hukchasqa p'anqakunataqa '''yanasapa''' nisqapim rikunki.",
        "wlnote": "Kay qatiqpiqa {{PLURAL:$1|qhipaq hukchasqam|'''$1''' qhipaq hukchasqakunam}} qhipaq {{PLURAL:$2|urapim|'''$2''' urakunapim}}, musuqchasqa $3, $4.",
        "wlshowlast": "$1 ura, $2 p'unchaw -mantapacha hukchasqakunata rikuchiy",
-       "watchlistall2": "lliw",
        "watchlist-options": "Watiqana sutisuyupaq allinkachinakuna",
        "watching": "Watiqasqakunaman yapaspa...",
        "unwatching": "Watiqasqakunamanta qulluspa...",
        "rollbackfailed": "Manam kutichiyta atinchu",
        "cantrollback": "Manam atinichu llamk'apusqata kutichiyta; qhipaq kaq llamk'apuqqa kay p'anqap hukllam ruraqnin.",
        "alreadyrolled": "Manam atinichu [[User:$2|$2]]-pa ([[User talk:$2|rimanakuy]]) [[$1]] nisqa qhipaq llamk'apusqanta kutichiyta; pipas kay p'anqataqa llamk'apurqunñam icha kutichirqunñam.\n\nQhipaq kaq llamk'apusqaqa [[User:$3|$3]]-pa ([[User talk:$3|rimanakuy]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) rurasqanmi.",
-       "editcomment": "Llamk'apusqakunamanta pisichasqaqa kay hinam: \"''$1''\".",
+       "editcomment": "Llamk'apusqakunamanta pisichasqaqa kay hinam: <em>$1</em>.",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|rimachina]]) sutiyuq ruraqpa hukchasqankunaqa kutichisqam [[User:$1|$1]]-pa ñawpaq hukchasqanman",
        "revertpage-nouser": "Ruraqpa hukchasqankunaqa (sutinqa qichusqam) kutichisqañam {{GENDER:$1|[[User:$1|$1]]}}-pa ñawpaq llamk'apusqanta paqarichispa",
        "rollback-success": "$1-pa hukchasqankunaqa kutichisqañam $2-pa ñawpaq llamk'apusqanta paqarichispa.",
index cab7cf2..be52e15 100644 (file)
        "customcssprotected": "Ti n'has betg la permissiun da modifitgar questa pagina da CSS, perquai ch'ella cuntegna configuraziuns persunalas d'in auter utilisader.",
        "customjsprotected": "Ti n'has betg la permissiun da modifitgar questa pagina da JavaScript, perquai ch'ella cuntegna configuraziuns persunalas d'in auter utilisader.",
        "ns-specialprotected": "Paginas spezialas no pon betg vegnir modifitgadas.",
-       "titleprotected": "Quest titel è vegnì protegì da la creaziun da [[User:$1|$1]].\nIl motiv inditgà è \"''$2''\".",
+       "titleprotected": "Quest titel è vegnì protegì da la creaziun da [[User:$1|$1]].\nIl motiv inditgà è <em>$2</em>.",
        "filereadonlyerror": "Impussibel da modifitgar la datoteca \"$1\" perquai ch'il repository da datotecas \"$2\" è en il modus 'be leger'.\n\nL'administratur che ha bloccà l'access da scriva ha dà suandanta explicaziun: \"$3\".",
        "invalidtitle-knownnamespace": "Titel nunvalid cun tip da pagina \"$2\" e text \"$3\"",
        "invalidtitle-unknownnamespace": "Titel nunvalid cun numer da tip da pagina nunenconuschent $1 e text \"$2\"",
        "right-blockemail": "Impedir utilisaders ch'els pon trametter e-mails",
        "right-hideuser": "Bloccar e zuppentar in num d'utilisader",
        "right-ipblock-exempt": "N'è betg pertutgà da bloccadas dad IP, bloccadas automaticas e bloccadas da blocs d'adressas dad IP",
-       "right-proxyunbannable": "N'è betg pertutgà da bloccadas automaticas da proxys",
        "right-unblockself": "Debloccar sasez",
        "right-protect": "Midar il livel da protecziun e modifitgar paginas protegidas",
        "right-editprotected": "Modifitgar paginas protegidas cun «{{int:protect-level-sysop}}»",
        "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-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vesair era la [[Special:NewPages|glista da novas paginas]])",
        "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",
        "watchthisupload": "Observar questa datoteca",
        "filewasdeleted": "Ina datoteca cun quest num è pli baul vegnida transferida ed è allura vegnida stizzada.\nTi duessas controllar l'emprim il $1 avant che cuntinuar da transferir danovamain la datoteca.",
        "filename-bad-prefix": "Il num da la datoteca che ti transfereschas cumenza cun '''\"$1\"'''. Quai è in num betg descriptiv che vegn per ordinari assegna atomaticamain da cameras digitalas.\nTscherna p. pl. in num pli descriptiv per tia datoteca.",
-       "upload-success-subj": "Transferì cun success",
-       "upload-success-msg": "Tes transfer da [$2] è stà cun success. La datoteca è disponibla qua: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Probelm cun transferir",
-       "upload-failure-msg": "I è capitada ina errur durant transferir da [$2]:\n$1",
-       "upload-warning-subj": "Avertiment da transferir",
-       "upload-warning-msg": "Ina errur è capitada cun tes transfer da [$2]. Ti pos returnar al [[Special:Upload/stash/$1|formular per transferir]] per curreger quest problem.",
        "upload-proto-error": "Protocol nuncorrect",
        "upload-proto-error-text": "Il transfer da servers externs basegna URLs che cumenzan cun <code>http://</code> u <code>ftp://</code>.",
        "upload-file-error": "Errur interna",
        "wlheader-showupdated": "Paginas ch'èn vegnidas modifitgadas suenter che ti has vis els la davosa giada èn mussads '''grass'''",
        "wlnote": "Sutvart {{PLURAL:$1|è l'ultima midada|èn las ultimas '''$1''' midadas}} entaifer {{PLURAL:$2|l'ultima ura|las ultimas '''$2''' uras}}. Actualisà ils $3 las $4.",
        "wlshowlast": "Mussar: las ultimas $1 uras, ils ultims $2 dis u .",
-       "watchlistall2": "tut",
        "watchlist-options": "Opziuns per la glista d'observaziun",
        "watching": "observ...",
        "unwatching": "observ betg pli...",
        "rollbackfailed": "Betg reussì da revocar",
        "cantrollback": "Betg pussaivel da reinizialisar questa modificaziun; \nl'ulitima contribuziun è dal sulet autur da questa pagina.",
        "alreadyrolled": "Impussibel da reinizialisar la midada da l'artitgel [[:$1]] da l'utilisader [[User:$2|$2]] ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nEnzatgi auter ha gia modifitga u reinizialisà qeusta pagina.\n\nL'ultima modificaziun vid questa pagina è da [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "La resumaziun da la midada era: \"''$1''\"",
+       "editcomment": "La resumaziun da la midada era: <em>$1</em>",
        "revertpage": "Annullà las modificaziuns da [[Special:Contributions/$2|$2]] ([[User talk:$2|discussiun]]) e restaurà l'ultima versiun da [[User:$1|$1]]",
        "revertpage-nouser": "Annullà las modificaziuns d'in utilisader zuppentà e restaurà l'ultima versiun da {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Annullà las modificaziuns da $1;\nrestaurà l'ultima versiun da $2.",
index 21c998e..c1137ba 100644 (file)
        "myprivateinfoprotected": "Nu aveți permisiunea să vă modificați informațiile personale.",
        "mypreferencesprotected": "Nu aveți permisiunea să vă modificați preferințele.",
        "ns-specialprotected": "Paginile din spațiul de nume {{ns:special}} nu pot fi editate.",
-       "titleprotected": "Acest titlu a fos protejat la creare de [[User:$1|$1]].\nMotivul invocat este ''$2''.",
+       "titleprotected": "Acest titlu a fos protejat la creare de [[User:$1|$1]].\nMotivul invocat este <em>$2</em>.",
        "filereadonlyerror": "Imposibil de modificat fișierul „$1”, deoarece depozitul de fișiere „$2” este în modul „doar citire”.\n\nAdministratorul de sistem care a efectuat blocarea a furnizat explicația: „$3”.",
        "invalidtitle-knownnamespace": "Titlu invalid cu spațiul de nume „$2” și textul „$3”",
        "invalidtitle-unknownnamespace": "Titlu invalid cu numărul spațiului de nume $1 necunoscut și textul „$2”",
        "botpasswords-summary": "<em>Parolele de roboți</em> permit accesul la un cont de utilizator prin intermediul API-ului fără utilizarea identificatorilor de conectare principali ai contului. Este posibil ca drepturile de utilizator disponibile după conectarea cu parole de roboți să fie restricționate.\n\nDacă nu știți exact de ce ați recurge la această metodă, probabil ar trebui să nu o faceți. Nimeni nu ar trebui să vă ceară vreodată să generați acest tip de parolă și să le-o furnizați.",
        "botpasswords-disabled": "Parolele de roboți sunt dezactivate.",
        "botpasswords-existing": "Parole de robot existente",
+       "botpasswords-label-appid": "Numele robotului:",
+       "botpasswords-label-create": "Creare",
+       "botpasswords-label-update": "Actualizează",
+       "botpasswords-label-cancel": "Revocare",
+       "botpasswords-label-delete": "Șterge",
+       "botpasswords-label-resetpassword": "Resetează parola",
+       "botpasswords-label-grants": "Permisiuni aplicabile:",
        "botpasswords-label-restrictions": "Restricții de utilizare:",
+       "botpasswords-label-grants-column": "Permise",
+       "botpasswords-bad-appid": "Numele de robot „$1” nu este valid.",
        "resetpass_forbidden": "Parolele nu pot fi schimbate.",
        "resetpass-no-info": "Trebuie să fiți autentificat pentru a accesa această pagină direct.",
        "resetpass-submit-loggedin": "Modifică parola",
        "undo-summary-username-hidden": "Anularea versiunii $1 a unui utilizator ascuns",
        "cantcreateaccounttitle": "Crearea contului nu poate fi realizată",
        "cantcreateaccount-text": "Crearea de conturi de la această adresă IP ('''$1''') a fost blocată de [[User:$3|$3]].\n\nMotivul invocat de $3 este ''$2''",
-       "cantcreateaccount-range-text": "Crearea de conturi de la adresele IP din gama '''$1''', care o include și pe a dumneavoastră ('''$4'''), a fost blocată de [[User:$3|$3]].\n\nMotivul invocat de $3 este ''$2''",
+       "cantcreateaccount-range-text": "Crearea de conturi de la adresele IP din gama <strong>$1</strong>, care o include și pe a dumneavoastră (<strong>$4</strong>), a fost blocată de [[User:$3|$3]].\n\nMotivul invocat de $3 este <em>$2</em>",
        "viewpagelogs": "Afișează jurnalele paginii",
        "nohistory": "Nu există istoric pentru această pagină.",
        "currentrev": "Versiunea curentă",
        "mergehistory-empty": "Nicio versiune nu poate fi unită.",
        "mergehistory-done": "$3 {{PLURAL:$3|versiune a|versiuni ale|de versiuni ale}} paginii $1 {{PLURAL:$3|a fost unită|au fost unite}} cu succes în pagina [[:$2]].",
        "mergehistory-fail": "Nu se poate executa combinarea istoricului, te rog verifică parametrii pagină și timp.",
+       "mergehistory-fail-bad-timestamp": "Ora și data nu sunt valide.",
+       "mergehistory-fail-invalid-source": "Pagina sursă nu este validă.",
+       "mergehistory-fail-invalid-dest": "Pagina de destinație nu este validă.",
        "mergehistory-fail-toobig": "Nu s-a putut efectua unirea istoricelor întrucât s-ar fi depășit limita de $1 {{PLURAL:$1|versiune|versiuni|de versiuni}} mutat{{PLURAL:$1|ă|e}}.",
        "mergehistory-no-source": "Pagina sursă $1 nu există.",
        "mergehistory-no-destination": "Pagina de destinație $1 nu există.",
        "recentchanges-label-bot": "Această modificare a fost efectuată de un robot",
        "recentchanges-label-unpatrolled": "Această modificare nu a fost încă verificată",
        "recentchanges-label-plusminus": "Dimensiunea paginii s-a modificat corespunzător acestui număr de octeți",
-       "recentchanges-legend-heading": "'''Legendă:'''",
+       "recentchanges-legend-heading": "<strong>Legendă:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vedeți și [[Special:NewPages|lista cu pagini noi]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Afișează",
        "upload-dialog-button-done": "Realizat",
        "upload-dialog-button-save": "Salvare",
        "upload-dialog-button-upload": "Încarcă",
-       "upload-form-label-select-file": "Selectează fișier",
        "upload-form-label-infoform-title": "Detalii",
        "upload-form-label-infoform-name": "Nume",
        "upload-form-label-infoform-name-tooltip": "Un titlu unic, descriptiv, care va deveni și numele fișierului. Puteți folosi limbaj simplu cu spații. Nu includeți extensia fișierului.",
        "foreign-structured-upload-form-label-own-work-message-shared": "Declar că dețin drepturile de autor asupra acestui fișier, accept să public irevocabil acest fișier la Wikimedia Commons sub licența [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Atribuire și distribuire în condiții identice 4.0] și sunt de acord cu [https://wikimediafoundation.org/wiki/Terms_of_Use Termenii de utilizare].",
        "foreign-structured-upload-form-label-not-own-work-message-shared": "Dacă nu dețineți drepturile de autor asupra acestui fișier sau doriți să-l publicați sub o altă licență, puteți utiliza [https://commons.wikimedia.org/wiki/Special:UploadWizard Expertul de încărcare de la Commons].",
        "foreign-structured-upload-form-label-not-own-work-local-shared": "Poate doriți să încercați [[Special:Upload|pagina de încărcare de la {{SITENAME}}]], în cazul în care acest site permite încărcarea acestui fișier în conformitate cu politicele lor.",
-       "foreign-structured-upload-form-2-label-intro": "Vă mulțumim că ați donat o imagine care va fi folosită la {{SITENAME}}. Ar trebuie să mergeți mai departe doar dacă îndeplinește următoarele condiții:",
-       "foreign-structured-upload-form-2-label-ownwork": "Trebuie să fie în totalitate <strong>creația dumnevoastră</strong>, și nu preluată de pe internet",
-       "foreign-structured-upload-form-2-label-noderiv": "Trebuie să <strong>nu conțină lucrări ale altei persoane</strong>, nici măcar ca sursă de inspirație",
-       "foreign-structured-upload-form-2-label-useful": "Ar trebui să fie <strong>educativă și folositoare</strong> pentru ceilalți",
-       "foreign-structured-upload-form-2-label-ccbysa": "Trebuie <strong>să poată fi publicată irevocabil</strong> pe internet sub licența [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Atribuire și distribuire în condiții identice 4.0]",
-       "foreign-structured-upload-form-2-label-alternative": "Dacă nu toate cerințele de mai sus sunt îndeplinite, încă puteți încărca fișierul folosind [https://commons.wikimedia.org/wiki/Special:UploadWizard Expertul de încărcare de la Commons], atât timp cât fișierul este disponibil sub o licență liberă.",
-       "foreign-structured-upload-form-2-label-termsofuse": "Încărcând fișierul, atestați faptul că dețineți drepturile de autor ale fișierului și sunteți de acord să publicați irevocabil acest fișier la Wikimedia Commons sub licența Creative Commons Atribuire și distribuire în condiții identice 4.0, fiind de acord cu [https://wikimediafoundation.org/wiki/Terms_of_Use Termenii de utilizare].",
-       "foreign-structured-upload-form-3-label-question-website": "Ați descărcat această imagine de pe un site web sau ați preluat-o în urma unei căutări de imagini?",
-       "foreign-structured-upload-form-3-label-question-ownwork": "Ați creat această imagine (ați făcut o fotografie, un desen etc.) dumneavoastră?",
-       "foreign-structured-upload-form-3-label-question-noderiv": "Conține sau este inspirată de lucrarea altcuiva, cum ar fi un logo?",
-       "foreign-structured-upload-form-3-label-yes": "Da",
-       "foreign-structured-upload-form-3-label-no": "Nu",
-       "foreign-structured-upload-form-3-label-alternative": "Din păcate, în acest caz această unealtă nu permite încărcarea acestui fișier. Încă ați puteți încărca fișierul folosind [https://commons.wikimedia.org/wiki/Special:UploadWizard Expertul de încărcare de la Commons], atât timp cât fișierul este disponibil sub o licență liberă.",
-       "foreign-structured-upload-form-4-label-good": "Utilizând această unealtă, puteți încărca grafice educative și fotografii făcute de dumneavoastră, care nu conțin lucrările deținute de alte persoane.",
-       "foreign-structured-upload-form-4-label-bad": "Nu puteți încărca imagini preluate din motoarele de căutare sau descărcate de pe alte site-uri web.",
        "backend-fail-stream": "Imposibil de citit fișierul $1.",
        "backend-fail-backup": "Imposibil de efectuat o copie de rezervă a fișierului $1.",
        "backend-fail-notexists": "Fișierul $1 nu există.",
        "apihelp-no-such-module": "Modulul „$1” nu a fost găsit.",
        "apisandbox": "Cutia cu nisip pentru API",
        "apisandbox-api-disabled": "API este dezactivat pe acest site.",
+       "apisandbox-fullscreen": "Extinde panoul",
+       "apisandbox-unfullscreen": "Arată pagina",
        "apisandbox-submit": "Efectuați cererea",
        "apisandbox-reset": "Curăță",
-       "apisandbox-examples": "Exemplu",
-       "apisandbox-results": "Rezultat",
+       "apisandbox-retry": "Reîncercare",
+       "apisandbox-loading": "Se încarcă informația pentru modulul API „$1”...",
+       "apisandbox-load-error": "A apărut o eroare la încărcarea informației pentru modulul API „$1”: $2",
+       "apisandbox-no-parameters": "Acest modul API nu are parametri.",
+       "apisandbox-helpurls": "Legături către ajutor",
+       "apisandbox-examples": "Exemple",
+       "apisandbox-dynamic-parameters": "Parametri suplimentari",
+       "apisandbox-dynamic-parameters-add-label": "Adăugare parametru:",
+       "apisandbox-dynamic-parameters-add-placeholder": "Numele parametrului",
+       "apisandbox-dynamic-error-exists": "Un parametru cu numele „$1” există deja.",
+       "apisandbox-deprecated-parameters": "Parametri învechiți",
+       "apisandbox-fetch-token": "Completează automat jetonul",
+       "apisandbox-submit-invalid-fields-title": "Anumite câmpuri nu sunt valide",
+       "apisandbox-submit-invalid-fields-message": "Corectați câmpurile marcate și încercați din nou.",
+       "apisandbox-results": "Rezultate",
+       "apisandbox-sending-request": "Se trimite solicitarea API...",
+       "apisandbox-loading-results": "Se obțin rezultatele API...",
+       "apisandbox-results-error": "A apărut o eroare la încărcarea răspunsului solicitării API: $1.",
        "apisandbox-request-url-label": "URL cerere:",
-       "apisandbox-request-time": "Durata cererii: $1",
+       "apisandbox-request-time": "Durata cererii: {{PLURAL:$1|$1 ms}}",
+       "apisandbox-results-fixtoken": "Corectează jetonul și retrimite",
+       "apisandbox-results-fixtoken-fail": "Imposibil de recuperat jetonul „$1”.",
+       "apisandbox-alert-page": "Câmpurile de pe această pagină nu sunt valide.",
+       "apisandbox-alert-field": "Valoare acestui câmp nu este validă.",
        "booksources": "Surse de cărți",
        "booksources-search-legend": "Căutare surse pentru cărți",
        "booksources-search": "Caută",
        "rollbackfailed": "Revenirea nu s-a putut face",
        "cantrollback": "Nu se poate reveni; ultimul contribuitor este autorul acestui articol.",
        "alreadyrolled": "Nu se poate reveni peste ultima modificare a articolului [[:$1]] făcută de către [[User:$2|$2]] ([[User talk:$2|discuție]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); altcineva a modificat articolul sau a revenit deja.\n\nUltima editare a fost făcută de către [[User:$3|$3]] ([[User talk:$3|discuție]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Descrierea modificărilor a fost: „''$1''”.",
+       "editcomment": "Descrierea modificărilor a fost: <em>$1</em>.",
        "revertpage": "Anularea modificărilor efectuate de către [[Special:Contributions/$2|$2]] ([[User talk:$2|discuție]]) și revenire la ultima versiune de către [[User:$1|$1]]",
        "revertpage-nouser": "Anularea modificărilor efectuate de un utilizator ascuns și revenirea la ultima modificare de către {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Anularea modificărilor făcute de $1;\nrevenire la ultima versiune de $2.",
        "default-skin-not-found": "Ups! Aspectul standard pentru wiki, definit în <code dir=\"ltr\">$wgDefaultSkin</code> ca <code>$1</code>, nu este disponibil.\n\nInstalarea dumneavoastră pare să includă {{PLURAL:$4|următorul aspect|următoarele aspecte}}. Vedeți [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Configurare aspecte] pentru informații despre cum {{PLURAL:$4|îl|le}} puteți activa și alege pe cel implicit.\n\n$2\n\n; Dacă tocmai ați instalat MediaWiki:\n: Probabil ați instalat folosind git sau direct din codul sursă print-o altă metodă. Acest lucru este normal. Încercați să instalați câteva aspecte din [https://www.mediawiki.org/wiki/Category:All_skins colecția de aspecte de la mediawiki.org]:\n:* Descărcând [https://www.mediawiki.org/wiki/Download instalatorul tarball], care este însoțit de câteva aspecte și extensii. Puteți copia directorul <code>skins/</code> din acesta.\n:* Descărcând arhive tar individuale cu aspecte de la [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Utilizând Git pentru a descărca aspecte].\n: Această operațiune nu ar trebui să interfereze cu depozitul dumnevoastră git dacă sunteți dezvoltator MediaWiki.\n\n; Dacă tocmai ați actualizat MediaWiki:\n: Începând cu MediaWiki 1.24, aspectele instalate nu mai sunt activate în mod automat (vedeți [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual:Autodescoperirea aspectelor]). Puteți copia {{PLURAL:$5|următoarea linie|următoarele linii}} în <code>LocalSettings.php</code> pentru a activa {{PLURAL:$5|aspectul instalat|toate aspectele instalate}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Dacă tocmai ați modificat <code>LocalSettings.php</code>:\n: Verificați numele aspectelor pentru eventuale greșeli.",
        "default-skin-not-found-no-skins": "Ups! Aspectul standard pentru wiki, definit în <code>$wgDefaultSkin</code> ca <code>$1</code>, nu este disponibil.\n\nNu există aspecte instalate\n\n; Dacă tocmai ați instalat sau actualizat MediaWiki:\n: Probabil ați instalat folosind git sau direct din codul sursă print-o altă metodă. Acest lucru este normal. Începând cu MediaWiki 1.24, aspectele nu mai sunt incluse în depozitul principal. Încercați să instalați câteva aspecte din [https://www.mediawiki.org/wiki/Category:All_skins colecția de aspecte de la mediawiki.org]:\n:* Descărcând [https://www.mediawiki.org/wiki/Download instalatorul tarball], care este însoțit de câteva aspecte și extensii. Puteți copia directorul <code>skins/</code> din acesta.\n:* Descărcând arhive tar individuale cu aspecte de la [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Utilizând Git pentru a descărca aspecte].\n: Această operațiune nu ar trebui să interfereze cu depozitul dumneavoastră git dacă sunteți dezvoltator MediaWiki. Vedeți [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Configurare aspecte] pentru informații despre cum puteți activa aspecte și alege pe cel implict.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activat)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''dezactivat''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>dezactivat</strong>)",
        "mediastatistics": "Statistici multimedia",
        "mediastatistics-summary": "Statistici despre tipurile fișierelor încărcate. Sunt incluse doar cele mai recente versiuni ale fișierelor. Versiunile mai vechi sau șterse ale fișierelor sunt excluse.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 octet|$1 octeți|$1 de octeți}} ($2; $3%)",
        "mw-widgets-titleinput-description-new-page": "pagina nu există încă",
        "mw-widgets-titleinput-description-redirect": "redirecționare către $1",
        "api-error-blacklisted": "Vă rugăm să alegeți un alt titlu, mai descriptiv.",
+       "sessionmanager-tie": "Nu se pot combina multiple tipuri de cereri de autentificare: $1.",
        "sessionprovider-generic": "sesiuni $1",
-       "sessionprovider-mediawiki-session-cookiesessionprovider": "sesiuni pe bază de module cookie."
+       "sessionprovider-mediawiki-session-cookiesessionprovider": "sesiuni pe bază de module cookie.",
+       "sessionprovider-nocookies": "Modulele cookie par dezactivate. Asigurați-vă că ați activat modulele cookie și începeți din nou.",
+       "randomrootpage": "Pagină-rădăcină aleatorie"
 }
index 1dbfd5f..5e2559e 100644 (file)
        "myprivateinfoprotected": "Non ge tìne le permesse pe cangià le 'mbormaziune private tune.",
        "mypreferencesprotected": "Non ge tìne le permesse pe cangià le preferenze tune.",
        "ns-specialprotected": "Le pàgene speciale no ponne essere cangete.",
-       "titleprotected": "Stu titele ha state prutette da 'a ccreazione da [[User:$1|$1]].\n'U mutive jè ''$2''.",
+       "titleprotected": "Stu titele ha state prutette da 'a ccreazione da [[User:$1|$1]].\n'U mutive jè <em>$2</em>.",
        "filereadonlyerror": "Non ge pozze cangià 'u file \"$1\" purcé l'archivije de le file \"$2\" ste in mode sola letture.\n\nL'amministratore ca l'ha bloccate dèje sta spiegazione: \"$3\".",
        "invalidtitle-knownnamespace": "Titole invalide cu 'u namespace \"$2\" e teste \"$3\"",
        "invalidtitle-unknownnamespace": "Titele invalide cu numere de namespace scanusciute $1 e teste \"$2\"",
        "undo-summary-username-hidden": "Annulle 'a revisione $1 da 'n'utende scunnute",
        "cantcreateaccounttitle": "Non ge puè ccrejà 'nu cunde utende",
        "cantcreateaccount-text": "'A creazione d'u cunde utende da stu 'ndirizze IP ('''$1''') ha state blocchete da [[User:$3|$3]].\n\n'U mutive dete da $3 jè ''$2''",
-       "cantcreateaccount-range-text": "'A crejazzione d'u cunde da l'indirizze IP jndr'à l'indervalle \"$1\", 'u quale 'nglude 'u 'ndirizze IP tune ('''$4'''), ha state bloccate da [[User:$3|$2]].",
+       "cantcreateaccount-range-text": "'A crejazzione d'u cunde da l'indirizze IP jndr'à l'indervalle \"$1\", 'u quale 'nglude 'u 'ndirizze IP tune (<strong>$4</strong>), ha state bloccate da [[User:$3|$2]].",
        "viewpagelogs": "Vide l'archivie pe sta pàgene",
        "nohistory": "Sta pàgene non ge tène 'a storie de le cangiaminde ca onne state fatte.",
        "currentrev": "Versione de osce a die",
        "recentchanges-label-bot": "Stu cangiamende ha state fatte da 'nu bot",
        "recentchanges-label-unpatrolled": "Stu cangiamende non g'à state angore condrollate",
        "recentchanges-label-plusminus": "'A dimenzione d'a pàgene ave cangiate da stu numere de byte",
-       "recentchanges-legend-heading": "'''Leggende:'''",
+       "recentchanges-legend-heading": "<strong>Leggende:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ('ndruche pure [[Special:NewPages|elenghe de le pàggene nuève]])",
        "rcnotefrom": "Sotte {{PLURAL:$5|ste 'u cangiamende|stonne le cangiaminde}} da <strong>$3, $4</strong> ('nzigne a <strong>$1</strong> fatte vedè).",
        "rclistfrom": "Fà vedè le urteme cangiaminde partenne da $3 $2",
        "upload-dialog-button-done": "Fatte",
        "upload-dialog-button-save": "Reggìstre",
        "upload-dialog-button-upload": "Careche",
-       "upload-form-label-select-file": "Scacchie 'u file",
        "upload-form-label-infoform-title": "Dettaglie",
        "upload-form-label-infoform-name": "Nome",
        "upload-form-label-infoform-description": "Descrizione",
        "rollbackfailed": "Annullamende fallite",
        "cantrollback": "Non ge se pò annullà stu cangiamende;\nl'urteme condrebbutore jè sulamende l'autore de sta pàgene.",
        "alreadyrolled": "Non ge se pò annulla l'urteme cangiamende de [[:$1]] da [[User:$2|$2]] ([[User talk:$2|'Ngazzaminde]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nquacche otre ha cangiate o annullate ggià 'a pàgene.\n\nL'urteme cangiamende d'a pàgene ere de [[User:$3|$3]] ([[User talk:$3|'Ngazzaminde]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "'U riepileghe d'u cangiamende ere: \"''$1''\".",
+       "editcomment": "'U riepileghe d'u cangiamende ere: <em>$1</em>.",
        "revertpage": "Cangiaminde annullate da [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) a l'urtema versione da [[User:$1|$1]]",
        "revertpage-nouser": "Le cangiaminde annullate da 'n'utende scunnute a l'urtema revisione da {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Cangiaminde annullate da $1;\nturnate rete a l'urtema versione da $2.",
        "default-skin-not-found": "Pizze! 'U skin de base pa uicchi toje, definite jndr'à <code dir=\"ltr\">$wgDefaultSkin</code> cumme <code>$1</code>, non g'è disponibbile.\n\n'A installazziona toje pare ca téne {{PLURAL:$4|'u skin|le skin}} seguende. 'Ndruche [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Confirazione d'u skin] pe 'mbormaziune sus a cumme abbilità {{PLURAL:$4|jidde|lore}} e scacchià quidde de base.\n\n$2\n\n; Ce tu è installate ggià MediaUicchi:\n: Tu probbabbilmende è installate da git, o direttamende da 'u codece sorgende ausanne otre metode. Quiste s'aspette. Pruéve a installà otre skin da 'a [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's cartelle de le skin], da:\n:* Scarecanne 'u [https://www.mediawiki.org/wiki/Download installatore tarball], 'u quale téne 'nu sacche de skin e estenziune. Tu puè cupià e 'ngollà 'a cartelle <code>skins/</code> da jidde.\n:* Scarecanne 'nu skin individuale de tarballs da [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Ausanne Git pe scarecà le skin].\n: Facenne quiste non ge inderferisce cu l'archivije git tune ce tu si 'nu sveluppatore MediaUicchi.\n\n; Ce tu è aggiornate MediaUicchi:\n: MediaUicchi 1.24 e versiune cchiù nuéve non ge abbilitane automaticamende le skin installate ('ndruche [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Canusce le skin autodiscovery]). Tu puè 'ngollà {{PLURAL:$5|'a linèe|le linèe}} seguende jndr'à <code>LocalSettings.php</code> pe abbilità {{PLURAL:$5|'u |tutte}} {{PLURAL:$5|skin|le skin}} installate:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Ce tu è cangiate <code>LocalSettings.php</code>:\n: Fà 'nu doppie condrolle sus a 'u nome de le skin pe tipe.",
        "default-skin-not-found-no-skins": "Pizze! 'U skin de base pa uicchi toje, definite jndr'à <code dir=\"ltr\">$wgDefaultSkin</code> cumme <code>$1</code>, non g'è disponibbile.\n\nTu non g'è installate le skin.\n\n; Ce tu è installate o aggiornate MediaUicchi:\n: Tu probbabbilmende è installate da git, o direttamende da 'u codece sorgende ausanne otre metode. Quiste s'aspette. MediaUicchi 1.24 e versiune cchiù nuéve non ge 'ngludone  le skin jndr'à l'archivije prengepàle.Pruéve a installà quacche skin da 'a [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's cartelle de le skin], da:\n:* Scarecanne 'u [https://www.mediawiki.org/wiki/Download installatore tarball], 'u quale téne 'nu sacche de skin e estenziune. Tu puè cupià e 'ngollà 'a cartelle <code>skins/</code> da jidde.\n:* Scarecanne 'nu skin individuale de tarballs da [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Ausanne Git pe scarecà le skin].\n: Facenne quiste non ge inderferisce cu l'archivije git tune ce tu si 'nu sveluppatore MediaUicchi.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (abbilitate)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disabbilitate''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>disabbilitate</strong>)",
        "mediastatistics": "Statisteche de le media",
        "mediastatistics-summary": "Le statisteche sus a le tipe de fiel carecate. Quiste 'nglude sulamende 'a versione cchiù recende de 'nu file. Le versiune vicchie o scangellate de le file sò escluse.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte}} ($2; $3%)",
index cb3eb69..17a1314 100644 (file)
        "myprivateinfoprotected": "У вас нет разрешения на изменение вашей личной информации",
        "mypreferencesprotected": "У вас нет прав для редактирования ваших настроек.",
        "ns-specialprotected": "Страницы пространства имён «{{ns:special}}» не могут правиться.",
-       "titleprotected": "Создание страницы с таким заголовком было запрещено участником [[Участник:$1|$1]].\nУказана следующая причина: ''$2''.",
+       "titleprotected": "Создание страницы с таким заголовком было запрещено участником [[User:$1|$1]].\nУказана следующая причина: <em>$2</em>.",
        "filereadonlyerror": "Не удаётся изменить файл «$1», так как хранилище «$2» находится в режиме «только для чтения».\n\nСистемный администратор, заблокировавший базу, оставил следующее объяснение: «$3».",
        "invalidtitle-knownnamespace": "Недопустимый заголовок с пространством имен «$2» и текстом «$3»",
        "invalidtitle-unknownnamespace": "Недопустимый заголовок с неизвестным номером пространства $1 и текстом «$2»",
        "nocookieslogin": "{{SITENAME}} использует «cookies» для представления участников. Вы их отключили. Пожалуйста, включите их и попробуйте снова.",
        "nocookiesfornew": "Учётная запись участника не была создана из-за невозможности проверить её источник. \nУбедитесь, что включены «cookies», обновите страницу и попробуйте ещё раз.",
        "noname": "Вы не указали допустимого имени участника.",
-       "loginsuccesstitle": "Ð\9eпознание Ð¿Ñ\80оÑ\88ло Ñ\83Ñ\81пеÑ\88но",
+       "loginsuccesstitle": "Ð\92Ñ\85од Ð¿Ñ\80оизведÑ\91н",
        "loginsuccess": "Теперь вы работаете под именем $1.",
        "nosuchuser": "Участника с именем «$1» не существует.\nИмена участников чувствительны к регистру букв.\nПроверьте правильность написания имени или [[Special:UserLogin/signup|создайте новую учётную запись]].",
        "nosuchusershort": "Не существует участника с именем «$1». Проверьте написание имени.",
        "createaccount-title": "{{SITENAME}}: создание учётной записи",
        "createaccount-text": "Кто-то создал учётную запись «$2» на сервере проекта {{SITENAME}} ($4), указав ваш адрес электронной почты. \n\nПароль учётной записи — «$3». Вам следует авторизоваться на сайте и изменить пароль.\n\nПроигнорируйте данное сообщение, если учётная запись была создана по ошибке.",
        "login-throttled": "Вы сделали слишком много попыток представиться системе.\nПожалуйста, подождите $1 перед тем, как попробовать снова.",
-       "login-abort-generic": "Неудачная попытка представиться системе",
+       "login-abort-generic": "Не удалось представиться системе — отменено",
        "login-migrated-generic": "Ваша учётная запись была перенесена, и ваше имя участника больше не существует в этой вики.",
        "loginlanguagelabel": "Язык: $1",
        "suspicious-userlogout": "Ваш запрос на завершение сеанса отклонён, так как он похож на запрос, отправленный некорректным браузером или кэширующим прокси.",
        "newpassword": "Новый пароль:",
        "retypenew": "Повторите ввод нового пароля:",
        "resetpass_submit": "Установить пароль и представиться",
-       "changepassword-success": "Ваш пароль был успешно изменён!",
+       "changepassword-success": "Ваш пароль был изменён!",
        "changepassword-throttled": "Вы сделали слишком много попыток представиться системе.\nПожалуйста, подождите $1 перед тем, как попробовать снова.",
        "botpasswords": "Пароли ботов",
        "botpasswords-summary": "<em>Пароли бота</em> позволяют получить доступ к учётной записи пользователя через API без использования логина и пароля главной учётной записи. Права участника при входе с паролем бота могут быть ограничены.\n\nЕсли Вы не знаете, зачем вам это, вероятно, лучше этого не делайте. Никто никогда не должен просить вас, чтобы вы создали и сообщили его.",
        "botpasswords-insert-failed": "Не удалось добавить бота с именем «$1». Возможно, он был уже добавлен?",
        "botpasswords-update-failed": "Не удалось обновить бота с именем «$1». Возможно, он был удалён?",
        "botpasswords-created-title": "Пароль бота создан",
-       "botpasswords-created-body": "Пароль бота «$1» был успешно создан.",
+       "botpasswords-created-body": "Пароль бота для бота «$1» участника «$2» был создан.",
        "botpasswords-updated-title": "Пароль бота обновлён",
-       "botpasswords-updated-body": "Пароль бота «$1» был успешно обновлён.",
+       "botpasswords-updated-body": "Пароль бота для бота «$1» участника «$2» был обновлён.",
        "botpasswords-deleted-title": "Пароль бота удалён",
-       "botpasswords-deleted-body": "Пароль бота «$1» был удалён.",
+       "botpasswords-deleted-body": "Пароль бота для бота «$1» участника «$2» был удалён.",
        "botpasswords-newpassword": "Новый пароль для входа под <strong>$1</strong> — <strong>$2</strong>. <em>Запишите его для последующего использования.</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider недоступен.",
        "botpasswords-restriction-failed": "Из-за ограничений, связанных с паролем бота, вход не произведён.",
        "resetpass-no-info": "Чтобы обращаться непосредственно к этой странице, вам следует представиться системе.",
        "resetpass-submit-loggedin": "Изменить пароль",
        "resetpass-submit-cancel": "Отмена",
-       "resetpass-wrong-oldpass": "Неправильный временный или текущий пароль.\nВозможно, вы уже успешно изменили пароль, или запросили новый временный пароль.",
+       "resetpass-wrong-oldpass": "Неправильный временный или текущий пароль.\nВозможно, вы уже изменили пароль или запросили новый временный пароль.",
        "resetpass-recycled": "Пожалуйста, измените пароль на что-то, отличное от вашего текущего пароля.",
        "resetpass-temp-emailed": "Вы представились с помощью временного пароля, полученного по электронной почте.\nДля завершения входа в систему, необходимо задать новый пароль:",
        "resetpass-temp-password": "Временный пароль:",
        "newarticle": "(Новая)",
        "newarticletext": "Вы перешли по ссылке на страницу, которой пока не существует.\nЧтобы её создать, наберите текст в окне, расположенном ниже (подробнее см. [$1 справочную страницу]).\nЕсли вы оказались здесь по ошибке, просто нажмите кнопку '''назад''' своего браузера.",
        "anontalkpagetext": "----''Эта страница обсуждения принадлежит анонимному участнику, который ещё не создал учётной записи, или не использует её.\nПоэтому для идентификации используется цифровой IP-адрес.\nЭтот же адрес может соответствовать нескольким другим участникам.\nЕсли вы анонимный участник и полагаете, что получили сообщения, адресованные не вам, пожалуйста, [[Special:UserLogin/signup|создайте учётную запись]] или [[Special:UserLogin|представьтесь системе]], чтобы впредь избежать возможной путаницы с другими анонимными участниками.''",
-       "noarticletext": "Ð\92 Ð½Ð°Ñ\81Ñ\82оÑ\8fÑ\89ий Ð¼Ð¾Ð¼ÐµÐ½Ñ\82 Ñ\82екÑ\81Ñ\82 Ð½Ð° Ð´Ð°Ð½Ð½Ð¾Ð¹ Ñ\81Ñ\82Ñ\80аниÑ\86е Ð¾Ñ\82Ñ\81Ñ\83Ñ\82Ñ\81Ñ\82вÑ\83еÑ\82.\nÐ\92Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е [[Special:Search/{{PAGENAME}}|найÑ\82и Ñ\83поминание Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ\8f]] Ð² Ð´Ñ\80Ñ\83гиÑ\85 Ñ\81Ñ\82аÑ\82Ñ\8cÑ\8fх,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} найти соответствующие записи журналов]\nили '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} создать страницу с таким названием]'''</span>.",
+       "noarticletext": "Ð\92 Ð½Ð°Ñ\81Ñ\82оÑ\8fÑ\89ий Ð¼Ð¾Ð¼ÐµÐ½Ñ\82 Ñ\82екÑ\81Ñ\82 Ð½Ð° Ð´Ð°Ð½Ð½Ð¾Ð¹ Ñ\81Ñ\82Ñ\80аниÑ\86е Ð¾Ñ\82Ñ\81Ñ\83Ñ\82Ñ\81Ñ\82вÑ\83еÑ\82.\nÐ\92Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е [[Special:Search/{{PAGENAME}}|найÑ\82и Ñ\83поминание Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ\8f]] Ð½Ð° Ð´Ñ\80Ñ\83гиÑ\85 Ñ\81Ñ\82Ñ\80аниÑ\86ах,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} найти соответствующие записи журналов]\nили '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} создать страницу с таким названием]'''</span>.",
        "noarticletext-nopermission": "В настоящее время на этой странице нет текста.\nВы можете [[Special:Search/{{PAGENAME}}|найти упоминание данного названия]] на других страницах,\nили <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} найти соответствующие записи журналов].</span> У вас нет разрешения создать данную страницу.",
        "missing-revision": "Версия $1 страницы «{{FULLPAGENAME}}» не существует.\n\nЭто обычно бывает, если последовать по устаревшей ссылке на страницу, которая была удалена.\nПодробности могут быть в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале удалений].",
        "userpage-userdoesnotexist": "Учётной записи «<nowiki>$1</nowiki>» не существует. Убедитесь, что вы действительно желаете создать или изменить эту страницу.",
        "undo-summary-username-hidden": "Отмена правки $1, сделанной участником, чьё имя скрыто",
        "cantcreateaccounttitle": "Невозможно создать учётную запись",
        "cantcreateaccount-text": "Создание учётных записей с этого IP-адреса ('''$1''') было заблокировано {{GENDER:$3|участником|участницей|}} [[User:$3|$3]].\n\n$3 {{GENDER:$3|указал|указала}} следующую причину: ''$2''.",
-       "cantcreateaccount-range-text": "{{GENDER:$3|Участник|Участница}} [[User:$3|$3]] {{GENDER:$3|установил|установила}} запрет на создание учётных записей из диапазона IP-адресов '''$1''', включающего ваш IP-адрес ('''$4'''). \n\nБыла указана следующая причина: $2.",
+       "cantcreateaccount-range-text": "{{GENDER:$3|Участник|Участница}} [[User:$3|$3]] {{GENDER:$3|установил|установила}} запрет на создание учётных записей из диапазона IP-адресов <strong>$1</strong>, включающего ваш IP-адрес (<strong>$4</strong>). \n\nБыла указана следующая причина: $2.",
        "viewpagelogs": "Показать журналы для этой страницы",
        "nohistory": "Для этой страницы история изменений отсутствует.",
        "currentrev": "Текущая версия",
        "revdelete-unsuppress": "Снять ограничения с восстановленных версий",
        "revdelete-log": "Причина:",
        "revdelete-submit": "Применить к {{PLURAL:$1|1=выбранной версии|выбранным версиям}}",
-       "revdelete-success": "'''Видимость версии успешно изменена.'''",
+       "revdelete-success": "Видимость версии обновлена.",
        "revdelete-failure": "'''Видимость версии не может быть изменена:'''\n$1",
        "logdelete-success": "Видимость события изменена.",
        "logdelete-failure": "'''Видимость журнала не установлена:'''\n$1",
        "userrights-changeable-col": "Группы, которые вы можете изменять",
        "userrights-unchangeable-col": "Группы, которые вы не можете изменять",
        "userrights-conflict": "Конфликт изменения прав участника! Пожалуйста, проверьте и примените изменения заново.",
-       "userrights-removed-self": "Вы успешно удалили собственные права. Таким образом, вы больше не сможете получить доступ к этой странице.",
+       "userrights-removed-self": "Вы удалили собственные права. Таким образом, вы больше не сможете получить доступ к этой странице.",
        "group": "Группа:",
        "group-user": "Участники",
        "group-autoconfirmed": "Автоподтверждённые участники",
        "recentchanges-label-bot": "Эта правка сделана ботом",
        "recentchanges-label-unpatrolled": "Эта правка ещё никем не патрулировалась",
        "recentchanges-label-plusminus": "изменение размера в байтах",
-       "recentchanges-legend-heading": "'''Легенда:&nbsp;'''",
+       "recentchanges-legend-heading": "<strong>Легенда:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (см. также [[Special:NewPages|список новых страниц]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Показать",
        "recentchangeslinked-page": "Название страницы:",
        "recentchangeslinked-to": "Наоборот, показать изменения на страницах, которые ссылаются на указанную страницу",
        "recentchanges-page-added-to-category": "[[:$1]] добавлена в категорию",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] и {{PLURAL:$2|одна страница|$2 страниц}} добавлены в категорию",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] и [[Special:WhatLinksHere/$1|$2 {{PLURAL:$2|страница|страниц|страницы}}]] добавлены в категорию",
        "recentchanges-page-removed-from-category": "[[:$1]] убрана из категории",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] и {{PLURAL:$2|одна страница|$2 страниц}} убраны из категории",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] и [[Special:WhatLinksHere/$1|$2 {{PLURAL:$2|страница|страниц|страницы}}]] удалены из категории",
        "autochange-username": "Автоматическое изменение MediaWiki",
        "upload": "Загрузить файл",
        "uploadbtn": "Загрузить файл",
        "backend-fail-read": "Не удалось прочитать файл $1.",
        "backend-fail-create": "Не удалось записать файл $1.",
        "backend-fail-maxsize": "Не удалось записать файл $1, так как его размер превышает $2 {{PLURAL:$2|байт|байта|байт}}.",
-       "backend-fail-readonly": "Хранилище «$1» сейчас находится в режиме «только чтение». Причина: «$2»",
+       "backend-fail-readonly": "Хранилище «$1» сейчас находится в режиме «только чтение». Причина: <em>$2</em>",
        "backend-fail-synced": "Файл «$1» находится в несогласованном состоянии во внутреннем хранилище",
        "backend-fail-connect": "Не удалось подключиться к хранилищу «$1».",
        "backend-fail-internal": "Произошла неизвестная ошибка в хранилище «$1».",
        "uploadstash-summary": "Данная страница предоставляет доступ к файлам, которые были загружены (или находятся в процессе загрузки), но ещё не были опубликованы в вики. Эти файлы никому не видны, кроме загрузившего их участника.",
        "uploadstash-clear": "Очистить скрытые файлы",
        "uploadstash-nofiles": "У вас нет скрытых файлов.",
-       "uploadstash-badtoken": "Ð\9dе Ñ\83далоÑ\81Ñ\8c Ð²Ñ\8bполниÑ\82Ñ\8c Ñ\83казаннÑ\8bе Ð´ÐµÐ¹Ñ\81Ñ\82виÑ\8f. Ð\92озможно, Ð¸Ñ\81Ñ\82Ñ\91к Ñ\81Ñ\80ок Ð´ÐµÐ¹Ñ\81Ñ\82виÑ\8f Ð²Ð°Ñ\88его Ð¶ÐµÑ\82она Ð±ÐµÐ·Ð¾Ð¿Ð°Ñ\81ноÑ\81Ñ\82и. Ð\9fопробуйте ещё раз.",
+       "uploadstash-badtoken": "Ð\9dе Ñ\83далоÑ\81Ñ\8c Ð²Ñ\8bполниÑ\82Ñ\8c Ñ\83казаннÑ\8bе Ð´ÐµÐ¹Ñ\81Ñ\82виÑ\8f. Ð\92озможно, Ð¸Ñ\81Ñ\82Ñ\91к Ñ\81Ñ\80ок Ð´ÐµÐ¹Ñ\81Ñ\82виÑ\8f Ð²Ð°Ñ\88иÑ\85 Ñ\83Ñ\87Ñ\91Ñ\82нÑ\8bÑ\85 Ð´Ð°Ð½Ð½Ñ\8bÑ\85. Ð\9fожалÑ\83йÑ\81Ñ\82а, пробуйте ещё раз.",
        "uploadstash-errclear": "Очистка файлов не удалась.",
        "uploadstash-refresh": "Обновить список файлов",
        "invalid-chunk-offset": "Недопустимое смещение фрагмента",
        "delete-toobig": "У этой страницы очень длинная история изменений, более $1 {{PLURAL:$1|версии|версий}}.\nУдаление таких страниц было запрещено во избежание нарушений в работе сайта «{{SITENAME}}».",
        "delete-warning-toobig": "У этой страницы очень длинная история изменений, более $1 {{PLURAL:$1|версии|версий}}.\nЕё удаление может привести к нарушению нормальной работы базы данных сайта «{{SITENAME}}»;\nдействуйте с осторожностью.",
        "deleteprotected": "Вы не можете удалить эту страницу, поскольку она защищена.",
-       "deleting-backlinks-warning": "'''Предупреждение.''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Другие страницы]] ссылаются на страницу, которую вы собираетесь удалить, или содержат её.",
+       "deleting-backlinks-warning": "<strong>Предупреждение:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|Другие страницы]] ссылаются на страницу, которую вы собираетесь удалить, или содержат её.",
        "rollback": "Откатить изменения",
        "rollbacklink": "откатить",
        "rollbacklinkcount": "откатить $1 {{PLURAL:$1|правку|правки|правок}}",
        "rollbackfailed": "Ошибка при совершении отката",
        "cantrollback": "Невозможно откатить изменения. Последним, кто вносил изменения, был единственный автор этой страницы.",
        "alreadyrolled": "Невозможно откатить последние изменения страницы «[[:$1]]», совершённые [[User:$2|$2]] ([[User talk:$2|обсуждение]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]),\nпоскольку кто-то другой уже успел откатить эти правки или отредактировать страницу.\n\nПоследние изменения {{GENDER:$3|внёс|внесла}} [[User:$3|$3]] ([[User talk:$3|обсуждение]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Было дано описание изменения: ''$1''.",
+       "editcomment": "Было дано описание изменения: <em>$1</em>.",
        "revertpage": "Откат правок [[Special:Contributions/$2|$2]] ([[User talk:$2|обсуждение]]) к версии [[User:$1|$1]]",
        "revertpage-nouser": "Правки (имя участника скрыто) откачены к версии {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Откачены правки $1; возврат к версии $2.",
        "changecontentmodel-title-label": "Заголовок страницы",
        "changecontentmodel-model-label": "Новая модель содержимого",
        "changecontentmodel-reason-label": "Причина:",
+       "changecontentmodel-submit": "Изменить",
        "changecontentmodel-success-title": "Модель содержимого была изменена",
        "changecontentmodel-success-text": "Модель содержимого [[:$1]] была изменена.",
        "changecontentmodel-cannot-convert": "Содержимое [[:$1]] не может быть преобразовано к типу $2.",
        "changecontentmodel-nodirectediting": "Модель содержимого $1 не поддерживает прямое редактирование",
        "log-name-contentmodel": "Журнал изменения моделей содержимого",
        "log-description-contentmodel": "События, связанные с моделями содержимого страниц",
+       "logentry-contentmodel-new": "$1 создал{{GENDER:$2||а}} страницу $3 с использованием нестандартной модели содержимого «$5»",
        "logentry-contentmodel-change": "$1 изменил{{GENDER:$2||а}} модель содержимого страницы $3 с «$4» на «$5»",
        "logentry-contentmodel-change-revertlink": "откат",
        "logentry-contentmodel-change-revert": "Откат",
        "tags-delete-not-allowed": "Метки, определённые расширением, не могут быть удалены, если только расширения явно не даёт возможности этого делать.",
        "tags-delete-not-found": "Метка «$1» не существует.",
        "tags-delete-too-many-uses": "Метка «$1» применяется в более чем $2 {{PLURAL:$2|версии|версиям}}, что означает, что она не может быть удалена.",
-       "tags-delete-warnings-after-delete": "Метка «$1» была удалена успешно, но {{PLURAL:$2|было обнаружено следующее предупреждение|были обнаружены следующие предупреждения}}:",
+       "tags-delete-warnings-after-delete": "Метка «$1» была удалена, но {{PLURAL:$2|было обнаружено следующее предупреждение|были обнаружены следующие предупреждения}}:",
        "tags-activate-title": "Активировать метку",
        "tags-activate-question": "Вы собираетесь активировать метку «$1».",
        "tags-activate-reason": "Причина:",
        "tags-edit-revision-legend": "Добавить или удалить теги из {{PLURAL:$1|1=этой версии|всех $1 версий}}",
        "tags-edit-logentry-legend": "Добавить или удалить теги из {{PLURAL:$1|this log entry|all $1 log entries}}",
        "tags-edit-existing-tags": "Существующие метки:",
-       "tags-edit-existing-tags-none": "''Нет''",
+       "tags-edit-existing-tags-none": "<em>Нет</em>",
        "tags-edit-new-tags": "Новые метки:",
        "tags-edit-add": "Добавить эти метки:",
        "tags-edit-remove": "Удалить эти метки:",
        "tags-edit-reason": "Причина:",
        "tags-edit-revision-submit": "Применить изменения к {{PLURAL:$1|этой версии|$1 версиям}}",
        "tags-edit-logentry-submit": "Применить изменения к {{PLURAL:$1|этой записи журнала|$1 записям журнала}}",
-       "tags-edit-success": "Изменения были успешно применены.",
+       "tags-edit-success": "Изменения были применены.",
        "tags-edit-failure": "Изменения не удалось применить.\n$1",
        "tags-edit-nooldid-title": "Не задана целевая версия",
        "tags-edit-nooldid-text": "Вы не задали целевую версию (версии) для выполнения этой функции, или указанная версия не существует.",
        "default-skin-not-found": "Упс! Тема оформления по умолчанию для вашей вики <code>$wgDefaultSkin</code>, <code>$1</code> недоступна.\n\nВаша установка, похоже, содержит {{PLURAL:$4|следующую тему|следующие темы}} оформления. См. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] с информацией о том, как включить {{PLURAL:$4|её|их и выбрать тему по умолчанию}}.\n\n$2\n\n; Если вы только что установили MediaWiki:\n: Вы, видимо, сделали это с Git или непосредственно из исходного кода с использованием другого способа. Тогда такое возможно. Попробуйте установить некоторые темы из [https://www.mediawiki.org/wiki/Category:All_skins каталога тем оформления сайта mediawiki.org]:\n:* скачав [https://www.mediawiki.org/wiki/Download архив установочных файлов], который содержит несколько тем оформления и расширений; вы можете скопировать из него папку <code>skins/</code>;\n:* скачав архивы отдельных тем оформления с [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org];\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins использовав Git для загрузки тем оформления].\n: Это не должно навредить вашему репозиторию Git, если вы разработчик MediaWiki. См. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] с информацией о том, как включить темы оформления и выбрать тему по умолчанию.\n; Если вы только что обновили MediaWiki:\n: MediaWiki версии 1.24 и новее больше не включает автоматически установленные темы (см. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]).\nВы можете вставить {{PLURAL:$5|следующую строку|следующие строки}} в <code>LocalSettings.php</code>, чтобы включить {{PLURAL:$5|установленную тему|все установленные темы}} оформления: \n\n<pre dir=\"ltr\">$3</pre>\n\n; Если вы только что изменили <code>LocalSettings.php</code>:\n: Перепроверьте названия тем на наличие опечаток.",
        "default-skin-not-found-no-skins": "Упс! Тема оформления по умолчанию для вашей вики <code>$wgDefaultSkin</code>, <code>$1</code> недоступна.\n\nУ вас нет установленных тем оформления.\n\n; Если вы только что установили или обновили MediaWiki:\n: Вы, видимо, сделали это с Git или непосредственно из исходного кода с использованием другого способа. Тогда такое возможно. MediaWiki версии 1.24 и новее не содержат темы оформления в основном репозитории. Попробуйте установить некоторые темы из [https://www.mediawiki.org/wiki/Category:All_skins каталога тем оформления сайта mediawiki.org]:\n:* скачав [https://www.mediawiki.org/wiki/Download архив установочных файлов], который содержит несколько тем оформления и расширений; вы можете скопировать папку <code>skins/</code> из него;\n:* скачав архивы отдельных тем оформления с [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org];\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins использовав Git для загрузки тем оформления].\n: Это не должно навредить вашему репозиторию Git, если вы разработчик MediaWiki. См. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] с информацией о том, как включить темы оформления и выбрать тему по умолчанию.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (включено)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''отключено''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>отключено</strong>)",
        "mediastatistics": "Медиа-статистика",
        "mediastatistics-summary": "Статистические данные о типах загруженных файлов. Она включает информацию только о последних версиях файлов. Более старые или удалённые версии файлов не учитываются.",
        "mediastatistics-nbytes": "$1 байт{{PLURAL:$1||а|ов}} ($2; $3%)",
index b9ecfc7..1c1c7ce 100644 (file)
        "myprivateinfoprotected": "Не мате дозволїня мінити свої пріватны інформації.",
        "mypreferencesprotected": "Не мате дозволїня мінити свої наставлїня.",
        "ns-specialprotected": "Шпеціалны сторінкы не є можне едітовати.",
-       "titleprotected": "Створїня сторінкы з таков назвов было заборонене хоснователём [[User:$1|$1]] з причінов: ''$2''.",
+       "titleprotected": "Створїня сторінкы з таков назвов было заборонене хоснователём [[User:$1|$1]] з причінов: <em>$2</em>.",
        "filereadonlyerror": "Не годно змінити файл „$1“, бо архів файлів „$2“ є теперь лем на чітаня.\n\nАдміністратор сервера, котрый архів заблоковав, додав тото пояснїня: „''$3''“.",
        "invalidtitle-knownnamespace": "Непряавилна назва в просторї назв „$2“ і текстом „$3“",
        "invalidtitle-unknownnamespace": "Неправилна назва з незнамым чіслом простору назв $1 і текстом „$2“",
        "createaccountreason": "Причіна:",
        "createacct-reason": "Прічіна",
        "createacct-reason-ph": "Чом собі робите друге конто",
-       "createacct-captcha": "Перевірка беспекы",
-       "createacct-imgcaptcha-ph": "Опиште текст што видите высше",
        "createacct-submit": "Створити конто",
        "createacct-another-submit": "Створити інше конто",
        "createacct-benefit-heading": "{{grammar:4sg|{{SITENAME}}}} творять люде як вы.",
        "passwordreset-emailtext-ip": "Дахто (може Вы, з IP адресы $1) попросив о наставлїня нового гесла до вашого конта на {{grammar:6sg|{{SITENAME}}}} ($4). З тов адресов {{PLURAL:$3|є повязане слїдуюче конто|суть повязаны слїдуючі конта}}:\n\n$2\n\n{{PLURAL:$3|Тото дочасне гесло стане неплатным|Тоты дочасны гесла стануть неплатныма}} {{PLURAL:$5|за день|за $5 днї|за $5 днїв}}.\nТеперь бы сьте ся мали приголосити і зволити собі нове гесло. Кідь тоту просьбу послав хтось другый або сьте собі на своє старе гесло спомянули і не хочете го змінити, можете тото повідомлїня іґноровати і дале хосновати старе гесло.",
        "passwordreset-emailtext-user": "{{gender:$1|Хоснователь|Хоснователька|Хоснователь}} $1 {{grammar:2sg|{{SITENAME}}}} {{gender:$1|попросив|попросила|попросив}} о наставлїня нового гесла до вашого\nконта на {{grammar:6sg|{{SITENAME}}}} ($4). З тов адресов {{PLURAL:$3|є повязане наступне конто|суть повязаны наступны конта}}:\n\n$2\n\n{{PLURAL:$3|Тото дочасне гесло кінчить|Тоты дочасны гесла кінчать}} {{PLURAL:$5|о єден день|о $5 днї|о $5 днїв}}.\nТеперь бы сьте ся мали приголосити і зволити собі нове гесло. Кідь тоту пожадавку \nпослав дахто другый або сьте собі на своє старе гесло спомянули і не хочете го\nзмінити, можете тото повідомлїня іґноровати і надале хосновати старе гесло.",
        "passwordreset-emailelement": "Імя хоснователя: \n$1\n\nДочасне гесло: \n$2",
-       "passwordreset-emailsent": "Імейл з геслом быв посланый.",
+       "passwordreset-emailsentemail": "Імейл з геслом быв посланый.",
        "passwordreset-emailsent-capture": "Быв выґенерованый імейл з геслом, што є вказаный ниже.",
        "passwordreset-emailerror-capture": "Быв выґенерованый імейл з геслом, котрый є указаный ниже, але ся го не вдало загнати {{GENDER:$2|хоснователёви|хосновательцї}}: $1",
        "changeemail": "Зміна імейловой адресы",
        "prefs-tokenwatchlist": "Кліч",
        "prefs-diffs": "Порівнаня верзії",
        "prefs-help-prefershttps": "Тот параметер набуде чінности по вашім далшім входї до сістемы.",
-       "email-address-validity-valid": "Адреса ел. пошты вызерать быти правилна",
-       "email-address-validity-invalid": "Задайте правилну адресу ел. пошты",
        "userrights": "Справа хосновательскых ґруп",
        "userrights-lookup-user": "Управовати хосновательскы ґрупы",
        "userrights-user-editname": "Задайте мено хоснователя:",
        "right-blockemail": "Блокованя хоснователя од посыланя е-пошты",
        "right-hideuser": "Блокованя мена хоснователя і ёго схованя",
        "right-ipblock-exempt": "Обходжіня блокованя IP адрес, їх россягів і автоблокованя",
-       "right-proxyunbannable": "Обходжіня автоматічного блокованя проксі серверів",
        "right-unblockself": "Одблоковати самого себе",
        "right-protect": "Зміна ровни замків і едітованя каскадово замкнутых сторінок",
        "right-editprotected": "Едітованя сторінок замкнутых на „{{int:protect-level-sysop}}“",
        "recentchanges-label-minor": "Тото є мала зміна",
        "recentchanges-label-bot": "Тото едітованя зроблене ботом",
        "recentchanges-label-unpatrolled": "Тота зміна дотеперь не была патролёвана.",
-       "recentchanges-legend-heading": "'''Леґенда:'''",
+       "recentchanges-legend-heading": "<strong>Леґенда:</strong>",
        "recentchanges-legend-newpage": "$1 — нова сторінка",
        "rcnotefrom": "Долов суть вказаны зміны од <strong>$2</strong> (до <strong>$1</strong>).",
        "rclistfrom": "Вказати едітованя почінаючі з $3 $2.",
        "watchthisupload": "Слїдовати тот файл",
        "filewasdeleted": "Файл з таков назвов уж екзістовав а быв змазаный. Детайлы обсягує $1.",
        "filename-bad-prefix": "Назва наладовованого файлу ся зачінать на '''„$1“''', што не є назва звычайно приряджована діґіталным фотоапаратом. Звольте іншу назву, котра ваш файл попише лїпше.",
-       "upload-success-subj": "Наладованя было успішне",
-       "upload-success-msg": "Файл вами наладованый з [$2] є доступный на [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Проблем з наладованём",
-       "upload-failure-msg": "У вами наладованого файлу выник проблем  з [$2]::\n\n$1",
-       "upload-warning-subj": "Позірь к наладованю",
-       "upload-warning-msg": "Під час вашого наладовованя файлу [$2] ся притрафив проблем. Кідь го хочете вырїшыти, можете ся вернути до  [[Special:Upload/stash/$1|формуларя наладовованя]].",
        "upload-proto-error": "Неплатный протокол",
        "upload-proto-error-text": "Наладованя одлеглого файлу пожадує зазначіня URLs з початком <code>http://</code> або <code>ftp://</code>.",
        "upload-file-error": "Інтерна хыба",
        "rollbackfailed": "Не годно было ся вернути назад",
        "cantrollback": "Не годен вернути послїднє едітованя, бо послїднїй приспіватель є єдиным автором той сторінкы.",
        "alreadyrolled": "Не годен вернути послїднє едітованя [[:$1]] од хоснователя [[User:$2|$2]] ([[User talk:$2|діскузія]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]), бо дахто друхый уже сторінку едітовав або вернув тоту зміну назад.\n\nОстатнє едітованя провив(а) [[User:$3|$3]] ([[User talk:$3|діскузуя]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Згорнутя едітованя было: ''„$1“''.",
+       "editcomment": "Згорнутя едітованя было: <em>$1</em>.",
        "revertpage": "Едітованя хоснователя „[[Special:Contributions/$2|$2]]“ ([[User talk:$2|діскузія]]) вернуты до минулого ставу, котрого автором є „[[User:$1|$1]]“",
        "revertpage-nouser": "Едітованя скрытого хоснователя вернуты до минулого ставу, котрого автором є „[[User:$1|$1]]“",
        "rollback-success": "Едітованя хоснователя $1 было вернуте на остатню ревізію од хоснователя $2.",
        "movenosubpage": "Тота сторінка не має підсторінок.",
        "movereason": "Причіна:",
        "revertmove": "вернути",
-       "delete_and_move": "Змазати і переменовати",
        "delete_and_move_text": "==Є треба змазаня==\n\nЦілёва сторінка „[[:$1]]“ уж екзістує. Желате собі єй змазати про уволнїня місця на переменованя?",
        "delete_and_move_confirm": "Гей, змазати сторінку",
        "delete_and_move_reason": "Змазане про уможнїня переменованя з „[[$1]]“",
index 48d24e8..1c1d534 100644 (file)
        "myprivateinfoprotected": "भवान्/भवती अत्र वैयक्तिकसूचनाः सम्पादयितुं न शक्नोति ।",
        "mypreferencesprotected": "भवान्/भवती स्वस्य इष्टतमानि सम्पादयितुं न शक्नोति ।",
        "ns-specialprotected": "विशिष्टानि पृष्ठानि सम्पादयितुं न शक्यन्ते ।",
-       "titleprotected": "\"''$2''\" इति हेतोः एतत् शीर्षकं (विषयः) [[User:$1|$1]] इत्यस्मात् संरक्षितमस्ति ।",
+       "titleprotected": "<em>$2</em> इति हेतोः एतत् शीर्षकं (विषयः) [[User:$1|$1]] इत्यस्मात् संरक्षितमस्ति ।",
        "filereadonlyerror": "\"$1\" सञ्चिकापरिवर्तितुं न शक्यते । \"$2\" कोषः अधुना  केवलं पठनयोग्यः (read only) अस्ति । येन प्रबन्धकेन एवं कृतं, तेन निम्नकारणं प्रदत्तम् \"$3\"",
        "invalidtitle-knownnamespace": "\"$2\" नमावकाशेन \"$3\" पाठेन च युक्तम् अयोग्यं शीर्षकम्",
        "invalidtitle-unknownnamespace": "अयोग्येन नामवाकाशयुतेन, $1 सङ्ख्यया, \"$2\" पाठेन  युक्तम् अयोग्यं शीर्षकम्",
        "newarticle": "(नूतनम्)",
        "newarticletext": "भवान्/भवती अनिर्मिते पृष्ठे अस्ति । \nपृष्ठं स्रष्टुम् अधः प्रदत्तायां पेटिकायां टङ्कनं प्रारभताम् (साहाय्यार्थं [$1 अत्र]) नुदतु ।\nभवान्/भवती यदि क्षतिकारणात् एतत् पृष्ठं प्रति आगच्छत्, तर्हि अस्य गवेषकस्य (browser) Back नुदतु ।",
        "anontalkpagetext": "----\n<em>एतत् सम्भाषणपृष्ठम् अनामकसदस्येभ्यः अस्ति । एतत् तेभ्यः अनामकसदस्येभ्यः रचितमस्ति, यैः सदस्यता न प्राप्ता अस्ति तथा च अस्य पृष्ठस्य उपयोगं न कुर्वन्तः सन्ति ।</em>\nतेषां व्यक्तिगतसूचनां प्राप्तुमेव वयं तस्य/तस्याः अन्तर्जालसंविदः उपयोगं कुर्मः । केचन सदस्याः स्वस्य अन्तर्जालसंविदम् अन्यान् सदस्यान् कथयन्ति । \nयद्यपि अनामकसदस्यः अहं नास्मि, तथापि अयोग्यसूचनाः मम पार्श्वे आगच्छन्त्यः सन्ति इति यदि भवान्/भवती शङ्कते, तर्हि एतत् [[Special:UserLogin/signup|create an account]] एतत् [[Special:UserLogin|log in]] वा कृत्वा भविष्यस्य अनामकसदस्यानां सन्देशेभ्यः स्वस्य रक्षणं करोतु ।",
-       "noarticletext": "à¤\85सà¥\8dमिनà¥\8d à¤ªà¥\83षà¥\8dठà¥\87 à¤\85धà¥\81ना à¤\95िमपि à¤¨ à¤µà¤¿à¤¦à¥\8dयतà¥\87 à¥¤ [[Special:Search/{{PAGENAME}}|à¤\8fषà¤\83 à¤¶à¤¬à¥\8dदà¤\83]] à¤¯à¥\87षà¥\81 à¤ªà¥\83षà¥\8dठà¥\87षà¥\81 à¤\85नà¥\8dतरà¥\8dभवति, à¤¤à¤¾à¤¨à¤¿ à¤ªà¥\83षà¥\8dठानि à¤\85नà¥\8dवà¥\87षà¥\8dà¤\9fà¥\81à¤\82 à¤¶à¤\95à¥\8dयनà¥\8dतà¥\87 à¥¤ \n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}  à¤¸à¤®à¥\8dबदà¥\8dधà¥\87षà¥\81 à¤ªà¥\83षà¥\8dठà¥\87षà¥\81 à¤\85नà¥\8dवà¥\87षणà¤\82]\n[{{fullurl:{{FULLPAGENAME}}|action=edit}} à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¸à¤®à¥\8dपादनं] वा  शक्यम्</span>.",
+       "noarticletext": "à¤\85सà¥\8dमिनà¥\8d à¤ªà¥\83षà¥\8dठà¥\87 à¤\85धà¥\81ना à¤\95िमपि à¤¨ à¤µà¤¿à¤¦à¥\8dयतà¥\87 à¥¤ [[Special:Search/{{PAGENAME}}|à¤\8fषà¤\83 à¤¶à¤¬à¥\8dदà¤\83]] à¤¯à¥\87षà¥\81 à¤ªà¥\83षà¥\8dठà¥\87षà¥\81 à¤\85नà¥\8dतरà¥\8dभवति, à¤¤à¤¾à¤¨à¤¿ à¤ªà¥\83षà¥\8dठानि à¤\85नà¥\8dवà¥\87षà¥\8dà¤\9fà¥\81à¤\82 à¤¶à¤\95à¥\8dयनà¥\8dतà¥\87 à¥¤ \n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}  à¤¸à¤®à¥\8dबदà¥\8dधà¥\87षà¥\81 à¤ªà¥\83षà¥\8dठà¥\87षà¥\81 à¤\85नà¥\8dवà¥\87षणà¤\82]\n[{{fullurl:{{FULLPAGENAME}}|action=edit}} à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¨à¤¿à¤°à¥\8dमाणं] वा  शक्यम्</span>.",
        "noarticletext-nopermission": "अस्मिन् पृष्ठे अधुना किमपि न विद्यते । [[Special:Search/{{PAGENAME}}|एषः शब्दः]] येषु पृष्ठेषु अन्तर्भवति, तानि पृष्ठानि अन्वेष्टुं शक्यन्ते । \n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}  सम्बद्धेषु पृष्ठेषु अन्वेषणं]\n[{{fullurl:{{FULLPAGENAME}}|action=edit}} अस्य पृष्ठस्य सम्पादनं] वा  शक्यम्</span>.",
        "missing-revision": "\"{{FULLPAGENAME}}\" पृष्ठस्य संस्करणं #$1 नोपलभ्यम् ।\nयस्य पृष्ठस्य इतिहासे परिसन्धयः कालातीताः सन्ति, तेषु पृष्ठेषु एवं भवति ।\nअधिकसूचनाः अत्र प्राप्तुं शक्यते [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} अपाकृतानाम् आवलिः].",
        "userpage-userdoesnotexist": "\"$1\" इति सदस्यनाम पञ्जीकृतं न विद्यते । अस्य\nनवरचनायै/सम्पादनाय तत् पश्यतु ।",
        "undo-summary-username-hidden": "निगूहितयोजकद्वारा कृता  $1 पूर्ववत्-प्रक्रिया निरस्तीक्रियताम् ।",
        "cantcreateaccounttitle": "सदस्यता प्राप्तुं न शक्यते",
        "cantcreateaccount-text": "(<strong>$1</strong>) इत्यस्य संविदः (IP) कृते सदस्यता प्राप्तुं न शक्यते । कारणं [[User:$3|$3]] द्वारा सा संवित्सङ्ख्या प्रतिबन्धिता अस्ति । \n\n$3 इत्यनेन कारणं दत्तं यत्, <em>$2</em>",
-       "cantcreateaccount-range-text": "सदस्यताप्राप्तेः सीमा-आक्रान्तृषु '''$1''' अन्तर्जालसंवित्सु (IP) भवतः/भवत्याः अन्तर्जालसंवद् ('''$4''') अन्तर्भवति । अतः [[User:$3|$3]] द्वारा भवतः/भवत्याः अन्तर्जालसंविद् प्रतिबन्धिता ।\n\n$3 इत्यनेन कारणं दत्तं यत्, ''$2''",
+       "cantcreateaccount-range-text": "सदस्यताप्राप्तेः सीमा-आक्रान्तृषु <strong>$1</strong> अन्तर्जालसंवित्सु (IP) भवतः/भवत्याः अन्तर्जालसंवद् (<strong>$4</strong>) अन्तर्भवति । अतः [[User:$3|$3]] द्वारा भवतः/भवत्याः अन्तर्जालसंविद् प्रतिबन्धिता ।\n\n$3 इत्यनेन कारणं दत्तं यत्, <em>$2</em>",
        "viewpagelogs": "अस्य पृष्ठस्य संरक्षिताऽऽवलिः (logs) दृश्यताम्",
        "nohistory": "अस्य पृष्ठस्य इतिहासः न वर्तते ।",
        "currentrev": "नूतनतमं संस्करणम्",
        "recentchanges-label-bot": "बोट्-द्वारा कृतं सम्पादनमेतत्",
        "recentchanges-label-unpatrolled": "एतावता अस्य सम्पादनस्य परिशीलिनं नाभूत् ।",
        "recentchanges-label-plusminus": "पृष्ठस्य आकारः एतावद्भिः बैट्स्-संख्याभिः परिवर्तितः",
-       "recentchanges-legend-heading": "'''विकल्पविषयकम्'''",
+       "recentchanges-legend-heading": "<strong>विकल्पविषयकम्</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|अत्र नूतनपृष्ठानाम् आवलिः]] अपि दृश्यताम्)",
        "rcnotefrom": "<strong>$3, $4</strong> तः आरभ्य (<strong>$1</strong> पर्यन्तं) जातानि {{PLURAL:$5|परिवर्तनानि}} अधः प्रदर्शितानि ।",
        "rclistfrom": "$3 $2 पश्चात् जातानि नूतनानि परिवर्तनानि दृश्यन्ताम्",
        "watchthisupload": "इमां सञ्चिकाम् अवलोकयतु ।",
        "filewasdeleted": "अनेन नाम्ना उत्तारिता काचित् सञ्चिका पूर्वमेव अपमर्जिता ।\n $1 परिशील्य उत्तरणं पुनः उत्तारयतु ।",
        "filename-bad-prefix": "यस्याः सञ्चिकायाः उत्तारणं कुर्वाणः अस्ति तस्य नाम '''\"$1\"''' तः आरभते ।  यत् डिज़िटल् क्यामरा द्वारा दत्तम् अस्ति । \nअस्याः अधिकज्ञानप्रपकं किमपि अन्यत् नाम योजयतु ।",
-       "upload-success-subj": "सफलम् उत्तारणम् ।",
-       "upload-success-msg": "[$2] तः उत्तारणं सफलम् । तदत्र अस्ति । [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "उत्तारणसमस्या ।",
-       "upload-failure-msg": "[$2]तः उत्तारणे कापिसमस्या आसीत् । \n$1",
-       "upload-warning-subj": "उत्तारणस्य पूर्वसूचना ।",
-       "upload-warning-msg": " [$2] तः उत्तारणे समस्या आसीत् । अस्याः समस्यायाः परिहारार्थम् अत्र गच्छतु  [[Special:Upload/stash/$1|उत्तारणप्रपत्रम्]]",
        "upload-proto-error": "सदोषः क्रमः ।",
        "upload-proto-error-text": "स्वयम् उत्तरणं <code>http://</code> or <code>ftp://</code>. इत्यनेन सह आरब्धः भवति ।",
        "upload-file-error": "आन्तरिकः दोषः",
        "querypage-disabled": "समाचरणकारणेन एतद्विशेषपुटं निष्क्रियम् ।",
        "apihelp": "API साहाय्यम्",
        "apihelp-no-such-module": "\"$1\" इत्येत् Module न प्राप्तम् ।",
+       "apisandbox": "API प्रयोगपृष्ठम्",
+       "apisandbox-submit": "निवेदनं करोतु",
+       "apisandbox-reset": "रिक्तीक्रियताम्",
+       "apisandbox-examples": "उदाहरणम्",
+       "apisandbox-results": "परिणामम्",
        "booksources": "ग्रन्थस्रोतः",
        "booksources-search-legend": "ग्रन्थस्रोतः अन्विष्यताम्",
        "booksources-search": "अन्विष्यताम्",
        "wlheader-showupdated": " येषु पृष्ठेषु भवता/भवत्या परिवर्तनं कृतम् आसीत्, तानि पृष्ठानि अत्र <strong>bold</strong> प्राप्यन्ते ।",
        "wlnote": "$3 : $4 वादनं यावत् <strong>$2</strong> होरां यवात् {{PLURAL:$2|होरायां|होरासु}} {{PLURAL:$1|एकं परिवर्तनं|परिवर्तनानि <strong>$1</strong>}} अधः {{PLURAL:$1|अस्ति|सन्ति}}।",
        "wlshowlast": "अन्तिमाः $1 होराः, अन्तिमानि $2 दिनानि  दृश्यन्ताम्",
-       "watchlistall2": "सर्वाणि",
        "watchlist-options": "निरीक्षासूचेः विकल्पाः",
        "watching": "निरीक्षते...",
        "unwatching": "निरीक्षाम् अपाकरोति...",
        "rollbackfailed": "प्रत्यहरणम् असफलम् ।",
        "cantrollback": "सम्पादनं  पूर्ववत् प्रत्यानेतुं न शक्यते ।\nगतयोजकः केवलम् अस्यपुटस्य कर्ता ।",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|वार्ता]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) द्वारा कृतम्  [[:$1]] इत्यस्य गतसम्पादनं पूर्वतनस्थितौ प्रत्याहरणं न शक्यते । अत्रान्तरे कोऽप्यन्यः एतत्पुटं पुनस्सम्पादितवान् अथवा पूर्वमेव प्राचीनस्थितौ आनीतम् अस्ति ।\nअस्य पुटास्य अन्तिमसम्पादनं [[User:$3|$3]] ([[User talk:$3|वार्ता]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) इत्यनेन कृतम् ।",
-       "editcomment": "\"''$1''\" इति सम्पादनसारः आसीत् ।",
+       "editcomment": "<em>$1</em> इति सम्पादनसारः आसीत् ।",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]])इत्यस्य सम्पादनम् अपमर्ज्य  [[User:$1|$1]] इति अन्तिमपुनरावृत्तिः ।",
        "revertpage-nouser": "(सदस्यस्य नाम अपाकृतम्) इत्यस्य सम्पादनानि अपाकृत्य {{GENDER:$1|[[User:$1|$1]]}} इत्यस्य अन्तिमं संस्करणं पूर्ववत् कृतम् ।",
        "rollback-success": "$1 इत्यस्य सम्पादनम् अपनयतु । \n$2 द्वारा सम्पादितां अन्तिमावृत्तिं पुनस्थापयतु ।",
        "javascripttest-pagetext-frameworks": "अधो दत्तेषु कञ्चिदेकां परीक्षाप्रक्रियां चिनोतु : $1",
        "javascripttest-pagetext-skins": "अनेन सह परीक्षां सञ्चालयितुं  काचित् त्वक् चिनोतु ।",
        "javascripttest-qunit-intro": "mediawiki.org. [$1 अभिलेखपरीक्षा] इत्यत्र पश्यतु ।",
-       "tooltip-pt-userpage": "भवतः/भवत्याः सदस्यपृष्ठम्",
+       "tooltip-pt-userpage": "{{GENDER:|भवतः/भवत्याः सदस्यपृष्ठम्}}",
        "tooltip-pt-anonuserpage": "ऐपिसङ्केतार्थं योजकपुटं भवान् सम्पादयति एवम्..",
-       "tooltip-pt-mytalk": "भवतः/भवत्याः सम्भाषणपृष्ठम्",
+       "tooltip-pt-mytalk": "{{GENDER:|भवतः/भवत्याः}} सम्भाषणपृष्ठम्",
        "tooltip-pt-anontalk": "एतस्मात् ऐपिसङ्केतात् सम्पादनस्य परिचर्चा ।",
-       "tooltip-pt-preferences": "भवतः/भवत्याः इष्टतमानि",
+       "tooltip-pt-preferences": "{{GENDER:|भवतः/भवत्याः}} इष्टतमानि",
        "tooltip-pt-watchlist": "भवतः/भवत्याः निरीक्षासूच्यां विद्यमानानां पृष्ठानाम् आवलिः",
-       "tooltip-pt-mycontris": "भवतः/भवत्याः योगदानानाम् आवलिः",
+       "tooltip-pt-mycontris": "{{GENDER:|भवतः/भवत्याः}} योगदानानाम् आवलिः",
        "tooltip-pt-login": "प्रवेशाय प्रोत्सहामहे । परन्तु प्रवेशः ऐच्छिकः ।",
        "tooltip-pt-logout": "निर्गम्यताम्",
        "tooltip-pt-createaccount": "नूतनसदस्यतां प्राप्य प्रविश्यताम् इति सूच्यते किन्तु न एतद् अनिवार्यम्",
        "tooltip-t-recentchangeslinked": "एतत्पृष्ठसम्बद्धेषु पृष्ठेषु जातानि नवीनपरिवर्तनानि",
        "tooltip-feed-rss": "अस्मै पृष्ठाय आर-एस-एस-पूरणम्",
        "tooltip-feed-atom": "अस्मै पृष्ठाय अणुपूरणम्",
-       "tooltip-t-contributions": "अनेन सदस्येन कृतानां योगदानानाम् आवलिः",
+       "tooltip-t-contributions": "{{GENDER:$1|अनेन सदस्येन}} कृतानां योगदानानाम् आवलिः",
        "tooltip-t-emailuser": "एतस्मै योजकाय वि-पत्रं प्रेष्यताम्",
        "tooltip-t-info": "एतस्य पृष्ठस्य विषये अधिकं विवरणम्",
        "tooltip-t-upload": "सञ्चिकाः उपारोप्यन्ताम्",
        "default-skin-not-found": "अरे ! तव विकि कृते यदाभावे त्वक् <code dir=\"ltr\">$wgDefaultSkin</code> निर्धारिता अस्ति ।  <code>$1</code>-त्वेन उपलब्धं नास्ति ।\n\nतव स्थापनायां निम्नं अस्ति । {{PLURAL:$4|त्वक्|त्वचः}} । दृश्यताम् -  [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable {{PLURAL:$4|it|them and choose the default}}.\n\n$2\n\n; MediaWiki इत्येत् सद्यः एव स्थापितम् :\n: git इत्यस्मात् स्थापितं स्यात् उत साक्षात् मूलस्रोतात् उपयञ्जते । एतत् सामान्यम् अस्ति । इतः काश्चन त्वचः अवतार्यताम्  [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], द्वारा:\n:* अपवारोपणम् [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* इत्समात् वैय्यक्तिरूपेण त्वचः अवारोपणं शक्यम्  [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Using Git to download skins].\n: यदि भवान्/भवती मिडियाविकि विधिकारः अस्ति चेत् git द्वारा एतत् समीकर्तुं न शक्योत् ।\n\n; MediaWiki इत्येत् केवलम् अवगच्छति :\n: MediaWiki 1.24, नवीनं च (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). You can paste the following {{PLURAL:$5|line|lines}} into <code>LocalSettings.php</code> to enable {{PLURAL:$5|the|all}} installed {{PLURAL:$5|skin|skins}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; यदि केवलं परिवर्तुम् इच्छति... <code>LocalSettings.php</code>:\n: त्वचि वारद्वयं क्लिक् करोतु...",
        "default-skin-not-found-no-skins": "अरे ! तव विकि कृते यदाभावे त्वक् <code dir=\"ltr\">$wgDefaultSkin</code> निर्धारिता अस्ति ।  <code>$1</code>-त्वेन उपलब्धं नास्ति ।\n\nतव स्थापनायां निम्नं अस्ति । \n दृश्यताम् -  [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable \n\n; MediaWiki इत्येत् सद्यः एव स्थापितम् :\n: git इत्यस्मात् स्थापितं स्यात् उत साक्षात् मूलस्रोतात् उपयञ्जते । एतत् सामान्यम् अस्ति । इतः काश्चन त्वचः अवारोप्यताम्  [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], द्वारा:\n:* अपवारोपणम् [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* इत्समात् वैय्यक्तिरूपेण त्वचः अवारोपणं शक्यम्  [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Using Git to download skins].\n: यदि भवान्/भवती मिडियाविकि विधिकारः अस्ति चेत् git द्वारा एतत् समीकर्तुं न शक्योत् ।\n\n; MediaWiki इत्येत् केवलम् अवगच्छति :\n: MediaWiki 1.24, नवीनं च (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). You can paste the following <code>LocalSettings.php</code> to enable \n\n; यदि केवलं परिवर्तुम् इच्छति... <code>LocalSettings.php</code>:\n: त्वचि वारद्वयं क्लिक् करोतु यदभावे रक्षतु...",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (समर्थीतम्)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''असमर्थीतम्''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>असमर्थीतम्</strong>)",
        "mediastatistics": "सञ्चिकानां सङ्ख्यिक्यः",
        "mediastatistics-summary": "उपाहोतिसञ्चकानां विषये साङ्ख्यिकी । सञ्चिकायाः अद्यतनसंस्करणम् एव अत्र अन्तर्भवति । पुरातनम् उत अपाकृतं संस्करण् अत्र न अन्तर्भवति ।",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 बैटट्|$1 बैट्स्}} ($2; $3%)",
index 8fab803..ffbdea6 100644 (file)
@@ -14,7 +14,8 @@
                        "Krivoshapkina",
                        "Macofe",
                        "Matma Rex",
-                       "Мария Олесова"
+                       "Мария Олесова",
+                       "Ай-Куо"
                ]
        },
        "tog-underline": "Сигэлэри аннынан тардыы:",
        "databaseerror-query": "Ыйытык: $1",
        "databaseerror-function": "Функция: $1",
        "databaseerror-error": "Алҕас: $1",
+       "transaction-duration-limit-exceeded": "\nРепликация оҥорорго улахан лаг мэһэйдээбэтин туһугар транзакция тохтотуллубута, сурутуу уһуна ($1) ($2){{PLURAL:$2|}}лимиты таһынан ааһарын быһыытынан.\nЭн  биир олорууга хас да элэмиэни уларытар буоллаххына, ол оннугар элбэх улахана суох операциялары оҥорорго холонон көрүҥ.",
        "laggedslavemode": "Болҕой: Бу сирэй бүтэһик уларытыылара суох буолуон сөп",
        "readonly": "Билии олоҕун уларытар бобуллубут",
        "enterlockreason": "Уларытыыны бобуу төрүөтүн уонна төһө өр бобулларын ый.",
        "missingarticle-rev": "(#-с торум: $1)",
        "missingarticle-diff": "(Уратыта: $1, $2)",
        "readonly_lag": "Билии олоҕун хос сиэрбэрдэрэ сүрүн сиэрбэри кытта мэнэйдэһэр кэмнэригэр билии олоҕо хатанна",
+       "nonwrite-api-promise-error": " HTTP-аат 'Promise-Non-Write-API-Action'ыытылынна, ол гынан баран ыйытык суруйуу API-модулугар барбыта.",
        "internalerror": "Ис алҕас (внутренняя ошибка)",
        "internalerror_info": "Ис алҕас: $1",
        "internalerror-fatal-exception": "\"$1\" тииптээх төлөрүйбэт туорааһын",
        "myprivateinfoprotected": "Бэйэҥ тускунан информацияны уларытар кыаҕыҥ суох эбит.",
        "mypreferencesprotected": "Бэйэҥ туруорууларгын уларытар кыаҕыҥ суох эбит.",
        "ns-specialprotected": "{{ns:special}} ааттаах сирэйдэр уларытыллыбаттар.",
-       "titleprotected": "Бу бас тыл оҥоһулларын [[User:$1|$1]] боппут.\nТөрүөтэ - ''$2''",
-       "filereadonlyerror": "«$1» билэни уларытар сатаммата, тоҕо диэтэххэ «$2» «ааҕарга эрэ» диэн эрэсиимҥэ турар эбит.\n\nБу эрэсиими туруорбут дьаһабыл маннык быһаарыыны хаалларбыт: «''$3''».",
+       "titleprotected": "Бу бас тыл оҥоһулларын [[User:$1|$1]] боппут.\nТөрүөтэ - <em>$2</em>",
+       "filereadonlyerror": "«$1» билэни уларытар сатаммата, тоҕо диэтэххэ «$2» «ааҕарга эрэ» диэн эрэсиимҥэ турар эбит.\n\nБу эрэсиими туруорбут систиэмэлээх дьаһабыл маннык быһаарыыны хаалларбыт: «''$3''».",
        "invalidtitle-knownnamespace": "«$2» аат далыгар маннык тиэкистээх «$3» сатаммат аат",
        "invalidtitle-unknownnamespace": "Биллибэт аат дала $1 нүөмэрдээх, \"$2\" тиэкистээх сатаммат аат",
        "exception-nologin": "Ааккын билиһиннэрбэтэххин",
        "changepassword-success": "Киирии тылыҥ этэҥҥэ уларыйда!",
        "changepassword-throttled": "Ааккын аһара элбэхтик билиһиннэрэ сатаатыҥ.\nБука диэн $1 буолан баран өссө киирэн көрөөр.",
        "botpasswords": "Оруобаттар аһарыктара",
+       "botpasswords-summary": "<em>Хатыыр тыллара</em> туттааччы учуоттуур сурутуутугар API-нан   логины уонна хатыыр тылы туттубакка эрэ киирэр кыах биэрэр. Кыттааччы  бота хатыыр тыллаах киириитигэр бырааба хааччахтаныан сөп.\nЭн  ити тоҕо наадатын билбэт буоллаххына, бука, итини гымматыҥ ордук.Ким даҕаны эйигиттэн хаһан даҕаны эн оҥорбутуҥ уонна биллэрбитиҥ диэн ыйытыа суохтаах.",
        "botpasswords-disabled": "Оруобаттар аһарыктара араарыллыбыттар.",
        "botpasswords-no-central-id": "Оруобат аһарыгын туһанарга кииннэммит ааккынан киириэхтээххин.",
        "botpasswords-existing": "Билигин баар оруобат аһарыктара",
        "botpasswords-label-delete": "Сот",
        "botpasswords-label-resetpassword": "Аһарыгы саҥаттан",
        "botpasswords-label-grants": "Туттуллар көҥүллэр:",
+       "botpasswords-help-grants": " Кыттааччы учуоттуур суруйуутугар баар ыйыллыбыт кыттааччы быраабыгар киирэргэ кыах биэрэр. к. [[Special:ListGrants|көҥүллэр табылыыссаларын]] эбии информацияны ылар туһугар.",
        "botpasswords-label-restrictions": "Туттарга хааччахтаах:",
        "botpasswords-label-grants-column": "Көҥүллэннэ",
        "botpasswords-bad-appid": "Маннык аат «$1» сатаммат.",
        "botpasswords-insert-failed": "«$1» диэн ааттаах оруобаты эбэр табыллыбата. Баҕар хайыы-үйэ эбиллибитэ буолаарай?",
+       "botpasswords-update-failed": "\"$1\" диэн ааттаах ботаны кыайан саҥардыбатыбыт. Баҕар, сотторуллубута буолуо?",
        "botpasswords-created-title": "Оруобат аһарыга оҥоһулунна",
        "botpasswords-created-body": "«$1» оруобат аһарыга бигэргэтилиннэ.",
        "botpasswords-updated-title": "Оруобат аһарыга саҥардылынна",
        "botpasswords-updated-body": "«$1» оруобат аһарыга уларытылынна.",
        "botpasswords-deleted-title": "Оруобат аһарыга сотулунна",
        "botpasswords-deleted-body": "«$1» оруобат аһарыга сотулунна.",
-       "botpasswords-restriction-failed": "Буот аһарыгын кытта сыһыаннаах хааччахтан киирии оҥоһуллубата",
+       "botpasswords-newpassword": "\nСаҥа хатыыр тыл <strong>$1</strong> — <strong>$2</strong> аннынан киириигэ. <em> суруй аныгыскыга туттарга.</em>",
+       "botpasswords-no-provider": "BotPasswordsSessionProvider кыаллыбат.",
+       "botpasswords-restriction-failed": "Буот аһарыгын кытта сыһыаннаах хааччахтан киирии сатаммата.",
+       "botpasswords-invalid-name": "Кыттааччы аатыгар буот аһарыгын араарааччыта суох эбит (\"$1\").",
+       "botpasswords-not-exist": "«$1» кыттааччыга «$2» диэн ааттаммыт оруобакка аналлаах аһарыга суох эбит.",
        "resetpass_forbidden": "Киирии тылы уларытар сатаммат",
        "resetpass-no-info": "Ааккын билиһиннэрдэххинэ эрэ бу сирэйгэ быһа тиийиэххин сөп.",
        "resetpass-submit-loggedin": "Киирии тылы уларытыы",
        "previewnote": "'''Бу барыллаан көрүү эрэ.'''\nАтын уларытыы бигэргэтиллэ илик!",
        "continue-editing": "Уларытар сиргэ",
        "previewconflict": "Этот предварительный просмотр отражает текст в верхнем окне редактирования так, как он будет выглядеть, если вы решите записать его.",
-       "session_fail_preview": "'''Сиэрбэр сессия идентификаторын сүтэрэн кэбиһэн эн уларытыыгын кыайан киллэрбэтэ.\nӨссө холонон көр.\nОлох сатамматаҕына биикиттэн [[Special:UserLogout|тахсан]] баран өссө киирэн көрөөр.'''",
+       "session_fail_preview": "'''Сиэрбэр сессия идентификаторын сүтэрэн кэбиһэн эн уларытыыгын кыайан киллэрбэтэ.\nБаҕар, үлэ сеансын бүтэрбитиҥ буолуо. <strong>Баһаалыста, көҥүлү ааспыккын бил уонна өссө холонон көр.\n<strong>\nОлох сатамматаҕына биикиттэн [[Special:UserLogout|тахсан]] баран өссө киирэн көрөөр, ону сэргэ браузерыҥ бу саайтан cookies диэни ыларга көҥүллүүрүн бэрэбиэркэлээҥ.'''",
        "session_fail_preview_html": "'''Сессия дааннайдарын сүтэрэн кэбиһэн сиэрбэр эн уларытыыгын киллэрбэтэ.'''\n\n''{{SITENAME}} ыраас HTML тылы көҥүллүүр буолан JavaScript туһананнар куһаҕаны оҥоруохтарын сөп, онон эрдэ көрдөрүү араарыллыбыт.''\n\n'''Өскө бу уларытыы туох да куһаҕаны аҕалыа диэбэт буоллаххына хатылаа. Ол сатамматаҕына [[Special:UserLogout|тахсан баран]] өссө киирэн көрөөр.'''",
        "token_suffix_mismatch": "'''Эн уларытыыҥ киирбэтэ, тоҕо диэтэххэ эн бырагырааммаҥ сорох сурук бэлиэлэрин сыыһа көрөр эбит.\nЫстатыйаны буорту гынымаары уларытыыҥ ылыныллыбата.\nИтинник сыыһалар үксүн прокси-сиэрбэрдэри туһаннахха тахсааччылар.'''",
        "edit_form_incomplete": "'''Уларытыы сорҕото сиэрбэргэ тиийбэтэ. Үчүгэйдик сыныйан көр, Эн уларытыыларыҥ туох да омсото суохтар дуо. Онтон өссө боруобалаа.'''",
        "undo-summary-username-hidden": "Кистэммит кыттааччы $1 уларытыытын төннөр",
        "cantcreateaccounttitle": "Саҥа ааты киллэрэр сатаммат",
        "cantcreateaccount-text": "[[User:$3|$3]] кыттааччы бу IP-ттан ('''$1''') саҥа бэлиэтэниини бопто.\n\nБыһаарыыта: $3 - ''$2''",
-       "cantcreateaccount-range-text": "Бу IP-диапазонтан '''$1''' ааты бэлиэтиири [[User:$3|$3]] боппут. Эн IP-аадырыһыҥ ('''$4''') онно киирсэр эбит. \n\nЫйыллыбыт төрүөтэ: $2.",
+       "cantcreateaccount-range-text": "Бу IP-диапазонтан <strong>$1</strong> ааты бэлиэтиири [[User:$3|$3]] боппут. Эн IP-аадырыһыҥ (<strong>$4</strong>) онно киирсэр эбит. \n\nЫйыллыбыт төрүөтэ: $2.",
        "viewpagelogs": "Бу сирэй сурунаалларын көрүү",
        "nohistory": "Бу сирэй историята суох эбит.",
        "currentrev": "Билиҥҥи барыл",
        "mergehistory-empty": "Биир да барыл силлиһэр кыаҕа суох.",
        "mergehistory-done": "$3 {{PLURAL:$3|барыл|барыллар}} $1 биир [[:$2]] барылы кытта силлистилэр.",
        "mergehistory-fail": "Сирэй устуоруйалара кыайан холбоспотулар, өссө биирдэ торумнар бириэмэлэрин уонна сирэй параметрдарын бэрэбиэркэлээ.",
-       "mergehistory-fail-bad-timestamp": "Кэм бэлиэтэ алҕастаах",
-       "mergehistory-fail-invalid-source": "Сирэй төрүтэ алҕастаах",
-       "mergehistory-fail-invalid-dest": "Сыаллаах сирэй алҕастаах",
+       "mergehistory-fail-bad-timestamp": "Кэм бэлиэтэ алҕастаах.",
+       "mergehistory-fail-invalid-source": "Сирэй төрүтэ алҕастаах.",
+       "mergehistory-fail-invalid-dest": "Барыахтаах сирэйиҥ алҕастаах.",
+       "mergehistory-fail-no-change": "Устуоруйа холбоһуутугар ханнык да биэрсийэ холбоһуута буолбата. Баһаалыста сирэйи уонна быстах кэмнээх кэмнэбили өссө төгүл бэрэбиэркэлээ.",
        "mergehistory-fail-permission": "Устуоруйаны холбуурга быраап тиийбэт",
        "mergehistory-fail-self-merge": "Саҕалыыр уонна түмүктүүр сирэйдэриҥ атын буолуохтаахтар",
        "mergehistory-fail-toobig": "Устуоруйаны холбуур табыллыбата, тоҕо диэтэххэ $1  барылга көҥүллэнэр лимииттэн элбэҕи көһөрөр наада эбит.",
        "recentchanges-label-bot": "Бу уларытыыны робот оҥорбут",
        "recentchanges-label-unpatrolled": "Бу уларытыы өссө ботурууллана илик",
        "recentchanges-label-plusminus": "Сирэй кээмэйэ бачча баайтынан уларыйбыт",
-       "recentchanges-legend-heading": "'''Легендата:'''",
+       "recentchanges-legend-heading": "<strong>Легендата:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (өссө көр: [[Special:NewPages|Саҥа сирэйдэр тиһиктэрэ]])",
        "recentchanges-submit": "Көрдөр",
        "rcnotefrom": "Манна {{PLURAL:$5|уларытыы көрдөрүлүннэ|уларытыылар көһүннүлэр}} баччаттан <strong>$3, $4</strong> (баччаттан элбэх көстүбэт <strong>$1</strong>).",
        "apisandbox-fullscreen-tooltip": "Браузеры толорорго песочница паныалын арыйыы.",
        "apisandbox-unfullscreen": "Сирэйи көрдөрүү",
        "apisandbox-unfullscreen-tooltip": "MediaWiki навигационнай сигэтэ тоҕоостоох буоларын туһугар песочница паныалын кыччатыы.",
-       "apisandbox-submit": "Ыйытык оҥоруу.",
-       "apisandbox-reset": "Сот.",
-       "apisandbox-retry": "Хатылаа.",
+       "apisandbox-submit": "Ыйытык оҥоруу",
+       "apisandbox-reset": "Сот",
+       "apisandbox-retry": "Хатылаа",
+       "apisandbox-helpurls": "Көмө сигэлэр",
+       "apisandbox-examples": "Холобурдар",
        "apisandbox-dynamic-parameters": "Дьайыы кээмэйдэрэ.",
        "apisandbox-dynamic-parameters-add-label": "Кэриҥи эбии.",
        "apisandbox-dynamic-parameters-add-placeholder": "Кэриҥ аата.",
+       "apisandbox-dynamic-error-exists": "«$1» диэн ааттаах параметр хайыы үйэ баар эбит.",
        "apisandbox-deprecated-parameters": "Эргэрбит кэриҥнэр.",
-       "apisandbox-submit-invalid-fields-message": "Баһаалыста бэлиэтэммит хонууну көннөр уонна саҥалыыттан саҕалаа.",
+       "apisandbox-fetch-token": "Токены аптамаатынан толоруу",
+       "apisandbox-submit-invalid-fields-title": "Сорҕото алҕастаах",
+       "apisandbox-submit-invalid-fields-message": "Бука диэн бэлиэтэммит хонууну көннөр уонна хаттаан ук.",
        "apisandbox-results": "Түмүк",
+       "apisandbox-sending-request": "API-көрдөбүлү ыытыы…",
+       "apisandbox-loading-results": "API-түмүгүн ылыы…",
        "apisandbox-results-fixtoken": "Токены көннөрөн баран саҥаттан ыыт.",
        "booksources": "Кинигэлэр источниктара",
        "booksources-search-legend": "Кинигэ туһунан көрдөө",
        "rollbackfailed": "Төннөрөргө моһуок үөскээтэ",
        "cantrollback": "Төннөрөр кыах суох; бүтэһик көннөрүүнү оҥорбут киһи бу сирэй соҕотох ааптара буолар.",
        "alreadyrolled": "Бүтэһик [[User:$2|$2]] ([[User talk:$2|Ырытыы]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) оҥорбут [[:$1]] уларытыыларын төннөрөр кыах суох;\nким эрэ атын номнуо бу сирэйи уларыппыт эбэтэр уруккутун төннөрбүт.\n\nКэнники уларытыыны [[User:$3|$3]] ([[User talk:$3|Ырытыы]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) оҥорбут.",
-       "editcomment": "Уларытыыны маннык быһаарбыттар: \"''$1''\".",
+       "editcomment": "Уларытыыны маннык быһаарбыттар: <em>$1</em>.",
        "revertpage": "([[User talk:$2|Ырытыы]]) көннөрүүлэрэ: [[Special:Contributions/$2|$2]] бу торумҥа: [[User:$1|$1]] төннөрүлүннүлэр",
        "revertpage-nouser": "Аата кистэммит киһи уларытыылара суох оҥоһуллан, ыстатыйа бу киһи барылыгар төннөрүлүннэ: {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "$1 көннөрүүлэр бу торумҥа төннөрүлүннүлэр: $2.",
        "tags-deactivate-not-allowed": "\"$1\" тиэги араарар табыллыбат.",
        "tags-deactivate-submit": "араар",
        "tags-apply-no-permission": "Бэйэҥ уларытыыгар уларытыы тиэгин туруорар кыаҕыҥ суох эбит.",
+       "tags-apply-blocked": "Хатана сылдьар кэмҥитигэр көннөрүүлэргитигэр уларытыы бэлиэлэрин туттаргыт табыллыбат.",
        "tags-apply-not-allowed-one": "«$1» тиэги илииннэн туруорар табыллыбат эбит.",
        "tags-apply-not-allowed-multi": "Маннык {{PLURAL:$2|тиэк илиинэн угуллубат|тиэктэр илиинэн угуллубаттар}}: $1",
        "tags-update-no-permission": "Сурунаал тус-туспа торумнарын уонна суруктарын тиэгин эбэр уонна уларытар кыаҕыҥ суох эбит.",
        "log-description-pagelang": "Сирэй тылын талыы сурунаала.",
        "logentry-pagelang-pagelang": "$1 кыттааччы $3 сирэй тылын мантан $4 манныкка $5 {{GENDER:$2|уларыппыт}}.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (холбоммут)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''арахсыбыт''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>арахсыбыт</strong>)",
        "mediastatistics": "Миэдьийэ ыстатыыстыката",
        "mediastatistics-summary": "Киирбит билэ көрүҥүн ыстатыыстыката. Билэ тиһэх эрэ торумун көрдөрөр. Урукку уонна сотуллубут билэлэр ааҕыллыбаттар.",
        "mediastatistics-nbytes": "$1 баайт ($2; $3%)",
        "mediastatistics-header-text": "Тиэкис",
        "mediastatistics-header-executable": "Толоруллар",
        "mediastatistics-header-archive": "Ыгыллыбыт формааттар",
-       "mediastatistics-header-total": "Бары сиидэлэр.",
+       "mediastatistics-header-total": "Бары билэлэр",
        "json-warn-trailing-comma": "JSON иһиттэн $1 ордук соппутуой сотуллубут",
        "json-error-unknown": "JSON моһуогурбут. Алҕас: $1",
        "json-error-depth": "Стек муҥутуур дириҥэ аһарыллыбыт",
index c81d0e5..332e9f6 100644 (file)
@@ -9,7 +9,8 @@
                        "아라",
                        "Via maxima",
                        "Uharteko",
-                       "Taxandru"
+                       "Taxandru",
+                       "Macofe"
                ]
        },
        "tog-underline": "Sutalìnia sos ligòngios",
        "myprivateinfoprotected": "Non tenes su permissu de cambiare is informatziones privadas tuas.",
        "mypreferencesprotected": "Non tenes su permissu de cambiare is preferèntzias tuas.",
        "ns-specialprotected": "Is pàginas ispetziales non podent èssere acontzadas.",
-       "titleprotected": "Sa creatzione de una pàgina cun custu tìtulu est istada arreada dae [[User:$1|$1]].\nSa motivatzione est \"<em>$2</em>\".",
+       "titleprotected": "Sa creatzione de una pàgina cun custu tìtulu est istada arreada dae [[User:$1|$1]].\nSa motivatzione est <em>$2</em>.",
        "invalidtitle-knownnamespace": "Su tìtulu cun nùmene-logu \"$2\" e testu \"$3\" no est bàlidu",
        "invalidtitle-unknownnamespace": "Su tìtulu cun nùmene-logu disconnotu de nùmeru $1 e testu \"$2\" no est bàlidu",
        "exception-nologin": "Non ses intrau",
        "recentchanges-label-bot": "Custa modìfica l'at fata unu bot",
        "recentchanges-label-unpatrolled": "Custu càmbiu no est istadu cumprobadu",
        "recentchanges-label-plusminus": "Su càmbiu de sa mannària de sa pàgina dae su nùmeru de bytes",
-       "recentchanges-legend-heading": "'''Legenda:'''",
+       "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (càstia [[Special:NewPages|is pàginas noas]])",
        "rcnotefrom": "{{PLURAL:$5|Sa chi sighit est sa mudàntzia|Is chi sighint sunt is mudàntzias}} dae <strong>$3, $4</strong> (ammustradas fintzas a <strong>$1</strong>).",
        "rclistfrom": "Ammustra càmbios dae $3 $2",
        "upload-description": "Descritzione de su file",
        "upload-options": "Optziones de carrigamentu",
        "watchthisupload": "Annota custu documentu",
-       "upload-success-subj": "Carrigamentu acabau",
-       "upload-failure-subj": "Problema de carrimentu",
-       "upload-warning-subj": "Avisu de carrigamentu",
        "upload-file-error": "Faddina a intru",
        "backend-fail-notexists": "Su documentu $1 no esistit.",
        "backend-fail-alreadyexists": "Su documentu \"$1\" esistit giai.",
        "notanarticle": "Custa pàgina no est unu artìculu",
        "watchlist-details": "Tenes {{PLURAL:$1|$1 pàgina annotada paris a sa pagina de cuntierra sua|$1 pàginas annotadas paris a is pàginas de cuntierra issoro}}.",
        "wlshowlast": "Ammustra is ùrtimas $1 oras, $2 dies",
-       "watchlistall2": "totu",
        "watchlist-options": "Optziones subra sa lista de pàginas annotadas",
        "watching": "Giunghende a sa watchlist...",
        "unwatching": "Boghende dae sa watchlist...",
index 4fd5ef6..e7363e1 100644 (file)
        "myprivateinfoprotected": "Nun hai lu pirmissu pi canciari li tò nfurmazzioni risirvati.",
        "mypreferencesprotected": "Nun hai lu pirmissu pi canciari li tò prifirenzi.",
        "ns-specialprotected": "Li pàggini ntô namespace {{ns:special}} non ponnu èssiri canciati.",
-       "titleprotected": "La criazzioni di sta pàggina cu stu tìtulu fu bluccata da [[User:$1|$1]].\nLa mutivazzioni è chista: ''$2''.",
+       "titleprotected": "La criazzioni di sta pàggina cu stu tìtulu fu bluccata da [[User:$1|$1]].\nLa mutivazzioni è chista: <em>$2</em>.",
        "filereadonlyerror": "Nun fu pussìbbili canciari lu file \"$1\" pirchì lu repository di file \"$2\" è n mudalità di littura sula.\n\nL'amministraturi chi lu bluccau desi sta spigazzioni: \"$3\".",
        "invalidtitle-knownnamespace": "Tìtulu nun vàlidu cu spazziu dî nomi \"$2\" e testu \"$3\"",
        "invalidtitle-unknownnamespace": "Tìtulu nun vàlidu cu nùmmiru di spazziu dî nomi scanusciutu $1 e testu \"$2\"",
        "undo-summary-username-hidden": "Annullata la virsioni $1 fatta di n'utenti ammucciatu",
        "cantcreateaccounttitle": "Mpussìbbili criari un cuntu",
        "cantcreateaccount-text": "La criazzioni di cunti a pàrtiri di stu nnirizzu IP (<strong>$1</strong>), fu bluccata di [[User:$3|$3]].\n\nLa spigazzioni data di $3 è <em>$2</em>",
-       "cantcreateaccount-range-text": "La criazzioni di cunti a pàrtiri dî nnirizzi IP ntô ntervallu '''$1''', chi cumprenni lu tò nnirizzu IP ('''$4'''), fu bluccata di [[User:$3|$3]].\n\nLa spigazzioni data di $3 è ''$2''",
+       "cantcreateaccount-range-text": "La criazzioni di cunti a pàrtiri dî nnirizzi IP ntô ntervallu <strong>$1</strong>, chi cumprenni lu tò nnirizzu IP (<strong>$4</strong>), fu bluccata di [[User:$3|$3]].\n\nLa spigazzioni data di $3 è <em>$2</em>",
        "viewpagelogs": "Talìa li riggistri di sta pàggina",
        "nohistory": "Nun c'è crunuluggìa dî canciamenti pi sta pàggina.",
        "currentrev": "Virsioni currenti",
        "recentchanges-label-bot": "Stu canciamentu fu fattu di nu bot",
        "recentchanges-label-unpatrolled": "Stu canciamentu ancora nun fu virificatu",
        "recentchanges-label-plusminus": "La grannizza dâ pàggina canciau di stu nùmmiru di byte",
-       "recentchanges-legend-heading": "'''Ligenda:'''",
+       "recentchanges-legend-heading": "<strong>Ligenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (talìa puru [[Special:NewPages|la lista dî pàggini novi]])",
        "rcnotefrom": "Ccassutta {{PLURAL:$5|c'è lu canciamentu|ci sù li canciamenti}} a pàrtiri dû <strong>$3, $4</strong> (nn'havi ammustrati nfina a <strong>$1</strong>).",
        "rclistfrom": "Ammustra li canciamenti novi a pàrtiri dû $3 $2",
        "upload-dialog-button-done": "Finutu",
        "upload-dialog-button-save": "Sarva",
        "upload-dialog-button-upload": "Càrrica",
-       "upload-form-label-select-file": "Scegghi lu file",
        "upload-form-label-infoform-title": "Dittagghî",
        "upload-form-label-infoform-name": "Nomu",
        "upload-form-label-infoform-description": "Discrizzioni",
        "rollbackfailed": "Lu canciu n arreri nun arriniscìu",
        "cantrollback": "Nun si pò annullari lu canciamentu;\nl'ùrtimu cuntribbuturi è l'ùnicu auturi di sta pàggina.",
        "alreadyrolled": "Nun si pò annullari l'ùrtimu canciamentu â pàggina [[:$1]] fattu di [[User:$2|$2]] ([[User talk:$2|discussioni]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nquarchidun'àutru già canciau la pàggina o puru fici nu canciu n'arreri.\n\nL'ùrtimu canciamentu â pàggina fu fattu di [[User:$3|$3]] ([[User talk:$3|discussioni]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Lu riassuntu dû canciamentu era: \"''$1''\".",
+       "editcomment": "Lu riassuntu dû canciamentu era: <em>$1</em>.",
        "revertpage": "Annullati li canciamenti fatti di [[Special:Contributions/$2|$2]] ([[User talk:$2|discussioni]]) nfina a l'ùrtima virsioni di [[User:$1|$1]]",
        "revertpage-nouser": "Annullati li canciamenti fatti di n'utenti ammucciatu nfina a l'ùrtima virsioni di {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Annullati li canciamenti di $1;\nsi turnau a l'ùrtima virsioni di $2.",
        "default-skin-not-found": "Whoops! La peddi pridifinuta dâ tò wiki, mpustata nta <code dir=\"ltr\">$wgDefaultSkin</code> comu <code>$1</code>, nun è dispunìbbili.\n\nA quantu pari la tò stallazzioni ncludi {{PLURAL:$4|la peddi|li peddi}} ccassutta. Talìa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuali: Cunfigurazzioni dî peddi] pi struzzioni supra a comu {{PLURAL:$4|s'attiva|s'attìvanu e comu si scegghî chidda pridifinuta}}.\n\n$2\n\n; Si stallasti MediaWiki ora ora:\n: E' prubbàbbili ca la stallasti dû git, o direttamenti dû còdici surgenti nta quarchi n'àutra manera. Allura sta cosa è privista. Prova e stalla quarchi peddi di [https://www.mediawiki.org/wiki/Category:All_skins l'archiviu dî peddi di mediawiki.org], a na manera di chisti:\n:* Scàrrica [https://www.mediawiki.org/wiki/Download lu prugramma di stallazzioni n furmatu tar], ca cunteni tanti peddi e stinzioni. Poi cupiari e ncuddari la cartella <code>skins/</code> di ddà dintra.\n:* Scàrrica a una a una quarchi peddi ntô furmatu tar di [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Adòpira Git pi scarricari peddi].\n: Lu fari accussì nun avissi a ntirfiriri cû tò dipòsitu git si sî nu sviluppaturi di MediaWiki.\n\n; Si aggiurnasti MediaWiki ora ora:\n: MediaWiki virsioni 1.24 e succissivi nun attìvanu cchiù di manera autumàtica li peddi stallati (talìa [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuali: Scuperta autumàtica dî peddi]). Poi cupiari e ncuddari {{PLURAL:$5|sta riga|sti righi}} nta <code>LocalSettings.php</code> p'attivari {{PLURAL:$5|la peddi ch'è stallata pi com'ora|tutti li peddi ca sunnu stallati pi com'ora}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si canciasti <code>LocalSettings.php</code> ora ora:\n: Cuntrolla ca nun sbagghiasti a scrìviri li noma dî peddi.",
        "default-skin-not-found-no-skins": "Whoops! La peddi pridifinuta dâ tò wiki, mpustata nta <code dir=\"ltr\">$wgDefaultSkin</code> comu <code>$1</code>, nun è dispunìbbili.\n\nNun hai nudda peddi nstallata.\n\n; Si nstallasti o puru aggiurnasti MediaWiki ora ora:\n: È prubbàbbili chi lu nstallasti dû git, o direttamenti dû còdici surgenti nta quarchi àutra manera. Allura sta cosa è privista. MediaWiki virsioni 1.24 e succissivi nun cuntèninu nudda peddi ntô dipòsitu principali. Prova e nstalla quarchi peddi di [https://www.mediawiki.org/wiki/Category:All_skins l'archiviu dî peddi di mediawiki.org], a na manera di chisti:\n:* Scàrrica [https://www.mediawiki.org/wiki/Download lu prugramma di nstallazzioni n furmatu tar], chi cunteni tanti peddi e stinzioni. Poi cupiari e ncuddari la cartella <code>skins/</code> di ddà dintra.\n:* Scàrrica a una a una quarchi peddi n furmatu tar di [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Adòpira Git pi scarricari peddi].\n: Fari accussì nun avissi a ntirfiriri cû tò dipòsitu git si sî nu sviluppaturi di MediaWiki. Talìa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuali: Cunfigurazzioni dî peddi] pi struzzioni supra a comu s'attìvanu li peddi e comu si scegghî chidda pridifinuta.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (attivata)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disattivata''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>disattivata</strong>)",
        "mediastatistics": "Statìstichi supra ê file multimidiali",
        "mediastatistics-summary": "Statìstichi supra ê tipi di file carricati. Si cùntanu sulu li virsioni cchiù novi dî file. Li virsioni vecchî o cancillati vèninu escluduti.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte}} ($2; $3%)",
index 9d1665a..bcba1a5 100644 (file)
        "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 eeditit.",
-       "titleprotected": "This teetle haes been protectit fae bein makit bi [[User:$1|$1]].\nThe groonds fer this ar: ''$2''.",
+       "titleprotected": "This teetle haes been protectit fae bein makit bi [[User:$1|$1]].\nThe groonds fer this ar: <em>$2</em>.",
        "filereadonlyerror": "Canna modify the file \"$1\" cause the file repository \"$2\" is in read-yinly mode.\n\nThe 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\"",
        "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}}\nassociated wi this wab-mail address:\n\n$2\n\n{{PLURAL:$3|This temperie passwaird|Thir temperie passwairds}} will expire in {{PLURAL:$5|yin day|$5 days}}.\nYe 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\nwish 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}}\n($4). The follaein uiser {{PLURAL:$3|accoont is|accoonts ar}} associated wi this wab-mail address:\n\n$2\n\n{{PLURAL:$3|This temperie passwaird|Thir temperie passwairds}} will expire in {{PLURAL:$5|yin day|$5 days}}.\nYe 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: \n$1\n\nTemperie passwaird: \n$2",
-       "passwordreset-emailsent": "Ae passwaird reset wab-mail haes been sent.",
+       "passwordreset-emailsentemail": "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",
        "changeemail": "Chynge wab-mail address",
        "undo-summary-username-hidden": "Ondae reveesion $1 bi ae skauk't uiser",
        "cantcreateaccounttitle": "Canna creaut accoont",
        "cantcreateaccount-text": "Accoont cræftin fae this IP address ('''$1''') haes been blockit bi [[User:$3|$3]].\n\nThe 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]].\n\nThe raison gien bi $3 is ''$2''",
+       "cantcreateaccount-range-text": "Accoont cræftin fae IP addresses in the range <strong>$1</strong>, that inclædes yer IP address (<strong>$4</strong>), haes been blockit bi [[User:$3|$3]].\n\nThe raison gien bi $3 is <em>$2</em>",
        "viewpagelogs": "Leuk at logs fer this page",
        "nohistory": "Thaur's nae eedit histerie fer this page.",
        "currentrev": "Reveesion the nou",
        "prefs-help-prefershttps": "This preeferance will tak effect oan yer nex login.",
        "prefswarning-warning": "Ye'v makit chynges tae yer preferances that'v no been hained yet.\nGif ye leave this page wioot clapin \"$1\" than yer preferances 'll no be updatit.",
        "prefs-tabs-navigation-hint": "Tip: Ye can uise the cair n richt arrae keys tae naveegate atween the tabs in the tabs leet.",
-       "email-address-validity-valid": "Wab-mail address appears tae be valid",
-       "email-address-validity-invalid": "Enter ae valid wab-mail address",
        "userrights": "Uiser richts managemant",
        "userrights-lookup-user": "Manage uiser groops",
        "userrights-user-editname": "Enter ae uisername:",
        "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}}\"",
        "recentchanges-label-bot": "This eedit wis performed bi ae bot",
        "recentchanges-label-unpatrolled": "This eedit haes no bin patrolled yet",
        "recentchanges-label-plusminus": "The page size chynged bi this nummer o bytes",
-       "recentchanges-legend-heading": "'''Legend:'''",
+       "recentchanges-legend-heading": "<strong>Legend:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (see [[Special:NewPages|leet o new pages]] n aw)",
        "rcnotefrom": "Ablo {{PLURAL:$5|is the chynge|ar the chynges}} sin <strong>$3, $4</strong> (up tae <strong>$1</strong> shawn).",
        "rclistfrom": "Shaw new chynges stertin fae $3 $2",
        "watchthisupload": "Watch this file.",
        "filewasdeleted": "Ae file o this name haes been preeveeooslie uplaided n than delytit.\nYe 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.\nPlease 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]:\n\n$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",
        "wlheader-showupdated": "Pages that hae been chynged sin ye last veesitit thaim ar shawn in '''baud'''.",
        "wlnote": "Ablo {{PLURAL:$1|is the laist chynge|ae the laist <strong>$1</strong> chynges}} in the laist {{PLURAL:$2|hoor|<strong>$2</strong> hoors}}, aes o $3, $4.",
        "wlshowlast": "Shaw the hainmaist $1 hoors $2 days",
-       "watchlistall2": "aw",
        "watchlist-options": "Watchleet opties",
        "watching": "Watchin...",
        "unwatching": "Onwatchin...",
        "rollbackfailed": "Rowback failed",
        "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}}]]);\nsome ither bodie haes eidited or rolled back the page awreadie.\n\nThe laist eidit til the page wis bi [[User:$3|$3]] ([[User talk:$3|tauk]]{{int:pipe-separater}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "The eedit ootline wis: \"''$1''\".",
+       "editcomment": "The eedit ootline wis: <em>$1</em>.",
        "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;\nchynged back til the laist reveesion bi $2.",
        "default-skin-not-found": "Whoops! The defaut skin fer yer wiki, defined in <code dir=\"ltr\">$wgDefaultSkin</code> aes <code>$1</code>, is no available.\n\nYer instawation seems tae incluid the follaein skins. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] fer information oan hou tae enable thaim n chuise the defaut.\n\n$2\n\n; Gif ye'v juist instawed MediaWiki:\n: Ye proabablie instawed it fae git, or directlie fae the soorce code uisin some ither method. This is expectie. Gie instawin some skins fae [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory] ae shot, bi:\n:* Dounlaidin the [https://www.mediawiki.org/wiki/Download tarball installer], this comes wi several skins n extensions. Ye can than capie n paste the <code>skins/</code> directerie fae this.\n:* Dounlaidin indiveedual skin tarballs frae [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonin one of the <code>mediawiki/skins/*</code> repositries bi wa o git intae the <code dir=\"ltr\">skins/</code> directerie o yer MediaWiki instawation.\n: Daein this shoudna interfere wi yer git repositrie gif ye'r ae MediaWiki deveeloper.\n\n; Gif ye,v juist upgradit MediaWiki:\n: MediaWiki 1.24 n newer nae langer enables instawed skins autæmateeclie (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Ye can paste the follaein lines intae <code>LocalSettings.php</code> tae enable aw nou installed skins:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Gif ye'v juist modified <code>LocalSettings.php</code>:\n: Double-check the skin names fer typos.",
        "default-skin-not-found-no-skins": "Whoops! The defaut skin fer yer wiki, defined in <code>$wgDefaultSkin</code> aes <code>$1</code>, is no available.\n\nYe'v nae instawed skins.\n\n; Gif ye'v juist instawed or upgradit MediaWiki:\n: Ye probably instawed fae git, or directlie fae the soorce code uisin some ither method. This is expectit. MediaWiki 1.24 n newer disna incluid onie skins in the main repositrie. Gie instawin some skins fae [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory] ae shot, bi:\n:* Dounlaidin the [https://www.mediawiki.org/wiki/Download tarball installer], this comes wi several skins n extensions. Ye can than capie n paste the <code>skins/</code> directerie fae it.\n:* Dounlaidin individual skin tarballs fae [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Cloning yin o the <code>mediawiki/skins/*</code> repositries bi wa o git intae the <code dir=\"ltr\">skins/</code> directerie o yer MediaWiki instawation.\n: Daein this shoudna interfere wi yer git repositrie gif ye'r ae MediaWiki deveeloper. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] fer information oan hou tae enable skins n chuise the defaut.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (enabled)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disablt''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>disablt</strong>)",
        "mediastatistics": "Media stateestics",
        "mediastatistics-summary": "Stateestics aneat uplaided file types. This yinlie incluids the maist recent version o ae file. Auld or delytit versions o files ar excluidit.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
index b9f8739..c6e6e6d 100644 (file)
@@ -5,7 +5,8 @@
                        "아라",
                        "Fayazburiro",
                        "Sindhu",
-                       "Mehtab ahmed"
+                       "Mehtab ahmed",
+                       "Macofe"
                ]
        },
        "tog-underline": "ڳنڍڻي هيٺان لڪير:",
        "october-date": "آڪٽوبر $1",
        "november-date": "نَوِمبر $1",
        "december-date": "ڊسمبر $1",
+       "period-am": "صبح جو",
+       "period-pm": "منجھند کان بعد",
        "pagecategories": "{{PLURAL:$1|زمرو|زمرا}}",
        "category_header": "\"$1\" زمري جا صفحا",
        "subcategories": "ذيلي زمرا",
        "myprivateinfoprotected": "توهان کي پنهنجي ذاتي معلومات سنوارڻ جي اجازت حاصل نہ آهي.",
        "mypreferencesprotected": "توهان جي پنهنجون ترجيحات سنوارڻ جي اجات حاصل ڪانهي.",
        "ns-specialprotected": "خاص صفحا سنواري نٿا سگھجن.",
-       "titleprotected": "[[User:$1|$1]] اهڙي عنوان سان صفحو سرجڻ تي روڪ لڳائي ڇڏي آهي. سبب \"<em>$2</em>\" ڄاڻايو ويو آهي.",
+       "titleprotected": "[[User:$1|$1]] اهڙي عنوان سان صفحو سرجڻ تي روڪ لڳائي ڇڏي آهي. سبب <em>$2</em> ڄاڻايو ويو آهي.",
        "exception-nologin": "لا اِن ٿيل ناهيو",
        "virus-unknownscanner": "اڻ ڄاتل نِس وائرس:",
+       "cannotlogoutnow-title": "ھاڻي لاگ آئوٽ نٿو ڪري سگھجي",
+       "cannotlogoutnow-text": "$1 استعمال ڪرڻ دوران لاگ آئوٽ ڪرڻ ممڪن نہ آھي.",
        "welcomeuser": "ڀلي ڪري آيا، $1!",
        "yourname": "يُوزرنانءُ:",
        "userlogin-yourname": "يوزرنانءُ",
        "remembermypassword": "هن برائوزر تي منهنجي لاگ ان کي (وڌ ۾ وڌ $1 {{PLURAL:$1|ڏينهن}} لاءِ) ياد رکو",
        "userlogin-remembermypassword": "مون کي لاگ اِن رکو",
        "userlogin-signwithsecure": "محفوظ ڳانڍاپو استعمال ڪريو",
+       "cannotloginnow-title": "ھاڻي لاگ ان نٿو ڪري سگھجي",
+       "cannotloginnow-text": "$1 استعمال ڪرڻ دوران لاگ ان ڪرڻ ممڪن نہ آھي.",
        "yourdomainname": "توهان جو ميدان:",
        "password-change-forbidden": "هن وڪِي تي توهان ڳجھو لفظ بدلائي نہ ٿا سگھو.",
        "login": "لاگ اِن",
        "parser-template-loop-warning": "سانچو چڪر لڌو ويو: [[$1]]",
        "cantcreateaccounttitle": "کاتو کولي نہ ٿو سگھجي",
        "cantcreateaccount-text": "هن آءِ پي پتي تان کاتي جي تخليق تي يُوز (<strong>$1</strong>)  [[User:$3|$3]] روڪ لڳائي آهي.\n\n$3 جو ڄاڻايل سبب آهي <em>$2</em> آهي.",
-       "cantcreateaccount-range-text": "آءِپي پتن جي حد '''$1''' ۾ [[User:$3|$3]] کاتو کولڻ تي روڪ لڳائي وئي آهي،$4 جنهن ۾ توهان جو آءِپي پتو بہ ('''$4''')،  پڻ شامل آهي. \n\n$3 ان روڪَ جو سبب \"$2\" ڄاڻايو آهي.",
+       "cantcreateaccount-range-text": "آءِپي پتن جي حد <strong>$1</strong> ۾ [[User:$3|$3]] کاتو کولڻ تي روڪ لڳائي وئي آهي،$4 جنهن ۾ توهان جو آءِپي پتو بہ (<strong>$4</strong>)،  پڻ شامل آهي. \n\n$3 ان روڪَ جو سبب \"$2\" ڄاڻايو آهي.",
        "viewpagelogs": "هن صفحي جا لاگس ڏسو",
        "nohistory": "هن صفحي جي ڪا بہ سوانح نہ آهي.",
        "currentrev": "هاڻوڪو مسودو",
        "recentchanges-label-minor": "هيءُ هڪ معمولي ترميم آهي.",
        "recentchanges-label-bot": "هيءُ ترميم بوٽ عمل ۾ آندي.",
        "recentchanges-label-plusminus": "هن صفحي جي ماپ ۾ هيترين ٻاٺڻين جو ڦير آيو آهي",
-       "recentchanges-legend-heading": "\"ڪنجي.\"",
+       "recentchanges-legend-heading": "<strong>\"ڪنجي.</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (پڻ ڏسو [[Special:NewPages|نون صفحن جي فهرست]])",
        "recentchanges-submit": "ڏيکاريو",
        "rcnotefrom": "هيٺ {{PLURAL:$5|تبديلي آهي|تبديليون آهن}} کان <strong>$3, $4</strong> (تائين <strong>$1</strong> ) ڏيکاريل آهن.",
        "upload-dialog-button-done": "ٿي ويو",
        "upload-dialog-button-save": "سانڍيو",
        "upload-dialog-button-upload": "چاڙهيو",
-       "upload-form-label-select-file": "فائيل چونڊيو",
        "upload-form-label-infoform-title": "تفصيل",
        "upload-form-label-infoform-name": "نالو",
        "upload-form-label-infoform-description": "تشريح",
index fff1eed..3ccb425 100644 (file)
        "cascadeprotected": "In chistha pàgina nò è pussìbiri effettuà mudìfigghi parchí è isthadda incrusa {{PLURAL:$1|i la sighenti pàgina indicadda, ch'è isthadda prutiggidda|i li sighenti pàgini indicaddi, chi so isthaddi prutiggiddi}} chirriendi la prutizioni \"ricussiba\":\n$2",
        "namespaceprotected": "Nò si diponi di li pimmissi nezzessàri pa mudifiggà li pagini di lu tipu di pagina '''$1'''.",
        "ns-specialprotected": "No è pussìbiri mudifiggà li pàgini ippiziari.",
-       "titleprotected": "Chisthu tìturu è isthaddu prutiggiddu da la criazioni da [[User:$1|$1]].\nLa rasgioni frunidda è ''$2''.",
+       "titleprotected": "Chisthu tìturu è isthaddu prutiggiddu da la criazioni da [[User:$1|$1]].\nLa rasgioni frunidda è <em>$2</em>.",
        "logouttext": "'''Iscidda effettuadda.'''\n\nSi pò sighì a usà {{SITENAME}} cumenti utenti anònimu oppuru eseguì una noba intradda, cu' lu matessi innòmu utenti o un'innòmu dibessu.\nZerthuni pàgini pudìani continuà a apparì cumenti si la iscidda nò fùssia avvinudda finaghì nò vèni puridda la mimória cache di lu propriu nabiggadori.",
        "yourname": "Innòmu utenti",
        "yourpassword": "Paràura d'órdhini",
        "watchthisupload": "Aggiungi a l'abbaidaddi ippiziari",
        "filewasdeleted": "Un file cun chist'innòmmu è già isthaddu cariggaddu e canzilladdu. Verifiggà $1 primma di turrà a cariggallu.",
        "filename-bad-prefix": "L'innòmmu di lu file chi sei carrigghendi ischumenza cun '''\"$1\"''', ch'è un'innòmmu nò dischrittibu assignaddu automatiggamenti da li fotocameri. Pa piazieri sciubarà un'innòmmu più dischrittibu pa lu file tóiu.",
-       "upload-success-subj": "Carriggamentu cumpritaddu",
        "upload-proto-error": "Protocollu ibbagliaddu",
        "upload-proto-error-text": "Pa lu cariggamentu \"luntanu\" è nezzessàriu ippizzificà indirizzi ch'ischumenzani cun <code>http://</code> oppuru <code>ftp://</code>.",
        "upload-file-error": "Errori internu",
        "rollbacklink": "turrà che primma",
        "rollbackfailed": "Nò è ridisciddu a turrà che primma",
        "cantrollback": "Impussìbiri annullà li mudìfigghi; l'utenti chi n'è l'autori è l'unicu cuntribudori di la pàgina.",
-       "editcomment": "L'oggettu di la mudìfigga era: \"''$1''\".",
+       "editcomment": "L'oggettu di la mudìfigga era: <em>$1</em>.",
        "rollback-success": "Annulladdi li mudìfigghi di $1; turradda a la versioni prizzidenti di $2.",
        "sessionfailure": "S'è verifigaddu un probrema i' la sissioni ch'identifigga l'intradda; lu sistham nò à eseguiddu lu cumandu imparthiddu pa precauzioni. Turrà a la pàgina prizzidenti cu' lu buttoni \"Indareddu\" di lu proprio nabigaddori, turrà a carriggà la pàgina e riprubà.",
        "protectlogpage": "Rigisthru di prutizioni",
        "movelogpagetext": "Chisthu è l'erencu di li pàgini ippusthaddi.",
        "movereason": "Mutibu",
        "revertmove": "turra che primma",
-       "delete_and_move": "Canzella e ippustha",
        "delete_and_move_text": "==Prigonga di canzilladdura==\n\nLa pàgina di disthinazioni \"[[:$1]]\" isisthi già. Vói canzillalla pa rindì pussìbiri l'ippusthamentu?",
        "delete_and_move_confirm": "Emmo, sobbraischribì la pàgini",
        "delete_and_move_reason": "Canzilladda pa rindì pussìbiri l'ippusthamentu",
index c8d618f..79eccff 100644 (file)
        "destfilename": "Mearrenamma",
        "watchthisupload": "Čuovo dán siiddu",
        "filewasdeleted": "Dán nammasaš fiila lea lasihuvvon ja sihkojuvvon jo ovda. Dárkis $1 ovdalgo joatkat.",
-       "upload-success-subj": "Lasiheapmi lihkosmuvai",
        "upload-proto-error": "Feaila protokollas",
        "upload-file-error": "Stuorra feaila",
        "upload-misc-error": "Feaila",
        "rollbackfailed": "Máhccan ii lihkosmuvvan",
        "cantrollback": "Máhcaheapmi ovddit veršuvdnii ii leat vejolaš, daningo maŋimuš čálli lea siiddu aidna dahkki.",
        "alreadyrolled": "Rievdadusat, maid geavaheaddji [[User:$2|$2]] ([[User talk:$2|ságastallan]]) lea dahkan, siidui $1 ii sáhte sihkkut, daningo geavaheaddji [[User:$3|$3]] ([[User talk:$3|ságastallan]]) lea dahkan ođđa rievdadusaid.",
-       "editcomment": "Rievdadusa čoahkkáigeassu lei: ''$1''.",
+       "editcomment": "Rievdadusa čoahkkáigeassu lei: <em>$1</em>.",
        "revertpage": "Geavaheaddji [[Special:Contributions/$2|$2]] ([[User_talk:$2|ságastallan]]) rievdadusat sihkkojuvvui ja siidu máhcahuvvui veršuvdnii, man geavaheaddji [[User:$1|$1]] lei dahkan.",
        "rollback-success": "Rievdadusat, maid geavaheaddji ”$1” lei dahkan, sihkojuvvui ja artihkal máhcaduvvui veršuvdnii, man geavaheaddji $2 lei dahkan.",
        "protectlogpage": "Suodjálanlogga",
        "movelogpagetext": "Dát lea logga sirdojuvvon siidduin.",
        "movereason": "Sivva",
        "revertmove": "šluhtte",
-       "delete_and_move": "Sihko siiddu ja sirdde",
        "delete_and_move_confirm": "Sihko siiddu",
        "export": "Olggosfievrrit siidduid",
        "export-addcat": "Lasit",
index 9cd841a..2c92aab 100644 (file)
        "myprivateinfoprotected": "War šii nda fondo ka war sutura alhabaroo moɲoo woo barmay.",
        "mypreferencesprotected": "War šii nda fondo ka war ibaayey barmay.",
        "ns-specialprotected": "Moo cerecerantey ši hin ka barmandi.",
-       "titleprotected": "[[User:$1|$1]] na maaɲoo woo jejebu za teeyanoo ga.\nI na daliloo noo \"<em>$2</em>\" ra.",
+       "titleprotected": "[[User:$1|$1]] na maaɲoo woo jejebu za teeyanoo ga.\nI na daliloo noo <em>$2</em> ra.",
        "filereadonlyerror": "Mana hin ka \"$1\" tukoo barmay zama tuku \"$2\" jišidogoo goo cawyan-hinne alhaali ra.\n\nJuwalkaa kaŋ n'a kufal na daliloo woo noo: \"$3\"",
        "invalidtitle-knownnamespace": "Maa laala \"$2\" maadogoo nda \"$3\" hantumoo bande",
        "invalidtitle-unknownnamespace": "Maa laala maadoo hinna \"$1\" šibayante nda \"$2\" hantumoo bande",
        "undo-summary-username-hidden": "Goykaw tugante na $1 fillaa taafeeri",
        "cantcreateaccounttitle": "Ši hin ha kontu tee",
        "cantcreateaccount-text": "[User:$3|$3]] ganji kontu ma tee IP aderesu (<strong>$1</strong>) ga.\n\nDaliloo kaŋ $3 n'a noo ti <em>$2</em>",
-       "cantcreateaccount-range-text": "[[User:$3|$3]] ganji kaŋ kontu ma tee IP aderesey kaŋyaŋ goo '''$1''' laamaa ra ga, sanda war IP aderesoo ('''$4''').\n\nDaliloo kaŋ $3 n'a noo ti ''$2''",
+       "cantcreateaccount-range-text": "[[User:$3|$3]] ganji kaŋ kontu ma tee IP aderesey kaŋyaŋ goo <strong>$1</strong> laamaa ra ga, sanda war IP aderesoo (<strong>$4</strong>).\n\nDaliloo kaŋ $3 n'a noo ti <em>$2</em>",
        "viewpagelogs": "Hantum taarikey guna moɲoo woo se",
        "nohistory": "Barmay taariki kul šii moɲoo woo se.",
        "currentrev": "Filla kokorantaa",
        "right-blockemail": "Ganji goykaw kul ma bataga sanba",
        "right-hideuser": "Goykaw maa foo hode, k'a tugu jamaa se",
        "right-ipblock-exempt": "IP hodeyaney, boŋ-hodeyaney nda ganda hodeyaney koli",
-       "right-proxyunbannable": "Tokore boŋ-hodeyaney koli",
        "right-unblockself": "Boŋ-hodeyan kaa",
        "right-protect": "Jejebuyan alkadarey nda kaŋandi-fasal moo jejebantey barmay",
        "right-editprotected": "Moɲey kaŋ jejebandi sanda \"{{int:protect-level-sysop}}\" fasal",
        "recentchanges-label-bot": "Maršin no ka barmaa woo tee",
        "recentchanges-label-unpatrolled": "Barmaa woo mana kurandi jina",
        "recentchanges-label-plusminus": "Moɲoo azzaatoo barmay nda cebsi hinnaa woo",
-       "recentchanges-legend-heading": "'''Maana:'''",
+       "recentchanges-legend-heading": "<strong>Maana:</strong>",
        "recentchanges-legend-newpage": "{{int:barmay kokorantey-šilbay-moo taaga}} (guna da [[Special:NewPages|moo taagey maašeede]])",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "rcnotefrom": "Ne ganda {{PLURAL:$5|ti barmay|barmawey}} za <strong>$3, $4</strong> (hala <strong>$1</strong> kaŋ ga cebandi).",
        "filewasdeleted": "Maaɲoo woo tukoo bay ka zijandi ka ben nd'a tuusandi woodin bandaa ga.\nWar ga hima ka $1 guna jina hala war ga soobay k'a zijandi taaga. \\",
        "filename-bad-prefix": "Tukoo kaŋ war goo ma zijandi maaɲoo ga šintin nda <strong>\"$1\"</strong>, kaŋ ti ši-šilbay maa kaŋ ga hinna biizaahayey ka doona ka noo ngi boŋše.\nWa maa suuba war tukoo se kaŋ g'a šilbay boryo. \\",
        "filename-prefix-blacklist": " #<!-- zuwoo woo naŋ nga takaa ga --> <pre>\n# Nahawoo ti sanda:\n#   * Haya kaŋ hun \"#\" harfu foo do zuwoo benantaa ga ti daara\n#   * Zuu kaŋ ši koonu kul ti jinkanji tukumaaɲey se kaŋ  hinna biizaahayey g'a dam ngi boŋše\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # kanbe talfon tanayaŋ\nIMG # hankul haya\nJD # Jenoptik\nMGP # Pentax\nPICT # misc.\n #</pre> <!-- zuwoo woo naŋ nga takaa ga -->",
-       "upload-success-subj": "Zijandiyanoo boori",
-       "upload-success-msg": "War zijandiyanpp ka hun [$2] boori. A ga bara ne: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Zijandiyan šenday",
-       "upload-failure-msg": "Šenday foo bangay war zijandiyanoo ka hun [$2] ga:\n\n$1",
-       "upload-warning-subj": "Zijandiyan yaamar",
-       "upload-warning-msg": "Šenday foo bara war zijandiyanoo ka hun [$2] ga. War ga hima ka willi [[Special:Upload/stash/$1|zijandi takaddaa]] ga ka misoo hanse. to.",
        "upload-proto-error": "Sanbayan fondo laala",
        "upload-proto-error-text": "Mooray zijandiyan ga URL kaŋ ga šintin nda <code>http://</code> wala <code>ftp://</code> waažibandi.",
        "upload-file-error": "Kunahere firka",
        "rollbackfailed": "Mana hin ka yee banda \\",
        "cantrollback": "Ši hin la fasalyano willi;\nkanbuzaakaw koraa ti moɲoo woo hantumkaw follokaa",
        "alreadyrolled": "Ši hin ka [[:$1]] barmay koraa kaŋ [[User:$2|$2]] n'a tee willi banda ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\n\n Barmay koraa kaŋ  [[User:$3|$3]] n'a tee moɲoo ga ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Fasal duurandoo: \"''$1''\".",
+       "editcomment": "Fasal duurandoo: <em>$1</em>.",
        "revertpage": "[[User:$1|$1]] na barmawey kaŋ [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]]) n'i tee willi filla koraa ga",
        "revertpage-nouser": "Reverted edits by a hidden user to last revision by {{GENDER:$1|[[User:$1|$1]]}}Goykaw tugante na barmawey willi filla koraa ga kaŋ {{GENDER:$1|[[User:$1|$1]]}} n'i tee",
        "rollback-success": "Barmawey kaŋ $1 n'i willi;\n$2 n'i yeeti filla koraa ga. \\",
        "version-hook-subscribedby": "Maahantumkaa",
        "version-version": "($1)",
        "version-no-ext-name": "[šii nda maa]",
-       "version-svn-revision": "r$1",
        "version-license": "MediaWiki duɲeyan kaddasu",
        "version-ext-license": "Duɲeyan kaddasu",
        "version-ext-colheader-name": "Dobuyan",
        "default-skin-not-found": "Aywaa! Tilasu kuuroo kaŋ tabatandi war wikiyoo se <code dir=\"ltr\">$wgDefaultSkin</code> ra sanda <code>$1</code>, ši bara.\n\nWar sinjiyanoo ga hima ka bara nda kuurawey wey. Guna [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] ka duu alhabar taka kaŋ nda boro ga hin k'i tunandi nda tilasoo suuba.\n\n$2\n\n; Nda war mana gay ka MediaWiki sinji:\n: A ga tee war n'a sinji \"git\" ga, wala war n'a zaa za aššil ašariyaa ga dabari tana foo. Woo goo naataa ra. Ceeci ka kuuruyan sinji [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory] ga, nda:\n:* Zumandiyan [https://www.mediawiki.org/wiki/Download tarball installer], kaŋ ga kaa nda kuuru nda dobuyan booboyaŋ. War ga hin ka <code>kuurey/</code> fooloɲaŋoo berandi nd'a dobu ka hun a ga.\n:* <code>mediawiki/skins/*</code> Jišidogey affoo fillayan \"git\" ra ka huru <code dir=\"ltr\">skins/</code> fooloɲaŋoo ra MediaWiki sinjiyanoo se.\n: Woo teeroo ši ganji war \"git\" jišidogoo nakaši nda war ti MediaWiki cinakaw.\n\n; Nda war mana gay ka MediaWiki taagandi:\n: MediaWiki 1.24 wala dumi taagante ši kuuru sinjnatey tunandi koyne ngi boŋše (guna [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). War ga hin ka zuuwey wey dobu ka <code>LocalSettings.php</code> ra ka kuuru sinjantey kul tunandi:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Nda war mana gay ka <code>LocalSettings.php</code> barmay:\n: Kuuru maaɲey koroši boryo hantum firkawey se.",
        "default-skin-not-found-no-skins": "Ayway! Tilasu kuuroo wikiyoo se, kaŋ tabatandi <code>$wgDefaultSkin</code> ra sanda <code>$1</code>, si bara.\n\nWar ši nda kuuru sinjante kulyaŋ.\n; Nda war mana gay ka MediaWiki sinji wala k'a taagandi:\n: A ga hin ka tee war sinja \"git\" ga, wal'a zaa za aššil ašariyaa do nda dabari tana foo. Woo goo naataa ra. MediaWiki 1.24 nd'itaaga ši nda kuuruyaŋ kul jišidoo beeroo ta. Ceeci ka kuuruyaŋ sinji ka hun  [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory] ga, nda:\n:* Zumandi [https://www.mediawiki.org/wiki/Download tarball installer], kaŋ ga kaa nda kuuru nda dobu booboyaŋ. War ga hin ka <code>kuurey/</code> fooloɲaŋoo berandi ka hun a ga.\n:* <code>mediawiki/Kuurey/*</code> jišidogey fillayan \"git\" ra  ka huru <code dir=\"ltr\">kuurey/</code> fooloɲaŋoo ra war MediaWiki sinjiyanoo se.\n: Woo teeroo ši hima ka war \"git\" jišidogoo goy alhaalo barmay nda war ti MediaWiki cinakaw. Guna [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] ka dii taka kaŋ nda boro ga hin ka kuurey tunandi nda tilasoo suuba.\n\\",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (tunante)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''n' ka kay''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>n' ka kay</strong>)",
        "mediastatistics": "Hẽenandihaya kabu-izey",
        "mediastatistics-summary": "Kabu-izey tuku dumi zijantey ga. Tukoo dumi kul ikokorantaa hinne bara woo ra. Tukey dumi žeeney nda tuusantey faya ka hun i ra.",
        "mediastatistics-nfiles": "$1 ($2%)",
index 406de5a..ec538b1 100644 (file)
@@ -6,7 +6,8 @@
                        "Reedy",
                        "Zordsdavini",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Pabriežtė nūruodas:",
        "translateinterface": "Ka pamainītomiet pargoldīmus vėsūs wiki pruojektus, nauduokat [//translatewiki.net/ translatewiki.net] tėnklapi.",
        "namespaceprotected": "Tamsta netorėt teisiu keistė poslapiu '''$1''' srėtī.",
        "ns-specialprotected": "Specēlė̄jė poslapē nagal būtė keitamė.",
-       "titleprotected": "Nauduotuos [[User:$1|$1]] ožgīnė padėrbtė straipsni tuokio pavadėnėmo.\nDingstės īr „<em>$2</em>“.",
+       "titleprotected": "Nauduotuos [[User:$1|$1]] ožgīnė padėrbtė straipsni tuokio pavadėnėmo.\nDingstės īr <em>$2</em>.",
        "exception-nologin": "Nesat prėsėjongis",
        "exception-nologin-text": "Ka galietomiet ton padėrbtė, Tamstā būtėnā rēk prėsėjongtė.",
        "exception-nologin-text-manual": "Ka galietomiet ton padėrbtė, Tamstā būtėnā rēk $1.",
        "undo-summary": "Pargrōžėnams pakeitėms $1, padėrbts nauduotuojė [[Special:Contributions/$2|$2]] ([[User talk:$2|aptarėms]])",
        "cantcreateaccounttitle": "Nie galam padėrbtė nauduotuojė",
        "cantcreateaccount-text": "Paskīrū kūrėma ėš šėta IP adresa ('''$1''') ožbluokava [[User:$3|$3]].\n\n$3 nuruodīta prīžastis īr ''$2''",
-       "cantcreateaccount-range-text": "Nauduotuoju dėrbėms nug IP adresū '''$1''', terp katrū prėgol ė Tamstas IP adresos ('''$4'''), bova ožgints nauduotuojė [[User:$3|$3]].\n\n$3 ožrašė tuokė dingstiː ''$2''",
+       "cantcreateaccount-range-text": "Nauduotuoju dėrbėms nug IP adresū <strong>$1</strong>, terp katrū prėgol ė Tamstas IP adresos (<strong>$4</strong>), bova ožgints nauduotuojė [[User:$3|$3]].\n\n$3 ožrašė tuokė dingstiː <em>$2</em>",
        "viewpagelogs": "Ruodītė ton poslapė īpatingus notėkėmus",
        "nohistory": "Šėts poslapis netor keitėmu istuorėjės.",
        "currentrev": "Vielībasā atmains",
        "recentchanges-label-bot": "Šėta keitėma padėrba autuomatėnė pruograma",
        "recentchanges-label-unpatrolled": "Ons pakeitėms dā nabova oždabuots",
        "recentchanges-label-plusminus": "Anuo baitu skaitliom pakeists straipsnė apmiers",
-       "recentchanges-legend-heading": "'''Pāiškėnėmā:'''",
+       "recentchanges-legend-heading": "<strong>Pāiškėnėmā:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (dā veiziekat [[Special:NewPages|vielībūju straipsniu sāroša]])",
        "rcnotefrom": "Apatiuo {{PLURAL:$5|ruodoms pakeitėms|ruodomė pakeitėmā}} nug <strong>$3, $4</strong> (ne daugiau kāp <strong>$1</strong> ruodoma īr).",
        "rclistfrom": "Ruodītė vielībus pakeitėmus pradedont nug $3 $2",
        "upload-dialog-button-done": "Padėrbt",
        "upload-dialog-button-save": "Ėšsauguotė",
        "upload-dialog-button-upload": "Ožkrautė",
-       "upload-form-label-select-file": "Rinktėis abruozdieli",
        "upload-form-label-infoform-title": "Aple",
        "upload-form-label-infoform-name": "Pavadėnėms",
        "upload-form-label-infoform-description": "Aprašīms",
        "rollbackfailed": "Atmetėms nasėgava",
        "cantrollback": "Negalėma atmestė redagavėma; paskotinis keitės nauduotuos īr tuo poslapė autorius.",
        "alreadyrolled": "Nė̄šēn otgrōžintė pakeitėma, [[:$1]] katra padėrba [[User:$2|$2]] ([[User talk:$2|aptarėms]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nkažkas ton jau padėrba pėrmiou.\n\nVielībiausā ton poslapė pakeitėms padėrbts [[User:$3|$3]] ([[User talk:$3|aptarėms]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) īr.",
-       "editcomment": "Padėrbėma pāiškėnėms bova: „''$1''“.",
+       "editcomment": "Padėrbėma pāiškėnėms bova: <em>$1</em>.",
        "revertpage": "Atmests [[Special:Contributions/$2|$2]] ([[User talk:$2|aptarėms]]) pakeitėms; sogrōžints atmains, katron padėrba nauduotuos [[User:$1|$1]]",
        "rollback-success": "Atmestė $1 padėrbtė keitėmā; grōžints $2 padėrbts atmains.",
        "sessionfailure": "Atruod ka īr biedū so Tamstas prėsėjongėmo; tas vēksmos bova grōžints kāp atsargoma prėimonė nu sesėjės vuogėma.\nPrašoum mīgtė „atgal“ ėr parkrautė poslapi ėš katruo atiejėt, ė pamieginkėt apent.",
index 63b3726..754df97 100644 (file)
        "myprivateinfoprotected": "Nemate dozvolu da uređujete svoje privatne informacije.",
        "mypreferencesprotected": "Nemate dozvolu da uređujete svoje postavke.",
        "ns-specialprotected": "Posebne stranice se ne mogu uređivati.",
-       "titleprotected": "Naslov stranice je zaštićen od postavljanja od strane korisnika [[User:$1|$1]].\nKao razlog je naveden \"''$2''\".",
+       "titleprotected": "Naslov stranice je zaštićen od postavljanja od strane korisnika [[User:$1|$1]].\nKao razlog je naveden <em>$2</em>.",
        "filereadonlyerror": "Ne mogu da izmenim datoteku „$1“ jer je riznica „$2“ u režimu za čitanje.\n\nAdministrator koji ju je zaključao ponudio je sledeće objašnjenje: „$3“.",
        "invalidtitle-knownnamespace": "Neispravan naslov s imenskim prostorom „$2“ i tekstom „$3“",
        "invalidtitle-unknownnamespace": "Neispravan naslov s imenskim prostorom br. $1 i tekstom „$2“",
        "undo-summary-username-hidden": "Poništi izmjenu $1 od skrivenog korisnika",
        "cantcreateaccounttitle": "Nije moguće napraviti korisnički račun",
        "cantcreateaccount-text": "Pravljenje korisničkog računa sa ove IP adrese ('''$1''') je blokirano od strane [[User:$3|$3]].\n\nRazlog koji je naveo $3 je ''$2''",
-       "cantcreateaccount-range-text": "Stvaranje računa od IP adresa iz pojasa'''$1''', koji uključuje vašu IP adresu ('''$4'''), je blokirao/la [[User:$3|$3]].\n\nRazlog koji je dao/la $3 je ''$2''",
+       "cantcreateaccount-range-text": "Stvaranje računa od IP adresa iz pojasa<strong>$1</strong>, koji uključuje vašu IP adresu (<strong>$4</strong>), je blokirao/la [[User:$3|$3]].\n\nRazlog koji je dao/la $3 je <em>$2</em>",
        "viewpagelogs": "Pogledaj protokole ove stranice",
        "nohistory": "Ne postoji historija izmjena za ovu stranicu.",
        "currentrev": "Trenutna revizija",
        "recentchanges-label-bot": "Ovu je izmjenu učinio bot",
        "recentchanges-label-unpatrolled": "Ova izmjena još nije patrolirana",
        "recentchanges-label-plusminus": "Veličina stranice promijenila se za ovoliko bajtova",
-       "recentchanges-legend-heading": "'''Legenda:'''",
+       "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (također pogledajte [[Special:NewPages|spisak novih stranica]])",
        "rcnotefrom": "Ispod {{PLURAL:$5|je izmjena|su izmjene}} od <strong>$3, $4</strong> (do <strong>$1</strong> prikazano).",
        "rclistfrom": "Prikaži nove poruke od / Прикажи нове поруке од $3 $2",
        "rollbackfailed": "Vraćanje nije uspjelo",
        "cantrollback": "Nemoguće je vratiti izmjenu;\nposljednji kontributor je jedini na ovoj stranici.",
        "alreadyrolled": "Ne može se vratiti posljednja izmjena [[:$1]] od korisnika [[User:$2|$2]] ([[User talk:$2|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); neko drugi je već izmjenio ili vratio članak.\n\nPosljednja izmjena je bila od korisnika [[User:$3|$3]] ([[User talk:$3|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Sažetak izmjene je bio: \"''$1''\".",
+       "editcomment": "Sažetak izmjene je bio: <em>$1</em>.",
        "revertpage": "Vraćene izmjene [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]]) na posljednju izmjenu korisnika [[User:$1|$1]]",
        "revertpage-nouser": "Vraćene izmjene skrivenog korisnika na posljednju reviziju, koju je {{GENDER:$1|napravio|napravila}} [[User:$1|$1]]",
        "rollback-success": "Vraćene su izmjene korisnika $1;\nvraćeno na posljednju verziju koju je snimio $2.",
index 82d7624..0874070 100644 (file)
        "myprivateinfoprotected": "ඔබගේ පෞද්ගලික තොරතුරු සංස්කරණය කිරීමට ඔබට අවසර නොමැත.",
        "mypreferencesprotected": "ඔබගේ අභිරුචීන් සංස්කරණය කිරීමට ඔබට අවසර නොමැත.",
        "ns-specialprotected": "විශේෂ පිටු සංස්කරණය කිරීම සිදු කල නොහැක.",
-       "titleprotected": "මෙම ශීර්ෂ-නාමය තැනීම  [[User:$1|$1]] විසින් වාරණය කොට ඇත.\nමේ සඳහා  ''$2''  හේතුව දක්වා ඇත.",
+       "titleprotected": "මෙම ශීර්ෂ-නාමය තැනීම  [[User:$1|$1]] විසින් වාරණය කොට ඇත.\nමේ සඳහා  <em>$2</em>  හේතුව දක්වා ඇත.",
        "filereadonlyerror": "\"$2\"දත්ත ගොනුවේ කියවීමට පමණක් ඇති ආකාරයට ඇති නිසා \"$1\" ගොනුව සංස්කරණය කල නොහැක.\n\nමෙය අගුලු දැමූ පරිගණක පරිපාලක \"$3\" හේතුව ඉදිරිපත්කර ඇත.",
        "invalidtitle-knownnamespace": "වලංගු නොවන ආශ්රිත නාම අවකාශය ටැග පෙරහන හිමිකම් \"$2\" හා පෙළ \"$3\"",
        "invalidtitle-unknownnamespace": "නොදන්නා ආශ්රිත නාම අවකාශය ටැග පෙරහන අංකය $1 හා පෙළ \"$2\" සමඟ වලංගු නොවන මාතෘකාවක්",
        "right-blockemail": "පරිශීලකයාගේ විද්‍යුත්-තැපැල් යැවීමේ හැකියාව වාරණය කරන්න",
        "right-hideuser": "පරිශීලක නාමයක් වාරණය කරමින්, එය ප්‍රජාව වෙතින් සඟවන්න",
        "right-ipblock-exempt": "අන්තර්ජාල ලිපින වාරණයන්, ස්වයංක්‍රීය-වාරණයන් හා පරාස වාරණයන් මඟ හරින්න",
-       "right-proxyunbannable": "ප්‍රතියුක්තයන්ගේ ස්වයංක්‍රීයව වාරණයන් මඟහරින්න",
        "right-unblockself": "ඔවුන් විසින්ම වාරණයෙන් මුදවීම",
        "right-protect": "ආරක්ෂණ මට්ටම් වෙනස් කරමින් ආරක්ෂිත පිටු සංස්කරණය කරන්න",
        "right-editprotected": "ආරක්ෂිත පිටු සංස්කරණය කරන්න \"{{int:protect-level-sysop}}\"",
        "right-managechangetags": "දත්ත සමුදාය සිට [[Special:Tags|ඇමුණුම්]] නිර්මාණය කර මකා",
        "right-applychangetags": "ඉල්ලුම් කරන්න කෙනෙකුගේ වෙනස්කම් සමග, [[Special:Tags|ඇමිණුම්]]",
        "right-changetags": "තනි තනි අනුවාදයන් සහ ලඝු සටහන් ඇතුළත් කිරීම් මත අත්තනෝමතික [[Special:Tags|ඇමිණුම්]] එකතු හෝ ඉවත්",
+       "grant-editmyoptions": "ඔබගේ අභිරුචියන් සංස්කරණය කරන්න",
        "newuserlogpage": "පරිශීලකයන් තැනීමේ සටහන",
        "newuserlogpagetext": "මෙය පරිශිලකයන් තැනීම පිළිබඳ සටහනකි.",
        "rightslog": "පරිශීලක හිමිකම් සටහන",
        "recentchanges-label-bot": "මෙය රොබෝවක් විසින් කරන ලද සංස්කරණයකි",
        "recentchanges-label-unpatrolled": "මෙම සංස්කරණය තවම විමර්ශනය කර නොමැත",
        "recentchanges-label-plusminus": "පිටුවේ බයිට ගණන මෙපමණකින් වෙනස් වී ඇත",
-       "recentchanges-legend-heading": "'''විස්තරය:'''",
+       "recentchanges-legend-heading": "<strong>විස්තරය:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|නව පිටු ලැයිස්තුව]] ද බලන්න)",
        "recentchanges-submit": "පෙන්වන්න",
        "rcnotefrom": "{{PLURAL:$5|වෙනස්කම|වෙනස්කම්}} න් පසු සිදුවී ඇති <strong>$3, $4</strong> මෙහි පහත දැක්වේ (<strong>$1</strong> ක ප්‍රමාණයක උපරිමයක් පෙන්වා ඇත).",
        "filewasdeleted": "මෙම නම ඇති ගොනුව මින් පෙර උඩුගත කොට අනතුරුව මකාදමා ඇත.\nඑය නැවත උඩුගතකිරීමට උත්සාහ කිරීමට පෙර ඔබ විසින්  $1 පරික්‍ෂා කර බැලිය යුතුය.",
        "filename-bad-prefix": "ඔබ උඩුගත කරන ගොනුවේ නම, සාමාන්‍යයෙන් ස්වයංක්‍රීය ලෙස ඩිජිටල් කැමරා විසින් අනුගත කෙරෙන  අව්‍යාක්‍යාත්මක නමක් වන '''\"$1\"''' යන්නෙන් ආරම්භ වෙයි,.\nවඩාත් ව්‍යාකාත්මක නමක් ඔබගේ ගොනුව සඳහා තෝරාගැනුමට කාරුණික වන්න.",
        "filename-prefix-blacklist": "#<!-- මෙම පේළිය මෙලෙසම පැවතීමට ඉඩදෙන්න --> <pre>\n# වාග් රීතිය පහත පරිදිය:\n#   * \"#\" අක්ෂරයෙහි සිට පේළි අග දක්වා සියල්ල පරිකථනයක් වේ\n#   * හිස්-නොවන සෑම පේළියක්ම ඩිජිටල් කැමරාවලින් ස්වයංක්‍රීයව අනුයුක්ත කෙරෙන සාමාන්‍ය ගොනු නාමයන්හට උපසර්ගයක් වේ\nCIMG # කැසියෝ\nDSC_ # නිකොන්\nDSCF # ෆූජි\nDSCN # නිකොන්\nDUW # සමහරක් ජංගම දුරකථන\nIMG # සාමාන්‍ය\nJD # ජෙනොප්ටික්\nMGP # පෙන්ටැක්ස්\nPICT # විවිධ.\n #</pre> <!-- මෙම පේළිය මෙලෙසම පැවතීමට ඉඩදෙන්න -->",
-       "upload-success-subj": "සාර්ථක උඩුගත කිරීමකි",
-       "upload-success-msg": "[$2]වෙතින් ඔබගේ උඩුගත කිරීම සාර්ථක විය. එය මෙහි ඇත: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "උඩුගත කිරීමේ ගැටළුව",
-       "upload-failure-msg": "ඔබගේ [$2] උඩුගතකිරීම හා බැඳි ගැටළුවක් විය:\n\n$1",
-       "upload-warning-subj": "උඩුගතකිරීම් අවවාදය",
-       "upload-warning-msg": "[$2] වෙතින් ඔබගේ උඩුගතකෙරුමෙහි ගැටළුවක් පැන නැගිනි. මෙම ගැටළුව විසඳනු වස් [[Special:Upload/stash/$1|උඩුගතකෙරුම් ආකෘතිපත්‍රය]] වෙත පෙරළා පිවිසීමට ඔබට හැකියාව ඇත.",
        "upload-proto-error": "සදොස් මූලලේඛය",
        "upload-proto-error-text": "දුරස්ථ උඩුගත කිරීම් සඳහා,  කලාප ලිපිනයන් (URLලයන්)  <code>http://</code> හෝ <code>ftp://</code> යන්නෙන් ආරම්භ විය යුතුයි.",
        "upload-file-error": "අභ්‍යන්තර දෝෂය",
        "upload-dialog-button-done": "සිදුකලා",
        "upload-dialog-button-save": "සුරකින්න",
        "upload-dialog-button-upload": "උඩුගතකරන්න",
-       "upload-form-label-select-file": "ගොනුව තෝරන්න",
        "upload-form-label-infoform-title": "විස්තර",
        "upload-form-label-infoform-name": "නම",
        "upload-form-label-infoform-description": "විස්තරය",
        "foreign-structured-upload-form-label-own-work": "මෙය මගේ ස්වකීය නිර්මාණයකි",
        "foreign-structured-upload-form-label-infoform-categories": "ප්‍රවර්ග",
        "foreign-structured-upload-form-label-infoform-date": "දිනය",
-       "foreign-structured-upload-form-3-label-yes": "ඔව්",
-       "foreign-structured-upload-form-3-label-no": "නැහැ",
        "backend-fail-stream": "$1 ගොනුව ප්‍රවාහ කල නොහැක.",
        "backend-fail-backup": "$1 ගොනුව උපස්ථ කල නොහැක.",
        "backend-fail-notexists": "$1 ගොනුව නොපවතියි.",
        "querypage-disabled": "ක්‍රියාකාරීත්ව හේතූන්මත මෙම විශේෂ පිටුව අක්‍රීය කර ඇත.",
        "apihelp": "API උදවු",
        "apihelp-no-such-module": "ආකෘතිය \"$1\" හමුවුනේ නැත.",
+       "apisandbox": "API වැලිපිල්ල",
+       "apisandbox-api-disabled": "මෙම අඩවියෙහි API අක්‍රීය කොට ඇත.",
+       "apisandbox-intro": "'''මාධ්‍යවිකි API''' සමඟ අත්හදා බැලීම සඳහා මෙම පිටුව භාවිතා කරන්න.\n\tAPI භාවිතය පිලිබඳ වැඩිදුර විස්තර සඳහා  [//www.mediawiki.org/wiki/API:Main_page API ප්‍රලේඛනය] හී ඉල්ලීමක් කරන්න.",
+       "apisandbox-submit": "අයදුමක් සිදු කරන්න",
+       "apisandbox-reset": "හිස් කරන්න",
+       "apisandbox-examples": "නිදසුන",
+       "apisandbox-results": "ප්‍රතිඵලය",
+       "apisandbox-request-url-label": "URL ලිපිනය අයදින්න:",
+       "apisandbox-request-time": "අයැදු කාලය: $1",
        "booksources": "මූලාශ්‍ර පොත්",
        "booksources-search-legend": "ග්‍රන්ථ මූලාශ්‍ර සඳහා ගවේෂණය කරන්න",
        "booksources-isbn": "ISBN:",
        "wlheader-showupdated": "ඔබ විසින් ඒවාට අවසන් වරට පිවිසුනු පසුව වෙනස්ව තිබෙන පිටු <strong>තදකුරු</strong> වලින් පෙන්වා ඇත.",
        "wlnote": "පහත දැක්වෙන්නේ $3, $4 මෙන්, අවසන් {{PLURAL:$2|පැය|පැය '''$2''' }} තුලදී සිදු කෙරී ඇති {{PLURAL:$1|අවසන් වෙනස්වීම්යි |අවසන් වෙනස්වීම්  '''$1''' යි}}.",
        "wlshowlast": "පසුගිය පැය $1 දින $2 පෙන්වන්න",
-       "watchlistall2": "සියල්ල",
        "watchlist-hide": "සඟවන්න",
        "watchlist-submit": "පෙන්වන්න",
        "wlshowhideminor": "සුළු සංස්කරණ",
        "rollbackfailed": "පුනරාවර්තනය අසාර්ථකයි",
        "cantrollback": "සංස්කරණය ප්‍රතිවර්තනය කල නොහැක;\nඅවසන් දායකයා මෙම පිටුවේ එකම කතෘවරයාද වෙයි.",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|සාකච්ඡාව]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) විසින් සිදුකල  [[:$1]] හි අවසාන සංශෝධනය  පුනරාවර්තනය කල නොහැක;\nවෙනත් අයෙකු අතින් පිටුව දැනටමත් සංස්කරණය වී හෝ පුනරාවර්තනය වී ඇත.\n\nපිටුවට අවසන් සංස්කරණය සිදුකොට ඇත්තේ [[User:$3|$3]] ([[User talk:$3|සාකච්ඡාව]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) විසිනි.",
-       "editcomment": "සංස්කරණ සාරාංශය වූයේ: \"''$1''\".",
+       "editcomment": "සංස්කරණ සාරාංශය වූයේ: <em>$1</em>.",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|සාකච්ඡාව]]) ගේ සංස්කරණයන්  [[User:$1|$1]] ගේ අවසන් අනුවාදය වෙත ප්‍රතිවර්තනය කෙරිණි",
        "revertpage-nouser": "(පරිශිලක නම ඉවත් කිරීමෙන්) සංස්කරණයන්  [[User:$1|$1]] මඟින් කළ අවසන් සංශෝධනයට ප්‍රතිවර්තනය කෙරිණි",
        "rollback-success": " $1 විසින් සිදුකල සංස්කරණයන් ප්‍රතිවර්තනය කරන ලදි;\n$2 ගේ අවසන් අනුවාදය වෙතට යළි වෙනස් කරන ලදි .",
        "expand_templates_generate_xml": "XML ව්‍යාකරණ විග්‍රහ රුක පෙන්වන්න",
        "expand_templates_preview": "පෙරදසුන",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (සක්‍රියයි)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''අක්‍රියයි''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>අක්‍රියයි</strong>)",
        "mediastatistics": "මාධ්‍ය සංඛ්‍යාලේඛන",
        "mediastatistics-nbytes": "{{PLURAL:$1|බයිට $1|බයිට් $1}} ($2; $3%)",
        "mediastatistics-table-mimetype": "MIME වර්ගය",
        "special-characters-title-endash": "en තේජස",
        "special-characters-title-emdash": "em තේජස",
        "special-characters-title-minus": "ඍණ ලකුණ",
-       "api-error-blacklisted": "කරුණාකර වෙනස්, විස්තරාත්මක මාතෘකාවක් තෝරන්න."
+       "api-error-blacklisted": "කරුණාකර වෙනස්, විස්තරාත්මක මාතෘකාවක් තෝරන්න.",
+       "randomrootpage": "අහඹු මූල පිටුව"
 }
index bb6d06d..9b85e15 100644 (file)
        "myprivateinfoprotected": "Nemáte povolenie na úpravu vašich súkromných informácií.",
        "mypreferencesprotected": "Nemáte povolenie na úpravu vašich nastavení.",
        "ns-specialprotected": "Stránky v mennom priestore {{ns:special}} nie je možné upravovať.",
-       "titleprotected": "Používateľ [[User:$1|$1]] zabránil vytváraniu stránky s týmto názvom.\nUdaný dôvod: ''$2''.",
+       "titleprotected": "Používateľ [[User:$1|$1]] zabránil vytváraniu stránky s týmto názvom.\nUdaný dôvod: <em>$2</em>.",
        "filereadonlyerror": "Nebolo možné modifikovať súbor „$1“, pretože úložisko „$2“ je momentálne v režime len na čítanie.\n\nSprá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“",
        "accmailtitle": "Heslo bolo odoslané.",
        "accmailtext": "Náhodne vytvorené heslo pre používateľa [[User talk:$1|$1]] bolo poslané na $2. Je možné ho zmeniť na stránke ''[[Special:ChangePassword|zmena hesla]]'' po prihlásení.",
        "newarticle": "(Nový)",
-       "newarticletext": "Sledovali ste odkaz na stránku, ktorá zatiaľ neexistuje.\nStránku vytvoríte tak, že začnete písať do dolného poľa a potom stlačíte tlačidlo „Uložiť stránku“.\n(Viac informácií nájdete na stránkach [$1 Pomocníka]).\nAk ste sa sem dostali nechtiac, iba kliknite na tlačidlo '''späť''' vo svojom prehliadači.",
+       "newarticletext": "Sledovali ste odkaz na stránku, ktorá zatiaľ neexistuje.\nStránku vytvoríte tak, že začnete písať do poľa nižšie (viac informácií nájdete na stránkach [$1 nápovedy]).\nAk ste sa sem dostali nechtiac, kliknite na tlačidlo <strong>späť</strong> vo svojom prehliadači.",
        "anontalkpagetext": "----''Toto je diskusná stránka anonymného používateľa, ktorý nemá vytvorené svoje konto alebo ho nepoužíva.\nPreto musíme na jeho identifikáciu použiť numerickú IP adresu. Je možné, že takúto IP adresu používajú viacerí používatelia.\nAk ste anonymný používateľ a máte pocit, že vám boli adresované irelevantné diskusné príspevky, [[Special:UserLogin/signup|vytvorte si konto]] alebo sa [[Special:UserLogin|prihláste]], aby sa zamedzilo budúcim zámenám s inými anonymnými používateľmi.''",
        "noarticletext": "Na tejto stránke sa momentálne nenachádza žiadny text.\nMôžete [[Special:Search/{{PAGENAME}}|vyhľadávať názov tejto stránky]] v obsahu iných stránok,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} vyhľadávať v súvisiacich záznamoch] alebo [{{fullurl:{{FULLPAGENAME}}|action=edit}} upravovať túto stránku]</span>.",
        "noarticletext-nopermission": "Táto stránka momentálne neobsahuje žiadny text.\nMôžete [[Special:Search/{{PAGENAME}}|hľadať názov tejto stránky]] v texte iných stránok\nalebo <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hľadať v súvisiacich záznamoch]</span>, ale nemáte oprávnenie túto stránku vytvoriť.",
        "undo-summary-username-hidden": "Vrátiť revíziu $1, ktorú vykonal skrytý používateľ",
        "cantcreateaccounttitle": "Nie je možné vytvoriť účet",
        "cantcreateaccount-text": "Zakladanie nových účtov z tejto IP adresy ('''$1''') bolo zablokované {{GENDER:$3|používateľom|používateľkou}} [[User:$3|$3]].\n\nDôvod, ktorý $3 {{GENDER:$3|uviedol|uviedla}}, je: ''$2''",
-       "cantcreateaccount-range-text": "Zakladanie nových účtov z IP adries v rozsahu '''$1''', ktorý zahŕňa aj vašu IP adresu ('''$4'''), bolo zablokované {{GENDER:$3|používateľom|používateľkou}} [[User:$3|$3]].\n\nDôvod, ktorý $3 {{GENDER:$3|uviedol|uviedla}}, je: ''$2''",
+       "cantcreateaccount-range-text": "Zakladanie nových účtov z IP adries v rozsahu <strong>$1</strong>, ktorý zahŕňa aj vašu IP adresu (<strong>$4</strong>), bolo zablokované {{GENDER:$3|používateľom|používateľkou}} [[User:$3|$3]].\n\nDôvod, ktorý $3 {{GENDER:$3|uviedol|uviedla}}, je: <em>$2</em>",
        "viewpagelogs": "Zobraziť záznamy pre túto stránku",
        "nohistory": "Pre túto stránku neexistuje história.",
        "currentrev": "Aktuálna verzia",
        "recentchanges-label-bot": "Túto úpravu vykonal bot",
        "recentchanges-label-unpatrolled": "Táto úprava zatiaľ nebola strážená",
        "recentchanges-label-plusminus": "Veľkosť stránky sa zmenila o toľkoto bajtov",
-       "recentchanges-legend-heading": "'''Legenda:'''",
+       "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (pozri tiež [[Special:NewPages|zoznam nových stránok]])",
        "recentchanges-submit": "Zobraziť",
        "rcnotefrom": "Nižšie {{PLURAL:$5|je zobrazená úprava|sú zobrazené úpravy}} od <strong>$2</strong> (do <strong>$1</strong>).",
        "rollbackfailed": "Rollback neúspešný",
        "cantrollback": "Nie je možné úpravu vrátiť späť, posledný autor je jediný autor tejto stránky.",
        "alreadyrolled": "Nemožno vrátiť späť poslednú úpravu [[:$1]] od [[User:$2|$2]] ([[User talk:$2|Diskusia]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); niekto iný buď upravoval stránku alebo už vrátil úpravy späť.\n\nAutorom poslednej úpravy je [[User:$3|$3]] ([[User talk:$3|Diskusia]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Zhrnutie úpravy bolo: „''$1''“.",
+       "editcomment": "Zhrnutie úpravy bolo: <em>$1</em>.",
        "revertpage": "Posledné úpravy používateľa [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusia]]) vrátené; bola obnovená posledná úprava $1",
        "revertpage-nouser": "Vrátené úpravy od skrytého používateľa na poslednú revíziu od {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Úpravy $1 vrátené; obnovená posledná verzia od $2.",
        "action-pagelang": "meniť jazyk stránky",
        "default-skin-not-found": "Uups! Základná tapeta pre Vašu wiki, popísanú v <code dir=\"ltr\">$wgDefaultSkin</code> ako <code>$1</code>, nie je dostupná. \n\nVaša inštalácia pravdepodobne obsahuje nasledovné tapety. Pozri [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pre viac informácii o ich aktivácii a zvoľte základnú.\n\n$2\n\n; Ak ste MediaWiki len teraz nainštalovali\n; Zrejme ste to nainštalovali z gitu alebo priamo zo zdrojového kódu inou metódou. Je to očakávané. Skúste nainštalovať nejaké tapety z [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory];\n:*Stiahnutím [https://www.mediawiki.org/wiki/Download tarball installer], ktorý ponúka viacero tapiet a rozšírení. Skopírovať a nalepiť možno priamo z <code>skins/</code>.\n:*Klonovanie jednej zo <code>mediawiki/skins/*</code> schránok cez git do <code dir=\"ltr\">skins/</code> priečinku Vašej Media Wiki inštalácie.\n: S existujúcou git schránkou, ak ste vývojár MediaWiki, by nemal byť konflikt.\n\n: Ak ste upgradeovali MediaWiki\n: MediaWiki 1.24 a novšie už tapety automaticky neaktivujú. (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Nasledovný kód môžete skopírovať do <code>LocalSettings.php</code> pre aktivovanie všetkých dostupných tapiet.\n\n<pre dir=\"ltr\">$3</pre>\n\n; Ak ste upravili <code>LocalSettings.php</code>:\n: Skontrolujte chyby.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (povolený)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''zakázaný''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>zakázaný</strong>)",
        "mediastatistics": "Štatistika súborov",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 bajt|$1 bajty|$1 bajtov}} ($2; $3 %)",
        "mediastatistics-table-mimetype": "MIME typ",
index 0878a24..682ee36 100644 (file)
        "myprivateinfoprotected": "Nimate dovoljenja za urejanje svojih zasebnih podatkov.",
        "mypreferencesprotected": "Nimate dovoljenja za urejanje svojih nastavitev.",
        "ns-specialprotected": "Posebnih strani ni mogoče urejati.",
-       "titleprotected": "Uporabnik [[User:$1|$1]] je preprečil ustvarjanje strani s takim naslovom.\nPodani razlog je bil »''$2''«.",
+       "titleprotected": "Uporabnik [[User:$1|$1]] je preprečil ustvarjanje strani s tem naslovom.\nPodan razlog je <em>$2</em>.",
        "filereadonlyerror": "Ne morem spremeniti datoteke »$1«, ker je skladišče datotek »$2« v načinu, ki dovoljuje samo branje.\n\nSistemski skrbnik, ki ga je zaklenil, je podal naslednje pojasnilo: »$3«.",
        "invalidtitle-knownnamespace": "Neveljaven naslov z imenskim prostorom »$2« in besedilom »$3«",
        "invalidtitle-unknownnamespace": "Neveljaven naslov z neznano številko imenskega prostora $1 in besedilom »$2«",
        "nocookieslogin": "{{SITENAME}} za prijavljanje uporabnikov uporablja piškotke.\nKer jih imate onemogočene, vas prosimo, da jih omogočite in se ponovno prijavite.",
        "nocookiesfornew": "Uporabniški račun ni bil ustvarjen, ker nismo mogli potrditi njegovega izvora.\nPoskrbite, da imate omogočene piškotke, osvežite to stran in poskusite znova.",
        "noname": "Niste vnesli veljavnega uporabniškega imena.",
-       "loginsuccesstitle": "Uspešno ste se prijavili",
+       "loginsuccesstitle": "Sedaj ste prijavljeni",
        "loginsuccess": "'''Zdaj ste prijavljeni v {{GRAMMAR:tožilnik|{{SITENAME}}}} kot »$1«.'''",
        "nosuchuser": "Uporabnik z imenom »$1« ne obstaja.\nUporabniška imena so občutljiva na velikost črk.\nPreverite črkovanje ali pa si [[Special:UserLogin/signup|ustvarite nov uporabniški račun]].",
        "nosuchusershort": "Uporabnik z imenom »$1« ne obstaja.\nPreverite črkovanje.",
        "createaccount-title": "Ustvarjanje računa za {{GRAMMAR:tožilnik|{{SITENAME}}}}",
        "createaccount-text": "Nekdo je ustvaril račun $2 na {{GRAMMAR:dajalnik|{{SITENAME}}}} ($4). Geslo za »$2« je »$3«. Priporočljivo je, da se prijavite in spremenite svoje geslo sedaj.\n\nTo sporočilo lahko prezrete, če je bil račun ustvarjen pomotoma.",
        "login-throttled": "Nedavno ste izvedli preveč poskusov prijave.\nProsimo, počakajte $1, preden poskusite znova.",
-       "login-abort-generic": "Vaša prijava ni bila uspešna – Prekinjeno",
+       "login-abort-generic": "Vaša prijava je spodletela – Prekinjeno",
        "login-migrated-generic": "Vaš račun smo preselili in vaše uporabniško ime na tem wikiju ne obstaja več.",
        "loginlanguagelabel": "Jezik: $1",
        "suspicious-userlogout": "Vaša zahteva za odjavo je bila zavrnjena, saj kaže, da je bila poslana iz pokvarjenega brskalnika ali proxyja s predpomnilnikom.",
        "newpassword": "Novo geslo:",
        "retypenew": "Ponovno vpišite geslo:",
        "resetpass_submit": "Nastavi geslo in se prijavi",
-       "changepassword-success": "Vaše geslo je bilo uspešno spremenjeno!",
+       "changepassword-success": "Vaše geslo smo spremenili!",
        "changepassword-throttled": "Nedavno ste izvedli preveč poskusov prijave.\nProsimo, počakajte $1, preden poskusite znova.",
        "botpasswords": "Gesla botov",
        "botpasswords-summary": "<em>Gesla botov</em> omogočajo dostop do uporabniškega računa z API-jem brez uporabe glavnih poverilnic računa za prijavo. Omejite lahko uporabniške pravice, ki so na voljo pri prijavi z geslom bota.\n\nČe ne veste, zakaj bi to morda uporabljali, tega najverjetneje ne potrebujete. Nihče vas ne sme prositi, da mu zgenerirate in daste geslo bota.",
        "botpasswords-insert-failed": "Dodajanje imena bota »$1« ni uspelo. Ste ga že dodali?",
        "botpasswords-update-failed": "Posodobitev imena bota »$1« je spodletelo. Ste ga izbrisali?",
        "botpasswords-created-title": "Ustvarili smo geslo bota",
-       "botpasswords-created-body": "Uspešno smo ustvarili geslo bota »$1«.",
+       "botpasswords-created-body": "Ustvarili smo geslo bota »$1« uporabnika »$2«.",
        "botpasswords-updated-title": "Posodobili smo geslo bota",
-       "botpasswords-updated-body": "Uspešno smo posodobili geslo bota »$1«.",
+       "botpasswords-updated-body": "Posodobili smo geslo bota »$1« uporabnika »$2«.",
        "botpasswords-deleted-title": "Izbrisali smo geslo bota",
-       "botpasswords-deleted-body": "Uspešno smo izbrisali geslo bota »$1«.",
+       "botpasswords-deleted-body": "Izbrisali smo geslo bota »$1« uporabnika »$2«.",
        "botpasswords-newpassword": "Novo geslo za prijavo z imenom <strong>$1</strong> je <strong>$2</strong>. <em>Prosimo, zabeležite si to za uporabo v prihodnje.</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider ni na voljo.",
        "botpasswords-restriction-failed": "Omejitve gesla bota preprečujejo to prijavo.",
        "resetpass-no-info": "Za neposreden dostop do te strani morate biti prijavljeni.",
        "resetpass-submit-loggedin": "Spremenite geslo",
        "resetpass-submit-cancel": "Prekliči",
-       "resetpass-wrong-oldpass": "Neveljavno začano ali trenutno geslo.\nMorda ste že uspešno spremenili geslo ali pa ste zahtevali novo začasno geslo.",
+       "resetpass-wrong-oldpass": "Neveljavno začasno ali trenutno geslo.\nMorda ste že 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:",
        "newarticle": "(Nov)",
        "newarticletext": "Sledili ste povezavi na stran, ki še ne obstaja.\nDa bi stran ustvarili, vnesite v spodnji obrazec besedilo\n(za več informacij glej [$1 pomoč]).\nČe ste sem prišli po pomoti, v svojem brskalniku kliknite gumb ''Nazaj''.",
        "anontalkpagetext": "---- ''To je pogovorna stran brezimnega uporabnika, ki si še ni ustvaril računa ali pa ga ne uporablja. Zaradi tega moramo uporabiti IP-naslov za njegovo/njeno ugotavljanje istovetnosti. Takšen IP-naslov si lahko deli več uporabnikov. Če ste brezimni uporabnik in menite, da so nepomembne pripombe namenjene vam, prosimo [[Special:UserLogin|ustvarite račun]] ali pa se [[Special:UserLogin/signup|vpišite]], da preprečite zmedo z drugimi nepodpisanimi uporabniki.''",
-       "noarticletext": "Na tej strani ni trenutno nobenega besedila. Naslov strani lahko poskusite [[Special:Search/{{PAGENAME}}|poiskati]] na drugih straneh, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} v dnevniških zapisih] ali pa [{{fullurl:{{FULLPAGENAME}}|action=edit}} stran uredite]</span>.",
+       "noarticletext": "Na tej strani ni trenutno nobenega besedila. Naslov strani lahko poskusite [[Special:Search/{{PAGENAME}}|poiskati]] na drugih straneh, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} v dnevniških zapisih] ali pa [{{fullurl:{{FULLPAGENAME}}|action=edit}} stran ustvarite]</span>.",
        "noarticletext-nopermission": "Na strani trenutno ni nobenega besedila.\nLahko poskusite [[Special:Search/{{PAGENAME}}|poiskati naslov strani]] na drugih straneh ali <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} v povezanih dnevniških zapisih]</span>, vendar za ustvarjanje strani nimate zadostnih dovoljenj.",
        "missing-revision": "Redakcija št. $1 strani »{{FULLPAGENAME}}« ne obstaja.\n\nPo navadi se to zgodi, ko sledite zastareli povezavi na zgodovino strani, ki jo je nekdo izbrisal.\nPodrobnosti lahko najdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} dnevniku brisanja].",
        "userpage-userdoesnotexist": "Uporabniški račun »<nowiki>$1</nowiki>« ni registriran.\nProsimo preverite, ali res želite ustvariti/urediti to stran.",
        "undo-summary-username-hidden": "Razveljavi redakcijo $1 skritega uporabnika",
        "cantcreateaccounttitle": "Računa ni moč ustvariti",
        "cantcreateaccount-text": "Registracije z IP-naslova ('''$1''') je administrator(ka) [[User:$3|$3]] blokiral(a).\n\nRazlog, ki ga je $3 podal(a), je ''$2''.",
-       "cantcreateaccount-range-text": "Ustvarjanje računov z IP-naslovov v območju '''$1''', ki vključuje vaš IP-naslov ('''$4'''), je blokiral(-a) [[User:$3|$3]].\n\nRazlog, ki ga je podal(-a) $3, je ''$2''.",
+       "cantcreateaccount-range-text": "Ustvarjanje računov z IP-naslovov v območju <strong>$1</strong>, ki vključuje vaš IP-naslov (<strong>$4</strong>), je blokiral(-a) [[User:$3|$3]].\n\nRazlog, ki ga je podal(-a) $3, je <em>$2</em>.",
        "viewpagelogs": "Poglej dnevniške zapise o strani",
        "nohistory": "Stran nima zgodovine urejanja.",
        "currentrev": "Trenutna redakcija",
        "revdelete-unsuppress": "Odpraviti omejitve na obnovljenih redakcijah.",
        "revdelete-log": "Razlog:",
        "revdelete-submit": "Uporabi za {{PLURAL:$1|izbrano redakcijo|izbrani redakciji|izbrane redakcije}}",
-       "revdelete-success": "'''Vidnost redakcije je bila uspešno nastavljena.'''",
+       "revdelete-success": "Vidnost redakcije smo posodobili.",
        "revdelete-failure": "'''Vidnost redakcije ni bilo mogoče nastaviti:'''\n$1",
-       "logdelete-success": "'''Vidnost dnevnika je bila uspešno nastavljena.'''",
+       "logdelete-success": "Vidnost dnevnika smo nastavili.",
        "logdelete-failure": "'''Vidnost dnevnika ne more biti nastavljena!:'''\n$1",
        "revdel-restore": "Spremeni vidnost",
        "pagehist": "Zgodovina strani",
        "userrights-changeable-col": "Skupine, ki jih lahko spremenite",
        "userrights-unchangeable-col": "Skupine, ki jih ne morete spremeniti",
        "userrights-conflict": "Spor sprememb uporabniških pravic! Prosimo, da pregledate in potrdite svoje spremembe.",
-       "userrights-removed-self": "Uspešno ste odstranili svoje pravice. Tako sedaj ne morete več dostopati do te strani.",
+       "userrights-removed-self": "Odstranili ste svoje pravice. Tako sedaj ne morete več dostopati do te strani.",
        "group": "Skupina:",
        "group-user": "Uporabniki",
        "group-autoconfirmed": "Samodejno potrjeni uporabniki",
        "recentchanges-label-bot": "urejanje je izvedel bot",
        "recentchanges-label-unpatrolled": "Urejanje še ni bilo pregledano",
        "recentchanges-label-plusminus": "uporabnik je velikost strani spremenil za tolikšno število bajtov",
-       "recentchanges-legend-heading": "'''Legenda:'''",
+       "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (glej tudi [[Special:NewPages|seznam novih strani]])",
        "recentchanges-submit": "Prikaži",
        "rcnotefrom": "{{PLURAL:$5|Navedena je sprememba|Navedeni sta spremembi|Navedene so spremembe}} od <strong>$3 $4</strong> dalje (prikazujem jih do <strong>$1</strong>).",
        "recentchangeslinked-page": "Naslov strani:",
        "recentchangeslinked-to": "Prikaži spremembe na določeno stran povezanih strani",
        "recentchanges-page-added-to-category": "[[:$1]] dodano v kategorijo",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] in $2 {{PLURAL:$2|stran dodana|strani dodani|strani dodane|strani dodanih}} v kategorijo",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] in [[Special:WhatLinksHere/$1|$2 {{PLURAL:$2|stran|strani}}]] {{PLURAL:$2|dodana|dodani|dodane|dodanih}} v kategorijo",
        "recentchanges-page-removed-from-category": "[[:$1]] odstranjeno iz kategorije",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] in $2 {{PLURAL:$2|stran odstranjena|strani odstranjeni|strani odstranjene|strani odstranjenih}} iz kategorije",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] in [[Special:WhatLinksHere/$1|$2 {{PLURAL:$2|stran|strani}}]] {{PLURAL:$2|odstranjena|odstranjeni|odstranjene|odstranjenih}} iz kategorije",
        "autochange-username": "Samodejna sprememba MediaWiki",
        "upload": "Naloži datoteko",
        "uploadbtn": "Naloži datoteko",
        "backend-fail-read": "Ne morem brati datoteke $1.",
        "backend-fail-create": "Ne morem zapisati datoteke $1.",
        "backend-fail-maxsize": "Ne morem zapisati datoteke $1, ker je večja od $2 {{PLURAL:$2|bajta|bajtov}}.",
-       "backend-fail-readonly": "Skladiščno zaledje »$1« je trenutno označeno samo za branje. Podan razlog je: »$2«",
+       "backend-fail-readonly": "Skladiščno zaledje »$1« je trenutno označeno samo za branje. Podan razlog je: <em>$2</em>",
        "backend-fail-synced": "Datoteka »$1« je v neskladnem stanju z notranjimi skladiščnimi zaledji",
        "backend-fail-connect": "Ne morem se povezati s skladiščnim zaledjem »$1«.",
        "backend-fail-internal": "V skladiščnem zaledju »$1« je prišlo do neznane napake.",
        "uploadstash-summary": "Ta stran omogoča dostop do datotek, ki so naložene (oziroma v postopku nalaganja), vendar še niso objavljene na wikiju. Te datoteke so vidne samo uporabniku, ki jih je naložil, in nikomur drugemu.",
        "uploadstash-clear": "Počisti skrite datoteke",
        "uploadstash-nofiles": "Nimate skritih datotek.",
-       "uploadstash-badtoken": "Izvedba dejanja ni bila uspešna, morda zaradi izteklih poverilnic za urejanje. Poskusite znova.",
-       "uploadstash-errclear": "Čiščenje datotek ni bilo uspešno.",
+       "uploadstash-badtoken": "Izvedba dejanja je spodletela. Morda zaradi izteklih poverilnic za urejanje. Prosimo, poskusite znova.",
+       "uploadstash-errclear": "Čiščenje datotek je spodletelo.",
        "uploadstash-refresh": "Osveži seznam datotek",
        "invalid-chunk-offset": "Neveljaven odmik delčka",
        "img-auth-accessdenied": "Dostop zavrnjen",
        "delete-toobig": "Ta stran ima obsežno zgodovino urejanja, tj. čez $1 {{PLURAL:$1|redakcijo|redakciji|redakcije|redakcij}}.\nIzbris takšnih strani je bil omejen v izogib neželenim motnjam {{GRAMMAR:dative|{{SITENAME}}}}.",
        "delete-warning-toobig": "Ta stran ima obsežno zgodovino urejanja, tj. čez $1 {{PLURAL:$1|redakcijo|redakciji|redakcije|redakcij}}.\nNjeno brisanje lahko zmoti obratovanje zbirke podatkov {{GRAMMAR:dative|{{SITENAME}}}};\nnadaljujte s previdnostjo.",
        "deleteprotected": "Strani ne morete izbrisati, ker jo je nekdo zaščitil.",
-       "deleting-backlinks-warning": "'''Opozorilo:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Druge strani]] se povezujejo na ali vključujejo stran, ki jo nameravate izbrisati.",
+       "deleting-backlinks-warning": "<strong>Opozorilo:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|Druge strani]] se povezujejo na ali vključujejo stran, ki jo nameravate izbrisati.",
        "rollback": "Vrni spremembe",
        "rollbacklink": "vrni",
        "rollbacklinkcount": "vrni $1 {{PLURAL:$1|urejanje|urejanji|urejanja|urejanj}}",
        "rollbackfailed": "Vrnitev ni uspela",
        "cantrollback": "Urejanja ne morem vrniti; zadnji urejevalec je hkrati edini.",
        "alreadyrolled": "Zadnje spremembe [[:$1]] uporabnika [[User:$2|$2]] ([[User talk:$2|pogovor]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ne morem vrniti;\nstran je spremenil ali vrnil že nekdo drug.\n\nZadnji je stran urejal uporabnik [[User:$3|$3]] ([[User talk:$3|pogovor]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Povzetek urejanja je bil: »''$1''«.",
+       "editcomment": "Povzetek urejanja je bil: <em>$1</em>.",
        "revertpage": "vrnitev sprememb uporabnika [[Special:Contributions/$2|$2]] ([[User talk:$2|pogovor]]) na zadnje urejanje uporabnika [[User:$1|$1]]",
        "revertpage-nouser": "vrnitev sprememb skritega uporabnika na zadnjo redakcijo {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Razveljavljene spremembe uporabnika $1;\nvrnjeno na urejanje uporabnika $2.",
        "changecontentmodel-title-label": "Naslov strani",
        "changecontentmodel-model-label": "Novi model vsebine",
        "changecontentmodel-reason-label": "Razlog:",
+       "changecontentmodel-submit": "Spremeni",
        "changecontentmodel-success-title": "Spremenili smo model vsebine",
        "changecontentmodel-success-text": "Spremenili smo vrsto vsebine [[:$1]].",
        "changecontentmodel-cannot-convert": "Vsebine na [[:$1]] ni mogoče pretvoriti v vrsto $2.",
        "changecontentmodel-nodirectediting": "Model vsebine $1 ne podpira neposrednega urejanja",
        "log-name-contentmodel": "Dnevnik sprememb modela vsebine",
        "log-description-contentmodel": "Dogodki, povezani z modeli vsebin strani",
+       "logentry-contentmodel-new": "$1 je {{GENDER:$2|ustvaril|ustvarila|ustvaril(-a)}} stran $3 z neprivzetim modelom vsebine »$5«",
        "logentry-contentmodel-change": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} model vsebine strani $3 z »$4« na »$5«",
        "logentry-contentmodel-change-revertlink": "vrni",
        "logentry-contentmodel-change-revert": "vrni",
        "exif-orientation-8": "Zasukano za 90° v desno",
        "exif-planarconfiguration-1": "grudast format",
        "exif-planarconfiguration-2": "ravninski format",
-       "exif-xyresolution-i": "$1 dpi ({{PLURAL:$1|točka/palec|točki/palec|točke/palec|točk/palec|točk/palec}})",
-       "exif-xyresolution-c": "$1 dpc ({{PLURAL:$1|točka/centimeter|točki/centimeter|točke/centimeter|točk/centimeter|točk/centimeter}})",
+       "exif-xyresolution-i": "$1 dpi ({{PLURAL:$1|točka/palec|točki/palec|točke/palec|točk/palec}})",
+       "exif-xyresolution-c": "$1 dpc ({{PLURAL:$1|točka/centimeter|točki/centimeter|točke/centimeter|točk/centimeter}})",
        "exif-colorspace-65535": "Neumerjeno",
        "exif-componentsconfiguration-0": "ne obstaja",
        "exif-exposureprogram-0": "Ni določen",
        "tags-delete-not-allowed": "Oznak, ki jih določijo razširitve, ni mogoče izbrisati, razen če razširitve to izrecno dovolijo.",
        "tags-delete-not-found": "Oznaka »$1« ne obstaja.",
        "tags-delete-too-many-uses": "Oznaka »$1« je uporabljena pri več kot $2 {{PLURAL:$2|redakciji|redakcijah}}, kar pomeni, da je ni mogoče izbrisati.",
-       "tags-delete-warnings-after-delete": "Oznako »$1« smo uspešno izbrisali, vendar smo naleteli na {{PLURAL:$2|naslednjo težavo|naslednji težavi|naslednje težave}}:",
+       "tags-delete-warnings-after-delete": "Oznako »$1« smo izbrisali, vendar smo naleteli na {{PLURAL:$2|naslednjo težavo|naslednji težavi|naslednje težave}}:",
        "tags-activate-title": "Aktiviraj oznako",
        "tags-activate-question": "Aktivirali boste oznako »$1«.",
        "tags-activate-reason": "Razlog:",
        "tags-edit-revision-legend": "Dodaj ali odstrani oznake {{PLURAL:$1|redakcije|obeh $1 redakcij|vseh $1 redakcij}}",
        "tags-edit-logentry-legend": "Dodaj ali odstrani oznake {{PLURAL:$1|dnevniškega vnosa|obeh $1 dnevniških vnosov|vseh $1 dnevniških vnosov}}",
        "tags-edit-existing-tags": "Obstoječe oznake:",
-       "tags-edit-existing-tags-none": "''Nobena''",
+       "tags-edit-existing-tags-none": "<em>Nobena</em>",
        "tags-edit-new-tags": "Nove oznake:",
        "tags-edit-add": "Dodaj oznake:",
        "tags-edit-remove": "Odstrani oznake:",
        "tags-edit-reason": "Razlog:",
        "tags-edit-revision-submit": "Uveljavi spremembe na {{PLURAL:$1|redakciji|$1 redakcijah}}",
        "tags-edit-logentry-submit": "Uveljavi spremembe na {{PLURAL:$1|dnevniškem vnosu|$1 dnevniških vnosih}}",
-       "tags-edit-success": "Spremembe smo uspešno uveljavili.",
+       "tags-edit-success": "Spremembe smo uveljavili.",
        "tags-edit-failure": "Sprememb nismo mogli uveljaviti:\n$1",
        "tags-edit-nooldid-title": "Neveljavna ciljna redakcija",
        "tags-edit-nooldid-text": "Bodisi niste navedli ciljne redakcije, na kateri želite izvesti dejanje, bodisi navedena redakcija ne obstaja.",
        "default-skin-not-found": "Ups! Privzeta koža vašega wikija, določena v <code dir=\"ltr\">$wgDefaultSkin</code> kot <code>$1</code>, ni na voljo.\n\nKot kaže, vaša namestitev vsebuje {{PLURAL:$4|kožo, navedeno|2=koži, navedeni|3=kože, navedene|4=kože, navedene|kož, navedenih}} spodaj. Oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priročnik: Konfiguracija kož] za več informacij, kako {{PLURAL:$4|jo omogočiti in nastaviti kot privzeto|ju omogočiti in nastaviti kot privzeti|jih omogočiti in nastaviti kot privzete}}.\n\n$2\n\n; Če ste MediaWiki pravkar namestili:\n: Verjetno ste ga namestili z git ali neposredno iz izvorne kode na kakšen drug način. To je pričakovano. Poskusite namestiti nekaj kož z [https://www.mediawiki.org/wiki/Category:All_skins imenika kož mediawiki.org] tako:\n:* Prenesite [https://www.mediawiki.org/wiki/Download namestitveni program tarball], ki vsebuje nekaj kož in razširitev. Iz njega lahko kopirate in prilepite mapo <code>skins/</code>.\n:* Prenesite tarballe posamezne kož z [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Uporaba Gita za prenos kož].\n: Če ste razvijalec MediaWiki, to ne sme poseči v vaš repozitorij git.\n\n; Če ste MediaWiki pravkar posodobili:\n: MediaWiki 1.24 in novejši nameščenih kož več ne omogočijo samodejno (oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Priročnik: Samodejno odkrivanje kož]). V <code>LocalSettings.php</code> lahko prilepite {{PLURAL:$5|naslednjo vrstico|naslednji vrstici|naslednje vrstice}}, da omogočite {{PLURAL:$4|nameščeno kožo|2=nameščeni koži|3=nameščene kože|4=nameščene kože|nameščenih kož}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Če ste pravkar spremenili <code>LocalSettings.php</code>:\n: Ponovno preverite imena kož, če ste se morda zatipkali.",
        "default-skin-not-found-no-skins": "Ups! Privzeta koža vašega wikija, določena v <code dir=\"ltr\">$wgDefaultSkin</code> kot <code>$1</code>, ni na voljo.\n\nNimate nameščenih kož.\n\n; Če ste MediaWiki pravkar namestili ali posodobili:\n: Verjetno ste ga namestili z git ali neposredno iz izvorne kode na kakšen drug način. To je pričakovano. MediaWiki 1.24 in novejši nimajo vključene nobene kože v glavnem repozitoriju. Poskusite namestiti nekaj kož z [https://www.mediawiki.org/wiki/Category:All_skins imenika kož mediawiki.org] tako:\n:* Prenesite [https://www.mediawiki.org/wiki/Download namestitveni program tarball], ki vsebuje nekaj kož in razširitev. Iz njega lahko kopirate in prilepite mapo <code dir=\"ltr\">skins/</code>.\n:* Prenesite tarballe posamezne kož z [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Uporaba Gita za prenos kož].\n: Če ste razvijalec MediaWiki, to ne sme poseči v vaš repozitorij git. Oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priročnik: Konfiguracija kož] za več informacij, kako jih omogočiti in nastaviti kot privzete.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (omogočeno)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''onemogočeno''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>onemogočeno</strong>)",
        "mediastatistics": "Statistika predstavnosti",
        "mediastatistics-summary": "Statistika o naloženih vrstah datotek. To vključuje samo najnovejše različice datotek. Stare in izbrisane različice niso vključene.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 bajt|$1 bajta|$1 bajti|$1 bajtov}} ($2; $3 %)",
-       "mediastatistics-bytespertype": "Skupna velikost datoteke za ta razdelek: $1 {{PLURAL:$1|bajt|bajta|bajte|bajtov}} ($2; $3 %).",
-       "mediastatistics-allbytes": "Skupna velikost datoteke za vse datoteke: $1 {{PLURAL:$1|bajt|bajta|bajte|bajtov}} ($2).",
+       "mediastatistics-bytespertype": "Skupna velikost datotek v tem razdelku: $1 {{PLURAL:$1|bajt|bajta|bajte|bajtov}} ($2; $3 %).",
+       "mediastatistics-allbytes": "Skupna velikost vseh datotek: $1 {{PLURAL:$1|bajt|bajta|bajte|bajtov}} ($2).",
        "mediastatistics-table-mimetype": "Vrsta MIME",
        "mediastatistics-table-extensions": "Možne razširitve",
        "mediastatistics-table-count": "Število datotek",
        "mediastatistics-header-text": "Besedilno",
        "mediastatistics-header-executable": "Izvedljive datoteke",
        "mediastatistics-header-archive": "Stisnjene oblike",
-       "mediastatistics-header-total": "Vseh datotek",
+       "mediastatistics-header-total": "Vse datoteke",
        "json-warn-trailing-comma": "Iz JSON-a smo odstranili $1 {{PLURAL:$1|končno vejico|končni vejici|končne vejice|končnih vejic}}",
        "json-error-unknown": "Naleteli smo na težavo z JSON-om. Napaka: $1",
        "json-error-depth": "Presegli smo največjo globino sklada",
index cc15fe9..05dd455 100644 (file)
@@ -14,7 +14,8 @@
                        "The Evil IP address",
                        "Timpul",
                        "Äberlausitzer",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Verknipfonga unterstreeicha:",
        "cascadeprotected": "Diese Seite ies zur Beoarbeetung gesperrt. Se ies ei de {{PLURAL:$1|fulgende Seite|fulgenda Seita}} eengebunda, de mittels der Kaskadensperroption geschitzt {{PLURAL:$1|ies|sein}}:\n$2",
        "namespaceprotected": "Du host kenne Berechtigung, de Seite eim '''$1'''-Noamensraum zu bearbta.",
        "ns-specialprotected": "Spezialseyta kinna nicht beoarbeet warn.",
-       "titleprotected": "Enne Seite miet dam della Noama koan nicht oageläat warn.\nDe Sperre wurde durch [[User:$1|$1]] miet der Begrindung ''„$2“'' eigerichtet.",
+       "titleprotected": "Enne Seite miet dam della Noama koan nicht oageläat warn.\nDe Sperre wurde durch [[User:$1|$1]] miet der Begrindung <em>$2</em> eigerichtet.",
        "virus-badscanner": "Fahlerhofte Konfiguration: unbekoannter Virenskänner: ''$1''",
        "virus-scanfailed": "Skän fahlgeschloan (Kode $1)",
        "virus-unknownscanner": "Unbekoannter Virenskänner:",
        "right-blockemail": "Nutzer oam Versenda vu E-Mails hindern",
        "right-hideuser": "Nutzernoama sperra und verberga",
        "right-ipblock-exempt": "Ausnahm vu IP-Sperra, Autoblocks und Rangesperra",
-       "right-proxyunbannable": "Ausnahme vu automatischa Proxysperra",
        "right-protect": "Seytaschutzstatus ändern",
        "right-editprotected": "Geschitzte Seita bearbta (ohne Kaskadenschutz)",
        "right-editinterface": "Nutzeräberfläche bearbta",
        "watchthisupload": "Diese Datei beobachta",
        "filewasdeleted": "Anne Datei miet diesem Noama wurde schunnt eemoll huchgeloada und zwischenzeitlich wieder geläscht. Bitte priefe zuerst dann Eintrag eim $1, bevor du de Datei wirklich speicherst.",
        "filename-bad-prefix": "Dar Dateinoame beginnt miet '''„$1“'''. Dies ies eim allgemeena dar vu a'r Digitalkamera vorgegebene Dateinoame und daher ne sehr aussagekräftig.\nBitte gieb dar Datei an'n Noama, dar dann Inhalt besser beschreibt.",
-       "upload-success-subj": "Erfolgreich huchgeloada",
        "upload-proto-error": "Foalsches Protokoll",
        "upload-proto-error-text": "De URL muuß miet <code>http://</code> oder <code>ftp://</code> beginna.",
        "upload-file-error-text": "Bei dar Erstellung a'r temporären Datei uff'd Server ies a interner Fahler uffgetreta.\nBitte informiere an'n [[Special:ListUsers/sysop|Administrator]].",
        "rollbackfailed": "Zerrickesetza gescheitert",
        "cantrollback": "De Änderung koan ne zerrickegesetzt waan, do is kenne friehera Autoren gibt.",
        "alreadyrolled": "Doas Zerrickesetza der Änderunga vu [[User:$2|$2]] ([[User talk:$2|Dischkur]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) oa [[:$1]] ies gescheitert, do ei der Zwischenzeit a anderer Nutzer de Seite geändert hoot.\n\nDe letzte Änderung stommt vu [[User:$3|$3]] ([[User talk:$3|Dischkur]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "De Änderungszusommafassung lautet: ''„$1“''.",
+       "editcomment": "De Änderungszusommafassung lautet: <em>$1</em>.",
        "revertpage": "Änderunga vu [[Special:Contributions/$2|$2]] ([[User talk:$2|Dischkur]]) rickgängig gemacht und letzte Version vu [[User:$1|$1]] wiederhergestellt",
        "rollback-success": "De Änderunga vu $1 wurden rickgängig gemacht und de letzte Version vu $2 wurde wiederhergestellt.",
        "sessionfailure": "Is goab a Problem miet dar Iebertragung denner Nutzerdaten.\nDiese Aksjonn wurde daher sicherheetsholber obgebrochen, im anne foalsche Zuordnung denner Änderunga zu an'm andern Nutzer zu verhindern.\nBitte gieh zerricke und versiche dann Vurgang erneut auszufiehrn.",
        "movenosubpage": "Diese Seite hoot kenne Underseita.",
        "movereason": "Begriendung:",
        "revertmove": "zerricke scherga",
-       "delete_and_move": "Läscha und Verschieba",
        "delete_and_move_text": "== Läschung erforderlich ==\n\nDe Seite „[[:$1]]“ existiert bereits. Mechtest du diese läscha, im de Seite verschieba zu kinna?",
        "delete_and_move_confirm": "Zielseyte fier de Verschiebung läscha",
        "delete_and_move_reason": "geläscht, im Ploatz fier Verschiebung zu macha",
index 7fafaed..e9782f0 100644 (file)
@@ -5,7 +5,8 @@
                        "Maax",
                        "Mimursal",
                        "Yariiska",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Linkiga hoos ka calaamadeysan:",
        "namespaceprotected": "Ma laguu ogolo in aad wax ka bedesho maqaalada ku jirto '''$1''' xarun magaceedka.",
        "customcssprotected": "Ma laguu ogolo in aad wax ka badashid boggaan, sababtoo ah waxaa ku qoran isticmaale'yaal kale waxyaabo u shaqsi ah.",
        "ns-specialprotected": "Bogyaasha gaarka ah wax malaga bedeli karo.",
-       "titleprotected": "Qoraalkaan aad qortay waxaa difaacay  [[User:$1|$1]] si loo sameynin.\nSababta neh waxaa waaye \"''$2''\".",
+       "titleprotected": "Qoraalkaan aad qortay waxaa difaacay  [[User:$1|$1]] si loo sameynin.\nSababta neh waxaa waaye <em>$2</em>.",
        "virus-scanfailed": "baaritaanka woo shaqeesmi waayay (koodka $1)",
        "virus-unknownscanner": "ka hor tagga fayruska la aqoon:",
        "logouttext": "'''Hada waad ka baxday.'''\n\nWaad sii isticmaali kartaa {{SITENAME}} adoona lagu aqoon, ama <span class='plainlinks'>[$1 gudaha gal]</span> adiga oo isticmaalaya magacaagii hore ama mid ka duwan. OGEYSIIS waxaa lagayabaa bogyaasha qaarkood in ay yiraahdaan wali gudaha ayaad ku jirtaa, ilaa inta aad ka nadiifineesid browsahaaga Internetka.",
        "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-heading": "<strong>Sharaxaad:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-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 $3 $2",
        "upload-description": "Qeexida faylka",
        "upload-options": "Dooqyada soo gelinta",
        "watchthisupload": "Faylkaan waardiyeey",
-       "upload-failure-subj": "Dhibaatada soo gelinta",
-       "upload-warning-subj": "Digniin waxa aad soo gelineesid",
        "img-auth-streaming": "Woo dareeraa \"$1\".",
        "upload-curl-error28": "Waqtiga woo ka dhamaaday soo gelinta",
        "license": "Laysinka:",
        "move": "Wareeji",
        "pager-newer-n": "{{PLURAL:$1|ka cusub 1|ka cusub $1}}",
        "pager-older-n": "{{PLURAL:$1|ka duqsan 1|ka duqsan $1}}",
+       "apisandbox": "API bacaad",
        "booksources": "Xogta buuga",
        "booksources-search-legend": "Raadi xogta buuga",
        "log": "Guda galayaasha",
        "unwatchthispage": "Jooji waardiyeyntiisa",
        "watchlist-details": "{{PLURAL:$1|$1 bog|$1 boggag ah}}  aa ku jirto liiskaaga waardiyaha, ma lagu darin boggaga wadahadalka.",
        "wlshowlast": "Itus wixii ka danbeeyay $1 saacadood $2 maalmood",
-       "watchlistall2": "dhamaan",
        "watchlist-options": "Dooqyada liiska waardiyaha",
        "watching": "Daawasho...",
        "enotif_subject_created": "{{SITENAME}} Bogga $1 Qof ayaa sameeyey {{gender:$2|$2}}",
index 89b1bcd..552431f 100644 (file)
        "myprivateinfoprotected": "Ti nuk ke leje për të redaktuar të dhënat e tua private.",
        "mypreferencesprotected": "Ti nuk ke leje për të ndryshuar preferencat e tua.",
        "ns-specialprotected": "Faqet speciale nuk mund të redaktohen.",
-       "titleprotected": "Ky titull është mbrojtur nga [[User:$1|$1]] dhe nuk mund të krijohet.\nArsyeja e dhënë është ''$2''.",
+       "titleprotected": "Ky titull është mbrojtur nga [[User:$1|$1]] dhe nuk mund të krijohet.\nArsyeja e dhënë është <em>$2</em>.",
        "filereadonlyerror": "Nuk është në gjendje që të ndryshojë skedarin \"$1\" sepse depoja e skedarit \"$2\" është në formën vetëm-lexim.\n\nAdministratori i cili e mbylli atë e dha këtë shpjegim: \"$3\".",
        "invalidtitle-knownnamespace": "Titull jo i vlefshëm me hapësirën \"$2\" dhe teksti \"$3\"",
        "invalidtitle-unknownnamespace": "Titull jo i vlefshëm me numrin e panjohur të hapësirës së emrit $1 dhe tekstit \"$2\"",
        "right-blockemail": "Blloko përdoruesin që të mos dërgojë postë elektronike",
        "right-hideuser": "Blloko përdorues, duke fshehur nga publiku",
        "right-ipblock-exempt": "Anashkalo bllokimet e IP-ve, auto-bllokimet dhe linjën e bllokimeve",
-       "right-proxyunbannable": "Anashkalo bllokimet automatike të ndërmjetësve",
        "right-unblockself": "Zhblloko veten",
        "right-protect": "Ndrysho nivelin mbrojtës dhe redakto faqet e mbrojtura",
        "right-editprotected": "Redakto faqet e mbrojtura (pa ndryshuar mbrojtjen)",
        "right-managechangetags": "Krijoni dhe fshini [[Special:Tags|tags]] nga baza e të dhënave",
        "right-applychangetags": "Aplikoni [[Special:Tags|tags]] së bashku me ndryshimet",
        "right-changetags": "Shtoni dhe të largoni në mënyrë arbitrare [[Special:Tags|tags]] në rishikimet individuale dhe regjistrimet e historikut",
+       "grant-blockusers": "Blloko dhe zhblloko përdoruesit",
        "newuserlogpage": "Regjistri i llogarive",
        "newuserlogpagetext": "Ky është një regjistër i llogarive të fundit që janë hapur",
        "rightslog": "Regjistri i privilegjeve të përdoruesit",
        "recentchanges-label-bot": "Ky redaktim u krye nga një robot",
        "recentchanges-label-unpatrolled": "Ky editim ende nuk është patrolluar",
        "recentchanges-label-plusminus": "Madhësia e faqes ndryshoi me këtë numër bajtësh",
-       "recentchanges-legend-heading": "'''Legjenda:'''",
+       "recentchanges-legend-heading": "<strong>Legjenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (shiko gjithashtu [[Special:NewPages|listën e faqeve të reja]])",
        "rcnotefrom": "Më poshtë {{PLURAL:$5|është shfaqur ndryshimi|janë shfaqur ndryshimet}} që nga <strong>$3, $4</strong> (deri në <strong>$1</strong>).",
        "rclistfrom": "Tregon ndryshime së fundmi duke filluar nga $3 $2",
        "watchthisupload": "Mbikqyre këtë skedë",
        "filewasdeleted": "Një skedë më këtë emër është ngarkuar një here dhe pastaj është grisur. Duhet të shikoni $1 përpara se ta ngarkoni përsëri.",
        "filename-bad-prefix": "Emri i skedës që po ngarkoni fillon me '''\"$1\"''' dhe nuk është veçantisht përshkrues pasi përdoret nga shumë kamera.\nJu lutem zgjidhni një emër më përshkrues për skedën tuaj.",
-       "upload-success-subj": "Dhënie e sukseshme",
-       "upload-success-msg": "Ngarkimi juaj nga [$2] ishte i suksesshëm. Mund të gjendet këtu: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Problem gjatë ngarkimit",
-       "upload-failure-msg": "Kishte një problem me ngarkimin tuaj nga [$2]:\n\n$1",
-       "upload-warning-subj": "Paralajmërim për ngarkimin",
-       "upload-warning-msg": "Kishte një problem me ngarkimin tuaj nga [$2]. Ju mund të ktheheni tek [[Special:Upload/stash/$1|forma e ngarkimit]] për të korrgjuar këtë problem.",
        "upload-proto-error": "Protokoll i gabuar",
        "upload-proto-error-text": "Ngarkimet nga rrjeti kërkojnë që adresa URL të fillojë me <code>http://</code> ose <code>ftp://</code>.",
        "upload-file-error": "Gabim i brendshëm",
        "wlheader-showupdated": "Faqet që kanë ndryshuar nga vizita juaj e fundit do të tregohen të '''trasha'''",
        "wlnote": "Më poshtë {{PLURAL:$1|është ndryshimi i fundit|janë '''$1''' ndryshimet e fundit}} në {{PLURAL:$2|orën e fundit|'''$2''' orët e fundit}}, që nga $3, $4.",
        "wlshowlast": "Trego $1 orët $2 ditët",
-       "watchlistall2": "të gjitha",
        "watchlist-options": "Mundësitë e listës mbikqyrëse",
        "watching": "Duke mbikqyrur...",
        "unwatching": "Mos e mbikqyr më...",
        "rollbackfailed": "Rikthimi dështoi",
        "cantrollback": "Redaktimi nuk mund të kthehej;\nredaktori i fundit është i vetmi autor i këtij artikulli.",
        "alreadyrolled": "Nuk mund të rikthehej redaktimi i fundit i [[:$1]] nga [[User:$2|$2]] ([[User talk:$2|diskuto]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); dikush tjetër e ka redaktuar ose rikthyer këtë faqe tashmë.\n\nRedaktimi i fundit është bërë nga [[User:$3|$3]] ([[User talk:$3|diskuto]]{{nt:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Përmbledhja e redaktimit ishte: \"''$1''\".",
+       "editcomment": "Përmbledhja e redaktimit ishte: <em>$1</em>.",
        "revertpage": "Ndryshimet e [[Special:Contributions/$2|$2]] ([[User talk:$2|diskutimet]]) u kthyen mbrapsht, artikulli tani ndodhet në versionin e fundit nga [[User:$1|$1]].",
        "revertpage-nouser": "U rikthyen redaktimet nga (përdoruesi i larguar) në versionin e fundit nga [[User:$1|$1]]",
        "rollback-success": "Ndryshimet e $1 u kthyen mbrapsh; artikulli ndodhet tek verzioni i $2.",
index 28f56b2..9c8254a 100644 (file)
        "october-date": "$1 окотобар",
        "november-date": "$1 новембар",
        "december-date": "$1 децембар",
+       "period-am": "преподне",
+       "period-pm": "поподне",
        "pagecategories": "{{PLURAL:$1|Категорија|Категорије}}",
        "category_header": "Странице у категорији „$1“",
        "subcategories": "Поткатегорије",
        "myprivateinfoprotected": "Немате дозволу за мењање ваших личних информација.",
        "mypreferencesprotected": "Немате дозволу за мењање ваших подешавања.",
        "ns-specialprotected": "Посебне странице се не могу уређивати.",
-       "titleprotected": "Овај назив је [[User:$1|$1]] заштитио од прављења. Разлог: ''$2''.",
+       "titleprotected": "Овај назив је [[User:$1|$1]] заштитио од прављења. Разлог: <em>$2</em>.",
        "filereadonlyerror": "Не могу да изменим датотеку „$1“ јер је ризница „$2“ у режиму за читање.\n\nСистемски администратор је навео следеће објашњење: „$3“.",
        "invalidtitle-knownnamespace": "Неисправан наслов с именским простором „$2“ и текстом „$3“",
        "invalidtitle-unknownnamespace": "Неисправан наслов с именским простором бр. $1 и текстом „$2“",
        "newarticle": "(нови)",
        "newarticletext": "Дошли сте на страницу која још не постоји.\nДа бисте је направили, почните да куцате у прозор испод овог текста (погледајте [$1 страницу за помоћ]).\nАко сте овде дошли грешком, вратите се на претходну страницу.",
        "anontalkpagetext": "---- Ово је страница за разговор с анонимним корисником који још нема налог или га не користи.\nЗбог тога морамо да користимо бројчану ИП адресу како бисмо га препознали.\nТакву адресу може делити више корисника.\nАко сте анонимни корисник и мислите да су вам упућене примедбе, [[Special:UserLogin/signup|отворите налог]] или се [[Special:UserLogin|пријавите]] да бисте избегли будућу забуну с осталим анонимним корисницима.",
-       "noarticletext": "На овој страници тренутно нема садржаја.\nМожете [[Special:Search/{{PAGENAME}}|потражити овај наслов]] на другим страницама,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} претражити сродне извештаје] или [{{fullurl:{{FULLPAGENAME}}|action=edit}} уредити страницу]</span>.",
+       "noarticletext": "На овој страници тренутно нема садржаја.\nМожете [[Special:Search/{{PAGENAME}}|потражити овај наслов]] на другим страницама,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} претражити сродне извештаје] или [{{fullurl:{{FULLPAGENAME}}|action=edit}} направити ову страницу]</span>.",
        "noarticletext-nopermission": "На овој страници тренутно нема садржаја.\nМожете [[Special:Search/{{PAGENAME}}|потражити овај наслов]] на другим страницама или <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} претражити сродне дневнике]</span>, али немате дозволу да направите ову страницу.",
        "missing-revision": "Не могу да пронађем измену бр. $1 на страници под називом „{{FULLPAGENAME}}“.\n\nОво се обично дешава када пратите застарелу везу до странице која је обрисана.\nВише информација можете пронаћи у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневнику брисања].",
        "userpage-userdoesnotexist": "Кориснички налог „<nowiki>$1</nowiki>“ није отворен.\nРазмислите да ли заиста желите да направите/уредите ову страницу.",
        "undo-summary-username-hidden": "Поништи измену $1 скривеног корисника",
        "cantcreateaccounttitle": "Не могу да отворим налог",
        "cantcreateaccount-text": "Отварање налога с ове ИП адресе (<strong>$1</strong>) је блокирао/ла [[User:$3|$3]].\n\nРазлог који је навео/ла $3 је <em>$2</em>",
-       "cantcreateaccount-range-text": "Отварање налога са ИП адреса у распону '''$1''', који укључује и вашу ИП адресу ('''$4''') је блокирао/ла [[User:$3|$3]].\n\nРазлог који је навео/ла $3 је <em>$2</em>",
+       "cantcreateaccount-range-text": "Отварање налога са ИП адреса у распону <strong>$1</strong>, који укључује и вашу ИП адресу (<strong>$4</strong>) је блокирао/ла [[User:$3|$3]].\n\nРазлог који је навео/ла $3 је <em>$2</em>",
        "viewpagelogs": "Погледај дневнике ове странице",
        "nohistory": "Не постоји историја измена ове странице.",
        "currentrev": "Текућа измена",
        "grant-group-file-interaction": "Уређивање датотека",
        "grant-group-watchlist-interaction": "Уређивање вашег списка надгледања",
        "grant-group-email": "Пошаљи имејл",
+       "grant-blockusers": "Блокирање и деблокирање корисника",
        "grant-createaccount": "Отварање налога",
        "grant-createeditmovepage": "Прављење, уређивање и премештање страница",
        "grant-delete": "Брисање страница, измена и уноса у дневницима",
        "grant-editinterface": "Уређивање Медијавики именског простора и корисничких CSS/JavaScript страница",
+       "grant-editmyoptions": "Уређивање ваших подешавања",
        "grant-editmywatchlist": "Уређивање вашег списка надгледања",
        "grant-editpage": "Уређивање постојећих страница",
        "grant-editprotected": "Уређивање заштићених страница",
+       "grant-protect": "Закључавање и откључавање страница",
+       "grant-rollback": "Враћање измена",
        "grant-uploadeditmovefile": "Отпремање, замена и премештање датотека",
        "grant-uploadfile": "Слање нових датотека",
+       "grant-basic": "Основна права",
+       "grant-viewdeleted": "Преглед обрисаних страница и датотека",
+       "grant-viewmywatchlist": "Преглед вашег списак надгледања",
        "newuserlogpage": "Дневник нових корисника",
        "newuserlogpagetext": "Ово је дневник нових корисника.",
        "rightslog": "Дневник корисничких права",
        "recentchanges-label-bot": "Ову измену је направио бот",
        "recentchanges-label-unpatrolled": "Ова измена још није патролирана",
        "recentchanges-label-plusminus": "Промена величине странице у бајтовима",
-       "recentchanges-legend-heading": "'''Легенда:'''",
+       "recentchanges-legend-heading": "<strong>Легенда:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|списак нових страница]])",
        "recentchanges-submit": "Прикажи",
        "rcnotefrom": "Испод {{PLURAL:$5|је измена|су измене}} од <strong>$3, $4</strong> (до <strong>$1</strong> приказано).",
        "recentchangeslinked-page": "Назив странице:",
        "recentchangeslinked-to": "Прикажи измене страница које су повезане с датом страницом",
        "recentchanges-page-added-to-category": "[[:$1]] је додата у категорију",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] и још {{PLURAL:$2|једна страница|$2 странице}} су додате у категорију",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] и још [[Special:WhatLinksHere/$1|{{PLURAL:$2|једна страница|$2 странице}}]] су додате у категорију",
        "recentchanges-page-removed-from-category": "[[:$1]] је уклоњена из категорије",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] и још {{PLURAL:$2|једна страница|$2 странице}} су уклоњене из категорије",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] и још [[Special:WhatLinksHere/$1|{{PLURAL:$2|једна страница|$2 странице}}]] су уклоњене из категорије",
        "autochange-username": "Медијавики аутоматска измена",
        "upload": "Пошаљи датотеку",
        "uploadbtn": "Пошаљи датотеку",
        "delete-toobig": "Ова страница има велику историју, преко $1 {{PLURAL:$1|измене|измене|измена}}.\nБрисање таквих страница је ограничено да би се спречило случајно оптерећење сервера.",
        "delete-warning-toobig": "Ова страница има велику историју, преко $1 {{PLURAL:$1|измене|изменe|измена}}.\nЊено брисање може пореметити базу података, стога поступајте с опрезом.",
        "deleteprotected": "Не можете обрисати ову страницу зато што је заштићена.",
-       "deleting-backlinks-warning": "'''Упозорење:''' бришете страницу која је укључена у [[Special:WhatLinksHere/{{FULLPAGENAME}}|друге странице]] или друге странице воде на њу.",
+       "deleting-backlinks-warning": "<strong>Упозорење:</strong> бришете страницу која је укључена у [[Special:WhatLinksHere/{{FULLPAGENAME}}|друге странице]] или друге странице воде на њу.",
        "rollback": "Врати измене",
        "rollbacklink": "врати",
        "rollbacklinkcount": "врати $1 {{PLURAL:$1|измену|измене|измена}}",
        "rollbackfailed": "Неуспешно враћање",
        "cantrollback": "Не могу да вратим измену.\nПоследњи аутор је уједно и једини.",
        "alreadyrolled": "Враћање последње измене странице [[:$1]] од стране {{GENDER:$2|корисника|кориснице|корисника}} [[User:$2|$2]] ([[User talk:$2|разговор]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); неко други је већ изменио или вратио страницу.\n\nПоследњу измену је {{GENDER:$3|направио|направила|направио}} [[User:$3|$3]] ([[User talk:$3|разговор]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Опис измене: „''$1''“.",
+       "editcomment": "Опис измене: <em>$1</em>.",
        "revertpage": "Враћене измене [[Special:Contribs/$2|$2]] ([[User talk:$2|разговор]]) на последњу измену корисника [[User:$1|$1]]",
        "revertpage-nouser": "Враћене су измене скривеног корисника на последњу измену {{GENDER:$1|корисника|кориснице}} [[User:$1|$1]]",
        "rollback-success": "Враћене су измене {{GENDER:$1|корисника|кориснице}} $1\nна последњу измену {{GENDER:$2|корисника|кориснице}} $2.",
        "changecontentmodel-title-label": "Наслов странице",
        "changecontentmodel-model-label": "Нови модел садржаја",
        "changecontentmodel-reason-label": "Разлог:",
+       "changecontentmodel-submit": "Промени",
        "changecontentmodel-success-title": "Модел садржаја је промењен",
        "changecontentmodel-success-text": "Модел садржаја странице [[:$1]] је промењен.",
        "changecontentmodel-cannot-convert": "Модел садржаја странице [[:$1]] се не може претворити у врсту $2.",
        "move-leave-redirect": "Остави преусмерење",
        "protectedpagemovewarning": "'''Упозорење:''' ова страница је заштићена, тако да само корисници с администраторским овлашћењима могу да је преместе.\nЗа више информација, последњи запис у дневнику измена је приказан испод:",
        "semiprotectedpagemovewarning": "'''Напомена:''' ова страница је заштићена, тако да само регистровани корисници могу да је преместе.\nЗа више информација, последњи запис у дневнику измена је приказан испод:",
-       "move-over-sharedrepo": "== Датотека постоји ==\n[[:$1]] се налази на дељеном складишту. Ако преместите датотеку на овај наслов, то ће заменити дељену датотеку.",
+       "move-over-sharedrepo": "[[:$1]] се налази на дељеном складишту. Ако преместите датотеку на овај наслов, то ће заменити дељену датотеку.",
        "file-exists-sharedrepo": "Наведени назив датотеке се већ користи у дељеном складишту.\nИзаберите други назив.",
        "export": "Извоз страница",
        "exporttext": "Можете извести текст и историју измена одређене странице или групе страница у формату XML.\nОво онда може бити увезено у други вики који користи Медијавики софтвер преко [[Special:Import|странице за увоз]].\n\nДа бисте извезли странице, унесите називе у оквиру испод, с једним насловом по реду, и изаберите да ли желите текућу измену и све остале, или само текућу измену с подацима о последњој измени.\n\nУ другом случају, можете користити и везу, на пример [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] за страницу [[{{MediaWiki:Mainpage}}]].",
        "javascripttest-pagetext-frameworks": "Изаберите један од следећих радних оквира: $1",
        "javascripttest-pagetext-skins": "Изаберите с којом темом желите да покренете пробу:",
        "javascripttest-qunit-intro": "Погледајте [$1 документацију за тестирање] на mediawiki.org.",
-       "tooltip-pt-userpage": "Ваша корисничка страница",
+       "tooltip-pt-userpage": "{{GENDER:|Ваша}} корисничка страница",
        "tooltip-pt-anonuserpage": "Корисничка страница за ИП адресу с које уређујете",
-       "tooltip-pt-mytalk": "Ваша страница за разговор",
+       "tooltip-pt-mytalk": "{{GENDER:|Ваша}} страница за разговор",
        "tooltip-pt-anontalk": "Разговор о изменама с ове ИП адресе",
-       "tooltip-pt-preferences": "Ваша подешавања",
+       "tooltip-pt-preferences": "{{GENDER:|Ваша}} подешавања",
        "tooltip-pt-watchlist": "Списак страница које надгледате",
-       "tooltip-pt-mycontris": "Списак ваших доприноса",
+       "tooltip-pt-mycontris": "Списак {{GENDER:|ваших}} доприноса",
        "tooltip-pt-anoncontribs": "Списак измена направљених са ове IP адресе",
        "tooltip-pt-login": "Препоручујемо вам да се пријавите, иако то није обавезно.",
        "tooltip-pt-logout": "Одјавите се",
        "tooltip-t-recentchangeslinked": "Скорашње измене на страницама које су повезана с овом страницом",
        "tooltip-feed-rss": "RSS довод ове странице",
        "tooltip-feed-atom": "Атом довод ове странице",
-       "tooltip-t-contributions": "Ð\9fогледаÑ\98Ñ\82е Ñ\81пиÑ\81ак Ð´Ð¾Ð¿Ñ\80иноÑ\81а Ð¾Ð²Ð¾Ð³ ÐºÐ¾Ñ\80иÑ\81ника",
-       "tooltip-t-emailuser": "Пошаљите имејл овом кориснику",
+       "tooltip-t-contributions": "СпиÑ\81ак Ð´Ð¾Ð¿Ñ\80иноÑ\81а {{GENDER:$1|овог ÐºÐ¾Ñ\80иÑ\81ника|ове ÐºÐ¾Ñ\80иÑ\81ниÑ\86е}}",
+       "tooltip-t-emailuser": "Пошаљите имејл {{GENDER:$1|овом кориснику|овој корисници}}",
        "tooltip-t-info": "Више информација о овој страници",
        "tooltip-t-upload": "Пошаљите датотеке",
        "tooltip-t-specialpages": "Списак свих посебних страница",
        "variantname-gan": "gan",
        "variantname-sr-ec": "Ћирилица",
        "variantname-sr-el": "Latinica",
-       "variantname-sr": "sr",
+       "variantname-sr": "ћир/lat",
        "variantname-kk-kz": "kk-kz",
        "variantname-kk-tr": "kk-tr",
        "variantname-kk-cn": "kk-cn",
index 065a446..c189237 100644 (file)
        "myprivateinfoprotected": "Nemate dozvolu za menjanje vaših ličnih informacija.",
        "mypreferencesprotected": "Nemate dozvolu za menjanje vaših podešavanja.",
        "ns-specialprotected": "Posebne stranice se ne mogu uređivati.",
-       "titleprotected": "Ovaj naziv je [[User:$1|$1]] zaštitio od pravljenja. Razlog: ''$2''.",
+       "titleprotected": "Ovaj naziv je [[User:$1|$1]] zaštitio od pravljenja. Razlog: <em>$2</em>.",
        "filereadonlyerror": "Ne mogu da izmenim datoteku „$1“ jer je riznica „$2“ u režimu za čitanje.\n\nSistemski administrator je naveo sledeće objašnjenje: „$3“.",
        "invalidtitle-knownnamespace": "Neispravan naslov s imenskim prostorom „$2“ i tekstom „$3“",
        "invalidtitle-unknownnamespace": "Neispravan naslov s imenskim prostorom br. $1 i tekstom „$2“",
        "newarticle": "(novi)",
        "newarticletext": "Došli ste na stranicu koja još ne postoji.\nDa biste je napravili, počnite da kucate u prozor ispod ovog teksta (pogledajte [$1 stranicu za pomoć]).\nAko ste ovde došli greškom, vratite se na prethodnu stranicu.",
        "anontalkpagetext": "---- Ovo je stranica za razgovor s anonimnim korisnikom koji još nema nalog ili ga ne koristi.\nZbog toga moramo da koristimo brojčanu IP adresu kako bismo ga prepoznali.\nTakvu adresu može deliti više korisnika.\nAko ste anonimni korisnik i mislite da su vam upućene primedbe, [[Special:UserLogin/signup|otvorite nalog]] ili se [[Special:UserLogin|prijavite]] da biste izbegli buduću zabunu s ostalim anonimnim korisnicima.",
-       "noarticletext": "Na ovoj stranici trenutno nema sadržaja.\nMožete [[Special:Search/{{PAGENAME}}|potražiti ovaj naslov]] na drugim stranicama,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti srodne izveštaje] ili [{{fullurl:{{FULLPAGENAME}}|action=edit}} urediti stranicu]</span>.",
+       "noarticletext": "Na ovoj stranici trenutno nema sadržaja.\nMožete [[Special:Search/{{PAGENAME}}|potražiti ovaj naslov]] na drugim stranicama,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti srodne izveštaje] ili [{{fullurl:{{FULLPAGENAME}}|action=edit}} napraviti ovu stranicu]</span>.",
        "noarticletext-nopermission": "Na ovoj stranici trenutno nema sadržaja.\nMožete [[Special:Search/{{PAGENAME}}|potražiti ovaj naslov]] na drugim stranicama ili <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti srodne dnevnike]</span>, ali nemate dozvolu da napravite ovu stranicu.",
        "missing-revision": "Ne mogu da pronađem izmenu br. $1 na stranici pod nazivom „{{FULLPAGENAME}}“.\n\nOvo se obično dešava kada pratite zastarelu vezu do stranice koja je obrisana.\nViše informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} dnevniku brisanja].",
        "userpage-userdoesnotexist": "Korisnički nalog „<nowiki>$1</nowiki>“ nije otvoren.\nRazmislite da li zaista želite da napravite/uredite ovu stranicu.",
        "undo-summary-username-hidden": "Poništi izmenu $1 skrivenog korisnika",
        "cantcreateaccounttitle": "Ne mogu da otvorim nalog",
        "cantcreateaccount-text": "Otvaranje naloga s ove IP adrese (<strong>$1</strong>) je blokirao/la [[User:$3|$3]].\n\nRazlog koji je naveo/la $3 je <em>$2</em>",
-       "cantcreateaccount-range-text": "Otvaranje naloga sa IP adresa u rasponu '''$1''', koji uključuje i vašu IP adresu ('''$4''') je blokirao/la [[User:$3|$3]].\n\nRazlog koji je naveo/la $3 je <em>$2</em>",
+       "cantcreateaccount-range-text": "Otvaranje naloga sa IP adresa u rasponu <strong>$1</strong>, koji uključuje i vašu IP adresu (<strong>$4</strong>) je blokirao/la [[User:$3|$3]].\n\nRazlog koji je naveo/la $3 je <em>$2</em>",
        "viewpagelogs": "Pogledaj dnevnike ove stranice",
        "nohistory": "Ne postoji istorija izmena ove stranice.",
        "currentrev": "Tekuća izmena",
        "recentchanges-label-bot": "Ovu izmenu je napravio bot",
        "recentchanges-label-unpatrolled": "Ova izmena još nije patrolirana",
        "recentchanges-label-plusminus": "Promena veličine stranice u bajtovima",
-       "recentchanges-legend-heading": "'''Legenda:'''",
+       "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|spisak novih stranica]])",
        "recentchanges-submit": "Prikaži",
        "rcnotefrom": "Ispod {{PLURAL:$5|je izmena|su izmene}} od <strong>$3, $4</strong> (do <strong>$1</strong> prikazano).",
        "recentchangeslinked-page": "Naziv stranice:",
        "recentchangeslinked-to": "Prikaži izmene stranica koje su povezane s datom stranicom",
        "recentchanges-page-added-to-category": "[[:$1]] je dodata u kategoriju",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] i još {{PLURAL:$2|jedna stranica|$2 stranice}} su dodate u kategoriju",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] i još [[Special:WhatLinksHere/$1|{{PLURAL:$2|jedna stranica|$2 stranice}}]] su dodate u kategoriju",
        "recentchanges-page-removed-from-category": "[[:$1]] je uklonjena iz kategorije",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] i još {{PLURAL:$2|jedna stranica|$2 stranice}} su uklonjene iz kategorije",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] i još [[Special:WhatLinksHere/$1|{{PLURAL:$2|jedna stranica|$2 stranice}}]] su uklonjene iz kategorije",
        "autochange-username": "Medijaviki automatska izmena",
        "upload": "Pošalji datoteku",
        "uploadbtn": "Pošalji datoteku",
        "delete-toobig": "Ova stranica ima veliku istoriju, preko $1 {{PLURAL:$1|izmene|izmene|izmena}}.\nBrisanje 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}}.\nNjeno brisanje može poremetiti bazu podataka, stoga postupajte s oprezom.",
        "deleteprotected": "Ne možete obrisati ovu stranicu zato što je zaštićena.",
-       "deleting-backlinks-warning": "'''Upozorenje:''' brišete stranicu koja je uključena u [[Special:WhatLinksHere/{{FULLPAGENAME}}|druge stranice]] ili druge stranice vode na nju.",
+       "deleting-backlinks-warning": "<strong>Upozorenje:</strong> brišete stranicu koja je uključena u [[Special:WhatLinksHere/{{FULLPAGENAME}}|druge stranice]] ili druge stranice vode na nju.",
        "rollback": "Vrati izmene",
        "rollbacklink": "vrati",
        "rollbacklinkcount": "vrati $1 {{PLURAL:$1|izmenu|izmene|izmena}}",
        "rollbackfailed": "Neuspešno vraćanje",
        "cantrollback": "Ne mogu da vratim izmenu.\nPoslednji autor je ujedno i jedini.",
        "alreadyrolled": "Vraćanje poslednje izmene stranice [[:$1]] od strane {{GENDER:$2|korisnika|korisnice|korisnika}} [[User:$2|$2]] ([[User talk:$2|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); neko drugi je već izmenio ili vratio stranicu.\n\nPoslednju izmenu je {{GENDER:$3|napravio|napravila|napravio}} [[User:$3|$3]] ([[User talk:$3|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Opis izmene: „''$1''“.",
+       "editcomment": "Opis izmene: <em>$1</em>.",
        "revertpage": "Vraćene izmene [[Special:Contribs/$2|$2]] ([[User talk:$2|razgovor]]) na poslednju izmenu korisnika [[User:$1|$1]]",
        "revertpage-nouser": "Vraćene su izmene skrivenog korisnika na poslednju izmenu {{GENDER:$1|korisnika|korisnice}} [[User:$1|$1]]",
        "rollback-success": "Vraćene su izmene {{GENDER:$1|korisnika|korisnice}} $1\nna poslednju izmenu {{GENDER:$2|korisnika|korisnice}} $2.",
        "move-leave-redirect": "Ostavi preusmerenje",
        "protectedpagemovewarning": "'''Upozorenje:''' ova stranica je zaštićena, tako da samo korisnici s administratorskim ovlašćenjima mogu da je premeste.\nZa više informacija, poslednji zapis u dnevniku izmena je prikazan ispod:",
        "semiprotectedpagemovewarning": "'''Napomena:''' ova stranica je zaštićena, tako da samo registrovani korisnici mogu da je premeste.\nZa više informacija, poslednji zapis u dnevniku izmena je prikazan ispod:",
-       "move-over-sharedrepo": "== Datoteka postoji ==\n[[:$1]] se nalazi na deljenom skladištu. Ako premestite datoteku na ovaj naslov, to će zameniti deljenu datoteku.",
+       "move-over-sharedrepo": "[[:$1]] se nalazi na deljenom skladištu. Ako premestite datoteku na ovaj naslov, to će zameniti deljenu datoteku.",
        "file-exists-sharedrepo": "Navedeni naziv datoteke se već koristi u deljenom skladištu.\nIzaberite drugi naziv.",
        "export": "Izvoz stranica",
        "exporttext": "Možete izvesti tekst i istoriju izmena određene stranice ili grupe stranica u formatu XML.\nOvo onda može biti uvezeno u drugi viki koji koristi Medijaviki softver preko [[Special:Import|stranice za uvoz]].\n\nDa biste izvezli stranice, unesite nazive u okviru ispod, s jednim naslovom po redu, i izaberite da li želite tekuću izmenu i sve ostale, ili samo tekuću izmenu s podacima o poslednjoj izmeni.\n\nU drugom slučaju, možete koristiti i vezu, na primer [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] za stranicu [[{{MediaWiki:Mainpage}}]].",
        "javascripttest-pagetext-frameworks": "Izaberite jedan od sledećih radnih okvira: $1",
        "javascripttest-pagetext-skins": "Izaberite s kojom temom želite da pokrenete probu:",
        "javascripttest-qunit-intro": "Pogledajte [$1 dokumentaciju za testiranje] na mediawiki.org.",
-       "tooltip-pt-userpage": "Vaša korisnička stranica",
+       "tooltip-pt-userpage": "{{GENDER:|Vaša}} korisnička stranica",
        "tooltip-pt-anonuserpage": "Korisnička stranica za IP adresu s koje uređujete",
-       "tooltip-pt-mytalk": "Vaša stranica za razgovor",
+       "tooltip-pt-mytalk": "{{GENDER:|Vaša}} stranica za razgovor",
        "tooltip-pt-anontalk": "Razgovor o izmenama s ove IP adrese",
-       "tooltip-pt-preferences": "Vaša podešavanja",
+       "tooltip-pt-preferences": "{{GENDER:|Vaša}} podešavanja",
        "tooltip-pt-watchlist": "Spisak stranica koje nadgledate",
-       "tooltip-pt-mycontris": "Spisak vaših doprinosa",
+       "tooltip-pt-mycontris": "Spisak {{GENDER:|vaših}} doprinosa",
        "tooltip-pt-anoncontribs": "Spisak izmena napravljenih sa ove IP adrese",
        "tooltip-pt-login": "Preporučujemo vam da se prijavite, iako to nije obavezno.",
        "tooltip-pt-logout": "Odjavite se",
        "tooltip-t-recentchangeslinked": "Skorašnje izmene na stranicama koje su povezana s ovom stranicom",
        "tooltip-feed-rss": "RSS dovod ove stranice",
        "tooltip-feed-atom": "Atom dovod ove stranice",
-       "tooltip-t-contributions": "Pogledajte spisak doprinosa ovog korisnika",
-       "tooltip-t-emailuser": "Pošaljite e-poruku ovom korisniku",
+       "tooltip-t-contributions": "Spisak doprinosa {{GENDER:$1|ovog korisnika|ove korisnice}}",
+       "tooltip-t-emailuser": "Pošaljite imejl {{GENDER:$1|ovom korisniku|ovoj korisnici}}",
        "tooltip-t-info": "Više informacija o ovoj stranici",
        "tooltip-t-upload": "Pošaljite datoteke",
        "tooltip-t-specialpages": "Spisak svih posebnih stranica",
        "variantname-gan": "gan",
        "variantname-sr-ec": "Ćirilica",
        "variantname-sr-el": "Latinica",
-       "variantname-sr": "sr",
+       "variantname-sr": "ћир/lat",
        "variantname-kk-kz": "kk-kz",
        "variantname-kk-tr": "kk-tr",
        "variantname-kk-cn": "kk-cn",
index 233ca3d..9f38a0a 100644 (file)
        "customcssprotected": "↓Du hääst nit ju Begjuchtegenge, disse CSS änthooldende Siede tou beoarbaidjen, deer ju do persöönelke Ienstaalengen fon n uur Benutser änthaalt.",
        "customjsprotected": "↓Du hääst nit ju Begjuchtegenge, disse JavaScript änthooldewnde Siede tou beoarbaidjen, deer ju do persöönelke Ienstaalengen fon n uur Benutser änthaalt.",
        "ns-specialprotected": "Spezioalsieden konnen nit beoarbaided wäide.",
-       "titleprotected": "Ne Siede mäd dissen Noome kon nit moaked wäide.\nJu Speere wuude truch [[User:$1|$1]] mäd ju Begruundenge ''$2'' ienroat.",
+       "titleprotected": "Ne Siede mäd dissen Noome kon nit moaked wäide.\nJu Speere wuude truch [[User:$1|$1]] mäd ju Begruundenge <em>$2</em> ienroat.",
        "filereadonlyerror": "↓Ju Doatäi „$1“ kon nit annerd wäide, deer ap dät Doatäirepositorium „$2“ bloot Leesetougriep muugelk is.\n\nDie Administrator, die dän Skrieuwtougriep speerde, roate foulgjenden Gruund an: „$3“.",
        "invalidtitle-knownnamespace": "\n↓Ungultigen Tittel mäd Noomensruum „$2“ un Text „$3“",
        "invalidtitle-unknownnamespace": "\n↓Ungultigen Tittel mäd unbekoanden Noomensruumnummer $1 un Text „$2“",
        "passwordreset-email": "E-Mail-Adresse:",
        "passwordreset-emailtitle": "Benutserkontoinformatione ap {{SITENAME}}",
        "passwordreset-emailelement": "↓Benutsernoome: \n$1\n\nTemporär Paaswoud: \n$2",
-       "passwordreset-emailsent": "↓Ne Ärinnerenge wuud uur E-Mail fersoand.",
+       "passwordreset-emailsentemail": "↓Ne Ärinnerenge wuud uur E-Mail fersoand.",
        "bold_sample": "Fatten Text",
        "bold_tip": "Fatten Text",
        "italic_sample": "Kursiven Text",
        "prefs-displayrc": "Anwies-Optione",
        "prefs-displaywatchlist": "Anwies-Optione",
        "prefs-diffs": "Versionsfergliek",
-       "email-address-validity-valid": "Gultige E-Mail-Adrässe",
-       "email-address-validity-invalid": "Ne gultige E-Mail-Adrässe is nöödich.",
        "userrights": "Benutsergjuchteferwaltenge",
        "userrights-lookup-user": "Ferwaltede Gruppentouheeregaid",
        "userrights-user-editname": "Benutsernoome anreeke:",
        "right-blockemail": "Benutser an dät Ferseenden fon E-mails hinnerje",
        "right-hideuser": "Speer un ferbiergje n Benutsernoome",
        "right-ipblock-exempt": "Uutnoame fon IP-Speeren, Autoblocks un Rangespeeren",
-       "right-proxyunbannable": "Uutnoame fon automatiske Proxyspeeren",
        "right-unblockself": "Sik sälwen äntspeere",
        "right-protect": "Siedenskutsstatus annerje",
        "right-editprotected": "Skutsede Sieden beoarbaidje (sunner Kaskadenskuts)",
        "watchthisupload": "Disse Doatäi beooboachtje",
        "filewasdeleted": "Ne Doatäi mäd dissen Noome wuude al moal hoochleeden un intwisken wier läsked. Pröif toueerst dän Iendraach in $1, eer du ju Doatäi wuddelk spiekerst.",
        "filename-bad-prefix": "Die Doatäinoome begint mäd '''„$1“'''. Dit is in algemeenen die fon ne Digitoalkamera foarroate Doatäinoome un deeruum nit gjucht uurtjuugend.\nReek ju Doatäi n Noome, die dän Inhoold beeter beskrift.",
-       "upload-success-subj": "Mäd Ärfoulch hoochleeden",
-       "upload-success-msg": "Dät Hoochleeden fon [$2] is glukked. Ju stoant hier tou Ferföigenge: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Hoochleedefailer",
-       "upload-failure-msg": "Dät roat n Problem mäd dien hoochleedene Doatäi fon [$2]:\n\n$1",
-       "upload-warning-subj": "Hoochleede-Woarskauenge",
-       "upload-warning-msg": "Dät roat n Problem bie dät Hoochleeden fon [$2]. Gung wier ätter [[Special:Upload/stash/$1|Hoochleedeformular]] wai, uum dit Problem tou löösen.",
        "upload-proto-error": "Falsk Protokol",
        "upload-proto-error-text": "Ju URL mout mäd <code>http://</code> of <code>ftp://</code> ounfange.",
        "upload-file-error": "Interne Failer",
        "rollbackfailed": "Touräächsätten misglukked",
        "cantrollback": "Disse Annerenge kon nit touräächstoald wäide; deer et naan fröieren Autor rakt.",
        "alreadyrolled": "Dät Touräächsätten fon do Annerengen fon [[User:$2|$2]] ([[User talk:$2|Diskussion]], [[Special:Contributions/$2|{{int:contribslink}}]]) an Siede [[:$1]] hied naan Ärfoulch, deer in ju Twiskentied al n uur Benutser Annerengen an disse Siede foarnuumen häd.\n\nJu lääste Annerenge stamt fon [[User:$3|$3]] ([[User talk:$3|Diskussion]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Ju Annerengs-Touhoopefoatenge waas: \"''$1''\".",
+       "editcomment": "Ju Annerengs-Touhoopefoatenge waas: <em>$1</em>.",
        "revertpage": "Tounichte moakede Beoarbaidengen fon [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) tou ju lääste Version fon [[User:$1|$1]]",
        "revertpage-nouser": "Annerengen fon (Benutsernoome wächhoald) touräächtroald un lääste Version fon [[User:$1|$1]] wier häärstoald",
        "rollback-success": "Do Annerengen fon $1 wuuden tourääch annerd un ju lääste Version fon $2 wuude wier moaked.",
        "movenosubpage": "Disse Siede häd neen Unnersieden.",
        "movereason": "Gruund:",
        "revertmove": "tourääch ferskuuwe",
-       "delete_and_move": "Läskje un ferskuuwe",
        "delete_and_move_text": "==Sielartikkel is al deer, läskje?==\nDie Artikkel \"[[:$1]]\" existiert al.\nMoatest du him foar ju Ferskuuwenge läskje?",
        "delete_and_move_confirm": "Jee, Sielartikkel foar ju Ferskuuwenge läskje",
        "delete_and_move_reason": "Läsked uum Plats tou moakjen foar Ferskuuwenge",
        "expand_templates_ok": "Uutfiere",
        "expand_templates_remove_comments": "Kommentoare wächhoalje",
        "expand_templates_generate_xml": "Wies XML Parser-Boom",
-       "expand_templates_preview": "Foarskau"
+       "expand_templates_preview": "Foarskau",
+       "randomrootpage": "Toufällige Stamsiede"
 }
index 385b6cf..520f3b3 100644 (file)
        "myprivateinfoprotected": "Anjeun teu boga kawenangan pikeun ngédit émbaran pribadi anjeun.",
        "mypreferencesprotected": "Anjeun teu boga kawenangan pikeun ngédit préferénsi anjeun.",
        "ns-specialprotected": "Kaca dina ngaranspasi {{ns:special}} teu bisa di édit.",
-       "titleprotected": "Ieu judul dikonci ku [[User:$1|$1]] kalawan alesan ''$2''.",
+       "titleprotected": "Ieu judul dikonci ku [[User:$1|$1]] kalawan alesan <em>$2</em>.",
        "filereadonlyerror": "Berkas \"$1\" teu bisa dirobah kusabab répositori \"$2\" keur dina mode ukur-maca.\n\nKuncén anu ngonci méré alesan: \"$3\".",
        "invalidtitle-knownnamespace": "Judul henteu sah kusabab ngandung ngaranspasi \"$2\" jeung téks \"$3\"",
        "invalidtitle-unknownnamespace": "Judul henteu sah kusabab ngandung angka ngaranspasi $1 jeung tulisan \"$2\"",
        "undo-summary-username-hidden": "Bolaykeun révisi $1 ku pamaké nyumput",
        "cantcreateaccounttitle": "Rekening teu bisa dijieun",
        "cantcreateaccount-text": "Nyieun rekening ti ieu alamat IP ('''$1''') dipeungpeuk ku [[User:$3|$3]].\n\nAlesanana $3 cenah ''$2''.",
-       "cantcreateaccount-range-text": "Nyieun akun ti alamat IP dina rentang '''$1''', kaasup alamat IP anjeun ('''$4'''), dipeungpeuk ku [[User:$3|$3]].\n\nAlesan $3 nyaéta ''$2''",
+       "cantcreateaccount-range-text": "Nyieun akun ti alamat IP dina rentang <strong>$1</strong>, kaasup alamat IP anjeun (<strong>$4</strong>), dipeungpeuk ku [[User:$3|$3]].\n\nAlesan $3 nyaéta <em>$2</em>",
        "viewpagelogs": "Tempo log kaca ieu",
        "nohistory": "Teu aya jujutan édit pikeun kaca ieu.",
        "currentrev": "Révisi kiwari",
        "recentchanges-label-bot": "Ieu parobahan dijieun ku bot",
        "recentchanges-label-unpatrolled": "Ieu éditan can karoris",
        "recentchanges-label-plusminus": "Ukuran kaca robah sajumlah ieu bit",
-       "recentchanges-legend-heading": "'''Pedaran:'''",
+       "recentchanges-legend-heading": "<strong>Pedaran:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (tempo ogé [[Special:NewPages|béréndélan kaca anyar]])",
        "rcnotefrom": "Di handap ieu parobahan saprak <b>$2</b> (nu ditémbongkeun nepi ka <b>$1</b>).",
        "rclistfrom": "Témbongkeun nu anyar robah nepi ka $3 $2",
        "rollbackfailed": "Gagal malikkeun",
        "cantrollback": "Éditan teu bisa dibalikkeun; kontribusi panungtung ngarupakeun hiji-hijina panulis kaca ieu.",
        "alreadyrolled": "Teu bisa mulangkeun édit ahir [[$1]] ku [[User:$2|$2]] ([[User talk:$2|Obrolan]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); geus aya nu ngédit atawa mulangkeun kacana.\n\nÉdit ahir ku [[User:$3|$3]] ([[User talk:$3|Obrolan]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Komentar ngéditna: \"''$1''\".",
+       "editcomment": "Komentar ngéditna: <em>$1</em>.",
        "revertpage": "Malikkeun éditan $2, diganti deui ka vérsi ahir ku $1",
        "rollback-success": "Mulangkeun éditan $1; balik deui ka vérsi panungtung ku $2.",
        "sessionfailure": "Sigana aya masalah jeung termin log anjeun; peta ieu geus dibolaykeun salaku pépéling pikeun ngalawan ayana pangbajak. Mangga pencét \"back\" jeung muat ulang ti kaca asal anjeun, lajeng cobaan deui.",
index fa2da05..ccbdafb 100644 (file)
@@ -68,7 +68,8 @@
                        "Aaoo",
                        "Josve05a",
                        "Pipetricker",
-                       "Dammråtta"
+                       "Dammråtta",
+                       "Mgr"
                ]
        },
        "tog-underline": "Stryk under länkar:",
@@ -78,7 +79,7 @@
        "tog-hidecategorization": "Dölj kategorisering av sidor",
        "tog-extendwatchlist": "Utöka bevakningslistan till att visa alla ändringar, inte bara den senaste",
        "tog-usenewrc": "Gruppera ändringar efter sida i senaste ändringar och bevakningslistan",
-       "tog-numberheadings": "Automatisk numrerade rubriker",
+       "tog-numberheadings": "Automatiskt numrerade rubriker",
        "tog-showtoolbar": "Visa redigeringsverktygsraden",
        "tog-editondblclick": "Redigera sidor med dubbelklick",
        "tog-editsectiononrightclick": "Aktivera redigering av avsnitt genom högerklick på underrubriker",
        "myprivateinfoprotected": "Du har inte behörighet att redigera din privata information.",
        "mypreferencesprotected": "Du har inte behörighet att redigera dina inställningar.",
        "ns-specialprotected": "Specialsidor kan inte redigeras.",
-       "titleprotected": "Denna sidtitel har skyddats från att skapas av [[User:$1|$1]].\nDen angivna anledningen är \"''$2''\".",
+       "titleprotected": "Denna sidtitel har skyddats från att skapas av [[User:$1|$1]].\nDen angivna anledningen är <em>$2</em>.",
        "filereadonlyerror": "Det går inte att ändra filen \"$1\", eftersom fildatabasen \"$2\" är i skrivskyddat läge.\n\nDen systemadministratör som låste den angav följande anledning: \"$3\".",
        "invalidtitle-knownnamespace": "Ogiltig titel med namnrymden \"$2\" och texten \"$3\"",
        "invalidtitle-unknownnamespace": "Ogiltig titel med okänt namnrymdsnummer $1 och texten \"$2\"",
        "nocookieslogin": "{{SITENAME}} använder kakor för att logga in användare. Du har stängt av kakor i din webbläsare. Försök igen med stöd för kakor aktiverat.",
        "nocookiesfornew": "Användarkontot skapades inte, eftersom vi inte kunde bekräfta dess källa.\nSe till att du har aktiverat kakor, ladda om denna sida och försök igen.",
        "noname": "Du har angett ett ogiltigt användarnamn.",
-       "loginsuccesstitle": "Inloggningen lyckades",
+       "loginsuccesstitle": "Inloggad",
        "loginsuccess": "'''Du är nu inloggad på {{SITENAME}} som \"$1\".'''",
        "nosuchuser": "Det finns ingen användare med namnet \"$1\".\nAnvändarnamn är skiftlägeskänsliga.\nKontrollera din stavning, eller [[Special:UserLogin/signup|skapa ett nytt konto]].",
        "nosuchusershort": "Det finns ingen användare som heter \"$1\". Kontrollera att du stavat rätt.",
        "botpasswords-insert-failed": "Kunde inte lägga till botnamnet \"$1\". Har det redan lagts till?",
        "botpasswords-update-failed": "Kunde inte uppdatera botnamnet \"$1\". Har det raderats?",
        "botpasswords-created-title": "Botlösenord skapades",
-       "botpasswords-created-body": "Botlösenordet \"$1\" skapades.",
+       "botpasswords-created-body": "Botlösenordet för botnamnet \"$1\" till användaren \"$2\" skapades.",
        "botpasswords-updated-title": "Botlösenordet uppdaterades",
-       "botpasswords-updated-body": "Botlösenordet \"$1\" uppdaterades.",
+       "botpasswords-updated-body": "Botlösenordet för botnamnet \"$1\" till användaren \"$2\" uppdaterades.",
        "botpasswords-deleted-title": "Botlösenord raderades",
-       "botpasswords-deleted-body": "Botlösenordet \"$1\" raderades.",
+       "botpasswords-deleted-body": "Botlösenordet för botnamnet \"$1\" till användaren \"$2\" raderades.",
        "botpasswords-newpassword": "Det nya lösenordet att logga in för <strong>$1</strong> är <strong>$2</strong>. <em>Spara detta som framtida referens.</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider är inte tillgänglig.",
        "botpasswords-restriction-failed": "Begränsningar av botlösenord tillåter inte denna inloggning.",
        "newarticle": "(Ny)",
        "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å [$1 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.\nDärför måste vi använda den numeriska IP-adressen för att identifiera honom/henne.\nEn sådan IP-adress kan delas av flera användare.\nOm 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.\nDu 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": "Det finns just nu ingen text på denna sida.\nDu 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}} skapa denna sida]</span>.",
        "noarticletext-nopermission": "Det finns för tillfället ingen text på denna sida.\nDu kan [[Special:Search/{{PAGENAME}}|söka efter denna sidas titel]] på andra sidor,\neller <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 \"{{FULLPAGENAME}}\" finns inte.\n\nDetta orsakas vanligen av efter en gammal historiklänk till en sida som har raderats.\nDetaljer kan hittas i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} raderingsloggen].",
        "userpage-userdoesnotexist": "\"<nowiki>$1</nowiki>\" är inte ett registrerat användarkonto. Tänk efter om du vill skapa/redigera den här sidan.",
        "undo-summary-username-hidden": "Gör version $1 av en dold användare ogjord",
        "cantcreateaccounttitle": "Kan inte skapa konto",
        "cantcreateaccount-text": "[[User:$3|$3]] har blockerat den här IP-adressen ('''$1''') från att registrera konton.\n\nAnledningen till blockeringen var \"$2\".",
-       "cantcreateaccount-range-text": "IP-adresserna i intervallet '''$1''', som inkluderar din IP-adress ('''$4'''), har blockerats från att skapa konton av [[User:$3|$3]].\n\nAnledningen enligt $3 var ''$2''",
+       "cantcreateaccount-range-text": "IP-adresserna i intervallet <strong>$1</strong>, som inkluderar din IP-adress (<strong>$4</strong>), har blockerats från att skapa konton av [[User:$3|$3]].\n\nAnledningen enligt $3 var <em>$2</em>",
        "viewpagelogs": "Visa loggar för denna sida",
        "nohistory": "Den här sidan har ingen versionshistorik.",
        "currentrev": "Nuvarande version",
        "revdelete-unsuppress": "Ta bort begränsningar på återställda versioner",
        "revdelete-log": "Anledning:",
        "revdelete-submit": "Tillämpa på {{PLURAL:$1|vald version|valda versioner}}",
-       "revdelete-success": "'''Sidversionssynlighet har uppdaterats.'''",
+       "revdelete-success": "Sidversionssynlighet har uppdaterats.",
        "revdelete-failure": "'''Sidversionssynlighet kunde inte uppdateras:'''\n$1",
-       "logdelete-success": "'''Loggens synlighet har ställts in.'''",
+       "logdelete-success": "Loggens synlighet har ställts in.",
        "logdelete-failure": "'''Loggens synlighet kunde inte ställas in:'''\n$1",
        "revdel-restore": "ändra synlighet",
        "pagehist": "Sidhistorik",
        "recentchanges-label-bot": "Denna redigering gjordes av en bot",
        "recentchanges-label-unpatrolled": "Denna redigering har inte blivit patrullerad ännu",
        "recentchanges-label-plusminus": "Sidans storlek ändrades med detta antal byte",
-       "recentchanges-legend-heading": "'''Teckenförklaring:'''",
+       "recentchanges-legend-heading": "<strong>Teckenförklaring:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (se även [[Special:NewPages|listan över nya sidor]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Visa",
        "rcnotefrom": "Nedan visas {{PLURAL:$5|ändringen|ändringar}} sedan <strong>$3, $4</strong> (upp till <strong>$1</strong> ändringar visas).",
-       "rclistfrom": "Visa ändringar från och med $3 $2",
+       "rclistfrom": "Visa ändringar från och med $2 $3",
        "rcshowhideminor": "$1 mindre ändringar",
        "rcshowhideminor-show": "Visa",
        "rcshowhideminor-hide": "Dölj",
        "recentchangeslinked-page": "Sidnamn:",
        "recentchangeslinked-to": "Visa ändringar på sidor med länkar till den givna sidan istället",
        "recentchanges-page-added-to-category": "[[:$1]] lades till i kategorin",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] och {{PLURAL:$2|en sida|$2 sidor}} lades till i kategorin",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] och [[Special:WhatLinksHere/$1|{{PLURAL:$2|en sida|$2 sidor}}]] lades till i kategorin",
        "recentchanges-page-removed-from-category": "[[:$1]] togs bort från kategorin",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] och {{PLURAL:$2|en sida|$2 sidor}} togs bort från kategorin",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] och [[Special:WhatLinksHere/$1|{{PLURAL:$2|en sida|$2 sidor}}]] togs bort från kategorin",
        "autochange-username": "Automatisk MediaWiki-ändring",
        "upload": "Ladda upp fil",
        "uploadbtn": "Ladda upp fil",
        "backend-fail-read": "Kunde inte läsa filen ''$1''.",
        "backend-fail-create": "Kunde inte skapa filen $1.",
        "backend-fail-maxsize": "Kunde inte skapa filen $1 eftersom den är större än {{PLURAL:$2|en byte|$2 bytes}}.",
-       "backend-fail-readonly": "Lagringssystemet \"$1\" är för närvarande skrivskyddad. Den angivna anledningen är: \"$2\"",
+       "backend-fail-readonly": "Lagringssystemet \"$1\" är för närvarande skrivskyddat. Den angivna anledningen var: <em>$2</em>",
        "backend-fail-synced": "Filen \"$1\" är i ett inkonsekvent tillstånd inom de interna lagringssystemen",
        "backend-fail-connect": "Kunde inte ansluta till lagringssystemet \"$1\".",
        "backend-fail-internal": "Ett okänt fel uppstod i lagringssystemet \"$1\".",
        "uploadstash-summary": "Denna sida ger tillgång till filer som är uppladdade (eller håller på att laddas upp) men som ännu inte är publicerade till wikin. Dessa filer är inte synliga för någon annan än den användare som laddade upp dem.",
        "uploadstash-clear": "Rensa temporärt lagrade filer",
        "uploadstash-nofiles": "Du har inga temporärt lagrade filer.",
-       "uploadstash-badtoken": "Utförandet av den åtgärden misslyckades, kanske för att din redigeringsrättigheter löpt ut. Försök igen.",
+       "uploadstash-badtoken": "Misslyckades att utföra åtgärden. Dina redigeringsrättigheter har kanske löpt ut. Försök igen.",
        "uploadstash-errclear": "Rensning av filerna misslyckades.",
        "uploadstash-refresh": "Uppdatera listan över filer",
        "invalid-chunk-offset": "Ogiltig segmentsförskjutning",
        "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.",
        "deleteprotected": "Du kan inte radera denna sida eftersom den är skyddad.",
-       "deleting-backlinks-warning": "'''Varning:'''\n[[Special:WhatLinksHere/{{FULLPAGENAME}}|Andra sidor]] länkar till eller inkluderar sidan som du är på väg att radera.",
+       "deleting-backlinks-warning": "<strong>Varning:</strong>\n[[Special:WhatLinksHere/{{FULLPAGENAME}}|Andra sidor]] länkar till eller inkluderar sidan som du är på väg att radera.",
        "rollback": "Rulla tillbaka ändringar",
        "rollbacklink": "rulla tillbaka",
        "rollbacklinkcount": "rulla tillbaka $1 {{PLURAL:$1|redigering|redigeringar}}",
        "rollbackfailed": "Tillbakarullning misslyckades",
        "cantrollback": "Det gick inte att rulla tillbaka, då sidan endast redigerats av en användare.",
        "alreadyrolled": "Det gick inte att rulla tillbaka den senaste redigeringen av [[User:$2|$2]] ([[User talk:$2|diskussion]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) på sidan [[:$1|$1]]. Någon annan har redan rullat tillbaka eller redigerat sidan.\n\nSidan ändrades senast av [[User:$3|$3]] ([[User talk:$3|diskussion]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]).",
-       "editcomment": "Redigeringskommentaren var: \"''$1''\".",
+       "editcomment": "Redigeringskommentaren var: <em>$1</em>.",
        "revertpage": "Återställde redigeringar av  [[Special:Contributions/$2|$2]] ([[User talk:$2|användardiskussion]]) till senaste versionen av [[User:$1|$1]]",
        "revertpage-nouser": "Återställde redigeringar av en dold användare till den senaste versionen av {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Återställde ändringar av $1;\nändrade tillbaka till senaste version av $2.",
        "changecontentmodel-title-label": "Sidtitel",
        "changecontentmodel-model-label": "Ny innehållsmodell",
        "changecontentmodel-reason-label": "Orsak:",
+       "changecontentmodel-submit": "Ändra",
        "changecontentmodel-success-title": "Innehållsmodellen ändrades",
        "changecontentmodel-success-text": "Innehållstypen för [[:$1]] har ändrats.",
        "changecontentmodel-cannot-convert": "Innehållet på [[:$1]] kan inte konverteras till typen $2.",
        "changecontentmodel-nodirectediting": "Innehållsmodellen $1 stöder inte direkt redigering",
        "log-name-contentmodel": "Ändringslogg för innehållsmodellen",
        "log-description-contentmodel": "Händelser som är relaterade till en sidas innehållsmodeller",
+       "logentry-contentmodel-new": "$1 {{GENDER:$2|skapade}} sidan $3 med den icke-standardiserade innehållsmodellen \"$5\"",
        "logentry-contentmodel-change": "$1 {{GENDER:$2|ändrade}} innehållsmodellen för sidan $3 från \"$4\" till \"$5\"",
        "logentry-contentmodel-change-revertlink": "återställ",
        "logentry-contentmodel-change-revert": "återställ",
        "tags-edit-revision-legend": "Lägg eller ta bort märken från {{PLURAL:$1|denna sidversion|alla $1 sidversioner}}",
        "tags-edit-logentry-legend": "Lägg till eller ta bort märken från {{PLURAL:$1|denna loggpost|alla $1 loggposter}}",
        "tags-edit-existing-tags": "Befintliga märken:",
-       "tags-edit-existing-tags-none": "''Inga''",
+       "tags-edit-existing-tags-none": "<em>Inga</em>",
        "tags-edit-new-tags": "Nya märken:",
        "tags-edit-add": "Lägg till dessa märken:",
        "tags-edit-remove": "Ta bort dessa märken:",
        "default-skin-not-found": "Ojsan! Standardutseendet för din wiki, definierad i <code dir=\"ltr\">$wgDefaultSkin</code> som <code>$1</code>, är inte tillgängligt.\n\nDin installation verkar innehålla följande {{PLURAL:$4|utseende|utseenden}}. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manualen: Utseendeinställningar] för information om hur du aktiverar {{PLURAL:$4|det|dem}} och hur standard väljs.\n\n$2\n\n; Om du precis installerat MediaWiki:\n: Du installerade troligen från git, eller direkt från källkoden via någon annan metod. Detta är normalt. Försök att installera några utseenden från [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org:s utseendekatalog], genom att:\n:* Ladda ner [https://www.mediawiki.org/wiki/Download tarball-installeraren], som kommer med flera utseenden och tillägg. Du kan klippa och klistra in <code>skins/</code>-katalogen från den.\n:* Ladda ner individuella tarballs med utseenden från [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Använd Git för att ladda ner utseenden].\n: Att göra detta borde inte påverka ditt git-centralförvar om du är en MediaWiki-utvecklare. \n\n; Om du precis har uppgraderat MediaWiki:\n: MediaWiki 1.24 och nyare aktiverar ej längre automatiskt installerade utseenden (se [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Automatisk identifiering av utseenden]). Du kan klistra in följande {{PLURAL:$5|rad|rader}} i <code>LocalSettings.php</code> för att aktivera {{PLURAL:$5|det installerade utseendet|alla installerade utseenden}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Om du precis har modifierat <code>LocalSettings.php</code>:\n: Dubbelkolla namnen för utseendena för att identifiera stavfel.",
        "default-skin-not-found-no-skins": "Ojsan! Standardutseendet för din wiki, definierad i <code>$wgDefaultSkin</code> som <code>$1</code>, är inte tillgängligt.\n\nDu har inga installerade utseenden.\n\n; Om du precis installerat eller uppdaterat MediaWiki:\n: Du installerade troligen från git, eller direkt från källkoden via någon annan metod. Detta är att förvänta. MediaWiki 1.24 och nyare inkluderar inte några utseenden i det huvudsakliga centralförvaret. Försök att installera några utseenden från [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org:s utseendekatalog], genom att:\n:* Ladda ner [https://www.mediawiki.org/wiki/Download tarball-installeraren], som kommer med flera utseenden och tillägg. Du kan klipp-och-klistra in <code dir=\"ltr\">skins/</code>-katalogen från den.\n:* Ladda ner individuella tarballs med utseende från [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Använd Git för att ladda ner utseenden].\n: Att göra detta borde inte påverka ditt git-centralförvar om du är en MediaWiki-utvecklare. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manualen: Utseendeinställningar] för information om hur utseenden aktiveras och hur standardutseendet väljs.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiverad)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''inaktiverad''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>inaktiverad</strong>)",
        "mediastatistics": "Mediastatistik",
        "mediastatistics-summary": "Statistik om uppladdade filtyper. Detta inkluderar bara den senaste versionen av en fil. Äldre eller raderade filversioner exkluderas.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte}} ($2; $3%)",
index 8c5c246..532f1ab 100644 (file)
        "myprivateinfoprotected": "Huna ruhusa kuhariri habari yako ya binafsi.",
        "mypreferencesprotected": "Huna ruhusa kuhariri mapendekezo yako.",
        "ns-specialprotected": "Kurasa maalumu haziwezi kuhaririwa.",
-       "titleprotected": "Jina hili limekingwa lisiumbwe na [[User:$1|$1]].\nSababu zilizotolewa ni \"''$2''\".",
+       "titleprotected": "Jina hili limekingwa lisiumbwe na [[User:$1|$1]].\nSababu zilizotolewa ni <em>$2</em>.",
        "filereadonlyerror": "Haiwezi kurekebisha faili \"$1\" kwa sababu faili \"$2\" iko katika hali ya kusoma tu.\n\nMsimamizi aliyeifunga  hakutoa sababu yoyote: \"$3\".",
        "invalidtitle-knownnamespace": "Kichwa ni batili na eneo la jina \"$2\" na maandishi \"$3\"",
        "invalidtitle-unknownnamespace": "Kichwa ni batili na haijulikani eneo la jina $1 na maandishi \"$2\"",
        "createaccountreason": "Sababu:",
        "createacct-reason": "Sababu",
        "createacct-reason-ph": "Mbona unaunda akaunti mpya",
-       "createacct-captcha": "Kuangalia usalama",
-       "createacct-imgcaptcha-ph": "Ingiza maandishi unayoyaona hapo juu",
        "createacct-submit": "Unda akaunti yako",
        "createacct-another-submit": "Unda akaunti nyingine",
        "createacct-benefit-heading": "{{SITENAME}} imetengenezwa na watu kama wewe.",
        "passwordreset-emailtext-ip": "Kuna mtu (huenda ikawa ni wewe, kutoka anwani ya IP $1) aliyeomba neno la siri la akaunti yako liwekwe upya katika {{SITENAME}} ($4). {{PLURAL:$3|Akaunti inayofuata imeunganishwa|Akaunti zinazofuata zimeunganishwa}} na anwani ya barua pepe hii:\n\n$2\n\n{{PLURAL:$3|Neno la siri hili litakwisha|Maneno ya siri haya yatakwisha}} baada ya siku {{PLURAL:$5|$5}}.\nUnafaa kuingia sasa na uchague neno jipya la siri. Kama mtu mwingine ameomba hili, au ikiwa umekumbuka neno lako la siri na hutaki kulibadilisha tena, basi usijali ujumbe huu, na uendelee kutumia neno la siri lako la zamani.",
        "passwordreset-emailtext-user": "Mtumiaji $1 kwenye {{SITENAME}} ameomba neno la siri la akaunti yako liwekwe upya katika {{SITENAME}} ($4). {{PLURAL:$3|Akaunti inayofuata imeunganishwa|Akaunti zinazofuata zimeunganishwa}} na anwani ya barua pepe hii:\n\n$2\n\n{{PLURAL:$3|Neno la siri hili litakwisha|Maneno ya siri haya yatakwisha}} baada ya siku {{PLURAL:$5|one day|$5 siku}}.\nTafadhali ingia sasa na uchague neno jipya la siri. Kama mtu mwingine ameomba hili, au ikiwa umekumbuka neno lako la siri na hutaki kulibadilisha tena, basi usijali ujumbe huu, na uendelee kutumia neno la siri lako la zamani.",
        "passwordreset-emailelement": "Jina la mtumiaji: \n$1\n\nNeno la siri la muda: \n$2",
-       "passwordreset-emailsent": "Barua pepe ya ukumbusho wa neno la siri imetumwa.",
+       "passwordreset-emailsentemail": "Barua pepe ya ukumbusho wa neno la siri imetumwa.",
        "passwordreset-emailsent-capture": "Barua pepe ya ukukumbusho wa neno la siri imetumwa, ambayo inaonekana hapo chini.",
        "passwordreset-emailerror-capture": "Barua pepe ya ukukumbusho wa neno la siri imetengenezwa, ambayo inaonekana hapo chini, lakini kuituma kwa mtumiaji {{GENDER:$2|user}} kumeshindikana: $1",
        "changeemail": "Badilisha anwani ya barua pepe",
        "prefs-tokenwatchlist": "Ishara",
        "prefs-diffs": "Tofauti",
        "prefs-help-prefershttps": "Upendeleo huu utachukua athari kwenye kuingia kwako kujayo.",
-       "email-address-validity-valid": "Anwani ya barua pepe inaonekana kuwa sawa",
-       "email-address-validity-invalid": "Ingiza anwani halisi ya barua pepe",
        "userrights": "Usimamizi wa wezo za mtumiaji",
        "userrights-lookup-user": "Kusimamia kundi za watumiaji",
        "userrights-user-editname": "Andika jina la mtumiaji:",
        "recentchanges-label-bot": "Sahihisho hili lilitekelezwa na bot",
        "recentchanges-label-unpatrolled": "Haririo hili bado halijafanyiwa doria",
        "recentchanges-label-plusminus": "Ukubwa ukurasa kubadilishwa na hii idadi ya baiti",
-       "recentchanges-legend-heading": "'''Simulizi:'''",
+       "recentchanges-legend-heading": "<strong>Simulizi:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (pia tazama [[Special:NewPages|orodha ya kurasa mpya]])",
        "rcnotefrom": "Hapo chini {{PLURAL:$5|is the change|yaonekana mabadiliko}} tangu <strong>$3,$4</strong> (hadi <strong>$1</strong>tunaonyesha).",
        "rclistfrom": "Onyesha mabadiliko mapya kuanzia $3 $2",
        "watchthisupload": "Kufuatilia faili hili",
        "filewasdeleted": "Faili lenye jina hili limeshapakiwa halafu limefutwa.\nUnapaswa kuangalia $1 kabla hujapakia tena.",
        "filename-bad-prefix": "Jina la faili unalolipakia huanza na '''\"$1\"''', ambalo ni jina lisilo na maana yanayoeleweka kirahisi, ya aina inayotolewa huwa na kamera dijiti.\nTafadhali chagua jina linaloeleweka kirahisi kwa ajili ya faili lako.",
-       "upload-success-subj": "Upakiaji ulifaulu",
-       "upload-success-msg": "Umefaulu kupakia faili kutoka kwa [$2]. Faili linapatikana hapa: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Hitilafu ya kupakia",
-       "upload-failure-msg": "Kulikuwa na tatizo ulipopakia faili kutoka kwa [$2]:\n\n$1",
-       "upload-warning-subj": "Ilani ya kupakia",
-       "upload-warning-msg": "Kulitokea tatizo na upakiaji wako kuanzia [$2]. Unaweza kurudi katika [[Special:Upload/stash/$1|fomu ya kupakia]] ili kurekebisha tatizo hili.",
        "upload-proto-error": "Itifaki isio sahihi",
        "upload-proto-error-text": "Upakiaji wa mbali lazima URL ianze na <code>http://</code> au <code>ftp://</code>.",
        "upload-file-error": "Hitilafu ya ndani",
        "suppress": "Uangalizi",
        "apihelp": "Usaisiz wa API",
        "apihelp-no-such-module": "Moduli \"$ 1\" haikupatikana.",
+       "apisandbox-submit": "Weka ombi",
+       "apisandbox-reset": "Tandua",
+       "apisandbox-examples": "Mfano",
+       "apisandbox-results": "Tokeo",
        "booksources": "Vyanzo vya vitabu",
        "booksources-search-legend": "Tafuta mahali panopopatikana kitabu",
        "booksources-search": "Tafuta",
        "rollbacklink": "rejesha",
        "rollbackfailed": "Haikufaulu kurejesha",
        "cantrollback": "Haiwezekana kujesha sahihisho;\nukurasa huu una mhariri mmoja tu.",
-       "editcomment": "Muhtasari wa kuhariri ilikuwa: \"''$1''\".",
+       "editcomment": "Muhtasari wa kuhariri ilikuwa: <em>$1</em>.",
        "revertpage": "Masahihisho aliyefanya [[Special:Contributions/$2|$2]] ([[User talk:$2|Majadiliano]]) yalirejeshwa hadi sahihisho la mwisho na [[User:$1|$1]]",
        "revertpage-nouser": "Masahihisho ya mtumiaji (jina lake limefichwa) yamerudishwa hadi pitio la mwisho lililotengenezwa na [[User:$1|$1]].",
        "rollback-success": "Masahihisho aliyeyafanya $1 yalirejeshwa hadi kufika sahihisho la mwisho aliyefanya $2.",
        "movenosubpage": "Ukurasa huu hauna kurasa ndogo.",
        "movereason": "Sababu:",
        "revertmove": "rejesha",
-       "delete_and_move": "Kufuta na kuhamisha",
        "delete_and_move_confirm": "Ndiyo, ukurasa ufutwe",
        "immobile-source-namespace": "Kurasa haziwezi kuhamisha ndani ya eneo la wiki la \"$1\"",
        "immobile-target-namespace": "Kurasa haziwezi kuhamishwa zifike eneo la wiki la \"$1\"",
        "action-pagelang": "badilisha lugha ya ukurasa",
        "log-name-pagelang": "Badili lugha ya kumbukumbu",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (imewezeshwa)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''imelemazwa''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>imelemazwa</strong>)",
        "mediastatistics": "Takwimu za media",
        "mediastatistics-table-mimetype": "Aina ya MIME",
        "mediastatistics-table-count": "Idadi ya mafaili",
index f31ac1b..ee91968 100644 (file)
        "myprivateinfoprotected": "Ńy mosz uprowńyń coby sprowjić swoje prywatne dane.",
        "mypreferencesprotected": "Ńy mosz uprowńyń coby sprowjić swoje sztalowańo.",
        "ns-specialprotected": "Ńy idźe sprowjać zajtůw we przestrzyni mjan {{ns:special}}.",
-       "titleprotected": "Wćepańy sam zajty uo takim mjańe zawar [[User:$1|$1]].\nPowůd zawarćo: ''$2''.",
+       "titleprotected": "Wćepańy sam zajty uo takim mjańe zawar [[User:$1|$1]].\nPowůd zawarćo: <em>$2</em>.",
        "filereadonlyerror": "Ńy idźe pomjyńać plika \"$1\" abo repozytorjum \"$2\" terozki je zawarte.\n\nAdministrator kery zawarł wćepał kůmyntorz: \"$3\".",
        "invalidtitle-knownnamespace": "Felerne mjano \"$3\" w przestrzeńy \"$2\".",
        "invalidtitle-unknownnamespace": "Felerne mjano ze ńyznomům nůmerům raumu mjan $1: \"$2\"",
        "recentchanges-label-bot": "To sprowjyńy bůło zrobjůne uod bota",
        "recentchanges-label-unpatrolled": "To sprowjyńy ńy bůło jeszcze uowjerzůne",
        "recentchanges-label-plusminus": "Půmjyńono mjara zajty we bajtach",
-       "recentchanges-legend-heading": "'''Legynda:'''",
+       "recentchanges-legend-heading": "<strong>Legynda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (uobejrzij tyż [[Special:NewPages|lista nowych zajt]])",
        "rcnotefrom": "Půńiżej pokazano půmjyńańo zrobjůne pů <b>$2</b> (ńy wjyncyj kej <b>$1</b> pozycji).",
        "rclistfrom": "Ukoż půmjyńańa uod $3 $2",
        "rollbackfailed": "Ńy idźe wycofać sprowjyńo",
        "cantrollback": "Ńy idże cofnůńć pomjyńyńo, sam je ino jedna wersyja tyi zajty.",
        "alreadyrolled": "Ńy idźe lů zajty [[:$1|$1]] cofnůńć uostatńygo pomjyńeńa, kere wykonoł [[User:$2|$2]] ([[User talk:$2|godka]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]).\nKto inkszy zdůnżůł już to zrobić abo wprowadźił własne poprowki do treśći zajty.\n\nAutorym ostatńygo pomjyńyńo je terozki [[User:$3|$3]] ([[User talk:$3|godka]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Sprowjyńe uopisano: „''$1''”.",
+       "editcomment": "Sprowjyńe uopisano: <em>$1</em>.",
        "revertpage": "Wycofano sprowjyńe użytkowńika [[Special:Contributions/$2|$2]] ([[User talk:$2|godka]]). Autor prziwrůcůnej wersyji to [[User:$1|$1]].",
        "rollback-success": "Wycofano sprowjyńa użytkowńika $1.\nPrziwrůcůno uostatńo wersyja autorstwa  $2.",
        "sessionfailure": "Feler weryfikacyji zalůgowańo.\nPolecyńy zostoło anulowane, coby ůńiknůńć przechwycyńo sesyji.\n\nNaćiś knefel „cofej”, przeładuj zajta, a potym zaś wydej polecyńy",
index da74677..37ab024 100644 (file)
                        "Matma Rex",
                        "Anj.balaji",
                        "Dineshkumar Ponnusamy",
-                       "Sharanrajindia"
+                       "Sharanrajindia",
+                       "Maathavan",
+                       "தமிழ்க்குரிசில்"
                ]
        },
        "tog-underline": "இணைப்புகளுக்கு அடிக்கோடிடு",
        "tog-hideminor": "அண்மைய மாற்றங்களில் சிறிய தொகுப்புகளை மறை",
-       "tog-hidepatrolled": "à®\85ணà¯\8dà®®à¯\88ய à®®à®¾à®±à¯\8dà®±à®\99à¯\8dà®\95ளிலà¯\8d à®ªà®²à®®à¯\81à®±à¯\88 à®ªà®¾à®°à¯\8dவà¯\88யிட்ட தொகுப்புகளை மறைக்கவும்",
+       "tog-hidepatrolled": "à®\85ணà¯\8dà®®à¯\88ய à®®à®¾à®±à¯\8dà®±à®\99à¯\8dà®\95ளிலà¯\8d à®°à¯\8bநà¯\8dதிட்ட தொகுப்புகளை மறைக்கவும்",
        "tog-newpageshidepatrolled": "பலமுறை பார்வையிட்ட பக்கங்களைப் புதியபக்கங்களின் பட்டியலில் காட்டவேண்டாம்.",
+       "tog-hidecategorization": "பக்கத்தின் பகுப்பாக்கத்தினை மறை",
        "tog-extendwatchlist": "அனைத்து பொருத்தமான மாற்றங்களைக் காட்டுமாறு கவனிப்புப் பட்டியலை விரிவாக்கு",
        "tog-usenewrc": "அண்மைய மாற்றங்கள் மற்றும் கவனிப்புப் பட்டியல் பக்கத்தில் மாற்றங்களை பக்கத்தை பொறுத்து குழுவாக்கு",
        "tog-numberheadings": "தலைப்புகளுக்கு தானியங்கி இலக்கமிடு",
        "tog-watchlisthidebots": "தானியங்கித் தொகுப்புக்களைக் கவனிப்புப் பட்டியலிலிருந்து மறை",
        "tog-watchlisthideminor": "சிறு தொகுப்புக்களைக் கவனிப்புப் பட்டியலிலிருந்து மறை",
        "tog-watchlisthideliu": "கவனிப்புப் பட்டியலில் புகுபதிகை செய்த பயனர்களின் தொகுப்புக்களை மறைக்கவும்.",
+       "tog-watchlistreloadautomatically": "வைடிகட்டுவான் மாற்றப்பட்டதும் கவனிப்புபட்டியலை தானியக்கமாக மறுநினைவேற்று (ஜாவாகிறிட்டு தேவை)",
        "tog-watchlisthideanons": "கவனிப்புப் பட்டியலில் அடையாளம் காட்டாத பயனர்களின் தொகுப்புக்களை மறைக்கவும்.",
        "tog-watchlisthidepatrolled": "ரோந்திடப்பட்ட தொகுப்புக்களைக் கவனிப்புப் பட்டியலிலிருந்து மறை",
+       "tog-watchlisthidecategorization": "பக்கத்தின் பகுப்பாக்கத்தினை மறை",
        "tog-ccmeonemails": "ஏனைய பயனர்களுக்கு நான் அனுப்பும் மின்னஞ்சல்களின் நகலொன்றை எனக்கு அனுப்பு",
        "tog-diffonly": "மாற்றங்களை ஒப்பிடும் போது அதன் கீழ் பக்க உள்ளடக்கத்தைக் காட்டாதே",
        "tog-showhiddencats": "மறைக்கப்பட்ட பகுப்புகளைக் காட்டு",
        "march": "மார்ச்",
        "april": "ஏப்ரல்",
        "may_long": "மே",
-       "june": "à®\9cூன்",
-       "july": "à®\9cூலை",
-       "august": "à®\86à®\95ஸà¯\8dà®\9fà¯\8d",
+       "june": "à®\9aூன்",
+       "july": "à®\9aூலை",
+       "august": "à®\86à®\95தà¯\8dதà¯\81",
        "september": "செப்டம்பர்",
        "october": "அக்டோபர்",
        "november": "நவம்பர்",
        "october-date": "அக்டோபர் $1",
        "november-date": "நவம்பர் $1",
        "december-date": "டிசம்பர் $1",
+       "period-am": "காலை",
+       "period-pm": "மாலை",
        "pagecategories": "{{PLURAL:$1|பகுப்பு|பகுப்புகள்}}",
        "category_header": "\"$1\" பகுப்பிலுள்ள பக்கங்கள்",
        "subcategories": "துணைப் பகுப்புகள்",
        "missingarticle-rev": "(திருத்தம்#: $1)",
        "missingarticle-diff": "(வேறுபாடு: $1, $2)",
        "readonly_lag": "இரண்டாம் நிலை தரவுத்தளங்கள் தலைமை தரவுத்தளத்துடன் இணைந்துக் கொள்ளும் வரை தரவுத்தளம் தானியகக்மாக பூட்டப்பட்டுள்ளது",
+       "nonwrite-api-promise-error": "'Promise-Non-Write-API-Action' HTTP தலைப்பு அனுப்பப்பட்டது ஆனால் கோரிக்கை API module எழுதல்.",
        "internalerror": "உள்ளகத் தவறு",
        "internalerror_info": "உள்ளகத் தவறு: $1",
        "internalerror-fatal-exception": "இடரார்ந்த விதிவிலக்கு வகை \"$1\"",
        "myprivateinfoprotected": "உங்களின் தனிப்பட்ட தகவல்களை தொகுக்கும் அனுமதி உங்களுக்கு இல்லை.",
        "mypreferencesprotected": "உங்களின் தனிப்பட்ட தகவல்களை தொகுக்கும் அனுமதி உங்களுக்கு இல்லை.",
        "ns-specialprotected": "சிறப்புப் பக்கங்களைத் தொகுக்க முடியாது.",
-       "titleprotected": "பயனர் [[User:$1|$1]] இத்தலைப்பு உருவாக்கப்படுவதை தவிர்க்கும் வகையில் தடுத்துள்ளார்.\nகொடுக்கப்பட்டக் காரணம் ''$2''.",
+       "titleprotected": "பயனர் [[User:$1|$1]] இத்தலைப்பு உருவாக்கப்படுவதை தவிர்க்கும் வகையில் தடுத்துள்ளார்.\nகொடுக்கப்பட்டக் காரணம் <em>$2</em>.",
        "filereadonlyerror": "\"$1\" கோப்பைத் திருத்த முடியவில்லை ஏனெனில் கோப்புப் பெட்டகம் \"$2\" படிக்க-மட்டும் வகையில் உள்ளது. அதனை பூட்டிய நிர்வாகி பின்வரும் விளக்கத்தை அளித்துள்ளார்: \"$3\"",
        "invalidtitle-knownnamespace": "பெயரிடைவெளி ' $2 '' மற்றும் உரை '' $3 '' கொன்ட தலைப்பு செல்லாது",
        "invalidtitle-unknownnamespace": "அறியப்படாத பெயரிடைவெளி $1 மற்றும் உரை $2 கொண்ட தலைப்பு செல்லாது",
        "virus-scanfailed": "வருடல் நடைபெறவில்லை (குறியீடு $1)",
        "virus-unknownscanner": "அறியப்படாத வைரசெதிர்ப்பு:",
        "logouttext": "'''நீங்கள் இப்பொழுது விடுபதிகையில் உள்ளீர்கள்.'''\n\nஉங்கள் உலாவியின் இடைமாற்று நீக்கப்படும் வரை சில பக்கங்கள் தொடர்ந்தும் புகுபதிகையில் உள்ளது போன்றே காட்சி தரும் என்பதைக் கவனிக்கவும்.",
+       "cannotlogoutnow-title": "இப்பொழுது விடுபதிகை செய்ய இயலாது.",
+       "cannotlogoutnow-text": "$1-ஐ பயன்படுத்தும் பொழுது விடுபதிகை சாத்தியம் அல்ல.",
        "welcomeuser": "வருக $1",
        "welcomecreation-msg": "உங்களுக்கான பயனர் கணக்கு உருவாக்கப்பட்டுள்ளது. உங்களுக்கேற்றவாறு [[Special:Preferences|{{SITENAME}} விருப்பத்தேர்வுகளை]] மாற்றிக் கொள்ள மறவாதீர்கள்.",
        "yourname": "பயனர் பெயர்:",
        "remembermypassword": "எனது கடவுச்சொல்லை (கூடியது $1 {{PLURAL:$1|நாள்|நாட்கள்}}) அமர்வுகளிடையே நினைவில் வைத்திருக்கவும்.",
        "userlogin-remembermypassword": "இடுபதிந்தே இருக்கவிடவும்",
        "userlogin-signwithsecure": "பாதுகாப்பான தொடர்பை உபயோகிக்கவும்",
+       "cannotloginnow-title": "இப்பொழுது விடுபதிகை செய்ய இயலாது.",
+       "cannotloginnow-text": "$1-ஐ பயன்படுத்தும் பொழுது விடுபதிகை சாத்தியம் அல்ல.",
        "yourdomainname": "உங்கள் உரிமைப்பரப்பு:",
        "password-change-forbidden": "நீங்கள் விக்கிகளில் கடவுச் சொற்களை மாற்ற முடியாது",
        "externaldberror": "வெளி உறுதிப்படுத்தலில் ஏற்பட்ட தவறு காரணமாக உங்கள் வெளி கணக்கை இற்றைப்படுத்த முடியாது.",
        "createacct-benefit-body2": "{{PLURAL:$1|பக்கம்|பக்கங்கள்}}",
        "createacct-benefit-body3": "அண்மைய {{PLURAL:$1|பங்களிப்பாளர்|பங்களிப்பாளர்கள்}}",
        "badretype": "நீங்கள் பதிந்த கடவுச்சொற்கள்  பொருந்தவில்லை.",
+       "usernameinprogress": "இந்த பயனர் கணக்கு உருவாக்கம் ஏற்கனவே தொடங்கிவிட்டது. தயவு செய்து பொறுக்கவும்.",
        "userexists": "உள்ளிட்ட பயனர்பெயர் ஏற்கனவே உபயோகத்தில் உள்ளது.\nதயவுகூர்ந்து வேறு பெயரை தேர்ந்தெடுக்கவும்.",
        "loginerror": "புகுபதிகைத் தவறு",
        "createacct-error": "கணக்கு உருவாக்குதலில் பிழை",
        "wrongpasswordempty": "நீங்கள் வெற்றுக் கடவுச் சொல்லை அளித்திருக்கிறீர்கள். திரும்ப முயலவும்.",
        "passwordtooshort": "கடவுச்சொற்களில் குறைந்தது {{PLURAL:$1|1 எழுத்து முதல் |$1 எழுத்துக்களாவது}} இருக்க வேண்டும்.",
        "passwordtoolong": "கடவுச்சொற்கள் {{PLURAL:$1|1 எழுத்து|$1 எழுத்துக்களை}} விட அதிகமாக இருக்க முடியாது.",
+       "passwordtoopopular": "பொதுவாக தெரிவுசெய்யப்படும் கடவுச்சொல்லை பயன்படுத்த இயலாது. தயவு செய்து வேறொரு தனித்துவமான கடவுச்சொல்லை தெரிவுசெய்க.",
        "password-name-match": "உங்கள் பயனர் பெயரிலிருந்து உங்கள் கடவுச்சொல் முற்றிலும் மாறுபட்டிருக்க வேண்டும்.",
        "password-login-forbidden": "இந்த பயனர்பெயர் மற்றும் கடவுச்சொல்லை உபயோகிப்பது தடைசெய்யப்பட்டுள்ளது.",
        "mailmypassword": "கடவுச்சொல்லை மீட்டமை",
        "loginlanguagelabel": "மொழி: $1",
        "suspicious-userlogout": "உங்கள் விடுபதிகை கோரிக்கை மறுக்கப்பட்டது ஏனென்றால் அது அறுபட்ட உலாவி அல்லது மாற்று இடைக்கிடங்கியால் அனுப்பப்பட்டுள்ளது.",
        "createacct-another-realname-tip": "உண்மையான பெயர் கட்டாயமற்றது.\nநீங்கள் இதை கொடுத்தால் உங்கள் ஆக்கங்களுக்கான உரிமையளிப்புகளின் போது இது பயன்படும்.",
-       "pt-login": "பà¯\81à®\95à¯\81பதிà®\95ை",
+       "pt-login": "à®\89ளà¯\8dநà¯\81à®´ை",
        "pt-login-button": "புகுபதிகை",
        "pt-createaccount": "புதிய கணக்கை உருவாக்கவும்",
        "pt-userlogout": "விடுபதிகை",
        "resetpass_submit": "கடவுச்சொல்லை பதிவுசெய்து புகுபதிகை செய்",
        "changepassword-success": "உங்களது கடவுச்சொல் வெற்றிகரமாக மாற்றப்பட்டுள்ளது!",
        "changepassword-throttled": "தாங்கள் மிக அண்மையில் பலமுறை புகுபதிகை செய்ய முயற்சி செய்துள்ளீர்கள்.\nமீண்டும் முயற்சிக்கும் முன் $1 காத்திருக்கவும்.",
+       "botpasswords": "தானியங்கி கடவுச்சொற்கள்",
+       "botpasswords-disabled": "தானியங்கி கடவுச்சொற்கள் பயன்பாட்டில் இல்லை.",
+       "botpasswords-no-central-id": "தானியங்கி கடவுச்சொல்லை பயன்படுத்த, நீங்கள் கட்டாயம் ஓரு மத்தியப்படுத்தப்பட்ட கணக்கில் புகுபதிகை செய்திருக்க வேண்டும்.",
+       "botpasswords-existing": "தானியங்கி கடவுச்சொல் உள்ளது.",
+       "botpasswords-createnew": "புதிய தானியங்கி கடவுச்சொல்லை உருவாக்கவும்",
+       "botpasswords-editexisting": "ஏற்கனவே உள்ள தானியங்கி கடவுச்சொல்லை தொகுக்கவும்",
+       "botpasswords-label-appid": "தானியங்கியின் பெயர்:",
+       "botpasswords-label-create": "உருவாக்கவும்",
+       "botpasswords-label-update": "புதுப்பிக்கவும்",
+       "botpasswords-label-cancel": "விட்டுவிடு",
+       "botpasswords-label-delete": "நீக்குக",
+       "botpasswords-label-resetpassword": "கடவுச்சொலை மீளமை",
+       "botpasswords-label-grants": "பொருந்தும் மானியங்கள்:",
+       "botpasswords-help-grants": "ஒவ்வொரு மானியம் ஏற்கனவே உள்ள பயனர் கணக்குக்கு வரையறுக்கப்பட்ட பயனர் உரிமைகள் அணுக கொடுக்கிறது. மேலதிக விபரங்ளுக்கு [[சிறப்பு:ListGrants|மானியங்களின் அட்டவணையை]] பார்க்க.",
+       "botpasswords-label-restrictions": "பயன்பாட்டு வரையறைகள்:",
+       "botpasswords-label-grants-column": "வழங்கப்பட்டது",
+       "botpasswords-bad-appid": "\"$1\" என்ற தானியங்கி பெயர் பயன்படாதது.",
+       "botpasswords-insert-failed": "\"$1\" என்ற தானியங்கி பெயரை இணைக்க முடியவில்லை. ஏற்கனவே இருக்குமோ?",
+       "botpasswords-update-failed": "\"$1\" என்ற தானியங்கி பெயரை புதிப்பிக்க முடியவில்லை. அது நீக்கப்பட்டதா?",
+       "botpasswords-created-title": "தானியங்கி கடவுச்சொல் உருவாக்கப்பட்டது.",
+       "botpasswords-created-body": "\"$1\"-க்கான தானியங்கி கடவுச்சொல் முழுமையாக உருவாக்கப்பட்டது.",
+       "botpasswords-updated-title": "தானியங்கி கடவுச்சொல் புதுப்பிக்கப்பட்டது",
+       "botpasswords-updated-body": "\"$1\" தானியங்கி கடவுச்சொல் முழுமையாக புதிப்பிக்கப்பட்டது.",
+       "botpasswords-deleted-title": "தானியங்கி கடவுச்சொல் நீக்கப்பட்டது",
+       "botpasswords-deleted-body": "\"$1\"-க்கான தானியங்கி கடவுச்சொல் நீக்கப்பட்டது.",
+       "botpasswords-newpassword": "<strong>$1</strong>-இற்கு புகுபதிகை செய்வதற்கான புதிய கடவுச்சொல் <strong>$2</strong> ஆகும். <em>தயவு செய்து வருங்கால மேற்கோளுக்கு இதனை பதிக.</em>",
+       "botpasswords-no-provider": "தானியங்கிகடவுச்சொல்அமர்வுவழங்குநர் பயன்பாட்டில் இல்லை.",
+       "botpasswords-restriction-failed": "தானியங்கி கடவுச்சொல் புகுபதிகை செய்ய தடுக்கிறது.",
+       "botpasswords-invalid-name": "தானியங்கி கடவுச்சொல் பிரிப்பானை (\"$1\") குறிக்கப்பட்ட பயனர் பெயர் கொண்டிருக்கவில்லை.",
+       "botpasswords-not-exist": "\"$1\" என்ற பயனர் \"$2\" என்ற தானியங்கி கடவுச்சொல்லை கொண்டிருக்கவில்லை.",
        "resetpass_forbidden": "கடவுச்சொற்கள் மாற்றப்பட முடியாது",
        "resetpass-no-info": "இப்பக்கத்தை நேரடியாக அணுகுவதற்கு நீங்கள் புகுபதிகை செய்திருக்கவேண்டும்.",
        "resetpass-submit-loggedin": "கடவுச்சொல்லை மாற்று",
        "passwordreset-emailtext-user": "பயனர் $1 {{SITENAME}} லிருந்து கடவுச்சொல் மீட்டமையினை {{SITENAME}}\n($4) க்கு கோரியுள்ளார்.பின்வரும் பயனர்  {{PLURAL:$3|account is|accounts are}}\n இந்த மின்னஞ்சல் முகவரியுடன் இணைக்கப்பட்டுள்ளது.\n$2\n{{PLURAL:$3|This temporary password|These temporary passwords}} காலாவதி ஆக உள்ள நாட்கள் {{PLURAL:$5|one day|$5 days}}.\nநீங்கள் புதிய கடவுச்சொல்லை இப்போதே தேர்வு செய்ய வேண்டும், அல்லது வேறு யாராவது இந்த கோரிக்கையை அனுப்பியிருந்தாலோ\nஅல்லது உங்கள் மூல கடவுச்சொல் நினைவில் இருந்தாலோ இதை மாற்ற வேண்டிய அவசியம் இல்லை,நீங்கள் இந்த தகவலை புறக்கணித்துவிட்டுஉங்கள் பழைய கடவுச்சொல்லையே பயன்படுத்திக்கொள்ளலாம்.",
        "passwordreset-emailelement": "பயனர் பெயர்:  \n$1\n\nதற்காலிகக் கடவுச்சொல்: \n$2",
        "passwordreset-emailsentemail": "இது உங்கள் கணக்கிற்கான பதிவு செய்யப்பட்ட மின்னஞ்சலாயின், கடவுச்சொல் மீட்டமைக்கும் மின்னஞ்சல் அனுப்பப்படும்",
+       "passwordreset-emailsentusername": "இது உங்கள் கணக்கிற்கான பதிவு செய்யப்பட்ட மின்னஞ்சலாயின், கடவுச்சொல் மீட்டமைக்கும் மின்னஞ்சல் அனுப்பப்படும்",
        "passwordreset-emailsent-capture": "கீழே காண்பிக்கப்பட்டுள்ளது போல் கடவுச்சொல் மீட்டமைக்கும் மின்னஞ்சல் அனுப்பப்பட்டது.",
        "passwordreset-emailerror-capture": "கடவுச்சொல் மீட்டமைக்கும் மின்னஞ்சல்  உருவாக்கப்பட்டுவிட்டது, அது கீழே காட்டப்பட்டுள்ளது, ஆனால் {{GENDER:$2|user}} அனுப்புவது தோல்வியடைந்தது:$1",
        "changeemail": "மின்னஞ்சல் முகவரியை மாற்று / நீக்கு",
-       "changeemail-header": "கணக்கின் மின்னஞ்சல் முகவரியை மாற்று",
+       "changeemail-header": "இந்த படிவத்தை உங்கள் மின்னஞ்சல் முகவரியை மாற்ற பூர்த்தி செய்யவும். நீங்கள் இந்த மாற்றத்தை உறுதிசெய்ய உங்கள் கடவுச்சொல்லை உள்ளிட வேண்டிவரும்.  உங்கள் கணக்கிலிருந்து ஏதாவது மின்னஞ்சலை நீக்க விரும்பினால், படிவத்தை சமர்ப்பிக்கும்போது மின்னஞ்சல் முகவரியை காலியாக விடவும்.",
+       "changeemail-passwordrequired": "இந்த மாற்றத்தை சேமிக்க உங்கள் கடவுச்சொல் தேவைப்படுகிறது.",
        "changeemail-no-info": "இப்பக்கத்தை நேரடியாக அணுகுவதற்கு நீங்கள் புகுபதிகை செய்திருக்கவேண்டும்.",
        "changeemail-oldemail": "தற்பொழுதுள்ள மின்னஞ்சல் முகவரி:",
        "changeemail-newemail": "புதிய மின்னஞ்சல் முகவரி:",
        "changeemail-password": "உங்கள் {{SITENAME}} கடவுச்சொல்:",
        "changeemail-submit": "மின்னஞ்சலை மாற்று",
        "changeemail-throttled": "நீங்கள் பல புகுபதியும் முயற்சி செய்துள்ளீர்கள்.\nமீண்டும் முயற்சிக்கும் முன் தயவு செய்து $1 காத்திருக்கவும்.",
+       "changeemail-nochange": "தயவு செய்து வேறொரு புது மின்னஞ்சல் முகவரியை தருக.",
        "resettokens": "வில்லைகளை மறுஅமை",
        "resettokens-text": "இங்கு உங்கள் கணக்கின் தனிப்பட்ட தகவல்களுக்கு அணுகல் அளிக்கும் சீட்டுகளை புதுப்பிக்கலாம்.\n\nநீங்கள் அதனை எவருடனும் தவறுதலாக பகிர்ந்தாலோ அல்லது உங்கள் கணக்கு களவாடப்பட்டிருந்தாலோ கண்டிப்பாக செய்ய வேண்டும்.",
        "resettokens-no-tokens": "புதுப்பிக்க எந்த சீட்டும் இல்லை.",
        "sig_tip": "நேர முத்திரையுடன் உங்கள் கையொப்பம்",
        "hr_tip": "கிடைக் கோடு (அரிதாகவே பயன்படுத்துங்கள்)",
        "summary": "சுருக்கம்:",
-       "subject": "à®\89à®\9fà¯\8dபà¯\8aà®°à¯\81ளà¯\8d/தலà¯\88பà¯\8dபà¯\81:",
+       "subject": "விà®\9fயமà¯\8d:",
        "minoredit": "இது ஒரு சிறு தொகுப்பு",
        "watchthis": "இக்கட்டுரையைக் கவனிக்கவும்",
        "savearticle": "பக்கத்தைச் சேமி",
        "missingcommenttext": "கீழே சுருக்கமொன்றக் குறிப்பிடவும்.",
        "missingcommentheader": "'''நினைவூட்டல்:'''  தாங்கள் தொகுத்தற்கான சுருக்கமான உரையை கொடுக்கவில்லை.\n\nஇன்னொருமுறை 'சேமி' என்பதனை அழுத்தினால் எந்தவித சுருக்கமான உரையின்றி சேமிக்கப்படும்.",
        "summary-preview": "சுருக்க முன்தோற்றம்:",
-       "subject-preview": "à®\89à®\9fà¯\8dபà¯\8aà®°à¯\81ளà¯\8d/தலà¯\88பà¯\8dபà¯\81 முன்தோற்றம்:",
+       "subject-preview": "விà®\9fய முன்தோற்றம்:",
        "previewerrortext": "உங்கள் மாற்றங்களை முன்தோற்றம் காட்ட முயற்சிக்கும் போது பிழை ஏற்பட்டது.",
        "blockedtitle": "பயனர் தடுக்கப்பட்டுள்ளார்",
        "blockedtext": "'''உங்கள் பயனர் பெயர் அல்லது ஐ.பி. முகவரி தடுக்கப்பட்டுள்ளது.'''\n\n''$2'' காரணத்தை(களை)க் காட்டி $1 உங்களை தடை செய்துள்ளார்.\n\n* தடை தொடக்கம்: $8\n* தடை முடிவு: $6\n* தடை செய்யப்பட்டவர்: $7\n\n$1 பயனரையோ அல்லது வேறு [[{{MediaWiki:Grouppage-sysop}}|நிர்வாகி]] ஒருவரையோ அனுகி தடைப் பற்றி கலந்துரையாடலாம். 'இப் பயனருக்கு மின்னஞ்சல் செய்' என்ற வசதியை நீங்கள் பயன்படுத்துவதுலிருந்து தடைச் செய்யப்பட்டிருந்தாலோ அல்லது [[Special:Preferences|என் விருப்பத்தேர்வுகள்]] பக்கத்தில் இயங்குநிலையிலுள்ள மின்னஞ்சல் முகவரியை தராத போதோ பயனருக்கு மின்னஞ்சல் செய்ய முடியாது. உங்களது தற்போதைய ஐ.பி. முகவரி $3 மற்றும் தடை எண்  #$5 என்பவற்றை கேள்விகள் கேட்கும் போது கட்டாயம் குறிப்பிடவும்.",
        "permissionserrorstext-withaction": "$2-க்கு தங்களுக்கு அனுமதி இல்லை. அதற்கான {{PLURAL:$1|காரணம்|காரணங்கள்}}:",
        "recreate-moveddeleted-warn": "'''எச்சரிக்கை: தாங்கள் ஏற்கனவே நீக்கப்பட்ட பக்கமொன்றை மீண்டும் தொடங்க விழைகிறீர்கள்.'''\n\nஇப்பக்கத்தைத் தொடர்ந்து தொகுப்பது சரியானதா என்று எண்ணிப்பார்க்கவும்.\n\nதங்களின் வசதிக்காக இப்பக்கத்தின் நீக்கல் மற்றும் நகர்த்தல் குறிப்புகள் கொடுக்கப்பட்டுள்ளது:",
        "moveddeleted-notice": "இது ஒரு நீக்கப்பட்ட பக்கமாகும்.\n\nதங்களின் வசதிக்காக இப்பக்கத்தின் நீக்கல் மற்றும் நகர்த்தல் குறிப்புகள் கொடுக்கப்பட்டுள்ளது.",
+       "moveddeleted-notice-recent": "மன்னிக்கவும், இந்தப் பக்கம் அண்மையில் நீக்கப்பட்டுள்ளது (24 மணித்தியாலத்திற்குள்). இப்பக்கத்திற்கான நீக்கல் மற்றும் நகர்த்தல் பதிவு கீழே மேற்கோளுக்காக தரப்பட்டுள்ளது.",
        "log-fulllog": "குறிப்பினை முழுதுமாக பார்க்கவும்",
        "edit-hook-aborted": "திருத்துவது hook ஆல் தடைசெய்யப்பட்டது.\nஅது எந்த விளக்கமும் அளிக்கவில்லை.",
        "edit-gone-missing": "இப்பக்கத்தை நிகழ்நிலைப் படுத்தமுடியவில்லை.\nஇது நீக்கப்பட்டதாக இருக்கலாம்.",
        "undo-summary-username-hidden": "மறை பயனரால் செய்யப்பட்ட மீள்பார்வை $1 ஐ நீக்கு",
        "cantcreateaccounttitle": "கணக்கைத் தொடக்க முடியாது",
        "cantcreateaccount-text": "இந்த இணைய விதிமுறை இலக்க முகவரியிலிருந்து (IP address) ('''$1''') பயனர் கணக்குகள் தொடங்குவதை பயனர் [[User:$3|$3]] தடை செய்துள்ளார்.\n\nஇதற்காக $3 கொடுத்துள்ள காரணங்கள்  ''$2''",
-       "cantcreateaccount-range-text": "இந்த இணைய விதிமுறை இலக்க முகவரி அளவில் உள்ள(IP address) '''$1''',  உங்கள் முகவரி ('''$4''') உட்பட, பயனர் கணக்குகள் தொடங்குவதை [[User:$3|$3]] தடை செய்துள்ளார்.\n\nஇதற்காக $3 கொடுத்துள்ள காரணங்கள் ''$2''",
+       "cantcreateaccount-range-text": "இந்த இணைய விதிமுறை இலக்க முகவரி அளவில் உள்ள(IP address) <strong>$1</strong>,  உங்கள் முகவரி (<strong>$4</strong>) உட்பட, பயனர் கணக்குகள் தொடங்குவதை [[User:$3|$3]] தடை செய்துள்ளார்.\n\nஇதற்காக $3 கொடுத்துள்ள காரணங்கள் <em>$2</em>",
        "viewpagelogs": "இப்பக்கத்துக்கான பதிகைகளைப் பார்",
        "nohistory": "இப் பக்கத்துக்குத் தொகுப்பு வரலாறு இல்லை.",
        "currentrev": "நடைமுறையிலுள்ள திருத்தம்",
        "mergehistory-empty": "இணைக்கப்படக்கூடிய திருத்தங்கள் எதுவுமில்லை.",
        "mergehistory-done": "$1 பக்கத்தின் {{PLURAL:$3|ஒரு திருத்தம்|$3 திருத்தங்கள்}} வெற்றிகரமாக [[:$2]] பக்கத்தில் இணைக்கப்பட்ட{{PLURAL:$3|து|ன}}.",
        "mergehistory-fail": "வரலாற்றை இணைக்க முடியவில்லை. அருள் கூர்ந்து நேரங்களை ஒரு முறை சரி பார்க்கவும்.",
+       "mergehistory-fail-invalid-source": "மூலப்பக்கம் பயன்பாட்டில் இல்லை.",
+       "mergehistory-fail-invalid-dest": "இலக்குப் பக்கம் செல்லுபடியற்றது.",
        "mergehistory-fail-toobig": "$1 அளவுக்கு மேல் வரலாறு இணைப்பு செய்ய இயலவில்லை {{PLURAL:$1|revision|திருத்தங்கள்}} நகர்த்தப்படும்.",
        "mergehistory-no-source": "மூலப் பக்கம் $1 இல்லை.",
        "mergehistory-no-destination": "இலக்குப் பக்கம் $1 இல்லை.",
        "search-category": "(பகுப்பு $1)",
        "search-file-match": "(கோப்பு உள்ளடக்கத்துடன் பொருந்துகிறது)",
        "search-suggest": "நீங்கள் கருதியது இதையா: $1",
+       "search-rewritten": "$1-இற்கான முடிவுகள் காட்டப்படுகின்றன. $2-இற்கு பதிலாக தேடப்படுகிறது.",
        "search-interwiki-caption": "உறவுத் திட்டங்கள்",
        "search-interwiki-default": "$1 தளத்திலிருந்து முடிவுகள்:",
        "search-interwiki-more": "(மேலும்)",
        "showingresultsinrange": "#<strong>$2</strong> இலிருந்து #<strong>$3</strong> வரை  உள்ள  {{PLURAL:$1|<strong>1</strong> முடிவு|<strong>$1</strong> முடிவுகள்}} கீழே காட்டப்படுகின்றன.",
        "search-showingresults": "{{PLURAL:$4|முடிவு <strong>$1</strong> இன் <strong>$3</strong>|முடிவுகள்<strong>$1 - $2</strong> இன் <strong>$3</strong>}}",
        "search-nonefound": "உங்கள் வினவலுக்கான முடிவுகள் எதுவும் இல்லை.",
+       "search-nonefound-thiswiki": "முடிவுகள் ஒன்றும் இந்த தளத்துடன் உள்ளதுடன் பொருந்தவில்லை.",
        "powersearch-legend": "மேம்பட்ட தேடல்",
        "powersearch-ns": "பெயர்வெளிகளில் தேடவும்",
        "powersearch-togglelabel": "சரிபார்க்கவும்:",
        "columns": "நிரல்கள்",
        "searchresultshead": "தேடுக",
        "stub-threshold": "<a href=\"#\" class=\"stub\">stub link</a> சீர்படுத்தலுக்கான எல்லை (பைட்டுகள்):",
+       "stub-threshold-sample-link": "மாதிரி",
        "stub-threshold-disabled": "செயலிழக்கம் செய்யப்பட்டுள்ளது",
        "recentchangesdays": "அண்மைய மாற்றங்களில் காட்ட வேண்டிய நாட்களின் எண்ணிக்கை:",
        "recentchangesdays-max": "மிக அதிகமாக $1 {{PLURAL:$1|நாள்|நாட்கள்}}",
        "prefs-help-recentchangescount": "அண்மைய மாற்றங்களையும், பக்கத்தின் வரலாறுகளையும் பதிவேட்டுப் பதிவுகளையும் உள்ளடக்கியதாகும்.",
        "prefs-help-watchlist-token2": "உங்கள் கவனிப்புப்பட்டியலின் வலை ஓடைக்கு இது இரகசிய சாவி.\nஇதை அறிந்த எவரும் உங்கள் கவனிப்பு பட்டியலை வாசிக்கலாம், எனவே இதை பகிராதீர்கள்.\nதேவை ஏற்படின், [[Special:ResetTokens|நீங்கள் அதனை புதுப்பிக்கலாம்]].",
        "savedprefs": "உங்கள் விருப்பத்தேர்வுகள் சேமிக்கப்பட்டுள்ளன.",
+       "savedrights": "{{GENDER:$1|$1}}-க்கான பயனர் உரிமைகள் சேமிக்கப்பட்டன.",
        "timezonelegend": "நேர வலயம்:",
        "localtime": "உள்ளூர் நேரம்:",
        "timezoneuseserverdefault": "விக்கி இயல்புநிலையை உபயோகிக்கவும் ($1)",
        "badsig": "செல்லுபடியற்ற கையொப்பம் எச்.டி.எம்.எல். நிரலைச் சரி பார்க்கவும்.",
        "badsiglength": "தங்களது கையெழுத்து மிக நீளமானது.\n\nஅது $1 {{PLURAL:$1|எழுத்து|எழுத்துக்களுக்கு}} மேல் இருக்கக்கூடாது.",
        "yourgender": "உங்களை எப்படி விவரிக்க விரும்புகின்றீர்கள்?",
-       "gender-unknown": "நானà¯\8d à®\95à¯\81றிபà¯\8dபிà®\9f à®µà®¿à®°à¯\81à®®à¯\8dபவிலà¯\8dலà¯\88",
+       "gender-unknown": "à®\89à®\99à¯\8dà®\95ளà¯\88 à®\95à¯\81றிபà¯\8dபிà®\9fà¯\81à®®à¯\8d à®ªà¯\8bதà¯\81, à®®à¯\86னà¯\8dபà¯\8aà®°à¯\81ளà¯\8d à®ªà®¾à®²à¯\8d à®®à®¤à¯\8dதிய à®\9aà¯\8aà®±à¯\8dà®\95ளà¯\88 à®®à¯\81à®\9fியà¯\81à®®à¯\8d à®ªà¯\8bதà¯\81 à®ªà®¯à®©à¯\8dபà®\9fà¯\81தà¯\8dதà¯\81à®®à¯\8d.",
        "gender-male": "ஆண்",
        "gender-female": "பெண்",
        "prefs-help-gender": "விருப்பத்தேர்வை அமைப்பது இங்கள் விருப்பம்.\nஒருவரைக் குறிப்பிடும்பொழுது, அவருடைய பால் சரியானதாக இருக்க மென்கலம் பயன்படுத்தும் தகவல்.\nஇத்தகவல் பொதுவில் கிடைக்கும்படி இனி இருக்கும்.",
        "userrights": "பயனர் அனுமதி முகாமைத்துவம்",
        "userrights-lookup-user": "பயனர்க் குழுக்களைப் பராமரி",
        "userrights-user-editname": "பயனர் பெயரொன்றை இடுக:",
-       "editusergroup": "பயனர் குழுக்களை தொகு",
+       "editusergroup": "{{GENDER:$1|பயனர்}} குழுக்களை தொகு",
        "editinguser": "பயனர் {{GENDER:$1|பயனர்}} <strong>[[User:$1|$1]]</strong> $2  பயனருக்கான அனுமதிகளை மாற்றல்",
        "userrights-editusergroup": "பயனர் குழுக்களை தொகு",
-       "saveusergroups": "பயனர் குழுக்களை சேமி",
+       "saveusergroups": "{{GENDER:$1|பயனர்}} குழுக்களை சேமி",
        "userrights-groupsmember": "உறுப்பினர்:",
        "userrights-groupsmember-auto": "தானகவே உடன்வரும் உறுப்பினர்:\n\nகூடவே வரும் உறுப்பினர்:",
        "userrights-groups-help": "இப்பயனரின் குழுக்களை மாற்றலாம்:\n*குறிக்கப்பெற்றிருந்த பெட்டி ஒன்று இருந்தால் இந்தப் பயனர் இந்தக் குழுவில் உள்ளார் என்று பொருள்\n*பெட்டி குறிக்கப்பெறாமல் இருந்தால் இந்தப் பயனர் இந்தக்குழுவில் இல்லை என்று பொருள்\n*ஒரு * குறி இருந்தால் நீங்கள் இக்குழுவை சேர்த்தப் பின்னர் நீக்கவோ, நீக்கியிருப்பின் சேர்க்கவோ முடியாது",
        "right-createpage": "பக்கங்களை உருவாக்கல் (உரையாடல் பக்கங்கள் அல்லாதவை)",
        "right-createtalk": "உரையாடல் பக்கங்களைத் தொடங்கல்",
        "right-createaccount": "புதிய பயனர் கணக்குகளைத் தொடங்கல்",
+       "right-autocreateaccount": "வெளி பயனர் கணக்கினால் தானியக்கமாக புகுபதிகை செய்யும்",
        "right-minoredit": "சிறு தொகுப்புகள் எனக் குறிக்கவும்",
        "right-move": "பக்கத்தை நகர்த்து",
        "right-move-subpages": "துணைப் பக்கங்களுடன் பக்கத்தை நகர்த்தவும்",
        "right-blockemail": "பயனர் மின்னஞ்சல் அனுப்புவதை தடுக்கவும்",
        "right-hideuser": "பயனர்பெயரை தடுத்து, மறைக்கவும்",
        "right-ipblock-exempt": "ஐ.பி (IP) தடுப்புகளையும், தானியங்கியான தடுப்புகளையும், வரம்புவரையான தடுப்புகளையும் மீறிச் செயல்படுக.",
-       "right-proxyunbannable": "தானாக தடுப்புகப்பட்ட  Proxies ஐ மீறு.",
        "right-unblockself": "நீங்களே தடுப்பு நீக்குக",
        "right-protect": "பாதுகாப்பு மட்டங்களை மாற்று மற்றும் தொடர்-பாதுகாக்கப்பட்ட பக்கங்களை திருத்து",
        "right-editprotected": "\"{{int:protect-level-sysop}}\" ஆல் பாதுகாக்கப்பட்ட பக்கங்களை திருத்து",
        "right-managechangetags": "தரவுதளத்திலிருந்து [[Special:Tags|அடையாளங்களை]] உருவாக்கு மற்றும் நீக்கு",
        "right-applychangetags": "ஒருவரின் மாற்றத்துடன் [[Special:Tags|அடையாளங்களை]] செயற்படுத்து",
        "right-changetags": "தனியொருவரின் திருத்தம் மற்றும் செயற்பாட்டு பதிவுகளில்  [[Special:Tags|அடையாளங்களை]] சேர் அல்லது நீக்கு",
+       "grant-generic": "\"$1\" உரிமைகள் கட்டு",
+       "grant-group-page-interaction": "பக்கங்களுடன் தொடர்பை கொண்டிரு",
+       "grant-group-file-interaction": "ஊடகங்களுடன் தொடர்பை கொண்டிரு",
+       "grant-group-watchlist-interaction": "உங்களுடைய கவனிப்புபட்டியலுடன் தொடர்பை கொண்டிரு",
+       "grant-group-email": "மின்னஞ்சலை அனுப்பவும்",
+       "grant-group-high-volume": "அதிக ஒலி செயற்பாட்டை செயற்படுத்தவும்",
+       "grant-group-customization": "தன்விருப்பம் மற்றும் விருப்பங்கள்",
+       "grant-group-administration": "நிர்வாக நடவடிக்கைகளை செயல்படுத்து",
+       "grant-group-other": "இதர செயற்பாடு",
+       "grant-blockusers": "பயனர்களை தடுத்தல் மற்றும் தடைநீக்கல்",
+       "grant-createaccount": "கணக்குகளை உருவாக்கவும்",
+       "grant-createeditmovepage": "பக்கங்களை உருவாக்கல், தொகுத்தல் மற்றும் நகர்த்தல்",
+       "grant-delete": "பக்கங்கள், மீளமைத்தல், மற்றும் பதிகை உள்ளீடுகளை நீக்கல்",
+       "grant-editinterface": "மீடியாவிக்கி பெயர்வெளியையும், பயனர் CSS/JavaScriptஐயையும் தொகுத்தல்.",
+       "grant-editmycssjs": "உங்கள் பயனர் CSS/JavaScript ஐ தொகு",
+       "grant-editmyoptions": "உங்கள் விருப்பத்தேர்வுகளை தொகு",
+       "grant-editmywatchlist": "உங்கள் கவனிப்புப்பட்டியலை தொகு",
+       "grant-editpage": "ஏற்கனவே உள்ள பக்கங்களை தொகு",
+       "grant-editprotected": "பாதுகாக்கப்பட்ட பக்கங்களை தொகுத்தல்.",
+       "grant-highvolume": "அதிக-ஒலி தொகுத்தல்",
+       "grant-oversight": "பயனர்களை மறைத்து மீளமைத்தல் மேற்பார்வை செய்தல்.",
+       "grant-patrol": "பக்க ரோந்திடு மாற்றங்கள்",
+       "grant-protect": "பக்கத்தை காப்பு செய்தல் மற்றும் காப்பை நீக்கல்",
+       "grant-rollback": "பக்கத்திற்கான முன்னிலையாக்கல் மாற்றங்கள்",
+       "grant-sendemail": "மின்னஞ்சலை வேறு பயனர்களுக்கு அனுப்பு",
+       "grant-uploadeditmovefile": "பதிவேற்றம், மாற்றம், மற்றும் கோப்பை நகர்த்தல்",
+       "grant-uploadfile": "புதிய கோப்புக்களை பதிவேற்று",
+       "grant-basic": "அடிப்படை அணுக்கங்கள்",
+       "grant-viewdeleted": "நீக்கப்பட்ட கோப்புக்களையும், பக்கங்களையும் பார்",
+       "grant-viewmywatchlist": "உங்கள் கவனிப்புபட்டியலை பார்க்கவும்",
        "newuserlogpage": "பயனர் உருவாக்கம் பற்றிய குறிப்பு",
        "newuserlogpagetext": "இது பயனர் படைப்புகளின் பதிவு ஆகும்.",
        "rightslog": "பயனர் உரிமைகள் பதிகை",
        "recentchanges-label-bot": "இந்த தொகுப்பானது ஒரு தானியங்கியால் செய்யப்பட்டதாகும்",
        "recentchanges-label-unpatrolled": "இந்த  தொகுப்பு  இன்னும் ரோந்திடப்படவில்லை",
        "recentchanges-label-plusminus": "இத்தனை பைட்டுகளுக்கு பக்கத்தின் அளவு மாற்றப்பட்டுள்ளது",
-       "recentchanges-legend-heading": "'''குறியீட்டு விளக்கம்:'''",
+       "recentchanges-legend-heading": "<strong>குறியீட்டு விளக்கம்:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|புதிய பக்கங்கள் பட்டியலையும்]] காணவும்)",
+       "recentchanges-submit": "காட்டு",
        "rcnotefrom": "கீழே காணப்படுவது <strong>$3, $4</strong> இலிருந்து செய்யப்பட்ட (<strong>$1</strong> வரைக் காட்டப்பட்டுள்ளது) {{PLURAL:$5|மாற்றமாகும்.|மாற்றங்களாகும்.}}",
        "rclistfrom": "$2, $3 தொடக்கம் செய்யப்பட்ட புதிய மாற்றங்களைக் காட்டவும்",
        "rcshowhideminor": "சிறிய தொகுப்புகளை $1",
        "rcshowhidemine": "என் தொகுப்புகளை $1",
        "rcshowhidemine-show": "காட்டு",
        "rcshowhidemine-hide": "மறை",
+       "rcshowhidecategorization": "பக்க பகுப்பாக்கத்தை $1",
+       "rcshowhidecategorization-show": "காட்டு",
+       "rcshowhidecategorization-hide": "மறை",
        "rclinks": "கடைசி $2 நாட்களில் கடைசி $1 மாற்றங்களைக் காட்டு.<br />$3",
        "diff": "வேறுபாடு",
        "hist": "வரலாறு",
        "boteditletter": "தா",
        "number_of_watching_users_pageview": "[இப்பக்க்த்தை {{PLURAL:$1|ஒரு பயனர் பார்கிறார்|$1 பயனர்கள் பார்கிறார்கள்}}]",
        "rc_categories": "பகுப்புகளுக்கு மட்டுப்படுத்து (\"|\" குறியீட்டால் பிரிக்கப்பட்டுள்ளது)",
-       "rc_categories_any": "ஏதாவது",
+       "rc_categories_any": "தà¯\86ரிவà¯\81 à®\9aà¯\86யà¯\8dததிலà¯\8d à®\8fதாவதà¯\81",
        "rc-change-size-new": "$1 {{PLURAL:$1|பைட்டு|பைட்டுகள்}} -மாற்றத்திற்குப் பிறகு",
        "newsectionsummary": "/* $1 */ புதிய பகுதி",
        "rc-enhanced-expand": "விவரத்தை காட்டு",
        "recentchangeslinked-summary": "இந்த சிறப்புப் பக்கம் அண்மைய மாற்றங்களுக்குச் சென்று இந்தக் கட்டுரைக்கான மாற்றங்களைத் தேடுவதைத் தவிர்த்து, இந்தக் கட்டுரையுடன் தொடர்புடைய (அல்லது சிறப்புப் பட்டியலிலுள்ள அங்கத்தவர்களுக்கு) அண்மைய மாற்றங்களை மட்டும் பட்டியலிடுகிறது.இங்கு [[Special:Watchlist|உங்கள் கவனிப்புப் பட்டியலில்]] உள்ள பக்கங்கள் தடித்த எழுத்துக்களில் உள்ளன என்பதைக் கவனத்தில் கொள்ளவும்.",
        "recentchangeslinked-page": "பக்கப் பெயர்:",
        "recentchangeslinked-to": "இதற்குப் பதிலாக இப்பக்கத்தினை இணைத்த பக்கங்களின் மாற்றங்களைக் காட்டவும்",
+       "recentchanges-page-added-to-category": "[[:$1]] பகுப்பில் சேர்க்கப்பட்டது",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] மற்றும் {{PLURAL:$2|ஒரு பக்கம்|$2 பக்கங்கள்}} பகுப்பில் சேர்க்கப்பட்டது",
+       "recentchanges-page-removed-from-category": "[[:$1]] பகுப்பில் இருந்து நீக்கப்பட்டது",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] மற்றும் {{PLURAL:$2|ஒரு பக்கம்|$2 பக்கங்கள்}} பகுப்பிலிருந்து நீக்கப்பட்டது",
+       "autochange-username": "மீடியாவிக்கி தானியக்க மாற்றம்",
        "upload": "கோப்பைப் பதிவேற்று",
        "uploadbtn": "கோப்பைப் பதிவேற்று",
        "reuploaddesc": "பதிவேற்றத்தை நிறுத்திவிட்டு பதிவேற்றும் படிவத்துக்கு மீளச் செல்க",
        "watchthisupload": "இந்த கோப்பினைக் கவனி",
        "filewasdeleted": "இப்பெயரைக் கொண்ட கோப்பு முன்பு பதிவேற்றப்பட்டு பின்னர் நீக்கப்பட்டது. பதிவேற்றத்துக்குப் முன்னர் $1 ஐச் சரிபார்க்கவும்.",
        "filename-bad-prefix": "நீங்கள் பதிவேற்ற எத்தனிக்கும் கோப்பின் பெயர் '''\"$1\"''' என்பதுடன் தொடங்குகிறது, பொதுவாக இது எண்மருவி கமெராக்கலால் தானியக்கமாக வழங்கப்புடும் பெயராகும். அருள் கூர்ந்து கோப்பிற்கு விளக்கமான பெயரொன்றைக் கொடுக்கவும்.",
-       "upload-success-subj": "வெற்றிகரமான பதிவேற்றம்",
-       "upload-success-msg": "[$2]  லிருந்து உங்கள் தகவலேற்றம் நடக்கவில்லை.அது  [[:{{ns:file}}:$1]] இங்கு கிடைக்கப்பெறும்.",
-       "upload-failure-subj": "பதிவேற்றத்தில் ஏற்பட்டத் தொல்லை",
-       "upload-failure-msg": "[$2] லிருந்து உங்கள்  தகவலேற்றத்தில் சிக்கல் உள்ளது.\n$1",
-       "upload-warning-subj": "பதிவேற்றல் எச்சரிக்கை",
-       "upload-warning-msg": "$2 லிருந்து உங்கள் தகவலேற்றத்தில் சிக்கல் உள்ளது. அதை சரி செய்ய நீங்கள் இங்கே செல்லலாம் [[Special:Upload/stash/$1|upload form]].",
        "upload-proto-error": "பிழையான நெறி",
        "upload-proto-error-text": "தொலைவுப் பதிவேற்றத்துக்கு யு.ஆர்.எல். <code>http://</code> அல்லது <code>ftp://</code> என்ற முன்னொட்டுடன் தொடங்கவேண்டும்.",
        "upload-file-error": "உள்ளகத் தவறு",
        "upload-too-many-redirects": "இந்த URL மிக அதிகமான திருப்பங்களை (redirects) கொண்டுள்ளது.",
        "upload-http-error": "ஒரு HTTP பிழை ஏற்பட்டுள்ளது:$1",
        "upload-copy-upload-invalid-domain": "இந்தக் களத்தில் இருந்து படியெடுத்துப் பதிவேற்றம் செய்யும் வசதி கிடையாது.",
+       "upload-dialog-title": "கோப்பைப் பதிவேற்று",
+       "upload-dialog-button-cancel": "ரத்து செய்",
+       "upload-dialog-button-done": "முடிந்தது",
+       "upload-dialog-button-save": "சேமி",
+       "upload-dialog-button-upload": "பதிவேற்று",
+       "upload-form-label-infoform-title": "விவரங்கள்",
+       "upload-form-label-infoform-name": "பெயர்",
+       "upload-form-label-infoform-description": "விளக்கம்",
+       "upload-form-label-usage-title": "பயன்பாடு",
+       "upload-form-label-usage-filename": "கோப்பின் பெயர்",
        "foreign-structured-upload-form-label-own-work": "இது என் சொந்த வேலை",
        "foreign-structured-upload-form-label-infoform-categories": "பகுப்புகள்",
        "foreign-structured-upload-form-label-infoform-date": "தேதி",
        "listfiles-latestversion-yes": "ஆம்",
        "listfiles-latestversion-no": "இல்லை",
        "file-anchor-link": "கோப்பு",
-       "filehist": "à®\95à¯\8bபà¯\8dபà¯\81 வரலாறு",
+       "filehist": "à®\95à¯\8bபà¯\8dபினà¯\8d வரலாறு",
        "filehist-help": "குறித்த நேரத்தில் இருந்த படிமத்தைப் பார்க்க அந்நேரத்தின் மீது சொடுக்கவும்.",
        "filehist-deleteall": "சகலத்தையும் நீக்கு",
        "filehist-deleteone": "நீக்குக",
        "mostrevisions": "அதிக திருத்தங்களைக் கொண்ட கட்டுரைகள்",
        "prefixindex": "முன்னொட்டுச் சுட்டியுடன் உள்ள அனைத்துப் பக்கங்களும்",
        "prefixindex-namespace": "முன்னொட்டு ( $1  பயனர்வெளி)கொண்ட அனைத்து பக்கங்களும்",
+       "prefixindex-submit": "காட்டு",
        "prefixindex-strip": "பட்டியலின் வரி முன்னொட்டு",
        "shortpages": "குறும் பக்கங்கள்",
        "longpages": "நீளமான பக்கங்கள்",
        "protectedpages-performer": "பயனரை பாதுகாக்கிறது",
        "protectedpages-params": "வினைக்கூறுகள் பாதுகாப்பு",
        "protectedpages-reason": "காரணம்",
+       "protectedpages-submit": "பக்கங்களை காட்டவும்",
        "protectedpages-unknown-timestamp": "அறியப்படாதது",
        "protectedpages-unknown-performer": "அறியப்படாத பயனீர்",
        "protectedtitles": "காக்கப்பட்ட தலைப்புகள்",
        "protectedtitlesempty": "இக்காரணிகளுடன் காக்கப்பட்டப் தலைப்புகள் எதுவும் கிடையாது.",
+       "protectedtitles-submit": "தலைப்புக்களை காட்டவும்",
        "listusers": "பயனர் அட்டவணை",
        "listusers-editsonly": "தொகுத்த பயனர்களை மட்டும் காட்டு",
        "listusers-creationsort": "உருவாக்கிய தேதி அடிப்படையில் வரிசைப்படுத்து",
        "usereditcount": "$1 {{PLURAL:$1|தொகு|தொகுத்தல்கள்}}",
        "usercreated": "{{GENDER:$3|Created}} $1 தேதி $2 மணியில் உருவாக்கப்பட்டது",
        "newpages": "புதிய பக்கங்கள்",
+       "newpages-submit": "காட்டு",
        "newpages-username": "பயனர் பெயர்:",
        "ancientpages": "மிகப்பழைய கட்டுரைகள்",
        "move": "நகர்த்தவும்",
        "querypage-disabled": "செயல்பாட்டு காரணங்களுக்காக இந்த சிறப்புப் பக்கம் முடக்கப்பட்டுள்ளது.",
        "apihelp": "ஏபிஐ உதவி",
        "apihelp-no-such-module": "''$1'' என்ற மாடுயூல் காணப்படவில்லை.",
+       "apisandbox": "API மணற்தொட்டி",
+       "apisandbox-jsonly": "API மணல்தொட்டியை பயன்படுத்த ஜாவாகிறிட்டு தேவை",
+       "apisandbox-api-disabled": "இத் தளத்தில் API செயலிழக்கம் செய்யப்பட்டுள்ளது.",
+       "apisandbox-unfullscreen": "பக்கத்தை காட்டவும்",
+       "apisandbox-submit": "கோரிக்கை செய்",
+       "apisandbox-reset": "வெறுமையாக்கு",
+       "apisandbox-retry": "மறு முயற்சி செய்",
+       "apisandbox-examples": "உதாரணங்கள்",
+       "apisandbox-results": "முடிவுகள்",
+       "apisandbox-sending-request": "API வேண்டுகோள் அனுப்பப்படுகிறது...",
+       "apisandbox-loading-results": "API முடிவுகள் பெறப்படுகின்றன...",
+       "apisandbox-request-url-label": "URL வேண்டுகோள்:",
+       "apisandbox-request-time": "வேண்டுகோள் நேரம்: {{PLURAL:$1|$1 மிசெ}}",
+       "apisandbox-results-fixtoken": "அட்டையை திருத்தி மீண்டும் சமர்பிக்கவும்",
        "booksources": "நூல் மூலங்கள்",
        "booksources-search-legend": "நூல் மூலங்களைத் தேடு",
        "booksources-search": "தேடுக",
        "specialloguserlabel": "செயல்படுபவர்:",
        "speciallogtitlelabel": "இலக்கு (தலைப்புஅல்லது பயனர்):",
        "log": "பதிகைகள்",
+       "logeventslist-submit": "காட்டு",
        "all-logs-page": "அனைத்துப் பொது குறிப்புக்கள்",
        "alllogstext": "{{SITENAME}} தளத்தின் பதிவுகள் அனைத்திற்குமான ஒருங்கிணைந்த காட்சி. பதிவு வகை, பயனர் பெயர், அல்லது தொடர்புடைய பக்கத்தைத் தெரிவு செய்வதன்மூலம் காட்சி நோக்கை சுருக்கிக் கொள்ள முடியும்.",
        "logempty": "பொருத்தமான பதிவுகள் யாதுமில்லை.",
        "log-title-wildcard": "இவ்வுரையுடன் தொடங்கும் தலைப்புகளைத் தேடு",
        "showhideselectedlogentries": "தேர்ந்தெடுத்த குறிப்பேடு உள்ளீடுகள் காண்பி/மறை",
        "log-edit-tags": "தேர்ந்தெடுத்த செயற்பாட்டு பதிவுகளின் அடையாளங்களைத் திருத்து",
+       "checkbox-select": "தேர்ந்தெடுக்கவும்:$1",
+       "checkbox-all": "அனைத்தும்",
+       "checkbox-none": "எதுவுமில்லை",
+       "checkbox-invert": "நுழை",
        "allpages": "அனைத்துப் பக்கங்கள்",
        "nextpage": "அடுத்த பக்கம் ($1)",
        "prevpage": "முந்திய பக்கம் ($1)",
        "cachedspecial-viewing-cached-ts": "நீங்கள் இப்பக்கத்தின் சேமிக்கப்பட்ட வடிவத்தை பார்க்கின்றீர்கள், இது உண்மையில்லாததாகவும் இருக்கலாம்.",
        "cachedspecial-refresh-now": "அண்மையான பதிப்பை காண்க",
        "categories": "பகுப்புகள்",
+       "categories-submit": "காட்டு",
        "categoriespagetext": "கீழே கொடுத்துள்ள பக்கங்கள் அல்லது ஊடகங்கள் இந்த {{PLURAL:$1|பகுப்பை|பகுப்புக்களை}} கொண்டுள்ளது.\n[[Special:UnusedCategories|உபயோகப்படுத்தப்படாத  பகுப்புகள்]] இங்கே காண்பிக்கப்படவில்லை.\nஇத்துடன் [[Special:WantedCategories|தேவைப்படும் பகுப்புகளையும்]] பார்க்கவும்.",
        "categoriesfrom": "இதில் தொடங்கும் பகுப்புக்களைக் காட்டவும்:",
        "special-categories-sort-count": "எண்ணிக்கையின் படி ஒழுங்குப் படுத்துக",
        "activeusers-hidebots": "தானியங்கிகளை மறை",
        "activeusers-hidesysops": "நிர்வாகிகளை மறை",
        "activeusers-noresult": "எந்தவொரு பயனர்களும் காணப்படவில்லை.",
+       "activeusers-submit": "தொடர் பங்களிப்பாளர்களை காட்டு",
        "listgrouprights": "பயனர் குழு உரிமைகள்",
        "listgrouprights-key": "குறியீட்டு விளக்கம்:\n* <span class=\"listgrouprights-granted\">உரிமை வழங்கப்பட்டது</span>\n* <span class=\"listgrouprights-revoked\">உரிமை பறிக்கபட்டது</span>",
        "listgrouprights-group": "குழு",
        "listgrouprights-namespaceprotection-header": "பெயர்வெளி கட்டுப்பாடு",
        "listgrouprights-namespaceprotection-namespace": "பெயர்வெளி",
        "listgrouprights-namespaceprotection-restrictedto": "பயனரை திருத்த அனுமதிக்கும் உரிமை(கள்)",
+       "listgrants-rights": "அணுக்கங்கள்",
        "trackingcategories": "பகுப்புகளை தடமறி",
        "trackingcategories-msg": "பகுப்புகளை தடமறிதல்",
        "trackingcategories-name": "செய்திப் பெயர்",
        "wlheader-showupdated": "உங்கள் கடைசி வருகைக்குப் பின்னர் மாற்றங்கள் செய்யப்பட்ட பக்கங்கள் '''தடித்த எழுத்துக்களில்''' காட்டப்பட்டுள்ளன",
        "wlnote": "பின்வருவன கடைசி {{PLURAL:$2|மணித்தியாலத்தில்|'''$2''' மணித்தியாலங்களில்}} செய்யப்பட்ட {{PLURAL:$1|கடைசி ஒரு மாற்றமாகும்|கடைசி $1 மாற்றங்களாகும்}}.",
        "wlshowlast": "கடைசி $1 மணித்தியாலங்கள் $2 நாட்களைக் காட்டு",
-       "watchlistall2": "அனைத்து",
+       "watchlist-hide": "மறை",
+       "watchlist-submit": "காட்டு",
+       "wlshowtime": "காட்டவேண்டிய நேர அளவு:",
+       "wlshowhideminor": "சிறு தொகுப்புகள்",
+       "wlshowhidebots": "தானியங்கிகள்",
+       "wlshowhideliu": "பதிவு செய்துள்ள பயனர்கள்",
+       "wlshowhideanons": "அடையாளம் காட்டாத பயனர்கள்",
+       "wlshowhidepatr": "ரோந்திட்ட தொகுப்புக்கள்",
+       "wlshowhidemine": "எனது தொகுப்புகள்",
+       "wlshowhidecategorization": "பக்க பகுப்பாக்கம்",
        "watchlist-options": "கவனிப்பு பட்டியலின் விருப்பத் தேர்வுகள்",
        "watching": "கவனிக்கப்படுகிறது...",
        "unwatching": "கவனிப்பு விடப்படுகிறது...",
        "delete-confirm": "\"$1\" பக்கத்தை நீக்கு",
        "delete-legend": "நீக்கவும்",
        "historywarning": "<strong>எச்சரிக்கை:</strong> தாங்கள் நீக்கவுள்ள பக்கத்திற்கு $1 {{PLURAL:$1|திருத்தம்|திருத்தங்களின்}} வரலாறு உண்டு:",
+       "historyaction-submit": "காட்டு",
        "confirmdeletetext": "நீங்கள் இப்பக்கத்தை அதன் வரலாற்றுடன் சேர்த்து நீக்க விழைகிறீர்கள்.\nஅருள் கூர்ந்து உங்கள் செய்கையின் விளைவுகளை நீங்கள் விளங்கிக் கொண்டீர்கள் என்பதையும் இது [[{{MediaWiki:Policy-url}}|கொள்கைகளுடன்]] ஒத்துப்போவதையும் உறுதிப் படுத்தவும்.",
        "actioncomplete": "செயற்பாடு நிறைவுற்றது",
        "actionfailed": "செயல் வெற்றியடையவில்லை",
        "rollbackfailed": "முன்நிலையாக்கம் தோல்வி",
        "cantrollback": "தொகுப்பை முன்நிலையாக்க முடியாது; கடைசிப் பங்களிப்பாளரே இக்கட்டுரையின் ஒரே ஆசிரியராகும்.",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|Talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) பயனரால் செய்யப்பட்ட [[:$1]] இன் கடைசித் தொகுப்பை முன்நிலையாக்க முடியாது; வேறு யாரோ இப்பக்கத்தை ஏற்கெனவே தொகுத்தோ அல்லது முன்நிலையாக்கியோ உள்ளார்.\n\nஇப்பக்கத்தை கடைசியாகத் தொகுத்தவர் [[User:$3|$3]] ([[User talk:$3|Talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "தொகுப்பிற்கான சிறுகுறிப்புக்கள் இவை:\"''$1''\".",
+       "editcomment": "தொகுப்பிற்கான சிறுகுறிப்புக்கள் இவை: <em>$1</em>.",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|பேச்சு]]) செய்தத் தொகுப்புகள் நீக்கப்பட்டு [[User:$1|$1]] இன் பதிப்புக்கு முன்நிலையாக்கப்பட்டது",
        "revertpage-nouser": "மறைக்கப்பட்ட பயனர் செய்த தொகுப்புகள் இல்லாது செய்யப்பட்டு, {{GENDER:$1|[[User:$1|$1]]}} கடைசியாகச் செய்த திருத்தத்துக்கு முன்நிலையாக்கப்பட்டது",
        "rollback-success": "$1 செய்தத் தொகுப்புகள் நீக்கப்பட்டு $2 இன் பதிப்புக்கு முன்நிலையாக்கப்பட்டது.",
        "sessionfailure-title": "அமர்வு தோல்வி",
        "sessionfailure": "உங்கள் புகுபதிகை அமர்வில் பிரச்சினை உள்ளது போல தோன்றுகிறது. செல்வழி திருட்டுக் கெதிரான முன்னெச்செரிக்கையாக இந்த நடவடிக்கை இரத்துச் செய்யப்பட்டது. உங்கள் உலாவியின் பின் செல்வதற்கான பொத்தானைச் செருகி மீண்டும் முயலவும்.",
+       "changecontentmodel": "பக்கத்தின் உள்ளடக்க வகையை மாற்று",
+       "changecontentmodel-legend": "உள்ளடக்க மாதிரியை மாற்று",
+       "changecontentmodel-title-label": "பக்கத் தலைப்பு",
+       "changecontentmodel-model-label": "புது உள்ளடக்க மாதிரி",
+       "changecontentmodel-reason-label": "காரணம்:",
+       "changecontentmodel-success-title": "உள்ளடக்க மாதிரி மாற்றப்பட்டது",
+       "changecontentmodel-success-text": "[[:$1]]-இன் உள்ளடக்க வகை மாற்றப்பட்டது",
+       "log-name-contentmodel": "உள்ளடக்க மாதிரி மாற்றப் பதிகை",
+       "logentry-contentmodel-change-revertlink": "முன்நிலையாக்கு",
+       "logentry-contentmodel-change-revert": "முன்நிலையாக்கு",
        "protectlogpage": "காப்புப் பதிகை",
        "protectlogtext": "பின்வருவது பக்க பாதுகாப்பு மாற்றங்களின் பட்டியலாகும். தற்போது நடைமுறையிலுள்ள காக்கப்பட்டப் பக்கங்களைக் காண [[Special:ProtectedPages|காக்கப்பட்ட பக்கங்களின் பட்டியலைப்]] பார்க்கவும்.",
        "protectedarticle": "\"[[$1]]\" காக்கப்பட்டது",
        "contributions": "{{GENDER:$1|பயனர்}} பங்களிப்புக்கள்",
        "contributions-title": "$1 இற்கான பயனர் பங்களிப்புகள்",
        "mycontris": "பங்களிப்புக்கள்",
+       "anoncontribs": "பங்களிப்புக்கள்",
        "contribsub2": "{{GENDER:$3|$1}} க்காக ($2)",
        "contributions-userdoesnotexist": "பயனர் கணக்கு \"$1\" ஆனது பதியப்படவில்லை.",
        "nocontribs": "இந்த நிபந்தனையுடன் ஒத்துப்போகும் வகையில் மாற்றங்களெதுவும் காணப்படவில்லை.",
        "whatlinkshere-hidelinks": "இணைப்புகள் $1",
        "whatlinkshere-hideimages": "$1 கோப்பிணைப்புக்கள்",
        "whatlinkshere-filters": "வடிகட்டிகள்",
+       "whatlinkshere-submit": "செல்",
        "autoblockid": "தானியங்கி தடை #$1",
        "block": "பயனரைத் தடைசெய்",
        "unblock": "பயனர் தடையை நீக்கு",
        "blocklog-showlog": "இந்த பயனர் முன்பே தடுக்கப்பட்டுள்ளார்.\nதடுப்பு குறிப்பேடு ஒப்பீட்டிற்காக கீழே வழங்கப்பட்டுள்ளது:",
        "blocklog-showsuppresslog": "இந்த பயனர் முன்பே தடுக்கப்பட்டு மறைக்கப்பட்டுள்ளார்.\nதடுப்பு குறிப்பேடு ஒப்பீட்டிற்காக கீழே வழங்கப்பட்டுள்ளது:",
        "blocklogentry": "பயனரால் $2 அன்று காலாவதியாகும் வகையில் [[$1]] தடுக்கப்பட்டது $3",
+       "reblock-logentry": "[[$1]]-இற்கான தடை அமைப்பு $2 என்ற நேர அளவிற்கு மாற்றப்பட்டது. $3",
        "blocklogtext": "இது ஒரு பயனரின் தடுப்பு தடை நீக்கல் செயற்பாடுகளுக்கான பதிவாகும். தானியங்கி முறையில் தடுக்கப்படும் ஐபி முகவரிகள் இப்பட்டியலில் இடம்பெறா.  தற்போது செயற்பாட்டிலுள்ள தடைகளையும் முடக்கங்களையும் [[Special:BlockList|ஐ.பி. தடுப்பு பட்டியலில்]] பார்க்க.",
        "unblocklogentry": "\"$1\" தொடர்பான தடுப்பு நீக்கப்பட்டது",
        "block-log-flags-anononly": "அடையாளம் காட்டாத பயனர் மட்டும்",
        "block-log-flags-hiddenname": "பயனர் பெயர் மறைக்கப்பட்டுள்ளது",
        "range_block_disabled": "வீச்சு தடுப்புக்களை ஏற்படுத்தக் கூடியா நிர்வாகிகளின் இயலுமை முடக்கப்பட்டது.",
        "ipb_expiry_invalid": "காலாவதியாகும் நாள் செல்லுபடியற்றது.",
+       "ipb_expiry_old": "முடிவு நாள் கடந்தக் காலத்தில் உள்ளது.",
        "ipb_expiry_temp": "மறைக்கப்பட்ட பயனர்பெயர் தடுப்புகள் நிரந்தரமாக இருக்க வேண்டும்.",
        "ipb_hide_invalid": "இந்த கணக்கை அடக்க இயலவில்லை;இது மிக அதிகமான திருத்தங்களை கொண்டிருக்கலாம்.",
        "ipb_already_blocked": "\"$1\" ஏற்கனவே தடுக்கப்பட்டுள்ளார்",
        "import-rootpage-invalid": "கொடுக்கப்பட்ட மூலப்பக்கம் செல்லாத தலைப்பாகும்.",
        "importlogpage": "இறக்குமதி பதிகை",
        "importlogpagetext": "வேறு விக்கிகளிலில் தொகுப்பு வரலாற்றைக் கொண்டப் பக்கங்களின் மேலாண்மை இறக்குமதிகள்.",
-       "import-logentry-upload-detail": "{{PLURAL:$1|ஒரு திருத்தம்|$1 திருத்தங்கள்}}",
-       "import-logentry-interwiki-detail": "$2 à®\87லிரà¯\81நà¯\8dதà¯\81 {{PLURAL:$1|à®\92à®°à¯\81 à®¤à®¿à®°à¯\81தà¯\8dதமà¯\8d|$1 à®¤à®¿à®°à¯\81தà¯\8dதà®\99à¯\8dà®\95ளà¯\8d}}",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|திருத்தம்|திருத்தங்கள்}} இறக்குமதி செய்யப்பட்டன",
+       "import-logentry-interwiki-detail": "$2 à®\87லிரà¯\81நà¯\8dதà¯\81 {{PLURAL:$1|திரà¯\81தà¯\8dதமà¯\8d|திரà¯\81தà¯\8dதà®\99à¯\8dà®\95ளà¯\8d}} à®\87à®±à®\95à¯\8dà®\95à¯\81மதி à®\9aà¯\86யà¯\8dயபà¯\8dபà®\9fà¯\8dà®\9fன",
        "javascripttest": "சாவாநிரல் சோதனை நடக்கின்றது",
        "javascripttest-pagetext-noframework": "இந்த பக்கம் JavaScript பரிசோதனை ஓட்டத்திற்காக ஒதுக்கப்பட்டுள்ளது",
        "javascripttest-pagetext-unknownframework": "அறியப்படாத சோதனை பணிச்சட்டம் \"$1\".",
        "javascripttest-pagetext-frameworks": "தயவு செய்து பின்வரும் சோதனை பணிச் சட்டங்களில் இருந்து ஒன்றைத் தேர்ந்தெடு: $1",
        "javascripttest-pagetext-skins": "சோதனைகளை நடத்த முகப்புறை ஒன்றைத் தேர்வுசெய்:",
        "javascripttest-qunit-intro": "mediawiki.org இல் [$1 சோதனை கோப்புகளைப்] பார்க்க.",
-       "tooltip-pt-userpage": "உங்கள் பயனர் பக்கம்",
+       "tooltip-pt-userpage": "{{GENDER:|உங்கள் பயனர்}} பக்கம்",
        "tooltip-pt-anonuserpage": "நீங்கள் தொகுத்துக் கொண்டிருக்கும் ஐ.பி. முகவரிக்கான பயனர் பக்கம்",
-       "tooltip-pt-mytalk": "உங்கள் பேச்சுப் பக்கம்",
+       "tooltip-pt-mytalk": "{{GENDER:|உங்கள்}} பேச்சுப் பக்கம்",
        "tooltip-pt-anontalk": "இந்த ஐ.பி. முகவரியிலிருந்தான தொகுப்புக்களைப் பற்றிய உரையாடல்",
-       "tooltip-pt-preferences": "உங்கள் விருப்பத்தேர்வுகள்",
+       "tooltip-pt-preferences": "{{GENDER:|உங்கள்}} விருப்பத்தேர்வுகள்",
        "tooltip-pt-watchlist": "மாற்றங்களுக்காக நீங்கள் கவனிக்கும் பக்கங்களின் பட்டியல்",
-       "tooltip-pt-mycontris": "உங்கள் பங்களிப்புக்களின் பட்டியல்",
+       "tooltip-pt-mycontris": "{{GENDER:|உங்கள்}} பங்களிப்புக்களின் பட்டியல்",
+       "tooltip-pt-anoncontribs": "இந்த ஐபி முகவரியால் செய்யப்பட்ட தொகுப்புக்களின் பட்டியல்",
        "tooltip-pt-login": "நீங்கள் புகுபதிகை செய்ய ஊக்குவிக்கப்படுகிறீர்கள், ஆனால் இது கட்டாயமன்று.",
        "tooltip-pt-logout": "விடுபதிகை",
        "tooltip-pt-createaccount": "நீங்கள் ஒரு பயனர் கணக்கைத் துவங்கி உள்புக வரவேற்கப்படுகிறீர்கள்; எனினும் இது கட்டாயம் அல்ல.",
        "tooltip-t-recentchangeslinked": "இப்பக்கத்துடன் இணைக்கப்பட்ட பக்கங்களில் மாற்றங்கள்",
        "tooltip-feed-rss": "இப்பக்கத்துக்கான ஆர்.எஸ்.எஸ். ஓடை கிடையாது",
        "tooltip-feed-atom": "இப்பக்கத்துக்கான அடொம் ஓடை கிடையாது",
-       "tooltip-t-contributions": "இப்பயனரின்  பங்களிப்புக்களின் பட்டியலைப் பார்",
-       "tooltip-t-emailuser": "இப் பயனருக்கு மின்னஞ்சல் செய்",
+       "tooltip-t-contributions": "{{GENDER:$1|இப்பயனரின்}} பங்களிப்புக்களின் பட்டியலைப் பார்",
+       "tooltip-t-emailuser": "{{GENDER:$1|இப் பயனருக்கு}} மின்னஞ்சல் செய்",
        "tooltip-t-info": "இப்பக்கத்தைப்பற்றி மேலதிக விபரம்",
        "tooltip-t-upload": "கோப்புகளைப் பதிவேற்றுக",
        "tooltip-t-specialpages": "அனைத்துச் சிறப்புப் பக்கங்களின் பட்டியல்",
        "lastmodifiedatby": "இப்பக்கம் கடைசியாக $2, $1 அன்று $3 என்ற பயனரால் தொகுக்கப்பட்டது.",
        "othercontribs": "$1 உடைய ஆக்கத்தை அடிப்படையாகக் கொண்டது.",
        "others": "மற்றவைகள்",
-       "siteusers": "{{SITENAME}} தளத்தின் {{PLURAL:$2|பயனர்|பயனர்கள்}} $1",
+       "siteusers": "{{SITENAME}} தளத்தின் {{PLURAL:$2|{{GENDER:$1|பயனர்}}|பயனர்கள்}} $1",
        "anonusers": "{{SITENAME}} அறியபாடாத   {{PLURAL:$2| பயனர்|பயனர்கள்}}$1",
        "creditspage": "பக்க நன்றிகள்",
        "nocredits": "அங்கே இந்த பக்கத்திற்கான மதிப்பிலக்குகள் எதுவும் இல்லை .",
        "pageinfo-robot-index": "அனுமதிக்கப்படுகிறது",
        "pageinfo-robot-noindex": "அனுமதிக்கப்படாதது",
        "pageinfo-watchers": "பக்கப் பார்வையாளர்கள் எண்ணிக்கை",
+       "pageinfo-visiting-watchers": "அண்மைய தொகுப்புக்களை பார்த்த பக்க கவனிப்பாளர் எண்ணிக்கை",
        "pageinfo-few-watchers": "விட குறைவானது $1 {{PLURAL:$1|watcher|watchers}}",
+       "pageinfo-few-visiting-watchers": "அண்மைய தொகுப்புக்களை பார்த்த பக்க கவனிப்பாளர் இருக்கலாம், இல்லாமலும் இருக்கலாம்",
        "pageinfo-redirects-name": "இந்தப் பக்கத்திற்கான வழிமாற்றுகளின் எண்ணிக்கை",
        "pageinfo-subpages-name": "இந்தப் பக்கத்தின் துணைப் பக்கங்கள்",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|வழிமாற்று|வழிமாற்றுகள்}}; $3 {{PLURAL:$3|வழிமாற்றில்லாதது|வழிமாற்றில்லாதவை}})",
        "pageinfo-category-files": "கோப்புகளின் எண்ணிக்கை",
        "markaspatrolleddiff": "ரோந்திட்டதாக குறி",
        "markaspatrolledtext": "இப்பக்கத்தை ரோந்திட்டதாகக் குறி",
+       "markaspatrolledtext-file": "இக்கோப்பு பதிப்பினை ரோந்திட்டதாக குறி",
        "markedaspatrolled": "ரோந்திட்டதாக குறிக்கப்பட்டது",
        "markedaspatrolledtext": "தெரிவு செய்யப்பட்டத் திருத்தம் [[:$1]]  பார்வையிட்டதாக குறிக்கப்பட்டுள்ளது.",
        "rcpatroldisabled": "அண்மைய மாற்றங்களின் ரோந்து முடக்கப்பட்டுள்ளது",
        "newimages-legend": "வடிகட்டி",
        "newimages-label": "கோப்பின் பெயர் (அல்லது அதன் பகுதி):",
        "newimages-showbots": "தானியிங்கி பதிவேற்றங்களைக் காட்டு",
+       "newimages-hidepatrolled": "ரோந்திட்ட பதிவேற்றங்களை மறை",
        "noimages": "பார்வைக்கு ஓன்றுமில்லை.",
        "ilsubmit": "தேடுக",
        "bydate": "நாள் வழி",
        "exif-compression-4": "சிசிஐடிடி குழு 4 தொலைநகல் உள்ளீடு",
        "exif-copyrighted-true": "பதிப்புரிமைப்பட்டது",
        "exif-copyrighted-false": "பதிப்புரிமை நிலையை திரிவுசெய்யப்படவில்லை",
+       "exif-photometricinterpretation-1": "கருப்பு மற்றும் வெள்ளை (கருப்பு 0)",
        "exif-unknowndate": "நாள் தெரியாது",
        "exif-orientation-1": "வழமையான",
        "exif-orientation-2": "கிடைமட்டமாக பிறட்டியது",
        "watchlisttools-edit": "என்கவனிப்பு பட்டியலை பார்த்து தொகு",
        "watchlisttools-raw": "விக்கி நிரலற்றக் கவனிப்புப் பட்டியலைத் தொகு",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|பேச்சு]])",
+       "timezone-local": "உள்ளூர்",
        "duplicate-defaultsort": "'''எச்சரிக்கை:''' இயல்புநிலை வரிசைப்படுத்து விசை ''$2 \" முன்னால் இயல்புநிலை வரிசைப்படுத்து விசை \"$1\" ஐ மீறுகிறது.",
        "version": "பதிப்பு",
        "version-extensions": "நிறுவப்பட்ட நீட்சிகள்",
        "version-libraries": "நிறுவப்பட்ட நூலகங்கள்",
        "version-libraries-library": "நூலகம்",
        "version-libraries-version": "பதிப்பு",
+       "version-libraries-license": "காப்புரிமை",
+       "version-libraries-description": "விளக்கம்",
+       "version-libraries-authors": "ஆசிரியர்கள்",
        "redirect": "கோப்பு, பயனர், பக்கம் அல்லது திருத்த ID ஆன வழிமாற்று",
        "redirect-legend": "கோப்பு அல்லது பக்கத்துக்கு வழிமாற்று",
        "redirect-submit": "செல்க",
        "redirect-page": "பக்க அடையாளம்",
        "redirect-revision": "பக்கத் திருத்தம்",
        "redirect-file": "கோப்பின் பெயர்",
+       "redirect-logid": "புகுபதிகை ID",
        "redirect-not-exists": "மதிப்பு காணப்பெறவில்லை",
        "fileduplicatesearch": "நகல் கோப்புகளைத் தேடுக",
        "fileduplicatesearch-summary": "நகல் கோப்புகளை  ஹாஷ் மதிப்புகள் அடிப்படையில் தேடு.",
        "tags-delete-reason": "காரணம்:",
        "tags-delete-submit": "குறிச்சொல்லை மீளாதபடி நீக்குக",
        "tags-activate-title": "குறிச்சொல்லை செயலாக்குக",
+       "tags-activate-reason": "காரணம்:",
+       "tags-activate-submit": "செயற்படுத்து",
+       "tags-deactivate-title": "தொடுப்பை முடக்கு",
+       "tags-deactivate-reason": "காரணம்:",
+       "tags-deactivate-not-allowed": "\"$1\" தொடுப்பை முடக்குவது சாத்தியம் இல்லை.",
+       "tags-deactivate-submit": "முடக்குக",
        "tags-edit-title": "குறிச்சொல்லை தொகு",
        "tags-edit-manage-link": "குறிச்சொற்களை நிர்வகி",
        "tags-edit-existing-tags": "இருக்கும் குறிச்சொற்கள்",
-       "tags-edit-existing-tags-none": "\"ஏதும்யில்லை\"",
+       "tags-edit-existing-tags-none": "<em>\"ஏதுமில்லை\"</em>",
        "tags-edit-new-tags": "புதிய குறிச்சொற்கள்:",
        "tags-edit-add": "இந்த குறிச்சொற்களை சேர்க",
        "tags-edit-remove": "இந்த குறிச்சொற்களை நீக்குக:",
        "htmlform-cloner-create": "மேலும் சேர்க",
        "htmlform-cloner-delete": "நீக்குக",
        "htmlform-cloner-required": "குறைந்து ஒரு மதிப்பு தேவைப்படும்.",
+       "htmlform-title-badnamespace": "\"{{ns:$2}}\" பெயர்வெளியில் [[:$1]] இல்லை",
+       "htmlform-title-not-creatable": "\"$1\" ஒரு உருவாக்கத்தக்க பக்கத் தலைப்பு அல்ல",
+       "htmlform-title-not-exists": "$1 இ்டம்பெறவில்லை.",
+       "htmlform-user-not-exists": "<strong>$1</strong> இ்டம்பெறவில்லை.",
+       "htmlform-user-not-valid": "<strong>$1</strong> என்பது செல்லுபடியான பயனர் பெயர் அல்ல.",
        "sqlite-has-fts": "$1முழு-உரை தேடல் ஆதரவுடன்",
        "sqlite-no-fts": "$1 முழு-உரை தேடல் ஆதரவு இல்லாமல்",
        "logentry-delete-delete": "$3 பக்கத்தை $1 {{GENDER:$2|நீக்கினார்}}",
        "revdelete-uname-unhid": "பயனர் பெயர் மறைக்கப்பட்டது நீக்கப்பட்டுள்ளது.",
        "revdelete-restricted": "நிர்வாகிகளுக்கு கட்டுப்பாடுகள் விதிக்கப்பட்டது",
        "revdelete-unrestricted": "நிர்வாகிகளின் கட்டுப்பாடுகள் நீக்கப்பட்டது",
+       "logentry-block-block": "$1 $5 நேர அளவிற்கு {{GENDER:$4|$3}} {{GENDER:$2|தடைசெய்யப்பட்டார்}} $6",
+       "logentry-block-unblock": "$1-இன் {{GENDER:$2|தடைநீக்கப்பட்டது}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1-இன் {{GENDER:$4|$3}}-இற்கான தடை அமைப்பு $5 கால அளவிற்கு {{GENDER:$2|மாற்றப்பட்டது}} $6",
+       "logentry-suppress-block": "$1 $5 நேர அளவிற்கு {{GENDER:$4|$3}} {{GENDER:$2|தடைசெய்யப்பட்டார்}} $6",
+       "logentry-suppress-reblock": "$1-இன் {{GENDER:$4|$3}}-இற்கான தடை அமைப்பு $5 கால அளவிற்கு {{GENDER:$2|மாற்றப்பட்டது}} $6",
+       "logentry-import-upload": "$1 $3-ஐ கோப்பு பதிவேற்று மூலம் {{GENDER:$2|இறக்குமதி செய்தார்}}",
+       "logentry-import-interwiki": "$1 $3-ஐ வேறு விக்கியிலிருந்து {{GENDER:$2|இறக்குமதி செய்தார்}}",
+       "logentry-import-interwiki-details": "$1 $3-ஐ $5-இலிருந்து {{GENDER:$2|இறக்குமதி செய்தார்}} ($4 {{PLURAL:$4|மாற்றம்|மாற்றங்கள்}})",
+       "logentry-merge-merge": "$1 $3-இனை $4-இனுள் {{GENDER:$2|இணைத்தார்}}",
        "logentry-move-move": "$1 பக்கம் $3-ஐ $4க்கு {{GENDER:$2|நகர்த்தினார்}}",
        "logentry-move-move-noredirect": "$1, $3 பக்கத்தை $4 என்ற தலைப்புக்கு வழிமாற்று இன்றி நகர்த்தியுள்ளார்",
        "logentry-move-move_redir": "$1 பக்கம் $3 ஐ $4 க்கு முன்னிருந்த வழிமாற்றின் மேலாக நகர்த்தியுள்ளார்",
        "logentry-move-move_redir-noredirect": "$1 பக்கம் $3 ஐ $4 க்கு முன்னிருந்த வழிமாற்றின் மேலாக, இன்னொரு வழிமாற்றின்றி நகர்த்தியுள்ளார்",
-       "logentry-patrol-patrol": "பக்கம் $3 இன்  திருத்தம் $4 ஐ  $1 பார்வையிட்டுக் குறிக்கப்பட்டது. .",
-       "logentry-patrol-patrol-auto": "தானாக  பக்கம்  $3  ன் பரிசீலனை  $4   ஆனது ரோந்து செய்யப்பட்டது என $1 குறியிடப்பட்டது. .",
-       "logentry-newusers-newusers": "பயனர் கணக்கு $1 உருவாக்கப்பட்டது",
+       "logentry-patrol-patrol": "பக்கம் $3 இன் திருத்தம் $4 ஐ  $1 பார்வையிட்டுக் குறிக்கப்பட்டது. .",
+       "logentry-patrol-patrol-auto": "தானாக பக்கம் $3-ன் பரிசீலனை $4 ஆனது ரோந்து செய்யப்பட்டது என $1 குறியிடப்பட்டது.",
+       "logentry-newusers-newusers": "பயனர் கணக்கு $1 {{GENDER:$2|உருவாக்கப்பட்டது}}",
        "logentry-newusers-create": "$1 புதிய பயனர் கணக்கு உருவாக்கப்பட்டுள்ளது.",
-       "logentry-newusers-create2": "$3 பயனர் கணக்கினை $1 உருவாக்கினார்",
+       "logentry-newusers-create2": "$3 பயனர் கணக்கினை $1 {{GENDER:$2|உருவாக்கினார்}}",
+       "logentry-newusers-byemail": "$3 பயனர் கணக்கினை $1 {{GENDER:$2|உருவாக்கி}}, கடவுச்சொல்லை மின்னஞ்சலுக்கு அனுப்பினார்",
        "logentry-newusers-autocreate": "பயனர் கணக்கு $1 தானாக உருவாக்கப்பட்டது",
+       "logentry-protect-move_prot": "$1 காப்பு அமைப்பை $4-இலிருந்து $3-இற்கு {{GENDER:$2|நகர்த்தினார்}}",
+       "logentry-protect-unprotect": "$1 $3-இலிருந்து காப்பை {{GENDER:$2|நீக்கினார்}}",
+       "logentry-protect-protect": "$1 $3-இனை $4-இற்கு {{GENDER:$2|காப்பச் செய்தார்}}",
+       "logentry-protect-protect-cascade": "$1 $3-இனை $4-இற்கு {{GENDER:$2|காப்பச் செய்தார்}} [விழுத்தொடர்]",
+       "logentry-protect-modify": "$1 $3-க்கான காப்பு நிலையை $4 நேரத்திற்கு {{GENDER:$2|மாற்றினார்}}",
+       "logentry-protect-modify-cascade": "$1 $3-க்கான காப்பு நிலையை $4 நேரத்திற்கு {{GENDER:$2|மாற்றினார்}} [விழுத்தொடர்]",
+       "logentry-rights-rights": "$1 $3-இற்கான குழு அங்கத்துவத்தை $4-இலிருந்து $5-இற்கு {{GENDER:$2|மாற்றினார்}}",
+       "logentry-rights-rights-legacy": "$1 $3-இற்கான குழு அங்கத்துவத்தை {{GENDER:$2|மாற்றினார்}}",
+       "logentry-rights-autopromote": "$1 தானியக்கமாக $4-இலிருந்து $5-இற்கு {{GENDER:$2|பதவி உயற்றபபட்டார்}}",
        "logentry-upload-upload": "$1 $3ஐ {{GENDER:$2|பதிவேற்றினார்}}",
+       "logentry-upload-overwrite": "$1 $3-இற்கான புதிய பதிப்பை {{GENDER:$2|பதிவேற்றினார்}}",
+       "logentry-upload-revert": "$1 $3-ஐ {{GENDER:$2|பதிவேற்றினார்}}",
        "log-name-managetags": "குறிச்சொல் மேலாண்மை குறிப்பு",
+       "logentry-managetags-create": "$1 \"$4\" என்ற தொடுப்பை {{GENDER:$2|உருவாக்கினார்}}",
+       "logentry-managetags-activate": "$1 பயனர் மற்றும் தானியங்கிகள் பயன்படுத்துவதற்காக \"$4\" தொடுப்பை {{GENDER:$2|செயற்படுத்தினார்}}",
+       "logentry-managetags-deactivate": "$1 பயனர் மற்றும் தானியங்கிகள் பயன்படுத்துவதற்காக \"$4\" தொடுப்பை {{GENDER:$2|செயற்பாட்டை நிறுத்தினார்}}",
        "log-name-tag": "குறிச்சொல் குறிப்பு",
        "rightsnone": "(எதுவுமில்லை)",
        "revdelete-summary": "தொகுப்பு சுருக்கத்தை",
        "pagelang-language": "மொழி",
        "pagelang-use-default": "இயல்பு நிலை மொழி",
        "pagelang-select-lang": "மொழியைத் தேர்ந்தெடு",
+       "pagelang-submit": "சமர்ப்பி",
        "right-pagelang": "பக்க மொழியை மாற்றுக",
        "action-pagelang": "பக்க மொழியை மாற்றுக",
        "log-name-pagelang": "மொழி பதிவை மாற்றுக",
        "mediastatistics-header-video": "காணொளிகள்",
        "mediastatistics-header-office": "அலுவலகம்",
        "mediastatistics-header-text": "உரை வடிவ",
+       "mediastatistics-header-total": "அனைத்துக் கோப்புக்களும்",
        "json-error-syntax": "தொடரியல் பிழை",
        "special-characters-group-latin": "இலத்தீன்",
        "special-characters-group-latinextended": "இலத்தீன் விரிவு",
        "special-characters-group-thai": "தாய்",
        "special-characters-group-lao": "இலாவோ",
        "special-characters-group-khmer": "கெமெர்",
+       "special-characters-title-endash": "சிறு கோடு",
+       "special-characters-title-emdash": "பெரு கோடு",
        "special-characters-title-minus": "கழித்தல் குறி",
-       "api-error-blacklisted": "தயவுகூர்ந்து வேறு, விளக்கமான தலைப்பைத் தேர்ந்தெடுக்கவும்."
+       "mw-widgets-dateinput-no-date": "திகதி தெரிவுச் செய்யப்படவில்லை",
+       "mw-widgets-titleinput-description-new-page": "இப்பக்கம் இன்னும் உருவாக்கப்படவில்லை",
+       "mw-widgets-titleinput-description-redirect": "$1-க்கு வழிமாற்று",
+       "api-error-blacklisted": "தயவுகூர்ந்து வேறு, விளக்கமான தலைப்பைத் தேர்ந்தெடுக்கவும்.",
+       "sessionprovider-generic": "$1 பகுதி",
+       "sessionprovider-mediawiki-session-cookiesessionprovider": "குக்கீயை அடிபடையாக்கக் கொண்ட பகுதிகள்",
+       "sessionprovider-nocookies": "குக்கீசு செயலற்று இருக்கலாம். உங்களது குக்கீசு செயலில் உள்ளது என உறுதிப்படுத்திவிட்டு மீண்டும் முயல்க.",
+       "randomrootpage": "தற்போக்கு வேர்ப் பக்கம்"
 }
index f183f40..11736b1 100644 (file)
        "recentchanges-label-bot": "ಈ ಸಂಪದನೆ ಒಂಜಿ ಬಾಟ್‍ಡ್ ಆತ್ಂಡ್",
        "recentchanges-label-unpatrolled": "ಈ ಸಂಪಾದನೆನ್ ನನಲಾ ಪರೀಕ್ಷೆ ಮಲ್ತ್‌ಜಿ.",
        "recentchanges-label-plusminus": "ಬೈಟ್ಸ್‌ದ ಲೆಕ್ಕೊಡು ಈ ಪಾಲೆದ ಗಾತ್ರೊ ಬದಲಾತ್ಂಡ್",
-       "recentchanges-legend-heading": "'''ಲೆಜೆಂಡ್:'''",
+       "recentchanges-legend-heading": "<strong>ಲೆಜೆಂಡ್:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ಬೊಕ್ಕೊಲಾ ತೂಲೆ [[Special:NewPages|ಪೊಸ ಪುಟೊದ ಪಟ್ಟಿ]])",
        "rclistfrom": "$3 $2 ರ್ದ್ ಸುರುವಾತಿನ ಪೊಸ ಬದಲಾವಣೆಲೆನ್ ತೊಜ್ಪಾವು",
        "rcshowhideminor": "$1 ಎಲ್ಯೆಲ್ಯ ಬದಲಾವಣೆಲು",
index a7055be..ef2c8a2 100644 (file)
        "myprivateinfoprotected": "మీ అంతరంగిక సమాచారాన్ని సవరించేందుకు మీకు అనుమతి లేదు.",
        "mypreferencesprotected": "మీ అభీష్టాలను సవరించేందుకు మీకు అనుమతి లేదు.",
        "ns-specialprotected": "ప్రత్యేక పేజీలపై దిద్దుబాట్లు చేయలేరు.",
-       "titleprotected": "[[User:$1|$1]] ఈ శీర్షికని సృష్టించకుండా ఇది సంరక్షించబడింది.\nఅందుకు ఇచ్చిన కారణం: \"<em>$2</em>\".",
+       "titleprotected": "[[User:$1|$1]] ఈ శీర్షికని సృష్టించకుండా ఇది సంరక్షించబడింది.\nఅందుకు ఇచ్చిన కారణం: <em>$2</em>.",
        "filereadonlyerror": "ఫైలు ఖజానా \"$2\" రీడ్-ఓన్లీ స్థితిలో ఉండటం చేత \"$1\" ఫైలులో మార్పులు చెయ్యలేకపోయాం.\n\nదానికి తాళం వేసిన అధికారి ఇచ్చిన వివరణ ఇది: \"$3\".",
        "invalidtitle-knownnamespace": "పేరుబరి \"$2\", పాఠ్యము \"$3\" తో కూడిన ఈ శీర్షిక చెల్లనిది",
        "invalidtitle-unknownnamespace": "అపరిచితమైన పేరుబరి సంఖ్య \"$1\", పాఠ్యము \"$2\" తో కూడిన ఈ శీర్షిక చెల్లనిది",
        "undo-summary-username-hidden": "దాచబడిన వాడుకరి చేసిన కూర్పు $1 ని వెనక్కి తిప్పండి",
        "cantcreateaccounttitle": "ఈ ఖాతా తెరవలేము",
        "cantcreateaccount-text": "ఈ ఐపీ అడ్రసు ('''$1''') నుండి ఖాతా సృష్టించడాన్ని [[User:$3|$3]] నిరోధించారు.\n\n$3 చెప్పిన కారణం: ''$2''",
-       "cantcreateaccount-range-text": "'''$1''' శ్రేణిలోని IP చిరునామాల నుండి ఖాతా సృష్టించడాన్ని [[User:$3|$3]] నిషేధించారు. మీ IP చిరునామా ('''$4''') ఈ శ్రేణిలోనే ఉంది.\n\n$3 ఇచ్చిన కారణం: ''$2''",
+       "cantcreateaccount-range-text": "<strong>$1</strong> శ్రేణిలోని IP చిరునామాల నుండి ఖాతా సృష్టించడాన్ని [[User:$3|$3]] నిషేధించారు. మీ IP చిరునామా (<strong>$4</strong>) ఈ శ్రేణిలోనే ఉంది.\n\n$3 ఇచ్చిన కారణం: <em>$2</em>",
        "viewpagelogs": "ఈ పేజీకి సంబంధించిన లాగ్‌లను చూడండి",
        "nohistory": "ఈ పేజీకి మార్పుల చరిత్ర లేదు.",
        "currentrev": "ప్రస్తుతపు సంచిక",
        "recentchanges-label-bot": "ఈ మార్పును ఒక బాటు చేసింది",
        "recentchanges-label-unpatrolled": "ఈ దిద్దుబాటు మీద నిఘా లేదు",
        "recentchanges-label-plusminus": "ఈ పేజి పరిమాణంలో  జరిగిన మార్పుల  బైట్ల సంఖ్య",
-       "recentchanges-legend-heading": "'''సూచిక :'''",
+       "recentchanges-legend-heading": "<strong>సూచిక :</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|కొత్త పేజీల జాబితా]]ను కూడా చూడండి)",
        "recentchanges-submit": "చూపించు",
        "rcnotefrom": "<strong>$2</strong> నుండి జరిగిన మార్పులు (<strong>$1</strong> వరకు) కింద చూపబడ్డాయి.",
        "rcshowhidemine": "నా మార్పులను $1",
        "rcshowhidemine-show": "చూపించు",
        "rcshowhidemine-hide": "దాచు",
+       "rcshowhidecategorization": "పేజి  వర్గీకరణ $1",
        "rcshowhidecategorization-show": "చూపించు",
        "rcshowhidecategorization-hide": "దాచు",
        "rclinks": "గత  $2 రోజుల లోని చివరి $1 మార్పులను చూపించు <br />$3",
        "watchthisupload": "ఈ ఫైలుని గమనించు",
        "filewasdeleted": "ఇదే పేరుతో ఉన్న ఒక ఫైలును గతంలో ఎక్కించారు. తరువాతి కాలంలో దాన్ని తొలగించారు. దాన్నీ మళ్ళీ ఎక్కించే ముందు, మీరు $1 ను చూడాలి.",
        "filename-bad-prefix": "మీరు అప్లోడు చేస్తున్న ఫైలు పేరు <strong>\"$1\"</strong> తో మొదలవుతుంది. ఇది డిజిటల్ కెమెరాలు ఆటోమాటిగ్గా ఇచ్చే పేరు. మరింత వివరంగా ఉండే పేరును ఎంచుకోండి.",
-       "upload-success-subj": "విజయవంతమైన ఎక్కింపు",
-       "upload-success-msg": "[$2] నుండి మీ ఎక్కింపు సఫలమైంది. అది ఇక్కడ అందుబాటులో ఉంది: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "ఎక్కింపు సమస్య",
-       "upload-failure-msg": "[$2] నుండి మీ ఎక్కింపుతో ఏదో సమస్య ఉంది:\n\n$1",
-       "upload-warning-subj": "ఎక్కింపు హెచ్చరిక",
-       "upload-warning-msg": "[$2] నుండి మీ ఎక్కింపులో ఏదో సమస్య ఉంది.  దాన్ని సరిచేయడానికి మీరు తిరిగి [[Special:Upload/stash/$1|ఎక్కింపు ఫారానికి]] వెళ్ళవచ్చు.",
        "upload-proto-error": "తప్పు ప్రోటోకోల్",
        "upload-proto-error-text": "రిమోట్ అప్‌లోడులు చెయ్యాలంటే URLలు <code>http://</code> లేదా <code>ftp://</code> తో మొదలు కావాలి.",
        "upload-file-error": "అంతర్గత లోపం",
        "querypage-disabled": "పనితీరు కారణాల వలన, ఈ ప్రత్యేకపేజీని అశక్తం చేసాం.",
        "apihelp": "API సహాయం",
        "apihelp-no-such-module": "\"$1\" మాడ్యూలు కనబడలేదు.",
+       "apisandbox": "API ప్రయోగశాల",
+       "apisandbox-api-disabled": "ఈ సైటులో API అచేతనమై ఉంది.",
+       "apisandbox-submit": "అభ్యర్ధించు",
+       "apisandbox-reset": "తుడిచివేయి",
+       "apisandbox-examples": "ఉదాహరణ",
+       "apisandbox-results": "ఫలితం",
+       "apisandbox-request-url-label": "అభ్యర్థన URL:",
+       "apisandbox-request-time": "అభ్యర్ధన సమయం: $1",
        "booksources": "పుస్తక మూలాలు",
        "booksources-search-legend": "పుస్తక మూలాల కోసం వెతుకు",
        "booksources-search": "వెతుకు",
        "wlheader-showupdated": "మీ గత సందర్శన తరువాత మారిన పేజీలు <strong>బొద్దు</strong>గా చూపించబడ్డాయి.",
        "wlnote": "$3 నాడు $4 సమయానికి, గడచిన {{PLURAL:$2|గంటలో|'''$2''' గంటలలో}} జరిగిన {{PLURAL:$1|ఒక్క మార్పు కింద ఉంది|'''$1''' మార్పులు కింద ఉన్నాయి}}.",
        "wlshowlast": "గత $1 గంటల $2 రోజులకు చూపించు",
-       "watchlistall2": "అన్నీ",
        "watchlist-hide": "దాచు",
        "watchlist-submit": "చూపించు",
        "wlshowtime": "చూపించాల్సిన కాలం:",
        "rollbackfailed": "రద్దుచేయటం విఫలమైంది",
        "cantrollback": "రచనను వెనక్కి తీసుకువెళ్ళలేము; ఈ పేజీకి ఇదొక్కటే రచన.",
        "alreadyrolled": "[[:$1]]లో [[User:$2|$2]] ([[User talk:$2|చర్చ]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) చేసిన చివరి మార్పును రద్దు చెయ్యలేము;\nమరెవరో ఆ పేజీని వెనక్కి మళ్ళించారు, లేదా మార్చారు.\n\nచివరి మార్పులు చేసినవారు: [[User:$3|$3]] ([[User talk:$3|చర్చ]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "దిద్దుబాటు సారాశం: \"''$1''\".",
+       "editcomment": "దిద్దుబాటు సారాశం: <em>$1</em>.",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|చర్చ]]) చేసిన మార్పులను [[User:$1|$1]] యొక్క చివరి కూర్పు వరకు తిప్పికొట్టారు.",
        "revertpage-nouser": "దాచబడిన వాడుకరి చేసిన మార్పులను [[User:$1|$1]] యొక్క చివరి కూర్పుకి తిప్పికొట్టారు",
        "rollback-success": "$1 చేసిన దిద్దుబాట్లను వెనక్కు తీసుకెళ్ళాం; తిరిగి $2 చేసిన చివరి కూర్పుకు మార్చాం.",
        "log-description-pagelang": "ఇది పేజీ భాష మార్పుల చిట్టా.",
        "logentry-pagelang-pagelang": "$3 పేజీ భాషను $4 నుండి $5 కి $1 {{GENDER:$2|మార్చారు}}.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (చేతనం)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''అచేతనం''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>అచేతనం</strong>)",
        "mediastatistics": "మాధ్యమ గణాంకాలు",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 బైటు|$1 బైట్లు}} ($2; $3%)",
        "mediastatistics-table-mimetype": "MIME రకం",
index 4b170ce..7a0fc81 100644 (file)
        "cascadeprotected": "Ин саҳифа аз вироиш муҳофизат шудааст, барои ин ки  дар {{PLURAL:$1|саҳифаи|саҳифаҳои}} муҳофизатшудаи зерин, ки гузаинаи \"обшорӣ\" дар {{PLURAL:$1|он|онҳо}} интихоб шудааст, фаро гирифтааст: $2",
        "namespaceprotected": "Шумо иҷозати вироиши саҳифаҳои фазоиноми '''$1'''-ро надоред.",
        "ns-specialprotected": "Саҳифаҳои вижа ғайри қобили вироиш ҳастанд.",
-       "titleprotected": "Эҷоди саҳифае бо ин унвон аз тарафи [[User:$1|$1]] ҷилавгирӣ шудааст.\nДалели зикршуда аз ин қарор аст ''$2''.",
+       "titleprotected": "Эҷоди саҳифае бо ин унвон аз тарафи [[User:$1|$1]] ҷилавгирӣ шудааст.\nДалели зикршуда аз ин қарор аст <em>$2</em>.",
        "exception-nologin": "Вуруд нашудаед",
        "virus-badscanner": "Танзимоти бад: пуишгари вируси ношинохта: ''$1''",
        "virus-scanfailed": "пуиш номуваффақ (рамзи $1)",
        "rollbackfailed": "Вогардони нашуд",
        "cantrollback": "Наметавон вироишро вогардонд; охирин ҳиссагузор танҳо муаллифи ин мақола аст.",
        "alreadyrolled": "Охирин вироиши [[:$1]] аз тарафи [[User:$2|$2]] ([[User talk:$2|Баҳс]]) наметавон вогардонӣ кард; пеш аз ин шахси дигаре мақоларо вироиш ё вогардонӣ кардааст.\n\nОхирин вироиш аз тарафи [[User:$3|$3]] ([[User talk:$3|Баҳс]]) буд.",
-       "editcomment": "Хулосаи вироиш ин буд: \"''$1''\".",
+       "editcomment": "Хулосаи вироиш ин буд: <em>$1</em>.",
        "revertpage": "Вироиши [[Special:Contributions/$2|$2]] ([[User talk:$2|Баҳс]]) вогардонида шуд ба охирин тағйире, ки [[User:$1|$1]] анҷом дода буд",
        "rollback-success": "Вироишҳои $1 вогардонӣ шуд; саҳифа ба вироиши $2 баргардонида шуд.",
        "sessionfailure": "Ба назар мерасад, мушкилие дар мавриди нишасти корбарии шумо вуҷуд дорад; амали дархостшуда ба унвони иқдоми пешгирона дар баробари рабуда шудани иттилооти нишасти корбарӣ, лағв шуд. Лутфан тугмаи \"бозгашт\"-ро дар мурургари худ пахш кунед ва саҳифае, ки аз он инҷо расидаед муҷаддадан фарохонӣ кунед, сипас муҷаддадан боз саъй кунед.",
index 741a9e7..f6e9a95 100644 (file)
        "cascadeprotected": "In sahifa az viroiş muhofizat şudaast, baroi in ki  dar {{PLURAL:$1|sahifai|sahifahoi}} muhofizatşudai zerin, ki guzainai \"obşorī\" dar {{PLURAL:$1|on|onho}} intixob şudaast, faro giriftaast: $2",
        "namespaceprotected": "Şumo içozati viroişi sahifahoi fazoinomi '''$1'''-ro nadored.",
        "ns-specialprotected": "Sahifahoi viƶa ƣajri qobili viroiş hastand.",
-       "titleprotected": "Eçodi sahifae bo in unvon az tarafi [[User:$1|$1]] çilavgirī şudaast.\nDaleli zikrşuda az in qaror ast ''$2''.",
+       "titleprotected": "Eçodi sahifae bo in unvon az tarafi [[User:$1|$1]] çilavgirī şudaast.\nDaleli zikrşuda az in qaror ast <em>$2</em>.",
        "virus-badscanner": "Tanzimoti bad: puişgari virusi noşinoxta: ''$1''",
        "virus-scanfailed": "puiş nomuvaffaq (ramzi $1)",
        "virus-unknownscanner": "antivirusi noşinos:",
        "upload-maxfilesize": "Buzurgtarin andozai parvanda: $1",
        "filewasdeleted": "Parvandae bo hamin nom peştar borguzorī va pas az on pok şudaast. Peş az borguzorī ba $1 nigared.",
        "filename-bad-prefix": "Nomi parvandae, ki şumo borguzori kardanied bo '''\"$1\"''' oƣoz meşavad, ki jak peşvandi maxsusi akshoi sabtşuda tavassuti aksbardorakhoi raqamī ast. Lutfan nomi behtari tavsifotī baroi parvanda intixob kuned.",
-       "upload-success-subj": "Firistodan bomuvaffaqijat",
        "upload-proto-error": "Qarordodi nodurust",
        "upload-proto-error-text": "Borguzori az durdast bo nişonahoe, ki bo <code>http://</code> jo <code>ftp://</code> oƣoz meşavand, nijoz dorad.",
        "upload-file-error": "Xatoi doxilī",
        "rollbacklink": "vogardoni",
        "rollbackfailed": "Vogardoni naşud",
        "cantrollback": "Nametavon viroişro vogardond; oxirin hissaguzor tanho muallifi in maqola ast.",
-       "editcomment": "Xulosai viroiş in bud: \"''$1''\".",
+       "editcomment": "Xulosai viroiş in bud: <em>$1</em>.",
        "revertpage": "Viroişi [[Special:Contributions/$2|$2]] ([[User talk:$2|Bahs]]) vogardonida şud ba oxirin taƣjire, ki [[User:$1|$1]] ançom doda bud",
        "rollback-success": "Viroişhoi $1 vogardonī şud; sahifa ba viroişi $2 bargardonida şud.",
        "sessionfailure": "Ba nazar merasad, muşkilie dar mavridi nişasti korbariji şumo vuçud dorad; amali darxostşuda ba unvoni iqdomi peşgirona dar barobari rabuda şudani ittilooti nişasti korbarī, laƣv şud. Lutfan tugmai \"bozgaşt\"-ro dar mururgari xud paxş kuned va sahifae, ki az on inço rasidaed muçaddadan faroxonī kuned, sipas muçaddadan boz sa'j kuned.",
        "movesubpage": "{{PLURAL:$1|Zersahifa|Zersahifaho}}",
        "movereason": "Sabab:",
        "revertmove": "vogardonī",
-       "delete_and_move": "Hazf va kūconidan",
        "delete_and_move_text": "==Nijoz ba hazf==\n\nMaqolai maqsad \"[[:$1]]\" vuçud dorad. Ojo mexohed onro hazf kuned to intiqol mumkin şavad?",
        "delete_and_move_confirm": "Bale, sahifa hazf şavad",
        "delete_and_move_reason": "Hazf şud baroi mumkin şudani kūconidan",
        "expand_templates_ok": "Ta'jid",
        "expand_templates_remove_comments": "Hazfi tavzehot",
        "expand_templates_generate_xml": "Namoişi daraxti taçzehi XML",
-       "expand_templates_preview": "Peşnamoiş"
+       "expand_templates_preview": "Peşnamoiş",
+       "randomrootpage": "Sahifai reşaviji tasodufī"
 }
index 5620cbb..453be28 100644 (file)
        "myprivateinfoprotected": "คุณไม่มีสิทธิแก้ไขข้อมูลส่วนตัวของคุณ",
        "mypreferencesprotected": "คุณไม่มีสิทธิแก้ไขการตั้งค่าของคุณ",
        "ns-specialprotected": "ไม่สามารถแก้ไขหน้าพิเศษ",
-       "titleprotected": "ชื่อเรื่องนี้ถูก [[User:$1|$1]] ป้องกันมิให้สร้าง\nเหตุผลที่ให้ไว้คือ ''<em>$2</em>''",
+       "titleprotected": "ชื่อเรื่องนี้ถูก [[User:$1|$1]] ป้องกันมิให้สร้าง\nเหตุผลที่ให้ไว้คือ <em>$2</em>",
        "filereadonlyerror": "ไม่สามารถแก้ไขไฟล์ \"$1\" เพราะที่เก็บไฟล์ \"$2\" อยู่ในภาวะอ่านอย่างเดียว\n\nผู้ดูแลระบบที่ล็อกให้คำอธิบายว่า: \"$3\"",
        "invalidtitle-knownnamespace": "ชื่อเรื่องที่มีเนมสเปซ \"$2\" กับข้อความ \"$3\" ไม่ถูกต้อง",
        "invalidtitle-unknownnamespace": "ชื่อเรื่องที่ไม่ทราบเนมสเปซหมายเลข $1 กับข้อความ \"$2\" ไม่ถูกต้อง",
        "undo-summary-username-hidden": "ทำกลับรุ่นแก้ไข $1 โดยผู้ใช้ไม่ระบุชื่อ",
        "cantcreateaccounttitle": "ไม่สามารถสร้างบัญชีได้",
        "cantcreateaccount-text": "การสร้างบัญชีใหม่จากที่อยู่ไอพีนี้ ('''$1''') ถูกระงับโดย [[User:$3|$3]]\n\nเหตุผลที่ $3 ให้ไว้ คือ ''$2''",
-       "cantcreateaccount-range-text": "การสร้างบัญชีจากเลขที่อยู่ไอพีในช่วง '''$1''' ซึ่งรวมเลขที่อยู่ไอพีของคุณ ('''$4''') ถูกบล็อกโดย [[User:$3|$3]] \n\nเหตุผลที่ $3 ชี้แจง คือ ''$2''",
+       "cantcreateaccount-range-text": "การสร้างบัญชีจากเลขที่อยู่ไอพีในช่วง <strong>$1</strong> ซึ่งรวมเลขที่อยู่ไอพีของคุณ (<strong>$4</strong>) ถูกบล็อกโดย [[User:$3|$3]] \n\nเหตุผลที่ $3 ชี้แจง คือ <em>$2</em>",
        "viewpagelogs": "ดูปูมของหน้านี้",
        "nohistory": "ไม่มีประวัติการแก้ไขสำหรับหน้านี้",
        "currentrev": "รุ่นปัจจุบัน",
        "recentchanges-label-bot": "บอตกระทำการแก้ไขนี้",
        "recentchanges-label-unpatrolled": "การแก้ไขนี้ยังไม่ได้ตรวจสอบ",
        "recentchanges-label-plusminus": "ขนาดของหน้าเปลี่ยนไปจำนวนไบต์เท่านี้",
-       "recentchanges-legend-heading": "'''คำอธิบายสัญลักษณ์:'''",
+       "recentchanges-legend-heading": "<strong>คำอธิบายสัญลักษณ์:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ดูเพิ่มที่ [[Special:NewPages|รายชื่อหน้าใหม่]])",
        "recentchanges-submit": "แสดง",
        "rcnotefrom": "ด้านล่างเป็นการเปลี่ยนแปลงตั้งแต่ <strong>$3, $4</strong> (แสดงมากสุด <strong>$1</strong>)",
        "upload-dialog-button-done": "เสร็จสิ้น",
        "upload-dialog-button-save": "บันทึก",
        "upload-dialog-button-upload": "อัปโหลด",
-       "upload-form-label-select-file": "เลือกไฟล์",
        "upload-form-label-infoform-title": "รายละเอียด",
        "upload-form-label-infoform-name": "ชื่อ",
        "upload-form-label-infoform-description": "คำอธิบาย",
        "rollbackfailed": "ย้อนกลับฉุกเฉินล้มเหลว",
        "cantrollback": "ไม่สามารถย้อนการแก้ไขได้ ผู้เขียนคนล่าสุดเป็นผู้เขียนคนเดียวของหน้านี้",
        "alreadyrolled": "ไม่สามารถย้อนกลับฉุกเฉินการแก้ไขสุดท้ายโดย [[User:$2|$2]] ([[User talk:$2|พูดคุย]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ในหน้า [[:$1]] มีผู้อื่นได้แก้ไขหรือย้อนกลับฉุกเฉินหน้านี้ไปก่อนแล้ว\n\nผู้แก้ไขล่าสุดของหน้านี้คือ [[User:$3|$3]] ([[User talk:$3|พูดคุย]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])",
-       "editcomment": "คำอธิบายการแก้ไขคือ: \"''$1''\"",
+       "editcomment": "คำอธิบายการแก้ไขคือ: <em>$1</em>",
        "revertpage": "ย้อนการแก้ไขโดย [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) ไปยังรุ่นแก้ไขล่าสุดโดย [[User:$1|$1]]",
        "revertpage-nouser": "ย้อนการแก้ไขโดยผู้ใช้ไม่ระบุชื่อไปยังรุ่นล่าสุดโดย {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "ย้อนการแก้ไขโดย $1; \nเปลี่ยนกลับไปรุ่นล่าสุดโดย $2",
        "log-description-pagelang": "นี่คือปูมการเปลี่ยนภาษาหน้า",
        "logentry-pagelang-pagelang": "$1 เปลี่ยนภาษาของ $3 จาก $4 เป็น $5",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (เปิดใช้งาน)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ปิดใช้งาน''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>ปิดใช้งาน</strong>)",
        "mediastatistics": "สถิติสื่อ",
        "mediastatistics-summary": "สถิติเกี่ยวกับประเภทไฟล์ที่อัปโหลด ซึ่งรวมเฉพาะรุ่นล่าสุดของไฟล์นั้น \nไม่รวมไฟล์รุ่นเก่าหรือที่ถูกลบแล้ว",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 ไบต์}} ($2; $3%)",
index 5c9dc5b..7e08873 100644 (file)
@@ -9,7 +9,8 @@
                        "Reedy",
                        "Runningfridgesrule",
                        "The Evil IP address",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Çykgytlaryň aşagyny çyz:",
        "cascadeprotected": "Bu sahypa redaktirlenmekden goralýar, sebäbi ol \"kaskadly\" opsiýasy işledilip gorag astyna alnan {{PLURAL:$1|sahypada|sahypada}} ulanylýar:\n$2",
        "namespaceprotected": "Siziň '''$1''' giňişligindäki sahypalary redaktirlemäge rugsadyňyz ýok.",
        "ns-specialprotected": "{{ns:special}} at giňişligindäki sahypalary redaktirläp bolmaýar.",
-       "titleprotected": "[[User:$1|$1]] tarapyndan döredilmeginiň öňüni almak maksady bilen bu sahypa gorag astyna alyndy.\nGörkezilen sebäp: ''$2''.",
+       "titleprotected": "[[User:$1|$1]] tarapyndan döredilmeginiň öňüni almak maksady bilen bu sahypa gorag astyna alyndy.\nGörkezilen sebäp: <em>$2</em>.",
        "virus-badscanner": "Nädogry konfigurasiýa: näbelli wirus skaneri: ''$1''",
        "virus-scanfailed": "skanirleme başa barmady (kod $1)",
        "virus-unknownscanner": "nätanyş antiwirus:",
        "right-blockemail": "Ulanyjynyň e-poçta ibermekligini blokirle",
        "right-hideuser": "Ulanyjy adyny blokirle we ony jemgyýetçilikden gizle",
        "right-ipblock-exempt": "IP blokirlemelerden, awtoblokirlemelerden we diapazon blokirlemelerinden aýlanyp geç",
-       "right-proxyunbannable": "Proksileriň awtomatik blokirlemelerinden aýlanyp geç",
        "right-unblockself": "Öz blokirlemesini aýyr",
        "right-protect": "Gorag derejelerini üýtget we goragly sahypalary redaktirle",
        "right-editprotected": "Goragly sahypalary redaktirle (goragy kaskadlamazdan)",
        "watchthisupload": "Bu faýla gözegçilik et",
        "filewasdeleted": "Şeýle atly faýl ozal ýüklenipdir we soňra öçürilipdir. Faýly ýüklemänkäňiz, $1 sahypasyna bir göz aýlaň.",
        "filename-bad-prefix": "Ýükleýän faýlyňyzyň ady umuman sanly kameralar tarapyndan awtomatik usulda goşulýan düşnüksiz '''\"$1\"''' bilen başlanýar.\nFaýlyňyz üçin has düşnükli bir at saýlamagyňyzy haýyş edýäris.",
-       "upload-success-subj": "Şowly ýükleme",
-       "upload-success-msg": "[$2] ýüklemäňiz şowly boldy. Ol şu ýerde elýeterli: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Ýükleme problemasy",
-       "upload-failure-msg": "[$2] adresinden eden ýüklemäňizde bir problema bar:\n\n$1",
-       "upload-warning-subj": "Ýükleme duýduryşy",
-       "upload-warning-msg": "[$2] adresinden eden ýüklemäňizde bir problema ýüze çykdy. Ony düzetmek üçin [[Special:Upload/stash/$1|ýükleme formuna]] dolanyp bilersiňiz.",
        "upload-proto-error": "Nädogry protokol",
        "upload-proto-error-text": "Uzakdan ýükleme, <code>http://</code> ýa-da <code>ftp://</code> bilen başlaýan URL talap edýär.",
        "upload-file-error": "Içerki säwlik",
        "rollbackfailed": "Öňki katdyna getirmeklik şowsuz",
        "cantrollback": "Özgerdişi yzyna getirip bolmaýar;\niň soňky goşant goşan ulanyjy bu sahypanyň ýeke-täk awtory bolup durýar.",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|Çekişme]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) tarapyndan [[:$1]] sahypasynda edilen iň soňky özgerdişi öňki katdyna getirip bolmaýar;\nkimdir biri ony redaktirläpdir ýa-da eýýäm öňki katdyna getiripdir.\n\nIň soňky özgerdiş eden: [[User:$3|$3]] ([[User talk:$3|Çekişme]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Özgerdişiň teswiri şeýledi: \"''$1''\".",
+       "editcomment": "Özgerdişiň teswiri şeýledi: <em>$1</em>.",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|Çekişme]]) tarapyndan edilen özgerdişler [[User:$1|$1]] tarapyndan redaktirlenen soňky wersiýasyna yzyna getirildi.",
        "revertpage-nouser": "(ulanyjy ady aýyrylan) tarapyndan edilen özgerdişler [[User:$1|$1]] tarapyndan redaktirlenen soňky wersiýasyna yzyna getirildi.",
        "rollback-success": "$1 tarapyndan edilen özgerdişler yzyna getirildi;\n$2 tarapyndan edilen soňky wersiýa gaýdyp gelindi.",
        "movenosubpage": "Bu sahypanyň kiçi sahypalary ýok.",
        "movereason": "Sebäp:",
        "revertmove": "yzyna getir",
-       "delete_and_move": "Öçür we adyny üýtget",
        "delete_and_move_text": "== Öçürilmegi zerur ==\nNiýetlenilýän \"[[:$1]]\" sahypasy eýýäm bar.\nAdy üýgetmek üçin ony öçürmek isleýärsiňizmi?",
        "delete_and_move_confirm": "Hawa, sahypany öçür",
        "delete_and_move_reason": "At üýtgetmeklik üçin öçürildi",
index e713b2d..44ff623 100644 (file)
        "myprivateinfoprotected": "Wala kang pahintulot na baguhin ang iyong pribadong impormasyon.",
        "mypreferencesprotected": "Wala kang pahintulot na baguhin ang iyong mga kagustuhan.",
        "ns-specialprotected": "Hindi pwedeng baguhin ang mga natatanging pahina.",
-       "titleprotected": "Nakasanggalang ang pamagat na ito mula sa paglikha ni [[User:$1|$1]].\nAng ibinigay na dahilan ay ''$2''.",
+       "titleprotected": "Nakasanggalang ang pamagat na ito mula sa paglikha ni [[User:$1|$1]].\nAng ibinigay na dahilan ay <em>$2</em>.",
        "filereadonlyerror": "Hindi nabago ang talaksang \"$1\" dahil ang repositoryong talaksan na \"$2\" ay nasa kalakarang mababasa lang.\n\nAng tagapangasiwang nagkandado nito ay nag-alok ng ganitong paliwanag: \"$3\".",
        "invalidtitle-knownnamespace": "Hindi katanggap-tanggap na pamagat na may puwang na pampangalang \"$2\" at tekstong \"$3\"",
        "invalidtitle-unknownnamespace": "Hindi katanggap-tanggap na pamagat na mayroong hindi nalalamang bilang na pampuwang ng pangalan na $1 at tekstong \"$2\"",
        "recentchanges-label-minor": "Isa itong munting pagbabago",
        "recentchanges-label-bot": "Gawa ng isang bot ang pagbabagong ito",
        "recentchanges-label-unpatrolled": "Hindi pa napapatrulyahan ang pagbabagong ito",
-       "recentchanges-legend-heading": "'''Gabay:'''",
+       "recentchanges-legend-heading": "<strong>Gabay:</strong>",
        "recentchanges-legend-newpage": "$1 - bagong pahina",
        "rcnotefrom": "Nasa ibaba ang mga pagbabago mula pa noong '''$2''' (ipinapakita ang magpahanggang sa '''$1''').",
        "rclistfrom": "Ipakita ang bagong mga pagbabago simula sa $3 $2",
        "rollbackfailed": "Nabigo ang pagpapagulong na pabalik sa (mas) dati",
        "cantrollback": "Hindi maibalik ang pagbabago; tanging ang may-akda lamang ng pahinang ito ang huling tagapagambag/tagapaglathala.",
        "alreadyrolled": "Hindi mapagulong na pabalik sa dati ang huling pagbabago ng [[$1]] ni ([[User talk:$2|Usapan]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nmayroon nang ibang taong nagbago o nagpagulong pabalik sa dati ng pahina.\n\nAng huling pagbabago sa pahina ay ginawa ni [[User:$3|$3]] ([[User talk:$3|Usapan]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Ang buod ng pagbabago ay: \"''$1''\".",
+       "editcomment": "Ang buod ng pagbabago ay: <em>$1</em>.",
        "revertpage": "Ibinalik ang mga pagbabago ni [[Special:Contributions/$2|$2]] ([[User talk:$2|Usapan]]) patungo sa huling rebisyon ni [[User:$1|$1]]",
        "revertpage-nouser": "Ibinalik ang mga pagbabago ni (tinanggal ang bansag) patungo sa huling rebisyon ni [[User:$1|$1]]",
        "rollback-success": "Ibinalik ang mga pagbabago ni $1; ibinalik sa huling bersyon ni $2.",
index 8342f9c..36f0429 100644 (file)
        "destfilename": "Hingoa ʻo e faile ʻe ʻalu ki ai:",
        "watchthisupload": "Leʻo he pēsí ni",
        "filewasdeleted": "Kuo hiki hake ʻa e faile mo e hingoa ʻeni pea naʻe tāmateʻi ia. Kuo pau te ke vakai ki he $1 ʻi muʻa haʻo feinga ʻo toe hiki hake ia.",
-       "upload-success-subj": "Kuo ola ʻa e hiki hake",
        "license": "Laiseni:",
        "license-header": "Laiseni:",
        "nolicense": "ʻIkai fili ha taha",
        "rollbackfailed": "Halaʻi teka hifo",
        "cantrollback": "Naʻe ʻikai lava fakafoki ʻa e fatu; ko e ʻetita fakamuimui ko e ʻetita ʻe taha pē ʻo e pēsí ni.",
        "alreadyrolled": "ʻOku ʻikai lava teka hifo ʻa e fatu fakamuimui ʻo e [[:$1]] ʻe [[User:$2|$2]] ([[User talk:$2|Alea]]); ko e tokotaha ʻe taha naʻe fatu pe fatu teka hifo ʻa e peesi.\n\nKo e fatu fakamuimui naʻe fatu ʻe [[User:$3|$3]] ([[User talk:$3|Alea]]).",
-       "editcomment": "Ko e fakamatala fatu naʻe \"''$1''\" ia.",
+       "editcomment": "Ko e fakamatala fatu naʻe <em>$1</em> ia.",
        "protectlogpage": "Tohinoa ʻo e maluʻi",
        "protectlogtext": "ʻOku ʻasi ʻi lalo ha hokohoko ʻo e ngaahi loka mo e taʻeloka fakapeesi.",
        "protectedarticle": "maluʻi: \"[[$1]]\"",
        "movelogpagetext": "Ko e hokohoko ʻo e ngaahi peesi kuo ʻunu",
        "movereason": "ʻUhinga",
        "revertmove": "foki ki he paaki motuʻa",
-       "delete_and_move": "Tāmateʻi pea ʻunu",
        "delete_and_move_text": "==Fiemaʻu tāmateʻi==\n\nʻOku toka tuʻu ʻa e kupu pehē \"[[:$1]]\". ʻOku ke fietāmateʻi ia ke fakaʻatā he ʻunu?",
        "delete_and_move_confirm": "ʻIo, tāmateʻi e pēsí",
        "delete_and_move_reason": "Kuo tāmateʻi maʻa e fakaʻatā he ʻunu",
index 8ae7345..f214131 100644 (file)
        "myprivateinfoprotected": "Sizin özel bilgilerinizi düzenleme yetkiniz yok.",
        "mypreferencesprotected": "Tercihlerinizi düzenlemek için yetkiniz yok.",
        "ns-specialprotected": "{{ns:special}} alanadı içindeki sayfalar değiştirilemez.",
-       "titleprotected": "[[User:$1|$1]] tarafından oluşturulması engellenmesi için bu sayfa koruma altına alınmıştır.\nVerilen sebep: ''$2''.",
+       "titleprotected": "[[User:$1|$1]] tarafından oluşturulması engellenmesi için bu sayfa koruma altına alınmıştır.\nVerilen sebep: <em>$2</em>.",
        "filereadonlyerror": "\"$2\" dosya deposundaki \"$1\" dosyası salt okunur modda olduğundan dolayı değiştirmek için açılamıyor.\n\nKilitleyen hizmetlinin bu konudaki nedeni: \"$3\".",
        "invalidtitle-knownnamespace": "\"$2\" alan adı için \"$3\" metni geçersiz bir başlık",
        "invalidtitle-unknownnamespace": "Bilinmeyen $1 ad alanı sayısı ve geçersiz \"$2\" başlık",
        "newpassword": "Yeni parola",
        "retypenew": "Yeni parolayı tekrar girin",
        "resetpass_submit": "Şifreyi ayarlayın ve oturum açın",
-       "changepassword-success": "Parolanız başarıyla değiştirildi!",
+       "changepassword-success": "Parolanız değiştirildi!",
        "changepassword-throttled": "Çok fazla yeni oturum açma girişiminde bulundunuz.\nLütfen tekrar denemeden önce $1 bekleyin.",
        "botpasswords": "Bot şifreleri",
        "botpasswords-disabled": "Bot şifreleri devre dışı.",
        "botpasswords-label-cancel": "İptal",
        "botpasswords-label-delete": "Sil",
        "botpasswords-label-resetpassword": "Şifreyi sıfırla",
+       "botpasswords-label-restrictions": "Kullanım kısıtlamaları:",
        "botpasswords-label-grants-column": "Verilen",
        "botpasswords-bad-appid": "Bot ismi \"$1\" geçerli değil.",
        "botpasswords-insert-failed": "Bot adı \"$1\" eklenemedi. Zaten eklenmiş olmalı?",
        "undo-summary-username-hidden": "Gizli bir kullanıcı tarafından $1 sürümü geri alınıyor",
        "cantcreateaccounttitle": "Hesap açılamıyor",
        "cantcreateaccount-text": "Bu IP adresinden ('''$1''') kullanıcı hesabı oluşturulması [[User:$3|$3]] tarafından engellenmiştir.\n\n$3 tarafından verilen sebep ''$2''",
-       "cantcreateaccount-range-text": "'''$1''' aralığındaki IP'ler için hesap oluşturma [[User:$3|$3]] tarafından engellendi, bu sizin IP adresinizi de ('''$4''') içeriyor.\n\n$3 tarafından verilen gerekçe ''$2''",
+       "cantcreateaccount-range-text": "<strong>$1</strong> aralığındaki IP'ler için hesap oluşturma [[User:$3|$3]] tarafından engellendi, bu sizin IP adresinizi de (<strong>$4</strong>) içeriyor.\n\n$3 tarafından verilen gerekçe <em>$2</em>",
        "viewpagelogs": "Bu sayfa ile ilgili kayıtları göster",
        "nohistory": "Bu sayfanın geçmiş sürümü yok.",
        "currentrev": "Güncel sürüm",
        "revdelete-submit": "Seçilen {{PLURAL:$1|sürüme|sürümlere}} uygula",
        "revdelete-success": "'''Revizyon görünürlüğü başarıyla güncellendi.'''",
        "revdelete-failure": "'''Revizyon görünürlüğü güncellenemiyor:'''\n$1",
-       "logdelete-success": "'''Günlük görünürlüğü başarıyla ayarlandı.'''",
+       "logdelete-success": "Günlük görünürlüğü ayarlandı.",
        "logdelete-failure": "'''Günlük görünürlüğü ayarlanamadı:'''\n$1",
        "revdel-restore": "görünürlüğü değiştir",
        "pagehist": "Sayfa geçmişi",
        "mergehistory-empty": "Hiçbir sürüm birleştirilemez.",
        "mergehistory-done": "$1 sayfasının $3 {{PLURAL:$3|revizyonu|revizyonu}} başarıyla [[:$2]] içine birleştirildi.",
        "mergehistory-fail": "Geçmiş birleştirmesi gerçekleştirlemiyor, lütfen sayfa ve zaman parametrelerini yeniden kontrol edin.",
+       "mergehistory-fail-invalid-dest": "Hedef sayfa geçersiz.",
+       "mergehistory-fail-permission": "Geçmiş birleştirmek için gerekli izinler yok.",
        "mergehistory-fail-toobig": "Limit olarak belirlenen $1 {{PLURAL:$1|sürümden|sürümden}} daha fazlasını taşımak gerekeceği için geçmiş birleştirme gerçekleştirilemiyor.",
        "mergehistory-no-source": "Kaynak sayfa $1 bulunmamaktadır.",
        "mergehistory-no-destination": "Hedef sayfa $1 bulunmamaktadır.",
        "recentchanges-label-bot": "Bu değişiklik bir bot tarafından yapıldı",
        "recentchanges-label-unpatrolled": "Bu değişiklik henüz gözlenmemiş",
        "recentchanges-label-plusminus": "Sayfa boyutundaki değişikliğin bayt bazında değeri",
-       "recentchanges-legend-heading": "'''Gösterge:'''",
+       "recentchanges-legend-heading": "<strong>Gösterge:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ayrıca [[Special:NewPages|yeni sayfalar listesine]] bakınız)",
        "recentchanges-submit": "Göster",
        "rcnotefrom": "<strong>$3, $4</strong> tarihinden itibaren yapılan {{PLURAL:$5|değişiklik|değişiklik}} aşağıdadır (<strong>$1</strong> tarhine kadar olanlar gösterilmektedir).",
        "rcshowhidemine": "Benim değişikliklerimi $1",
        "rcshowhidemine-show": "göster",
        "rcshowhidemine-hide": "gizle",
-       "rcshowhidecategorization": "$1 Sayfa kategorizasyonu",
+       "rcshowhidecategorization": "$1 sayfa kategorizasyonu",
        "rcshowhidecategorization-show": "Göster",
        "rcshowhidecategorization-hide": "Gizle",
        "rclinks": "Son $2 günde yapılan son $1 değişikliği göster;<br /> $3",
        "wlshowhideanons": "anonim kullanıcılar",
        "wlshowhidepatr": "incelenmiş değişiklikler",
        "wlshowhidemine": "değişikliklerim",
+       "wlshowhidecategorization": "sayfa kategorizasyonu",
        "watchlist-options": "İzleme listesi seçenekleri",
        "watching": "İzleniyor...",
        "unwatching": "İzlenmiyor...",
        "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|Tartışma]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) tarafından [[:$1]] sayfasında yapılmış son değişiklik geri döndürülemiyor;\nbaşka birisi sayfada değişiklik yaptı ya da sayfayı geri döndürdü.\n\nSon 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.",
+       "editcomment": "Değişiklik özeti: <em>$1</em> 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",
        "rollback-success": "$1 tarafından yapılan değişiklikler geri alınarak;\n$2 tarafından değiştirilmiş önceki sürüme geri dönüldü.",
        "pageinfo-robot-index": "İzin verilmiş",
        "pageinfo-robot-noindex": "İzin verilmedi",
        "pageinfo-watchers": "Sayfanın izleyici sayısı",
+       "pageinfo-visiting-watchers": "Son değişiklikleri görüntüleyen izleyici sayısı",
        "pageinfo-few-watchers": "$1 {{PLURAL:$1|izleyiciden|izleyiciden}} az",
        "pageinfo-redirects-name": "Bu sayfaya yönlendirme sayısı",
        "pageinfo-redirects-value": "$1",
        "log-description-pagelang": "Bu, sayfalardaki dil değişikliklerinin kayıt günlüğüdür.",
        "logentry-pagelang-pagelang": "$1, $3 sayfasının dilini $4 dilinden $5 diline {{GENDER:$2|çevirdi}}.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (etkin)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''devre dışı''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>devre dışı</strong>)",
        "mediastatistics": "Medya istatistikleri",
        "mediastatistics-summary": "Karşıya yüklenen dosya türlerine ilişkin istatistikler. Bu yalnızca bir dosyanın en son sürümünü içerir. Eski veya silinen dosyala sürümleri hariç tutulur.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 byte}} ($2; $3%)",
index 9001177..ed1576b 100644 (file)
        "mycustomcssprotected": "Сезнең әлеге CSS битен үзгәртергә хокукыгыз юк.",
        "mycustomjsprotected": "Сезнең биттә JavaScript үзгәртергә хокукларыгыз юк.",
        "ns-specialprotected": "Махсус битләрне үзгәртеп булмый.",
-       "titleprotected": "Бу исем белән бит ясау [[User:$1|$1]] тарафыннан тыелган.\nУл күрсәткән сәбәп: ''$2''.",
+       "titleprotected": "Бу исем белән бит ясау [[User:$1|$1]] тарафыннан тыелган.\nУл күрсәткән сәбәп: <em>$2</em>.",
        "exception-nologin": "Сез хисап язмагызга кермәгәнсез",
        "virus-badscanner": "Көйләү хатасы. Билгесез вируслар сканеры: ''$1''",
        "virus-scanfailed": "сканерлау хатасы ($1 коды)",
        "createaccount-title": "{{SITENAME}}: теркәлү",
        "createaccount-text": "Кемдер, электрон почта адресыгызны күрсәтеп, {{SITENAME}} ($4) проектында «$3» серсүзе белән «$2» исемле хисап язмасы теркәде. Сез керергә һәм серсүзегезне үзгәртергә тиеш.\n\nХисап язмасы төзү хата булса, бу хатны онытыгыз.",
        "login-throttled": "Сез артык күп тапкыр керергә тырыштыгыз.\nЗинһар, яңадан кабатлаганчы, $1 көтүегез сорала.",
-       "login-abort-generic": "Системага уңышсыз керү очрагы",
+       "login-abort-generic": "Системага керү килеп чыкмады",
        "loginlanguagelabel": "Тел: $1",
        "suspicious-userlogout": "Сезнең эшчәнлекне бетерү соравыгыз кире кагылды, чөнки ул ялгыш браузер яисә кэшлаучы прокси аша җибәрелергэ мөмкин.",
        "pt-login": "Керү",
        "newpassword": "Яңа серсүз:",
        "retypenew": "Яңа серсүзне кабатлагыз:",
        "resetpass_submit": "Серсүз куеп керү",
-       "changepassword-success": "Серсүзегез уңышлы үзгәртелде!",
+       "changepassword-success": "Серсүзегез үзгәртелде!",
        "botpasswords": "Ботларның серсүзләре",
        "botpasswords-label-appid": "Бот исеме:",
        "botpasswords-label-create": "Төзү",
        "resetpass-no-info": "Бу битне карау өчен сез системага үз хисап язмагыз ярдәмендә керергә тиеш.",
        "resetpass-submit-loggedin": "Серсүзне үзгәртү",
        "resetpass-submit-cancel": "Кире кагу",
-       "resetpass-wrong-oldpass": "ЯлгÑ\8bÑ\88 Ñ\81еÑ\80Ñ\81үз.\nСез серсүзегезне үзгәрткән яисә яңа вакытлы серсүз сораткан булырга мөмкинсез.",
+       "resetpass-wrong-oldpass": "Ð¥Ó\99зеÑ\80ге Ñ\8fиÑ\81Ó\99 Ð²Ð°ÐºÑ\8bÑ\82лÑ\8b Ñ\81еÑ\80Ñ\81үз Ð´Ó©Ñ\80еÑ\81 Ñ\82үгел.\nСез серсүзегезне үзгәрткән яисә яңа вакытлы серсүз сораткан булырга мөмкинсез.",
        "resetpass-temp-password": "Вакытлы серсүз:",
        "passwordreset": "Серсүзне бетерү",
        "passwordreset-disabled": "Бу викида серсүз бетереп булмый",
        "previewnote": "<strong>Исегездә тотыгыз, бу алдан карау гына.</strong>\nТәзәтмәләрегез әлегә сакланмаган!",
        "continue-editing": "Үзгәртүне дәвам итү",
        "previewconflict": "Әлеге алдан карау битендә сакланачак текстның ничек күренәчәге күрсәтелә.",
-       "session_fail_preview": "'''Кызганычка, сезнең сессия идентификаторыгыз югалды. Нәтиҗәдә сервер үзгәртүләрегезне кабул итә алмый.\nТагын бер тапкыр кабатлавыгыз сорала.\nБу хата тагын кабатланса, [[Special:UserLogout|чыгыгыз]] һәм яңадан керегез.'''",
-       "session_fail_preview_html": "'''Кызганычка, сезнең сессия турында мәгълүматлар югалды. Нәтиҗәдә сервер үзгәртүләрегезне кабул итә алмый.'''\n\n''{{SITENAME}} чиста HTML кулланырга рөхсәт итә, ә бу үз чиратында JavaScript-атакалар оештыру өчен кулланылырга мөмкин. Шул сәбәпле сезнең өчен алдан карау мөмкинлеге ябык.''\n\n'''Әгәр сез үзгәртүне яхшы ният белән башкарасыз икән, тагын бер тапкыр кабатлап карагыз. Хата кабатланса, сайттан [[Special:UserLogout|чыгыгыз]] һәм яңадан керегез.'''",
+       "session_fail_preview": "Кызганычка каршы сессия барышы югалы, шуңа  күрә без сезнең төзәтмәләрнегезне кабул итә алмадык.\n\nБәлки сез хисап язмагыздан чыккансыздыр. <strong>Зинһар, керүегез турында инаныгыз һәм тагын бер тапкыр кабатлап карагыз.</strong>\nӘгәрдә бу ысул ярдәм итмәсәс, системадан [[Special:UserLogout|чыгыгыз]] һәм яңадан керегез. Шулай ук сезгә браузерыгызның  cookies файлларын кабул итүне тикшерүне карап чыгуны тәкъдим итәбез.",
+       "session_fail_preview_html": "<strong>Кызганычка каршы сервер сезнең төзәтмәләрне сессия югалу аркасында кабул итә алмады.</strong>\n\n<em>{{SITENAME}} чиста HTML кулланырга рөхсәт итә, ә бу үз чиратында JavaScript-хөҗүмнәр оештыру өчен кулланылырга мөмкин. Шул сәбәпле сезнең өчен алдан карау мөмкинлеге ябык.</em>\n\n<strong>Әгәр сез үзгәртүне яхшы ният белән башкарасыз икән, тагын бер тапкыр кабатлап карагыз. Хата кабатланса, сайттан [[Special:UserLogout|чыгыгыз]] һәм яңадан керегез.</strong>",
        "token_suffix_mismatch": "'''Сезнең үзгәртү кабул ителмәде.'''\nСәбәбе: браузерыгыз үзгәртү өлкәсендәге пунктуацияне дөрес күрсәтми, нәтиҗәдә текст бозылырга мөмкин.\nМондый хаталар аноним web-проксилар кулланганда килеп чыгарга мөмкин.",
        "edit_form_incomplete": "'''Төзәтү кырларының кайбер өлешләре серверга барып ирешмәде. Сезнең үзгәртүләр бозылмаганмы - игътибар белән тикшерегез һәм яңадан җибәреп карагыз.'''",
        "editing": "«$1» битен үзгәртү",
        "revdelete-suppress": "Мәгълүматлар идарәчеләрдән дә яшерелсен",
        "revdelete-log": "Сәбәп:",
        "revdelete-submit": "{{PLURAL:$1|1=сайланылган юрамага|сайланылган юрамаларга}} кулланырга",
-       "revdelete-success": "'''Версиянең күренүчәнлеге уңышлы рәвештә үзгәртелде'''",
+       "revdelete-success": "Юраманың күренүчәнлеге яңартылды.",
        "revdelete-failure": "'''Версиянең күренүчәнлеге үзгәртелә алмый:'''\n$1",
        "logdelete-success": "Вакыйганың күренүчәнлеге үзгәртелде.",
        "logdelete-failure": "'''Көндәлекнең күренүчәнлеге  куелмады:'''\n$1",
        "recentchanges-label-bot": "Бу үзгәртү бот белән эшләнгән",
        "recentchanges-label-unpatrolled": "Үзгәртүне әлегә тикшермәгәннәр",
        "recentchanges-label-plusminus": "Битнең зурлыгы шуның кадәрле байтка үзгәрде",
-       "recentchanges-legend-heading": "'''Аңлатма:&nbsp;'''",
+       "recentchanges-legend-heading": "<strong>Аңлатма:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (шулай ук [[Special:NewPages|яңа битләр исемлеген]] карагыз)",
        "recentchanges-submit": "Күрсәт",
        "rcnotefrom": "Астарак <strong>$3, $4</strong> өчен {{PLURAL:$5|үзгәртүләр күрсәтелгән}} (<strong>$1</strong> артык түгел).",
        "delete-edit-reasonlist": "Сәбәпләр исемлеген үзгәртү",
        "rollbacklink": "кире кайтару",
        "rollbacklinkcount": "$1 {{PLURAL:$1|төзәтмәне}} кире кагу",
-       "editcomment": "Үзгәртү өчен тасвир: \"''$1''\".",
+       "editcomment": "Үзгәртүләр тасвирламасы: <em>$1</em>.",
        "revertpage": "[[Special:Contributions/$2|$2]] үзгәртүләре ([[User talk:$2|бәхәс]])  [[User:$1|$1]] юрамасына кадәр кире кайтарылды",
        "changecontentmodel-title-label": "Битнең исеме",
        "changecontentmodel-reason-label": "Сәбәп:",
        "years": "{{PLURAL:$1|$1 ел}}",
        "ago": "$1 элек",
        "just-now": "яңа гына",
-       "hours-ago": "$1 cәгать элек",
-       "minutes-ago": "$1 минут элек",
+       "hours-ago": "$1 {{PLURAL:$1|cәгать}} элек",
+       "minutes-ago": "$1 {{PLURAL:$1|минут}} элек",
        "seconds-ago": "$1 {{PLURAL:$1|секунд}} элек",
        "monday-at": "дүшәмбе $1",
        "tuesday-at": "сишәмбе $1",
index 05fd3b7..a78db9e 100644 (file)
@@ -9,7 +9,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Amire80",
-                       "Frhdkazan"
+                       "Frhdkazan",
+                       "Macofe"
                ]
        },
        "tog-underline": "Sıltamalarnıñ astına sızu:",
        "cascadeprotected": "Bu bit üzgärtülärdän saqlanğan, çönki ul kaskadlı saqlaw qabul itelgän {{PLURAL:$1|bitkä|bitlärgä}} östälgän:\n$2",
        "namespaceprotected": "'''$1''' isem kiñlegendäge bitlärne üzgärtü öçen sezneñ röxsätegez yuq.",
        "ns-specialprotected": "Maxsus bitlärne üzgärtep bulmıy.",
-       "titleprotected": "Bu isem belän bit yasaw [[User:$1|$1]] tarafınnan tıyılğan.\nUl kürsätkän säbäp: ''$2''.",
+       "titleprotected": "Bu isem belän bit yasaw [[User:$1|$1]] tarafınnan tıyılğan.\nUl kürsätkän säbäp: <em>$2</em>.",
        "virus-badscanner": "Köyläw xatası. Bilgesez viruslar skanerı: ''$1''",
        "virus-scanfailed": "skanerlaw xatası ($1 kodı)",
        "virus-unknownscanner": "bilgesez antivirus:",
        "recentchanges-label-bot": "Bu üzgärtmä bot tarafınnan yasaldı",
        "recentchanges-label-unpatrolled": "Bu üzgärtmä älegä raslanmağan",
        "recentchanges-label-plusminus": "Bit zurlığınıñ baytlardağı üzgäreş",
-       "recentchanges-legend-heading": "'''Añlatma:'''",
+       "recentchanges-legend-heading": "<strong>Añlatma:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (şulay uq [[Special:NewPages|yaña bitlär isemlegen]] qarap alığız)",
        "rcnotefrom": "Astaraq '''$2''' başlap ('''$1''' qädär) üzgärtülär kürsätelgän.",
        "rclistfrom": "$3 $2 başlap yaña üzgärtülärne kürsät",
        "filewasdeleted": "Mondıy isemle fayl beterelgän bulğan inde. Zinhar,yañadan yökläw aldınnan $1 qarağız",
        "filename-bad-prefix": "Faylnıñ iseme '''«$1»''' dip başlana. Zinhar, faylnı taswirlawçı isem biregez.",
        "filename-prefix-blacklist": " #<!-- niçek bar şulay qaldırığız --> <pre>\n# Sintaksis töbändägeçä:\n#   *  «#» dip başlanğan barlıq närsä dä qömmentariy dip atalaçaq\n#   * Härber buş rät — faylnıñ isemeneñ prefiksı, sifrlı kamera birüçe isem\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # qaysıber käräzle telefonnar\nIMG # barlıq\nJD # Jenoptik\nMGP # Pentax\nPICT # törle\n #</pre> <!-- niçek bar şulay qaldırığız -->",
-       "upload-success-subj": "Yökläw äybät ütte",
        "upload-form-label-usage-title": "Qullanılış",
        "foreign-structured-upload-form-label-infoform-categories": "Törkemnär",
        "foreign-structured-upload-form-label-infoform-date": "Data",
        "notanarticle": "Mäqälä tügel",
        "watchlist-details": "Küzätü isemlegegezdä, bäxäs bitlären sanamıyça, {{PLURAL:$1|$1 bit|$1 bit}} bar.",
        "wlshowlast": "Bayağı $1 säğät $2 kön eçendä yäki nı kürsät",
-       "watchlistall2": "barlıq",
        "watchlist-hide": "Yäşerü",
        "watchlist-options": "Küzätü isemlege köyläwläre",
        "watching": "Küzätü isemlegemä östäwe…",
        "deletereason-dropdown": "* Beterüneñ säbäpläre\n** vandallıq\n** avtor sorawı buyınça\n** avtor xoquqların bozu",
        "delete-edit-reasonlist": "Säbäplär isemlegen üzgärtü",
        "rollbacklink": "kire qaytaru",
-       "editcomment": "Üzgärtü öçen taswir: \"''$1''\".",
+       "editcomment": "Üzgärtü öçen taswir: <em>$1</em>.",
        "revertpage": "[[Special:Contributions/$2|$2]] üzgärtüläre ([[User talk:$2|bäxäs]])  [[User:$1|$1]] yuramasına kire qaytarıldı",
        "changecontentmodel-title-label": "Bitneñ iseme",
        "changecontentmodel-reason-label": "Säbäp:",
index 7d6e783..91a3e3a 100644 (file)
        "portal": "Ниитилел хаалгазы",
        "portal-url": "Project:Ниитилел хаалгазы",
        "privacy": "Актыг дуржулга",
-       "privacypage": "Project:Ð\91үзүÑ\80ел Ð´Ñ\83гÑ\83Ñ\80жÑ\83лгазÑ\8b",
+       "privacypage": "Project:Ð\90кÑ\82Ñ\8bг Ð´Ñ\83гÑ\83Ñ\80жÑ\83лга",
        "badaccess": "Алдаг:Эргеңер чок.",
        "versionrequired": "МедиаВикиниң $1 үндүреризи херек",
        "ok": "Чөп",
index 445856f..2612631 100644 (file)
        "myprivateinfoprotected": "شەخسىي ئۇچۇرىڭىزنى تەھرىرلەيدىغان ھوقۇقىڭىز يوق.",
        "mypreferencesprotected": "مايىللىقىڭىزنى تەھرىرلەيدىغان ھوقۇقىڭىز يوق.",
        "ns-specialprotected": "ئالاھىدە بەتنى تەھرىرلىگىلى بولمايدۇ.",
-       "titleprotected": "بۇ ماۋزۇ قايتا قۇرۇشتىن ساقلىنىش ئۈچۈن [[User:$1|$1]] تەرىپىدىن قوغدالغان.\n\nسەۋەبى\"''$2''\" .",
+       "titleprotected": "بۇ ماۋزۇ قايتا قۇرۇشتىن ساقلىنىش ئۈچۈن [[User:$1|$1]] تەرىپىدىن قوغدالغان.\n\nسەۋەبى<em>$2</em>.",
        "filereadonlyerror": "بۇ ھۆججەت \"$1\" نى ئۆزگەرتەلمەيدۇ چۈنكى ھۆججەت خەزىنە \"$2\" سى پەقەت ئوقۇشقىلا بولىدىغان ھالەتتە.\n\nقۇلۇپلىغان باشقۇرغۇچى تەمىنلىگەن چۈشەندۈرۈش: \"$3\".",
        "invalidtitle-knownnamespace": "ئات بوشلۇقى \"$2\" ۋە تېكىست \"$3\" نى ئىشلەتكەن ئىناۋەتسىز ماۋزۇ",
        "invalidtitle-unknownnamespace": "يوچۇن ئات بوشلۇقى نومۇرى $1 ۋە تېكىست \"$2\" نى ئىشلەتكەن ئىناۋەتسىز ماۋزۇ",
        "right-blockemail": "ئىشلەتكۈچى ئېلخەت يوللاشنى چەكلە",
        "right-hideuser": "ئىشلەتكۈچى ئاتىنى چەكلە، كۆپچىلىككە نىسبەتەن يوشۇر",
        "right-ipblock-exempt": "IP چەكلەش، ئاپتوماتىك چەكلەش ۋە دائىرە چەكلەشتىن ئايلىنىپ ئۆت",
-       "right-proxyunbannable": "ۋاكالەتچىنى ئاپتوماتىك چەكلەشتىن ئايلىنىپ ئۆت",
        "right-unblockself": "چەكلەشنى بىكار قىل",
        "right-protect": "قوغداش دەرىجىسىنى ئۆزگەرتىپ، قوغدالغان بەتنى تەھرىرلە",
        "right-editprotected": "قوغدالغان بەتنى تەھرىرلە (زەنجىرسىمان قۇلۇپلانمىغان)",
        "watchthisupload": "بۇ ھۆججەتنى كۆزەت",
        "filewasdeleted": "بايىلا ئوخشاش ئاتتىكى بىر ھۆججەت يوللىنىپ، ئارقىدىنلا ئۆچۈرۈلگەن.\nبۇ ھۆججەتنى يۈكلەشتىن ئىلگىرى، $1 نى تەكشۈرۈپ بېقىڭ.",
        "filename-bad-prefix": "سىز يۈكلىگەن ھۆججەتنىڭ ئاتى'''\\\"$1\\\"''' دىن باشلىنىپتۇ، بۇ خىل مەنىسى يوق ھۆججەت ئاتىنى رەقەملىك فوتو ئاپپارات ئۆزلۈكىدىن ھاسىل قىلىدۇ.\nھۆججىتىڭىزگە تېخىمۇ ئەھمىيەتلىك ھۆججەت ئاتىدىن بىرنى تاللاڭ.",
-       "upload-success-subj": "مۇۋەپپەقىيەتلىك يۈكلەندى",
-       "upload-success-msg": "[$2] دىن مۇۋەپپەقىيەتلىك يۈكلىدىڭىز. ئۇنىڭ مەۋجۇد ئورنى: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "يۈكلەش كاشىلىسى",
-       "upload-failure-msg": "[$2] دىن يۈكلەشتە  خاتالىق بار:\n\n$1",
-       "upload-warning-subj": "يۈكلەش ئاگاھلاندۇرۇشى",
-       "upload-warning-msg": "[$2] دىن يۈكلىگىنىڭىزدىن خاتالىق كۆرۈلدى. سىز [[Special:Upload/stash/$1|يۈكلەش جەدۋىلى]]گە قايتىپ مەسىلىنى تۈزەتسىڭىز بولىدۇ.",
        "upload-proto-error": "كېلىشىم خاتالىقى",
        "upload-proto-error-text": "يىراقتىن يۈكلەيدىغان  URL <code>http://</code> ياكى <code>ftp://</code> دىن باشلىنىدۇ.",
        "upload-file-error": "ئىچكى خاتالىق",
        "pager-older-n": "{{PLURAL:$1|كونا 1|كونا $1}}",
        "suppress": "نازارەتچى",
        "querypage-disabled": "بۇ ئالاھىدە بەت ئۈنۈم سەۋەبىدىن چەكلەندى.",
+       "apisandbox": "API قۇم ساندۇقى",
+       "apisandbox-api-disabled": "مەزكۇر بېكەتتە API چەكلەندى.",
+       "apisandbox-intro": "بۇ بەت ئارقىلىق '''MediaWiki تور مۇلازىمىتى ئەپ ئېغىزى (API)نى سىناڭ'''.\nبۇ API نى ئىشلىتىشنىڭ تەپسىلاتىنى بىلمەكچى بولسىڭىز [//www.mediawiki.org/wiki/API:Main_page the API قوللانمىسى]نى كۆرۈڭ. مەسىلەن: [//www.mediawiki.org/wiki/API#A_simple_example مەلۇم ئاساسىي بەتنىڭ مەزمۇنىغا ئېرىشىش]، ئاندىن بىر مەشغۇلاتنى تاللاپ تېخىمۇ كۆپ ئۈلگە مىسالنى كۆرۈڭ.",
+       "apisandbox-submit": "ئىلتىماس يوللا",
+       "apisandbox-reset": "تازىلا",
+       "apisandbox-examples": "مىسال",
+       "apisandbox-results": "نەتىجە",
+       "apisandbox-request-url-label": "تەلەپ قىلغان URL:",
+       "apisandbox-request-time": "ئىلتىماس ۋاقتى: $1",
        "booksources": "كىتاب مەنبەسى",
        "booksources-search-legend": "كىتاب مەنبەسى ئىزدە",
        "booksources-isbn": "ISBN:",
        "wlheader-showupdated": "سىز ئالدىنقى قېتىم كۆرگەندىن كېيىن ئۆزگەرتىلگەن بەتلەر '''توم''' كۆرۈنىدۇ",
        "wlnote": "تۆۋەندىكىسى يېقىنقى {{PLURAL:$2|سائەت}} ئىچىدىكى ئاخىرقى '{{PLURAL:$1| قېتىملىق}}  ئۆزگەرتىش، $3 $4 گىچە.",
        "wlshowlast": "يېقىنقى $1 سائەت $2 كۈن  نىڭ ئۆزگەرتىشىنى كۆرسەت",
-       "watchlistall2": "ھەممىسى",
        "watchlist-options": "كۆزەت تىزىملىك تاللانما",
        "watching": "كۆزەت قىلىۋاتىدۇ…",
        "unwatching": "كۆزەت قىلمايۋاتىدۇ…",
index d555065..6fc58ba 100644 (file)
        "tog-showtoolbar": "Показувати панель інструментів",
        "tog-editondblclick": "Перейти в режим редагування сторінки подвійним клацанням мишки",
        "tog-editsectiononrightclick": "Перейти в режим редагування розділу клацанням правою кнопкою мишки на назву розділу",
-       "tog-watchcreations": "Додавати створені мною сторінки і завантажені мною файли до мого списку спостереження",
+       "tog-watchcreations": "Додавати створені мною сторінки і завантажені файли до мого списку спостереження",
        "tog-watchdefault": "Додавати змінені мною сторінки та файли до мого списку спостереження",
        "tog-watchmoves": "Додавати перейменовані мною сторінки та файли до мого списку спостереження",
        "tog-watchdeletion": "Додавати вилучені мною сторінки та файли до мого списку спостереження",
        "tog-watchrollback": "Додавати відкочені мною сторінки до мого списку спостереження",
-       "tog-minordefault": "Типово Ð¿Ð¾Ð·Ð½Ð°Ñ\87аÑ\82и Ð²Ñ\81Ñ\96 Ð·Ð¼Ñ\96ни, Ñ\8fк Ð½ÐµÐ·Ð½Ð°Ñ\87нÑ\96",
+       "tog-minordefault": "Ð\9fознаÑ\87аÑ\82и Ð²Ñ\81Ñ\96 Ð·Ð¼Ñ\96ни Ñ\8fк Ð½ÐµÐ·Ð½Ð°Ñ\87нÑ\96 Ð·Ð° Ð·Ð°Ð¼Ð¾Ð²Ñ\87Ñ\83ваннÑ\8fм",
        "tog-previewontop": "Показувати попередній перегляд перед вікном редагування, а не після",
        "tog-previewonfirst": "Показувати попередній перегляд під час першого редагування",
        "tog-enotifwatchlistpages": "Повідомляти електронною поштою про зміну сторінки або файлу з мого списку спостереження",
        "youhavenewmessages": "Ви отримали $1 ($2).",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|1=Ви отримали|Ви отримали}} $1 від {{PLURAL:$3|1=іншого дописувача|$3 інших дописувачів}} ($2).",
        "youhavenewmessagesmanyusers": "Ви отримали $1 від багатьох дописувачів ($2).",
-       "newmessageslinkplural": "{{PLURAL:$1|1=нове повідомлення|999=нові повідомлення}}",
-       "newmessagesdifflinkplural": "{{PLURAL:$1|1=остання зміна|999=останні зміни}}",
+       "newmessageslinkplural": "{{PLURAL:$1|нове повідомлення|нові повідомлення}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|остання зміна|останні зміни}}",
        "youhavenewmessagesmulti": "Ви отримали нові повідомлення на $1",
        "editsection": "ред.",
        "editold": "ред.",
        "nstab-image": "Файл",
        "nstab-mediawiki": "Повідомлення",
        "nstab-template": "Шаблон",
-       "nstab-help": "СÑ\82оÑ\80Ñ\96нка Ð´Ð¾Ð²Ñ\96дки",
+       "nstab-help": "Ð\94овÑ\96дка",
        "nstab-category": "Категорія",
-       "mainpage-nstab": "Головна сторінка",
+       "mainpage-nstab": "Головна",
        "nosuchaction": "Такої дії нема",
        "nosuchactiontext": "Дія, зазначена в URL, неправильна.\nВи могли неправильно набрати URL або перейти за некоректним посиланням.\nЦе також може означати помилку в програмному забезпеченні {{GRAMMAR:genitive|{{SITENAME}}}}.",
        "nosuchspecialpage": "Такої спеціальної сторінки нема",
        "protectedpagetext": "Ця сторінка захищена від редагування та інших дій.",
        "viewsourcetext": "Ви можете переглянути та скопіювати вихідний текст цієї сторінки:",
        "viewyourtext": "Ви можете переглянути та скопіювати вихідний текст <strong>Ваших редагувань</strong> на цю сторінку.",
-       "protectedinterface": "ЦÑ\8f Ñ\81Ñ\82оÑ\80Ñ\96нка Ð¼Ñ\96Ñ\81Ñ\82иÑ\82Ñ\8c Ñ\82екÑ\81Ñ\82 Ñ\96нÑ\82еÑ\80Ñ\84ейÑ\81Ñ\83 Ð¿Ñ\80огÑ\80амного Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ\87еннÑ\8f Ñ\86Ñ\96Ñ\94Ñ\97 Ð\92Ñ\96кÑ\96, Ð·Ð°Ñ\85иÑ\89ений Ð²Ñ\96д Ð½ÐµÐ±Ð°Ð¶Ð°Ð½Ð¾Ð³Ð¾ Ð²Ñ\82Ñ\80Ñ\83Ñ\87аннÑ\8f. Ð©Ð¾Ð± Ð´Ð¾Ð´Ð°Ñ\82и Ð°Ð±Ð¾ Ð·Ð¼Ñ\96ниÑ\82и Ð¿ÐµÑ\80еклади Ð´Ð»Ñ\8f Ð²Ñ\81Ñ\96Ñ\85 Ð²Ñ\96кÑ\96, Ð¿ÐµÑ\80ейдÑ\96Ñ\82Ñ\8c Ð´Ð¾ [//translatewiki.net/ translatewiki.net], проекту локалізації MediaWiki.",
+       "protectedinterface": "ЦÑ\8f Ñ\81Ñ\82оÑ\80Ñ\96нка Ð¼Ñ\96Ñ\81Ñ\82иÑ\82Ñ\8c Ñ\82екÑ\81Ñ\82 Ñ\96нÑ\82еÑ\80Ñ\84ейÑ\81Ñ\83 Ð¿Ñ\80огÑ\80амного Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ\87еннÑ\8f Ñ\86Ñ\96Ñ\94Ñ\97 Ð²Ñ\96кÑ\96, Ð·Ð°Ñ\85иÑ\89ений Ð· Ð¼ÐµÑ\82оÑ\8e Ð·Ð°Ð¿Ð¾Ð±Ñ\96ганнÑ\8f Ð·Ð»Ð¾Ð²Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ\8fм. Ð©Ð¾Ð± Ð´Ð¾Ð´Ð°Ñ\82и Ð°Ð±Ð¾ Ð·Ð¼Ñ\96ниÑ\82и Ð¿ÐµÑ\80еклади Ð´Ð»Ñ\8f Ð²Ñ\81Ñ\96Ñ\85 Ð²Ñ\96кÑ\96, Ð¿ÐµÑ\80ейдÑ\96Ñ\82Ñ\8c Ð½Ð° [//translatewiki.net/ translatewiki.net], проекту локалізації MediaWiki.",
        "editinginterface": "'''Увага:''' Ви редагуєте сторінку, що є частиною текстового інтерфейсу програм. \nЗміни цієї сторінки спричинять зміну інтерфейсу для інших користувачів цієї Вікі.",
        "translateinterface": "Для того, щоб додати чи змінити переклад повідомлень інтерфейсу для всіх вікі-проектів, скористайтеся будь ласка проектом локалізації MediaWiki: [//translatewiki.net/ translatewiki.net].",
        "cascadeprotected": "Сторінка захищена від редагувань, оскільки вона включена на {{PLURAL:$1|1=сторінці|сторінках}}, де встановлено каскадний захист: $2",
        "myprivateinfoprotected": "У вас немає дозволу на редагування своєї приватної інформації.",
        "mypreferencesprotected": "У вас немає дозволу на редагування своїх налаштувань.",
        "ns-specialprotected": "Спеціальні сторінки не можна редагувати.",
-       "titleprotected": "Створення сторінки з такою назвою було заборонене користувачем [[User:$1|$1]].\nЗазначена наступна причина: ''$2''.",
+       "titleprotected": "Створення сторінки з такою назвою було заборонене користувачем [[User:$1|$1]].\nЗазначена така причина: <em>$2</em>.",
        "filereadonlyerror": "Неможливо змінити файл «$1» тому, що файловий архів «$2» перебуває в режимі «лише для читання».\n\nАдміністратор, що заблокував його, залишив таке пояснення: «''$3''».",
        "invalidtitle-knownnamespace": "Неприйнятна назва у просторі імен «$2» і текстом «$3»",
        "invalidtitle-unknownnamespace": "Неправильний заголовок з невідомим номером простору імен ($1) і текстом: «$2»",
        "virus-badscanner": "Помилка налаштування: невідомий сканер вірусів: ''$1''",
        "virus-scanfailed": "помилка сканування (код $1)",
        "virus-unknownscanner": "невідомий антивірус:",
-       "logouttext": "'''Ð\92и Ð²Ð¸Ð¹Ñ\88ли Ð· Ñ\81иÑ\81Ñ\82еми.'''\n\nÐ\94еÑ\8fкÑ\96 Ñ\81Ñ\82оÑ\80Ñ\96нки Ð¼Ð¾Ð¶Ñ\83Ñ\82Ñ\8c Ð²Ñ\96добÑ\80ажаÑ\82иÑ\81Ñ\8f, Ð½Ñ\96би Ð²Ð¸ Ñ\89е Ð² Ñ\81иÑ\81Ñ\82емÑ\96, Ð°Ð¶ Ð¿Ð¾ÐºÐ¸ Ð²и не оновите кеш браузера.",
+       "logouttext": "'''Ð\92и Ð²Ð¸Ð¹Ñ\88ли Ð· Ñ\81иÑ\81Ñ\82еми.'''\n\nÐ\94еÑ\8fкÑ\96 Ñ\81Ñ\82оÑ\80Ñ\96нки Ð¼Ð¾Ð¶Ñ\83Ñ\82Ñ\8c Ð²Ñ\96добÑ\80ажаÑ\82иÑ\81Ñ\8f, Ð½Ñ\96би Ð\92и Ñ\89е Ð² Ñ\81иÑ\81Ñ\82емÑ\96, Ð°Ð¶ Ð¿Ð¾ÐºÐ¸ Ð\92и не оновите кеш браузера.",
        "cannotlogoutnow-title": "Неможливо вийти прямо зараз",
        "cannotlogoutnow-text": "Неможливо вийти із системи під час використання $1.",
        "welcomeuser": "Вітаємо, $1!",
        "userloginnocreate": "Увійти",
        "logout": "Вихід із системи",
        "userlogout": "Вихід із системи",
-       "notloggedin": "Ви не ввійшли до системи",
+       "notloggedin": "Ви не увійшли до системи",
        "userlogin-noaccount": "Немає облікового запису?",
        "userlogin-joinproject": "Приєднатися до {{GRAMMAR:genitive|{{SITENAME}}}}",
        "nologin": "Ви ще не зареєструвались? $1.",
        "nocookiesfornew": "Обліковий запис користувача не був створений через неможливість перевірити походження даних.\nПереконайтеся, що куки ввімкнено, оновіть сторінку і спробуйте ще раз.",
        "nocookiesforlogin": "{{int:nocookieslogin}}",
        "noname": "Ви зазначили неправильне ім'я користувача.",
-       "loginsuccesstitle": "УÑ\81пÑ\96Ñ\88ний Ð²Ñ\85Ñ\96д Ð´Ð¾ Ñ\81иÑ\81Ñ\82еми",
+       "loginsuccesstitle": "Ð\92Ñ\85Ñ\96д Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð¾",
        "loginsuccess": "'''Тепер ви працюєте в {{grammar:locative|{{SITENAME}}}} під іменем $1.'''",
-       "nosuchuser": "Користувача з іменем «$1» не існує.\nВ іменах користувачів розрізняються великі і малі символи.\nПеревірте правильність написання або скористайтеся формою нижче, щоб [[Special:UserLogin/signup|зареєструвати нового користувача]].",
-       "nosuchusershort": "Користувача з іменем $1 не існує.\nПеревірте правильність написання імені.",
+       "nosuchuser": "Користувача з іменем «$1» не існує.\nВ іменах користувачів розрізняються великі й малі символи.\nПеревірте правильність написання або скористайтеся формою нижче, щоб [[Special:UserLogin/signup|створити новий обліковий запис]].",
+       "nosuchusershort": "Користувача з іменем «$1» не існує.\nПеревірте правильність написання імені.",
        "nouserspecified": "Ви повинні зазначити ім'я користувача.",
        "login-userblocked": "Цей користувач заблокований. Вхід в систему не дозволений.",
        "wrongpassword": "Ви ввели хибний пароль. Спробуйте ще раз.",
        "createaccount-title": "Створення облікового запису для {{SITENAME}}",
        "createaccount-text": "Хтось створив обліковий запис «$2» на сервері проекту {{SITENAME}} ($4) з паролем «$3», зазначивши вашу адресу електронної пошти. Вам слід зайти і змінити пароль.\n\nІгноруйте дане повідомлення, якщо обліковий запис було створено помилково.",
        "login-throttled": "Ви зробили надто багато спроб ввійти до системи.\nБудь ласка, зачекайте $1 перед повторною спробою.",
-       "login-abort-generic": "Ð\9dе Ð²Ð´Ð°Ð»Ð¾Ñ\81Ñ\8f Ð²Ð²Ñ\96йÑ\82и Ð´Ð¾ Ñ\81иÑ\81Ñ\82еми",
+       "login-abort-generic": "Ð\92Ñ\85Ñ\96д Ñ\83 Ñ\81иÑ\81Ñ\82емÑ\83 Ð·Ð°Ð·Ð½Ð°Ð² Ð½ÐµÐ²Ð´Ð°Ñ\87Ñ\96 â\80\94 Ñ\81каÑ\81овано",
        "login-migrated-generic": "Ваш обліковий запис було перенесено і ваше ім'я користувача більше не існує на цій вікі.",
        "loginlanguagelabel": "Мова: $1",
        "suspicious-userlogout": "Ваш запит на завершення сеансу відхилений, оскільки він схожий на запит, відправлений зіпсованим веб-оглядачем або кешуючим проксі-сервером.",
        "newpassword": "Новий пароль:",
        "retypenew": "Ще раз введіть новий пароль:",
        "resetpass_submit": "Встановити пароль і ввійти",
-       "changepassword-success": "Ваш пароль успішно змінено!",
+       "changepassword-success": "Ваш пароль було змінено!",
        "changepassword-throttled": "Ви нещодавно зробили надто багато спроб ввійти до системи.\nБудь ласка, зачекайте $1 перед повторною спробою.",
        "botpasswords": "Паролі ботів",
        "botpasswords-summary": "<em>Паролі бота</em> дозволяють отримати доступ до облікового запису користувача через API без використання логіну і пароля головного облікового запису. Права користувача при вході з паролем бота можуть бути обмеженні.\n\nЯкщо ви не знаєте, навіщо воно вам, імовірно, краще цього не робіть. Ніхто ніколи не повинен просити вас, щоб ви створили чи повідомили цей пароль.",
        "botpasswords-insert-failed": "Не вдалось додати бота з іменем «$1». Можливо, він вже був доданий?",
        "botpasswords-update-failed": "Не вдалось оновити бота з іменем «$1». Можливо, він був видалений?",
        "botpasswords-created-title": "Пароль бота створено",
-       "botpasswords-created-body": "Пароль бота «$1» був успішно створений.",
+       "botpasswords-created-body": "Пароль бота з ім'ям «$1» користувача «$2» було створено.",
        "botpasswords-updated-title": "Пароль бота оновлено",
-       "botpasswords-updated-body": "Пароль бота «$1» був успішно оновлений.",
+       "botpasswords-updated-body": "Пароль бота з ім'ям «$1» користувача «$2» було оновлено.",
        "botpasswords-deleted-title": "Пароль бота видалено",
-       "botpasswords-deleted-body": "Пароль бота «$1» було видалено",
+       "botpasswords-deleted-body": "Пароль бота з ім'ям «$1» користувача «$2» було видалено",
        "botpasswords-newpassword": "Новий пароль для входу під <strong>$1</strong> — <strong>$2</strong>. <em>Запишіть його для подальшого використання.</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider не доступний.",
        "botpasswords-restriction-failed": "Вхід не було здійснено через обмеження для паролю бота.",
        "resetpass-no-info": "Щоб звертатися безпосередньо до цієї сторінки, вам слід увійти до системи.",
        "resetpass-submit-loggedin": "Змінити пароль",
        "resetpass-submit-cancel": "Скасувати",
-       "resetpass-wrong-oldpass": "Ð\9dепÑ\80авилÑ\8cний Ñ\82имÑ\87аÑ\81овий Ð°Ð±Ð¾ Ð¿Ð¾Ñ\82оÑ\87ний Ð¿Ð°Ñ\80олÑ\8c.\nÐ\9cожливо, Ð²Ð¸ Ð²Ð¶Ðµ Ñ\83Ñ\81пÑ\96Ñ\88но змінили пароль або зробили запит на новий тимчасовий пароль.",
+       "resetpass-wrong-oldpass": "Ð\9dепÑ\80авилÑ\8cний Ñ\82имÑ\87аÑ\81овий Ð°Ð±Ð¾ Ð¿Ð¾Ñ\82оÑ\87ний Ð¿Ð°Ñ\80олÑ\8c.\nÐ\9cожливо, Ð\92и Ð²Ð¶Ðµ змінили пароль або зробили запит на новий тимчасовий пароль.",
        "resetpass-recycled": "Змініть свій пароль на щось інше, ніж ваш поточний пароль.",
        "resetpass-temp-emailed": "Ви ввійшли, використовуючи тимчасовий пароль, який отримали електронною поштою. \nДля завершення входу в систему необхідно задати новий пароль:",
        "resetpass-temp-password": "Тимчасовий пароль:",
        "whitelistedittext": "Ви повинні $1, щоб редагувати сторінки.",
        "confirmedittext": "Ви повинні підтвердити вашу адресу електронної пошти перед редагуванням сторінок.\nБудь-ласка вкажіть і підтвердіть вашу електронну адресу на [[Special:Preferences|сторінці налаштувань]].",
        "nosuchsectiontitle": "Не вдається знайти розділ",
-       "nosuchsectiontext": "Ð\92и Ð½Ð°Ð¼Ð°Ð³Ð°Ñ\94Ñ\82еÑ\81Ñ\8c Ñ\80едагÑ\83ваÑ\82и Ñ\80оздÑ\96л, Ñ\8fкого Ð½Ðµ Ñ\96Ñ\81нÑ\83Ñ\94.\nÐ\9cожливо, Ð²Ñ\96н Ð±Ñ\83в Ð¿ÐµÑ\80ейменований Ð°Ð±Ð¾ Ð²Ð¸Ð»Ñ\83Ñ\87ений, Ð¿Ð¾ÐºÐ¸ Ð²и переглядали сторінку.",
-       "loginreqtitle": "Необхідно ввійти до системи",
-       "loginreqlink": "ввійти в систему",
+       "nosuchsectiontext": "Ð\92и Ð½Ð°Ð¼Ð°Ð³Ð°Ñ\94Ñ\82еÑ\81Ñ\8c Ñ\80едагÑ\83ваÑ\82и Ñ\80оздÑ\96л, Ñ\8fкого Ð½Ðµ Ñ\96Ñ\81нÑ\83Ñ\94.\nÐ\9cожливо, Ð²Ñ\96н Ð±Ñ\83в Ð¿ÐµÑ\80ейменований Ð°Ð±Ð¾ Ð²Ð¸Ð»Ñ\83Ñ\87ений, Ð¿Ð¾ÐºÐ¸ Ð\92и переглядали сторінку.",
+       "loginreqtitle": "Необхідно увійти до системи",
+       "loginreqlink": "увійти до системи",
        "loginreqpagetext": "Ви повинні $1, щоб переглядати інші сторінки.",
        "accmailtitle": "Пароль надіслано.",
        "accmailtext": "Пароль для користувача [[User talk:$1|$1]], згенерований випадковим чином, надісланий на адресу $2.\nПісля реєстрації в системі ви зможете ''[[Special:ChangePassword|змінити пароль]]''.",
        "newarticle": "(Нова)",
-       "newarticletext": "Ð\92и Ð¿ÐµÑ\80ейÑ\88ли Ð½Ð° Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83, Ñ\8fка Ð¿Ð¾ÐºÐ¸ Ñ\89о Ð½Ðµ Ñ\96Ñ\81нÑ\83Ñ\94.\n\nЩоб Ñ\81Ñ\82воÑ\80иÑ\82и Ð½Ð¾Ð²Ñ\83 Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83, Ð½Ð°Ð±ÐµÑ\80Ñ\96Ñ\82Ñ\8c Ñ\82екÑ\81Ñ\82 Ñ\83 Ð²Ñ\96кнÑ\96 Ð½Ð¸Ð¶Ñ\87е (див. [$1 Ð´Ð¾Ð²Ñ\96дковÑ\83 Ñ\81Ñ\82аÑ\82Ñ\82Ñ\8e], Ñ\89об Ð¾Ñ\82Ñ\80имаÑ\82и Ð±Ñ\96лÑ\8cÑ\88е Ñ\96нÑ\84оÑ\80маÑ\86Ñ\96Ñ\97).\nЯкÑ\89о Ð²и опинились тут помилково, просто натисніть кнопку браузера '''назад'''.",
-       "anontalkpagetext": "----''Це сторінка обговорення анонімного користувача, який ще не зареєструвався або не скористався зареєстрованим обліковим записом.''\nТому ми вимушені використовувати IP-адресу для його ідентифікації.\nОдна IP-адреса може використовуватись кількома користувачами.\nЯкщо ви — анонімний користувач і вважаєте, що отримали коментарі, адресовані не вам, будь ласка [[Special:UserLogin/signup|зареєструйтесь]] або [[Special:UserLogin|увійдіть до системи]], щоб у майбутньому уникнути можливої плутанини з іншими анонімними користувачами.",
+       "newarticletext": "Ð\92и Ð¿ÐµÑ\80ейÑ\88ли Ð½Ð° Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83, Ñ\8fка Ð¿Ð¾ÐºÐ¸ Ñ\89о Ð½Ðµ Ñ\96Ñ\81нÑ\83Ñ\94.\n\nЩоб Ñ\81Ñ\82воÑ\80иÑ\82и Ð½Ð¾Ð²Ñ\83 Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83, Ð½Ð°Ð±ÐµÑ\80Ñ\96Ñ\82Ñ\8c Ñ\82екÑ\81Ñ\82 Ñ\83 Ð²Ñ\96кнÑ\96 Ð½Ð¸Ð¶Ñ\87е (див. [$1 Ð´Ð¾Ð²Ñ\96дковÑ\83 Ñ\81Ñ\82аÑ\82Ñ\82Ñ\8e], Ñ\89об Ð¾Ñ\82Ñ\80имаÑ\82и Ð±Ñ\96лÑ\8cÑ\88е Ñ\96нÑ\84оÑ\80маÑ\86Ñ\96Ñ\97).\nЯкÑ\89о Ð\92и опинились тут помилково, просто натисніть кнопку браузера '''назад'''.",
+       "anontalkpagetext": "----\n<em>Це сторінка обговорення анонімного користувача, який ще не зареєструвався або не скористався зареєстрованим обліковим записом.</em>\nТому ми вимушені використовувати IP-адресу для його ідентифікації.\nОдна IP-адреса може використовуватись кількома користувачами.\nЯкщо Ви — анонімний користувач і вважаєте, що отримали коментарі, адресовані не Вам, будь ласка [[Special:UserLogin/signup|зареєструйтесь]] або [[Special:UserLogin|увійдіть до системи]], щоб у майбутньому уникнути можливої плутанини з іншими анонімними користувачами.",
        "noarticletext": "Зараз на цій сторінці нема тексту.\nВи можете [[Special:Search/{{PAGENAME}}|пошукати цю назву]] на інших сторінках,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} пошукати в журналах]\nабо [{{fullurl:{{FULLPAGENAME}}|action=edit}} створити сторінку з такою назвою]</span>.",
        "noarticletext-nopermission": "Зараз на цій сторінці немає тексту.\nВи можете [[Special:Search/{{PAGENAME}}|пошукати цю назву]] на інших сторінках,\nабо <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} пошукати пов'язані записи в журналах]</span>, але ви не маєте дозволу на створення такої сторінки.",
        "missing-revision": "Версія #$1 сторінки «{{FULLPAGENAME}}» не існує.\n\nІмовірно, Ви перейшли за застарілим посиланням на вилучену сторінку.\nПодробиці можна дізнатися з [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журналу вилучень].",
        "titleprotectedwarning": "'''Попередження. Ця сторінка була захищена так, що для її створення потрібні [[Special:ListGroupRights|особливі права]].'''\nОстанній запис журналу наведений нижче для довідки:",
        "templatesused": "{{PLURAL:$1|1=Шаблон, використаний|Шаблони, використані}} на цій сторінці:",
        "templatesusedpreview": "{{PLURAL:$1|1=Шаблон, використаний|Шаблони, використані}} у цьому попередньому перегляді:",
-       "templatesusedsection": "{{PLURAL:$1|1=Шаблон, використаний|Шаблони, використані}} у цьому розділі:",
+       "templatesusedsection": "{{PLURAL:$1|1=Шаблон, використаний|Шаблони, використані}} в цьому розділі:",
        "template-protected": "(захищено)",
        "template-semiprotected": "(частково захищено)",
        "hiddencategories": "Ця сторінка належить до $1 {{PLURAL:$1|прихованої категорії|прихованих категорій|прихованих категорій}}:",
        "permissionserrorstext": "У вас нема прав на виконання цієї операції з {{PLURAL:$1|1=наступної причини|наступних причин}}:",
        "permissionserrorstext-withaction": "У Вас нема дозволу на $2 з {{PLURAL:$1|1=такої причини|таких причин}}:",
        "contentmodelediterror": "Ви не можете редагувати цю версію, оскільки модель його змісту —  <code>$1</code>, відрізняється від теперішньої моделі змісту сторінки — <code>$2</code>.",
-       "recreate-moveddeleted-warn": "'''Ð\9fопеÑ\80едженнÑ\8f: Ð²Ð¸ Ð½Ð°Ð¼Ð°Ð³Ð°Ñ\94Ñ\82еÑ\81Ñ\8f Ñ\81Ñ\82воÑ\80иÑ\82и Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83, Ñ\8fка Ñ\80анÑ\96Ñ\88е Ð²Ð¶Ðµ Ð±Ñ\83ла Ð²Ð¸Ð»Ñ\83Ñ\87ена.'''\n\nÐ\9fеÑ\80евÑ\96Ñ\80Ñ\82е, Ñ\87и Ñ\81пÑ\80авдÑ\96 Ð²ам справді потрібно створювати цю сторінку.\nНижче, для зручності, наведений журнал вилучень і перейменувань:",
+       "recreate-moveddeleted-warn": "'''Ð\9fопеÑ\80едженнÑ\8f: Ð\92и Ð½Ð°Ð¼Ð°Ð³Ð°Ñ\94Ñ\82еÑ\81Ñ\8f Ñ\81Ñ\82воÑ\80иÑ\82и Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83, Ñ\8fка Ñ\80анÑ\96Ñ\88е Ð²Ð¶Ðµ Ð±Ñ\83ла Ð²Ð¸Ð»Ñ\83Ñ\87ена.'''\n\nÐ\9fеÑ\80евÑ\96Ñ\80Ñ\82е, Ñ\87и Ð\92ам справді потрібно створювати цю сторінку.\nНижче, для зручності, наведений журнал вилучень і перейменувань:",
        "moveddeleted-notice": "Ця сторінка була вилучена.\nДля довідки нижче наведені відповідні записи з журналів вилучень і перейменувань.",
        "moveddeleted-notice-recent": "На жаль, ця сторінка нещодавно була вилучена (протягом останніх 24 годин). Для довідки нижче наведені відповідні записи з журналів вилучень і перейменувань.",
        "log-fulllog": "Переглянути весь журнал",
        "undo-summary-username-hidden": "Скасувати версію $1, виконану прихованим користувачем",
        "cantcreateaccounttitle": "Неможливо створити обліковий запис",
        "cantcreateaccount-text": "Створення облікових записів із цієї IP-адреси ('''$1''') було заблоковане [[User:$3|користувачем $3]].\n\n$3 зазначив таку причину: ''$2''",
-       "cantcreateaccount-range-text": "Створення облікового запису із IP-адрес у діапазоні  '''$1''', який включає вашу IP-адресу ('''$4'''), було заблоковано користувачем [[User:$3|$3]].\n\nКористувач $3 вказав як причину ''$2''",
+       "cantcreateaccount-range-text": "Створення облікового запису із IP-адрес у діапазоні  <strong>$1</strong>, який включає вашу IP-адресу (<strong>$4</strong>), було заблоковано користувачем [[User:$3|$3]].\n\nКористувач $3 вказав як причину <em>$2</em>",
        "viewpagelogs": "Показати журнали для цієї сторінки",
        "nohistory": "Для цієї статті відсутній журнал редагувань.",
        "currentrev": "Поточна версія",
        "revdelete-unsuppress": "Зняти обмеження з відновлених версій",
        "revdelete-log": "Причина:",
        "revdelete-submit": "Застосувати до {{PLURAL:$1|1=обраної версії|обраних версій}}",
-       "revdelete-success": "'''Видимість версії успішно змінена.'''",
+       "revdelete-success": "Видимість версії оновлено.",
        "revdelete-failure": "'''Видимість версії неможливо змінити:'''\n$1",
-       "logdelete-success": "'''Видимість події успішно змінена.'''",
+       "logdelete-success": "Видимість події встановлено.",
        "logdelete-failure": "'''Не вдалося встановити видимість журналу:'''\n$1",
        "revdel-restore": "Змінити видимість",
        "pagehist": "Історія сторінки",
        "mergelog": "Журнал об'єднань",
        "revertmerge": "Розділити",
        "mergelogpagetext": "Нижче наведений список останніх об'єднань історій сторінок.",
-       "history-title": "$1: Історія змін",
+       "history-title": "$1: історія змін",
        "difference-title": "Відмінності між версіями «$1»",
        "difference-title-multipage": "Різниця між сторінками «$1» та «$2»",
        "difference-multipage": "(Різниця між сторінками)",
        "datedefault": "Стандартний",
        "prefs-labs": "Експериментальні функції",
        "prefs-user-pages": "Сторінки користувача",
-       "prefs-personal": "Ð\9eÑ\81обиÑ\81Ñ\82і дані",
+       "prefs-personal": "Ð\9eÑ\81обові дані",
        "prefs-rc": "Сторінка нових редагувань",
        "prefs-watchlist": "Список спостереження",
        "prefs-editwatchlist": "Редагування списку спостереження",
        "prefs-editwatchlist-label": "Редагування елементів Вашого списку спостереження:",
-       "prefs-editwatchlist-edit": "Ð\9fеÑ\80еглÑ\8fд Ñ\96 Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ\8f Ð½Ð°Ð·Ð² Ð· Ð²ашого списку спостереження",
+       "prefs-editwatchlist-edit": "Ð\9fеÑ\80еглÑ\8fд Ñ\96 Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ\8f Ð½Ð°Ð·Ð² Ð· Ð\92ашого списку спостереження",
        "prefs-editwatchlist-raw": "Редагувати список спостереження як текст",
        "prefs-editwatchlist-clear": "Очистити список спостереження",
        "prefs-watchlist-days": "Кількість днів, що відображаються у списку спостережень:",
        "restoreprefs": "Відновити всі стандартні налаштування (у всіх розділах)",
        "prefs-editing": "Редагування",
        "rows": "Рядків:",
-       "columns": "Ð\9aолонок:",
+       "columns": "СÑ\82овпÑ\86Ñ\96в:",
        "searchresultshead": "Пошук",
        "stub-threshold": "Поріг для визначення оформлення посилань на стаби ($1):",
        "stub-threshold-sample-link": "зразок",
        "userrights-unchangeable-col": "Групи, які ви не можете змінити",
        "userrights-irreversible-marker": "$1*",
        "userrights-conflict": "Конфлікт зміни прав користувача! Будь ласка, перевірте та  підтвердіть зміни знову.",
-       "userrights-removed-self": "Ви успішно позбавили себе власних прав. Через це Ви більше не маєте доступу до цієї сторінки.",
+       "userrights-removed-self": "Ви позбавили себе власних прав. Через це Ви більше не маєте доступу до цієї сторінки.",
        "group": "Група:",
        "group-user": "Користувачі",
        "group-autoconfirmed": "Автопідтверджені користувачі",
        "right-apihighlimits": "розширення обмежень на виконання API-запитів",
        "right-writeapi": "використання API для запису",
        "right-delete": "вилучення сторінок",
-       "right-bigdelete": "Ð\92илучення сторінок з великою історією",
+       "right-bigdelete": "вилучення сторінок з великою історією",
        "right-deletelogentry": "вилучення та відновлення окремих записів журналу",
        "right-deleterevision": "вилучення та відновлення окремих версій сторінок",
        "right-deletedhistory": "перегляд історії вилучених сторінок без перегляду вилученого тексту",
        "recentchanges-label-bot": "Це редагування зроблене ботом",
        "recentchanges-label-unpatrolled": "Це редагування ще не було відпатрульоване",
        "recentchanges-label-plusminus": "Розмір сторінки змінився на таку кількість байтів",
-       "recentchanges-legend-heading": "'''Легенда:'''",
+       "recentchanges-legend-heading": "<strong>Легенда:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (див. також [[Special:NewPages|список нових сторінок]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Показати",
        "rcnotefrom": "Нижче знаходяться {{PLURAL:$5|редагування}} з <strong>$3, $4</strong> (відображено до <strong>$1</strong>).",
        "rclistfrom": "Показати редагування починаючи з $3 $2.",
        "rcshowhideminor": "$1 незначні редагування",
-       "rcshowhideminor-show": "показати",
-       "rcshowhideminor-hide": "приховати",
+       "rcshowhideminor-show": "Ð\9fоказати",
+       "rcshowhideminor-hide": "Ð\9fриховати",
        "rcshowhidebots": "$1 ботів",
-       "rcshowhidebots-show": "показати",
-       "rcshowhidebots-hide": "приховати",
+       "rcshowhidebots-show": "Ð\9fоказати",
+       "rcshowhidebots-hide": "Ð\9fриховати",
        "rcshowhideliu": "$1 зареєстрованих користувачів",
-       "rcshowhideliu-show": "показати",
-       "rcshowhideliu-hide": "приховати",
+       "rcshowhideliu-show": "Ð\9fоказати",
+       "rcshowhideliu-hide": "Ð\9fриховати",
        "rcshowhideanons": "$1 анонімів",
-       "rcshowhideanons-show": "показати",
-       "rcshowhideanons-hide": "приховати",
+       "rcshowhideanons-show": "Ð\9fоказати",
+       "rcshowhideanons-hide": "Ð\9fриховати",
        "rcshowhidepatr": "$1 перевірені",
        "rcshowhidepatr-show": "показати",
        "rcshowhidepatr-hide": "приховати",
        "rcshowhidemine": "$1 мої редагування",
-       "rcshowhidemine-show": "показати",
-       "rcshowhidemine-hide": "приховати",
+       "rcshowhidemine-show": "Ð\9fоказати",
+       "rcshowhidemine-hide": "Ð\9fриховати",
        "rcshowhidecategorization": "$1 категоризацію сторінок",
        "rcshowhidecategorization-show": "Показати",
        "rcshowhidecategorization-hide": "Приховати",
        "recentchangeslinked-feed": "Пов'язані редгування",
        "recentchangeslinked-toolbox": "Пов'язані редагування",
        "recentchangeslinked-title": "Пов'язані редагування для «$1»",
-       "recentchangeslinked-summary": "Це Ñ\81пиÑ\81ок Ð½ÐµÑ\89одавнÑ\96Ñ\85 Ð·Ð¼Ñ\96н Ð½Ð° Ñ\81Ñ\82оÑ\80Ñ\96нкаÑ\85, Ð½Ð° Ñ\8fкÑ\96 Ð¿Ð¾Ñ\81илаÑ\94Ñ\82Ñ\8cÑ\81Ñ\8f Ð·Ð°Ð·Ð½Ð°Ñ\87ена Ñ\81Ñ\82оÑ\80Ñ\96нка (або Ð½Ð° Ñ\81Ñ\82оÑ\80Ñ\96нкаÑ\85, Ñ\89о Ð¼Ñ\96Ñ\81Ñ\82Ñ\8fÑ\82Ñ\8cÑ\81Ñ\8f Ð² Ñ\86Ñ\96й ÐºÐ°Ñ\82егоÑ\80Ñ\96Ñ\97).\nСÑ\82оÑ\80Ñ\96нки Ð· [[Special:Watchlist|вашого списку спостереження]] виділено '''жирним шрифтом'''.",
+       "recentchangeslinked-summary": "Це Ñ\81пиÑ\81ок Ð½ÐµÑ\89одавнÑ\96Ñ\85 Ð·Ð¼Ñ\96н Ð½Ð° Ñ\81Ñ\82оÑ\80Ñ\96нкаÑ\85, Ð½Ð° Ñ\8fкÑ\96 Ð¿Ð¾Ñ\81илаÑ\94Ñ\82Ñ\8cÑ\81Ñ\8f Ð·Ð°Ð·Ð½Ð°Ñ\87ена Ñ\81Ñ\82оÑ\80Ñ\96нка (або Ð½Ð° Ñ\81Ñ\82оÑ\80Ñ\96нкаÑ\85, Ñ\89о Ð¼Ñ\96Ñ\81Ñ\82Ñ\8fÑ\82Ñ\8cÑ\81Ñ\8f Ð² Ñ\86Ñ\96й ÐºÐ°Ñ\82егоÑ\80Ñ\96Ñ\97).\nСÑ\82оÑ\80Ñ\96нки Ð· [[Special:Watchlist|Ð\92ашого списку спостереження]] виділено '''жирним шрифтом'''.",
        "recentchangeslinked-page": "Назва сторінки:",
        "recentchangeslinked-to": "Показати зміни на сторінках, пов'язаних з даною",
        "recentchanges-page-added-to-category": "[[:$1]] Додано до категорії",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] та ще {{PLURAL:$2|$2 сторінку|$2 сторінки|$2 сторінок|1=одну сторінку}} було додано до категорії",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] та ще [[Special:WhatLinksHere/$1|{{PLURAL:$2|$2 сторінку|$2 сторінки|$2 сторінок|1=одну сторінку}}]] було додано до категорії",
        "recentchanges-page-removed-from-category": "[[:$1]] було вилучено з категорії",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] та ще {{PLURAL:$2|$2 сторінку|$2 сторінки|$2 сторінок|1=одну сторінку}} було вилучено з категорії",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] та ще [[Special:WhatLinksHere/$1|{{PLURAL:$2|$2 сторінку|$2 сторінки|$2 сторінок|1=одну сторінку}}]] було вилучено з категорії",
        "autochange-username": "Автоматичні редагування MediaWiki",
        "upload": "Завантажити файл",
        "uploadbtn": "Завантажити файл",
        "backend-fail-read": "Не вдалося прочитати файл $1.",
        "backend-fail-create": "Не вдалося зберегти файл $1.",
        "backend-fail-maxsize": "Неможливо зберегти файл $1, бо він більший, ніж {{PLURAL:$2|$2 байт|$2 байти|$2 байтів}}.",
-       "backend-fail-readonly": "Інтерфейс сховища \"$1\" зараз доступний тільки для читання. Причина: \"$2\"",
+       "backend-fail-readonly": "Інтерфейс сховища «$1» зараз доступний тільки для читання. Причина: <em>$2</em>",
        "backend-fail-synced": "Файл \"$1\" у внутрішньому сховищі рушія перебуває в неузгодженому стані",
        "backend-fail-connect": "Неможливо підключитися до сховища рушія \"$1\".",
        "backend-fail-internal": "Сталася невідома помилка у сховищі рушія \"$1\".",
        "uploadstash-summary": "Ця сторінка надає доступ до файлів, що були завантажені (або завантажуються зараз), але ще не були опубліковані в вікі. Ці файли не відображаються нікому, крім користувача, що їх завантажив.",
        "uploadstash-clear": "Очистити сховані файли",
        "uploadstash-nofiles": "У вас немає схованих файлів.",
-       "uploadstash-badtoken": "Ð\9dе Ð²Ð´Ð°Ð»Ð¾Ñ\81Ñ\8f Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ\82и Ð²ÐºÐ°Ð·Ð°Ð½Ñ\96 Ð´Ñ\96Ñ\97. Ð\9cожливо, Ð²Ð¸Ñ\87еÑ\80паний Ñ\82еÑ\80мÑ\96н Ð´Ñ\96Ñ\97 Ñ\81еÑ\81Ñ\96Ñ\97 Ñ\80едагÑ\83ваннÑ\8f. Ð¡пробуйте ще раз.",
-       "uploadstash-errclear": "Ð\9eÑ\87иÑ\89еннÑ\8f Ñ\84айлÑ\96в Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾Ñ\81Ñ\8f.",
+       "uploadstash-badtoken": "Ð\9dе Ð²Ð´Ð°Ð»Ð¾Ñ\81Ñ\8f Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ\82и Ð²ÐºÐ°Ð·Ð°Ð½Ñ\83 Ð´Ñ\96Ñ\8e. Ð\9cожливо, Ð²Ð¸Ñ\87еÑ\80паний Ñ\82еÑ\80мÑ\96н Ð´Ñ\96Ñ\97 Ñ\81еÑ\81Ñ\96Ñ\97 Ñ\80едагÑ\83ваннÑ\8f. Ð\91Ñ\83дÑ\8c Ð»Ð°Ñ\81ка, Ñ\81пробуйте ще раз.",
+       "uploadstash-errclear": "Ð\9eÑ\87иÑ\89еннÑ\8f Ñ\84айлÑ\96в Ð·Ð°Ð·Ð½Ð°Ð»Ð¾ Ð½ÐµÐ²Ð´Ð°Ñ\87Ñ\96.",
        "uploadstash-refresh": "Оновити список файлів",
        "invalid-chunk-offset": "Неприпустимий зсув фрагмента",
        "img-auth-accessdenied": "Відмовлено в доступі",
        "filehist-filesize": "Розмір файлу",
        "filehist-comment": "Коментар",
        "imagelinks": "Використання файлу",
-       "linkstoimage": "{{PLURAL:$1|1=Ð\9dаÑ\81Ñ\82Ñ\83пна Ñ\81Ñ\82оÑ\80Ñ\96нка Ð¿Ð¾Ñ\81илаÑ\94Ñ\82Ñ\8cÑ\81Ñ\8f\9dаÑ\81Ñ\82Ñ\83пні сторінки посилаються}} на цей файл:",
+       "linkstoimage": "{{PLURAL:$1|1=Така Ñ\81Ñ\82оÑ\80Ñ\96нка Ð¿Ð¾Ñ\81илаÑ\94Ñ\82Ñ\8cÑ\81Ñ\8f|Такі сторінки посилаються}} на цей файл:",
        "linkstoimage-more": "Більше $1 {{PLURAL:$1|1=сторінки|сторінок}} посилаються на цей файл.\nУ цьому списку {{PLURAL:$1|показане тільки $1 посилання|показані тільки $1 посилання|показані тільки $1 посилань}} на цей файл.\nТакож доступний [[Special:WhatLinksHere/$2|повний список]].",
        "nolinkstoimage": "Нема сторінок, що посилаються на цей файл.",
        "morelinkstoimage": "Переглянути [[Special:WhatLinksHere/$1|інші посилання]] на цей файл.",
        "ntransclusions": "використовується на $1 {{PLURAL:$1|1=сторінці|сторінках}}",
        "specialpage-empty": "Запит не дав результатів.",
        "lonelypages": "Статті-сироти",
-       "lonelypagestext": "На такі сторінки нема посилань з інших сторінок і вони не включаються до інших сторінок {{grammar:genitive|{{SITENAME}}}}.",
+       "lonelypagestext": "На такі сторінки нема посилань і вони не включаються до інших сторінок {{grammar:genitive|{{SITENAME}}}}.",
        "uncategorizedpages": "Некатегоризовані сторінки",
        "uncategorizedcategories": "Некатегоризовані категорії",
        "uncategorizedimages": "Некатегоризовані зображення",
        "mostimages": "Найуживаніші зображення",
        "mostinterwikis": "Сторінки з найбільшою кількістю інтервікі-посилань",
        "mostrevisions": "Статті з найбільшою кількістю редагувань",
-       "prefixindex": "Ð\9fокажÑ\87ик Ð·Ð° Ð¿Ð¾Ñ\87аÑ\82ком Ð½Ð°Ð·Ð² Ñ\81Ñ\82оÑ\80Ñ\96нок",
+       "prefixindex": "УÑ\81Ñ\96 Ñ\81Ñ\82оÑ\80Ñ\96нки, Ñ\89о Ð¿Ð¾Ñ\87инаÑ\8eÑ\82Ñ\8cÑ\81Ñ\8f Ð·",
        "prefixindex-namespace": "Усі сторінки з префіксом (простір назв $1)",
        "prefixindex-submit": "Показати",
        "prefixindex-strip": "Опустити префікс у списку",
        "showhideselectedlogentries": "Показати/приховати виділені записи журналу",
        "log-edit-tags": "Змінити мітки для вибраних записів журналів",
        "checkbox-select": "Виберіть: $1",
-       "checkbox-all": "Ð\92Ñ\81Ñ\96",
-       "checkbox-none": "Ð\9dічого",
-       "checkbox-invert": "Інвертувати",
+       "checkbox-all": "вÑ\81е",
+       "checkbox-none": "нічого",
+       "checkbox-invert": "інвертувати",
        "allpages": "Усі сторінки",
        "nextpage": "Наступна сторінка ($1)",
        "prevpage": "Попередня сторінка ($1)",
        "linksearch": "Пошук зовнішних посилань",
        "linksearch-pat": "Шаблон для пошуку:",
        "linksearch-ns": "Простір назв:",
-       "linksearch-ok": "Ð\97найÑ\82и",
+       "linksearch-ok": "Ð\9fоÑ\88Ñ\83к",
        "linksearch-text": "Можна вживати підстановочні символи, наприклад, «*.wikipedia.org».\nНеобхідно зазначити домен, принаймні верхнього рівня, наприклад «*.org».<br />\n{{PLURAL:$2|1=Підтримується протокол|Підтримуються протоколи}}: $1 (за замовчуванням http:// , якщо жоден протокол не зазначено).",
        "linksearch-line": "Посилання на $1 із $2",
        "linksearch-error": "Підстановочні знаки можуть використовуватися лише на початку адрес.",
        "listgrouprights-addgroup-all": "можливість додавати до всіх груп",
        "listgrouprights-removegroup-all": "можливість виключати з усіх груп",
        "listgrouprights-addgroup-self": "може додавати {{PLURAL:$2|1=групу|групи}} до свого облікового запису: $1",
-       "listgrouprights-removegroup-self": "Ð\9cожливість вилучити зі свого облікового запису {{PLURAL:$2|1=групу|групи}}: $1",
+       "listgrouprights-removegroup-self": "можливість вилучити зі свого облікового запису {{PLURAL:$2|1=групу|групи}}: $1",
        "listgrouprights-addgroup-self-all": "Може додавати всі групи до свого облікового запису",
        "listgrouprights-removegroup-self-all": "може вилучати всі групи зі свого облікового запису",
        "listgrouprights-namespaceprotection-header": "Обмеження простору назв",
        "trackingcategories-nodesc": "Опис відсутній.",
        "trackingcategories-disabled": "Категорія вимкнена",
        "mailnologin": "Відсутня адреса для відправки",
-       "mailnologintext": "Ð\92и Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ\96 [[Special:UserLogin|ввÑ\96йÑ\82и Ð´Ð¾ Ñ\81иÑ\81Ñ\82еми]] Ñ\96 Ð¼Ð°Ñ\82и Ð¿Ñ\96дÑ\82веÑ\80дженÑ\83 Ð°Ð´Ñ\80еÑ\81Ñ\83 ÐµÐ»ÐµÐºÑ\82Ñ\80онноÑ\97 Ð¿Ð¾Ñ\88Ñ\82и Ñ\83 Ð²аших [[Special:Preferences|налаштуваннях]], щоб мати змогу надсилати електронну пошту іншим користувачам.",
+       "mailnologintext": "Ð\92и Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ\96 [[Special:UserLogin|ввÑ\96йÑ\82и Ð´Ð¾ Ñ\81иÑ\81Ñ\82еми]] Ñ\96 Ð¼Ð°Ñ\82и Ð¿Ñ\96дÑ\82веÑ\80дженÑ\83 Ð°Ð´Ñ\80еÑ\81Ñ\83 ÐµÐ»ÐµÐºÑ\82Ñ\80онноÑ\97 Ð¿Ð¾Ñ\88Ñ\82и Ñ\83 Ð\92аших [[Special:Preferences|налаштуваннях]], щоб мати змогу надсилати електронну пошту іншим користувачам.",
        "emailuser": "Надіслати листа",
        "emailuser-title-target": "Надіслати електронного листа {{GENDER:$1|користувачеві|користувачці}}",
        "emailuser-title-notarget": "Надіслати електронного листа користувачеві",
        "watchlistfor2": "Для $1 $2",
        "nowatchlist": "Ваш список спостереження порожній.",
        "watchlistanontext": "Вам необхідно увійти, щоб переглянути чи редагувати список спостереження.",
-       "watchnologin": "Ви не ввійшли до системи",
+       "watchnologin": "Ви не увійшли до системи",
        "addwatch": "Додати до списку спостереження",
        "addedwatchtext": "«[[:$1]]» та її сторінка обговорення додані до вашого [[Special:Watchlist|списку спостереження]].",
        "addedwatchtext-short": "Сторінка \" $1 \" була додана до вашого списку спостереження.",
        "notvisiblerev": "Версія була вилучена",
        "watchlist-details": "У вашому списку спостереження $1 {{PLURAL:$1|сторінка|сторінки|сторінок}} (не враховуючи сторінок обговорення).",
        "wlheader-enotif": "Сповіщення електронною поштою ввімкнено.",
-       "wlheader-showupdated": "СÑ\82оÑ\80Ñ\96нки, Ñ\89о Ð·Ð¼Ñ\96нилиÑ\81Ñ\8f Ð¿Ñ\96Ñ\81лÑ\8f Ð²ашого останнього їх відвідування, виділені '''жирним''' шрифтом.",
+       "wlheader-showupdated": "СÑ\82оÑ\80Ñ\96нки, Ñ\89о Ð·Ð¼Ñ\96нилиÑ\81Ñ\8f Ð¿Ñ\96Ñ\81лÑ\8f Ð\92ашого останнього їх відвідування, виділені '''жирним''' шрифтом.",
        "wlnote": "Нижче наведено {{PLURAL:$1|останнє $1 редагування|останні $1 редагування|останні $1 редагувань}} за {{PLURAL:$2|останню|останні|останні}} <strong>$2</strong> {{PLURAL:$2|годину|години|годин}}, на час $3 $4.",
        "wlshowlast": "Показати зміни за останні $1 годин $2 днів",
        "watchlist-hide": "Приховати",
        "delete-legend": "Вилучення",
        "historywarning": "<strong>Попередження:</strong> Сторінка, яку ви збираєтеся вилучити, має історію редагувань з приблизно $1 {{PLURAL:$1|1=версії|версій}}:",
        "historyaction-submit": "Показати",
-       "confirmdeletetext": "Ð\92и Ð·Ð±Ð¸Ñ\80аÑ\94Ñ\82еÑ\81Ñ\8c Ð²Ð¸Ð»Ñ\83Ñ\87иÑ\82и Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83 Ñ\96 Ð²Ñ\81Ñ\96 Ñ\97Ñ\97 Ð¶Ñ\83Ñ\80нали Ñ\80едагÑ\83ванÑ\8c Ð· Ð±Ð°Ð·Ð¸ Ð´Ð°Ð½Ð¸Ñ\85.\nÐ\91Ñ\83дÑ\8c Ð»Ð°Ñ\81ка, Ð¿Ñ\96дÑ\82веÑ\80дÑ\96Ñ\82Ñ\8c, Ñ\89о Ð²и бажаєте зробити це, повністю розумієте наслідки і що робите це у відповідності з [[{{MediaWiki:Policy-url}}|правилами]].",
+       "confirmdeletetext": "Ð\92и Ð·Ð±Ð¸Ñ\80аÑ\94Ñ\82еÑ\81Ñ\8c Ð²Ð¸Ð»Ñ\83Ñ\87иÑ\82и Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83 Ñ\96 Ð²Ñ\81Ñ\96 Ñ\97Ñ\97 Ð¶Ñ\83Ñ\80нали Ñ\80едагÑ\83ванÑ\8c Ð· Ð±Ð°Ð·Ð¸ Ð´Ð°Ð½Ð¸Ñ\85.\nÐ\91Ñ\83дÑ\8c Ð»Ð°Ñ\81ка, Ð¿Ñ\96дÑ\82веÑ\80дÑ\96Ñ\82Ñ\8c, Ñ\89о Ð\92и бажаєте зробити це, повністю розумієте наслідки і що робите це у відповідності з [[{{MediaWiki:Policy-url}}|правилами]].",
        "actioncomplete": "Дію виконано",
        "actionfailed": "Виконати дію не вдалося",
        "deletedtext": "\"$1\" було вилучено.\nДив. $2 для перегляду списку останніх вилучень.",
        "delete-toobig": "У цієї сторінки дуже довга історія редагувань, більше $1 {{PLURAL:$1|версії|версій|версій}}.\nВилучення таких сторінок було заборонене з метою уникнення порушень у роботі сайту {{SITENAME}}.",
        "delete-warning-toobig": "У цієї сторінки дуже довга історія редагувань, більше $1 {{PLURAL:$1|версії|версій|версій}}.\nЇї вилучення може призвести до порушень у роботі бази даних сайту {{SITENAME}};\nдійте обережно.",
        "deleteprotected": "Ви не можете видалити цю сторінку, тому що вона захищена.",
-       "deleting-backlinks-warning": "'''Попередження:'''  [[Special:WhatLinksHere/{{FULLPAGENAME}}|інші сторінки]] посилаються або містять сторінку, яку ви маєте намір видалити.",
+       "deleting-backlinks-warning": "<strong>Попередження:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|інші сторінки]] посилаються або містять сторінку, яку Ви маєте намір видалити.",
        "rollback": "Відкинуто редагування",
        "rollbacklink": "відкинути",
        "rollbacklinkcount": "відкинути $1 {{PLURAL:$1|редагування|редагування|редагувань}}",
        "rollbackfailed": "Відкинути зміни не вдалося",
        "cantrollback": "Неможливо відкинути редагування, оскільки останній дописувач сторінки є її автором.",
        "alreadyrolled": "Неможливо відкинути останні редагування [[:$1]], зроблені [[User:$2|$2]] ([[User talk:$2|обговорення]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]), оскільки хтось інший уже змінив чи відкинув редагування цієї статті.\n\nОстанні редагування зроблено [[User:$3|$3]] ([[User talk:$3|обговорення]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Пояснення редагування було: «''$1''».",
-       "revertpage": "РедагÑ\83ваннÑ\8f ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87а [[Special:Contributions/$2|$2]] ([[User talk:$2|обговоÑ\80еннÑ\8f]]) Ð²Ñ\96дкинÑ\83Ñ\82Ñ\96 Ð´Ð¾ Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\97 ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87а [[User:$1|$1]]",
+       "editcomment": "Пояснення редагування було: «<em>$1</em>.».",
+       "revertpage": "Ð\92Ñ\96дкинÑ\83Ñ\82о Ñ\80едагÑ\83ваннÑ\8f [[Special:Contributions/$2|$2]] ([[User talk:$2|обговоÑ\80еннÑ\8f]]) Ð´Ð¾ Ð·Ñ\80обленого [[User:$1|$1]]",
        "revertpage-nouser": "Відкинуто редагування прихованого користувача до останньої версії, зробленої {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Відкинуті редагування користувача $1; повернення до версії користувача $2.",
        "sessionfailure-title": "Помилка сеансу",
        "changecontentmodel-title-label": "Назва сторінки",
        "changecontentmodel-model-label": "Нова модель вмісту",
        "changecontentmodel-reason-label": "Причина:",
+       "changecontentmodel-submit": "Змінити",
        "changecontentmodel-success-title": "Модель вмісту було змінено",
        "changecontentmodel-success-text": "Тип вмісту сторінки [[:$1]] було змінено.",
        "changecontentmodel-cannot-convert": "Вміст сторінки [[:$1]] не можна перетворити на вміст типу $2.",
        "changecontentmodel-nodirectediting": "Модель вмісту $1 не підтримує пряме редагування",
        "log-name-contentmodel": "Журнал змін моделі вмісту",
        "log-description-contentmodel": "Події, пов'язані з моделями вмісту сторінки",
+       "logentry-contentmodel-new": "$1 {{GENDER:$2|створив|створила}} сторінку $3, використовуючи нестандартну модель вмісту «$5»",
        "logentry-contentmodel-change": "$1 {{GENDER:$2|змінив|змінила}} модель вмісту сторінки $3 з «$4» на «$5»",
        "logentry-contentmodel-change-revertlink": "відкинути",
        "logentry-contentmodel-change-revert": "відкинути",
        "protect_expiry_old": "Час закінчення — в минулому.",
        "protect-unchain-permissions": "Відкрити доступ до додаткових параметрів захисту",
        "protect-text": "Тут ви можете переглянути та змінити рівень захисту сторінки '''$1'''.",
-       "protect-locked-blocked": "Ð\92и Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ\82е Ð·Ð¼Ñ\96нÑ\8eваÑ\82и Ñ\80Ñ\96венÑ\8c Ð·Ð°Ñ\85иÑ\81Ñ\82Ñ\83 Ñ\81Ñ\82оÑ\80Ñ\96нки, Ð´Ð¾ÐºÐ¸ Ð²Ð°Ñ\88 Ð¾Ð±Ð»Ñ\96ковий Ð·Ð°Ð¿Ð¸Ñ\81 Ð·Ð°Ð±Ð»Ð¾ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹.\nÐ\9fоÑ\82оÑ\87нÑ\96 Ñ\83Ñ\81Ñ\82ановки Ð´Ð»Ñ\8f Ñ\81Ñ\82оÑ\80Ñ\96нки '''$1''':",
+       "protect-locked-blocked": "Ð\92и Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ\82е Ð·Ð¼Ñ\96нÑ\8eваÑ\82и Ñ\80Ñ\96венÑ\8c Ð·Ð°Ñ\85иÑ\81Ñ\82Ñ\83 Ñ\81Ñ\82оÑ\80Ñ\96нки, Ð´Ð¾ÐºÐ¸ Ð\92аÑ\88 Ð¾Ð±Ð»Ñ\96ковий Ð·Ð°Ð¿Ð¸Ñ\81 Ð·Ð°Ð±Ð»Ð¾ÐºÐ¾Ð²Ð°Ð½Ð¸Ð¹.\nÐ\9fоÑ\82оÑ\87нÑ\96 Ð½Ð°Ð»Ð°Ñ\88Ñ\82Ñ\83ваннÑ\8f Ð´Ð»Ñ\8f Ñ\81Ñ\82оÑ\80Ñ\96нки <strong>$1</strong>:",
        "protect-locked-dblock": "Рівень захисту не може бути зміненим, так як основна база даних тимчасово заблокована.\nПоточні установки для сторінки '''$1''':",
        "protect-locked-access": "У вашого облікового запису недостатньо прав для зміни рівня захисту сторінки.\nПоточні установки для сторінки: '''$1''':",
        "protect-cascadeon": "Ця сторінка зараз захищена у зв'язку з тим, що вона включена у {{PLURAL:$1|1=сторінку, для якої|сторінки, для яких}} встановлений каскадний захист. \nЗміни рівня захисту цієї сторінки не вплине на каскадний захист.",
        "protect-default": "Дозволити всім користувачам",
-       "protect-fallback": "Ð\94озволено Ñ\82Ñ\96лÑ\8cки ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87ам Ñ\96з Ð´Ð¾Ð·Ð²Ð¾Ð»ом «$1»",
+       "protect-fallback": "Ð\94озволено Ñ\82Ñ\96лÑ\8cки ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87ам Ñ\96з Ð¿Ñ\80авом «$1»",
        "protect-level-autoconfirmed": "Дозволено тільки автопідтвердженим користувачам",
        "protect-level-sysop": "Дозволено тільки адміністраторам",
        "protect-summary-cascade": "каскадний",
        "invert": "Крім вибраного",
        "tooltip-invert": "Встановіть цей прапорець, щоб приховати зміни на сторінках, в межах обраного простору імен (і пов'язаних просторів імен, за потреби)",
        "tooltip-whatlinkshere-invert": "Поставте цю галочку, щоб приховати зміни на сторінках із обраного простору назв.",
-       "namespace_association": "Пов'язаний простір назв",
+       "namespace_association": "Пов'язаний простір",
        "tooltip-namespace_association": "Встановіть цей прапорець, щоб додати простір назв обговорень, пов'язаних з обраним простором назв",
        "blanknamespace": "(Основний)",
        "contributions": "Внесок {{GENDER:$1|користувача|користувачки}}",
        "sp-contributions-username": "IP-адреса або ім'я користувача:",
        "sp-contributions-toponly": "Показувати тільки редагування, що є останніми версіями",
        "sp-contributions-newonly": "Показувати тільки редагування, які є створеннями сторінок",
-       "sp-contributions-submit": "Ð\97найÑ\82и",
+       "sp-contributions-submit": "Ð\9fоÑ\88Ñ\83к",
        "whatlinkshere": "Посилання сюди",
        "whatlinkshere-title": "Сторінки, що посилаються на «$1»",
        "whatlinkshere-page": "Сторінка:",
        "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",
        "ipbhidename": "Приховати ім'я користувача у редагуваннях та списках",
        "ipbwatchuser": "Додати до списку спостереження сторінку користувача і його обговорення",
-       "ipb-disableusertalk": "Заборонити користувачу редагувати свою сторінку обговорення під час блокування",
+       "ipb-disableusertalk": "Заборонити користувачеві редагувати свою сторінку обговорення під час блокування",
        "ipb-change-block": "Переблокувати користувача з цими налаштуваннями",
        "ipb-confirm": "Підтвердити блокування",
        "badipaddress": "IP-адреса записана в невірному форматі, або користувача з таким іменем не існує.",
        "unblockip": "Розблокувати IP-адресу",
        "unblockiptext": "Використовуйте подану нижче форму, щоб відновити можливість збереження з раніше заблокованої IP-адреси.",
        "ipusubmit": "Зняти це блокування",
-       "unblocked": "[[User:$1|$1]] розблокований",
+       "unblocked": "[[User:$1|$1]] {{GENDER:$1|разблокований|разблокована}}",
        "unblocked-range": "$1 розблоковано",
        "unblocked-id": "Блокування $1 було зняте",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] вже розлоковано.",
        "ipbnounblockself": "Ви не можете розблокувати себе",
        "lockdb": "Заблокувати базу даних",
        "unlockdb": "Розблокувати базу даних",
-       "lockdbtext": "Ð\91локÑ\83ваннÑ\8f Ð±Ð°Ð·Ð¸ Ð´Ð°Ð½Ð¸Ñ\85 Ñ\83неможливиÑ\82Ñ\8c Ð´Ð»Ñ\8f Ð²Ñ\81Ñ\96Ñ\85 ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87Ñ\96в Ñ\80едагÑ\83ваннÑ\8f Ñ\81Ñ\82оÑ\80Ñ\96нок, Ð·Ð¼Ñ\96нÑ\83 Ð½Ð°Ð»Ð°Ñ\88Ñ\82Ñ\83ванÑ\8c, Ñ\81пиÑ\81кÑ\96в Ñ\81поÑ\81Ñ\82еÑ\80еженнÑ\8f Ñ\82а Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ\8f Ñ\96нÑ\88иÑ\85 Ð´Ñ\96й, Ñ\89о Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ\8eÑ\82Ñ\8c Ð´Ð¾Ñ\81Ñ\82Ñ\83пÑ\83 Ð´Ð¾ Ð±Ð°Ð·Ð¸ Ð´Ð°Ð½Ð¸Ñ\85.\nÐ\91Ñ\83дÑ\8c Ð»Ð°Ñ\81ка, Ð¿Ñ\96дÑ\82веÑ\80дÑ\96Ñ\82Ñ\8c, Ñ\89о Ñ\86е â\80\94 Ñ\81аме Ñ\82е, Ñ\89о Ð²Ð¸ Ð±Ð°Ð¶Ð°Ñ\94Ñ\82е Ð·Ñ\80обиÑ\82и, Ñ\96 Ñ\89о Ð²и знімете блокування, коли закінчите обслуговування бази даних.",
+       "lockdbtext": "Ð\91локÑ\83ваннÑ\8f Ð±Ð°Ð·Ð¸ Ð´Ð°Ð½Ð¸Ñ\85 Ñ\83неможливиÑ\82Ñ\8c Ð´Ð»Ñ\8f Ð²Ñ\81Ñ\96Ñ\85 ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87Ñ\96в Ñ\80едагÑ\83ваннÑ\8f Ñ\81Ñ\82оÑ\80Ñ\96нок, Ð·Ð¼Ñ\96нÑ\83 Ð½Ð°Ð»Ð°Ñ\88Ñ\82Ñ\83ванÑ\8c, Ñ\81пиÑ\81кÑ\96в Ñ\81поÑ\81Ñ\82еÑ\80еженнÑ\8f Ñ\82а Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ\8f Ñ\96нÑ\88иÑ\85 Ð´Ñ\96й, Ñ\89о Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ\8eÑ\82Ñ\8c Ð´Ð¾Ñ\81Ñ\82Ñ\83пÑ\83 Ð´Ð¾ Ð±Ð°Ð·Ð¸ Ð´Ð°Ð½Ð¸Ñ\85.\nÐ\91Ñ\83дÑ\8c Ð»Ð°Ñ\81ка, Ð¿Ñ\96дÑ\82веÑ\80дÑ\96Ñ\82Ñ\8c, Ñ\89о Ñ\86е â\80\94 Ñ\81аме Ñ\82е, Ñ\89о Ð\92и Ð±Ð°Ð¶Ð°Ñ\94Ñ\82е Ð·Ñ\80обиÑ\82и, Ñ\96 Ñ\89о Ð\92и знімете блокування, коли закінчите обслуговування бази даних.",
        "unlockdbtext": "Розблокування бази даних надасть змогу знову редагувати сторінки, змінювати налаштування, списки спостереження та виконувати інші дії, що вимагають доступу до бази даних.\nБудь ласка, підтвердіть, що ви справді хочете це зробити.",
        "lockconfirm": "Так, я дійсно хочу заблокувати базу даних.",
        "unlockconfirm": "Так, я дійсно хочу розблокувати базу даних.",
        "movepage-moved": "'''Сторінка «$1» перейменована на «$2»'''",
        "movepage-moved-redirect": "Створено перенаправлення.",
        "movepage-moved-noredirect": "Створення перенаправлення було заборонене.",
-       "articleexists": "СÑ\82оÑ\80Ñ\96нка Ð· Ñ\82акоÑ\8e Ð½Ð°Ð·Ð²Ð¾Ñ\8e Ð²Ð¶Ðµ Ñ\96Ñ\81нÑ\83Ñ\94 Ð°Ð±Ð¾ Ð·Ð°Ð·Ð½Ð°Ñ\87ена Ð²ами назва недопустима.\nБудь ласка, оберіть іншу назву.",
+       "articleexists": "СÑ\82оÑ\80Ñ\96нка Ð· Ñ\82акоÑ\8e Ð½Ð°Ð·Ð²Ð¾Ñ\8e Ð²Ð¶Ðµ Ñ\96Ñ\81нÑ\83Ñ\94 Ð°Ð±Ð¾ Ð·Ð°Ð·Ð½Ð°Ñ\87ена Ð\92ами назва недопустима.\nБудь ласка, оберіть іншу назву.",
        "cantmove-titleprotected": "Неможливо перейменувати сторінку, оскільки нова назва входить до списку заборонених.",
        "movetalk": "Перейменувати відповідну сторінку обговорення",
        "move-subpages": "Перейменувати підсторінки (до $1)",
        "tooltip-pt-watchlist": "Список сторінок, за змінами в яких Ви спостерігаєте",
        "tooltip-pt-mycontris": "{{GENDER:|Ваш}} внесок",
        "tooltip-pt-anoncontribs": "Список редагувань, зроблених з цієї IP-адреси",
-       "tooltip-pt-login": "ТÑ\83Ñ\82 Ð¼Ð¾Ð¶Ð½Ð° Ð·Ð°Ñ\80еÑ\94Ñ\81Ñ\82Ñ\80Ñ\83ваÑ\82иÑ\81Ñ\8f Ð² Ñ\81иÑ\81Ñ\82емÑ\96, Ð°Ð»Ðµ Ñ\86е Ð½Ðµ обов'язково.",
-       "tooltip-pt-logout": "Вихід із системи",
+       "tooltip-pt-login": "Ð\97аоÑ\85оÑ\87Ñ\83Ñ\94мо Ð\92аÑ\81 Ñ\83вÑ\96йÑ\82и Ð² Ñ\81иÑ\81Ñ\82емÑ\83, Ð°Ð»Ðµ Ñ\86е Ð½Ðµобов'язково.",
+       "tooltip-pt-logout": "Вийти з системи",
        "tooltip-pt-createaccount": "Пропонуємо створити обліковий запис і увійти в систему; однак, це не обов'язково",
        "tooltip-ca-talk": "Обговорення змісту сторінки",
        "tooltip-ca-edit": "Редагувати цю сторінку",
        "tooltip-p-logo": "Перейти на головну сторінку",
        "tooltip-n-mainpage": "Перейти на Головну сторінку",
        "tooltip-n-mainpage-description": "Перейти на головну сторінку",
-       "tooltip-n-portal": "Ð\9fÑ\80о Ð¿Ñ\80оекÑ\82, Ð¿Ñ\80о Ñ\82е, Ñ\89о Ð²Ð¸ Ð¼Ð¾Ð¶ÐµÑ\82е Ð·Ñ\80обиÑ\82и, Ñ\96 Ñ\89о Ð´Ðµ Ð·Ð½Ð°Ñ\85одиÑ\82Ñ\8cÑ\81Ñ\8f",
+       "tooltip-n-portal": "Ð\9fÑ\80о Ð¿Ñ\80оекÑ\82, Ð¿Ñ\80о Ñ\82е, Ñ\89о Ð\92и Ð¼Ð¾Ð¶ÐµÑ\82е Ð·Ñ\80обиÑ\82и, Ñ\96 Ñ\89о Ð´Ðµ Ñ\88Ñ\83каÑ\82и",
        "tooltip-n-currentevents": "Список поточних подій",
-       "tooltip-n-recentchanges": "Ð\9fеÑ\80елÑ\96к Ð¾Ñ\81Ñ\82аннÑ\96Ñ\85 Ð·Ð¼Ñ\96н",
+       "tooltip-n-recentchanges": "СпиÑ\81ок Ð¾Ñ\81Ñ\82аннÑ\96Ñ\85 Ð·Ð¼Ñ\96н Ñ\83 Ñ\86Ñ\96й Ð²Ñ\96кÑ\96",
        "tooltip-n-randompage": "Переглянути випадкову сторінку",
        "tooltip-n-help": "Довідка з проекту",
        "tooltip-t-whatlinkshere": "Перелік усіх сторінок, які посилаються на цю сторінку",
        "tooltip-watch": "Додати поточну сторінку до списку спостереження",
        "tooltip-watchlistedit-normal-submit": "Вилучити заголовки",
        "tooltip-watchlistedit-raw-submit": "Оновити список спостереження",
-       "tooltip-recreate": "Відновити сторінку недивлячись на те, що її вилучено",
+       "tooltip-recreate": "Відновити сторінку не дивлячись на те, що її вилучено",
        "tooltip-upload": "Почати завантаження",
        "tooltip-rollback": "Одним кліком прибрати зміни, зроблені останнім редактором",
        "tooltip-undo": "Прибрати внесені зміни і показати попередній перегляд. Дозволяє зазначити причину скасування.",
        "markaspatrolledtext": "Позначити цю сторінку як перевірену",
        "markaspatrolledtext-file": "Позначити цю версію файлу як відпатрульовану",
        "markedaspatrolled": "Позначена як перевірена",
-       "markedaspatrolledtext": "Ð\9eбÑ\80ана Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\8f [[:$1]] Ð±Ñ\83ла Ð¿Ð¾Ð·Ð½Ð°Ñ\87ена Ñ\8fк Ð²Ñ\96дпаÑ\82Ñ\80Ñ\83лÑ\8cована.",
+       "markedaspatrolledtext": "Ð\92ибÑ\80анÑ\83 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\8e Ñ\81Ñ\82оÑ\80Ñ\96нки [[:$1]] Ð¿Ð¾Ð·Ð½Ð°Ñ\87ено Ñ\8fк Ð¿ÐµÑ\80евÑ\96Ñ\80енÑ\83.",
        "rcpatroldisabled": "Патрулювання останніх змін заборонене",
        "rcpatroldisabledtext": "Можливість патрулювання останніх змін зараз вимкнена.",
        "markedaspatrollederror": "Неможливо позначити як перевірену",
        "scarytranscludedisabled": "[«Interwiki transcluding» вимкнено]",
        "scarytranscludefailed": "[Помилка звертання до шаблону $1]",
        "scarytranscludefailed-httpstatus": "[Не вдалось завантажити шаблон для $1: HTTP $2]",
-       "scarytranscludetoolong": "[URL Ð´Ñ\83же довгий]",
+       "scarytranscludetoolong": "[URL Ð½Ð°Ð´Ñ\82о довгий]",
        "deletedwhileediting": "'''Увага:''' ця сторінка була вилучена після того, як ви розпочали редагування!",
        "confirmrecreate": "{{GENDER:$1|Користувач|Користувачка}} [[User:$1|$1]] ([[User talk:$1|обговорення]]) {{GENDER:$1|вилучив|вилучила}} цю сторінку після того, як ви почали редагування і зазначив причиною:\n: <em>$2</em>\nБудь ласка, підтвердіть, що Ви дійсно бажаєте створити цю сторінку заново.",
        "confirmrecreate-noreason": "{{GENDER:$1|Користувач|Користувачка}} [[User:$1|$1]] ([[User talk:$1|обговорення]]) {{GENDER:$1|вилучив|вилучила}} цю сторінку після того, як Ви її почали редагувати. Будь ласка, підтвердіть, що Ви дійсно хочете її відновити.",
        "autoredircomment": "Перенаправлено на [[$1]]",
        "autosumm-new": "Створена сторінка: $1",
        "autosumm-newblank": "Створити порожню сторінку",
-       "size-bytes": "$1 байтів",
+       "size-bytes": "$1 {{PLURAL:$1|байт|байти|байтів}}",
        "size-kilobytes": "$1 КБ",
        "size-megabytes": "$1 МБ",
        "size-gigabytes": "$1 ГБ",
-       "lag-warn-normal": "Зміни, зроблені менш ніж $1 {{PLURAL:$1|секунду|секунди|секунд}} тому, можуть не відображатися в цьому переліку.",
-       "lag-warn-high": "Зміни, зроблені менш ніж $1 {{PLURAL:$1|секунду|секунди|секунд}} тому, можуть не відображатися в цьому переліку внаслідок значної затримки сервера БД.",
+       "size-pixel": "$1 {{PLURAL:$1|піксель|пікселі|пікселів}}",
+       "lag-warn-normal": "Зміни за {{PLURAL:$1|останню|останні}} $1 {{PLURAL:$1|секунду|секунди|секунд}}, можливо, не показуються в цьому списку.",
+       "lag-warn-high": "У зв'язку із великими затримками доступу до сервера бази даних, зміни за {{PLURAL:$1|останню $1 секунду|останні $1 секунди|останні $1 секунд}}, можливо, не показуються в цьому списку.",
        "watchlistedit-normal-title": "Редагування списку спостереження",
        "watchlistedit-normal-legend": "Вилучення заголовків зі списку спостереження",
        "watchlistedit-normal-explain": "Далі наведені заголовки з вашого списку спостереження.\nДля вилучення сторінки зі списку необхідно поставити галочку в квадратику біля нього і натиснути «{{int:Watchlistedit-normal-submit}}».\nВи можете також [[Special:EditWatchlist/raw|редагувати список як текстові рядки]].",
        "watchlistedit-raw-done": "Ваш список спостереження збережений.",
        "watchlistedit-raw-added": "{{PLURAL:$1|$1 заголовок був доданий|$1 заголовки були додані|$1 заголовків були додані}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|$1 заголовок був вилучений|$1 заголовки були вилучені|$1 заголовків були вилучені}}:",
-       "watchlistedit-clear-title": "СпиÑ\81ок Ñ\81поÑ\81Ñ\82еÑ\80еженнÑ\8f Ð¾Ñ\87иÑ\89ено",
+       "watchlistedit-clear-title": "Ð\9eÑ\87иÑ\89еннÑ\8f Ñ\81пиÑ\81кÑ\83 Ñ\81поÑ\81Ñ\82еÑ\80еженнÑ\8f",
        "watchlistedit-clear-legend": "Очистити список спостереження",
        "watchlistedit-clear-explain": "Усі сторінки буде вилучено з Вашого списку спостереження",
        "watchlistedit-clear-titles": "Сторінки:",
        "tags-delete-not-allowed": "Мітки, визначені розширенням, не можуть бути вилучені, якщо тільки розширення не дозволяє це окремо.",
        "tags-delete-not-found": "Мітка «$1» не існує.",
        "tags-delete-too-many-uses": "Міткою «$1» понад $2 {{PLURAL:$2|редагування|редагування|редагувань}}, і це означає, що її не можна вилучити.",
-       "tags-delete-warnings-after-delete": "Мітку «$1» було успішно вилучено, але {{PLURAL:$2|з'явились такі|1=з'явилось таке}} попередження:",
+       "tags-delete-warnings-after-delete": "Мітку «$1» було вилучено, але {{PLURAL:$2|з'явилось таке|з'явились такі}} попередження:",
        "tags-activate-title": "Активувати мітку",
        "tags-activate-question": "Ви збираєтеся активувати мітку «$1».",
        "tags-activate-reason": "Причина:",
        "tags-edit-revision-legend": "Додати або вилучити мітки з {{PLURAL:$1|цієї версії|усіх $1 версій}}",
        "tags-edit-logentry-legend": "Додати або вилучити мітки {{PLURAL:$1|для цього журнального запису|для всіх $1 журнальних записів}}",
        "tags-edit-existing-tags": "Існуючі мітки:",
-       "tags-edit-existing-tags-none": "''Нема''",
+       "tags-edit-existing-tags-none": "<em>Нема</em>",
        "tags-edit-new-tags": "Нові мітки:",
        "tags-edit-add": "Додати ці мітки:",
        "tags-edit-remove": "Видалити ці мітки:",
        "tags-edit-reason": "Причина:",
        "tags-edit-revision-submit": "Застосувати зміни до {{PLURAL:$1|цієї версії|$1 версій}}",
        "tags-edit-logentry-submit": "Застосувати зміни до {{PLURAL:$1|цього журнального запису|$1 журнальних записів}}",
-       "tags-edit-success": "Зміни успішно застосовано",
+       "tags-edit-success": "Зміни застосовано.",
        "tags-edit-failure": "Не вдалося застосувати зміни:\n$1",
        "tags-edit-nooldid-title": "Некоректна цільова версія",
        "tags-edit-nooldid-text": "Ви або не вказали цільову версію, до якої задіяти функцію, або вказали неіснуючу версію.",
        "default-skin-not-found": "Ой! Типова тема оформлення для вашої вікі <code dir=\"ltr\">$wgDefaultSkin</code>, <code>$1</code> недоступна.\n\nСхоже, що Ваша установка містить {{PLURAL:$4|наступну тему оформлення|наступні теми оформлення}}. Див. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для отримання інформації про те, як увімкнути {{PLURAL:$4|її|їх та обрати тему за замовчуванням}}.\n\n\n$2\n\n\n; Якщо Ви щойно встановили MediaWiki:\n: Ви, мабуть, зробили це з Git або безпосередньо з вихідного коду, використовуючи деякий інший спосіб. Тоді можливе наступне. Спробуйте встановити деякі теми з [https://www.mediawiki.org/wiki/Category:All_skins каталогу тем оформлення сайту mediawiki.org]:\n:* Завантаживши [https://www.mediawiki.org/wiki/Download архів файлів], який містить декілька тем оформлення й розширень. Ви можете скопіювати теку <code>skins/</code> з нього.\n:* Завантаживши архіви окремих тем оформлення з [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Використавши Git, щоб завантажити теми оформлення].\n: Це не повинно зашкодити вашому сховищу, якщо Ви MediaWiki-розробник.\n\n; Якщо Ви щойно оновили MediaWiki:\n: MediaWiki версії 1.24 й новіші більше не вмикають встановлені теми автоматично (див. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Ви можете вставити {{PLURAL:$5|наступний рядок|наступні рядки}} в <code>LocalSettings.php</code>, щоб увімкнути {{PLURAL:$5|встановлену тему|всі встановлені теми}} оформлення: \n\n\n<pre dir=\"ltr\">$3</pre>\n\n\n; Якщо Ви щойно змінили <code>LocalSettings.php</code>:\n: Повторно перевірте назви тем на наявність помилок.",
        "default-skin-not-found-no-skins": "Ой! Тема оформлення для Вашої вікі за замовчуванням, визначена у <code>$wgDefaultSkin</code> як <code>$1</code> недоступна.\n\n\nУ Вас немає встановлених тем оформлення.\n\n\n; Якщо Ви щойно встановили або оновили MediaWiki:\n: Ви, мабуть, зробили це з Git або безпосередньо з вихідного коду, використовуючи інший спосіб. Тоді це можливо. MediaWiki версії 1.24 або новіша не містить теми оформлення в основному репозиторії. Спробуйте встановити деякі теми з [https://www.mediawiki.org/wiki/Category:All_skins каталогу тем оформлення сайту mediawiki.org]:\n:* Завантаживши [https://www.mediawiki.org/wiki/Download архів файлів], який містить декілька тем оформлення і розширень. Ви можете скопіювати теку <code>skins/</code> з нього.\n:* Завантаживши окремі архіви тем з [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Використавши Git, щоб завантажити теми оформлення].\n: Це не повинно зашкодити Вашому сховищу, якщо Ви MediaWiki-розробник. Див. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для отримання інформації про те, як включити теми оформлення і вибрати тему за замовчуванням.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (увімкнено)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''вимкнено''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>вимкнено</strong>)",
        "mediastatistics": "Медіа-статистика",
        "mediastatistics-summary": "Статистичні дані про типи завантажених файлів. Вона тільки включає в себе найновішу версію файлу. Старі або видалені версії файлів виключені.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 байт|$1 байтів|$1 байти}} ($2; $3%)",
index ba19298..abceeb0 100644 (file)
@@ -24,7 +24,8 @@
                        "Obaid Raza",
                        "عثمان خان شاہ",
                        "Syedalinaqinaqvi",
-                       "محمد افضل"
+                       "محمد افضل",
+                       "Macofe"
                ]
        },
        "tog-underline": "ربط کی خط کشیدگی:",
        "myprivateinfoprotected": "آپ ان ذاتی معلوات (private information) میں ترمیم کرنے کا اختیار نہیں رکھتے۔",
        "mypreferencesprotected": "آپ اپنی ان ترجیحات (preferences) میں ترمیم کرنے کا اختیار نہیں رکھتے۔",
        "ns-specialprotected": "خاص صفحات کی تدوین نہیں کی جاسکتی.",
-       "titleprotected": "اس عنوان کو [[User:$1|$1]] نے تخلیق سے محفوظ کیا ہے.\nوجہ یہ بتائی گئی ہے: \"''$2''\"",
+       "titleprotected": "اس عنوان کو [[User:$1|$1]] نے تخلیق سے محفوظ کیا ہے.\nوجہ یہ بتائی گئی ہے: <em>$2</em>.",
        "exception-nologin": "غیر داخل نوشتہ",
        "exception-nologin-text": "براہ مہربانی! اس صفحہ تک رسائی یا ترمیم کے لیے لاگ ان ہوں۔",
        "exception-nologin-text-manual": "$1 براہ مہربانی! اس صفحہ تک رسائی یا ترمیم کے لیے لاگ ان ہوں۔",
        "recentchanges-label-bot": "اس ترمیم کو ایک روبہ نے انجام دیا ہے",
        "recentchanges-label-unpatrolled": "اس ترمیم کی اب تک مراجعت نہیں کی گئی",
        "recentchanges-label-plusminus": "صفحہ کا حجم تبدیل شدہ بلحاظ بائٹ مقدار",
-       "recentchanges-legend-heading": "'''اختیارات'''",
+       "recentchanges-legend-heading": "<strong>اختیارات</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (نیز [[Special:NewPages|جدید صفحات کی فہرست]]) ملاحظہ فرمائیں",
        "recentchanges-submit": "دکھائیں",
        "rcnotefrom": "ذیل میں <strong>$3, $4</strong> سے کی گئی {{PLURAL:$5|تبدیلی|تبدیلیاں}} <strong>$1</strong> تک دکھائی جا رہی ہیں۔",
        "upload-dialog-button-done": "مکمل",
        "upload-dialog-button-save": "محفوظ",
        "upload-dialog-button-upload": "اپلوڈ",
-       "upload-form-label-select-file": "قلف منتخب کریں",
        "upload-form-label-infoform-title": "تفصیلات",
        "upload-form-label-infoform-name": "نام",
        "upload-form-label-infoform-description": "تفصیل",
        "foreign-structured-upload-form-label-own-work": "یہ میرا ذاتی کام ہے",
        "foreign-structured-upload-form-label-infoform-categories": "زمرہ جات",
        "foreign-structured-upload-form-label-infoform-date": "تاریخ",
-       "foreign-structured-upload-form-3-label-yes": "ہاں",
-       "foreign-structured-upload-form-3-label-no": "نہیں",
        "license": "اجازہ:",
        "license-header": "اجازہ کاری",
        "listfiles-delete": "حذف",
index 0d8c1b9..2a3c48f 100644 (file)
        "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|mun.]]) tomonidan qilingan $1-sonli tahrir qaytarildi",
        "cantcreateaccounttitle": "Ro‘yxatdan o‘tib bo‘lmadi",
        "cantcreateaccount-text": "[[User:$3|$3]] ushbu IP manzil (<strong>$1</strong>) orqali ro‘yxatdan o‘tishni bloklab qo‘ygan.\n\n$3 <em>$2</em>ni sabab qilib ko‘rsatdi",
-       "cantcreateaccount-range-text": "[[User:$3|$3]] '''$1''' sohaga tegishli IP manzillar, shu jumladan sizning IP manzilingiz ('''$4'''), orqali ro‘yxatdan o‘tishni bloklab qo‘ygan.\n\n$3 ''$2''ni sabab qilib ko‘rsatdi",
+       "cantcreateaccount-range-text": "[[User:$3|$3]] <strong>$1</strong> sohaga tegishli IP manzillar, shu jumladan sizning IP manzilingiz (<strong>$4</strong>), orqali ro‘yxatdan o‘tishni bloklab qo‘ygan.\n\n$3 <em>$2</em>ni sabab qilib ko‘rsatdi",
        "viewpagelogs": "Ushbu sahifaga doir qaydlarni koʻrsat",
        "nohistory": "Ushbu sahifa uchun oʻzgarishlar tarixi mavjud emas.",
        "currentrev": "Hozirgi koʻrinishi",
        "recentchanges-label-bot": "Bu tahrirni bot bajargan",
        "recentchanges-label-unpatrolled": "Bu tahrir hali tekshirilmagan",
        "recentchanges-label-plusminus": "Sahifa vazni qanchaga oʻzgargani (bayt)",
-       "recentchanges-legend-heading": "'''Izoh:'''",
+       "recentchanges-legend-heading": "<strong>Izoh:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|alohida roʻyxat]])",
        "rcnotefrom": "Quyida <strong>$3, $4</strong> dan keyin sodir boʻlgan oʻzgarishlar koʻrsatilgan (oxirgi <strong>$1</strong> tasi).",
        "rclistfrom": "$3, $2 dan keyin sodir boʻlgan oʻzgarishlarni koʻrsat",
        "wlheader-showupdated": "Siz oxirgi marta kirganingizdan keyin oʻzgartirilgan sahifalar '''qalin''' yozuv bilan ajratib koʻrsatilgan.",
        "wlnote": "Quyida oxirgi $2 soat ichida sodir boʻlgan {{PLURAL:$1|oxirgi oʻzgarish|<strong>$1</strong> ta oʻzgarishlar}} koʻrsatilgan. $3, $4.",
        "wlshowlast": "Oxirgi $1 soatdagi $2 kundagi tahrirlarni koʻrsatish",
-       "watchlistall2": "hammasi",
        "watchlist-options": "Kuzatuv roʻyxati moslamalari",
        "watching": "Kuzatish...",
        "unwatching": "Kuzatuv roʻyxatidan oʻchirilmoqda...",
index f603314..6358cec 100644 (file)
        "customcssprotected": "Nò se dispone dei parmesi necesari a la modifega de sta pajina CSS, in quanto la contien le inpostasion personali de n'altro utente.",
        "customjsprotected": "Nò se dispone dei parmesi necesari a la modifega de sta pajina JavaScript, in quanto la contien le inpostasion personali de n'altro utente.",
        "ns-specialprotected": "No xè posibiłe modifegare łe pajine spesałi.",
-       "titleprotected": "Ła creasion de na pajina con sto titoło xè sta blocà da [[User:$1|$1]].\nŁa modivasion xè ła seguente: \"$2\".",
+       "titleprotected": "Ła creasion de na pajina con sto titoło xè sta blocà da [[User:$1|$1]].\nŁa modivasion xè ła seguente: <em>$2</em>.",
        "filereadonlyerror": "No xe stà posibiłe modifegare el file \"$1\" parché el repository de file \"$2\" xe in modałità de soła letura.\n\nL'aministradore che ło ga blocà ga fornìo sta spiegasion: \"$3\".",
        "invalidtitle-knownnamespace": "Titoło no vałido co namespace \"$2\" e testo \"$3\"",
        "invalidtitle-unknownnamespace": "Titoło no vałido co namespace sconosùo \"$1\" e testo \"$2\"",
        "recentchanges-label-bot": "Sta modifica el la ga fata un bot",
        "recentchanges-label-unpatrolled": "Sta modifica no la xe stà gnancora verificà",
        "recentchanges-label-plusminus": "La dimension de la pagina la xe canbià de sto nùmaro de byte",
-       "recentchanges-legend-heading": "'''Legenda:'''",
+       "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (varda anca [[Special:NewPages|l'elenco de le pagine nove]])",
        "rcnotefrom": "Qui di seguito sono elencate le modifiche da '''$2''' (fino a '''$1''').",
        "rclistfrom": "Mostra i canbiamenti fati da ƚe $2 del $3",
        "rollbackfailed": "Ripristino mìa riussìo",
        "cantrollback": "No xè mia possibiłe tornar a na versión precedente: l'ultima modifica la xè stà aportà da l'unico utente che gà laorà a sto articoło.",
        "alreadyrolled": "No xè mia possibile efetuar el ripristino de [[:$1]] da [[User:$2|$2]] ([[User talk:$2|discussion]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); qualcun altro gà xà modificà o efetuà el ripristino de sta voxe.\n\nL'ultima modefega l'è stà fata da [[User:$3|$3]] ([[User talk:$3|discussion]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "El comento a la modifica el xera: \"''$1''\".",
+       "editcomment": "El comento a la modifica el xera: <em>$1</em>.",
        "revertpage": "Anułàe łe modifeghe de [[Special:Contributions/$2|$2]] ([[User talk:$2|discussion]]), riportà a ła version de prima de [[User:$1|$1]]",
        "revertpage-nouser": "Anulà le modìfeghe de (nome utente cavà), riportà a la version precedente de [[User:$1|$1]]",
        "rollback-success": "Anułàe łe modifighe de $1; riportà a ła version de prima de $2.",
index 84cc4b2..c840b1b 100644 (file)
        "mycustomjsprotected": "Teile ei sa redaktiruida necidä JavaScript-lehtpol't.",
        "myprivateinfoprotected": "Teile ei sa redaktiruida ičetoi personališt informacijad.",
        "ns-specialprotected": "Ei sa redaktiruida specialižid lehtpolid.",
-       "titleprotected": "[[User:$1|$1]]-kävutai om kel'nu mugoižen lehtpolen pälkirjutesen kävutamižen.\nSü om \"''$2''\".",
+       "titleprotected": "[[User:$1|$1]]-kävutai om kel'nu mugoižen lehtpolen pälkirjutesen kävutamižen.\nSü om <em>$2</em>.",
        "exception-nologin": "Ei ole kirjutadud sistemha",
        "virus-badscanner": "Järgendusen petuz: tundmatoi virusoiden skaner: ''$1''",
        "virus-scanfailed": "Skaniruindan petuz (kod $1)",
        "right-blockemail": "Kel'ta kävutajad e-počtad oigendamas",
        "right-hideuser": "Kävutajan nimen kel'dand da sen peitand",
        "right-ipblock-exempt": "Ümbärta IP-blokiruindad, avtoblokiruindad da diapazoniden blokiruindad",
-       "right-proxyunbannable": "Ümbärta proksiden avtomatine blokiruind",
        "right-unblockself": "Heitta blokiruind ičelazpäi",
        "right-protect": "Vajehtada lehtpoliden kaičendan tazopind i redaktiruida kaitud lehtpoled",
        "right-editprotected": "Redaktiruida kaitud lehtpoled (kaskadkaičemata)",
        "upload-description": "failan ümbrikirjutand",
        "upload-options": "Jügetoitandan opcijad",
        "watchthisupload": "Kacelta necidä failad",
-       "upload-success-subj": "Jügutoitand lopihe satusekahas",
-       "upload-failure-subj": "Jügutoitandan problem",
-       "upload-warning-subj": "Jügutoitandvarutuz",
        "upload-proto-error": "Vär protokol",
        "upload-proto-error-text": "Miše jügutoitta edahanpäi, kävutagat URL, kudamb augotase <code>http://</code> vai <code>ftp://</code>.",
        "upload-file-error": "Südäipetuz",
        "pager-newer-n": "{{PLURAL:$1|1 udemb|$1 udembad}}",
        "pager-older-n": "{{PLURAL:$1|1 vanhemb|$1 vanhembad}}",
        "suppress": "Peitmine",
+       "apisandbox-results": "Rezul'tat",
        "booksources": "Kirjpurtked",
        "booksources-search-legend": "Ectä kirjpurtkid",
        "booksources-isbn": "ISBN:",
        "watchlist-details": "Teiden kaclendnimikirjuteses om {{PLURAL:$1|$1 lehtpol'|$1 lehtpol't}}. Lodulehtpoled ei olgoi neciš lugus.",
        "wlheader-enotif": "Tedotand e-počtadme om kävutamas.",
        "wlshowlast": "Ozutada jäl'gmäižiš $1 časuiš da $2 päiviš",
-       "watchlistall2": "kaik",
        "watchlist-options": "Kaclendnimikirjutesen järgendused",
        "watching": "Ližaduz kaclendnimikirjuteshe...",
        "unwatching": "Heitmine kaclendnimikirjutesespäi...",
        "rollbackfailed": "Endištuz om keskustadud petusen tagut.",
        "cantrollback": "Ei voi endištada toižetusid;\nJäl'gmäine toižetai om üksjäižen lehtpolen avtoran.",
        "alreadyrolled": "Ei voi endištada jäl'gmäšt [[:$1]]-lehtpolen redakcijad (avtor: [[User:$2|$2]]). ([[User talk:$2|Lodud]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); ken-se toine om jo redaktiruinu vai endištanu sen.\n\nJäl'gmäižed toižetused om tehnu [[User:$3|$3]] ([[User talk:$3|Lodud]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Redaktiruindan ümbrikacund oli: \"''$1''\".",
+       "editcomment": "Redaktiruindan ümbrikacund oli: <em>$1</em>.",
        "revertpage": "Kävutajan [[Special:Contributions/$2|$2]] ([[User talk:$2|Lodud]]) tožetused oma endištadud edeližhe versijahasai (avtor: [[User:$1|$1]])",
        "rollback-success": "$1-kävutajan toižetused oma endištadud $2-kävutajan versijahasai.",
        "sessionfailure-title": "Seansan petuz",
index c1b783d..3952b8e 100644 (file)
        "october-date": "$1 tháng 10",
        "november-date": "$1 tháng 11",
        "december-date": "$1 tháng 12",
+       "period-am": "Sáng",
+       "period-pm": "Chiều",
        "pagecategories": "{{PLURAL:$1}}Thể loại",
        "category_header": "Các trang trong thể loại “$1”",
        "subcategories": "Thể loại con",
        "viewhelppage": "Xem trang trợ giúp",
        "categorypage": "Xem trang thể loại",
        "viewtalkpage": "Xem trang thảo luận",
-       "otherlanguages": "Trong các ngôn ngữ khác",
+       "otherlanguages": "Trong ngôn ngữ khác",
        "redirectedfrom": "(đổi hướng từ $1)",
        "redirectpagesub": "Trang đổi hướng",
        "redirectto": "Đổi hướng đến:",
        "myprivateinfoprotected": "Bạn không có quyền sửa đổi thông tin cá nhân của bạn.",
        "mypreferencesprotected": "Bạn không có quyền thay đổi tùy chọn của bạn.",
        "ns-specialprotected": "Không thể sửa chữa các trang trong không gian tên {{ns:special}}.",
-       "titleprotected": "Tựa đề này đã bị [[User:$1|$1]] khóa không cho tạo ra.\nLý do được cung cấp là ''$2''.",
+       "titleprotected": "Tựa đề này đã bị [[User:$1|$1]] khóa không cho tạo ra.\nLý do được cung cấp là <em>$2</em>.",
        "filereadonlyerror": "Không thể sửa đổi tập tin “$1” vì kho tập tin “$2” đang ở chế độ chỉ-đọc.\n\nQuản trị viên hệ thống khi khóa nó đưa lý do là: “$3”.",
        "invalidtitle-knownnamespace": "Tựa trang không hợp lệ có không gian tên “$2” và văn bản “$3”",
        "invalidtitle-unknownnamespace": "Tựa trang không hợp lệ có không gian tên số $1 không rõ và văn bản “$2”",
        "nocookieslogin": "{{SITENAME}} sử dụng cookie để đăng nhập thành viên. Bạn đã tắt cookie. Xin hãy kích hoạt rồi thử lại.",
        "nocookiesfornew": "Không thể mở tài khoản vì không thể xác nhận nguồn yêu cầu nó.\nHãy chắc chắn bạn đã bật lên cookie, làm mới trang này, và thử lại.",
        "noname": "Chưa nhập tên.",
-       "loginsuccesstitle": "Đăng nhập thành công",
+       "loginsuccesstitle": "Đã đăng nhập",
        "loginsuccess": "'''Bạn đã đăng nhập vào {{SITENAME}} với tên “$1”.'''",
        "nosuchuser": "Không có thành viên nào có tên “$1”.\nTên người dùng có phân biệt chữ hoa chữ thường.\nHãy kiểm tra lại chính tả, hoặc [[Special:UserLogin/signup|mở tài khoản mới]].",
        "nosuchusershort": "Không có thành viên nào có tên “$1”. Xin hãy kiểm tra lại chính tả.",
        "createaccount-title": "Tài khoản mới tại {{SITENAME}}",
        "createaccount-text": "Ai đó đã tạo một tài khoản với tên $2 tại {{SITENAME}} ($4). Mật khẩu của “$2” là “$3”. Bạn nên đăng nhập và đổi mật khẩu ngay bây giờ.\n\nXin hãy bỏ qua thông điệp này nếu tài khoản này không phải do bạn tạo ra.",
        "login-throttled": "Bạn đã hết quyền thử mật khẩu tài khoản này vì bạn đã nhập sai quá nhiều. Xin hãy đợi $1 rồi hãy thử lại.",
-       "login-abort-generic": "Thất bại khi đăng nhập",
+       "login-abort-generic": "Đăng nhập của bạn không thành công – bị hủy bỏ",
        "login-migrated-generic": "Tài khoản của bạn đã được hợp nhất, và tên đăng nhập của bạn không còn tồn tại trên wiki này.",
        "loginlanguagelabel": "Ngôn ngữ: $1",
        "suspicious-userlogout": "Đã bỏ qua yêu cầu đăng xuất bạn, hình như được gửi từ trình duyệt hoặc máy proxy nhớ đệm hư.",
        "newpassword": "Mật khẩu mới:",
        "retypenew": "Gõ lại:",
        "resetpass_submit": "Chọn mật khẩu và đăng nhập",
-       "changepassword-success": "Đã đổi mật khẩu thành công!",
+       "changepassword-success": "Mật khẩu của bạn đã được thay đổi.",
        "changepassword-throttled": "Bạn đã thử đăng nhập gần đây nhiều lần quá. Xin chờ $1 trước khi bạn thử lần nữa.",
+       "botpasswords": "Mật khẩu Bot",
+       "botpasswords-summary": "<em>Mật khẩu bot</em> cho phép truy cập một tài khoản người dùng qua API mà không sử dụng thông tin chứng nhận chính của tài khoản. Các quyền người dùng có thể bị hạn chế khi đăng nhập dùng mật khẩu bot.\n\nNếu bạn không hiểu tại sao cần sử dụng mật khẩu bot, có lẽ bạn không nên sử dụng nó. Không ai bao giờ có lý do chính đáng để yêu cầu bạn tạo ra một mật khẩu bot và cung cấp nó cho họ.",
+       "botpasswords-disabled": "Mật khẩu Bot bị vô hiệu hoá.",
+       "botpasswords-no-central-id": "Để sử dụng mật khẩu bot, bạn phải đăng nhập vào một tài khoản tập trung.",
+       "botpasswords-existing": "Mật khẩu bot hiện tại",
+       "botpasswords-createnew": "Tạo một mật khẩu mới bot",
+       "botpasswords-editexisting": "Chỉnh sửa một mật khẩu hiện tại của bot",
        "botpasswords-label-appid": "Tên bot:",
        "botpasswords-label-create": "Tạo",
        "botpasswords-label-update": "Cập nhật",
        "botpasswords-label-cancel": "Huỷ bỏ",
        "botpasswords-label-delete": "Xoá",
+       "botpasswords-label-resetpassword": "Đặt lại mật khẩu",
+       "botpasswords-label-grants": "Các quyền có liên quan:",
+       "botpasswords-help-grants": "Các lượt cấp phép cho phép truy cập các quyền người dùng mà một tài khoản đã có sẵn. Xem thêm thông tin trong [[Special:ListGrants|bảng cấp phép]].",
+       "botpasswords-label-restrictions": "Hạn chế sử dụng:",
+       "botpasswords-label-grants-column": "Cấp quyền",
+       "botpasswords-bad-appid": "Bot có tên \"$1\" không hợp lệ.",
+       "botpasswords-insert-failed": "Không thể thêm tên bot \"$1\". Nó đã được thêm vào chưa?",
+       "botpasswords-update-failed": "Thất bại khi cập nhật bot có tên \"$1\". Có phải nó đã bị xóa?",
+       "botpasswords-created-title": "Mật khẩu bot đã được tạo",
+       "botpasswords-created-body": "Đã tạo mật khẩu cho bot “$1” của người dùng “$2”.",
+       "botpasswords-updated-title": "Mật khẩu Bot đã được cập nhật",
+       "botpasswords-updated-body": "Đã cập nhật mật khẩu cho bot “$1” của người dùng “$2”.",
+       "botpasswords-deleted-title": "Bot mật khẩu đã bị xóa",
+       "botpasswords-deleted-body": "Đã xóa mật khẩu cho bot “$1” của người dùng “$2”.",
+       "botpasswords-newpassword": "Mật khẩu mới để đăng nhập như <strong>$1</strong> là <strong>$2</strong>. <em>Xin hãy ghi lại mật khẩu này để mai mốt tham khảo.</em>",
+       "botpasswords-no-provider": "BotPasswordsSessionProvider không có sẵn.",
+       "botpasswords-restriction-failed": "Mật khẩu bot giới hạn ngăn chặn đăng nhập này.",
+       "botpasswords-invalid-name": "Tên người dùng đã chỉ định không chứa dấu tách mật khẩu bot (\"$1\").",
+       "botpasswords-not-exist": "Người dùng \"$1\" không có mật khẩu bot có tên \"$2\".",
        "resetpass_forbidden": "Không được đổi mật khẩu",
        "resetpass-no-info": "Bạn phải đăng nhập mới có thể truy cập trực tiếp trang này.",
        "resetpass-submit-loggedin": "Thay đổi mật khẩu",
        "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ệ.\nCó 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-wrong-oldpass": "Mật khẩu tạm hoặc mật khẩu hiện thời không hợp lệ.\nCó thể bạn đã thay đổi 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:",
        "passwordreset-emailtext-ip": "Ai đó (có thể là bạn, từ địa chỉ IP $1) đã yêu cầu tái tạo mật khẩu của bạn \ntại {{SITENAME}} ($4). {{PLURAL:$3|Tài khoản|Các tài khoản}} dưới đây gắn liền \nvới địa chỉ thư điện tử này:\n\n$2\n\n{{PLURAL:$3|Mật khẩu|Các mật khẩu}} tạm này sẽ hết hạn trong vòng {{PLURAL:$5|một ngày|$5 ngày}}. Bạn nên đăng nhập\nngay bây giờ để chọn mật khẩu mới. Nếu bạn không phải là người yêu cầu\nhoặc đã nhớ lại mật khẩu hiện hành, và bạn không còn\nmuốn thay đổi nó, xin vui lòng bỏ qua thông điệp này và tiếp tục sử dụng\nmật khẩu cũ.",
        "passwordreset-emailtext-user": "Thành viên $1 tại {{SITENAME}} đã yêu cầu tái tạo mật khẩu tại {{SITENAME}} \n($4). {{PLURAL:$3|Tài khoản|Các tài khoản}} dưới đây gắn liền với địa chỉ thư điện tử này:\n\n$2\n\n{{PLURAL:$3|Mật khẩu|Các mật khẩu}} tạm này sẽ hết hạn trong vòng {{PLURAL:$5|một ngày|$5 ngày}}. Bạn nên đăng nhập\nngay bây giờ để chọn mật khẩu mới. Nếu bạn không phải là người yêu cầu hoặc đã nhớ lại mật khẩu hiện hành, và bạn không còn\nmuốn thay đổi nó, xin vui lòng bỏ qua thông điệp này và tiếp tục sử dụng\nmật khẩu cũ.",
        "passwordreset-emailelement": "Tên người dùng: \n$1\n\nMật khẩu tạm: \n$2",
-       "passwordreset-emailsentemail": "Nếu đây là đúng địa chỉ thư điện tử của tài khoản của bạn, một thư điện tử để tái tạo mật khẩu sẽ được gửi cho bạn.",
-       "passwordreset-emailsentusername": "Nếu một địa chỉ thư điện tử tương ứng đã được đăng ký, chúng tôi sẽ gửi thông tin để đặt lại mật khẩu qua thư điện tử.",
+       "passwordreset-emailsentemail": "Nếu đây là đúng địa chỉ thư điện tử của tài khoản của bạn, một thư điện tử dùng để tái tạo mật khẩu sẽ được gửi cho bạn.",
+       "passwordreset-emailsentusername": "Nếu một địa chỉ thư điện tử đã gắn với tên người dùng này thì một thư điện tử để đặt lại mật khẩu sẽ được gửi đến.",
        "passwordreset-emailsent-capture": "Thư điện tử để tái tạo mật khẩu đã được gửi, nội dung như sau.",
        "passwordreset-emailerror-capture": "Chúng tôi đã tạo thư tái tạo mật khẩu dưới đây, nhưng không thể gửi đến {{GENDER:$2}}người dùng: $1",
        "changeemail": "Đổi hoặc gỡ địa chỉ thư điện tử",
        "newarticle": "(Mới)",
        "newarticletext": "Bạn đi đến đây từ một liên kết đến một trang chưa tồn tại. Để tạo trang, hãy bắt đầu gõ vào ô bên dưới (xem [$1 trang trợ giúp] để có thêm thông tin). Nếu bạn đến đây do nhầm lẫn, chỉ cần nhấn vào nút '''Lùi''' (hoặc Trở lại, Quay lại, Back) trong trình duyệt của bạn.",
        "anontalkpagetext": "----''Đây là trang thảo luận của một người dùng vô danh chưa tạo tài khoản hoặc có tài khoản nhưng không đăng nhập.\nDo đó chúng ta phải dùng một dãy số gọi là địa chỉ IP để xác định anh/chị ta.\nMột địa chỉ IP như vậy có thể có nhiều người cùng dùng chung.\nNếu bạn là một thành viên vô danh và cảm thấy rằng có những lời bàn luận không thích hợp đang nhắm vào bạn, xin hãy [[Special:UserLogin/signup|tạo tài khoản]] hoặc [[Special:UserLogin|đăng nhập]] để tránh sự nhầm lẫn về sau với những thành viên vô danh khác.''",
-       "noarticletext": "Trang này hiện chưa có nội dung.\nBạn có thể [[Special:Search/{{PAGENAME}}|tìm kiếm tựa trang này]] trong các trang khác, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tìm trong các nhật trình liên quan],\nhoặc [{{fullurl:{{FULLPAGENAME}}|action=edit}} sửa đổi trang này]</span>.",
-       "noarticletext-nopermission": "Trang này hiện đang trống.\nBạn có thể [[Special:Search/{{PAGENAME}}|tìm kiếm tựa trang này]] tại các trang khác, hoặc <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tìm kiếm các nhật trình liên quan]</span>, nhưng bạn không  phép tạo trang này.",
+       "noarticletext": "Trang này hiện chưa có nội dung.\nBạn có thể [[Special:Search/{{PAGENAME}}|tìm kiếm tựa trang này]] trong các trang khác, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tìm trong các nhật trình liên quan],\nhoặc [{{fullurl:{{FULLPAGENAME}}|action=edit}} tạo mới trang này]</span>.",
+       "noarticletext-nopermission": "Trang này hiện đang trống.\nBạn có thể [[Special:Search/{{PAGENAME}}|tìm kiếm tựa trang này]] tại các trang khác, hoặc <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tìm kiếm các nhật trình liên quan]</span>, nhưng bạn không được phép tạo trang này.",
        "missing-revision": "Phiên bản #$1 của trang có tên “{{FULLPAGENAME}}” không tồn tại.\n\nLỗi này thường xuất hiện đối khi theo dõi liên kết lỗi thời đến phiên bản cũ của một trang đã bị xóa.\nXem chi tiết trong [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} nhật trình xóa].",
        "userpage-userdoesnotexist": "Đây chưa có tài khoản với tên “<nowiki>$1</nowiki>”. Xin hãy kiểm tra lại nếu bạn muốn tạo hay sửa trang này.",
        "userpage-userdoesnotexist-view": "Chưa có tài khoản với tên “$1”.",
        "previewnote": "'''Đây chỉ mới là bản xem trước.'''\nCác thay đổi của bạn vẫn chưa được lưu!",
        "continue-editing": "Đi đến hộp sửa đổi",
        "previewconflict": "Phần xem trước này là kết quả của văn bản trong vùng soạn thảo phía trên và nó sẽ xuất hiện như vậy nếu bạn chọn lưu trang.",
-       "session_fail_preview": "'''Rất tiếc, những sửa đổi của bạn chưa được lưu giữ do mất dữ liệu về phiên làm việc.'''\nXin hãy thử lần nữa.\nNếu vẫn không thành công, hãy thử [[Special:UserLogout|đăng xuất]] rồi đăng nhập lại.",
-       "session_fail_preview_html": "'''Những sửa đổi của bạn chưa được lưu giữ do mất dữ liệu về phiên làm việc.'''\n\n''Do {{SITENAME}} cho phép dùng mã HTML, trang xem trước được ẩn đi để đề phòng bị tấn công bằng JavaScript.''\n\n'''Nếu sửa đổi này là đúng đắn, xin hãy thử lần nữa.\nNếu vẫn không thành công, bạn hãy thử [[Special:UserLogout|đăng xuất]] rồi đăng nhập lại.'''",
+       "session_fail_preview": "Rất tiếc, những sửa đổi của bạn chưa được lưu giữ do mất dữ liệu về phiên làm việc.\n\nCó lẽ bạn đã bị đăng xuất. <strong>Vui lòng xác nhận rằng bạn vẫn đang đăng nhập và thử lưu trang lần nữa</strong>.\n\nNếu vẫn không thành công, hãy thử [[Special:UserLogout|đăng xuất]] rồi đăng nhập lại, đồng thời kiểm tra xem trình duyệt của bạn có cho phép cookie từ trang web này hay không.",
+       "session_fail_preview_html": "Rất tiếc, những sửa đổi của bạn chưa được lưu giữ do mất dữ liệu về phiên làm việc.\n\n<em>Do {{SITENAME}} cho phép dùng mã HTML thô, trang xem trước được ẩn đi để đề phòng bị tấn công bằng JavaScript.</em>\n\n<strong>Nếu sửa đổi này là đúng đắn, xin hãy thử lần nữa.</strong>\nNếu vẫn không thành công, bạn hãy thử [[Special:UserLogout|đăng xuất]] rồi đăng nhập lại, đồng thời kiểm tra xem trình duyệt của bạn có cho phép cookie từ trang web này hay không.",
        "token_suffix_mismatch": "'''Sửa đổi của bạn bị hủy bỏ vì trình duyệt của bạn lẫn lộn các ký tự dấu trong số hiệu\nsửa đổi. Việc hủy bỏ này nhằm tránh nội dung trang bị hỏng.\nĐiều này thường xảy ra khi bạn sử dụng một dịch vụ proxy vô danh trên web có vấn đề.'''",
        "edit_form_incomplete": "'''Một số phần của biểu mẫu sửa đổi không tới được máy chủ. Hãy kiểm tra rằng các sửa đổi của bạn còn nguyên và thử lại.'''",
        "editing": "Sửa đổi $1",
        "nonunicodebrowser": "'''CHU' Y': Tri`nh duye^.t cu?a ba.n kho^ng ho^~ tro+. unicode. Mo^.t ca'ch dde^? ba.n co' the^? su+?a ddo^?i an toa`n trang na`y: ca'c ky' tu+. kho^ng pha?i ASCII se~ xua^'t hie^.n trong ho^.p soa.n tha?o du+o+'i da.ng ma~ tha^.p lu.c pha^n.'''",
        "editingold": "'''Chú ý: bạn đang sửa một phiên bản cũ. Nếu bạn lưu, các sửa đổi trên các phiên bản mới hơn sẽ bị mất.'''",
        "yourdiff": "Khác",
-       "copyrightwarning": "Xin chú ý rằng tất cả các đóng góp của bạn tại {{SITENAME}} được xem là sẽ phát hành theo giấy phép $2 (xem $1 để biết thêm chi tiết). Nếu bạn không muốn trang của bạn bị sửa đổi không thương tiếc và không sẵn lòng cho phép phát hành lại, đừng đăng trang ở đây.<br />\nBạn phải đảm bảo với chúng tôi rằng chính bạn là người viết nên, hoặc chép nó từ một nguồn thuộc phạm vi công cộng hoặc tự do tương đương.\n'''ĐỪNG ĐĂNG TÁC PHẨM CÓ BẢN QUYỀN MÀ CHƯA XIN PHÉP!'''",
+       "copyrightwarning": "Xin chú ý rằng tất cả các đóng góp của bạn tại {{SITENAME}} được xem là sẽ phát hành theo giấy phép $2 (xem $1 để biết thêm chi tiết). Nếu bạn không muốn những gì mình viết ra bị sửa đổi không thương tiếc và không sẵn lòng cho phép phát hành lại, xin đừng nhấn nút \"Lưu trang\".<br />\nBạn phải đảm bảo với chúng tôi rằng chính bạn là tác giả của những gì mình viết ra, hoặc chép nó từ một nguồn thuộc phạm vi công cộng hoặc tự do tương đương.<br />\n<strong>ĐỪNG ĐĂNG NỘI DUNG CÓ BẢN QUYỀN MÀ CHƯA XIN PHÉP!</strong>",
        "copyrightwarning2": "Xin chú ý rằng tất cả các đóng góp của bạn tại {{SITENAME}} có thể được sửa đổi, thay thế, hoặc xóa bỏ bởi các thành viên khác. Nếu bạn không muốn trang của bạn bị sửa đổi không thương tiếc, đừng đăng trang ở đây.<br />\nBạn phải đảm bảo với chúng tôi rằng chính bạn là người viết nên, hoặc chép nó từ một nguồn thuộc phạm vi công cộng hoặc tự do tương đương (xem $1 để biết thêm chi tiết).\n'''ĐỪNG ĐĂNG TÁC PHẨM CÓ BẢN QUYỀN MÀ CHƯA XIN PHÉP!'''",
        "editpage-cannot-use-custom-model": "Không thể thay đổi kiểu nội dung của trang này.",
        "longpageerror": "'''Lỗi: Văn bạn mà bạn muốn lưu dài $1 kilôbyte, dài hơn độ dài tối đa cho phép $2 kilôbyte.'''\nKhông thể lưu trang.",
        "sectioneditnotsupported-text": "Trang sửa đổi này không hỗ trợ sửa đổi đề mục.",
        "permissionserrors": "Không có quyền thực hiện",
        "permissionserrorstext": "Bạn không có quyền thực hiện thao tác đó, vì {{PLURAL:$1|lý do|các lý do}} sau:",
-       "permissionserrorstext-withaction": "Bạn không quyền $2, với {{PLURAL:$1|lý do|các lý do}} sau:",
+       "permissionserrorstext-withaction": "Bạn không được quyền $2, vì {{PLURAL:$1|lý do|các lý do}} sau:",
        "contentmodelediterror": "Bạn không thể sửa đổi phiên bản này vì kiểu nội dung của nó là <code>$1</code>, trong khi kiểu nội dung của trang là <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Cảnh báo: Bạn sắp tạo lại một trang từng bị xóa trước đây.'''\n\nBạn nên cân nhắc trong việc tiếp tục soạn thảo trang này.\nCác nhật trình xóa và di chuyển của trang được đưa ra dưới đây để tiện theo dõi:",
        "moveddeleted-notice": "Trang này đã bị xóa.\nCác nhật trình xóa và di chuyển của trang được đưa ra dưới đây để tiện theo dõi.",
        "undo-summary-username-hidden": "Đã lùi lại sửa đổi $1 của một người dùng ẩn",
        "cantcreateaccounttitle": "Không thể mở tài khoản",
        "cantcreateaccount-text": "Chức năng tài tạo khoản từ địa chỉ IP này ('''$1''') đã bị [[User:$3|$3]] cấm.\n\nLý do được $3 đưa ra là ''$2''",
-       "cantcreateaccount-range-text": "[[User:$3|$3]] đã cấm các địa chỉ IP trong dãy '''$1''', bao gồm địa chỉ IP của bạn ('''$4'''), không được mở tài khoản.\n\nLý do được đưa ra bởi $3 là ''$2''",
+       "cantcreateaccount-range-text": "[[User:$3|$3]] đã cấm các địa chỉ IP trong dãy <strong>$1</strong>, bao gồm địa chỉ IP của bạn (<strong>$4</strong>), không được mở tài khoản.\n\nLý do được đưa ra bởi $3 là <em>$2</em>",
        "viewpagelogs": "Xem nhật trình của trang này",
        "nohistory": "Trang này chưa có lịch sử.",
        "currentrev": "Bản hiện tại",
        "revdelete-unsuppress": "Bỏ các hạn chế trên các phiên bản được phục hồi",
        "revdelete-log": "Lý do:",
        "revdelete-submit": "Áp dụng vào {{PLURAL:$1|phiên bản|các phiên bản}} được chọn",
-       "revdelete-success": "'''Đã cập nhật thành công độ khả kiến của phiên bản.'''",
+       "revdelete-success": "Phiên bản Hiển thị đã cập nhật.",
        "revdelete-failure": "'''Không thể cập nhật khả năng hiển thị của phiên bản:'''\n$1",
-       "logdelete-success": "'''Khả năng nhìn thấy của sự kiện đã được thiết lập thành công.'''",
+       "logdelete-success": "Đã thiết lập khả năng nhìn thấy của nhật trình.",
        "logdelete-failure": "'''Không thể thiết lập khả năng hiện thị của nhật trình:'''\n$1",
        "revdel-restore": "đổi mức khả kiến",
        "pagehist": "Lịch sử trang",
        "mergehistory-empty": "Không thể trộn được sửa đổi nào.",
        "mergehistory-done": "$3 phiên bản của $1 đã được trộn vào [[:$2]].",
        "mergehistory-fail": "Không thể thực hiện được việc trộn lịch sử sửa đổi, vui lòng chọn lại trang cũng như thông số ngày giờ.",
+       "mergehistory-fail-bad-timestamp": "Dấu thời gian không hợp lệ.",
+       "mergehistory-fail-invalid-source": "Trang nguồn không hợp lệ.",
+       "mergehistory-fail-invalid-dest": "Trang đích không hợp lệ.",
+       "mergehistory-fail-no-change": "Kết hợp lịch sử đã không hợp nhất bất kỳ sửa đổi nào. Xin vui lòng kiểm tra lại trang và các thông số thời gian.",
+       "mergehistory-fail-permission": "Không đủ quyền để hợp nhất lịch sử.",
+       "mergehistory-fail-self-merge": "Trang nguồn và đích là giống nhau.",
+       "mergehistory-fail-timestamps-overlap": "Các phiên bản nguồn trùng với nhau hoặc dẫn sau các phiên bản đích.",
        "mergehistory-fail-toobig": "Không thể trộn lịch sử vì phải di chuyển $1 phiên bản và vượt quá giới hạn cho phép.",
        "mergehistory-no-source": "Trang nguồn $1 không tồn tại.",
        "mergehistory-no-destination": "Trang đích $1 không tồn tại.",
        "userrights": "Quản lý quyền thành viên",
        "userrights-lookup-user": "Quản lý nhóm thành viên",
        "userrights-user-editname": "Nhập tên thành viên:",
-       "editusergroup": "Sửa nhóm thành viên",
+       "editusergroup": "Sửa nhóm {{GENDER:$1}}người dùng",
        "editinguser": "Thay đổi quyền hạn của người dùng <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Sửa nhóm thành viên",
-       "saveusergroups": "Lưu nhóm thành viên",
+       "saveusergroups": "Lưu nhóm {{GENDER:$1}}người dùng",
        "userrights-groupsmember": "Thuộc nhóm:",
        "userrights-groupsmember-auto": "Ngầm thuộc nhóm:",
        "userrights-groups-help": "Bạn có thể xếp thành viên này vào nhóm khác:\n* Hộp kiểm được đánh dấu có nghĩa rằng thành viên thuộc về nhóm đó.\n* Hộp không được đánh dấu có nghĩa rằng thành viên không thuộc về nhóm đó.\n* Dấu * có nghĩa là bạn sẽ không thể loại thành viên ra khỏi nhóm một khi bạn đã đưa thành viên vào, hoặc ngược lại.",
        "group-bot": "Bot",
        "group-sysop": "Bảo quản viên",
        "group-bureaucrat": "Hành chính viên",
-       "group-suppress": "Người xóa hẳn",
+       "group-suppress": "Giám sát viên",
        "group-all": "(tất cả)",
        "group-user-member": "{{GENDER:$1}}thành viên",
        "group-autoconfirmed-member": "{{GENDER:$1}}thành viên tự động xác nhận",
        "group-bot-member": "{{GENDER:$1}}bot",
        "group-sysop-member": "{{GENDER:$1}}bảo quản viên",
        "group-bureaucrat-member": "{{GENDER:$1}}hành chính viên",
-       "group-suppress-member": "{{GENDER:$1}}người xóa hẳn",
+       "group-suppress-member": "{{GENDER:$1}}giám sát viên",
        "grouppage-user": "{{ns:project}}:Thành viên",
        "grouppage-autoconfirmed": "{{ns:project}}:Thành viên tự xác nhận",
        "grouppage-bot": "{{ns:project}}:Bot",
        "right-createpage": "Tạo trang (không phải trang thảo luận)",
        "right-createtalk": "Tạo trang thảo luận",
        "right-createaccount": "Mở tài khoản mới",
+       "right-autocreateaccount": "Tự động đăng nhập bằng một tài khoản người dùng bên ngoài",
        "right-minoredit": "Đánh dấu sửa đổi nhỏ",
        "right-move": "Di chuyển trang",
        "right-move-subpages": "Di chuyển trang cùng với các trang con của nó",
        "grant-sendemail": "Gửi thư điện tử cho người dùng khác",
        "grant-uploadeditmovefile": "Tải lên, thay thế, và di chuyển tập tin",
        "grant-uploadfile": "Tải lên tập tin mới",
+       "grant-basic": "Quyền cơ bản",
        "grant-viewdeleted": "Xem các trang và tập tin đã xóa",
        "grant-viewmywatchlist": "Xem danh sách theo dõi của bạn",
        "newuserlogpage": "Nhật trình mở tài khoản",
        "action-createpage": "tạo trang",
        "action-createtalk": "tạo trang thảo luận",
        "action-createaccount": "mở tài khoản này",
+       "action-autocreateaccount": "tự động tạo tài khoản người dùng bên ngoài này",
        "action-history": "xem lịch sử của trang này",
        "action-minoredit": "đánh dấu đây là sửa đổi nhỏ",
        "action-move": "di chuyển trang này",
        "recentchanges-label-bot": "Sửa đổi này do bot thực hiện",
        "recentchanges-label-unpatrolled": "Sửa đổi này chưa được tuần tra",
        "recentchanges-label-plusminus": "Kích cỡ trang đã thay đổi bằng số byte này",
-       "recentchanges-legend-heading": "'''Chú giải:'''",
+       "recentchanges-legend-heading": "<strong>Chú giải:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (xem thêm [[Special:NewPages|danh sách các trang mới]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Xem",
        "recentchangeslinked-page": "Tên trang:",
        "recentchangeslinked-to": "Hiện thay đổi tại những trang có liên kết đến trang này thay thế",
        "recentchanges-page-added-to-category": "[[:$1]] được xếp vào thể loại",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] và {{PLURAL:$2|một trang|$2 trang}} nữa được xếp vào thể loại",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] và [[Special:WhatLinksHere/$1|{{PLURAL:$2|một trang|$2 trang}} nữa]] được xếp vào thể loại",
        "recentchanges-page-removed-from-category": "[[:$1]] được gỡ khỏi thể loại",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] và {{PLURAL:$2|một trang|$2 trang}} nữa được gỡ khỏi thể loại",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] và [[Special:WhatLinksHere/$1|{{PLURAL:$2|một trang|$2 trang}} nữa]] được gỡ khỏi thể loại",
        "autochange-username": "MediaWiki thay đổi tự động",
        "upload": "Tải tập tin lên",
        "uploadbtn": "Tải tập tin lên",
        "uploaded-script-svg": "Tìm thấy phần tử “$1” có khả năng chạy kịch bản trong tập tin SVG được tải lên.",
        "uploaded-hostile-svg": "Tìm thấy CSS nguy hiểm trong phần tử style của tập tin SVG được tải lên.",
        "uploaded-event-handler-on-svg": "Không cho phép đặt thuộc tính xử lý sự kiện <code>$1=\"$2\"</code> trong tập tin SVG.",
-       "uploaded-href-unsafe-target-svg": "Tìm thấy href đến đích nguy hiểm <code>&lt;$1 $2=\"$3\"&gt;</code> trong tập tin SVG được tải lên.",
+       "uploaded-href-attribute-svg": "Các đặc tính href trong tập tin SVG chỉ được phép dẫn đến các trang http:// hoặc https://, nhưng gặp phải <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-unsafe-target-svg": "Tìm thấy href đến đích URI data: không an toàn <code>&lt;$1 $2=\"$3\"&gt;</code> trong tập tin SVG được tải lên.",
        "uploaded-animate-svg": "Tìm thấy thẻ “animate” có thể thay đổi href qua thuộc tính “from” <code>&lt;$1 $2=\"$3\"&gt;</code> trong tập tin SVG được tải lên.",
        "uploaded-setting-event-handler-svg": "Đã ngăn cản việc đặt thuộc tính xử lý sự kiện khi tìm thấy <code>&lt;$1 $2=\"$3\"&gt;</code> trong tập tin SVG được tải lên.",
        "uploaded-setting-href-svg": "Cấm sử dụng thẻ “set” để thêm thuộc tính “href” vào phần tử mẹ.",
        "upload-too-many-redirects": "URL có quá nhiều đổi hướng",
        "upload-http-error": "Xảy ra lỗi HTTP: $1",
        "upload-copy-upload-invalid-domain": "Không có sẵn các bản sao tải lên tại tên miền này.",
+       "upload-foreign-cant-upload": "Wiki này không được thiết lập để tải tập tin lên kho tập tin chung bên ngoài được chỉ định.",
        "upload-dialog-title": "Tải tập tin lên",
        "upload-dialog-button-cancel": "Hủy bỏ",
        "upload-dialog-button-done": "Xong",
        "upload-dialog-button-upload": "Tải lên",
        "upload-form-label-infoform-title": "Chi tiết",
        "upload-form-label-infoform-name": "Tên",
+       "upload-form-label-infoform-name-tooltip": "Một tiêu đề mô tả duy nhất cho tập tin, mà sẽ được dùng để làm một tên file. Bạn có thể sử dụng ngôn ngữ đơn giản với các dấu cách. Không bao gồm phần mở rộng của file.",
        "upload-form-label-infoform-description": "Miêu tả",
+       "upload-form-label-infoform-description-tooltip": "Miêu tả một cách ngắn gọn mỗi điều đáng kể về tác phẩm này.\nNếu là hình chụp, hãy nói đến những vật thể chính, cũng như tình hình, sự kiện, hay địa điểm của hình chụp.",
        "upload-form-label-usage-title": "Sử dụng",
        "upload-form-label-usage-filename": "Tên tập tin",
        "foreign-structured-upload-form-label-own-work": "Đây là tác phẩm của chính tôi",
        "backend-fail-read": "Không thể đọc tập tin $1.",
        "backend-fail-create": "Không thể ghi tập tin $1.",
        "backend-fail-maxsize": "Không thể ghi tập tin $1 vì nó lớn hơn $2 byte.",
-       "backend-fail-readonly": "Phía sau lưu trữ “$1” đang ở chế độ chỉ-đọc. Lý do đưa ra là: “$2”",
+       "backend-fail-readonly": "Phía sau lưu trữ “$1” đang ở chế độ chỉ-đọc. Lý do đưa ra là: <em>$2</em>",
        "backend-fail-synced": "Tập tin “$1” đang có trạng thái không nhất quán đối với các phía sau lưu trữ nội bộ",
        "backend-fail-connect": "Không thể kết nối đến phía sau lưu trữ “$1”.",
        "backend-fail-internal": "Lỗi không rõ xuất hiện trong phía sau lưu trữ “$1”.",
        "apihelp": "Trợ giúp API",
        "apihelp-no-such-module": "Không tìm thấy mô đun “$1”",
        "apisandbox": "Chỗ thử API",
+       "apisandbox-jsonly": "Cần phải có JavaScript để sử dụng API sandbox.",
        "apisandbox-api-disabled": "API đã bị vô hiệu hóa trên trang web này.",
-       "apisandbox-intro": "Trang này dùng để thử nghiệm với '''API dịch vụ Web của MediaWiki'''.\nHãy tra cứu [//www.mediawiki.org/wiki/API:Main_page tài liệu API] để biết chi tiết về cách sử dụng API. Ví dụ: [//www.mediawiki.org/wiki/API#A_simple_example lấy nội dung của Trang Chính]. Chọn một tác vụ để xem thêm ví dụ.\n\nLưu ý rằng, mặc dù đây là một chỗ thử, nhưng các tác vụ của bạn tại trang này có thể thực hiện các thay đổi trên wiki.",
+       "apisandbox-intro": "Trang này dùng để thử nghiệm với <strong>API dịch vụ Web của MediaWiki</strong>.\nHãy tra cứu [[mw:API:Main page|tài liệu API]] để biết chi tiết về cách sử dụng API. Ví dụ: [//www.mediawiki.org/wiki/API#A_simple_example lấy nội dung của Trang Chính]. Chọn một tác vụ để xem thêm ví dụ.\n\nLưu ý rằng, mặc dù đây là một chỗ thử, nhưng các tác vụ của bạn tại trang này có thể thực hiện các thay đổi trên wiki.",
+       "apisandbox-fullscreen": "Mở rộng bảng điều khiển",
+       "apisandbox-fullscreen-tooltip": "Mở rộng bảng sandbox để điền vào cửa sổ trình duyệt.",
+       "apisandbox-unfullscreen": "Hiển thị trang",
+       "apisandbox-unfullscreen-tooltip": "Thu nhỏ bảng điều khiển sandbox, do đó các linh kiện chuyển hướng MediaWiki sẽ được kích hoạt.",
        "apisandbox-submit": "Yêu cầu",
        "apisandbox-reset": "Tẩy trống",
+       "apisandbox-retry": "Thử lại",
+       "apisandbox-loading": "Đang tải thông tin cho mô-đun API \"$1\"...",
+       "apisandbox-load-error": "Một lỗi xuất hiện khi tải thông tin cho mô-đun API \"$1\": $2",
+       "apisandbox-no-parameters": "Mô-đun API này không có thông số.",
+       "apisandbox-helpurls": "Các đường dẫn trợ giúp",
        "apisandbox-examples": "Các ví dụ",
+       "apisandbox-dynamic-parameters": "Tham số bổ sung",
+       "apisandbox-dynamic-parameters-add-label": "Thêm tham số:",
+       "apisandbox-dynamic-parameters-add-placeholder": "Tên tham số",
+       "apisandbox-dynamic-error-exists": "Một tham số có tên \"$1\" đã tồn tại.",
+       "apisandbox-deprecated-parameters": "Tham số bị phản đối",
+       "apisandbox-fetch-token": "Tự động điền token này",
+       "apisandbox-submit-invalid-fields-title": "Một số field là không hợp lệ",
+       "apisandbox-submit-invalid-fields-message": "Xin vui lòng sửa các miền được đánh dấu và thử lại.",
        "apisandbox-results": "Kết quả",
+       "apisandbox-sending-request": "Đang gửi yêu cầu API...",
+       "apisandbox-loading-results": "Nhận kết quả API...",
+       "apisandbox-results-error": "Một lỗi xuất hiện khi tải các đáp ứng truy vấn API: $1.",
        "apisandbox-request-url-label": "URL của yêu cầu:",
-       "apisandbox-request-time": "Thời gian xử lý: $1",
+       "apisandbox-request-time": "Thời gian yêu cầu: $1 ms",
+       "apisandbox-results-fixtoken": "Sửa lại dấu hiệu và gửi lại",
+       "apisandbox-results-fixtoken-fail": "Thất bại khi lấy dấu hiệu “$1”.",
+       "apisandbox-alert-page": "Các miền trên Trang này là không hợp lệ.",
+       "apisandbox-alert-field": "Giá trị của miền này là không hợp lệ.",
        "booksources": "Nguồn sách",
        "booksources-search-legend": "Tìm kiếm nguồn sách",
        "booksources-search": "Tìm kiếm",
        "log-title-wildcard": "Tìm các tựa trang bắt đầu bằng các chữ này",
        "showhideselectedlogentries": "Thay đổi mức khả kiến của các mục nhật trình đã chọn",
        "log-edit-tags": "Sửa đổi thẻ đánh dấu của các mục nhật trình đã chọn.",
+       "checkbox-select": "Chọn: $1",
+       "checkbox-all": "Tất cả",
+       "checkbox-none": "Không",
+       "checkbox-invert": "Đảo ngược",
        "allpages": "Mọi trang",
        "nextpage": "Trang sau ($1)",
        "prevpage": "Trang trước ($1)",
        "listgrouprights-namespaceprotection-header": "Hạn chế không gian tên",
        "listgrouprights-namespaceprotection-namespace": "Không gian tên",
        "listgrouprights-namespaceprotection-restrictedto": "Quyền cho phép người dùng sửa đổi",
+       "listgrants": "Cấp phép",
+       "listgrants-summary": "Danh sách sau có các lượt cấp phép và thông tin về quyền truy cập quyền người dùng. Những người dùng có thể cho phép các ứng dụng sử dụng tài khoản của họ, các quyền được hạn chế tùy theo người dùng cấp phép cho ứng dụng. Một ứng dụng hoạt động nhân danh người dùng thực sự chỉ có thể sử dụng các quyền mà người dùng thật có.\nCó thể có [[{{MediaWiki:Listgrouprights-helppage}}|thêm thông tin]] về các quyền nói riêng.",
        "listgrants-grant": "Cấp phép",
        "listgrants-rights": "Quyền lợi",
        "trackingcategories": "Thể loại phần mềm",
        "delete-toobig": "Trang này có lịch sử sửa đổi lớn, đến hơn $1 lần sửa đổi.\nViệc xóa các trang như vậy bị hạn chế để ngăn ngừa phá hoại do vô ý cho {{SITENAME}}.",
        "delete-warning-toobig": "Trang này có lịch sử sửa đổi lớn, đến hơn $1 lần sửa đổi.\nViệ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}};\nhãy cẩn trọng khi thực hiện.",
        "deleteprotected": "Bạn không thể xóa trang này vì nó đã được khóa lại.",
-       "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.",
+       "deleting-backlinks-warning": "<strong>Cảnh báo:</strong> 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": "Lùi tất cả sửa đổi",
        "rollbacklink": "lùi tất cả",
        "rollbacklinkcount": "lùi tất cả $1 sửa đổi",
        "rollbackfailed": "Lùi sửa đổi không thành công",
        "cantrollback": "Không lùi sửa đổi được;\nngười viết trang cuối cùng cũng là tác giả duy nhất của trang này.",
        "alreadyrolled": "Không thể lùi tất cả sửa đổi cuối của [[User:$2|$2]] ([[User talk:$2|thảo luận]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) tại [[:$1]]; ai đó đã thực hiện sửa đổi hoặc thực hiện lùi tất cả rồi.\n\nSửa đổi cuối cùng tại trang do [[User:$3|$3]] ([[User talk:$3|thảo luận]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) thực hiện.",
-       "editcomment": "Tóm lược sửa đổi: “''$1''”.",
+       "editcomment": "Tóm lược sửa đổi: <em>$1</em>.",
        "revertpage": "Đã lùi lại sửa đổi của [[Special:Contributions/$2|$2]] ([[User talk:$2|Thảo luận]]) quay về phiên bản cuối của [[User:$1|$1]]",
        "revertpage-nouser": "Đã lùi lại sửa đổi của người dùng ẩn quay về phiên bản cuối của {{GENDER:$1}}[[User:$1|$1]]",
        "rollback-success": "Đã hủy sửa đổi của $1;\nquay về phiên bản cuối của $2.",
        "changecontentmodel-title-label": "Tên trang",
        "changecontentmodel-model-label": "Kiểu nội dung mới",
        "changecontentmodel-reason-label": "Lý do:",
+       "changecontentmodel-submit": "Thay đổi",
        "changecontentmodel-success-title": "Kiểu nội dung đã thay đổi",
        "changecontentmodel-success-text": "Kiểu nội dung của [[:$1]] đã được thay đổi.",
        "changecontentmodel-cannot-convert": "Không thể chuyển đổi nội dung [[:$1]] thành nội dung dưới dạng $2.",
        "changecontentmodel-nodirectediting": "Kiểu nội dung $1 không hỗ trợ sửa đổi trực tiếp",
        "log-name-contentmodel": "Nhật trình thay đổi kiểu nội dung",
        "log-description-contentmodel": "Sự kiện có liên quan đến kiểu nội dung của trang.",
+       "logentry-contentmodel-new": "$1 {{GENDER:$2}}đã tạo trang $3 với mô hình nội dung không mặc định “$5”",
        "logentry-contentmodel-change": "$1 {{GENDER:$2}}đã thay đổi kiểu nội dung của trang $3 từ “$4” thành “$5”",
        "logentry-contentmodel-change-revertlink": "lùi lại",
        "logentry-contentmodel-change-revert": "lùi lại",
        "namespace_association": "Không gian tên cùng đôi",
        "tooltip-namespace_association": "Cũng ẩn không gian tên thảo luận hoặc nội dung ứng với không gian được chọn",
        "blanknamespace": "(Chính)",
-       "contributions": "{{GENDER:$1}}Đóng góp của thành viên",
-       "contributions-title": "Đóng góp của thành viên $1",
+       "contributions": "{{GENDER:$1}}Đóng góp của người dùng",
+       "contributions-title": "Đóng góp của người dùng $1",
        "mycontris": "Đóng góp",
        "anoncontribs": "Đóng góp",
        "contribsub2": "Của {{GENDER:$3}}$1 ($2)",
        "sp-contributions-newbies-sub": "Các thành viên mới",
        "sp-contributions-newbies-title": "Đóng góp của các thành viên mới",
        "sp-contributions-blocklog": "nhật trình cấm",
-       "sp-contributions-suppresslog": "đóng góp của thành viên đã bị xóa hẳn",
+       "sp-contributions-suppresslog": "đóng góp của người dùng đã bị xóa hẳn",
        "sp-contributions-deleted": "đóng góp đã bị xóa của thành viên",
        "sp-contributions-uploads": "tập tin tải lên",
        "sp-contributions-logs": "nhật trình",
        "unblock": "Bỏ cấm người dùng",
        "blockip": "Cấm {{GENDER:$1}}người dùng",
        "blockip-legend": "Cấm người dùng",
-       "blockiptext": "Dùng mẫu dưới để cấm một địa chỉ IP hoặc thành viên không được viết trang.\nĐiều này chỉ nên làm để tránh phá hoại, và phải theo [[{{MediaWiki:Policy-url}}|quy định]].\nĐiền vào lý do cụ thể ở dưới (ví dụ, chỉ ra trang nào bị phá hoại).",
+       "blockiptext": "Dùng mẫu dưới để cấm một địa chỉ IP hoặc thành viên không được viết trang.\nĐiều này chỉ nên làm để tránh phá hoại, và phải theo [[{{MediaWiki:Policy-url}}|quy định]].\nĐiền vào lý do cụ thể ở dưới (ví dụ, chỉ ra trang nào bị phá hoại). \nBạn có thể cấm một dãy IP bằng cách dùng cú pháp [//en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]; giới hạn cho phép tối đa là /$1 đối với IPv4 và /$2 đối với IPv6.",
        "ipaddressorusername": "Địa chỉ IP hay tên thành viên:",
        "ipbexpiry": "Thời hạn:",
        "ipbreason": "Lý do:",
        "block-log-flags-hiddenname": "đã ẩn tên người dùng",
        "range_block_disabled": "Đã tắt khả năng cấm hàng loạt của quản lý.",
        "ipb_expiry_invalid": "Thời điểm hết hạn không hợp lệ.",
+       "ipb_expiry_old": "Thời hạn đã qua.",
        "ipb_expiry_temp": "Cấm tên người dùng ẩn nên là cấm vô hạn.",
        "ipb_hide_invalid": "Không thể ẩn tài khoản này; nó đã sửa đổi hơn {{PLURAL:$1|một lần|$1 lần}}.",
        "ipb_already_blocked": "“$1” đã bị cấm rồi",
        "lockedbyandtime": "($1 khóa vào $2 lúc $3)",
        "move-page": "Di chuyển $1",
        "move-page-legend": "Di chuyển trang",
-       "movepagetext": "Dùng mẫu dưới đây để đổi tên một trang, di chuyển tất cả lịch sử của nó sang tên mới.\nTên cũ sẽ trở thành trang đổi hướng sang tên mới.\nBạn có thể cập nhật tự động các trang đổi hướng đến tên cũ.\nNếu bạn chọn không cập nhật, hãy nhớ kiểm tra [[Special:DoubleRedirects|đổi hướng kép]] hoặc [[Special:BrokenRedirects|đổi hướng đến trang không tồn tại]].\nBạn phải chịu trách nhiệm đảm bảo các liên kết đó tiếp tục trỏ đến nơi chúng cần đến.\n\nChú ý rằng trang sẽ '''không''' bị di chuyển nếu đã có một trang tại tên mới, trừ khi trang tại tên mới là trang đổi hướng và không có lịch sử sửa đổi trước đây.\nĐiều này có nghĩa là bạn có thể đổi tên trang lại như cũ nếu bạn có nhầm lẫn, và bạn không thể ghi đè lên một trang đã có sẵn.\n\n'''CẢNH BÁO!'''\nViệc làm này có thể dẫn đến sự thay đổi mạnh mẽ và không lường trước đối với các trang dễ nhìn thấy;\nxin hãy chắc chắn rằng bạn đã nhận thức được những hệ lụy của nó trước khi thực hiện.",
-       "movepagetext-noredirectfixer": "Dùng mẫu dưới đây để đổi tên một trang, di chuyển tất cả lịch sử của nó sang tên mới.\nTên cũ sẽ trở thành trang đổi hướng sang tên mới.\nHãy nhớ kiểm tra [[Special:DoubleRedirects|đổi hướng kép]] hoặc [[Special:BrokenRedirects|đổi hướng đến trang không tồn tại]].\nBạn phải chịu trách nhiệm đảm bảo các liên kết đó tiếp tục trỏ đến nơi chúng cần đến.\n\nChú ý rằng trang sẽ '''không''' bị di chuyển nếu đã có một trang tại tên mới, trừ khi nó rỗng hoặc là trang đổi hướng và không có lịch sử sửa đổi trước đây.\nĐiều này có nghĩa là bạn có thể đổi tên trang lại như cũ nếu bạn có nhầm lẫn, và bạn không thể ghi đè lên một trang đã có sẵn.\n\n'''CẢNH BÁO!'''\nViệc làm này có thể dẫn đến sự thay đổi mạnh mẽ và không lường trước đối với các trang dễ nhìn thấy;\nxin hãy chắc chắn rằng bạn đã nhận thức được những hệ lụy của nó trước khi thực hiện.",
+       "movepagetext": "Dùng mẫu dưới đây để đổi tên một trang, di chuyển tất cả lịch sử của nó sang tên mới.\nTên cũ sẽ trở thành trang đổi hướng sang tên mới.\nBạn có thể cập nhật tự động các trang đổi hướng đến tên cũ.\nNếu bạn chọn không cập nhật, hãy nhớ kiểm tra [[Special:DoubleRedirects|đổi hướng kép]] hoặc [[Special:BrokenRedirects|đổi hướng đến trang không tồn tại]].\nBạn phải chịu trách nhiệm đảm bảo các liên kết đó tiếp tục trỏ đến nơi chúng cần đến.\n\nChú ý rằng trang sẽ <strong>không</strong> bị di chuyển nếu đã có một trang tại tên mới, trừ khi trang tại tên mới là trang đổi hướng và không có lịch sử sửa đổi trước đây.\nĐiều này có nghĩa là bạn có thể đổi tên trang lại như cũ nếu bạn có nhầm lẫn, và bạn không thể ghi đè lên một trang đã có sẵn.\n\n<strong>CẢNH BÁO!</strong>\nViệc làm này có thể dẫn đến sự thay đổi mạnh mẽ và không lường trước đối với các trang dễ nhìn thấy;\nxin hãy chắc chắn rằng bạn đã nhận thức được những hệ lụy của nó trước khi thực hiện.",
+       "movepagetext-noredirectfixer": "Dùng mẫu dưới đây để đổi tên một trang, di chuyển tất cả lịch sử của nó sang tên mới.\nTên cũ sẽ trở thành trang đổi hướng sang tên mới.\nHãy nhớ kiểm tra [[Special:DoubleRedirects|đổi hướng kép]] hoặc [[Special:BrokenRedirects|đổi hướng đến trang không tồn tại]].\nBạn phải chịu trách nhiệm đảm bảo các liên kết đó tiếp tục trỏ đến nơi chúng cần đến.\n\nChú ý rằng trang sẽ <strong>không</strong> bị di chuyển nếu đã có một trang tại tên mới, trừ khi nó là trang đổi hướng và không có lịch sử sửa đổi trước đây.\nĐiều này có nghĩa là bạn có thể đổi tên trang lại như cũ nếu bạn có nhầm lẫn, và bạn không thể ghi đè lên một trang đã có sẵn.\n\n<strong>CẢNH BÁO!</strong>\nViệc làm này có thể dẫn đến sự thay đổi mạnh mẽ và không lường trước đối với các trang dễ nhìn thấy;\nxin hãy chắc chắn rằng bạn đã nhận thức được những hệ lụy của nó trước khi thực hiện.",
        "movepagetalktext": "Nếu bạn đánh dấu hộp kiểm này, trang thảo luận đi kèm sẽ được tự động di chuyển theo trừ khi đã tồn tại một trang thảo luận không trống tại tên mới.\n\nTrong trường hợp đó, bạn phải di chuyển hoặc hợp nhất trang theo kiểu thủ công nếu muốn.",
        "moveuserpage-warning": "'''Cảnh báo:''' Bạn sắp di chuyển trang cá nhân của người dùng. Xin lưu ý rằng chỉ có trang này sẽ được di chuyển, còn người dùng sẽ ''không'' đổi tên.",
        "movecategorypage-warning": "<strong>Cảnh báo:</strong> Bạn sắp sửa di chuyển một trang thể loại. Lưu ý rằng chỉ trang này sẽ được di chuyển, còn trang nào được xếp vào thể loại cũ sẽ <em>không</em> được xếp vào thể loại mới.",
        "movenosubpage": "Trang này không có trang con.",
        "movereason": "Lý do:",
        "revertmove": "lùi lại",
-       "delete_and_move_text": "==Cần xóa==\n\nTrang với tên “[[:$1]]” đã tồn tại. Bạn có muốn xóa nó để dọn chỗ di chuyển tới tên này không?",
+       "delete_and_move_text": "Trang với tên “[[:$1]]” đã tồn tại. \nBạn có muốn xóa nó để dọn chỗ di chuyển tới tên này không?",
        "delete_and_move_confirm": "Xóa trang để đổi tên",
        "delete_and_move_reason": "Xóa để có chỗ đổi tên “[[$1]]”",
        "selfmove": "Tên mới giống tên cũ; không đổi tên một trang thành chính nó.",
        "move-leave-redirect": "Để lại trang đổi hướng",
        "protectedpagemovewarning": "'''Cảnh báo:''' Trang này đã bị khóa nên chỉ có các thành viên có quyền quản lý mới có thể di chuyển được.\nThông tin mới nhất trong nhật trình được ghi dưới đây để tiện theo dõi:",
        "semiprotectedpagemovewarning": "'''Lưu ý:''' Trang này đã bị khóa nên chỉ có các thành viên có tài khoản mới có thể di chuyển được.\nThông tin mới nhất trong nhật trình được ghi dưới đây để tiện theo dõi:",
-       "move-over-sharedrepo": "== Tập tin đã tồn tại ==\n[[:$1]] đã tồn tại trong kho dùng chung. Nếu đổi tên tập tin thành tên này thì sẽ ghi đè lên tập tin dùng chung.",
+       "move-over-sharedrepo": "[[:$1]] đã tồn tại trong kho dùng chung. Nếu đổi tên tập tin thành tên này thì sẽ ghi đè lên tập tin dùng chung.",
        "file-exists-sharedrepo": "Bạn đã chọn tên tập tin trùng với tập tin nằm trong kho dùng chung.\nXin hãy chọn tên khác.",
        "export": "Xuất các trang",
        "exporttext": "Bạn có thể xuất nội dung và lịch sử sửa đổi của một trang hoặc tập hợp trang vào tập tin XML.\nNhững tập tin này cũng có thể được nhập vào wiki khác có sử dụng MediaWiki thông qua [[Special:Import|nhập trang]].\n\nĐể xuất các trang, nhập vào tên trang trong hộp soạn thảo ở dưới, mỗi dòng một tên, và lựa chọn bạn muốn phiên bản hiện tại cũng như tất cả phiên bản cũ, với các dòng lịch sử trang, hay chỉ là phiên bản hiện tại với thông tin về lần sửa đổi cuối.\n\nTrong trường hợp sau bạn cũng có thể dùng một liên kết, ví dụ [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] để biểu thị trang “[[{{MediaWiki:Mainpage}}]]”.",
        "export-download": "Lưu xuống tập tin",
        "export-templates": "Gồm cả bản mẫu",
        "export-pagelinks": "Gồm cả các trang liên kết sâu đến:",
+       "export-manual": "Thêm các trang theo cách thủ công:",
        "allmessages": "Thông điệp hệ thống",
        "allmessagesname": "Tên thông điệp",
        "allmessagesdefault": "Nội dung mặc định",
        "import-nonewrevisions": "Không nhập phiên bản nào (tất cả các phiên bản đều đã có sẵn hoặc bị bỏ qua do lỗi).",
        "xml-error-string": "$1 tại dòng $2, cột $3 (byte $4): $5",
        "import-upload": "Tải lên dữ liệu XML",
-       "import-token-mismatch": "Mất dữ liệu phiên làm việc. Xin hãy thử lại lần nữa.",
+       "import-token-mismatch": "Mất dữ liệu phiên làm việc.\n\nCó thể bạn đã được đăng xuất. <strong>Xin hãy xác nhận rằng bạn vẫn được đăng nhập và thử lại.</strong>\nNếu vẫn không được, hãy thử [[Special:UserLogout|đăng xuất]] rồi đăng nhập lại, và kiểm tra rằng trình duyệt của bạn cho phép các cookie của trang Web này.",
        "import-invalid-interwiki": "Không thể nhập trang từ wiki được chỉ định.",
        "import-error-edit": "Trang “$1” không được nhập tại vì bạn không được phép sửa đổi nó.",
        "import-error-create": "Trang “$1” không được nhập tại vì bạn không được phép tạo ra nó.",
        "tooltip-feed-rss": "Nguồn cấp RSS của trang này",
        "tooltip-feed-atom": "Nguồn cấp Atom của trang này",
        "tooltip-t-contributions": "Danh sách đóng góp của {{GENDER:$1|người này}}",
-       "tooltip-t-emailuser": "Gửi thư cho người này",
+       "tooltip-t-emailuser": "Gửi thư cho {{GENDER:$1|người dùng này}}",
        "tooltip-t-info": "Thêm chi tiết về trang này",
        "tooltip-t-upload": "Tải hình ảnh hoặc tập tin lên",
        "tooltip-t-specialpages": "Danh sách các trang đặc biệt",
        "lastmodifiedatby": "Trang này được $3 cập nhật lần cuối lúc $2 $1.",
        "othercontribs": "Dựa trên công trình của $1.",
        "others": "những người khác",
-       "siteusers": "{{PLURAL:$2|Thành viên|Các thành viên}} $1 của {{SITENAME}}",
+       "siteusers": "{{SITENAME}} {{PLURAL:$2|{{GENDER:$1|người dùng}}|users}} $1",
        "anonusers": "{{PLURAL:$2|người dùng|những người dùng}} vô danh $1 tại {{SITENAME}}",
        "creditspage": "Trang ghi nhận đóng góp",
        "nocredits": "Không có thông tin ghi nhận đóng góp cho trang này.",
        "pageinfo-category-files": "Số tập tin",
        "markaspatrolleddiff": "Đánh dấu tuần tra",
        "markaspatrolledtext": "Đánh dấu tuần tra trang này",
+       "markaspatrolledtext-file": "Đánh dấu phiên bản fiel này là đã kiểm tra",
        "markedaspatrolled": "Đã đánh dấu tuần tra",
        "markedaspatrolledtext": "Phiên bản được chọn của [[:$1]] đã được đánh dấu tuần tra.",
        "rcpatroldisabled": "“Thay đổi gần đây” của các trang tuần tra không bật",
        "newimages-legend": "Bộ lọc",
        "newimages-label": "Tên tập tin (hoặc một phần tên):",
        "newimages-showbots": "Xem các tập tin do bot tải lên",
+       "newimages-hidepatrolled": "Ẩn tập tin tải lên đã tuần tra",
        "noimages": "Chưa có hình.",
        "ilsubmit": "Tìm kiếm",
        "bydate": "theo ngày",
        "exif-compression-34712": "JPEG 2000",
        "exif-copyrighted-true": "Dưới bản quyền",
        "exif-copyrighted-false": "Cờ bản quyền không được đặt",
+       "exif-photometricinterpretation-0": "Trắng đen (trắng là 0)",
        "exif-photometricinterpretation-1": "Trắng đen (đen là 0)",
        "exif-photometricinterpretation-2": "RGB",
+       "exif-photometricinterpretation-3": "Bảng màu",
+       "exif-photometricinterpretation-4": "Mặt nạ trong suốt",
+       "exif-photometricinterpretation-5": "Riêng rẽ (có lẽ CMYK)",
+       "exif-photometricinterpretation-9": "CIE L*a*b* (mã hóa Hiệp hội Màu sắc Quốc tế)",
+       "exif-photometricinterpretation-10": "CIE L*a*b* (mã hóa Liên minh Viễn thông Quốc tế)",
+       "exif-photometricinterpretation-32803": "Dãy bộ lọc màu sắc",
+       "exif-photometricinterpretation-34892": "Thô tuyến",
        "exif-unknowndate": "Không biết ngày",
        "exif-orientation-1": "Thường",
        "exif-orientation-2": "Lộn ngược theo phương ngang",
        "exif-orientation-8": "Quay 90° bên phải",
        "exif-planarconfiguration-1": "định dạng thấp",
        "exif-planarconfiguration-2": "định dạng phẳng",
+       "exif-xyresolution-i": "$1 điểm/inch",
+       "exif-xyresolution-c": "$1 điểm/cm",
        "exif-colorspace-65535": "Chưa hiệu chỉnh",
        "exif-componentsconfiguration-0": "không tồn tại",
        "exif-exposureprogram-0": "Không chỉ định",
        "scarytranscludefailed-httpstatus": "[Truy xuất bản mẫu $1 bị thất bại: HTTP $2]",
        "scarytranscludetoolong": "[Địa chỉ URL quá dài]",
        "deletedwhileediting": "'''Cảnh báo''': Trang này đã bị xóa sau khi bắt đầu sửa đổi!",
-       "confirmrecreate": "Thành viên [[User:$1|$1]] ([[User talk:$1|thảo luận]]) đã xóa trang này sau khi bạn bắt đầu sửa đổi trang với lý do:\n: ''$2''\nXin hãy xác nhận bạn thực sự muốn tạo lại trang này.",
+       "confirmrecreate": "Thành viên [[User:$1|$1]] ([[User talk:$1|thảo luận]]) đã xóa trang này sau khi bạn bắt đầu sửa đổi trang với lý do:\n: <em>$2</em>\nXin hãy xác nhận bạn thực sự muốn tạo lại trang này.",
        "confirmrecreate-noreason": "Người dùng [[User:$1|$1]] ([[User talk:$1|talk]]) xóa trang này sau khi bạn bắt đầu sửa đổi nó. Bạn có chắc chắn muốn tạo lại trang này không?",
        "recreate": "Tạo ra lại",
+       "unit-pixel": "điểm ảnh",
        "confirm_purge_button": "Làm tươi",
        "confirm-purge-top": "Làm sạch vùng nhớ đệm của trang này?",
        "confirm-purge-bottom": "Làm mới một trang sẽ giúp xóa bộ đệm và buộc hiển thị phiên bản gần nhất.",
        "hebrew-calendar-m11": "Av",
        "hebrew-calendar-m12": "Elul",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|thảo luận]])",
+       "timezone-local": "Địa phương",
        "duplicate-defaultsort": "Cảnh báo: Từ khóa xếp mặc định “$2” ghi đè từ khóa trước, “$1”.",
        "duplicate-displaytitle": "<strong>Cảnh báo:</strong> Tên hiển thị “$2” ghi đè tên hiển thị “$1” bên trên.",
        "invalid-indicator-name": "<strong>Lỗi:</strong> Không thể để trống thuộc tính <code>name</code> của cái chỉ trạng thái trang.",
        "version-libraries-license": "Giấy phép",
        "version-libraries-description": "Miêu tả",
        "version-libraries-authors": "Tác giả",
-       "redirect": "Đổi hướng đến tập tin, người dùng, trang, hoặc số phiên bản",
+       "redirect": "Đổi hướng đến tập tin, người dùng, trang, hoặc ID đăng nhập",
        "redirect-legend": "Đổi hướng đến tập tin hoặc trang",
-       "redirect-summary": "Trang đặc biệt này đổi hướng đến một tập tin (theo tên tập tin được cho vào), trang (theo số phiên bản hoặc số trang được cho vào), hoặc trang cá nhân (theo số thành viên). Cách sử dụng: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], hoặc [[{{#Special:Redirect}}/user/101]].",
+       "redirect-summary": "Trang đặc biệt này đổi hướng đến một tập tin (theo tên tập tin được cho vào), trang (theo số phiên bản hoặc số trang được cho vào), trang cá nhân (theo số thành viên), hoặc mục nhật trình (theo số mục nhật trình). Cách sử dụng: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], hoặc [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Đi",
        "redirect-lookup": "Tra cứu:",
        "redirect-value": "Giá trị:",
        "redirect-page": "Số trang",
        "redirect-revision": "Số phiên bản trang",
        "redirect-file": "Tên tập tin",
+       "redirect-logid": "Số mục nhật trình",
        "redirect-not-exists": "Không tìm thấy giá trị",
        "fileduplicatesearch": "Tìm kiếm các tập tin trùng lắp",
        "fileduplicatesearch-summary": "Tìm kiếm các bản sao y hệt với tập tin khác, theo giá trị băm của nó.",
        "tags-delete-not-allowed": "Thẻ được định nghĩa bởi một mở rộng không thể bị xóa trừ khi mở rộng đặc biệt cho phép điều đó xảy ra.",
        "tags-delete-not-found": "Thẻ “$1” không tồn tại.",
        "tags-delete-too-many-uses": "Thẻ “$1” được áp dụng cho hơn $2 phiên bản, có nghĩa là nó không thể bị xóa.",
-       "tags-delete-warnings-after-delete": "Thẻ “$1” bị xóa thành công, nhưng gặp {{PLURAL:$2|cảnh báo|các cảnh báo}} sau:",
+       "tags-delete-warnings-after-delete": "Thẻ “$1” đã được xóa thành công, nhưng gặp phải {{PLURAL:$2|cảnh báo|các cảnh báo}} sau:",
        "tags-activate-title": "Kích hoạt thẻ",
        "tags-activate-question": "Bạn sắp sửa kích hoạt thẻ “$1”.",
        "tags-activate-reason": "Lý do:",
        "tags-edit-revision-legend": "Thêm và loại bỏ các thẻ từ {{PLURAL:$1|phiên bản này|tất cả $1 phiên bản}}",
        "tags-edit-logentry-legend": "Thêm và loại bỏ thẻ đánh dấu từ {{PLURAL:$1|mục nhật trình này|tất cả $1 mục nhật trình}}",
        "tags-edit-existing-tags": "Thẻ đã có:",
-       "tags-edit-existing-tags-none": "''Không''",
+       "tags-edit-existing-tags-none": "<em>Không</em>",
        "tags-edit-new-tags": "Thẻ mới:",
        "tags-edit-add": "Thêm các thẻ:",
        "tags-edit-remove": "Bỏ các thẻ này?",
        "expand_templates_generate_xml": "Xem cây phân tích XML",
        "expand_templates_generate_rawhtml": "Hiển thị HTML thô",
        "expand_templates_preview": "Xem trước",
-       "expand_templates_preview_fail_html": "<em>{{SITENAME}} cho phép mã nguồn HTML thô và dữ liệu phiên bị mất, nên bản xem trước bị ẩn để tránh tấn công JavaScript.</em>\n\n<strong>Nếu bạn thực sự muốn xem trước mã nguồn này, xin hãy thử lại nữa.</strong>\nNếu vẫn không được, hãy thử [[Special:UserLogout|đăng xuất]] rồi đăng nhập lại.",
+       "expand_templates_preview_fail_html": "<em>{{SITENAME}} cho phép mã nguồn HTML thô và dữ liệu phiên bị mất, nên bản xem trước bị ẩn để tránh tấn công JavaScript.</em>\n\n<strong>Nếu bạn thực sự muốn xem trước mã nguồn này, xin hãy thử lại nữa.</strong>\nNếu vẫn không được, hãy thử [[Special:UserLogout|đăng xuất]] rồi đăng nhập lại, và kiểm tra rằng trình duyệt của bạn cho phép các cookie của trang Web này.",
        "expand_templates_preview_fail_html_anon": "<em>{{SITENAME}} cho phép mã nguồn HTML thô và dữ liệu phiên bị mất, nên bản xem trước bị ẩn để tránh tấn công JavaScript.</em>\n\n<strong>Nếu bạn thực sự muốn xem trước mã nguồn này, xin hãy thử lại nữa.</strong>\nNếu vẫn không được, hãy [[Special:UserLogin|đăng nhập]] và thử lại lần nữa.",
-       "pagelanguage": "Chọn ngôn ngữ trang",
+       "expand_templates_input_missing": "Bạn phải cung cấp văn bản nhập.",
+       "pagelanguage": "Thay đổi ngôn ngữ của trang",
        "pagelang-name": "Trang",
        "pagelang-language": "Ngôn ngữ",
        "pagelang-use-default": "Sử dụng ngôn ngữ mặc định",
        "default-skin-not-found": "Đã xảy ra lỗi! Giao diện mặc định của wiki này được định nghĩa trong <code dir=\"ltr\">$wgDefaultSkin</code> là <code>$1</code> nhưng không tồn tại.\n\nViệc cài đặt của bạn dường như bao gồm {{PLURAL:$4|giao diện|các giao diện}} sau. Xem [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration Hướng dẫn: Cấu hình giao diện] để biết thông tin về cách kích hoạt {{PLURAL:$4|nó|chúng và chọn giao diện mặc định}}.\n\n$2\n\n; Nếu bạn vừa mới cài đặt MediaWiki:\n: Có lẽ bạn đã cài đặt nó từ git, hoặc trực tiếp từ mã nguồn bằng cách sử dụng một số phương thức khác. Điều này đã nằm trong tính toán của chúng tôi. Hãy thử cài đặt một số giao diện từ [https://www.mediawiki.org/wiki/Category:All_skins thư mục giao diện của mediawiki.org] bằng cách:\n:* Tải về [https://www.mediawiki.org/wiki/Special:MyLanguage/Download trình cài đặt dưới dạng gói tar], trong đó có kèm theo một số giao diện và phần mở rộng. Bạn có thể chép nó và dán vào thư mục <code>skins/</code>.\n:* Tải về các gói giao diện nén riêng từ [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_từ_Git#Using_Git_to_download_MediaWiki_skins Sử dụng Git để tải về giao diện].\n: Cách này sẽ không có ảnh hưởng đến kho git của bạn dù bạn là một nhà phát triển MediaWiki.\n\n; Nếu bạn vừa mới nâng cấp MediaWiki:\n: Phiên bản MediaWiki 1.24 trở lên không còn tự động kích hoạt giao diện đã cài đặt (xem [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Hướng dẫn: Tự động dò giao diện]). Bạn có thể dán {{PLURAL:$5|dòng|các dòng}} sau vào <code>LocalSettings.php</code> để kích hoạt {{PLURAL:$5|giao diện|tất cả các giao diện}} đã được cài dặt:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Nếu bạn vừa mới chỉnh sửa <code>LocalSettings.php</code>:\n: Kiểm tra lại tên các giao diện xem có lỗi đánh máy nào không.",
        "default-skin-not-found-no-skins": "Đã xảy ra lỗi! Giao diện mặc định của wiki này được định nghĩa trong <code dir=\"ltr\">$wgDefaultSkin</code> là <code>$1</code> nhưng không tồn tại.\n\nKhông có giao diện nào của bạn được kích hoạt.\n\n; Nếu bạn vừa mới cài đặt MediaWiki:\n: Bạn có thể cài đặt nó từ git, hoặc trực tiếp từ mã nguồn bằng cách sử dụng một số phương thức khác. Điều này nằm trong dự kiến. Hãy thử cài đặt một số giao diện từ [https://www.mediawiki.org/wiki/Category:All_skins thư mục giao diện của mediawiki.org], bằng cách:\n:* Tải về [https://www.mediawiki.org/wiki/Special:MyLanguage/Download trình cài đặt dưới dạng gói tar], trong đó có kèm theo một số giao diện và phần mở rộng. Bạn có thể chép nó và dán vào thư mục <code>skins/</code>.\n:* Tải về các gói giao diện nén riêng từ [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git/vi#Using_Git_to_download_MediaWiki_skins Tải về giao diện qua Git].\n: Cách này sẽ không có ảnh hưởng đến kho git của bạn dù bạn là một nhà phát triển MediaWiki. Xin xem [https://www.mediawiki.org/wiki/Manual:Skin_configuration Hướng dẫn: Cấu hình giao diện] để biết thông tin về cách kích hoạt hoặc chọn một trong số chúng làm giao diện mặc định.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (kích hoạt)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''vô hiệu hóa''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>vô hiệu hóa</strong>)",
        "mediastatistics": "Thống kê phương tiện",
        "mediastatistics-summary": "Thống kê về các kiểu tập tin đã tải lên. Bảng này chỉ liệt kê phiên bản mới nhất của các tập tin. Các phiên bản cũ hoặc các phiên bản bị xóa được bỏ qua.",
        "mediastatistics-nbytes": "$1 byte ($2; $3%)",
-       "mediastatistics-bytespertype": "Tổng kích thước tập tin của phần này: $1 byte.",
-       "mediastatistics-allbytes": "Tổng kích thước của tất cả các tập tin: $1 byte.",
+       "mediastatistics-bytespertype": "Tổng kích thước tập tin của phần này: $1 byte ($2; $3%).",
+       "mediastatistics-allbytes": "Tổng kích thước của tất cả các tập tin: $1 byte ($2).",
        "mediastatistics-table-mimetype": "Kiểu MIME",
        "mediastatistics-table-extensions": "Phần mở rộng có thể",
        "mediastatistics-table-count": "Số tập tin",
        "mw-widgets-titleinput-description-new-page": "trang này chưa tồn tại",
        "mw-widgets-titleinput-description-redirect": "đổi hướng đến $1",
        "api-error-blacklisted": "Xin vui lòng chọn một tên khác miêu tả đầy đủ.",
+       "sessionmanager-tie": "Không thể kết hợp nhiều yêu cầu xác thực loại: $1.",
+       "sessionprovider-generic": "phiên $1",
+       "sessionprovider-mediawiki-session-cookiesessionprovider": "phiên dựa trên cookie",
+       "sessionprovider-nocookies": "Cookie có thể bị vô hiệu hóa. Đảm bảo bạn đã bật cookie và bắt đầu một lần nữa.",
        "randomrootpage": "Trang gốc ngẫu nhiên"
 }
index 3dda0f6..b98b3a5 100644 (file)
        "myprivateinfoprotected": "No dalol redakön nünis privatik ola.",
        "mypreferencesprotected": "No dalol votükön buükamis olik.",
        "ns-specialprotected": "Pads patik no kanons paredakön.",
-       "titleprotected": "Jaf tiäda at penemögükon fa geban: [[User:$1|$1]].\nKod binon: ''$2''.",
+       "titleprotected": "Jaf tiäda at penemögükon fa geban: [[User:$1|$1]].\nKod binon: <em>$2</em>.",
        "exception-nologin": "No enunädol oli",
        "virus-badscanner": "Parametem badik: program tavirudik nesevädik: ''$1''",
        "virus-scanfailed": "skrutam no eplöpon (kot $1)",
        "rollbackfailed": "Sädunam no eplöpon",
        "cantrollback": "Redakam no kanon pasädunön; keblünan lätik binon lautan teik pada at.",
        "alreadyrolled": "No eplöpos ad sädunön redakami lätik pada: [[:$1]] fa geban: [[User:$2|$2]] ([[User talk:$2|Bespikapad]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); ek ya eredakon oni ud esädunon redakami ona.\n\nRedakam lätik päjenükon fa geban: [[User:$3|$3]] ([[User talk:$3|Bespikapad]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Redakamaplän äbinon: „''$1''“.",
+       "editcomment": "Redakamaplän äbinon: <em>$1</em>.",
        "revertpage": "Redakams ela [[Special:Contributions/$2|$2]] ([[User talk:$2|Bespik]]) pegeükons ad fomam ma redakam lätik gebana: [[User:$1|$1]]",
        "rollback-success": "Redakams gebana: $1 pesädunons; pad pevotükon ad fomam lätik fa geban: $2.",
        "sessionfailure": "Jiniko ädabinon säkäd seimik pö nunädam olik.\nDun at no pelasumon ad vitön mögi, das votükams olik pogivulons gebane votik.\nVälolös knopi: „Geikön“ e dönulodolös padi, de kel ekömol, e tän steifülolös nogna.",
index ba13bdb..afd8d8d 100644 (file)
@@ -8,7 +8,8 @@
                        "Sulev Iva (Võrok)",
                        "Trixt",
                        "Võrok",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Lingiq ala tõmmadaq",
        "myprivateinfoprotected": "Sul olõ-õi lubat ummi eräandmit muutaq.",
        "mypreferencesprotected": "Sul olõ-õi lubat ummi säädmiisi muutaq.",
        "ns-specialprotected": "Tallituslehekülgi ei saaq toimõndaq.",
-       "titleprotected": "Pruukja [[User:$1|$1]] om sääntse nimega lehe luumisõ ärq kiildnüq põhjusõga: ''$2''.",
+       "titleprotected": "Pruukja [[User:$1|$1]] om sääntse nimega lehe luumisõ ärq kiildnüq põhjusõga: <em>$2</em>.",
        "exception-nologin": "Olõ-i nimega sisse mint",
        "exception-nologin-text": "Seo lehe vai tegemise mano päsemises piät nomega sisse minemä.",
        "exception-nologin-text-manual": "Seolõ lehele vai tegemisele mano päsemises piät $1.",
        "createaccountreason": "Põhjus:",
        "createacct-reason": "Põhjus",
        "createacct-reason-ph": "Mille tahat luvvaq tõõsõ pruukjakonto?",
-       "createacct-captcha": "Kaitsõkontroll",
-       "createacct-imgcaptcha-ph": "Kirodaq seo tekst, midä tan näet",
        "createacct-submit": "Luuq konto",
        "createacct-another-submit": "Luuq tõõnõ konto",
        "createacct-benefit-heading": "{{SITENAME}} um luud sääntsilsamol inemiisil, nigu saq.",
        "right-blockemail": "Keeldäq pruukjil e-kirjo saataq",
        "right-hideuser": "Kinniq pitäq pruukjanimi ja käkkiq tuu ärq",
        "right-ipblock-exempt": "Minnäq müüdä automaatsist kinniqpidämiisist ni aadrõsijao ja IP-kinniqpidämiisist",
-       "right-proxyunbannable": "Minnäq müüdä automaatsist vaihõserveri kinniqpidämiisist",
        "newuserlogpage": "Vahtsõq pruukjaq",
        "rightslog": "Pruukmisõiguisi muutmisõ nimekiri",
        "rightslogtext": "Taa om pruukmisõiguisi muutmiisi nimekiri.",
        "recentchanges-label-bot": "Seo muutmisõ tekk' robot",
        "recentchanges-label-unpatrolled": "Seod muutmist olõ-õi viil üle kaet",
        "recentchanges-label-plusminus": "Lehe suurusõ muutus baidõn",
-       "recentchanges-legend-heading": "'''Seletüs:'''",
+       "recentchanges-legend-heading": "<strong>Seletüs:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (kaeq ka [[Special:NewPages|vahtsidõ lehti nimekirjä]])",
        "rcnotefrom": "Tan ommaq muutmisõq kuupääväst '''$2''' pääle (näüdätäs kooniq '''$1''' muutmist).",
        "rclistfrom": "Näütäq muutmiisi kuupääväst $3 $2 pääle",
        "destfilename": "Teedüstü nimi vikin:",
        "watchthisupload": "Kaeq taa lehe perrä",
        "filewasdeleted": "Sääntse nimega teedüstü om jo üles laadit ja sis ärq kistutõt. Kaeq üle $1 inne ku nakkat jälq üles laatma.",
-       "upload-success-subj": "Üleslaatminõ läts' kõrda",
        "upload-proto-error": "Viganõ protokoll",
        "upload-proto-error-text": "Üles saa laatiq õnnõ aadrõssidõ päält, mink alostusõn om <code>http://</code> vai <code>ftp://</code>.",
        "upload-file-error": "Sisemäne viga",
        "nlinks": "$1 {{PLURAL:$1|link|linki}}",
        "nmembers": "$1 {{PLURAL:$1|liigõq|liigõt}}",
        "nrevisions": "$1 {{PLURAL:$1|muutminõ|muutmist}}",
-       "nviews": "Käümiisi: $1",
        "specialpage-empty": "Taa leht om tühi.",
        "lonelypages": "Artikliq, kohe olõ-i linke",
        "lonelypagestext": "Nailõ lehile olõ-i muialt vikist linke.",
        "mailnologin": "Olõ-i saatja aadrõssit",
        "mailnologintext": "Sa piät olõma [[Special:UserLogin|nimega sisse lännüq]]\nja sul piät umin [[Special:Preferences|säädmiisin]] olõma e-postiaadrõs, et sa saasiq tõisilõ pruukjilõ e-kirjo saataq.",
        "emailuser": "Kirodaq taalõ pruukjalõ e-kiri",
-       "emailpage": "Kirodaq pruukjalõ e-kiri",
        "emailpagetext": "Ku taa pruukja om ummi säädmiisihe pandnuq uma tüütävä e-postiaadrõsi, saa taa vormi abiga tälle saataq üte kirä. Kirän jääs nätäq saatja aadrõs, et kirä saaja saanuq kiräle vastadaq.",
        "defemailsubject": "{{SITENAME}} e-post",
        "noemailtitle": "Olõ-i e-postiaadrõssit",
        "rollbackfailed": "Muutmiisi tagasivõtminõ lää-s kõrda",
        "cantrollback": "Saa-i muutmiisi tagasi pöördäq; viimäne muutja om lehe ainugõnõ toimõndaja.",
        "alreadyrolled": "Pruukja [[User:$2|$2]] ([[User talk:$2|arotus]]) tettüid lehe [[:$1]] muutmiisi saa-i tagasi võttaq, selle et pruukja [[User:$3|$3]] ([[User talk:$3|arotus]]) om tennüq vahtsõmbit muutmiisi.",
-       "editcomment": "Toimõndamiskokkovõtõq oll': \"''$1''\".",
+       "editcomment": "Toimõndamiskokkovõtõq oll': <em>$1</em>.",
        "revertpage": "Pruukja [[Special:Contributions/$2|$2]] ([[User_talk:$2|arotus]]) toimõndusõq pöörediq tagasi ja leht panti tagasi pruukja [[User:$1|$1]] tettü kujo pääle.",
        "sessionfailure": "Paistus ollõv määnegi hädä su toimõndamiskõrraga, tuuperäst om viimäne muutminõ egäs johtumisõs jätet tegemäldä. Vaodaq võrgokaeja \"tagasi\"-nuppi, laadiq üle lehekülg, kost sa tullit ja prooviq vahtsõst.",
        "protectlogpage": "Lehti kaitsmiisi nimekiri",
        "move-page-legend": "Nõstaq artikli tõistõ paika",
        "movepagetext": "Taad vormi pruukin saat lehe ümbre nimetäq. Lehe aolugu pandas kah vahtsõ päälkirä ala.\nVana päälkiräga lehest saa vahtsõ lehe pääle ümbresaatmisõ leht.\nVõit säädäq lehe pääle näütäjäq lingiq automaatsõhe näütämä vahtsõ nime pääle.\nKu sa taha-i taad tetäq automaatsõhe, unõhtagu-i üle kaiaq [[Special:DoubleRedirects|katõkõrdsit]] vai [[Special:BrokenRedirects|vigatsit]] ümbresaatmiisi.\nSa piät kaema, et kõik näütämiseq jäänüq tüütämä nigu inne ümbrenimetämist.\n\nLehte '''nimetedä-i ümbre''', ku vahtsõ nimega leht om jo olõman.\nErängus om tuu, ku vana leht om tühi vai om esiq ümbresaatmisleht ja täl olõ-i toimõndamisaoluku.\nTuu tähendäs, et sa saa-i kogõmalda üle kirotaq jo olõmanolõvat lehte, a saat halvastõ lännü ümbrenimetämise tagasi pöördäq.\n\n'''KAEQ ETTE!'''\nVõi ollaq, et sa nakkat tegemä suurt ja uutmalda muutmist väega loetavahe artiklihe;\ninne, ku midä muudat, märgiq perrä, miä tuust tullaq või.",
        "movepagetalktext": "Üten artiklilehekülega pandas tõistõ paika ka arotuskülg, '''vällä arvat sis, ku:'''\n*panõt lehe ütest nimeruumist tõistõ,\n*vahtsõ nime all om jo olõman arotuskülg, kohe om jo midägi kirotõt, vai ku\n*jätät alomadsõ kastikõsõ märgistämäldäq.\n\nKui om nii, sis panõq vana arotuskülg eräle vai panõq taa kokko vahtsõ arotuskülega.",
-       "movearticle": "Panõq artiklilehekülg tõistõ paika",
        "movenologintext": "Et lehekülge tõistõ paika pandaq, piät hindä pruukjas kirjä pandma ja [[Special:UserLogin|nimega sisse minemä]]",
        "movenotallowed": "Sul olõ-i lupa {{SITENAME}} lehti tõistõ paika nõstaq.",
        "newtitle": "Vahtsõ päälkirä ala",
        "movelogpagetext": "Taa om lehti tõistõ paika pandmiisi nimekiri.",
        "movereason": "Põhjus:",
        "revertmove": "võtaq tagasi",
-       "delete_and_move": "Kistudaq tsihtlehekülg ärq ja panõq timä asõmalõ taa leht",
        "delete_and_move_text": "Tsihtlehekülg  \"[[:$1]]\" om jo olõman, kas tahat tuu ärq kistutaq, et taa leht timä asõmalõ pandaq?",
        "delete_and_move_confirm": "Jah, kistudaq tuu leht ärq",
        "delete_and_move_reason": "Ärq kistutõt, et tõõnõ timä asõmalõ pandaq",
index de2dad0..898a3df 100644 (file)
@@ -14,6 +14,7 @@
        "tog-hideminor": "Èn nén mostrer les dierins candjmints mineurs",
        "tog-hidepatrolled": "Èn nén mostrer les candjmints ddja patrouyîs",
        "tog-newpageshidepatrolled": "Èn nén mostrer el djivêye des novelès pådjes les cenes dedja patrouyeyes",
+       "tog-hidecategorization": "Èn nén mostrer les categorijhaedjes des pådjes",
        "tog-extendwatchlist": "Ragrandi l' djivêye po mostrer tos les candjmints, nén seulmint les dierins",
        "tog-usenewrc": "Relére par pådje dins les dierins candjmints et l' djivêye des shuvous (i fåt JavaScript)",
        "tog-numberheadings": "Limerotaedje otomatike des tites",
@@ -34,7 +35,7 @@
        "tog-shownumberswatching": "Mostrer l' nombe d' uzeus ki shuvèt l' pådje",
        "tog-oldsig": "Siné pol moumint:",
        "tog-fancysig": "Sinateure avou do tecse wiki (sins loyén otomatike)",
-       "tog-uselivepreview": "Eployî l' prévoeyaedje abeye (JavaScript) (Esperimintå)",
+       "tog-uselivepreview": "Eployî l' préveyaedje abeye",
        "tog-forceeditsummary": "M' advierti cwand dji lai vude on rascourti",
        "tog-watchlisthideown": "Èn nén mostrer les candjmints da minne",
        "tog-watchlisthidebots": "Èn nén mostrer les candjmints des robots",
@@ -45,6 +46,7 @@
        "tog-ccmeonemails": "M' evoyî ene copeye des emiles ki dj' evoye ås ôtes",
        "tog-diffonly": "Èn nén håyner l' contnou del pådje pa dzo l' pådje des diferinces",
        "tog-showhiddencats": "Mostrer les categoreyes mucheyes",
+       "tog-norollbackdiff": "Èn nén håyner les diferinces après on disfijhaedje",
        "tog-useeditwarning": "M' advierti cwand dji cwite ene pådje k' a des candjmints nén schapés",
        "underline-always": "Tofer",
        "underline-never": "Måy",
        "oct": "oct",
        "nov": "nôv",
        "dec": "dec",
+       "january-date": "$1 di djanvî",
+       "february-date": "$1 di fevrî",
+       "march-date": "$1 di måss",
+       "april-date": "$1 d' avri",
+       "may-date": "$1 di may",
+       "june-date": "$1 di djun",
+       "july-date": "$1 di djulete",
+       "august-date": "$1 d' awousse",
+       "september-date": "$1 di setimbe",
+       "october-date": "$1 d' octôbe",
+       "november-date": "$1 di nôvimbe",
+       "december-date": "$1 di decimbe",
        "pagecategories": "{{PLURAL:$1|Categoreye|Categoreyes}}",
        "category_header": "Årtikes el categoreye «$1»",
        "subcategories": "Dizo-categoreyes",
        "newwindow": "(drovant en on novea purnea)",
        "cancel": "Rinoncî",
        "moredotdotdot": "Co dpus...",
-       "mypage": "Mi pådje",
+       "mypage": "Pådje",
        "mytalk": "Mi copinaedje",
-       "anontalk": "Pådje di copene po ciste adresse IP",
+       "anontalk": "Copinaedje",
        "navigation": "Naiviaedje",
        "and": "&#32;eyet",
        "qbfind": "Trover",
        "actions": "Accions",
        "namespaces": "Espåces di lomaedje",
        "variants": "Variantes",
+       "navigation-heading": "Menu d' naiviaedje",
        "errorpagetitle": "Aroke",
        "returnto": "Rivni al pådje «$1».",
        "tagline": "Èn årtike di {{SITENAME}}.",
        "permalink": "Hårdêye viè cisse modêye ci",
        "print": "Imprimer",
        "view": "Vey",
+       "view-foreign": "Vey so $1",
        "edit": "Candjî",
        "create": "Ahiver",
        "editthispage": "Candjî l' pådje",
        "articlepage": "Vey l' årtike",
        "talk": "Copene",
        "views": "Vuwes",
-       "toolbox": "Boesse ås usteyes",
+       "toolbox": "Usteyes",
        "userpage": "Vey li pådje di l' uzeu",
        "projectpage": "Vey li pådje do pordjet",
        "imagepage": "Vey li pådje do fitchî",
        "pool-errorunknown": "Aroke nén cnoxhowe",
        "aboutsite": "Åd fwait di {{SITENAME}}",
        "aboutpage": "Project:Åd fwait",
-       "copyright": "Li contnou est dizo l' $1.",
+       "copyright": "Li contnou est dzo l' licince $1 a moens k' ça soeye dit ôtrumint.",
        "copyrightpage": "{{ns:project}}:Abondroets",
        "currentevents": "Actouwålités",
        "currentevents-url": "Project:Actouwålités",
        "edithelp": "Aidance",
+       "helppage-top-gethelp": "Aidance",
        "mainpage": "Mwaisse pådje",
        "mainpage-description": "Mwaisse pådje",
        "portal": "Inte di nozôtes",
        "portal-url": "Project:Inte di nozôtes",
        "badaccess": "Åk n' a nén stî avou les permissions",
+       "badaccess-groups": "L' accion ki vos avoz dmandé est limitêye ås uzeus {{PLURAL:$2|do groupe|des groupes}}: $1.",
        "versionrequired": "I vs fåt l' modêye $1 di MediaWiki",
        "versionrequiredtext": "I vs fåt l' modêye $1 di MediaWiki po-z eployî cisse pådje ci. Loukîz [[Special:Version|al pådje des modêyes]]",
        "ok": "'l est bon",
        "retrievedfrom": "Prin del pådje «$1»",
        "youhavenewmessages": "Vos avoz des $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Vos avoz}} $1 {{PLURAL:$3|d' èn ôte uzeu|di $3 ôtes uzeus}} ($2).",
+       "youhavenewmessagesmanyusers": "Vous avoz $1 di bråmint d' uzeus ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|on novea messaedje|999=noveas messaedjes}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|dierin candjmint|999=dierins candjmints}}",
        "youhavenewmessagesmulti": "Vos avoz des noveas messaedjes so $1",
        "editsection": "candjî",
        "editold": "candjî",
        "hidetoc": "catchî",
        "collapsible-collapse": "erôler",
        "collapsible-expand": "diswalper",
+       "confirmable-confirm": "Estoz vs {{GENDER:$1|seur|seure}}?",
+       "confirmable-yes": "Oyi",
+       "confirmable-no": "Neni",
        "thisisdeleted": "Vey ou rapexhî $1?",
        "viewdeleted": "Vey $1?",
        "restorelink": "{{PLURAL:$1|on candjmint disfacé|$1 candjmints disfacés}}",
        "nstab-template": "Modele",
        "nstab-help": "Aidance",
        "nstab-category": "Categoreye",
+       "mainpage-nstab": "Mwaisse pådje",
        "nosuchaction": "Nole sifwaite accion",
        "nosuchactiontext": "L' accion specifieye pal hårdêye n' est nén ricnoxhowe på wiki.\nMotoit ki vos avoz må scrît l' hårdêye ou shuvou on cron loyén.\nÇa pôreut eto esse on bug do programe eployî pa {{SITENAME}}.",
        "nosuchspecialpage": "Nole sifwaite pådje",
        "nospecialpagetext": "Vos avoz dmandé ene pådje sipeciåle nén valide, po ene djivêye des pådjes sipeciåles valides, loukîz a [[Special:SpecialPages]].",
        "error": "Aroke",
        "databaseerror": "Åk n' a nén stî avou l' båze di dnêyes",
+       "databaseerror-error": "Aroke: $1",
        "laggedslavemode": "Asteme: I s' pout ki l' pådje n' åye nén co les dierins candjmints.",
        "readonly": "Li båze di dnêyes est aclawêye",
        "missing-article": "Li båze di dnêyes n' a nén trové l' tecse d' ene pådje k' åreut dvou esse trovêye, lomêye «$1» $2.\n\nÇoula arive cwand on shût on loyén po ene diferince k' est houte ou viè l' istwere d' ene pådej disfacêye.\n\nSi c' est nén çoula, motoit k' vos avoz trové on bug dins l' programe.\nAdon dijhoz l' a on [[Special:ListUsers/sysop|manaedjeu]], sins rovyî d' mete li hårdêye (URL) ki mostere l' aroke.",
        "cannotdelete": "Dji n' sai disfacer l' pådje ou l' fitchî «$1».\nÇa s' pôreut k' ene ôte sakî l' a ddja disfacé.",
        "cannotdelete-title": "Dji n' sai disfacer l' pådje «$1»",
        "badtitle": "Måva tite",
-       "badtitletext": "Li tite del pådje dimandêye n' esteut nén valide, il estet vude, oudonbén c' esteut on cron loyén eterlingaedje ou eterwiki. Ça s' pout k' il åye onk ou sacwants caracteres ki n' polèt nén esse eployîs dins les tites.",
+       "badtitletext": "Li tite del pådje dimandêye n' esteut nén valide, il esteut vude, oudonbén c' esteut on cron loyén eterlingaedje ou eterwiki.\nÇa s' pout k' il åye onk ou sacwants caracteres ki n' polèt nén esse eployîs dins les tites.",
+       "title-invalid-too-long": "Li tite di pådje dimandé est pår trop longou. Ça n' pout nén aveur pus di $1 {{PLURAL:$1|octet|octets}} e l' ecôdaedje UTF-8.",
        "perfcached": "Les dnêyes ki shuvèt c' est ene copeye e muchete, et ça s' pout ki ça n' soeye nén ttafwaitmint a djoû. Li muchete a-st on macsimom {{PLURAL:$1|d' on rzultat|di $1 rizultats}}.",
        "perfcachedts": "Les dnêyes ki shuvèt c' est ene copeye e muchete, ey elle ont stî metowes a djoû pol dierin côp li $1. Li muchete a-st on macsimom {{PLURAL:$4|d' on rzultat|di $4 rizultats}}.",
        "viewsource": "Vey côde sourdant",
        "viewsource-title": "Côde sourdant di «$1»",
        "viewsourcetext": "Loukîz li contnou d' l’ årtike, et s’ li rcopyî si vos vloz, por vos bouter dsu foû des fyis:",
        "protectedinterface": "Cisse pådje ci dene on tecse d' eterface pol programe, eyet elle a stî protedjeye po s' waeranti siconte des abus.",
-       "editinginterface": "'''Asteme:''' Vos estoz ki candje ene pådje eployeye po fé l' tecse po l' eterface do programe.\nLes candjmints ki vso frîz vont candjî l' rivnance di l' eterface po ds ôtes uzeus.\nPo des ratournaedjes, loukîz purade a [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], li pordjet di locålijhaedje da MediaWiki.",
+       "editinginterface": "<stron>Asteme:</strong> Vos estoz ki candje ene pådje eployeye po fé l' tecse po l' eterface do programe.\nLes candjmints ki vos frîz vont candjî l' rivnance di l' eterface po ls ôtes uzeus do wiki.",
        "cascadeprotected": "Cisse pådje ci a stî protedjeye siconte des candjmints, pask' ele est eploye ådvins {{PLURAL:$1|del pådje shuvante k' est protedjeye|des pådjes shuvantes ki sont protedjeyes}} avou l' tchuze «e cascåde» en alaedje:\n$2",
-       "logouttext": "'''Vos vs avoz dislodjî.'''\n\nVos ploz continouwer a naivyî so {{SITENAME}} anonimmint, oudonbén <span class='plainlinks'>[$1 vos relodjî]</span>, dizo l' minme uzeu ou dizo èn uzeu diferin.\nNotez ki des pådjes k' i gn a si pôrént continowuer a vey come si vos estîz elodjî, disk' a tant ki vos vudrîz l' muchete di vosse betchteu waibe.",
+       "logouttext": "<strong>Vos vs avoz dislodjî.</strong>\n\nNotez ki des pådjes k' i gn a si pôrént continouwer a vey come si vos estîz elodjî, disk' a tant ki vos vudrîz l' muchete di vosse betchteu waibe.",
+       "welcomeuser": "Bénvnowe, $1!",
        "yourname": "Vosse no d' elodjaedje:",
+       "userlogin-yourname": "No d' uzeu",
        "yourpassword": "Vosse sicret",
+       "userlogin-yourpassword": "Sicret",
        "yourpasswordagain": "Ritapez vosse sicret",
        "remembermypassword": "Rimimbrer m' sicret inte les sessions (nén dpus ki po $1 {{PLURAL:$1|djoû|djoûs}})",
        "yourdomainname": "Vosse dominne",
        "logout": "Si dislodjî",
        "userlogout": "Si dislodjî",
        "notloggedin": "Nén elodjî",
+       "userlogin-joinproject": "S' edjîstrer so {{SITENAME}}",
        "nologin": "Vos n' avoz nén d' conte so ç' wiki ci? $1.",
        "nologinlink": "Ahivez on conte da vosse",
        "createaccount": "Ahiver on novea conte",
        "gotaccount": "Vos avoz ddja on conte so ç' wiki ci? '''$1'''.",
        "gotaccountlink": "Elodjîz vs",
        "userlogin-resetlink": "Avoz rovyî les pondants et djondants po s' elodjî?",
-       "createaccountmail": "pa emile",
+       "createaccountmail": "Eployî on scret timporaire a l' astcheyance eyet l' evoyî so l' emile diné",
+       "createacct-realname": "Vraiy no (opcionel)",
        "createaccountreason": "Råjhon:",
+       "createacct-reason": "Råjhon",
        "createacct-another-submit": "Ahiver èn ôte conte",
+       "createacct-benefit-body1": "{{PLURAL:$1|candjmint|candjmints}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|pådje|pådjes}}",
        "badretype": "Vos avoz dné deus screts diferins.",
        "userexists": "Li no d' uzeu ki vs avoz tchoezi est ddja eployî.\nTchoezixhoz è èn ôte s' i vs plait.",
        "loginerror": "Aroke d' elodjaedje",
        "nosuchuser": "I g na nou uzeu dizo l' no «$1».\nNotez k' les nos d' uzeu fjhèt l' diferince etur pitites et grandès letes.\nVerifyîz çou k' vos avoz tapé, oudonbén [[Special:UserLogin/signup|ahivez on novea conte]].",
        "nosuchusershort": "I g na nou uzeu dizo l' no «$1». Verifyîz çou k' vos avoz tapé.",
        "nouserspecified": "Vos dvoz dner on no d' elodjaedje.",
+       "login-userblocked": "{{GENDER:$1|Cist uzeu est bloké|Ciste uzeuse est blokêye}}. L' elodjaedje n' est nén possibe.",
        "wrongpassword": "Li scret ki vs avoz dné est måva. Rissayîz s' i vs plait.",
        "wrongpasswordempty": "Vos avoz dné on vude sicret. Rissayîz s' i vs plait.",
        "passwordtooshort": "Li scret doet esse di pol moens {{PLURAL:$1|1 caractere|$1 caracteres}}.",
-       "mailmypassword": "M' emiler on novea scret",
+       "passwordtoolong": "Les screts n' polèt nén aveur pus di {{PLURAL:$1|1 caractere|$1 caracteres}}.",
+       "mailmypassword": "Rifé l' sicret",
        "passwordremindertitle": "Novea scret timporaire po {{SITENAME}}",
        "passwordremindertext": "Ene sakî (probåblumint vos-minme, avou l' adresse IP $1) a dmandé \non novea scret po {{SITENAME}} ($4).\nOn scret timporare po l' uzeu «$2» a stî fwait, c' est «$3».\nSi c' est vos k' a fwait l' dimande, vos vs divoz elodjî eyet tchoezi on novea scret.\nLi scret timporaire ni srè pus valide après {{PLURAL:$5|on djoû|$5 djoûs}}.\n\nSi c' est ene ôte sakî k' a fwait l' dimande, ou si vos vs avoz rtrové l' vî scret eyet \nnel pus vleur candjî, vos ploz djusse ignorer ci messaedje ci eyet continouwer avou l' vî scret.",
        "noemail": "I n' a pont d' adresse emile di cnoxhowe po l' uzeu «$1».",
        "emailconfirmlink": "Acertinaedje di voste adresse emile",
        "invalidemailaddress": "L' adresse emile ni pout nén esse acceptêye la k' i shonnreut k' ele soeye dins ene cogne nén valide.\nTapez ene adresse emile sicrîte comifåt oudobén vudîz l' tchamp, s' i vs plait.",
        "accountcreated": "Conte ahivé",
-       "accountcreatedtext": "Li conte d' uzeu «$1» a stî ahivé.",
+       "accountcreatedtext": "Li conte d' uzeu «[[{{ns:User}}:$1|$1]]» ([[{{ns:User talk}}:$1|copene]]) a stî ahivé.",
        "loginlanguagelabel": "Lingaedje: $1",
        "pt-login": "S' elodjî",
        "pt-login-button": "S' elodjî",
        "pt-createaccount": "Ahiver on novea conte",
        "pt-userlogout": "\nSi dislodjî",
        "changepassword": "Candjî l' sicret",
-       "resetpass_announce": "Vos vs avoz elodjî avou on scret timporaire ki vos a stî emilé.\nPor vos fini l' elodjaedje, vos dvoz defini on novea scret:",
+       "resetpass_announce": "Por vos fini l' elodjaedje, vos dvoz defini on novea scret.",
        "resetpass_header": "Candjî l' sicret do conte",
        "oldpassword": "Vî scret:",
        "newpassword": "Noû scret:",
        "retypenew": "Ritapez l' noû scret:",
        "resetpass_submit": "Defini on scret et s' elodjî",
-       "changepassword-success": "Vosse sicret a stî candjî comifåt!\nAsteure l' elodjaedje...",
+       "changepassword-success": "Vosse sicret a stî candjî comifåt!",
+       "botpasswords-label-update": "Mete a djoû",
+       "botpasswords-label-delete": "Disfacer",
        "resetpass_forbidden": "Les screts n' polèt nén esse candjîs",
        "resetpass-no-info": "Vos dvoz esse elodjî po pleur aveur accès a cisse pådje ci.",
        "resetpass-submit-loggedin": "Candjî l' sicret",
        "passwordreset-capture-help": "Si vos clitchîz cisse boesse ci, l' emile (eyet li scret timporaire) vos srè håyné e minme tins k' il est emilé.",
        "passwordreset-email": "Adresse emile:",
        "passwordreset-emailtitle": "Detays do contre so {{SITENAME}}",
-       "changeemail": "Candjî l' emile",
-       "changeemail-header": "Candjî l' adresse emile do conte",
+       "changeemail": "Candjî ou disfacer l' adresse emile",
+       "changeemail-header": "Completez cisse pådje ci po candjî l' adresse emile do conte.\nSi vos vloz disfacer totes les adresses aloyeyes, leyîz l' tchamp vude å moumint d' evoyî.",
        "changeemail-no-info": "Vos dvoz esse elodjî po pleur aveur accès a cisse pådje ci.",
        "changeemail-oldemail": "Adresse emile pol moumint:",
        "changeemail-newemail": "Novele adresse emile:",
        "sig_tip": "Li sinateure da vosse, avou l' date et l' eure",
        "hr_tip": "Roye di coûtchî (a n' nén eployî d' trop)",
        "summary": "Rascourti:",
-       "subject": "Sudjet/tiestire:",
+       "subject": "Sudjet:",
        "minoredit": "Ci n' est k' ene tchitcheye",
        "watchthis": "Shuve cist årtike",
        "savearticle": "Schaper l' pådje",
        "preview": "Vey divant",
        "showpreview": "Vey divant",
        "showdiff": "Vey les candjmints",
-       "anoneditwarning": "'''Asteme:''' Vos n' estoz nén elodjî.\nVoste adresse IP serè rashiowe dins l' istwere di cisse pådje ci.",
+       "anoneditwarning": "<strong>Asteme:</strong> Vos n' estoz nén elodjî.\nVoste adresse IP serè rashiowe dins l' istwere di cisse pådje ci eyet veyowe publicmint.\nSi vos vs <strong>[$1 elodjîz]</strong> ou <strong>[$2 ahivez on conte]</strong>, les candjmints da vosse seront-st atribouwés a vosse no d' uzeu, et co ds ôtes advintaedjes.",
        "anonpreviewwarning": "''Vos n' estoz nén elodjî. Si vos schapez c' est voste adresse IP ki serè wårdêye dins l' istwere des candjmints.''",
        "missingsummary": "'''Asteme:''' Vos n' avoz nén dné on tecse di rascourti po vosse candjmint. Si vos rclitchîz sol boton «Schaper», li candjmint da vosse serè schapé sins nou tecse di rascourti po l' istwere del pådje.",
        "missingcommenttext": "Tapez on comintaire chal pa dzo s' i vs plait.",
        "accmailtitle": "Li scret a stî evoyî.",
        "accmailtext": "On scret costrût a l' astcheyance po [[User talk:$1|$1]] a stî evoyî a $2.\n\nLi scret po ci novea conte ci pout esse candjî sol pådje di ''[[Special:ChangePassword|candjmint di scret]]'' après l' elodjaedje.",
        "newarticle": "(Novea)",
-       "newarticletext": "Vos avoz clitchî so on loyén viè ene pådje ki n' egzistêye nén co.\nMins '''vos''' l' poloz askepyî! Po çoula, vos n' avoz k' a cmincî a taper vosse tecse dins l' boesse di tecse chal pa dzo (alez vey li [$1 pådje d' aidance] po pus d' infôrmåcion).\nSi vos n' voloz nén scrire cisse pådje chal, clitchîz simplumint sol boton '''En erî''' di vosse betchteu waibe po rivni al pådje di dvant.",
-       "anontalkpagetext": "---- ''Çouchal, c' est li pådje di copene po èn uzeu anonime ki n' a nén (co) fwait on conte por lu s' elodjî, ou ki n' l' eploye nén.\nÇa fwait k' on doet eployî si adresse IP limerike po l' idintifyî.\nCome ene sifwaite adresse IP pout esse eployeye pa pus d' èn uzeu, i s' pout ki vos voeyoz chal des rmarkes et des messaedjes ki n' sont nén por vos.\nLoukîz s' i vs plait po [[Special:UserLogin/signup|fé on novea conte]] ou [[Special:UserLogin|s' elodjî]] po n' pus aveur d' ecramiaedje avou des ôtes uzeus anonimes.''",
+       "newarticletext": "Vos avoz clitchî so on loyén viè ene pådje ki n' egzistêye nén co.\nMins '''vos''' l' poloz askepyî! Po çoula, vos n' avoz k' a cmincî a taper vosse tecse dins l' boesse di tecse cial pa dzo (alez vey li [$1 pådje d' aidance] po pus d' infôrmåcion).\nSi vos estoz droci par accidint, clitchîz simplumint sol boton <strong>En erî</strong> di vosse betchteu waibe po rivni al pådje di dvant.",
+       "anontalkpagetext": "---- ''Çouchal, c' est li pådje di copene po èn uzeu anonime ki n' a nén (co) fwait on conte por lu s' elodjî, ou ki n' l' eploye nén.\nÇa fwait k' on doet eployî si adresse IP limerike po l' idintifyî.\nCome ene sifwaite adresse IP pout esse eployeye pa pus d' èn uzeu, i s' pout ki vos veyoz chal des rmarkes et des messaedjes ki n' sont nén por vos.\nLoukîz s' i vs plait po [[Special:UserLogin/signup|fé on novea conte]] ou [[Special:UserLogin|s' elodjî]] po n' pus aveur d' ecramiaedje avou des ôtes uzeus anonimes.''",
        "noarticletext": "I gn a pol moumint nou tecse e cisse pådje chal.\nVos ploz [[Special:Search/{{PAGENAME}}|cweri après l' tite di cisse pådje ci]] dins des ôtès pådjes,\noudonbén <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cweri dins les djournås],\nou co [{{fullurl:{{FULLPAGENAME}}|action=edit}} ahiver l' pådje]</span>.",
-       "noarticletext-nopermission": "I gn a pol moumint nou tecse e cisse pådje chal.\nVos ploz [[Special:Search/{{PAGENAME}}|cweri après l' tite di cisse pådje ci]] dins des ôtès pådjes,\noudonbén <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cweri dins les djournås]</span>.",
+       "noarticletext-nopermission": "I gn a pol moumint nou tecse e cisse pådje chal.\nVos ploz [[Special:Search/{{PAGENAME}}|cweri après l' tite di cisse pådje ci]] dins des ôtès pådjes,\noudonbén <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cweri dins les djournås]</span>, mins vos n' avoz nén l' livea d' permission pol poleur ahiver.",
        "blocked-notice-logextract": "{{GENDER:$1|Cist uzeu est bloké|Ciste uzeuse est blokêye}} pol moumint.\nLi dierinne intrêye e djournå des blocaedjes est dnêye chal pa dzo po infôrmåcion:",
        "clearyourcache": "'''Note:''' après aveur schapé l' pådje, vos l' divoz rafrister, po pleur vey les candjmints dins vosse betchteu waibe.\n* '''Firefox / Safari:''' tchôkîz so ''Shift'' tot clitchant so ''Rafrister'', ou co fjhoz ''Ctrl-F5'' ou ''Ctrl-R'' (''⌘-R'' so on Mac)\n* '''Google Chrome:''' tchôkîz so ''Ctrl-Shift-R'' (''⌘-Shift-R'' on a Mac)\n* '''Internet Explorer:''' tchôkîz so ''Ctrl'' tot clitchant so ''Rafrister'', ou co fjhoz ''Ctrl-F5''\n* '''Konqueror:''' clitchîz so ''Rafrister'' ou tchôkîz so ''F5''\n* '''Opera:''' vudîz l' muchete dins ''Usteyes → Preferinces''.",
        "usercssyoucanpreview": "'''Racsegne:''' eployîz l' boton «{{int:showpreview}}» po sayî vosse novea CSS divant del schaper.",
        "editingold": "'''ASTEME: Vos estoz ki candje ene viye modêye del pådje.\nSi vos l' schapez, tos les candjmints k' ont stî fwaits\ndispoy adon si vont piede.'''",
        "yourdiff": "Diferinces",
        "copyrightwarning": "Notez ki tos les contribouwaedjes fwaits po {{SITENAME}} dvèt esse dizo l' licince $2 (loukîz $1 po pus di racsegnes).\nSi vos n' voloz nén ki vosse tecse poye esse candjî eyet spårdou pa tot l' minme kî, adon nel evoyîz nén chal.<br />\nVos nos acertinez eto ki vos avoz scrît l' tecse vos-minme, oudonbén l' avoz copyî d' on sourdant libe (dominne publik ou on sourdant pareymint libe).\n'''N' EVOYÎZ NÉN DES TECSES DIZO ABONDROETS SINS PERMISSION!'''",
-       "copyrightwarning2": "Notez ki tos les contribouwaedjes fwaits po {{SITENAME}} polèt esse esse candjîs ou disfacés pa des ôtes contribouweus.\nSi vos n' voloz nén scrire des årtikes ki polèt esse candjîs pa des ôtes, adon nels evoyîz nén chal.<br />\nVos nos acertinez eto ki vos avoz scrît l' tecse vos-minme, oudonbén l' avoz copyî d' on sourdant libe (voeyoz $1 po pus di racsegnes).\n'''N' EVOYÎZ NÉN DES TECSES DIZO ABONDROETS SINS PERMISSION!'''",
+       "copyrightwarning2": "Notez ki tos les contribouwaedjes fwaits po {{SITENAME}} polèt esse esse candjîs ou disfacés pa des ôtes contribouweus.\nSi vos n' voloz nén scrire des årtikes ki polèt esse candjîs pa des ôtes, adon nels evoyîz nén chal.<br />\nVos nos acertinez eto ki vos avoz scrît l' tecse vos-minme, oudonbén l' avoz copyî d' on sourdant libe (veyoz $1 po pus di racsegnes).\n'''N' EVOYÎZ NÉN DES TECSES DIZO ABONDROETS SINS PERMISSION!'''",
        "longpageerror": "'''AROKE: Li tecse ki vos avoz evoyî fwait di pus d' $1 kilo-octet{{PLURAL:$1||s}}, çou k' est pus ki l' macsimom di $2 kilo-octet{{PLURAL:$2||s}}.'''\nC' est nén possible del schaper sol sierveu.",
        "readonlywarning": "'''ASTEME: On-z overe sol båze di dnêyes pol moumint, ey elle a stî metowe e mode seulmint-lére.\nDo côp, vos n' såroz schaper vos candjmints asteure.'''\nMotoit vos dvrîz copyî et aclaper l' tecse dins on fitchî da vosse pol poleur rimete pus tård.\n\nLi manaedjeu k' a-st eclawé l' båze di dnêyes a dné cist esplicaedje ci: $1",
        "protectedpagewarning": "'''ASTEME: Cisse pådje chal a stî protedjeye, seulmint les uzeus avou èn accès di manaedjeu el polèt candjî.'''\nLi dierinne intrêye ezès djournås est håynêye chal pa dzo po referince:",
        "currentrev": "Modêye d' asteure",
        "currentrev-asof": "Dierinne modêye å $1",
        "revisionasof": "Modêye do $1",
-       "revision-info": "Modêye do $1 pa $2",
+       "revision-info": "Modêye do $1 pa $2$7",
        "previousrevision": "←Modêye di dvant",
        "nextrevision": "Modêye shuvante→",
        "currentrevisionlink": "Modêye d' asteure",
        "rev-deleted-text-permission": "Cisse modêye ci del pådje a stî '''disfacêye'''.\nVos ploz vey les ca et les ma sol [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} djournå des disfaçaedjes].",
        "rev-deleted-text-view": "Cisse modêye ci del pådje a stî '''disfacêye'''.\nVos l' poloz co vey; i gn a des detays sol [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} djournå des disfaçaedjes].",
        "rev-delundel": "mostrer/catchî",
+       "rev-showdeleted": "mostrer",
        "revisiondelete": "Disfacer/rapexhî des modêyes",
        "revdelete-show-file-submit": "Oyi",
        "logdelete-selected": "{{PLURAL:$1|Evenmint tchoezi|Evenmints tchoezis}} ezès djournås:",
-       "revdelete-legend": "Defini des restriccions sol voeyaedje",
+       "revdelete-legend": "Defini des restriccions sol veyaedje",
        "revdelete-hide-text": "Catchî l' tecse del modêye",
        "revdelete-hide-comment": "Catchî l' comintaire di candjmint",
        "revdelete-hide-user": "Catchî l' no d' uzeu/adresse IP do candjeu",
        "shown-title": "Mostrer $1 rizultat{{PLURAL:$1||s}} par pådje",
        "viewprevnext": "Vey ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''Gn a ddja ene pådje lomêye « [[:$1]] » so ç' wiki ci'''",
-       "searchmenu-new": "'''Ahiver l' pådje \"[[:$1]]\" so ç' wiki ci!'''",
+       "searchmenu-new": "<strong>Ahiver l' pådje \"[[:$1]]\" so ç' wiki ci!</strong>\n{{PLURAL:$2|0=|Loukîz eto l' pådje trovêye pa vosse cweraedje.|Loukîz eto li rzultat di vosse cweraedje.}}",
        "searchprofile-articles": "Pådjes di contnou",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Tote li waibe",
        "powersearch-togglelabel": "Tchoezi:",
        "powersearch-toggleall": "Totafwait",
        "powersearch-togglenone": "Disclitchî tot",
+       "powersearch-remember": "Rimimbrer l' tchuze po ls ôtes cweraedjes",
        "search-external": "Difoûtrin cweraedje",
        "searchdisabled": "Mande escuzes! Li cweraedje å dvins des årtikes a stî dismetou pol moumint, cåze ki l' sierveu est fortcherdjî. Tot ratindant, vos ploz eployî Google po fé les rcweraedjes so {{SITENAME}}, mins çoula pout esse ene miete vî.",
        "preferences": "Preferinces",
        "prefs-watchlist-days": "Nombe di djoûs a mostrer dins l' djivêye:",
        "prefs-watchlist-days-max": "Macsimom $1 djoû{{PLURAL:$1||s}}",
        "prefs-watchlist-edits": "Nombe di candjmints a mostrer dins l' djivêye:",
+       "prefs-watchlist-edits-max": "Nombe macsimom: 1000",
        "prefs-misc": "Totes sôres",
        "prefs-resetpass": "Candjî l' sicret",
        "prefs-changeemail": "Candjî l' emile",
        "rows": "Royes",
        "columns": "Colones",
        "searchresultshead": "Håynaedje des rzultats di cweraedje",
+       "stub-threshold": "Limite pol formataedje des loyéns djermons ($1):",
+       "stub-threshold-sample-link": "egzimpe",
+       "stub-threshold-disabled": "Dismetou",
        "recentchangesdays": "Nombe di djoûs po les dierins candjmints:",
        "recentchangesdays-max": "Macsimom $1 djoû{{PLURAL:$1||s}}",
        "recentchangescount": "Prémetou nombe di candjmintstites a håyner:",
+       "prefs-help-recentchangescount": "Çouchal inclût les dierins candjmints, l' istwere, eyet les djournås.",
        "savedprefs": "Vos preferinces ont stî schapêyes.",
        "timezonelegend": "Coisse d' eureye:",
        "localtime": "L' eure locåle",
        "prefs-displayrc": "Tchuzes di håynaedje",
        "prefs-displaywatchlist": "Tchuzes di håynaedje",
        "prefs-diffs": "Diferinces",
-       "email-address-validity-valid": "L' adresse emile a l' air d' esse valide",
-       "email-address-validity-invalid": "Dinez ene adresse emile valide",
        "userrights": "Manaedjî les liveas des uzeus",
        "userrights-lookup-user": "Manaedjî les groupes d' uzeus",
        "userrights-user-editname": "Tapez on no d' uzeu:",
        "right-deletedtext": "Vey les tecses disfacés eyet les candjmints etur disfacêyès modêyes",
        "right-browsearchive": "Loukî après les disfacêyès pådjes",
        "right-undelete": "Rapexhî ene pådje k' a stî disfacêye",
-       "right-suppressrevision": "Verifyî et rapexhî les modêyes catcheyes åzès manaedjeus",
+       "right-suppressrevision": "Vey, catchî et discatchî des dnés candjmints po tot l' minme kén uzeu",
        "right-suppressionlog": "Vey les djournås privés",
        "right-block": "Espaitchî d' ôtes uzeus di scrire",
        "right-blockemail": "Espaitchî èn uzeu d' evoyî des emiles",
        "right-hideuser": "Bloker on no d' uzeu, tot catchant s' no ås ôtes",
        "right-ipblock-exempt": "Passer houte des blocaedjes pa adresse IP, pa fortchete d' adresses ou des blocaedjes otomatikes",
-       "right-proxyunbannable": "Passer houte des blocaedjes otomatikes des procsis",
        "right-unblockself": "Si disbloker lu-minme",
        "right-protect": "Candjî les liveas d' protedjaedje eyet candjî les pådjes protedjeyes",
+       "right-rollback": "Disfijhaedje abeye des candjmints do dierin uzeu a-z aveur candjî ene pådje",
        "newuserlogpage": "Djournå des noveas uzeus",
        "newuserlogpagetext": "Chal pa dzo c' est ene djivêye des uzeus novelmint eredjîstrés.",
        "rightslog": "Djournå des droets des uzeus",
        "recentchanges-label-minor": "Ci n' est k' on ptit candjmint",
        "recentchanges-label-bot": "Ci candjmint la a stî fwait pa on robot",
        "recentchanges-label-unpatrolled": "Ci candjmint la n' a nén co stî patrouyî",
+       "recentchanges-label-plusminus": "Li grandeur del pådje a candjî d' ostant d' octets",
+       "recentchanges-legend-heading": "<strong>Ledjinde:</strong>",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vey eto l' [[Special:NewPages|djivêye des nouvès pådjes]])",
+       "recentchanges-submit": "Vey",
        "rcnotefrom": "Chal pa dzo les candjmints dispoy li '''$2''' (disk' a '''$1''' di mostrés).",
        "rclistfrom": "Mostrer les candjmints k' i gn a yeu a pårti do $3 $2",
        "rcshowhideminor": "$1 candjmints mineurs",
+       "rcshowhideminor-show": "Mostrer",
+       "rcshowhideminor-hide": "Catchî",
        "rcshowhidebots": "$1 robots",
-       "rcshowhideliu": "$1 uzeus eredjîstrés",
+       "rcshowhidebots-show": "Mostrer",
+       "rcshowhidebots-hide": "Catchî",
+       "rcshowhideliu": "$1 uzeus edjîstrés",
+       "rcshowhideliu-hide": "Catchî",
        "rcshowhideanons": "$1 uzeus anonimes",
+       "rcshowhideanons-show": "Mostrer",
+       "rcshowhideanons-hide": "Catchî",
        "rcshowhidepatr": "$1 candjmints rwaitîs",
+       "rcshowhidepatr-show": "Mostrer",
+       "rcshowhidepatr-hide": "Catchî",
        "rcshowhidemine": "$1 candjmints da minne",
+       "rcshowhidemine-show": "Mostrer",
+       "rcshowhidemine-hide": "Catchî",
+       "rcshowhidecategorization": "$1 li categorijhaedjes des pådjes",
+       "rcshowhidecategorization-show": "Mostrer",
+       "rcshowhidecategorization-hide": "Catchî",
        "rclinks": "Mostrer les $1 dierins candjmints des dierins $2 djoûs.<br />$3",
        "diff": "dif.",
        "hist": "ist.",
        "rc_categories_any": "Totes",
        "rc-change-size-new": "$1 {{PLURAL:$1|octet|octets}} après l' candjmint",
        "newsectionsummary": "/* $1 */ novele seccion",
-       "rc-enhanced-expand": "Mostrer les detays (i fåt JavaScript)",
+       "rc-enhanced-expand": "Mostrer les detays",
        "rc-enhanced-hide": "Catchî les detays",
        "recentchangeslinked": "Candjmints aloyîs",
        "recentchangeslinked-feed": "Candjmints aloyîs",
        "sourcefilename": "No d' fitchî so vosse copiutrece:",
        "destfilename": "No d' fitchî a eployî so {{SITENAME}}:",
        "filewasdeleted": "On fitchî avou ç' no la a ddja stî disfacé. Vos dvrîz loukî å $1 divant d' continouwer.",
-       "upload-success-subj": "L' eberwetaedje a stî comifåt",
        "upload-file-error": "Divintrinne aroke",
        "license": "Licince:",
        "license-header": "Licince",
        "shared-repo-from": "vént d' $1",
        "shared-repo": "on depot pårtaedjî",
        "filerevert": "Rimete come divant $1",
+       "filerevert-legend": "Rapexhî l' fitchî",
+       "filerevert-intro": "Vos estoz k' alez rapexhî l' fitchî <strong>[[Media:$1|$1]]</strong> al [$4 modêye do $3, a $2].",
        "filerevert-comment": "Råjhon:",
+       "filerevert-defaultcomment": "Rimetou al modêye do $2, a $1 ($3)",
        "filerevert-submit": "Disfé",
+       "filerevert-success": "<strong>[[Media:$1|$1]]</strong> a stî rmetou al [$4 modêye do $3, a $2].",
        "filedelete": "Disfacer $1",
        "filedelete-legend": "Disfacer fitchî",
        "filedelete-comment": "Råjhon:",
        "mostimages": "Imådjes les pus loyeyes",
        "mostrevisions": "Årtikes avou l' pus di candjmints",
        "prefixindex": "Indecse pa betchete",
+       "prefixindex-submit": "Mostrer",
        "shortpages": "Coûtès pådjes",
        "longpages": "Longowès pådjes",
        "deadendpages": "Pådjes sins nou loyén wiki",
        "protectedpages": "Pådjes protedjeyes",
        "protectedpages-indef": "Seulmint les protedjaedje disk' a todi",
        "protectedpages-cascade": "Seulmint les protedjaedjes e cascåde",
+       "protectedpages-noredirect": "Catchî les redjiblaedjes",
        "protectedpagesempty": "I gn a pol moumint nole pådje sifwaitmint protedjeye.",
        "protectedtitles": "Tites protedjîs",
        "protectedtitlesempty": "I gn a pol moumint nou tite sifwaitmint protedjî.",
        "usereditcount": "$1 candjmint{{PLURAL:$1||s}}",
        "usercreated": "{{GENDER:$3|Edjîstré|Edjîstrêye}} li $1 a $2",
        "newpages": "Novelès pådjes",
+       "newpages-submit": "Mostrer",
        "newpages-username": "No d' elodjaedje:",
        "ancientpages": "Viyès pådjes",
        "move": "Displaecî",
        "pager-older-n": "{{PLURAL:$1|$1 pus vî|$1 pus vîs}}",
        "booksources": "Sourdants po les lives",
        "booksources-search-legend": "Cweri des sourdants po des lives",
+       "booksources-search": "Cweri",
        "specialloguserlabel": "Fwait pa:",
        "speciallogtitlelabel": "Såme (tite ou uzeu):",
        "log": "Djournås",
+       "logeventslist-submit": "Mostrer",
        "all-logs-page": "Tos les djournås publiks",
        "alllogstext": "Håynaedje etercroejhlé di tos les djournås disponibes so {{SITENAME}}.<br />\nVos ploz defini l' håynaedje tot tchoezixhant ene sôre di djournå, on no d' uzeu, ou l' tite d' ene pådje (po ces deus dierins l' sitinme fwait l' diferince inte les grandes et les ptitès letes).",
        "logempty": "Rén n' corespond dins l' djournå.",
        "allpagessubmit": "I va",
        "allpagesprefix": "Håyner les pådjes avou l' betchete:",
        "allpagesbadtitle": "Li tite di pådje diné n' est nén valide oudonbén il a-st ene betchete di loyén eterlingaedje ou eterwiki. Ça s' pout k' il åye onk ou d' pus d' caracteres ki n' si polèt nén eployî dins les tites.",
+       "allpages-hide-redirects": "Catchî les redjiblaedjes",
        "categories": "Categoreyes",
+       "categories-submit": "Mostrer",
        "categoriespagetext": "{{PLURAL:$1|Li categoreye shuvante est eployeye|Les categoreyes shuvantes sont-st eployeyes}} pa des pådjes ou des fitchîs.\n[[Special:UnusedCategories|Les categoreyes nén eployeyes]] èn sont nén håynêyes chal.\nLoukîz eto [[Special:WantedCategories|les categoreyes dimandêyes]].",
        "categoriesfrom": "Håyner les categoreyes a pårti di:",
        "special-categories-sort-count": "relére pa nombe di cayets",
        "listusers-submit": "Vey",
        "listusers-noresult": "Nol uzeu di trové.",
        "listusers-blocked": "({{GENDER:$1|bloké|blokêye}})",
+       "activeusers-hidebots": "Catchî les robots",
        "listgrouprights-members": "(djivêye des mimbes)",
        "mailnologin": "Nole adresse d' evoyeu",
        "mailnologintext": "Po-z evoyî èn emile a èn ôte uzeu i vs fåt esse [[Special:UserLogin|elodjî]] eyet aveur ene adresse emile d' evoyeu ki soeye valide dins vos [[Special:Preferences|preferinces]].",
        "notanarticle": "Nén èn årtike",
        "watchlist-details": "Vos avoz {{PLURAL:$1|$1 pådje shuvowe|$1 pådjes shuvowes}} (sins conter les pådjes di copene).",
        "wlheader-enotif": "Li notifiaedje pa emile est en alaedje.",
-       "wlheader-showupdated": "Les pådjes k' ont candjî dispoy vosse dierinne vizite sont metowes e '''cråssès letes'''",
+       "wlheader-showupdated": "Les pådjes k' ont candjî dispoy vosse dierinne vizite sont metowes e <strong>cråssès letes</strong>.",
        "wlnote": "Chal pa dzo {{PLURAL:$1|li dierin candjmint|les '''$1''' dierins candjmints}} {{PLURAL:$2|del dierinne eure|des '''$2''' dierinnès eures}}, disk' å $3 a $4.",
-       "wlshowlast": "Mostrer les dierin(nè)s $1 eures, $2 djoûs ou",
+       "wlshowlast": "Mostrer les dierin(nè)s $1 eures, $2 djoûs",
+       "watchlist-hide": "Catchî",
+       "watchlist-submit": "Mostrer",
        "watchlist-options": "Tchuzes del djivêye des shuvous",
        "enotif_reset": "Mårker totes les pådjes come vizitêyes",
        "enotif_lastvisited": "Loukîz $1 po tos les candjmints dispoy vosse dierinne vizite.",
-       "enotif_body": "Binamé $WATCHINGUSERNAME,\n\nLi pådje «$PAGETITLE» so {{SITENAME}} a stî $CHANGEDORCREATED li $PAGEEDITDATE pa $PAGEEDITOR,\nloukîz $PAGETITLE_URL pol modêye do moumint.\n\n$NEWPAGE\n\nComintaire do candjeu: $PAGESUMMARY $PAGEMINOREDIT\n\nContak do candjeu:\nemile: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nI n' årè nén d' ôtes notifiaedjes po ds ôtes candjmints di ç' minme pådje ci tant k' vos n' l' åroz nén vizitêye.\nVos ploz eto rimete a noû les drapeas di notifiaedje po totes les pådjes di vosse djivêye des pådjes a shuve.\n\n\nVosse binamé sistinme di notifiaedje so {{SITENAME}}\n\n--\nPo candjî l' apontiaedje di vos notifiaedjes pa emile, loukîz\n{{canonicalurl:{{#special:Preferences}}}}\n\nPo candjî l' apontiaedje di vosse djivêye a shuve, loukîz\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPo rsaetchî l' pådje di vosse djivêye a shuve, alez so\n$UNWATCHURL\n\nPo pus d' aidance:\n$HELPPAGE",
+       "enotif_body": "Binamé $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nComintaire do candjeu: $PAGESUMMARY $PAGEMINOREDIT\n\nContak do candjeu:\nemile: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nI n' årè nén d' ôtes notifiaedjes po ds ôtes candjmints di ç' minme pådje ci tant k' vos n' l' åroz nén vizitêye (tot estant elodjî).\nVos ploz eto rimete a noû les drapeas di notifiaedje po totes les pådjes di vosse djivêye des pådjes a shuve.\n\n\nVosse binamé sistinme di notifiaedje so {{SITENAME}}\n\n--\nPo candjî l' apontiaedje di vos notifiaedjes pa emile, loukîz\n{{canonicalurl:{{#special:Preferences}}}}\n\nPo candjî l' apontiaedje di vosse djivêye a shuve, loukîz\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPo rsaetchî l' pådje di vosse djivêye a shuve, alez so\n$UNWATCHURL\n\nPo pus d' aidance:\n$HELPPAGE",
        "created": "ahivêye",
        "changed": "candjeye",
        "deletepage": "Disfacer l' pådje",
        "delete-confirm": "Disfacer «$1»",
        "delete-legend": "Disfacer",
        "historywarning": "'''Asteme:''' Li pådje ki vos alez disfacer a-st ene istwere avou a pô près $1 modêye{{PLURAL:$1||s}}:",
+       "historyaction-submit": "Mostrer",
        "confirmdeletetext": "Vos alez disfacer ene pådje avou tote si istwere.\nAcertinez s' i vs plait ki c' est bén çoula ki vos vloz fé,\nki vos comprindoz les consecwinces, et ki vos fjhoz çoula\ntot [[{{MediaWiki:Policy-url}}|shuvant les rîles]].",
        "actioncomplete": "Fwait",
        "actionfailed": "L' accion a fwait berwete",
        "delete-edit-reasonlist": "Candjî les råjhons do disfaçaedje",
        "delete-toobig": "Cisse pådje ci a ene foû grande istwere, avou dpus di $1 modêye{{PLURAL:$1||s}}.\nLi disfaçaedje des sfwaitès pådjes a stî dismetou po-z espaitchî k' i gn åye des problinmes so {{SITENAME}}.",
        "delete-warning-toobig": "Cisse pådje ci a ene foû grande istwere, avou dpus di $1 modêye{{PLURAL:$1||s}}.\nSi disfaçaedje pôreut fé des problinmes avou l' rotaedje del båze di dnêyes so {{SITENAME}}; \nnel fijhoz k' avou asteme.",
+       "rollback": "Disfé les candjmints",
        "rollbacklink": "netyî",
+       "rollbacklinkcount": "disfé $1 {{PLURAL:$1|candjmint|candjmints}}",
+       "rollbackfailed": "Li disfijhaedje a fwait berwete",
        "cantrollback": "Dji n' sai disfé les candjmints; li dierin contribouweu est li seu oteur po cist årtike ci.",
        "alreadyrolled": "Dji n' sai disfé li dierin candjmint di [[$1]] fwait pa [[User:$2|$2]] ([[User talk:$2|Copene]]);\nene sakî d' ôte a ddja candjî l' årtike ou ddja rmetou l' modêye di dvant.\n\nLi dierin candjmint a stî fwait pa [[User:$3|$3]] ([[User talk:$3|Copene]]).",
-       "editcomment": "Li rascourti do candjmint esteut: «''$1''».",
+       "editcomment": "Li rascourti do candjmint esteut: <em>$1</em>.",
        "revertpage": "Disfwait les candjmints da [[Special:Contributions/$2|$2]] ([[User talk:$2|copene]]); li dierin candjmint est asteure da [[User:$1|$1]]",
+       "rollback-success": "Disfwait les candjmints da $1;\nli dierin candjmint est asteure da $2.",
        "protectlogpage": "Djournå des protedjaedjes",
        "protectlogtext": "Chal pa dzo c' est ene djivêye des protedjaedjes et disprotedjaedjes des pådjes.\nLoukîz al [[Special:ProtectedPages|djivêye des pådjes protedjeyes]] po vey les protedjaedjes ki sont en alaedje pol moumint.",
        "protectedarticle": "«[[$1]]» protedjî",
        "undelete-missing-filearchive": "Nén possibe d' aler rapexhî li fitchî avou l’ ID $1 pask' i n' est nén dins l' båze di dnêyes. Motoit k' il a ddja stî rapexhî dvant.",
        "namespace": "Espåce di lomaedje:",
        "invert": "Tchuze å rvier",
+       "namespace_association": "Espåce di lomaedje aloyî",
        "blanknamespace": "(Mwaisse)",
-       "contributions": "Ovraedjes di l' uzeu",
+       "contributions": "Ovraedjes di l' {{GENDER:$1|uzeu|uzeuse}}",
        "contributions-title": "Djivêye des ovraedjes di l' {{GENDER:$1|uzeu|uzeuse}} $1",
        "mycontris": "Mi ovraedje",
        "contribsub2": "Po l' uzeu $1 ($2)",
        "whatlinkshere-hidelinks": "$1 les loyaedjes",
        "whatlinkshere-hideimages": "$1 fitchîs k' eploynut cist imådje ci",
        "whatlinkshere-filters": "Passetes",
+       "whatlinkshere-submit": "Vey",
        "autoblockid": "Blocaedje otomatike #$1",
        "blockip": "Bloker èn uzeu",
        "blockiptext": "Rimplixhoz les tchamps chal pa dzo po bloker\nl' accès e scrijhaedje d' èn uzeu dné ou a pårt d' ene\nadresse IP dnêye. Çouci èn doet esse fwait ki po-z arester les\nvandales, et çoula doet esse fwait tot shuvant les\n[[{{MediaWiki:Policy-url}}|rîles]].\nDinez ene råjhon do blocaedje (eg: dijhoz les pådjes k' ont\nstî vandalijheyes).",
        "movelogpagetext": "Chal pa dzo c' est ene djivêye des pådjes k' on stî displaceyes.",
        "movereason": "Råjhon:",
        "revertmove": "disfé",
-       "delete_and_move": "Disfacer et displaecî",
        "delete_and_move_text": "==I gn a mezåjhe di disfacer==\n\nL' årtike såme «[[:$1]]» egzistêye dedja. El voloz vs disfacer po vs permete di displaecî l' ôte?",
        "delete_and_move_confirm": "Oyi, disfacer l' pådje",
        "delete_and_move_reason": "Disfacé po permete li displaeçaedje di «[[$1]]»",
        "importlogpagetext": "Ristitchaedjes (import) administratifs di pådjes avou leus istorikes di candjmints, a pårti d' ôtes wikis.",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|modêye|modêyes}}",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|modêye|modêyes}} foû di $2",
-       "tooltip-pt-userpage": "Pådje d' uzeu da minne",
+       "tooltip-pt-userpage": "Pådje d' {{GENDER:|uzeu|uzeuse}} da minne",
        "tooltip-pt-anonuserpage": "Li pådje d' uzeu po l' adresse IP ki vos eployîz pol moumint",
        "tooltip-pt-mytalk": "Pådje di copene da minne",
        "tooltip-pt-anontalk": "Pådje di copene po les candjmints fwaits a pårti di ciste adresse IP ci",
        "tooltip-pt-mycontris": "Djivêye des ovraedjes da minne",
        "tooltip-pt-login": "Vos estoz ecoraedjî d' vos elodjî, mins nerén, c' est nén oblidjî.",
        "tooltip-pt-logout": "Vos dislodjî",
+       "tooltip-pt-createaccount": "Nos vs ricomandans d' ahiver on conte et di vs elodjî; mins nerén, c' est nén oblidjî",
        "tooltip-ca-talk": "Copene åd fwait do contnou del pådje",
-       "tooltip-ca-edit": "Vos ploz candjî cisse pådje ci. S' i vs plait, eployîz l' boton «Vey divant» po vs acertiner k' tot est comifåt dvant d' schaper vos candjmints.",
+       "tooltip-ca-edit": "Candjî l' pådje",
        "tooltip-ca-addsection": "Radjouter ene novele seccion",
        "tooltip-ca-viewsource": "Cisse pådje ci est protedjeye.\nVos ploz seulmint vey li côde sourdant, mins nén l' candjî.",
        "tooltip-ca-history": "Viyès modêyes del pådje.",
        "tooltip-t-recentchangeslinked": "Dierins candjmints fwaits so des pådjes ki cisse pådje ci a des loyéns viè zeles",
        "tooltip-feed-rss": "Sindicåcion RSS po cisse pådje ci",
        "tooltip-feed-atom": "Sindicåcion Atom po cisse pådje ci",
-       "tooltip-t-contributions": "Vey li djivêye des ovraedjes fwait pa cist uzeu ci",
+       "tooltip-t-contributions": "Vey li djivêye des ovraedjes fwait pa {{GENDER:$1|cist uzeu|ciste uzeuse}} ci",
        "tooltip-t-emailuser": "Evoyî èn emile a cist uzeu ci",
        "tooltip-t-upload": "Eberweter sol sierveu des imådjes ou fitchîs media",
        "tooltip-t-specialpages": "Djivêye di totes les pådjes sipeciåles",
        "tooltip-ca-nstab-main": "Vey li pådje di contnou",
        "tooltip-ca-nstab-user": "Vey li pådje di l' uzeu",
        "tooltip-ca-nstab-media": "Vey li pådje di media",
-       "tooltip-ca-nstab-special": "Çouchal, c' est ene pådje sipeciåle, vos n' poloz nén candjî l' pådje leye-minme.",
+       "tooltip-ca-nstab-special": "Çouchal, c' est ene pådje sipeciåle, ele ni s' pout nén candjî.",
        "tooltip-ca-nstab-project": "Vey li pådje di pordjet",
        "tooltip-ca-nstab-image": "Vey li pådje do fitchî",
        "tooltip-ca-nstab-mediawiki": "Vey li messaedje ratournåve do sistinme",
        "anonusers": "$1, {{PLURAL:$2|uzeu anonime|uzeus anonimes}} di {{SITENAME}}",
        "creditspage": "Pådje di credits",
        "nocredits": "I n' a pont d' infôrmåcion di credits po cisse pådje ci.",
+       "spam_reverting": "Rimetaedje al dierinne modêye sins nou loyén viè $1",
        "pageinfo-title": "Infôrmåcion po «$1»",
        "pageinfo-watchers": "Nombe di shuveus",
        "pageinfo-edits": "Nombe di candjmints",
        "pageinfo-authors": "Nombe d' oteurs diferins",
+       "pageinfo-toolboxlink": "Infôrmåcion sol pådje",
        "markaspatrolleddiff": "Marké come ricoridjî",
        "markaspatrolledtext": "Marker cisse pådje ci come dedja patrouyeye",
        "patrol-log-page": "Djournå des patrouyaedjes",
        "previousdiff": "← Diferinces des candjmints di dvant",
        "nextdiff": "Diferinces des candjmints shuvants →",
        "mediawarning": "'''Asteme''': Ci fitchî chal pôreut esse evirussé.\nSi vos l' enondez vos pôrîz infecter l' sistinme da vosse.",
-       "imagemaxsize": "Limite pol grandeu des imådjes:<br />''(ezès pådjes d'i discrijhaedje di fitchîs)''",
-       "thumbsize": "Grandeu po les imådjetes (thumb):",
+       "imagemaxsize": "Limite pol grandeur des imådjes:<br /><em>(ezès pådjes di discrijhaedje di fitchîs)</em>",
+       "thumbsize": "Grandeur po les imådjetes (thumb):",
        "widthheightpage": "$1 × $2, $3 pådje{{PLURAL:$3||s}}",
        "file-info-size": "$1 × $2 picsels, groxheur do fitchî: $3, del sôre \"MIME\": $4",
        "file-nohires": "I n' a nén di pus grande finté.",
        "svg-long-desc": "Fitchî SVG, finté di $1 × $2 picsels, grandeu: $3",
-       "show-big-image": "Imådje a si grandeur d' oridjinne",
+       "show-big-image": "Fitchî d' oridjinne",
+       "show-big-image-preview": "Grandeur do préveyaedje: $1.",
+       "show-big-image-other": "{{PLURAL:$2|Ôte finté|Ôtès fintés}}: $1.",
+       "show-big-image-size": "$1 × $2 picsels",
        "newimages": "Galreye des nouvès imådjes",
        "imagelisttext": "Chal pa dzo c' est ene djivêye di '''$1''' {{PLURAL:$1|imådje relîte|imådjes relîtes}} $2.",
        "noimages": "I n' a rén a vey.",
        "fileduplicatesearch": "Cweraedje après les dobes fitchîs",
        "fileduplicatesearch-submit": "Cweri",
        "specialpages": "Pådjes sipeciåles",
+       "specialpages-note-top": "Ledjinde",
        "specialpages-group-maintenance": "Etertinance",
        "specialpages-group-other": "Ôtès pådjes especiåles",
        "specialpages-group-login": "S' elodjî / si rashire",
        "intentionallyblankpage": "Cisse pådje ci est vude en esprès.",
        "tag-filter": "Passete po ls [[Special:Tags|etiketes]]:",
        "tag-filter-submit": "Passete",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etikete|Etiketes}}]]: $2)",
        "tags-edit": "candjî",
        "tags-hitcount": "$1 candjmint{{PLURAL:$1||s}}",
        "comparepages": "Comparer des pådjes",
        "logentry-patrol-patrol": "$1 a marké come patrouyî l' candjmint $4 del pådje $3",
        "logentry-patrol-patrol-auto": "$1 a marké otomaticmint come patrouyî l' candjmint $4 del pådje $3",
        "logentry-newusers-newusers": "$1 a-st ahivé on conte d' uzeu",
-       "logentry-newusers-create": "$1 a-st ahivé on conte d' uzeu",
+       "logentry-newusers-create": "Li conte d' uzeu $1 a stî ahivé",
        "logentry-newusers-create2": "$1 a-st ahivé on conte d' uzeu $3",
        "logentry-newusers-autocreate": "li conte $1 a stî ahivé otomaticmint",
+       "logentry-upload-upload": "$1 {{GENDER:$2|}}a-st eberweté $3",
        "rightsnone": "(nouk)",
        "feedback-adding": "Vosse messaedje a stî håyné sol pådje...",
        "feedback-cancel": "Rinoncî",
index 10b3a58..6fb8443 100644 (file)
        "myprivateinfoprotected": "Waray nim pagtugot hit pagliwat hit imo pribado nga impormasyon.",
        "mypreferencesprotected": "Waray nim pagtugot hit pagliwat hit imo mga karuyag.",
        "ns-specialprotected": "Diri maliliwat an mga ispisyal nga pakli.",
-       "titleprotected": "Ini nga titulo pinasalipod ha paghimo ni [[User:$1|$1]].\nAn katadungan nga ginhatag amo in \"''$2''\".",
+       "titleprotected": "Ini nga titulo pinasalipod ha paghimo ni [[User:$1|$1]].\nAn katadungan nga ginhatag amo in <em>$2</em>.",
        "filereadonlyerror": "Diri maliliwat ini nga paypay \"$1\" tungod an ginsusudlan han paypay nga \"$2\" in aada la ha pagbasa-la nga kahimtang.\n\nAn 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\"",
        "createaccountreason": "Rason:",
        "createacct-reason": "Rason",
        "createacct-reason-ph": "Kay ano nahimo ka hin usa pa nga akawnt",
-       "createacct-submit": "Ighimo an im akawnt",
+       "createacct-submit": "Ighimo an im account",
        "createacct-another-submit": "Paghimo hin account",
        "createacct-benefit-heading": "{{SITENAME}} in ginhimo hin tawo nga sugad ha imo.",
        "createacct-benefit-body1": "{{PLURAL:$1|pagliwat|mga pagliwat}}",
        "recentchanges-label-bot": "Ini nga pagliwat in ginbuhat han bot",
        "recentchanges-label-unpatrolled": "Ini nga pagliwat in diri pa nakapatrol",
        "recentchanges-label-plusminus": "An kadako han pakli in nabag-o hin ini nga numero nga mga byte",
-       "recentchanges-legend-heading": "'''Leyenda:'''",
+       "recentchanges-legend-heading": "<strong>Leyenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (kitaa gihapon [[Special:NewPages|talaan han mga bag-o nga pakli]])",
        "recentchanges-submit": "Pakit-a",
        "rcnotefrom": "An ha ubos in mga pagbabag-o tikang han <strong>$2</strong> (kutob ngadto ha <strong>$1</strong> nga ginpakita).",
index 288734a..36cf7d0 100644 (file)
@@ -7,7 +7,8 @@
                        "Reedy",
                        "SF-Language",
                        "Urhixidur",
-                       "아라"
+                       "아라",
+                       "Macofe"
                ]
        },
        "tog-underline": "Rëddaatu lëkkalekaay yi :",
        "cascadeprotected": "Xët wii dañ kaa aar ndaxte daa ëmbu ci {{PLURAL:$1|xët wi toftal|xët yi toftal}}, di yu ñu aar :\n$2",
        "namespaceprotected": "Amoo sañ-sañu soppi xët yi ne ci bii barabu tur « '''$1''' ».",
        "ns-specialprotected": "Xët yi ne ci bii barabu tur « {{ns:special}} » kenn maneesu leen a soppi.",
-       "titleprotected": "Koj bii [[User:$1|$1]] moo ko aar ngir bañ sosteefam.\nNgirte li mu joxe mooy ne « ''$2'' ».",
+       "titleprotected": "Koj bii [[User:$1|$1]] moo ko aar ngir bañ sosteefam.\nNgirte li mu joxe mooy ne <em>$2</em>.",
        "virus-badscanner": "Tànnéef wu bon: saytukatu wiris bees xamul: ''$1''",
        "virus-scanfailed": "Saytu gi dog na (code $1)",
        "logouttext": "Fi mu nekk nii génn nga.'''\n\nMan ngaa wéy di jëfandikoo {{SITENAME}} ci anam buñ la dul xamme walla nga  <span class='plainlinks'>[$1 duggewaat]</span> ak wenn tur wi walla ak weneen.",
        "right-blockemail": "Tere ab jëfandikukat yónney m-bataaxal",
        "right-hideuser": "Téye ab jëfandikukat, nëbbaale ko mbooloo mi",
        "right-ipblock-exempt": "Jéggi IP yees téye, téye yu boppu ak téyey tooli IP",
-       "right-proxyunbannable": "Jéggi téye yu proxy yi",
        "right-protect": "Soppi tolluwaayu kaaraange gi te soppi xët yees aar",
        "right-editprotected": "Soppi xët yees aar",
        "right-editinterface": "Soppi jokkalekaayu jëfandikukat bi",
        "recentchanges-label-bot": "Coppite bu ab bot def",
        "recentchanges-label-unpatrolled": "Coppite bii kenn fugloogu ko",
        "recentchanges-label-plusminus": "Dayoob xët wi soppeeku na ci lu ni toll ciy byte.",
-       "recentchanges-legend-heading": "'''Piri:'''",
+       "recentchanges-legend-heading": "<strong>Piri:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (wone itam [[Special:NewPages|limu xët yu bees yi]]) -",
        "rcnotefrom": "Yii ñooy coppite yi dalee '''$2''' (ba '''$1''').",
        "rclistfrom": "Wone coppite yi mujj yi dooree $3 $2",
        "watchthisupload": "Topp dencukaay bii",
        "filewasdeleted": "Dencukaay bu tudd nii yeboon nañ ko fi ba noppi, faraat ko. Saytul $1 laataa nga koy yebaat.",
        "filename-bad-prefix": "Turu dencukaay bi ngay yeb moo ngi tambalee '''\"$1\"''', te muy tur wu nosukaay bi di joxal boppam nataalukaay yi.\nDila ñaan nga tànn tur wuy faramfacce dencukaay bi.",
-       "upload-success-subj": "Yeb gi jàll na",
        "license-header": "Anami Jëfandikoo gi",
        "imgfile": "Dencukaay",
        "listfiles": "Limu dencukaay",
        "rollbackfailed": "Loppanti gi antuwul",
        "cantrollback": "Neenal coppite gi manula nekk;\nKi def coppite gi mooy Kenn ki masa cëru ci xët wii.",
        "alreadyrolled": "Loppantig coppite gu mujj gu xët wii di « [[:$1]] » manula nekk, ki ko def di [[User:$2|$2]] ([[User talk:$2|Waxtaan]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nam na keneen ku jota soppi walla loppanti xët wi.\n\nKi mujje soppi xët wi mooy [[User:$3|$3]] ([[User talk:$3|Waxtaan]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Tënkug coppite gi mooy: « ''$1'' ».",
+       "editcomment": "Tënkug coppite gi mooy: <em>$1</em>.",
        "revertpage": "Loppantig coppite gu [[Special:Contributions/$2|$2]] ([[User talk:$2|Waxtaan]]) dello ko ci sumb mu [[User:$1|$1]]",
        "rollback-success": "Ki loppanti mooy $1 ;\nKi ko dello ci sumb mu mujj mi mooy $2.",
        "sessionfailure": "Dafa mel ne sa dugg gi am na ay tolof-tolof ;\nNoste gi téye na sag dugg ngir wattu kaaraange.\nDi la ñaan nga dellu ginnaaw te yesalaat xët wa jóge, te jéemaat",
        "movenosubpage": "Wii xët amul ron-xët",
        "movereason": "Ngirte :",
        "revertmove": "delloowaat",
-       "delete_and_move": "Far te tuddewaat",
        "delete_and_move_text": "== Laajub far ==\nXët wi nga joge niki àgguwaay « [[:$1]] » am na fi.\nDëgg-dëgg namm nga koo far ngir tuddewaat gi mana antu?",
        "delete_and_move_confirm": "Waaw, faral xët wi",
        "delete_and_move_reason": "Far nañu ko ngir mana amal tuddewaat gi",
index c8fb4ee..a397552 100644 (file)
                        "Poiuyt",
                        "反共复国",
                        "姑苏小恐龙",
-                       "飞舞回堂前"
+                       "飞舞回堂前",
+                       "Macofe"
                ]
        },
        "tog-underline": "鏈接下橫線:",
-       "tog-hideminor": "此垡變化裏囥脫小編",
-       "tog-hidepatrolled": "此垡變化裏囥脫巡脫編",
+       "tog-hideminor": "近段辰光个改动里囥脱小编辑",
+       "tog-hidepatrolled": "近段辰光个改动里囥脱巡查过个编辑",
        "tog-newpageshidepatrolled": "新頁表裏囥脫巡脫頁",
        "tog-hidecategorization": "囥脱对页面个分类",
-       "tog-extendwatchlist": "æ\93´å¤§é\97\9c注表ï¼\8c顯示å\85¨é\83¨è®\8aå\8c\96ï¼\8cå¼\97å\96®æ¸\85æ­¤å\9e¡å\80\8b",
+       "tog-extendwatchlist": "æ\89©å±\95å\85³æ³¨è¡¨æ\9d¥æ\98¾ç¤ºæ\89\80æ\9c\89æ\94¹å\8a¨ï¼\8cå¼\97å\85\89æ\98¯æ\9c\80è¿\91个",
        "tog-usenewrc": "使用折叠版个近段辰光个改动搭关注表",
        "tog-numberheadings": "標題自動編號",
-       "tog-showtoolbar": "顯示編傢伙欄",
-       "tog-editondblclick": "捺兩記編頁",
-       "tog-editsectiononrightclick": "用右捺標題編段",
+       "tog-showtoolbar": "显示编辑工具条",
+       "tog-editondblclick": "双击编辑页面",
+       "tog-editsectiononrightclick": "右击段落标题编辑段落",
        "tog-watchcreations": "拿我建个页面搭我传个文件加到我个关注表里去",
        "tog-watchdefault": "拿我编个页面搭文件加到我个关注表里去",
        "tog-watchmoves": "畀我移个页搭文件加进我个监控列表里去",
        "tog-watchdeletion": "畀我刪脫個頁搭文件加進我個關注表裏",
        "tog-watchrollback": "拿我执行过回退个页面加到我个关注表里去",
        "tog-minordefault": "默认拿所有编辑标记成细编辑",
-       "tog-previewontop": "編寫框頭前顯示先望",
-       "tog-previewonfirst": "頭垡編寫顯示先望",
+       "tog-previewontop": "来拉编辑框上头显示预览",
+       "tog-previewonfirst": "头一届编辑辰光显示预览",
        "tog-enotifwatchlistpages": "我关注表里个页面或文件有改动个辰光发电子邮件畀我",
        "tog-enotifusertalkpages": "我个讨论页有改动个辰光发邮件畀我",
        "tog-enotifminoredits": "頁搭文件細編也用電子信通知我",
        "tog-oldsig": "本生个签名:",
        "tog-fancysig": "拿签名当成维基文本(弗自动链接)",
        "tog-uselivepreview": "使用实时预览",
-       "tog-forceeditsummary": "編要空白到提醒我",
-       "tog-watchlisthideown": "關注表裏囥脫我所編",
-       "tog-watchlisthidebots": "關注表裏囥脫機器人所編",
-       "tog-watchlisthideminor": "關注表裏囥脫細編",
-       "tog-watchlisthideliu": "關注表裏囥脫已登用戶所編",
-       "tog-watchlisthideanons": "關注表裏囥脫隱姓埋名用戶所編",
-       "tog-watchlisthidepatrolled": "關注表裏囥脫巡脫編",
+       "tog-forceeditsummary": "朆写编辑摘要个辰光提醒我",
+       "tog-watchlisthideown": "关注表里囥脱我个编辑",
+       "tog-watchlisthidebots": "关注表里囥脱机器人个编辑",
+       "tog-watchlisthideminor": "关注表里囥脱细编辑",
+       "tog-watchlisthideliu": "关注表里囥脱登录用户个编辑",
+       "tog-watchlisthideanons": "关注表里囥脱匿名用户个编辑",
+       "tog-watchlisthidepatrolled": "关注表里囥脱巡查过个编辑",
        "tog-watchlisthidecategorization": "囥脱对页面个分类",
        "tog-ccmeonemails": "拿我发畀其他用户个电子邮件也发只副本畀我自家",
        "tog-diffonly": "比较两只修订版本两样个辰光弗显示页面内容",
        "tog-showhiddencats": "顯示囥脫分類",
        "tog-norollbackdiff": "执行退回之后弗显示两样",
-       "tog-useeditwarning": "離開編頁朆保存到提醒我",
+       "tog-useeditwarning": "离开编辑页面朆保存个辰光警告我",
        "tog-prefershttps": "登录后老世用保险连接",
        "underline-always": "老世",
        "underline-never": "老世弗",
        "and": "&#32;搭",
        "qbfind": "尋",
        "qbbrowse": "浏览",
-       "qbedit": "ç·¨",
+       "qbedit": "ç¼\96è¾\91",
        "qbpageoptions": "箇頁",
        "qbmyoptions": "我頁",
        "faq": "FAQ",
        "newmessagesdifflinkplural": "此垡̺{{PLURAL:$1|变化|999=变化}}",
        "youhavenewmessagesmulti": "侬有新消息来拉$1",
        "editsection": "编辑",
-       "editold": "编",
+       "editold": "编",
        "viewsourceold": "望源碼",
-       "editlink": "编",
+       "editlink": "编",
        "viewsourcelink": "望源码",
        "editsectionhint": "编辑章节:$1",
        "toc": "目录",
        "perfcachedts": "下头是缓存数据,阿末一趟更新辰光是$1。缓存里最多有{{PLURAL:$4|$4条结果}}。",
        "querypage-no-updates": "当前禁止对此页面进行更新。箇搭个数据弗好立即刷新。",
        "viewsource": "望源码",
-       "viewsource-title": "望“$1”个源码",
+       "viewsource-title": "望“$1”个源码",
        "actionthrottled": "动作已压制",
        "actionthrottledtext": "基于反滥用个考量,限制垃拉短时间内多趟重复箇只操作。请过脱几分钟再试试看。",
        "protectedpagetext": "箇页锁牢定,防编搭各许操作。",
        "myprivateinfoprotected": "你个私人信息你呒处编。",
        "mypreferencesprotected": "你个私人偏好你呒处编。",
        "ns-specialprotected": "特殊页编辑是弗来三个。",
-       "titleprotected": "箇只标题已经拨[[User:$1|$1]]保护以防止创建。理由是''$2''。",
+       "titleprotected": "箇只标题已经拨[[User:$1|$1]]保护以防止创建。理由是<em>$2</em>。",
        "filereadonlyerror": "“$1”文件呒处改,因为文件库“$2”是只读模式。\n\n锁牢数据库个系统管理员解释如下:“$3”。",
        "invalidtitle-knownnamespace": "非法个题目头,有名字空间$2搭文字$3",
        "invalidtitle-unknownnamespace": "非法个题目头,有弗识个数字$1搭文字$2",
        "resetpass_submit": "设置密码再登录",
        "changepassword-success": "密碼改好哉!\n能界登錄當中...",
        "changepassword-throttled": "侬试登录忒多次哉。等$1再试试看。",
+       "botpasswords": "机器人密码",
+       "botpasswords-label-appid": "机器人名字:",
+       "botpasswords-label-create": "建立",
+       "botpasswords-label-update": "更新",
        "resetpass_forbidden": "密码弗好更改",
        "resetpass-no-info": "侬必须登录著才好直接进入箇只页面。",
        "resetpass-submit-loggedin": "更改密码",
        "whitelistedittext": "请$1编辑。",
        "confirmedittext": "垃拉编辑此页之前侬必须确认侬个邮箱地址。请通过[[Special:Preferences|个人设置]]设置并验证侬个邮箱地址。",
        "nosuchsectiontitle": "寻弗着箇只段落",
-       "nosuchsectiontext": "侬尝试编辑个章节弗存在。\n作兴是垃拉侬查看页面个辰光已经移动或者畀删除。",
+       "nosuchsectiontext": "侬尝试编辑个章节弗存在。作兴是垃拉侬望页面个辰光已经畀移动或者删脱。",
        "loginreqtitle": "必须登录",
        "loginreqlink": "登录",
        "loginreqpagetext": "请$1来望其他页面。",
        "newarticle": "(新)",
        "newarticletext": "倷跟著链接来着一个还弗勒里个页面。要创建该页面呢,就勒下底个框里向开始写([$1 帮助页面]浪有更加多个信息)。要是倷是弗用心到该𡍲个说话,请点击浏览器个<strong>返回</strong>揿钮。",
        "anontalkpagetext": "---- ''箇是一个还弗曾建立账户个匿名用户个讨论页, 箇咾我伲只好用IP地址来搭渠联络。该IP地址可能由几名用户共享。如果侬是一名匿名用户并认为箇只页面高头个评语搭侬弗搭界,请 [[Special:UserLogin/signup|创建新账户]]或[[Special:UserLogin|登录]]来避免垃拉将来搭其他匿名用户混淆。''",
-       "noarticletext": "箇只页面目前呒没文本。侬可以垃拉其他页面高头[[Special:Search/{{PAGENAME}}|寻该只标题]]、<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 寻相关日志]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 编辑此页]</span>。",
+       "noarticletext": "箇只页面目前呒没文本。侬可以垃拉其他页面高头[[Special:Search/{{PAGENAME}}|寻该只标题]]、<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 寻相关日志]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 建立此页]</span>。",
        "noarticletext-nopermission": "箇只页面目前呒不文本。侬可以垃拉其他页面高头[[Special:Search/{{PAGENAME}}|寻箇页标题]],或者<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 寻相关日志]</span>,但必过侬呒不权限建立箇只页面。",
        "userpage-userdoesnotexist": "用户账户“<nowiki>$1</nowiki>”弗曾创建。请垃拉创建/编辑迭个页面前头先检查一记。",
        "userpage-userdoesnotexist-view": "用户账户“$1”弗曾创建。",
        "semiprotectedpagewarning": "'''注意:''' 本页面畀锁定,仅限注册用户编辑。\n最近个日志垃拉下底提供以便参考:",
        "cascadeprotectedwarning": "<strong>警告:</strong>本页已经畀保护,只有拥有管理员权限个用户才好修改,因为本页已畀下底眼级联保护个{{PLURAL:$1|一只|多只}}页面所嵌入:",
        "titleprotectedwarning": "'''警告:本页面已畀锁定,需要[[Special:ListGroupRights|指定权限]]方可创建。'''\n最近个日志垃拉下底提供以便参考:",
-       "templatesused": "箇页有{{PLURAL:$1|个模板}}:",
-       "templatesusedpreview": "{{PLURAL:$1|只模板}}垃拉箇趟预览里向拨使用:",
+       "templatesused": "箇页用着个{{PLURAL:$1|模板}}:",
+       "templatesusedpreview": "箇趟预览用着个{{PLURAL:$1|模板}}:",
        "templatesusedsection": "垃拉箇只段落里向使用个{{PLURAL:$1|模板|模板}}有:",
        "template-protected": "(保护)",
        "template-semiprotected": "(半保护牢)",
        "permissionserrorstext-withaction": "为仔下头个{{PLURAL:$1|原因|原因}}咾侬无权进行$2操作:",
        "recreate-moveddeleted-warn": "<strong>警告:你来上重新创建一只老早删过个页面。</strong>\n\n你应该考虑继续编辑箇只页面啊合适。为方便起见,箇只页面个删除搭移动记录提供勒下底:",
        "moveddeleted-notice": "箇页删脱哉。箇页个删除搭移动记录提供垃拉下头以便参考。",
-       "log-fulllog": "æ\9f¥ç\9c\8b完整日志",
+       "log-fulllog": "æ\9c\9b完整日志",
        "edit-hook-aborted": "编辑畀钩子取消。\n渠弗曾畀出解释。",
        "edit-gone-missing": "弗好更新页面。\n渠作兴齐巧畀删除。",
        "edit-conflict": "编辑冲突",
        "duplicate-args-category": "调用重复模板参数个页面",
        "expensive-parserfunction-warning": "警告:箇只页面包含忒多占用资源个函数调用。\n\n必须小于$2趟调用,现在有$1趟调用。",
        "expensive-parserfunction-category": "页面包含忒多耗费资源个函数调用",
-       "post-expand-template-inclusion-warning": "'''警告:'''模板用忒多。\n一星模板弗'''用'''。",
+       "post-expand-template-inclusion-warning": "<strong>警告:</strong>引用模板大小忒大。有些模板弗会畀包括勒亨。",
        "post-expand-template-inclusion-category": "模板用过量个页",
-       "post-expand-template-argument-warning": "警告:箇只页面至少包含一只模参数,渠个扩展大小过大。\n箇眼参数已经畀忽略。",
+       "post-expand-template-argument-warning": "<strong>警告:</strong>箇页面至少有一只模板参数展开后忒大。箇眼参数已经畀忽略。",
        "post-expand-template-argument-category": "包含忽略模板参数个页面",
        "parser-template-loop-warning": "检测着模板循环:[[$1]]",
        "parser-template-recursion-depth-warning": "模板递归深度超限($1)",
        "revdelete-radio-same": "(弗要更改)",
        "revdelete-radio-set": "囥脱",
        "revdelete-radio-unset": "可见",
-       "revdelete-suppress": "同时阻止管理员与其他用户查看数据",
+       "revdelete-suppress": "阻止管理员搭其他用户查看数据",
        "revdelete-unsuppress": "垃拉已恢复个修订里向移除限制",
        "revdelete-log": "理由:",
        "revdelete-submit": "应用于拣中个{{PLURAL:$1|修订}}",
        "textmatches": "页面内容匹配",
        "notextmatches": "呒没匹配个页面文本",
        "prevn": "前$1个",
-       "nextn": "$1个",
+       "nextn": "$1个",
        "prev-page": "上页",
        "next-page": "下页",
        "prevn-title": "前$1个结果",
        "nextn-title": "后$1个结果",
        "shown-title": "一页显示$1个结果",
-       "viewprevnext": "æ\9f¥ç\9c\8b($1 {{int:pipe-separator}} $2)($3)",
+       "viewprevnext": "æ\9c\9b($1 {{int:pipe-separator}} $2)($3)",
        "searchmenu-exists": "'''箇wiki里有一页名字“[[:$1]]”哉'''",
        "searchmenu-new": "<strong>登箇Wiki上建“[[:$1]]”页!</strong>{{PLURAL:$2|0=|另见寻着个页面。|另见搜寻个结果。}}",
        "searchprofile-articles": "内容页",
        "prefs-rc": "近段辰光个改动",
        "prefs-watchlist": "监控列表",
        "prefs-editwatchlist": "编辑关注表",
+       "prefs-editwatchlist-raw": "编写原始关注表",
+       "prefs-editwatchlist-clear": "清空侬个关注表",
        "prefs-watchlist-days": "勒拉监控列表里向显示个日数:",
        "prefs-watchlist-days-max": "最长$1日天",
        "prefs-watchlist-edits": "勒拉扩展个监控列表里向显示个编辑趟数:",
        "yourlanguage": "界面语言:",
        "yournick": "新签名:",
        "badsig": "无效原始签名;检查 HTML 标签。",
-       "yourgender": "侬希望畀哪亨称呼?",
+       "yourgender": "侬个性别?",
        "gender-unknown": "提到侬个辰光,软件会尽量用性别中立个词",
        "gender-male": "男",
        "gender-female": "女",
        "right-edit": "編頁面",
        "right-createpage": "做頁面(弗是討論頁面)",
        "right-createtalk": "做討論頁",
-       "right-createaccount": "å\81\9aæ\96°ç\94¨æ\88¶å¸³è\99\9f",
+       "right-createaccount": "å¼\80æ\96°ç\94¨æ\88·è´¦å\8f·",
        "right-minoredit": "標記編寫是小編寫",
        "right-move": "移頁面",
        "right-movefile": "移文件",
        "right-bigdelete": "删脱有大量历史个页面",
        "right-deletelogentry": "删脱搭恢复特定日志项",
        "right-deleterevision": "删脱搭恢复页面个特定版本",
-       "right-deletedhistory": "æ£\80è§\86ç\95\80删脱个历史项目,弗包括相关文本",
+       "right-deletedhistory": "æ\9c\9b删脱个历史项目,弗包括相关文本",
        "right-browsearchive": "搜尋已刪頁",
        "right-unblockself": "解封自家",
        "right-editusercss": "编辑其他用户个CSS文件",
        "right-edituserjs": "编辑其他用户个JavaScript文件",
-       "right-editmyusercss": "编辑自家个用户CSS文件",
-       "right-editmyuserjs": "编辑自家个用户JavaScript文件",
-       "right-viewmywatchlist": "æ\9c\9bè\87ªå·±å\80\8bé\97\9c注表",
+       "right-editmyusercss": "编辑自家个用户CSS文件",
+       "right-editmyuserjs": "编辑自家个用户JavaScript文件",
+       "right-viewmywatchlist": "æ\9c\9bè\87ªå®¶ä¸ªå\85³注表",
        "right-editmywatchlist": "编辑侬个关注表。请注意就算缺少本权限,某些操作仍旧会拿页面加到关注表。",
-       "right-viewmyprivateinfo": "看侬个私人数据(如电子邮件地址、真实姓名)",
-       "right-editmyprivateinfo": "编辑侬个私人数据(如电子邮件地址、真实姓名)",
+       "right-viewmyprivateinfo": "望自家个私人数据(譬方说电邮地址、真名字)",
+       "right-editmyprivateinfo": "编辑自家个私人数据(譬方说电邮地址、真名字)",
        "right-editmyoptions": "编辑侬个个人设置",
+       "right-patrol": "拿别人家个编辑标记成已巡查",
        "right-sendemail": "發郵件畀各許人",
        "grant-group-page-interaction": "搭頁面互動",
        "grant-group-file-interaction": "搭媒體互動",
        "action-upload_by_url": "從URL傳文件",
        "action-delete": "刪箇頁",
        "action-deleterevision": "刪箇版本",
-       "action-deletedhistory": "æ\9c\9bç®\87é \81å\80\8bå\88ª史",
+       "action-deletedhistory": "æ\9c\9bç®\87页å\88 è\84±ä¸ªå\8e\86史",
        "action-browsearchive": "尋已刪頁",
        "action-undelete": "弗刪箇頁",
+       "action-patrol": "拿别人家个编辑标记成已巡查",
        "action-userrights": "編全部用戶權",
        "action-userrights-interwiki": "編用戶徠各許維基個權",
        "action-siteadmin": "數據庫鎖牢要勿開鎖",
        "action-sendemail": "發郵件",
        "action-editmywatchlist": "編關注表",
        "action-viewmywatchlist": "望關注表",
-       "action-viewmyprivateinfo": "望私人信息",
+       "action-viewmyprivateinfo": "望侬个私人信息",
        "action-editmyprivateinfo": "編私人信息",
        "nchanges": "$1趟更改",
        "enhancedrc-history": "歷史",
        "recentchanges-legend": "近段辰光个改动选项",
        "recentchanges-summary": "登该个页面浪跟踪最近对维基百科个改动。",
        "recentchanges-feed-description": "跟踪此订阅垃拉 wiki 高头个最近更改。",
-       "recentchanges-label-newpage": "建新页来编",
+       "recentchanges-label-newpage": "箇编辑建立着新页",
        "recentchanges-label-minor": "箇是小编写",
        "recentchanges-label-bot": "箇编辑由机器人执行",
-       "recentchanges-label-unpatrolled": "编辑还朆巡查",
+       "recentchanges-label-unpatrolled": "编辑还朆巡查",
        "recentchanges-label-plusminus": "箇页面字节数前后个变化",
-       "recentchanges-legend-heading": "'''说明:'''",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}}(见[[Special:NewPages|新页列表]])",
+       "recentchanges-legend-heading": "<strong>说明:</strong>",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}}(见[[Special:NewPages|新页列表]])",
        "rclistfrom": "显示 $3 $2 以来个新改动",
        "rcshowhideminor": "$1小编写",
        "rcshowhideminor-show": "显示",
        "fileuploadsummary": "小结:",
        "filereuploadsummary": "文件更改:",
        "filestatus": "版权状态:",
-       "filesource": "来源:",
+       "filesource": "来源",
        "ignorewarning": "弗管警告,随便哪亨要保存文件。",
        "ignorewarnings": "忽略所有警告",
        "minlength1": "文件名至少一個字。",
        "windows-nonascii-filename": "箇wiki弗支持文件名用特別個字符。",
        "uploadwarning": "上载警告",
        "savefile": "保存文件",
+       "uploaddisabled": "上传停用哉。",
        "sourcefilename": "源文件:",
        "destfilename": "目标文件名:",
        "watchthisupload": "關注箇文件",
        "linkstoimage": "下头$1个页面链到箇文件:",
        "nolinkstoimage": "呒不页面链接到该只文件。",
        "linkstoimage-redirect": "$1(文件轉戳到)$2",
-       "sharedupload": "箇只文件来源于$1,渠作兴垃拉其它项目当中拨应用。",
+       "sharedupload": "箇只文件来源于$1,渠作兴垃拉其他项目当中畀应用。",
        "sharedupload-desc-here": "箇文件$1里个,作兴会畀别个项目使用。渠个[$2 描述页]里个说明显示如下。",
        "uploadnewversion-linktext": "上载该文件个新版",
        "upload-disallowed-here": "你弗可以覆盖伊只文件。",
        "specialloguserlabel": "用戶:",
        "speciallogtitlelabel": "目标(标题,或针对用户使用{{ns:user}}:用户名):",
        "log": "记录",
-       "alllogstext": "æ\89\80æ\9c\89{{SITENAME}}å\85¬å¼\80æ\97¥å¿\97个è\81\94å\90\88å±\95示ã\80\82侬å\8f¯ä»¥é\80\89æ\8b©æ\97¥å¿\97ç±»å\9e\8bã\80\81ç\94¨æ\88·å\90\8dï¼\88å\8cºå\88\86大å°\8få\86\99ï¼\89æ\88\96è\80\85ç\9b¸å\85³é¡µé\9d¢ï¼\88å\8cºå\88\86大å°\8få\86\99ï¼\89æ\9d¥ç¼©å°\8fæ\9f¥è¯¢范围。",
+       "alllogstext": "æ\89\80æ\9c\89{{SITENAME}}å\85¬å¼\80æ\97¥å¿\97个è\81\94å\90\88å±\95示ã\80\82侬å\8f¯ä»¥é\80\89æ\8b©æ\97¥å¿\97ç±»å\9e\8bã\80\81ç\94¨æ\88·å\90\8dï¼\88å\8cºå\88\86大å°\8få\86\99ï¼\89æ\88\96è\80\85ç\9b¸å\85³é¡µé\9d¢ï¼\88å\8cºå\88\86大å°\8få\86\99ï¼\89æ\9d¥ç¼©å°\8fæ\90\9c寻范围。",
        "allpages": "全部页面",
        "nextpage": "下页 ($1)",
        "prevpage": "上一页($1)",
        "confirm": "确认",
        "excontentauthor": "内容是:“$1”,唯一贡献者是“[[Special:Contributions/$2|$2]]”([[User talk:$2|讲张]])",
        "historywarning": "<strong>警告:</strong>侬要删脱个页面有$1次{{PLURAL:$1|修订}}历史:",
-       "confirmdeletetext": "侬å\8d³å°\86å\88 é\99¤ä¸\80å\8fªé¡µé\9d¢æ\88\96å\9b¾å\83\8f以å\8f\8aå\85¶å\8e\86å\8f²ã\80\82\n请确å®\9a侬è¦\81è¿\9bè¡\8c此项æ\93\8dä½\9cï¼\8c并ä¸\94äº\86解å\85¶å\90\8eæ\9e\9cï¼\8cå\90\8cæ\97¶ä¾¬ä¸ªè¡\8c为符å\90\88[[{{MediaWiki:Policy-url}}|the policy]]。",
+       "confirmdeletetext": "侬å\8d³å°\86å\88 é\99¤ä¸\80å\8fªé¡µé\9d¢æ\90­è\91\97ä¼\8a个æ\89\80æ\9c\89å\8e\86å\8f²ã\80\82请确认侬è¦\81è¿\9bè¡\8c此项æ\93\8dä½\9cï¼\8c并ä¸\94äº\86解å\85¶å\90\8eæ\9e\9cï¼\8cå\90\8cæ\97¶ä¾¬ä¸ªè¡\8c为符å\90\88[[{{MediaWiki:Policy-url}}|æ\94¿ç­\96]]。",
        "actioncomplete": "操作完成哉",
        "deletedtext": "“$1”已经畀删除脱哉。最近删除个记录请参见$2。",
        "dellogpage": "删除记录",
        "dellogpagetext": "下底是最近个删除个列表。",
        "deletionlog": "删除记录",
-       "deletecomment": "理由:",
-       "deleteotherreason": "其/附加理由:",
+       "deletecomment": "理由",
+       "deleteotherreason": "其/附加理由:",
        "deletereasonotherlist": "别个理由",
        "rollback": "恢复编辑",
        "rollbacklink": "恢复",
        "protectedarticle": "保护“[[$1]]”",
        "modifiedarticleprotection": "“[[$1]]”个保护等级改好哉",
        "prot_1movedto2": "[[$1]]捅到[[$2]]",
-       "protectcomment": "理由:",
+       "protectcomment": "理由",
        "protectexpiry": "到期:",
        "protect_expiry_invalid": "到期辰光无效。",
        "protect_expiry_old": "到期辰光已经过去哉。",
        "protect-cascadeon": "本页面目前畀保护拉许,因为下底个{{PLURAL:$1|一只|多只}}页面嵌入本页面个同时,启动了连锁保护。更改本页面个保护级别并弗会影响连锁保护。",
        "protect-default": "允许所有用户",
        "protect-fallback": "只允许有“$1”权限个用户",
-       "protect-level-autoconfirmed": "å¼\97å\87\86æ\96°ç\94¨æ\88¶æ\90­é\82\84æ\9c\86註å\86\8aå\80\8bç\94¨æ\88",
+       "protect-level-autoconfirmed": "å\8fªå\87\86è\87ªå\8a¨ç¡®è®¤ç\94¨æ\88·",
        "protect-level-sysop": "只准管理員",
        "protect-summary-cascade": "级联",
        "protect-expiring": "终止于$1(UTC)",
        "restriction-move": "捅荡",
        "undeletepage": "查看搭仔恢复删脱个页面",
        "viewdeletedpage": "望望相删脱个页面",
-       "undeletelink": "æ\9f¥ç\9c\8b/è¿\98å\8e\9f",
+       "undeletelink": "æ\9c\9b\81¢å¤\8d",
        "undeleteviewlink": "望",
        "undeletecomment": "理由:",
        "undelete-search-submit": "搜尋",
        "namespace": "名字空间:",
        "invert": "反选择",
-       "tooltip-invert": "打上扎钩头来囥脱选定名字空间个改动(如果勾选有关名字空间,箇么一道囥脱)",
+       "tooltip-invert": "打上扎来囥脱选定名字空间个改动(如果勾选有关名字空间,箇么一道囥脱)",
        "namespace_association": "有关个名字空间",
-       "tooltip-namespace_association": "打上扎钩头来加上搭选定名字空间搭界个讨论或主题名字空间",
+       "tooltip-namespace_association": "打上扎来加上搭选定名字空间搭界个讨论或主题名字空间",
        "blanknamespace": "(主)",
        "contributions": "{{GENDER:$1|用户}}贡献",
        "contributions-title": "$1个贡献",
        "blockip": "查封{{GENDER:$1|用户}}",
        "blockiptext": "用下头个表单来禁止来自某一特定IP地址或用户名个修改权限。只有勒勒为仔防止破坏,及符合[[{{MediaWiki:Policy-url}}|政策]]个情况下底才好采取此行动。请勒勒下底输入一个具体个理由(譬如引述一只畀破坏个页面)。侬好用[https://zh.wikipedia.org/wiki/无类别域间路由 CIDR]语法查封IP地址段;允许个最大段是/$1(针对IPv4)搭/$2(针对IPv6)。",
        "ipaddressorusername": "IP地址或用户名:",
-       "ipbreason": "理由:",
+       "ipbreason": "理由",
        "ipbsubmit": "封杀该个用户",
-       "ipbother": "其时间:",
+       "ipbother": "其时间:",
        "ipboptions": "2个钟头:2 hours,1天:1 day,3天:3 days,1个礼拜:1 week,2个礼拜:2 weeks,1个号头:1 month,3个号头:3 months,6个号头:6 months,1年:1 year,老世:infinite",
        "badipaddress": "无效 IP 地址",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]]已经畀查封。<br />\n参看[[Special:BlockList|查封列表]]来复审查封。",
        "movetalk": "移动相关讨论页",
        "movelogpage": "移动记录",
        "movelogpagetext": "下底是拨拉捅荡个页面列表。",
-       "movereason": "理由:",
+       "movereason": "理由",
        "revertmove": "恢复",
        "delete_and_move_confirm": "对哉,删脱该只页面",
        "semiprotectedpagemovewarning": "<strong>注意:</strong>箇只页面畀保护来许,只有注册用户才好移动渠。下底提供最近个日志畀侬参考:",
        "tooltip-ca-talk": "讨论内容页",
        "tooltip-ca-edit": "编辑箇页",
        "tooltip-ca-addsection": "开始新段",
-       "tooltip-ca-viewsource": "箇页受保护,你好望源代码",
+       "tooltip-ca-viewsource": "箇页畀保护勒上。你好望源码",
        "tooltip-ca-history": "该只页面老早个版本",
        "tooltip-ca-protect": "保护箇页",
        "tooltip-ca-delete": "删脱箇页",
        "tooltip-t-print": "箇页个打印版",
        "tooltip-t-permalink": "箇页当前版本个老世链接",
        "tooltip-ca-nstab-main": "望内容页",
-       "tooltip-ca-nstab-user": "æ\9f¥ç\9c\8b用户页",
-       "tooltip-ca-nstab-media": "æ\9f¥ç\9c\8b媒体页",
+       "tooltip-ca-nstab-user": "æ\9c\9b用户页",
+       "tooltip-ca-nstab-media": "æ\9c\9b媒体页",
        "tooltip-ca-nstab-special": "箇是特别页面,弗好编辑",
        "tooltip-ca-nstab-project": "望项目页",
        "tooltip-ca-nstab-image": "望文件页",
-       "tooltip-ca-nstab-mediawiki": "æ\9f¥ç\9c\8bç³»ç»\9f讯息",
+       "tooltip-ca-nstab-mediawiki": "æ\9c\9bç³»ç»\9fæ¶\88息",
        "tooltip-ca-nstab-template": "望模板",
-       "tooltip-ca-nstab-help": "æ\9f¥ç\9c\8b帮å¿\99页é\9d¢",
+       "tooltip-ca-nstab-help": "æ\9c\9b帮å¿\99页",
        "tooltip-ca-nstab-category": "望分类页",
        "tooltip-minoredit": "标作小编写",
        "tooltip-save": "保存侬个修改",
        "confirmemail_text": "该只wiki要求倷来拉用电子邮件服务之前验证电子邮件地址个有效性。揿底下只揿钮来发封确认信到倷电子邮箱。个封信里会有加密个链接。登倷个浏览器里向打开该只链接,确认倷个电子邮箱地址是有效个。",
        "confirmemail_send": "发送确认码",
        "confirmemail_sent": "确认电子邮件发出去哉。",
-       "confirmemail_success": "倷个电子邮箱地址已经通过确认哉。乃么倷好登录,享受倪维基百科哉。",
+       "confirmemail_success": "倷个电子邮箱地址已经通过确认哉。乃么倷好[[Special:UserLogin|登录]],享受伲网站哉。",
        "confirmemail_loggedin": "倷个电子邮件地址已经拨确认哉。",
        "confirmemail_subject": "{{SITENAME}}电子邮件地址确认",
        "confirmemail_body": "用IP地址$1嗰人(呒数是你侬),徕translatewiki.net里一个账号“$2”建起,用你侬个电子信箱地址。\n\n确认记箇账号是弗是你侬嘅,激活translatewiki.net里嗰电子信功能。用浏览器打开下向嗰链接:\n\n$3\n\n假使你侬*朆*注册过箇账号,揿下向嗰链接取消电子信确认:\n\n$5\n\n确认码会到$4过期。",
index 96a34da..dbcefa4 100644 (file)
        "actions": "Үүлдвр",
        "namespaces": "Нернә төрл",
        "variants": "Хүвлвр",
+       "navigation-heading": "Айллын цес",
        "errorpagetitle": "Эндү",
        "returnto": "«$1» тал хәрү одх.",
        "tagline": "{{SITENAME}} талас",
        "printableversion": "Барин бәәдл",
        "permalink": "Даңгин заалһ",
        "print": "Барлх",
+       "view": "Хәләвр",
        "edit": "Ясх",
        "create": "Бүтәх",
        "editthispage": "Эн халх ясх",
        "nstab-template": "Кевләр",
        "nstab-help": "Дөң",
        "nstab-category": "Әәшл",
+       "mainpage-nstab": "Нүр халх",
        "nosuchaction": "Иим үүлдвр уга",
        "nosuchactiontext": "URL'д заасн үүлдвр буру.\nТа URL орулад эндүрсн аль буру заалһар одсн маһд.\nДәкәд, эн {{SITENAME}} төслин эндү маһд.",
        "nosuchspecialpage": "Иим шишлң халх уга",
        "emailauthenticated": "Тана e-mail хайг $2 өдрт, $3 цагт батлсн.",
        "accountcreated": "Бичгдлһн бүтәв.",
        "loginlanguagelabel": "Келн: $1",
+       "pt-login": "Орлһн",
+       "pt-createaccount": "Бичгдлһн бүтәх",
        "changepassword": "Нууц үг сольлһн",
        "resetpass_header": "Бичгдлһнә нууц үг сольх",
        "oldpassword": "Көгшн нууц үг:",
        "notextmatches": "Халхсин бичәснд ирлцән уга",
        "prevn": "урдк {{PLURAL:$1|$1}}",
        "nextn": "дарук {{PLURAL:$1|$1}}",
+       "shown-title": "Халхар $1 аш үзүлх",
        "viewprevnext": "Хәләх ($1 {{int:pipe-separator}} $2) ($3)",
        "searchprofile-articles": "Зүүлс",
        "searchprofile-images": "Үзгдл-соңсвр",
        "searchprofile-advanced": "Нәрн",
        "searchprofile-articles-tooltip": "$1 дотр хәәх",
        "searchprofile-images-tooltip": "Боомг хәәх",
+       "searchprofile-everything-tooltip": "Хамг зокъял хәәх (күүндвр халх орлцулҗ)",
+       "searchprofile-advanced-tooltip": "Заасн нердин делкәст хәәх",
        "search-result-size": "$1 ({{PLURAL:$2|$2 үг|$2 үг|$2 үг}})",
        "search-redirect": "(туудг $1)",
        "search-section": "(«$1» салвр)",
        "grouppage-bot": "{{ns:project}}:Көдлгчүд",
        "grouppage-sysop": "{{ns:project}}:Закрачуд",
        "grouppage-bureaucrat": "{{ns:project}}:Нойнчуд",
+       "right-writeapi": "API бичхин төлә кергллт",
        "newuserlogpage": "Бичгдлһнә седкүл",
        "rightslog": "Демнәчна зөвин седкүл",
        "action-edit": "эн халх ясх",
        "minoreditletter": "б",
        "newpageletter": "Ш",
        "boteditletter": "к",
+       "rc-change-size-new": "Сольсн хөөн аһу $1 {{PLURAL:$1|байт}}",
        "newsectionsummary": "/* $1 */ Шин салвр",
        "rc-enhanced-expand": "Нәрн учр үзүлх",
        "rc-enhanced-hide": "Тодрха нуух",
        "filedesc": "Учр-утх",
        "fileuploadsummary": "Учр-утх:",
        "savefile": "Хадһлх",
-       "upload-success-subj": "Йовудта тәвллһн",
        "license": "Закан:",
        "license-header": "Закан:",
        "imgfile": "боомг",
        "imagelinks": "Боомг керглән",
        "linkstoimage": "Эн $1 халх эн боомгур заана:",
        "sharedupload": "Эн боомг $1 ормас. Териг талдан төсвд олзлҗ болх.",
+       "sharedupload-desc-here": "Эн боомг $1 талас, бус төслд керглҗ болх.\nБичлһнь [$2 боомгин бичлһнә халх] доракшан үзгднә.",
        "uploadnewversion-linktext": "Тер боомгин шин һарц тәвх",
        "randompage": "Уршг зүүл",
        "statistics": "То бүрткл",
        "tooltip-pt-mycontris": "Тана демнлһнә сеткүл",
        "tooltip-pt-login": "Та орсн күцх бәәнәт, болв кергтә биш.",
        "tooltip-pt-logout": "Һарх",
+       "tooltip-pt-createaccount": "Танд бичгдлһн бүтәҗ, дигләнд орхар сәәшгднә, эн даалhврго чигн",
        "tooltip-ca-talk": "Халхин дотрин туск меткән",
-       "tooltip-ca-edit": "Та Ñ\8dн Ñ\85алÑ\85иг Ñ\87иклÒ\97 Ñ\87аднаÑ\82.\nÐ\91Ñ\83йн Ð±Ð¾Ð»Ñ\82Ñ\85а, Ñ\85адһлһна ÐºÒ¯Ñ\80Ñ\82л Ñ\85Ó\99лÓ\99вÑ\80 Ð¾Ð»Ð·Ð»Ñ\82н.",
+       "tooltip-ca-edit": "Эн Ñ\85алÑ\85 Ñ\8fÑ\81Ñ\85",
        "tooltip-ca-addsection": "Шин хүв эклх",
        "tooltip-ca-viewsource": "Эн халх харссн бәәнә.\nТа энүнә медсн үзҗ чаднат.",
        "tooltip-ca-history": "Эн халхна шидрә чикллһн",
        "tooltip-ca-nstab-main": "Халхнь",
        "tooltip-ca-nstab-user": "Демнчна халхиг үзүлх",
        "tooltip-ca-nstab-media": "Боомгин халх үзх",
-       "tooltip-ca-nstab-special": "Эн көдлхнә халх. Та эниг чиклҗ чадхшв.",
+       "tooltip-ca-nstab-special": "Эн көдлхнә халх, эн ясгдшго.",
        "tooltip-ca-nstab-project": "Төслин халх",
        "tooltip-ca-nstab-image": "Боомгин халхиг",
        "tooltip-ca-nstab-mediawiki": "MediaWiki зәңгин халх",
        "file-info-size": "$1 × $2 цегтә, боомгин кемҗән: $3, MIME янз: $4",
        "file-nohires": "Икәр чинртә янз уга.",
        "svg-long-desc": "SVG боомг, $1 × $2 мет цегтә, боомгин кемҗән: $3",
-       "show-big-image": "Күцц чинр",
+       "show-big-image": "Эк боомг",
+       "show-big-image-preview": "Хәләврин аһу: $1.",
+       "show-big-image-other": "Бус нигтрл: $1.",
+       "show-big-image-size": "$1 × $2 цегтә",
        "file-info-gif-looped": "билцгсн",
        "bad_image_list": "Эн темдглһн кергтә:\n\nБүртклин мөчүд һанцхн оньгтан авх (мөрәд * эклцта).\nТүрүн мөрәнә заалһ - тәвх хөрсн зургин заалһ.\nДарук заалһуд эн мөрәд хаҗилһн болх (халхс зургиг орулҗ болх).",
        "metadata": "Мета өггцн",
        "metadata-help": "Эн боомг дәкәд өггцтә. Тер өггцн то камерар аль сканерар немсмн. Боомг бүтәлһнә хөөн чиклсн бәәхлә, зәрм кемҗәд одахн зургд әдл биш болх.",
        "metadata-expand": "Ик тодрхасиг үзүлх",
        "metadata-collapse": "Ик тодрхасиг бултулх",
-       "metadata-fields": "Эн җигсәмҗд нерлгдсн мета өггцин аһу, дүрслгч халхд герәсләр үзүлгдх, наадкснь бултулгдх.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-fields": "Эн бүртклд нерәдсн зургин мета то-дигин теегмүд мета то-дигин көснг эвкснд зургин халхт үзгднә. Наадк теегмүд таарсар нуугдх.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-imagewidth": "Өргн",
        "exif-imagelength": "Өндр",
        "exif-bitspersample": "Өңгин гүн",
        "specialpages-group-spam": "Спамас зевсг",
        "blankpage": "Хоосн халх",
        "intentionallyblankpage": "Тер  халх хоосн күслтә бәәнә.",
+       "tag-filter": "[[Special:Tags|Царадын]] шүр:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Царан|Царад}}]]: $2)",
        "htmlform-reset": "Сольлһиг уга кех",
        "htmlform-selectorother-other": "Талдан",
-       "rightsnone": "(уга)"
+       "logentry-newusers-create": "$1 демнәчин бичгдлһн бүтәгдв",
+       "rightsnone": "(уга)",
+       "searchsuggest-search": "Хәәвр"
 }
index b9093de..bc98445 100644 (file)
@@ -14,7 +14,8 @@
                        "გიორგიმელა",
                        "아라",
                        "Silovan",
-                       "David1010"
+                       "David1010",
+                       "Macofe"
                ]
        },
        "tog-underline": "რცხუეფიშ ათოღაზუა:",
        "myprivateinfoprotected": "თქვენ არ გაქვთ თქვენი პირადი ინფორმაციის შეცვლის ნებართვა.",
        "mypreferencesprotected": "თქვენ არ გაქვთ თქვენი კონფიგურაციის შეცვლის ნებართვა.",
        "ns-specialprotected": "გვერდების რედაქტირება სახელთა სივრცეში შეუძლებელია.",
-       "titleprotected": "შემდეგი გვერდის შექმნა აკრძალულია მომხმარებელ [[User:$1|$1]]-ს მიერ.\nმოცემულია შემდეგი ახსნა: „<em>$2</em>“.",
+       "titleprotected": "შემდეგი გვერდის შექმნა აკრძალულია მომხმარებელ [[User:$1|$1]]-ს მიერ.\nმოცემულია შემდეგი ახსნა: <em>$2</em>.",
        "filereadonlyerror": "ფაილი \"$1\" შეცვლა ვერ ხერხდება, რადგანაც ფაილის საცავი \"$2\" მხოლოდ კითხვის რეჟიმშია.\n\nადმინისტრატორი რომელმაც ის დაბლოკა მიუთითა შემდეგი მიზეზი: \"$3\".",
        "invalidtitle-knownnamespace": "დაუშვებელი სათაური სახელთა სივრცე \"$2\" და ტექსტი \"$3\"-თან",
        "invalidtitle-unknownnamespace": "დაუშვებელი სათაური უცნობი სახელთა სივრცის ნომერი $1 და ტექსტი \"$2\"-ით",
        "recentchanges-label-bot": "თე რედაქტირაფა ბოტიშ ნაღოლემი რე",
        "recentchanges-label-unpatrolled": "თე რედაქტირაფა დიო ხოლო ვა რე პატრულირაფირი",
        "recentchanges-label-plusminus": "თირაფეფიშ ზჷმა ბაიტეფს",
-       "recentchanges-legend-heading": "'''ლეგენდა:'''",
+       "recentchanges-legend-heading": "<strong>ლეგენდა:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (თაშნეშე ქოძირით [[Special:NewPages|ახალ ხასჷლეფიშ ერკებული]])",
        "rcnotefrom": "ქვემოთ {{PLURAL:$5|ნაჩვენებია ცვლილება|ნაჩვენებია ცვლილებები}} <strong>$3, $4</strong>-დან (ნაჩვენებია არაუმეტეს <strong>$1</strong>).",
        "rclistfrom": "ახალ თირაფეფიშ ძირაფა დოჭყაფილ $3 $2-შე",
        "upload-dialog-button-done": "ღოლამირჷ რე",
        "upload-dialog-button-save": "ჩუალა",
        "upload-dialog-button-upload": "ეხარგუა",
-       "upload-form-label-select-file": "გეგშაგორით ფაილი",
        "upload-form-label-infoform-title": "დეტალეფი",
        "upload-form-label-infoform-name": "ჯოხო",
        "upload-form-label-infoform-description": "ეჭარუა",
index c111104..d5f5776 100644 (file)
        "myprivateinfoprotected": "איר האט נישט קיין דערלויבניש צו רעדאקטירן אייער פריוואטע אינפארמאציע.",
        "mypreferencesprotected": "איר האט נישט קיין דערלויבניש צו רעדאקטירן אייערע פרעפערענצן.",
        "ns-specialprotected": "מען קען נישט רעדאגירן ספעציעלע בלעטער.",
-       "titleprotected": "דער טיטל איז געשיצט פון ווערן געשאפֿן דורך  [[User:$1|$1]].\nדי אורזאך איז  ''$2\".",
+       "titleprotected": "דער טיטל איז געשיצט פון ווערן געשאפֿן דורך  [[User:$1|$1]].\nדי אורזאך איז <em>$2</em>.",
        "filereadonlyerror": "נישט מעגלעך צו ענדערן די טעקע \"$1\" ווייל די טעקע רעפאזיטאריום  \"$2\" איז אין נאר־ליינען מצב.\n\nדער סיסאפ וואס האט זי פארשפארט האט געגעבן דעם הסבר:  \"$3\"",
        "invalidtitle-knownnamespace": "אומגילטירער טיטל מיט נאמענטייל \"$2\" און טעקסט \"$3\"",
        "invalidtitle-unknownnamespace": "אומגילטיקער טיטל מיט אומבאוואוסטן נאמענטייל נומער $1 און טעקסט \"$2\"",
        "newarticle": "(ניי)",
        "newarticletext": "איר זענט געקומען צו אַ בלאַט וואָס עקזיסטירט נאָך נישט!\nכדי שאַפֿן דעם בלאַט, קלאַפט אַרײַן טעקסט אין דעם קעסטל אונטן (זעט דעם [$1 הילף בלאַט] פֿאַר מער אינפֿארמאַציע).\nאויב איר זענט אַהערגעקומען בטעות, דרוקט דאָס '''Back''' קנעפל אין אײַער בלעטערער.",
        "anontalkpagetext": "----'''דאָס איז א רעדן בלאַט פון א אַן אַנאנימען באַניצער וואָס האט נאך נישט געשאַפֿן קיין קאנטע, אדער באניצט זיך נישט דערמיט. דערוועגן, מוזן מיר זיך באניצן מיט זיין IP אדרעס כדי אים צו אידענטיפיצירן. עס קען זיין אז עטלעכע אנדערע ניצן אויך דעם  IP אדרעס. אויב זענט איר אן אנאנימער באַניצער וואס שפירט אז איר האט באקומען מעלדונגען וואס זענען נישט שייך צו אייך, ביטע [[Special:UserLogin/signup|שאַפֿט א קאנטע]] אדער [[Special:UserLogin|טוט זיך אריינלאגירן]] כדי צו פארמיידן דאס אין די עתיד זיך פארמישן מיט אנדערע אַנאנימע באַניצערס.'''",
-       "noarticletext": "×\93ער×\95×\95×\99×\99×\9c ×\90×\99×\96 × ×\99ש×\98 ×¤×\90ַר×\94×\90×\9f ×§×\99×\99×\9f ×©×\95×\9d ×\98עקס×\98 ×\90×\99×\9f ×\93×¢×\9d ×\91×\9c×\90×\98.\n×\90×\99ר ×§×¢× ×\98 [[Special:Search/{{PAGENAME}}|×\96×\95×\9b×\9f ×\93×¢×\9d ×\91×\9c×\90×\98 ×\98×\99×\98×\9c]] ×\90×\99×\9f ×\90× ×\93ערע ×\91×\9c×¢×\98ער,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ×\96×\95×\9b×\9f ×\93×\99 ×¨×¢×\9c×¢×\95×\95×\90× ×\98×¢ ×\9c×\90×\92×\91×\99×\9bער],\n×\90×\93ער [{{fullurl:{{FULLPAGENAME}}|action=edit}} ×¨×¢×\93×\90ַק×\98×\99רן דעם בלאט]</span>.",
+       "noarticletext": "×\93ער×\95×\95×\99×\99×\9c ×\90×\99×\96 × ×\99ש×\98 ×¤×\90ַר×\94×\90×\9f ×§×\99×\99×\9f ×©×\95×\9d ×\98עקס×\98 ×\90×\99×\9f ×\93×¢×\9d ×\91×\9c×\90×\98.\n×\90×\99ר ×§×¢× ×\98 [[Special:Search/{{PAGENAME}}|×\96×\95×\9b×\9f ×\93×¢×\9d ×\91×\9c×\90×\98 ×\98×\99×\98×\9c]] ×\90×\99×\9f ×\90× ×\93ערע ×\91×\9c×¢×\98ער,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ×\96×\95×\9b×\9f ×\93×\99 ×¨×¢×\9c×¢×\95×\95×\90× ×\98×¢ ×\9c×\90×\92×\91×\99×\9bער],\n×\90×\93ער [{{fullurl:{{FULLPAGENAME}}|action=edit}} ×©×\90פֿן דעם בלאט]</span>.",
        "noarticletext-nopermission": "דערווײַל איז נישט פאַראַן קיין שום טעקסט אין דעם בלאַט.\nאיר קענט [[Special:Search/{{PAGENAME}}| זוכן דעם בלאט טיטל]] אין אנדערע בלעטער,\nאדער <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} נאָכזוכן די רעלעוואנטע לאגביכער]</span>., אבער איר זענט נישט ערלויבט צו שאפֿן דעם בלאט.",
        "missing-revision": "די רעוויזיע #$1 פונעם בלאט \"{{FULLPAGENAME}}\" עקזיסטירט נישט.\n\nדאס געשעט געוויינלעך פון פאלגן א פארעלטערטן היסטאריע לינק צו א בלאט וואס איז געווארן אויסגעמעקט.\nפרטים קען מען געפינען אינעם [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} אויסמעקונג לאגבוך].",
        "userpage-userdoesnotexist": "באניצער קאנטע \"$1\" איז נישט אײַנגעשריבן.\nקוקט איבער צי איר ווילט שאפֿן/רעדאקטירן דעם בלאט.",
        "undo-summary-username-hidden": "זײַט מבטל ווערסיע $1 פון א באהאלטענעם באניצער",
        "cantcreateaccounttitle": "מען קען נישט באשאפֿן קאנטע",
        "cantcreateaccount-text": "שאפֿן קאנטעס פון דעם IP אדרעס (<b>$1</b>) איז געווארן בלאקירט דורך [[User:$3|$3]]. די סיבה געגעבן פֿון $3 איז \"$2\".",
-       "cantcreateaccount-range-text": "שאפן קאנטעס פון IP אדרעסן אינעם אפשטאנד '''$1''', וואס נעמט אײַן אײַער IP אדרעס ('''$4'''), איז בלאקירט געווארן דורך [[User:$3|$3]].\n\nדער גרונט געגעבן פון $3 איז ''$2''",
+       "cantcreateaccount-range-text": "שאפן קאנטעס פון IP אדרעסן אינעם אפשטאנד <strong>$1</strong>, וואס נעמט אײַן אײַער IP אדרעס (<strong>$4</strong>), איז בלאקירט געווארן דורך [[User:$3|$3]].\n\nדער גרונט געגעבן פון $3 איז <em>$2</em>",
        "viewpagelogs": "װײַזן לאָג-ביכער פֿאַר דעם בלאַט",
        "nohistory": "נישטא קיין ענדערן היסטאריע פאר דעם בלאט.",
        "currentrev": "איצטיגע ווערסיע",
        "recentchanges-label-bot": "די רעדאַקטירונג האט אויסגעפירט א באט",
        "recentchanges-label-unpatrolled": "די רעדאקטירונג איז נאך נישט נאכגעקוקט",
        "recentchanges-label-plusminus": "בלאט גרייס געענדערט מיט דער צאל בייטן",
-       "recentchanges-legend-heading": "'''לעגענדע:'''",
+       "recentchanges-legend-heading": "<strong>לעגענדע:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (זעט אויך [[Special:NewPages|די רשימה פון נייע בלעטער]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "ווייזן",
index fc7cb89..91af0ce 100644 (file)
        "myprivateinfoprotected": "Ẹ kò ní àṣẹ láti ṣ'àtúnṣe ọ̀rọ̀ nípa yín.",
        "mypreferencesprotected": "Ẹ kò ní àṣẹ láti ṣ'àtúnṣe àwọn ìfẹ́ràn yín.",
        "ns-specialprotected": "Àtúnṣe kò ṣe é ṣe sí àwọn ojúewé pàtàkì.",
-       "titleprotected": "[[User:$1|$1]] ti dínà sí dídá àkọlé yìí. Ìdí rẹ̀ ni pé ''$2''.",
+       "titleprotected": "[[User:$1|$1]] ti dínà sí dídá àkọlé yìí. Ìdí rẹ̀ ni pé <em>$2</em>.",
        "filereadonlyerror": "Àtúnṣe kò ṣe é ṣe sí fáìlì \"$1\" nítorípé ibi-àkójọ fáìlì \"$2\" jẹ́ fún wíwò nìkàn.\n\nOlùṣeàmójútó tó típa ṣe àlàyé yìí: \"$3\".",
        "invalidtitle-knownnamespace": "Àkọlé àìyẹ tó ní orúkọààyè \"$2\" àti ìkọ̀rọ̀ \"$3\"",
        "invalidtitle-unknownnamespace": "Àkọlé àìyẹ tó ní nọ́mbà orúkọààyè àìmọ̀ \"$1\" àti ìkọ̀rọ̀ \"$2\"",
        "createaccountreason": "Ìdíẹ̀:",
        "createacct-reason": "Ìdí",
        "createacct-reason-ph": "Ìdí tí ẹ ṣe fẹ́ dá àkópamọ́ míràn",
-       "createacct-captcha": "Àyẹ̀wò àbò",
-       "createacct-imgcaptcha-ph": "Ẹ kọ ìkọ̀rọ̀ tí ẹ rí lókè",
        "createacct-submit": "Ìdá àkópamọ́ yín",
        "createacct-benefit-heading": "Àwọn ènìyàn bíi yín ni wọ́n dá {{SITENAME}}.",
        "createacct-benefit-body1": "{{PLURAL:$1|àtúnṣe|àwọn àtúnṣe}}",
        "passwordreset-emailtext-ip": "Ẹnìkan (bóyá ẹ̀yin ni, láti àdírẹ̀sì IP $1) tọrọ àtúntò ọ̀rọ̀ìpamọ́ yín fún {{SITENAME}} ($4). {{PLURAL:$3|Àkópamọ́|Àwọn àkópamọ́}} oníṣe ìsàlẹ̀ yìí ní ìbáṣe pọ̀ mọ́ àdírẹ̀sì e-mail yìí:\n\n$2\n\n{{PLURAL:$3|Ọ̀rọ̀ìpamọ́ onígbàdíẹ̀ yìí|Àwọn ọ̀rọ̀ìpamọ́ onígbàdíẹ̀ wọ̀nyí}} yíò dópin lẹ́yìn {{PLURAL:$5|ọjọ́ kan|ọjọ́ $5}}.\nẸ gbọ́dọ̀ lọ yan ọ̀rọ̀ìpamọ́ tuntun báyìí. Tóbá jẹ́ pé ẹ̀lòmíràn ló ṣe ìtọrọ yìí, tàbí tọ́bá jẹ́ pé ẹ ti rántí ọ̀rọ̀ìpamọ́ àtètèkọ́ṣe yín, tí ẹ kọ̀ sí fẹ́ yíipadà mọ́, ẹ lé ṣàìkàsí ìránṣẹ́ yìí, kí ẹ sì tẹ̀síwájú ní lo ọ̀rọ̀ìpamọ́ àtijọ́ yín.",
        "passwordreset-emailtext-user": "Oníṣe $1 lórí {{SITENAME}} tọrọ àtúntò ọ̀rọ̀ìpamọ́ yín fùn {{SITENAME}} ($4). {{PLURAL:$3|Àkópamọ́|Àwọn àkópamọ́}} oníṣe ìsàlẹ̀ yìí ní ìbáṣe pọ̀ mọ́ àdírẹ̀sì e-mail yìí:\n\n$2\n\n{{PLURAL:$3|Ọ̀rọ̀ìpamọ́ onígbàdíẹ̀ yìí|Àwọn ọ̀rọ̀ìpamọ́ onígbàdíẹ̀ wọ̀nyí}} yíò dópin lẹ́yìn {{PLURAL:$5|ọjọ́ kan|ọjọ́ $5}}.\nẸ gbọ́dọ̀ lọ yan ọ̀rọ̀ìpamọ́ tuntun báyìí. Tóbá jẹ́ pé ẹ̀lòmíràn ló ṣe ìtọrọ yìí, tàbí tọ́bá jẹ́ pé ẹ ti rántí ọ̀rọ̀ìpamọ́ àtètèkọ́ṣe yín, tí ẹ kọ̀ sí fẹ́ yíipadà mọ́, ẹ lé ṣàìkàsí ìránṣẹ́ yìí, kí ẹ sì tẹ̀síwájú ní lo ọ̀rọ̀ìpamọ́ àtijọ́ yín.",
        "passwordreset-emailelement": "Orúkọ oníṣe: \n$1\n\nỌ̀rọ̀ìpamọ́ ìgbàdíẹ̀: \n$2",
-       "passwordreset-emailsent": "E-mail àtúntò ọ̀rọ̀ìpamọ́ ti jẹ́ fífiránṣẹ́.",
+       "passwordreset-emailsentemail": "E-mail àtúntò ọ̀rọ̀ìpamọ́ ti jẹ́ fífiránṣẹ́.",
        "passwordreset-emailsent-capture": "E-mail àtúntò ọ̀rọ̀ìpamọ́ kan ti jẹ́ fífiránṣẹ́. Òhun nìyí nísàlẹ̀.",
        "passwordreset-emailerror-capture": "E-mail ìyípadà ọ̀rọ̀ìpamọ́ jẹ́ dídá, òhun lóhàn nísàlẹ̀ yìí, sùgbọ́n ìfiránṣẹ́ rẹ̀ sí {{GENDER:$2|oníṣe}} náà kùnà: $1",
        "changeemail": "Ìyípadà àdírẹ̀sì E-mail",
        "prefs-displayrc": "Ìfihàn àwọn àṣàyàn",
        "prefs-displaywatchlist": "Ìfihàn àwọn àṣàyàn",
        "prefs-diffs": "Àwọn ìyàtọ̀",
-       "email-address-validity-valid": "Àdírẹ́ẹ̀sì e-mail dà bí èyí tótọ́",
-       "email-address-validity-invalid": "Ẹ tẹ e-mail tótọ́",
        "userrights": "Ìmójútó àwọn ẹ̀tọ́ oníṣe",
        "userrights-lookup-user": "Àkóso àwọn àdìpò oníṣe",
        "userrights-user-editname": "Ẹ tẹ orúkọ oníṣe kan:",
        "right-blockemail": "Ìdínà oníṣe kan láti fi e-mail ránṣẹ́",
        "right-hideuser": "Ìdínà orúkọ oníṣe kan, ìbòmọ́lẹ̀ rẹ̀ kúrò ní ìgboro",
        "right-ipblock-exempt": "Fo àwọn ìdínà IP, ìdínà araẹni àti àwọn ìdínà àdìmọ́",
-       "right-proxyunbannable": "Fo àwọn ìdínà aláraẹni àwọn ẹ̀rọ-ìwọ̀fà ẹlọ̀míràn",
        "right-unblockself": "Ìmúkúrò ìdínà ara wọn",
        "right-protect": "Ìyípadà àwọn ìpele àbò àti àtúnṣe àwọn ojúewé aláàbò",
        "right-editprotected": "Àtúnṣe àwọn ojúewé aláàbò (láìsí àbò àjámọ́ra)",
        "recentchanges-label-bot": "Rọ́bọ́ọ̀tì ni ó ṣe àtúnṣe yìí",
        "recentchanges-label-unpatrolled": "Àtúnṣe yìí kò tí ì jẹ́ onísíṣọ́",
        "recentchanges-label-plusminus": "Iye bytes àtúnṣe sí ìtóbi ojúewé",
-       "recentchanges-legend-heading": "'''Ìtumọ̀:'''",
+       "recentchanges-legend-heading": "<strong>Ìtumọ̀:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ẹ tún wo [[Special:NewPages|àtòjọ àwọn ojúewé tuntun]])",
        "rcnotefrom": "Àwọn àtúnṣe láti ''''$2''' (títí dé '''$1''' hàn) lábẹ́.",
        "rclistfrom": "Àfihàn àwọn àtúnṣe tuntun nípa bíbẹ̀rẹ̀ láti $3 $2",
        "watchthisupload": "M'ójútó fáilì yìí",
        "filewasdeleted": "Fáìlì kan tó ní orúkọ yìí ti jẹ́ rírùsòkè tẹ́lẹ̀ tó sì ti jẹ́ píparẹ́ lẹ́yìn náà.\nẸ gbọ́dọ̀ yẹ $1 wò kí ẹ tó gbéra láti rù ú sókè lẹ́ẹ̀kan síi.",
        "filename-bad-prefix": "Orúkọ fáìlì tí ẹ̀ únrùsókè bẹ̀rẹ̀ pẹ̀lú '''\"$1\"''', tó jẹ́ orúkọ aláì-júwe tí únsábà jẹ́ fífikún fúnrara rẹ̀ látọwọ́ àwọn kámẹ́rà ẹlẹ́yọìka.\nẸ jọ̀wọ́ ẹ mú orúkọ ìjúwe tódáa fún fáìlì yín.",
-       "upload-success-subj": "Ìjásírere ìrùsókè",
-       "upload-success-msg": "Ìrùsókè yín láti [$2] ti jásírere. Ó ṣeéwò níbí: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Ìṣòro ìrùsókè",
-       "upload-failure-msg": "Ìṣòro kan wà pẹ̀lú fọ́ọ̀mù ìrùsókè yín [$2]:\n\n$1",
-       "upload-warning-subj": "Ìkìlọ̀ ìrùsókè",
-       "upload-warning-msg": "Ìṣòro kan wà pẹ̀lú ìrùsókè yín láti [$2]. Ẹ le padà sí orí [[Special:Upload/stash/$1|fọ́ọ́mù ìrùsókè]] láti ṣàtúnṣe ìṣòro náà.",
        "upload-proto-error": "Prótókólù àìtọ́",
        "upload-proto-error-text": "Ìrùsókè ọ̀ọ́kán pọndandan pé kí àwọn URL ó bẹ̀rẹ̀ pẹ̀lú <code>http://</code> tàbí <code>ftp://</code>.",
        "upload-file-error": "Àsiṣe ínú",
        "rollbackfailed": "Ìyípadà kùnà",
        "cantrollback": "Kò le dá àtúnṣe padà;\noníṣe tógbẹ̀yìn nìkan ni olùdá ojúewé yìí.",
        "alreadyrolled": "Kò le ṣe ìdápadà àtúnṣe tógbèyìn sí [[:$1]] látọwọ́ [[User:$2|$2]] ([[User talk:$2|ọ̀rọ̀]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); ẹlòmíràn ti ṣàtúnṣe tàbí ṣe ìdápadà ojúewé náà tẹ̀lẹ̀.\n\nÀtúnṣe tógbẹ̀yìn sí ojúewé náà wá látọwọ́ [[User:$3|$3]] ([[User talk:$3|ọ̀rọ̀]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Àkótán àtúnṣe náà jẹ́: \"''$1''\".",
+       "editcomment": "Àkótán àtúnṣe náà jẹ́: <em>$1</em>.",
        "revertpage": "Ìdápadà àwọn àtúnṣe ti [[Special:Contributions/$2|$2]] ([[User talk:$2|ọ̀rọ̀]]) sí àtúnyẹ̀wò tógbẹ̀yìn látọwó [[User:$1|$1]]",
        "revertpage-nouser": "Ìdápadà àwọn àtúnṣe ti (ọrúkọ oníṣe jẹ́ yíyọkúrò) sí àtúnyẹ̀wò tógbẹ̀yìn látọwọ́ [[User:$1|$1]]",
        "rollback-success": "Ìdápadà àwọn àtúnṣe ti $1;\njẹ́ yíyípadà sí àtúnyẹ̀wò tógbẹ̀yìn látọwọ́ $2.",
        "movenosubpage": "Ojúewé yìí kò ní àwọn abẹ́ojúewé.",
        "movereason": "Ìdíẹ̀:",
        "revertmove": "dápadà",
-       "delete_and_move": "Parẹ́ kí o sì yípò",
        "delete_and_move_text": "== Ìparẹ́ pọndandan ==\nOjúewé àdésí \"[[:$1]]\" wà tẹ́lẹ̀tẹ́lẹ̀.\nṢé ẹ fẹ́ paárẹ́ láti sínà fún ìyípò?",
        "delete_and_move_confirm": "Bẹ́ẹ̀ni, pa ojúewé náà rẹ́",
        "delete_and_move_reason": "Jẹ́ píparẹ́ láti baà fi ayè lẹ̀ fún ìyípòdà láti \"[[$1]]\"",
index db12eef..6d63e20 100644 (file)
@@ -25,7 +25,8 @@
                        "Liuxinyu970226",
                        "Yueman",
                        "CRCHF",
-                       "Shinjiman"
+                       "Shinjiman",
+                       "Macofe"
                ]
        },
        "tog-underline": "連結加底線:",
        "october-date": "10月$1號",
        "november-date": "11月$1號",
        "december-date": "12月$1號",
+       "period-am": "AM",
+       "period-pm": "PM",
        "pagecategories": "屬於$1類",
        "category_header": "\"$1\" 類中嘅版",
        "subcategories": "細類",
        "morenotlisted": "爾張清單重未完成。",
        "mypage": "版",
        "mytalk": "傾偈",
-       "anontalk": "å\90\8cå\91¢å\80\8b IP å\82¾å\81\88",
+       "anontalk": "傾偈",
        "navigation": "導覽",
        "and": "同埋",
        "qbfind": "搵嘢",
        "myprivateinfoprotected": "你無權改呢版你嘅私人資料。",
        "mypreferencesprotected": "你無權改呢版你嘅個人設定。",
        "ns-specialprotected": "特別頁係唔可以編輯嘅。",
-       "titleprotected": "呢個標題已經俾[[User:$1|$1]]保護咗防止去開。原因係''$2''。",
+       "titleprotected": "呢個標題已經俾[[User:$1|$1]]保護咗防止去開。原因係<em>$2</em>。",
        "filereadonlyerror": "改唔到檔案 \"$1\",因為檔案庫 \"$2\" 而家係唯讀。\n\n負責鎖嘅管理員嘅解釋:\"$3\"。",
        "invalidtitle-knownnamespace": "名域 \"$2\" 同版名 \"$3\" 無效嘅標題",
        "invalidtitle-unknownnamespace": "未知名域號碼 \"$1\" 同版名 \"$2\" 無效嘅標題",
        "undo-summary-username-hidden": "取消匿埋咗嘅用戶嘅修改版本 $1",
        "cantcreateaccounttitle": "唔可以開新戶口",
        "cantcreateaccount-text": "由呢個IP地址 ('''$1''') 開嘅新戶口已經被[[User:$3|$3]]封鎖。\n\n當中俾$3封鎖嘅原因係''$2''",
-       "cantcreateaccount-range-text": "由呢個IP地址範圍'''$1'''(包括你個IP '''$4''')開嘅新戶口已經畀[[User:$3|$3]]封鎖咗。\n\n$3畀嘅理由係''$2''",
+       "cantcreateaccount-range-text": "由呢個IP地址範圍<strong>$1</strong>(包括你個IP <strong>$4</strong>)開嘅新戶口已經畀[[User:$3|$3]]封鎖咗。\n\n$3畀嘅理由係<em>$2</em>",
        "viewpagelogs": "睇呢頁嘅日誌",
        "nohistory": "呢版冇歷史。",
        "currentrev": "最新嘅修訂",
        "right-blockemail": "封鎖用戶唔畀寄電郵",
        "right-hideuser": "封鎖用戶名,對公眾隱藏",
        "right-ipblock-exempt": "繞過IP封鎖、自動封鎖同埋範圍封鎖",
-       "right-proxyunbannable": "繞過Proxy嘅自動封鎖",
        "right-unblockself": "解封自己",
        "right-protect": "改保護等級同埋編輯流水保護版",
        "right-editprotected": "用「{{int:protect-level-sysop}}」權限去編輯保護版",
        "recentchanges-label-bot": "呢次編輯係由機械人進行",
        "recentchanges-label-unpatrolled": "呢次編輯重未巡查過",
        "recentchanges-label-plusminus": "頁面位元組大細變化",
-       "recentchanges-legend-heading": "'''標記:'''",
+       "recentchanges-legend-heading": "<strong>標記:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (睇埋[[Special:NewPages|新開版]])",
        "recentchanges-submit": "顯示",
        "rcnotefrom": "下面嘅{{PLURAL:$5|改動}}由 <strong>$3 $4</strong> 開始(顯示到'''$1''')。",
        "watchthisupload": "監視呢個檔案",
        "filewasdeleted": "呢個檔案所使用嘅名曾經上載後,跟住就刪除咗。你應該響重新上載佢之前檢查吓$1。",
        "filename-bad-prefix": "你上載嘅檔名係以'''\"$1\"'''做開頭,通常呢種無含意嘅檔名係響數碼相機度自動編排。請響你個檔案度揀過一個更加有意義嘅檔名。",
-       "upload-success-subj": "成功嘅上載",
-       "upload-success-msg": "你響[$2]嘅上載已經成功,可以喺呢度搵到:[[:{{ns:file}}:$1]]。",
-       "upload-failure-subj": "上載出咗問題",
-       "upload-failure-msg": "你響[$2]嘅上載出現咗問題:\n\n$1",
-       "upload-warning-subj": "上載警告",
-       "upload-warning-msg": "你響[$2]嘅上載出咗問題。你可以返去[[Special:Upload/stash/$1|上載表格]]並更正問題。",
        "upload-proto-error": "唔正確嘅協議",
        "upload-proto-error-text": "遙遠上載需要一個以 <code>http://</code> 或者 <code>ftp://</code> 作為開頭嘅URL。",
        "upload-file-error": "內部錯誤",
        "upload-dialog-button-done": "搞掂",
        "upload-dialog-button-save": "儲存",
        "upload-dialog-button-upload": "上載",
-       "upload-form-label-select-file": "揀檔案",
        "upload-form-label-infoform-title": "細節",
        "upload-form-label-infoform-name": "名",
        "upload-form-label-infoform-description": "描述",
        "wlheader-showupdated": "標'''粗體字'''嘅頁響你上次嚟之後畀人改過。",
        "wlnote": "下面係直到$3 $4為止,最近'''$2'''個鐘之內嘅最新$1次修改。",
        "wlshowlast": "顯示最近 $1 個鐘 $2 日",
-       "watchlistall2": "全部",
        "watchlist-hide": "收埋",
        "watchlist-submit": "顯示",
        "wlshowtime": "顯示最後:",
        "rollbackfailed": "反轉唔到",
        "cantrollback": "反轉唔到;上一位貢獻者係唯一修改過呢版嘅人。",
        "alreadyrolled": "無法反轉[[User:$2|$2]]([[User talk:$2|留言]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])對[[:$1]]嘅最後編輯;有人已經修改過或者反轉咗呢個頁面。\n\n上次對呢版嘅編輯係由[[User:$3|$3]]([[User talk:$3|留言]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])做嘅。",
-       "editcomment": "編輯摘要係:「'''$1'''」。",
+       "editcomment": "編輯摘要係:<em>$1</em>。",
        "revertpage": "已經反轉由[[Special:Contributions/$2|$2]]([[User talk:$2|對話]])所寫嘅編輯到[[User:$1|$1]]嘅最後修訂。",
        "revertpage-nouser": "已經反轉咗由收埋咗嘅用戶名所寫嘅編輯,到[[User:$1|$1]]所寫嘅最後修訂版本。",
        "rollback-success": "已經反轉由$1所寫嘅編輯;恢復到$2嘅最後修訂。",
        "javascripttest-qunit-intro": "睇 mediawiki.org 嘅 [$1 測試文檔]。",
        "tooltip-pt-userpage": "你嘅用戶頁",
        "tooltip-pt-anonuserpage": "你編輯呢個IP嘅對應用戶頁",
-       "tooltip-pt-mytalk": "嘅對話頁",
+       "tooltip-pt-mytalk": "{{GENDER:|你}}嘅對話頁",
        "tooltip-pt-anontalk": "對於嚟自呢一個IP地址編輯嘅討論",
-       "tooltip-pt-preferences": "安排與架生",
+       "tooltip-pt-preferences": "{{GENDER:|你}}嘅自訂喜好",
        "tooltip-pt-watchlist": "你所監視嘅頁面更改一覽",
-       "tooltip-pt-mycontris": "嘅貢獻一覽",
+       "tooltip-pt-mycontris": "{{GENDER:|你}}嘅貢獻一覽",
        "tooltip-pt-login": "建議你去登入;但係唔係一定嘅",
        "tooltip-pt-logout": "登出",
        "tooltip-pt-createaccount": "建議你開返個戶口簽到,不過唔做都無所謂。",
        "tooltip-t-recentchangeslinked": "喺呢個頁面連出嘅頁面更改",
        "tooltip-feed-rss": "呢一頁嘅RSS集合",
        "tooltip-feed-atom": "呢一頁嘅Atom集合",
-       "tooltip-t-contributions": "睇吓呢個用戶嘅貢獻一覽",
+       "tooltip-t-contributions": "{{GENDER:$1|呢個用戶}}嘅貢獻一覽",
        "tooltip-t-emailuser": "寄封電子郵件畀呢一位用戶",
        "tooltip-t-info": "更多關於呢版嘅資料",
        "tooltip-t-upload": "上載檔案",
        "log-name-pagelang": "改語言紀錄",
        "log-description-pagelang": "呢個係改語言嘅紀錄。",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (可以用)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (唔可以用)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>唔可以用</strong>)",
        "mediastatistics": "媒體統計",
        "mediastatistics-table-mimetype": "MIME類型",
        "mediastatistics-table-extensions": "可能嘅格式",
index 8b30d44..ac41f0c 100644 (file)
@@ -4,7 +4,9 @@
                        "NJ",
                        "Ooswesthoesbes",
                        "아라",
-                       "Robin0van0der0vliet"
+                       "Robin0van0der0vliet",
+                       "Macofe",
+                       "Robin van der Vliet"
                ]
        },
        "tog-underline": "Lienks onderstreepn:",
        "cascadeprotected": "Deêze pagina kan nie bewerkt worn, omda 't een is openomen in de volhende {{PLURAL:$1|pagina|pagina's}} die beveiligd {{PLURAL:$1|is|zien}} mie de cascaode-optie:\n$2",
        "namespaceprotected": "Je ei hin rechen om pagina's in de naemruumte '''$1''' te bewerken.",
        "ns-specialprotected": "Pagina's in de naemruumte \"{{ns:special}}\" kunn'n nie bewerkt worn.",
-       "titleprotected": "'t Anmaeken van deêze pagina is beveiligd deur [[User:$1|$1]].\nDe heheven reeën is ''$2''.",
+       "titleprotected": "'t Anmaeken van deêze pagina is beveiligd deur [[User:$1|$1]].\nDe heheven reeën is <em>$2</em>.",
        "logouttext": "'''Je bin noe ofemeld.'''\n\nJe kan {{SITENAME}} noe anoniem gebruken of wee anmelden as dezelven of een aore gebruker.\nMeuhlijk worn nog een antal pagina's weereheven asof a je anemeld bin totda je de cache van je browser leeg.",
        "yourname": "Gebrukersnaem",
        "userlogin-yourname": "Gebrukersnaem",
index 54bee89..ea51fc9 100644 (file)
        "myprivateinfoprotected": "您没有权限编辑您的私人信息。",
        "mypreferencesprotected": "您没有权限来编辑您的个人设置。",
        "ns-specialprotected": "特殊页面不可编辑。",
-       "titleprotected": "此标题已被[[User:$1|$1]]保护以防止创建。理由是“<em>$2</em>”。",
+       "titleprotected": "此标题已被[[User:$1|$1]]保护以防止创建。理由是<em>$2</em>。",
        "filereadonlyerror": "因为媒体库“$2”处于只读模式而无法修改文件“$1”。\n\n锁定数据库的系统管理员做出如下解释:“$3”。",
        "invalidtitle-knownnamespace": "使用名字空间“$2”和文本“$3”的无效标题",
        "invalidtitle-unknownnamespace": "使用未知名字空间编号$1和文本“$2”的无效标题",
        "nocookieslogin": "{{SITENAME}}使用Cookie实现用户登录。您已停用Cookie。请启用Cookie后再试。",
        "nocookiesfornew": "该用户账户未被创建,我们不能确认它的来源。请确保你已启用Cookie,刷新本页后再试。",
        "noname": "未指定有效的用户名。",
-       "loginsuccesstitle": "登录成功",
+       "loginsuccesstitle": "已登录",
        "loginsuccess": "<strong>您现在已经以\"$1\"的身份登录了{{SITENAME}}。</strong>",
        "nosuchuser": "没有名为“$1”的用户。用户名区分大小写。请检查你的拼写或[[Special:UserLogin/signup|创建新账户]]。",
        "nosuchusershort": "没有名为“$1”的用户。请检查你的拼写。",
        "createaccount-title": "在{{SITENAME}}创建新账户",
        "createaccount-text": "有人在{{SITENAME}}中利用您的邮箱创建了一个名为 \"$2\" 的新帐户($4),密码是 \"$3\" 。您应该立即登录并更改密码。\n\n如果该账户创建错误的话,您可以忽略此信息。",
        "login-throttled": "你最近尝试登录的次数过多。请等待$1后再试。",
-       "login-abort-generic": "登录失败 - 已终止",
+       "login-abort-generic": "您的登录失败 - 已终止",
        "login-migrated-generic": "您的账户已被迁移,并且您的用户名在此wiki不再存在。",
        "loginlanguagelabel": "语言:$1",
        "suspicious-userlogout": "注销请求被拒绝,因为它似乎是由有设计缺陷的浏览器或缓存代理发出的。",
        "botpasswords-insert-failed": "无法添加机器人名“$1”。它是否已添加?",
        "botpasswords-update-failed": "无法更新机器人名“$1”。它是否已删除?",
        "botpasswords-created-title": "机器人密码已创建",
-       "botpasswords-created-body": "机器人密码“$1”已成功更新。",
+       "botpasswords-created-body": "用于用户“$2”的机器人名称“$1”的机器人密码已创建。",
        "botpasswords-updated-title": "机器人密码已更新",
-       "botpasswords-updated-body": "机器人密码“$1”已成功更新。",
+       "botpasswords-updated-body": "用于用户“$2”的机器人名称“$1”的机器人密码已更新。",
        "botpasswords-deleted-title": "机器人密码已删除",
-       "botpasswords-deleted-body": "机器人密码“$1”已删除。",
+       "botpasswords-deleted-body": "用于用户“$2”的机器人名称“$1”的机器人密码已删除。",
        "botpasswords-newpassword": "用于登录<strong>$1</strong>的新密码是<strong>$2</strong>。<em>请记住它以备今后参考。</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider不可用。",
        "botpasswords-restriction-failed": "机器人密码限制阻止此次登录。",
        "newarticle": "(新页面)",
        "newarticletext": "您点击了一个尚不存在的页面的链接。要创建该页面,请在下面的编辑框中输入内容(更多信息请见[$1 帮助页面])。如果您是错误地进入了此页面,请点击您的浏览器的<strong>返回</strong>按钮。",
        "anontalkpagetext": "----\n<em>这是一个还未建立账户的匿名用户的讨论页, 因此我们只能用IP地址来与他或她联络。</em>该IP地址可能由几名用户共享。如果您是一名匿名用户并认为此页上的评语与您无关,请[[Special:UserLogin/signup|创建新账户]]或[[Special:UserLogin|登录]]以避免在未来与其他匿名用户混淆。",
-       "noarticletext": "本页面目前没有内容。您可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索本页标题]]、<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 编辑本页面]。</span>",
+       "noarticletext": "本页面目前没有内容。您可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索本页标题]]、<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 创建本页面]</span>。",
        "noarticletext-nopermission": "本页面目前没有内容。您可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索本页标题]]或<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志]</span>,但您没有权限创建本页面。",
        "missing-revision": "“{{FULLPAGENAME}}”的版本#$1不存在。\n\n这通常是因为进入了一个已被删除的页面的历史链接。\n详细信息可以在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中找到。",
        "userpage-userdoesnotexist": "用户账户“$1”没有注册。请在创建/编辑本页前检查。",
        "expensive-parserfunction-category": "有过多高开销解析器函数调用的页面",
        "post-expand-template-inclusion-warning": "<strong>警告:</strong>包含模板大小过大。\n一些模板将不会包含。",
        "post-expand-template-inclusion-category": "模板包含上限已经超过的页面",
-       "post-expand-template-argument-warning": "<strong>警告:</strong>本页面包含至少一个模板参数有过大扩展大小。这些参数会被略过。",
+       "post-expand-template-argument-warning": "<strong>警告:</strong>本页面包含至少一个展开后过大的模板参数。这些参数会被忽略。",
        "post-expand-template-argument-category": "含有略过模板参数的页面",
        "parser-template-loop-warning": "检查到模板循环:[[$1]]",
        "parser-template-recursion-depth-warning": "模板递归深度越限($1)",
        "undo-summary-username-hidden": "取消由一匿名用户所作的版本$1",
        "cantcreateaccounttitle": "无法创建账户",
        "cantcreateaccount-text": "从该IP地址(<strong>$1</strong>)创建账户已被[[User:$3|$3]]禁止。\n\n$3的理由是<em>$2</em>",
-       "cantcreateaccount-range-text": "从该IP地址段'''$1'''的账户创建已被[[User:$3|$3]]禁止,而这也包括了您的IP地址('''$4''')。\n\n$3给出的原因是 $2。",
+       "cantcreateaccount-range-text": "从该IP地址段<strong>$1</strong>的账户创建已被[[User:$3|$3]]禁止,而这也包括了您的IP地址(<strong>$4</strong>)。\n\n$3给出的原因是<em>$2</em>",
        "viewpagelogs": "查看该页面的日志",
        "nohistory": "本页面没有编辑历史记录。",
        "currentrev": "最后版本",
        "revdelete-unsuppress": "在已恢复的版本中移除限制",
        "revdelete-log": "原因:",
        "revdelete-submit": "应用于选中的{{PLURAL:$1|版本}}",
-       "revdelete-success": "版本可见性更新成功。",
+       "revdelete-success": "版本可见性已更新。",
        "revdelete-failure": "版本可见性无法更新:\n$1",
-       "logdelete-success": "事件的可见性已经成功设置。",
+       "logdelete-success": "日志可见性已设置。",
        "logdelete-failure": "事件的可见性无法设置:\n$1",
        "revdel-restore": "更改可见性",
        "pagehist": "页面历史",
        "userrights-changeable-col": "您可以更改的用户组",
        "userrights-unchangeable-col": "您不能更改的用户组",
        "userrights-conflict": "用户权限的更改存在冲突!请检查并确认您的更改。",
-       "userrights-removed-self": "您已成功删除您自己的权利。因此,您不再能够访问此页。",
+       "userrights-removed-self": "您已删除您自己的权利。因此,您不再能够访问此页。",
        "group": "用户组:",
        "group-user": "用户",
        "group-autoconfirmed": "自动确认用户",
        "recentchanges-label-bot": "该编辑由机器人执行",
        "recentchanges-label-unpatrolled": "该编辑尚未巡查",
        "recentchanges-label-plusminus": "该页面字节数的前后变化",
-       "recentchanges-legend-heading": "'''说明:'''",
+       "recentchanges-legend-heading": "<strong>说明:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}}(见[[Special:NewPages|新页面列表]])",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "显示",
        "recentchangeslinked-page": "页面名称:",
        "recentchangeslinked-to": "显示链到所给出的页面",
        "recentchanges-page-added-to-category": "[[:$1]]已添加至分类",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]]及其他{{PLURAL:$2|$2个页面}}已添加至分类",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]]及[[Special:WhatLinksHere/$1|其他{{PLURAL:$2|$2个页面}}]]已添加至分类",
        "recentchanges-page-removed-from-category": "[[:$1]]已从分类中移除",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]]及其他{{PLURAL:$2|$2个页面}}已从分类中移除",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]]及[[Special:WhatLinksHere/$1|其他{{PLURAL:$2|$2个页面}}]]已从分类中移除",
        "autochange-username": "MediaWiki自动化更改",
        "upload": "上传文件",
        "uploadbtn": "上传文件",
        "backend-fail-read": "找不到文件“$1”。",
        "backend-fail-create": "无法写入文件 $1 。",
        "backend-fail-maxsize": "无法写入文件“$1”,因为它大于$2字节。",
-       "backend-fail-readonly": "“$1”存储后端目前在只读模式,因为:“<em>$2</em>”",
+       "backend-fail-readonly": "“$1”存储后端目前在只读模式,因为:<em>$2</em>",
        "backend-fail-synced": "文件\"$1\"在内部存储后端之中处于不一致状态",
        "backend-fail-connect": "无法连接到存储后端“$1。",
        "backend-fail-internal": "存储后端“$1”发生了一个未知错误。",
        "uploadstash-summary": "这个页面提供已经上传(或者上传中)但未发布到wiki之文件存取。这些文件除了上传的用户之外不会被其他人可见。",
        "uploadstash-clear": "清除贮藏文件",
        "uploadstash-nofiles": "您没有被隐藏的文件。",
-       "uploadstash-badtoken": "该操作执行失败,可能是因为你的编辑凭证已过期。请重试。",
-       "uploadstash-errclear": "清除文件不成功。",
+       "uploadstash-badtoken": "执行对应操作失败。可能是因为您的编辑凭证已过期。请重试。",
+       "uploadstash-errclear": "清除文件失败。",
        "uploadstash-refresh": "更新文件列表",
        "invalid-chunk-offset": "无效区块偏移量",
        "img-auth-accessdenied": "拒绝访问",
-       "img-auth-nopathinfo": "PATH_INFO缺失。\n您的服务器尚未设置传送该信息。\n它可能基于CGI,因而不支持img_auth。\n请参见 [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization 图片授权]。",
+       "img-auth-nopathinfo": "PATH_INFO缺失。\n您的服务器尚未设置传送该信息。\n它可能基于CGI,因而不支持img_auth。\n请参见https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization。",
        "img-auth-notindir": "在已设置的上传目录中找不到请求的路径。",
        "img-auth-badtitle": "无法为“$1”创建合法的标题。",
        "img-auth-nologinnWL": "您尚未登录,且“$1”不在白名单上。",
        "alllogstext": "所有{{SITENAME}}公开日志的联合展示。您可以通过选择日志类型、输入用户名(区分大小写)或相关页面(区分大小写)筛选日志条目。",
        "logempty": "在日志中不存在匹配项。",
        "log-title-wildcard": "搜索以该文字开头的标题",
-       "showhideselectedlogentries": "æ\98¾ç¤º/é\9a\90è\97\8fæ\89\80é\80\89æ\97¥å¿\97项",
+       "showhideselectedlogentries": "æ\9b´æ\94¹é\80\89å®\9aæ\97¥å¿\97è®°å½\95ç\9a\84å\8f¯è§\81æ\80§",
        "log-edit-tags": "编辑选定日志记录的标签",
        "checkbox-select": "选择:$1",
        "checkbox-all": "全部",
        "delete-toobig": "这个页面有一个十分大量的编辑历史,超过$1个版本。删除此类页面的动作已经被限制,以防止在{{SITENAME}}上的意外扰乱。",
        "delete-warning-toobig": "这个页面有一个十分大量的编辑历史,超过$1个版本。删除它可能会扰乱{{SITENAME}}的数据库操作;在继续此动作前请小心。",
        "deleteprotected": "您不能删除此页面因为它被保护。",
-       "deleting-backlinks-warning": "'''警告:'''有[[Special:WhatLinksHere/{{FULLPAGENAME}}|其他页面]]链接至或包含您要删除的页面。",
+       "deleting-backlinks-warning": "<strong>警告:</strong>有[[Special:WhatLinksHere/{{FULLPAGENAME}}|其他页面]]链接至或包含您要删除的页面。",
        "rollback": "回退编辑",
        "rollbacklink": "回退",
        "rollbacklinkcount": "回退$1次编辑",
        "rollbackfailed": "回退失败",
        "cantrollback": "无法恢复编辑,最后贡献者是该页面的唯一作者。",
        "alreadyrolled": "无法回退[[User:$2|$2]]([[User talk:$2|讨论]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])对[[:$1]]的编辑,其他人已经编辑或者回退了该页。\n\n本页最后的编辑者是[[User:$3|$3]]([[User talk:$3|讨论]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])。",
-       "editcomment": "编辑摘要:“''$1''”。",
+       "editcomment": "编辑摘要:<em>$1</em>。",
        "revertpage": "恢复[[Special:Contributions/$2|$2]]([[User talk:$2|讨论]])的编辑至[[User:$1|$1]]的最后版本",
        "revertpage-nouser": "恢复隐藏用户的编辑至{{GENDER:$1|[[User:$1|$1]]}}的最后版本",
        "rollback-success": "已恢复$1的编辑,更改回$2的最后版本。",
        "changecontentmodel-title-label": "页面标题",
        "changecontentmodel-model-label": "新的内容模型",
        "changecontentmodel-reason-label": "原因:",
+       "changecontentmodel-submit": "更改",
        "changecontentmodel-success-title": "内容模型已更改",
        "changecontentmodel-success-text": "[[:$1]]的内容类型被更改。",
        "changecontentmodel-cannot-convert": "[[:$1]]上的内容不能转换为$2的一个类型。",
        "changecontentmodel-nodirectediting": "$1内容模型不支持直接编辑",
        "log-name-contentmodel": "内容模型更改日志",
        "log-description-contentmodel": "与一个页面的内容模型相关的活动",
+       "logentry-contentmodel-new": "$1已使用非默认的内容模型“$5”{{GENDER:$2|创建}}页面$3",
        "logentry-contentmodel-change": "$1将页面$3的内容模型从“$4”{{GENDER:$2|更改}}为“$5”",
        "logentry-contentmodel-change-revertlink": "回退",
        "logentry-contentmodel-change-revert": "回退",
        "ipb-hardblock": "阻止登录用户使用该IP地址编辑",
        "ipbcreateaccount": "阻止创建新账号",
        "ipbemailban": "阻止用户发送电子邮件",
-       "ipbenableautoblock": "自动封禁该用户最后使用的IP地址,以及他们随后试图用于编辑的所有IP地址",
+       "ipbenableautoblock": "自动封禁该用户最后使用的IP地址,以及随后试图用于编辑的所有IP地址",
        "ipbsubmit": "封禁该用户",
        "ipbother": "其它时间:",
        "ipboptions": "2小时:2 hours,1天:1 day,3天:3 days,1周:1 week,2周:2 weeks,1个月:1 month,3个月:3 months,6个月:6 months,1年:1 year,不限期:infinite",
        "ipb_already_blocked": "“$1”已被封禁。",
        "ipb-needreblock": "$1已被封禁。您是否想更改封禁设置?",
        "ipb-otherblocks-header": "其他{{PLURAL:$1|封禁}}",
-       "unblock-hideuser": "您无法取消封禁该用户,因为他们的用户名已被隐藏。",
+       "unblock-hideuser": "您无法解封该用户,因为其用户名已被隐藏。",
        "ipb_cant_unblock": "错误:找不到封禁ID$1。可能已经解除封禁。",
        "ipb_blocked_as_range": "错误:IP地址$1未被直接封禁,故无法解除封禁。然而,它位于IP地址段$2的封禁范围内,后者可被解除封禁。",
        "ip_range_invalid": "无效的IP地址段。",
        "javascripttest-pagetext-skins": "选择外观来运行测试:",
        "javascripttest-qunit-intro": "请见mediawiki.org的[$1 测试说明文件]。",
        "tooltip-pt-userpage": "{{GENDER:|您的用户}}页",
-       "tooltip-pt-anonuserpage": "用于编辑的IP地址的用户页面",
+       "tooltip-pt-anonuserpage": "用于编辑的IP地址的用户页面",
        "tooltip-pt-mytalk": "{{GENDER:|您}}的讨论页面",
        "tooltip-pt-anontalk": "有关本IP地址的编辑的讨论",
        "tooltip-pt-preferences": "{{GENDER:|您}}的设置",
        "tooltip-ca-talk": "关于内容页面的讨论",
        "tooltip-ca-edit": "编辑本页",
        "tooltip-ca-addsection": "开始新段落",
-       "tooltip-ca-viewsource": "本页面受到保护。\n您可以查看其源代码",
+       "tooltip-ca-viewsource": "本页面受到保护。您可以查看其源代码",
        "tooltip-ca-history": "本页面过去的版本",
        "tooltip-ca-protect": "保护本页",
        "tooltip-ca-unprotect": "更改本页面的保护",
        "tags-delete-not-allowed": "扩展定义的标签不能被删除,除非该扩展明确允许。",
        "tags-delete-not-found": "标签“$1”不存在。",
        "tags-delete-too-many-uses": "“$1”标签已应用到超过$2个修订版本,这意味着它不能被删除。",
-       "tags-delete-warnings-after-delete": "标签“$1”已成功删除,但遇到了以下{{PLURAL:$2|警告}}:",
+       "tags-delete-warnings-after-delete": "标签“$1”已删除,但遇到了以下{{PLURAL:$2|警告}}:",
        "tags-activate-title": "激活标签",
        "tags-activate-question": "您将要激活标签“$1”。",
        "tags-activate-reason": "原因:",
        "tags-edit-revision-legend": "从{{PLURAL:$1|此|所有$1个}}修订版本添加或移除标签",
        "tags-edit-logentry-legend": "从{{PLURAL:$1|此日志记录|所有$1个日志记录}}添加或移除标签",
        "tags-edit-existing-tags": "现有标签:",
-       "tags-edit-existing-tags-none": "''无''",
+       "tags-edit-existing-tags-none": "<em>无</em>",
        "tags-edit-new-tags": "新标签:",
        "tags-edit-add": "添加这些标签:",
        "tags-edit-remove": "移除这些标签:",
        "tags-edit-reason": "原因:",
        "tags-edit-revision-submit": "将更改应用至{{PLURAL:$1|此|$1个}}修订版本",
        "tags-edit-logentry-submit": "将更改应用至{{PLURAL:$1|此日志记录|$1个日志记录}}",
-       "tags-edit-success": "更改已成功应用。",
+       "tags-edit-success": "更改已应用。",
        "tags-edit-failure": "更改无法被应用:\n$1",
        "tags-edit-nooldid-title": "无效目标版本",
        "tags-edit-nooldid-text": "您尚未指定任何要执行此功能的目标版本,或者所指定的版本不存在。",
        "default-skin-not-found": "天哪!您在<code dir=\"ltr\">$wgDefaultSkin</code>定义的wiki默认皮肤<code>$1</code>不可用。\n\n您的安装版本看起来需要包含以下{{PLURAL:$4|皮肤}}。参见MediaWiki官网手册[https://www.mediawiki.org/wiki/Manual:Skin_configuration “皮肤配置”]获取如何启用{{PLURAL:$4|它|它们并设置为默认}}。\n\n$2\n\n; 如果您刚刚安装完了MediaWiki的话:\n: 您可能是从git库安装的,或者使用其他方法直接从源代码安装的。这是正常现象。请尝试通过以下方法从[https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org的皮肤存储库]安装一些皮肤:\n:* 下载[https://www.mediawiki.org/wiki/Download/zh-hans 打包安装器],它已有一些皮肤和扩展。您可从那里复制粘贴<code>skins/</code>目录。\n:* 从[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]单独下载皮肤安装包。\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins 使用Git下载皮肤]。\n: 做这些事应该不会打扰您的git存储库如果你是MediaWiki开发人员的话。\n\n; 如果您升级了您的MediaWiki的话:\n: MediaWiki 1.24版本起不再自动启用已安装皮肤(参见[https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 此手册])。您可复制粘贴以下{{PLURAL:$5|几行}}文本至您wiki的<code>LocalSettings.php</code>以启用{{PLURAL:$5||所有}}安装的{{PLURAL:$5|皮肤}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; 如果您已经修改了<code>LocalSettings.php</code>:\n: 请再次检查皮肤名以确保不存在错误拼写。",
        "default-skin-not-found-no-skins": "天哪!您在<code>$wgDefaultSkin</code>定义的wiki默认皮肤<code>$1</code>不可用。而且您没有安装任何皮肤。\n\n; 如果您刚刚安装完了MediaWiki的话:\n: 您可能是从git库安装的,或者使用其他方法直接从源代码安装的,这是预期的。这是因为MediaWiki 1.24版本起主代码库不再包含任何皮肤。尝试通过以下方法从[https://www.mediawiki.org/wiki/Special:MyLanguage/Category:All_skins mediawiki.org的皮肤存储库]安装一些皮肤:\n:* 下载[https://www.mediawiki.org/wiki/Download/zh-hans 打包安装器],它已有一些皮肤和扩展。您可从那里复制粘贴<code>skins/</code>目录。\n:* 从[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]单独下载皮肤安装包。\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins 使用Git下载皮肤]。\n: 做这些事应该不会打扰您的git存储库如果你是MediaWiki开发人员的话。参见MediaWiki官网手册[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration “皮肤配置”]获取如何启用他们并设置为默认。",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2(已启用)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2('''已禁用''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2(<strong>已禁用</strong>)",
        "mediastatistics": "媒体统计",
        "mediastatistics-summary": "有关上传文件类型的统计。这只包含文件的最新版本,旧版本或删除版本则不会包括。",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1字节}}($2;$3%)",
index 76efe9f..0916c97 100644 (file)
@@ -68,7 +68,9 @@
                        "范",
                        "Jasonzhuocn",
                        "Bowleerin",
-                       "飞舞回堂前"
+                       "飞舞回堂前",
+                       "Bbslam",
+                       "Zerng07"
                ]
        },
        "tog-underline": "底線標示連結:",
        "myprivateinfoprotected": "您沒有權限編輯您的私人資訊。",
        "mypreferencesprotected": "您沒有權限編輯您的偏好設定。",
        "ns-specialprotected": "特殊頁面無法編輯。",
-       "titleprotected": "此標題已經被 [[User:$1|$1]] 保護以防止建立,原因是 \"<em>$2</em>\"。",
+       "titleprotected": "此標題已經被 [[User:$1|$1]] 保護以防止建立,原因是 <em>$2</em>。",
        "filereadonlyerror": "無法修改檔案 \"$1\" 因為檔案庫 \"$2\" 目前處於唯讀模式。\n\n鎖定的系統管理員說明:\"$3\"。",
        "invalidtitle-knownnamespace": "命名空間 \"$2\" 與名稱 \"$3\" 是無效的標題",
        "invalidtitle-unknownnamespace": "不明的命名空間編號 $1 與名稱 \"$2\" 是無效的標題",
        "newpassword": "新密碼:",
        "retypenew": "重新輸入新密碼:",
        "resetpass_submit": "設定密碼並登入",
-       "changepassword-success": "您的密碼已變更成功!",
+       "changepassword-success": "您的密碼已經變更!",
        "changepassword-throttled": "您最近嘗試了太多次登入。\n請等待 $1 後再試。",
        "botpasswords": "機器人密碼",
        "botpasswords-summary": "<em>機器人密碼</em> 可在不需帳號的主要登入密碼情況下,允許透過 API 存取使用者帳號。 可限制使用機器人密碼登入的使用者權限。\n\n若在尚無法了解為何要設定機器人密碼之前不應使用此功能。 且不該有任何人會向您索取機器人密碼。",
        "botpasswords-insert-failed": "新增機器人名稱 \"$1\" 失敗,是否已新增過?",
        "botpasswords-update-failed": "更新機器人名稱 \"$1\" 失敗,是否已刪除過?",
        "botpasswords-created-title": "已建立機器人密碼",
-       "botpasswords-created-body": "機器人密碼 \"$1\" 已建立成功。",
+       "botpasswords-created-body": "使用者''$2\"所擁有的機器人\"$1\"之密碼已建立。",
        "botpasswords-updated-title": "已更新機器人密碼",
-       "botpasswords-updated-body": "機器人密碼 \"$1\" 已修改成功。",
+       "botpasswords-updated-body": "使用者''$2\"所擁有的機器人\"$1\"之密碼已更新。",
        "botpasswords-deleted-title": "已刪除機器人密碼",
-       "botpasswords-deleted-body": "機器人密碼 \"$1\" 已刪除。",
+       "botpasswords-deleted-body": "使用者''$2\"所擁有的機器人\"$1\"之密碼已刪除。",
        "botpasswords-newpassword": "用來登入 <strong>$1</strong> 的新密碼為 <strong>$2</strong>。 <em>請記錄此密碼以供未來參考使用。</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider 無法使用。",
        "botpasswords-restriction-failed": "機器人密碼限制已拒絕此次登入。",
        "resetpass-no-info": "您必須直接登入存取這個頁面。",
        "resetpass-submit-loggedin": "變更密碼",
        "resetpass-submit-cancel": "取消",
-       "resetpass-wrong-oldpass": "無效的臨時或現有密碼。\n您可能早已成功地變更了密碼,或者已經請求一個新的臨時密碼。",
+       "resetpass-wrong-oldpass": "無效的臨時或現有密碼。\n您可能已經變更了密碼,或者已經請求一個新的臨時密碼。",
        "resetpass-recycled": "請重設您的密碼為一個與目前不同的密碼。",
        "resetpass-temp-emailed": "您使用臨時電子郵件傳送的代碼登入。\n要完成登入,您必須在這裡設定一個新密碼:",
        "resetpass-temp-password": "臨時密碼:",
        "passwordreset-capture": "檢視電子郵件內容?",
        "passwordreset-capture-help": "若您勾選此核選方塊,電子郵件 (包含臨時密碼) 將直接顯示,並寄給使用者。",
        "passwordreset-email": "電子郵件地址:",
-       "passwordreset-emailtitle": "{{SITENAME}} 的帳號詳細資料",
+       "passwordreset-emailtitle": "在 {{SITENAME}} 的帳號詳細資料",
        "passwordreset-emailtext-ip": "不明人士 (可能是您自己,來自 IP 位址 $1) 要求重設在 {{SITENAME}} ($4) 的密碼,下列是與此電子郵件地址有關的使用者{{PLURAL:$3|帳號}}:\n\n$2\n\n{{PLURAL:$3|這個臨時密碼|這些臨時密碼}}將會在{{PLURAL:$5|一天|$5 天}}內到期,\n您應立即登入並更改新的密碼。如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略本訊息並且繼續使用您原本的密碼。",
        "passwordreset-emailtext-user": "使用者 $1 要求重設在 {{SITENAME}} ($4) 的密碼,下列是與此電子郵件位址有關的使用者{{PLURAL:$3|帳號}}:\n\n$2\n\n{{PLURAL:$3|這個臨時密碼|這些臨時密碼}}將會在{{PLURAL:$5|一天|$5 天}}內到期,\n您應立即登入並更改新的密碼。如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略此訊息並且繼續使用您原本的密碼。",
        "passwordreset-emailelement": "使用者名稱:\n$1\n\n臨時密碼:\n$2",
        "newarticle": "(新)",
        "newarticletext": "您正連結至一頁不存在頁面。\n要建立該頁面,請在下方的編輯方塊中輸入內容 (詳情請參考 [$1 説明頁面]) 。\n如果您是不小心來到此頁面,請點選瀏覽器的 <strong>返回</strong> 按鈕。",
        "anontalkpagetext": "----\n<em>此討論頁面是給尚未建立帳號的匿名使用者使用</em>\n因此我們必須使用 IP 位址來辨識身份,但相同的 IP 位址可能由許多不同的使用者所共用。\n如果您是匿名使用者並且覺得評論的內容與您無關,請 [[Special:UserLogin/signup|建立新帳號]] 或 [[Special:UserLogin|登入]] 避免與其他匿名使用者混淆。",
-       "noarticletext": "此頁面目前沒有內容,您可以在其它頁面中[[Special:Search/{{PAGENAME}}|搜尋此頁面標題]]、<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜尋相關日誌]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 編輯此頁]</span>。",
+       "noarticletext": "此頁面目前沒有內容,您可以在其它頁面中[[Special:Search/{{PAGENAME}}|搜尋此頁面標題]]、<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜尋相關日誌]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 建立此頁]</span>。",
        "noarticletext-nopermission": "此頁面目前沒有內容,\n您可以在其它頁面中 [[Special:Search/{{PAGENAME}}|搜尋此頁面標題]],或 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜尋相關日誌]</span>,但您沒有權限建立此頁面。",
        "missing-revision": "頁面名稱 \"{{FULLPAGENAME}}\" 的 #$1 修訂版本不存在。\n\n通常是因連結到過期的歷史頁面,該頁面已被刪除。\n詳情請參考 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]。",
        "userpage-userdoesnotexist": "使用者帳號 \"$1\" 尚未註冊。\n若您要建立/編輯此頁面,請先檢查是否正確。",
        "previewnote": "<strong>您目前正在預覽,您的變更還尚未儲存!</strong>",
        "continue-editing": "前往編輯框",
        "previewconflict": "此預覽顯示了您於上方文字編輯框中的內容儲存之後將會顯示的結果。",
-       "session_fail_preview": "<strong>很抱歉!由於連線階段的資料遺失,我們無法處理您的編輯動作。</strong>\n請再試一次。\n如果仍然失敗,請 [[Special:UserLogout|登出]] 後重新登入。",
-       "session_fail_preview_html": "<strong>很抱歉!由於連線階段的資料遺失,我們無法處理您的編輯動作。</strong>\n\n<em>由於 {{SITENAME}} 開啟了原始 HTML 模式,將不會顯示預覽畫面以避免 JavaScript 攻擊。</em>\n\n<strong>若這是符合規範的編輯動作,請再試一次。</strong>\n如果仍然有問題,請 [[Special:UserLogout|登出]] 後再重新登入一次。",
+       "session_fail_preview": "很抱歉!由於連線階段的資料遺失,以至於我們無法處理您的編輯動作。\n您可能已經登出了。<strong>請您確認您仍然在登入狀態,並請再試一次<strong/>。\n請再試一次。\n如果仍然失敗,請 [[Special:UserLogout|登出]] 後重新登入,並請您確認您的瀏覽器允許此網站的Cookie。",
+       "session_fail_preview_html": "<strong>抱歉!由於是次登入時段出現資料遺失,我們無法處理您所作出的編輯。</strong>\n\n<em> {{SITENAME}} 已開啟了原始 HTML 模式,故此預覽畫面將不會顯示以避免 JavaScript 攻擊。</em>\n\n<strong>如您希望真正能夠作出這次編輯,請再試一次。</strong>\n如果仍不成功,請 [[Special:UserLogout|登出]] 後再重新登入,並確保瀏覽器設定為「允許這個網域的cookie」。",
        "token_suffix_mismatch": "<strong>因您使用的瀏覽器破壞了編輯密鑰中的特殊符號,您的編輯已被拒絕。</strong>\n為了避免破壞頁面內容,已拒絕此次編輯動作,\n會發生這個問題通常是因為您使用了有問題的匿名網頁代理伺服器。",
        "edit_form_incomplete": "<strong>部份編輯的內容未送至伺服器,請檢查您的編輯內容是否完整並再試一次。</strong>",
        "editing": "正在編輯 $1",
        "undo-summary-username-hidden": "還原隱藏使用者的修訂 $1",
        "cantcreateaccounttitle": "無法建立帳號",
        "cantcreateaccount-text": "自這個 IP 位址 (<strong>$1</strong>) 建立帳號已經被 [[User:$3|$3]] 封鎖。\n\n$3 封鎖的原因是 <em>$2</em>",
-       "cantcreateaccount-range-text": "來自 IP 位址範圍 '''$1''',包含您的 IP 位址 ('''$4''') 所建立的帳號已經被 [[User:$3|$3]] 封鎖。\n\n$3 封鎖的原因是 ''$2''",
+       "cantcreateaccount-range-text": "來自 IP 位址範圍 <strong>$1</strong>,包含您的 IP 位址 (<strong>$4</strong>) 所建立的帳號已經被 [[User:$3|$3]] 封鎖。\n\n$3 封鎖的原因是 <em>$2</em>",
        "viewpagelogs": "檢視此頁面的日誌",
        "nohistory": "此頁沒有任何的修訂記錄。",
        "currentrev": "最新修訂",
        "revdelete-unsuppress": "移除已還原修訂上的顯示限制",
        "revdelete-log": "原因:",
        "revdelete-submit": "套用至已選取的{{PLURAL:$1|一筆|多筆}}修訂",
-       "revdelete-success": "已成功更新修訂的顯示設定。",
+       "revdelete-success": "已成功更新檢示修訂內容的權限設定。",
        "revdelete-failure": "無法更新修訂的顯示設定:\n$1",
-       "logdelete-success": "å·²æ\88\90å\8a\9fæ\9b´æ\96°æ\97¥èª\8cç\9a\84顯示設定。",
+       "logdelete-success": "å·²æ\88\90å\8a\9fæ\9b´æ\96°æª¢è¦\96æ\97¥èª\8cç\9a\84æ¬\8aé\99\90設定。",
        "logdelete-failure": "無法更新日誌的顯示設定:\n$1",
        "revdel-restore": "變更能見度",
        "pagehist": "頁面歷史",
        "mergehistory-empty": "沒有可以合併的修訂",
        "mergehistory-done": "$1 中 $3 次修訂已合併至 [[:$2]]。",
        "mergehistory-fail": "無法進行歷史合併,請重新檢查該頁面及時間參數。",
+       "mergehistory-fail-bad-timestamp": "時間值無效。",
+       "mergehistory-fail-invalid-source": "來源頁面無效。",
+       "mergehistory-fail-invalid-dest": "目標頁面無效。",
+       "mergehistory-fail-no-change": "歷史合併尚未合併任何修訂歷史紀錄。請再次檢查頁面以及時間參數。",
+       "mergehistory-fail-permission": "權限不足,無法合併歷史。",
+       "mergehistory-fail-self-merge": "來源頁面與目標頁面的名稱相同。",
+       "mergehistory-fail-timestamps-overlap": "來源修訂版本重複,或在目標修訂版本之後才出現。",
        "mergehistory-fail-toobig": "超過 $1 個修訂移動的上限,無法進行歷史合併。",
        "mergehistory-no-source": "來源頁面 $1 不存在。",
        "mergehistory-no-destination": "目標頁面 $1 不存在。",
        "userrights-changeable-col": "您可變更的群組",
        "userrights-unchangeable-col": "您不可變更的群組",
        "userrights-conflict": "使用者權限變更發生衝突!請檢閱並確認你的變更。",
-       "userrights-removed-self": "您已成功移除自己的權限,您已無法再次存取此頁面。",
+       "userrights-removed-self": "您已移除自己的權限,故您已無法再次存取此頁面。",
        "group": "群組:",
        "group-user": "使用者",
        "group-autoconfirmed": "自動確認的使用者",
        "recentchanges-label-bot": "該編輯由機器人執行",
        "recentchanges-label-unpatrolled": "該編輯尚未巡查",
        "recentchanges-label-plusminus": "該頁面變更的大小 (位元組)",
-       "recentchanges-legend-heading": "'''說明:'''",
+       "recentchanges-legend-heading": "<strong>說明:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (請參考[[Special:NewPages|新頁面]])",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "顯示",
        "recentchangeslinked-page": "頁面名稱:",
        "recentchangeslinked-to": "改顯示連結至指定頁面的變更",
        "recentchanges-page-added-to-category": "[[:$1]] 已加入至分類",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] 與其他 {{PLURAL:$2|1 頁|$2 頁}}已加入至分類",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] 與[[Special:WhatLinksHere/$1|其他 {{PLURAL:$2|1 頁|$2 頁}}]]已加入至分類",
        "recentchanges-page-removed-from-category": "[[:$1]] 已自分類移除",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] 與其他 {{PLURAL:$2|1 頁|$2 頁}}已自分類移除",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] 與[[Special:WhatLinksHere/$1|其他 {{PLURAL:$2|1 頁|$2 頁}}]]已自分類移除",
        "autochange-username": "MediaWiki 自動變更",
        "upload": "上傳檔案",
        "uploadbtn": "上傳檔案",
        "backend-fail-read": "無法讀取檔案 \"$1\"。",
        "backend-fail-create": "無法寫入檔案 \"$1\"。",
        "backend-fail-maxsize": "由於檔案大小超過 $2 位元組,無法寫入檔案 \"$1\"​​。",
-       "backend-fail-readonly": "儲存庫的後端 \"$1\" 目前為唯讀模式。原因為:\"<em>$2</em>\"",
+       "backend-fail-readonly": "儲存庫的後端 \"$1\" 目前為唯讀模式。原因為:<em>$2</em>",
        "backend-fail-synced": "檔案 \"$1\" 與內部儲存庫後端內的狀態不一致。",
        "backend-fail-connect": "無法連結至儲存庫後端 \"$1\"。",
        "backend-fail-internal": "儲存庫後端 \"$1\" 發生了不明的錯誤。",
        "uploadstash-summary": "此頁面可存取已上傳或還在上傳程序但尚未在 Wiki 公開的檔案,這些檔案除了上傳的使用者本身外,其他人尚無法查看。",
        "uploadstash-clear": "清除儲藏庫檔案",
        "uploadstash-nofiles": "您沒有儲藏的檔案。",
-       "uploadstash-badtoken": "執行動作失敗您的編輯資訊可能已經過期,請重新再試。",
+       "uploadstash-badtoken": "執行動作失敗您的編輯資訊可能已經過期,請重新再試。",
        "uploadstash-errclear": "清除檔案失敗。",
        "uploadstash-refresh": "更新檔案清單",
        "invalid-chunk-offset": "無效區塊位置",
        "apihelp": "API 說明",
        "apihelp-no-such-module": "查無模組 \"$1\"。",
        "apisandbox": "API 沙盒",
-       "apisandbox-api-disabled": "此網站已關閉 API 使用。",
-       "apisandbox-intro": "使用此頁面可測試 '''MediaWiki Web Service API'''。\n請參考 [//www.mediawiki.org/wiki/API:Main_page API 說明文件] 以取得詳細資訊。例:[//www.mediawiki.org/wiki/API#A_simple_example 取得主頁的內容]。 請選擇動作以取得更多範例。\n\n請注意,雖然此為沙盒,您在此頁所執行的動作仍有可能會修改到 Wiki。",
+       "apisandbox-jsonly": "需要 JavaScript 才能使用 API 沙箱。",
+       "apisandbox-api-disabled": "此網站已關閉 API。",
+       "apisandbox-intro": "使用此頁面可測試 <strong>MediaWiki web service API</strong>。\n請參考 [[mw:API:Main page|API 說明文件]] 以取得詳細資訊。例:[//www.mediawiki.org/wiki/API#A_simple_example 取得主頁的內容]。 請選擇動作以取得更多範例。\n\n請注意,雖然此為沙盒,您在此頁所執行的動作仍有可能會修改到 Wiki。",
        "apisandbox-fullscreen": "展開面板",
        "apisandbox-fullscreen-tooltip": "展開沙盒面板來填滿瀏覽器視窗。",
        "apisandbox-unfullscreen": "顯示頁面",
        "apisandbox-results": "結果",
        "apisandbox-sending-request": "傳送 API 請求中...",
        "apisandbox-loading-results": "接收 API 結果中...",
+       "apisandbox-results-error": "讀取 API 查詢回應時發生錯誤:$1。",
        "apisandbox-request-url-label": "請求 URL:",
        "apisandbox-request-time": "請求時間:{{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "更正密鑰並重新送出",
+       "apisandbox-results-fixtoken-fail": "取得 \"$1\" 密鑰失敗。",
+       "apisandbox-alert-page": "此頁面上的欄位無效。",
+       "apisandbox-alert-field": "此欄位的值無效。",
        "booksources": "圖書資源",
        "booksources-search-legend": "尋找圖書資源",
        "booksources-isbn": "國際標準書號:",
        "rollbackfailed": "還原失敗",
        "cantrollback": "無法還原編輯;\n此頁面的最後貢獻者是唯一的作者。",
        "alreadyrolled": "無法還原由 [[User:$2|$2]] ([[User talk:$2|對話]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]] 所作的最後一次編輯 [[:$1]],已有其他人編輯或還原了該頁面。\n\n最後一次編輯該頁面的使用者是 [[User:$3|$3]] ([[User talk:$3|對話]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])。",
-       "editcomment": "編輯摘要為:\"''$1''\"。",
+       "editcomment": "編輯摘要為:<em>$1</em>。",
        "revertpage": "已還原 [[Special:Contributions/$2|$2]] ([[User talk:$2|對話]]) 的編輯為最後由 [[User:$1|$1]] 所修訂的版本",
        "revertpage-nouser": "已還隱藏使用者的編輯為最後 {{GENDER:$1|[[User:$1|$1]]}} 修訂的版本",
        "rollback-success": "已還原 $1 所做的編輯;\n變更回由 $2 修訂的最後一個版本。",
        "changecontentmodel-title-label": "頁面標題",
        "changecontentmodel-model-label": "新內容模型",
        "changecontentmodel-reason-label": "原因:",
+       "changecontentmodel-submit": "變更",
        "changecontentmodel-success-title": "已變更內容模型",
        "changecontentmodel-success-text": "已變更 [[:$1]] 的內容類型。",
        "changecontentmodel-cannot-convert": "[[:$1]] 的內容無法轉換為 $2 類型。",
        "changecontentmodel-nodirectediting": "$1 的內容模型不支援直接編輯",
        "log-name-contentmodel": "內容模型變更日誌",
        "log-description-contentmodel": "與頁面內容模型相關的事件",
+       "logentry-contentmodel-new": "$1 {{GENDER:$2|已使用}}非預設的內容模型 \"$5\" 建立頁面 $3",
        "logentry-contentmodel-change": "$1 {{GENDER:$2|已變更}}頁面 $3 的內容模型自 \"$4\" 至 \"$5\"",
        "logentry-contentmodel-change-revertlink": "還原",
        "logentry-contentmodel-change-revert": "還原",
        "block-log-flags-hiddenname": "隱藏使用者名稱",
        "range_block_disabled": "管理員可建立範圍封鎖的權限已被關閉。",
        "ipb_expiry_invalid": "無效的期限。",
+       "ipb_expiry_old": "到期時間已過。",
        "ipb_expiry_temp": "隱藏使用者名稱的封鎖不可設定期限。",
        "ipb_hide_invalid": "無法禁止顯示此帳號;它擁有超過 $1 次的編輯。",
        "ipb_already_blocked": "已經封鎖 \"$1\"。",
        "import": "匯入頁面",
        "importinterwiki": "從其他 wiki 匯入",
        "import-interwiki-text": "請選擇一個 Wiki 與頁面標題以進行匯入。\n會同時記錄修訂日期和編輯者的名稱。\n所有的從跨 Wiki 匯入操作都會被記錄在 [[Special:Log/import|匯入日誌]]。",
-       "import-interwiki-sourcewiki": "來源 Wiki:",
+       "import-interwiki-sourcewiki": "來源 wiki:",
        "import-interwiki-sourcepage": "來源頁面:",
        "import-interwiki-history": "複製此頁面的所有歷史修訂",
        "import-interwiki-templates": "包含所有模板",
        "import-nonewrevisions": "未匯入任何修訂 (修訂已存在,或因錯誤跳過)。",
        "xml-error-string": "$1 於行 $2,欄 $3 ($4 位元組):$5",
        "import-upload": "上傳 XML 資料",
-       "import-token-mismatch": "連線階段資料遺失。\n請再試一次。",
+       "import-token-mismatch": "連線階段資料遺失。\n\n您可能已被登出。<strong>請確認您是否仍在登入狀態並再試一次</strong>。\n若仍無法運作,請嘗試[[Special:UserLogout|登出]]再登入一次,並檢查您的瀏覽器是否允許本站使用 cookie。",
        "import-invalid-interwiki": "不能從指定的 Wiki 匯入。",
        "import-error-edit": "您沒有權限編輯頁面 \"$1\",無法匯入。",
        "import-error-create": "您沒有權限建立頁面 \"$1\",無法匯入。",
        "tooltip-ca-talk": "有關頁面內容的討論",
        "tooltip-ca-edit": "編輯此頁面",
        "tooltip-ca-addsection": "開始一個新章節",
-       "tooltip-ca-viewsource": "此頁面已被保護。\n您可檢視此頁面原始碼",
+       "tooltip-ca-viewsource": "此頁面已被保護。您可檢視此頁面原始碼",
        "tooltip-ca-history": "此頁面先前的修訂",
        "tooltip-ca-protect": "保護此頁面",
        "tooltip-ca-unprotect": "變更此頁面保護",
        "tooltip-n-mainpage-description": "前往首頁",
        "tooltip-n-portal": "關於本專案、您可以做什麼、哪裡可以找到您需要的事物",
        "tooltip-n-currentevents": "於新聞事件中找到相關背景資料",
-       "tooltip-n-recentchanges": "列出此Wiki中的最近更改清單",
+       "tooltip-n-recentchanges": "列出此 Wiki 中的最近變更清單",
        "tooltip-n-randompage": "隨機進入一個頁面",
        "tooltip-n-help": "尋求協助的地方",
        "tooltip-t-whatlinkshere": "列出所有連結此頁面的頁面",
        "version-antispam": "垃圾訊息防止",
        "version-other": "其他",
        "version-mediahandlers": "媒體處理器",
-       "version-hooks": "鉤",
+       "version-hooks": "鉤",
        "version-parser-extensiontags": "解析器擴充標籤",
-       "version-parser-function-hooks": "剖析器函數鉤",
-       "version-hook-name": "鉤名",
+       "version-parser-function-hooks": "語法分析函數掛鉤",
+       "version-hook-name": "掛鉤名稱",
        "version-hook-subscribedby": "署名",
        "version-version": "($1)",
        "version-no-ext-name": "[未命名]",
        "tags-deactivate": "停用",
        "tags-hitcount": "$1 次變更",
        "tags-manage-no-permission": "您沒有權限管理變更標籤。",
+       "tags-manage-blocked": "您無法在被封鎖的情況下管理變更標籤。",
        "tags-create-heading": "建立新標籤",
        "tags-create-explanation": "在預設情況下,新建立的標籤可被使用者及機器人使用。",
        "tags-create-tag-name": "標籤名稱:",
        "tags-delete-not-allowed": "無法刪除由擴充套件定義的標籤,除非該擴充套件允許。",
        "tags-delete-not-found": "標籤 \"$1\" 不存在。",
        "tags-delete-too-many-uses": "標籤 \"$1\" 會套用至 $2 筆以上的{{PLURAL:$2|修訂|修訂}},這代表該標籤將無法刪除。",
-       "tags-delete-warnings-after-delete": "標籤 \"$1\" 已刪除成功,但發生下列{{PLURAL:$2|警告|警告}}:",
+       "tags-delete-warnings-after-delete": "標籤 \"$1\" 已刪除,但發生下列{{PLURAL:$2|警告|警告}}:",
        "tags-activate-title": "啟動標籤",
        "tags-activate-question": "您正要啟動標籤 \"$1\"。",
        "tags-activate-reason": "原因:",
        "tags-deactivate-not-allowed": "無法停用標籤 \"$1\"。",
        "tags-deactivate-submit": "停用",
        "tags-apply-no-permission": "您沒有權限連同您的變更一起套用標籤。",
+       "tags-apply-blocked": "您無法在被封鎖的情況下套用變更標籤為您的變更。",
        "tags-apply-not-allowed-one": "不允許手動套用標籤 \"$1\"。",
        "tags-apply-not-allowed-multi": "不允許手動套用以下{{PLURAL:$2|標籤|標籤}}:$1",
        "tags-update-no-permission": "您沒有權限加入與移除任何於各別修訂與日誌項目的標籤",
+       "tags-update-blocked": "您無法在被封鎖的情況下移除變更標籤。",
        "tags-update-add-not-allowed-one": "不允許手動加入標籤 \"$1\"。",
        "tags-update-add-not-allowed-multi": "不允許手動加入以下{{PLURAL:$2|標籤|標籤}}:$1",
        "tags-update-remove-not-allowed-one": "不允許手動移除標籤 \"$1\"。",
        "tags-edit-reason": "原因:",
        "tags-edit-revision-submit": "套用變更至{{PLURAL:$1|此修訂|$1 筆修訂}}",
        "tags-edit-logentry-submit": "套用變更至{{PLURAL:$1|此日誌項目|$1 筆日誌項目}}",
-       "tags-edit-success": "已成功套用變更。",
+       "tags-edit-success": "已套用變更。",
        "tags-edit-failure": "變更被無法套用:\n$1",
        "tags-edit-nooldid-title": "無效的目標修訂",
        "tags-edit-nooldid-text": "您沒有指定任何要執行此功能的目標修訂或指定的修訂並不存在。",
        "expand_templates_preview": "預覽",
        "expand_templates_preview_fail_html": "<em>因連線階段的資料遺失且 {{SITENAME}} 已開啟顯示原始 HTML 功能,為預防 JavaScript 攻擊已隱藏預覽內容。</em>\n\n<strong>若您目前的預覽動作並無非法,請再試一次。</strong>\n若仍然無效,請嘗試[[Special:UserLogout|登出]]並再登入一次。",
        "expand_templates_preview_fail_html_anon": "<em>因您尚未登入且 {{SITENAME}} 已開啟顯示原始 HTML 功能,為預防 JavaScript 攻擊已隱藏預覽內容。</em>\n\n<strong>若您目前的預覽動作並無非法,請[[Special:UserLogin|登入]]後再試一次。</strong>",
+       "expand_templates_input_missing": "您至少需要提供一些輸入文字。",
        "pagelanguage": "變更頁面語言",
        "pagelang-name": "頁面",
        "pagelang-language": "語言",
        "default-skin-not-found": "哎呀!您於 <code dir=\"ltr\">$wgDefaultSkin</code> 設定的 Wiki 預設外觀 <code>$1</code> 無法使用。\n\n您的安裝程序應包含以下{{PLURAL:$4|外觀}}。請參考 [https://www.mediawiki.org/wiki/Manual:Skin_configuration 操作手冊:外觀設定] 以取得如何{{PLURAL:$4|開啟外觀並設為預設值}}的資訊。\n\n$2\n\n; 若您才剛安裝完 MediaWiki:\n: 您大概是使用 git 或直接透過原始碼使用其他方法安裝,這種情況是正常的。請嘗試安裝 [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org 的外觀目錄] 中的部份外觀使用以下方式:\n:* 下載 [https://www.mediawiki.org/wiki/Special:MyLanguage/Download tarball 安裝程式],該程式包含數個外觀與擴充套件。您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 自 [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] 下載個別外觀 tarball。\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins 使用 Git 下載外觀]。\n: 若您是 MediaWiki 的開發人員,這麼做應該不會影響到您的 git 儲存庫。\n\n; 若您才剛升級 MediaWiki:\n: MediaWiki 1.24 與較新的版本不再自動開啟已安裝的外觀 (請參考 [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 操作手冊:外觀自動搜尋])。您可以將下列{{PLURAL:$5|行}}貼上至 <code>LocalSettings.php</code> 來開啟{{PLURAL:$5|所有}}目前已經安裝的{{PLURAL:$5|外觀}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; 若您才剛修改 <code>LocalSettings.php</code>:\n: 請再次確認您輸入的外觀名稱是否有誤。",
        "default-skin-not-found-no-skins": "哎呀!您於 <code>$wgDefaultSkin</code> 設定的 Wiki 預設外觀 <code>$1</code> 無法使用。\n\n您未安裝任何的外觀。\n\n; 若您才剛安裝完或升級完 MediaWiki:\n: 您大概是使用 git 或直接透過原始碼使用其他方法安裝,這種情況是正常的。 MediaWiki 1.24 或較新的版本在主要儲存庫中不再包含任何的外觀。 請嘗試安裝 [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org 的外觀目錄] 中的部份外觀使用以下方式:\n:* 下載 [https://www.mediawiki.org/wiki/Special:MyLanguage/Download tarball 安裝程式],該程式包含數個外觀與擴充套件。 您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 自 [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] 下載個別外觀 tarball。\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins 使用 Git 下載外觀]。\n: 若您是 MediaWiki 的開發人員,這麼做應該不會影響到您的 git 儲存庫。 請參考 [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration 操作手冊:外觀設定] 以取得如何開啟外觀並設為預設值的資訊。",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (已開啟)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''已停用''')",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>已停用</strong>)",
        "mediastatistics": "媒體統計資訊",
        "mediastatistics-summary": "已上傳檔案類型的統計資訊,此報表僅統計檔案的最新版本,不包含舊的或已刪除的版本。",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 位元組|$1 位元組}} ($2; $3%)",
        "mw-widgets-titleinput-description-new-page": "頁面不存在",
        "mw-widgets-titleinput-description-redirect": "重新導向至 $1",
        "api-error-blacklisted": "請選擇另一個更具描述性的標題。",
+       "sessionmanager-tie": "無法合併多個請求認証類型:$1。",
        "sessionprovider-generic": "$1 連線階段",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "以 cookie 為基礎的連線階段",
        "sessionprovider-nocookies": "Cookie 功能可能已被關閉,請確認您改開啟 Cookie 功能並重新啟動。",
index c020b09..adeafda 100644 (file)
@@ -13,7 +13,7 @@ $namespaceNames = [
        NS_SPECIAL          => 'Posebno',
        NS_TALK             => 'Razgovor',
        NS_USER             => 'Korisnik',
-       NS_USER_TALK        => 'Razgovor_sa_korisnikom',
+       NS_USER_TALK        => 'Razgovor_s_korisnikom',
        NS_PROJECT_TALK     => 'Razgovor_{{grammar:instrumental|$1}}',
        NS_FILE             => 'Datoteka',
        NS_FILE_TALK        => 'Razgovor_o_datoteci',
@@ -28,6 +28,7 @@ $namespaceNames = [
 ];
 
 $namespaceAliases = [
+       'Razgovor_sa_korisnikom' => NS_USER_TALK,
        'Medija' => NS_MEDIA,
        'Slika' => NS_FILE,
        'Razgovor_o_datoteci' => NS_FILE_TALK,
index 1d6a242..2b97f7a 100644 (file)
--- a/load.php
+++ b/load.php
 
 use MediaWiki\Logger\LoggerFactory;
 
+// This endpoint is supposed to be independent of request cookies and other
+// details of the session. Log warnings for violations of the no-session
+// constraint.
+define( 'MW_NO_SESSION', 'warn' );
+
 require __DIR__ . '/includes/WebStart.php';
 
 // URL safety checks
@@ -31,14 +36,15 @@ if ( !$wgRequest->checkUrlExtension() ) {
        return;
 }
 
-// Respond to resource loading request.
-// foo()->bar() syntax is not supported in PHP4, and this file needs to *parse* in PHP4.
-$configFactory = ConfigFactory::getDefaultInstance();
+// Set up ResourceLoader
 $resourceLoader = new ResourceLoader(
-       $configFactory->makeConfig( 'main' ),
+       ConfigFactory::getDefaultInstance()->makeConfig( 'main' ),
        LoggerFactory::getInstance( 'resourceloader' )
 );
-$resourceLoader->respond( new ResourceLoaderContext( $resourceLoader, $wgRequest ) );
+$context = new ResourceLoaderContext( $resourceLoader, $wgRequest );
+
+// Respond to ResourceLoader request
+$resourceLoader->respond( $context );
 
 Profiler::instance()->setTemplated( true );
 
index 777eddd..a08297a 100644 (file)
@@ -752,17 +752,19 @@ abstract class Maintenance {
 
                if ( isset( $this->mParams[$option] ) ) {
                        $multi = $this->mParams[$option]['multiOccurrence'];
-                       $exists = array_key_exists( $option, $options );
-                       if ( $multi && $exists ) {
-                               $options[$option][] = $value;
-                       } elseif ( $multi ) {
-                               $options[$option] = [ $value ];
-                       } elseif ( !$exists ) {
-                               $options[$option] = $value;
-                       } else {
-                               $this->error( "\nERROR: $option parameter given twice\n" );
-                               $this->maybeHelp( true );
-                       }
+               } else {
+                       $multi = false;
+               }
+               $exists = array_key_exists( $option, $options );
+               if ( $multi && $exists ) {
+                       $options[$option][] = $value;
+               } elseif ( $multi ) {
+                       $options[$option] = [ $value ];
+               } elseif ( !$exists ) {
+                       $options[$option] = $value;
+               } else {
+                       $this->error( "\nERROR: $option parameter given twice\n" );
+                       $this->maybeHelp( true );
                }
        }
 
diff --git a/maintenance/archives/patch-add-cl_collation_ext_index.sql b/maintenance/archives/patch-add-cl_collation_ext_index.sql
new file mode 100644 (file)
index 0000000..8137dc6
--- /dev/null
@@ -0,0 +1,2 @@
+-- @since 1.27
+CREATE INDEX /*i*/cl_collation_ext ON /*_*/categorylinks (cl_collation, cl_to, cl_type, cl_from);
index c1499c1..f5ff1f1 100644 (file)
@@ -13,7 +13,7 @@ ALTER TABLE /*$wgDBprefix*/categorylinks
        ADD COLUMN cl_sortkey_prefix varchar(255) binary NOT NULL default '',
        ADD COLUMN cl_collation varbinary(32) NOT NULL default '',
        ADD COLUMN cl_type ENUM('page', 'subcat', 'file') NOT NULL default 'page',
-       ADD INDEX (cl_collation),
+-- rm'd in 1.27        ADD INDEX (cl_collation),
        DROP INDEX cl_sortkey,
        ADD INDEX cl_sortkey (cl_to, cl_type, cl_sortkey, cl_from);
 INSERT IGNORE INTO /*$wgDBprefix*/updatelog (ul_key) VALUES ('cl_fields_update');
diff --git a/maintenance/archives/patch-kill-cl_collation_index.sql b/maintenance/archives/patch-kill-cl_collation_index.sql
new file mode 100644 (file)
index 0000000..7f75a62
--- /dev/null
@@ -0,0 +1,7 @@
+--
+-- Kill cl_collation index.
+-- @since 1.27
+--
+
+DROP INDEX /*i*/cl_collation ON /*_*/categorylinks;
+
diff --git a/maintenance/archives/patch-watchlist-wl_id.sql b/maintenance/archives/patch-watchlist-wl_id.sql
new file mode 100644 (file)
index 0000000..a73e514
--- /dev/null
@@ -0,0 +1,5 @@
+-- Primary key in watchlist
+
+ALTER TABLE /*$wgDBprefix*/watchlist
+  ADD COLUMN wl_id int unsigned NOT NULL AUTO_INCREMENT FIRST,
+  ADD PRIMARY KEY (wl_id);
index 8651a68..5fab082 100644 (file)
@@ -87,7 +87,7 @@ abstract class Benchmarker extends Maintenance {
                        $ret .= sprintf( "%s times: function %s(%s) :\n",
                                $res['count'],
                                $res['function'],
-                               join( ', ', $res['arguments'] )
+                               implode( ', ', $res['arguments'] )
                        );
                        $ret .= sprintf( "   %6.2fms (%6.2fms each)\n",
                                $res['delta'] * 1000,
index bdb197f..62bb0fa 100644 (file)
@@ -38,7 +38,7 @@ class BenchUtf8TitleCheck extends Benchmarker {
                parent::__construct();
 
                // @codingStandardsIgnoreStart Ignore long line warnings.
-               $this->data = array(
+               $this->data = [
                        "",
                        "United States of America", // 7bit ASCII
                        "S%C3%A9rie%20t%C3%A9l%C3%A9vis%C3%A9e",
@@ -58,7 +58,7 @@ class BenchUtf8TitleCheck extends Benchmarker {
                        . "Saison%207%20des%20Experts%7CSaison%208%20des%20Experts%7CSaison%209%20des%20Experts%7C"
                        . "Sara%20Sidle%7CSofia%20Curtis%7CS%C3%A9rie%20t%C3%A9l%C3%A9vis%C3%A9e%7CWallace%20Langham%7C"
                        . "Warrick%20Brown%7CWendy%20Simms%7C%C3%89tats-Unis"
-               );
+               ];
                // @codingStandardsIgnoreEnd
 
                $this->canRun = function_exists( 'mb_check_encoding' );
index 559dbd6..cd7a842 100644 (file)
@@ -47,7 +47,7 @@ class UploadStashCleanup extends Maintenance {
                $repo = RepoGroup::singleton()->getLocalRepo();
                $tempRepo = $repo->getTempRepo();
 
-               $dbr = $repo->getSlaveDb();
+               $dbr = $repo->getSlaveDB();
 
                // how far back should this look for files to delete?
                $cutoff = time() - $wgUploadStashMaxAge;
index e871a4e..206e046 100644 (file)
@@ -25,20 +25,27 @@ require_once __DIR__ . '/Maintenance.php';
 
 // @codingStandardsIgnoreStart MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
 global $optionsWithArgs;
+global $optionsWithoutArgs;
 // @codingStandardsIgnoreEnd
 if ( !isset( $optionsWithArgs ) ) {
        $optionsWithArgs = [];
 }
+if ( !isset( $optionsWithoutArgs ) ) {
+       $optionsWithoutArgs = [];
+}
 
 class CommandLineInc extends Maintenance {
        public function __construct() {
                // @codingStandardsIgnoreStart MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
-               global $optionsWithArgs;
+               global $optionsWithArgs, $optionsWithoutArgs;
                // @codingStandardsIgnoreEnd
                parent::__construct();
                foreach ( $optionsWithArgs as $name ) {
                        $this->addOption( $name, '', false, true );
                }
+               foreach ( $optionsWithoutArgs as $name ) {
+                       $this->addOption( $name, '', false, false );
+               }
        }
 
        /**
index 1904325..d4255a0 100644 (file)
@@ -102,7 +102,9 @@ TEXT
                                $this->fatalError( "Unable to open file {$filename}\n" );
                        }
                        $pages = array_map( 'trim', $pages );
-                       $this->pages = array_filter( $pages, create_function( '$x', 'return $x !== "";' ) );
+                       $this->pages = array_filter( $pages, function ( $x ) {
+                               return $x !== '';
+                       } );
                }
 
                if ( $this->hasOption( 'start' ) ) {
index 60bdf29..d44581c 100644 (file)
@@ -42,10 +42,13 @@ require_once __DIR__ . '/Maintenance.php';
  * @ingroup Maintenance
  */
 class FindHooks extends Maintenance {
+       const FIND_NON_RECURSIVE = 0;
+       const FIND_RECURSIVE = 1;
+
        /*
         * Hooks that are ignored
         */
-       protected static $ignore = [ 'testRunLegacyHooks' ];
+       protected static $ignore = [ 'testRunLegacyHooks', 'Test' ];
 
        public function __construct() {
                parent::__construct();
@@ -62,73 +65,36 @@ class FindHooks extends Maintenance {
 
                $documentedHooks = $this->getHooksFromDoc( $IP . '/docs/hooks.txt' );
                $potentialHooks = [];
-               $bad = [];
+               $badHooks = [];
 
-               // TODO: Don't hardcode the list of directories
-               $pathinc = [
-                       $IP . '/',
-                       $IP . '/includes/',
-                       $IP . '/includes/actions/',
-                       $IP . '/includes/api/',
-                       $IP . '/includes/cache/',
-                       $IP . '/includes/changes/',
-                       $IP . '/includes/changetags/',
-                       $IP . '/includes/clientpool/',
-                       $IP . '/includes/content/',
-                       $IP . '/includes/context/',
-                       $IP . '/includes/dao/',
-                       $IP . '/includes/db/',
-                       $IP . '/includes/debug/',
-                       $IP . '/includes/deferred/',
-                       $IP . '/includes/diff/',
-                       $IP . '/includes/exception/',
-                       $IP . '/includes/export/',
-                       $IP . '/includes/externalstore/',
-                       $IP . '/includes/filebackend/',
-                       $IP . '/includes/filerepo/',
-                       $IP . '/includes/filerepo/file/',
-                       $IP . '/includes/gallery/',
-                       $IP . '/includes/htmlform/',
-                       $IP . '/includes/import/',
-                       $IP . '/includes/installer/',
-                       $IP . '/includes/interwiki/',
-                       $IP . '/includes/jobqueue/',
-                       $IP . '/includes/json/',
-                       $IP . '/includes/logging/',
-                       $IP . '/includes/mail/',
-                       $IP . '/includes/media/',
-                       $IP . '/includes/page/',
-                       $IP . '/includes/parser/',
-                       $IP . '/includes/password/',
-                       $IP . '/includes/rcfeed/',
-                       $IP . '/includes/resourceloader/',
-                       $IP . '/includes/revisiondelete/',
-                       $IP . '/includes/search/',
-                       $IP . '/includes/session/',
-                       $IP . '/includes/site/',
-                       $IP . '/includes/skins/',
-                       $IP . '/includes/specialpage/',
-                       $IP . '/includes/specials/',
-                       $IP . '/includes/upload/',
-                       $IP . '/includes/user/',
-                       $IP . '/includes/utils/',
-                       $IP . '/languages/',
-                       $IP . '/maintenance/',
-                       $IP . '/maintenance/language/',
-                       $IP . '/tests/',
-                       $IP . '/tests/parser/',
-                       $IP . '/tests/phpunit/suites/',
+               $recurseDirs = [
+                       "$IP/includes/",
+                       "$IP/mw-config/",
+                       "$IP/languages/",
+                       "$IP/maintenance/",
+                       // Omit $IP/tests/phpunit as it contains hook tests that shouldn't be documented
+                       "$IP/tests/parser",
+                       "$IP/tests/phpunit/suites",
+               ];
+               $nonRecurseDirs = [
+                       "$IP/",
                ];
 
-               foreach ( $pathinc as $dir ) {
-                       $potentialHooks = array_merge( $potentialHooks, $this->getHooksFromPath( $dir ) );
-                       $bad = array_merge( $bad, $this->getBadHooksFromPath( $dir ) );
+               foreach ( $recurseDirs as $dir ) {
+                       $ret = $this->getHooksFromDir( $dir, self::FIND_RECURSIVE );
+                       $potentialHooks = array_merge( $potentialHooks, $ret['good'] );
+                       $badHooks = array_merge( $badHooks, $ret['bad'] );
+               }
+               foreach ( $nonRecurseDirs as $dir ) {
+                       $ret = $this->getHooksFromDir( $dir );
+                       $potentialHooks = array_merge( $potentialHooks, $ret['good'] );
+                       $badHooks = array_merge( $badHooks, $ret['bad'] );
                }
 
                $documented = array_keys( $documentedHooks );
                $potential = array_keys( $potentialHooks );
                $potential = array_unique( $potential );
-               $bad = array_diff( array_unique( $bad ), self::$ignore );
+               $badHooks = array_diff( array_unique( $badHooks ), self::$ignore );
                $todo = array_diff( $potential, $documented, self::$ignore );
                $deprecated = array_diff( $documented, $potential, self::$ignore );
 
@@ -158,15 +124,15 @@ class FindHooks extends Maintenance {
                        }
                }
 
-               // let's show the results:
+               // Print the results
                $this->printArray( 'Undocumented', $todo );
                $this->printArray( 'Documented and not found', $deprecated );
-               $this->printArray( 'Unclear hook calls', $bad );
+               $this->printArray( 'Unclear hook calls', $badHooks );
                $this->printArray( 'Different parameter count', $badParameterCount );
                $this->printArray( 'Different parameter reference', $badParameterReference );
 
-               if ( count( $todo ) == 0 && count( $deprecated ) == 0 && count( $bad ) == 0
-                       && count( $badParameterCount ) == 0 && count( $badParameterReference ) == 0
+               if ( !$todo && !$deprecated && !$badHooks
+                       && !$badParameterCount && !$badParameterReference
                ) {
                        $this->output( "Looks good!\n" );
                } else {
@@ -264,11 +230,11 @@ class FindHooks extends Maintenance {
 
        /**
         * Get hooks from a PHP file
-        * @param string $file Full filename to the PHP file.
+        * @param string $filePath Full file path to the PHP file.
         * @return array Array: key => hook name; value => array of arguments or string 'unknown'
         */
-       private function getHooksFromFile( $file ) {
-               $content = file_get_contents( $file );
+       private function getHooksFromFile( $filePath ) {
+               $content = file_get_contents( $filePath );
                $m = [];
                preg_match_all(
                        // All functions which runs hooks
@@ -309,63 +275,56 @@ class FindHooks extends Maintenance {
                return $hooks;
        }
 
-       /**
-        * Get hooks from the source code.
-        * @param string $path Directory where the include files can be found
-        * @return array Array: key => hook name; value => array of arguments or string 'unknown'
-        */
-       private function getHooksFromPath( $path ) {
-               $hooks = [];
-               $dh = opendir( $path );
-               if ( $dh ) {
-                       while ( ( $file = readdir( $dh ) ) !== false ) {
-                               if ( filetype( $path . $file ) == 'file' ) {
-                                       $hooks = array_merge( $hooks, $this->getHooksFromFile( $path . $file ) );
-                               }
-                       }
-                       closedir( $dh );
-               }
-
-               return $hooks;
-       }
-
        /**
         * Get bad hooks (where the hook name could not be determined) from a PHP file
-        * @param string $file Full filename to the PHP file.
+        * @param string $filePath Full filename to the PHP file.
         * @return array Array of bad wfRunHooks() lines
         */
-       private function getBadHooksFromFile( $file ) {
-               $content = file_get_contents( $file );
+       private function getBadHooksFromFile( $filePath ) {
+               $content = file_get_contents( $filePath );
                $m = [];
-               # We want to skip the "function wfRunHooks()" one.  :)
+               // We want to skip the "function wfRunHooks()" one.  :)
                preg_match_all( '/(?<!function )wfRunHooks\(\s*[^\s\'"].*/', $content, $m );
                $list = [];
                foreach ( $m[0] as $match ) {
-                       $list[] = $match . "(" . $file . ")";
+                       $list[] = $match . "(" . $filePath . ")";
                }
 
                return $list;
        }
 
        /**
-        * Get bad hooks from the source code.
-        * @param string $path Directory where the include files can be found
-        * @return array Array of bad wfRunHooks() lines
+        * Get hooks from a directory of PHP files.
+        * @param string $dir Directory path to start at
+        * @param int $recursive Pass self::FIND_RECURSIVE
+        * @return array Array: key => hook name; value => array of arguments or string 'unknown'
         */
-       private function getBadHooksFromPath( $path ) {
-               $hooks = [];
-               $dh = opendir( $path );
-               if ( $dh ) {
-                       while ( ( $file = readdir( $dh ) ) !== false ) {
-                               # We don't want to read this file as it contains bad calls to wfRunHooks()
-                               if ( filetype( $path . $file ) == 'file' && !$path . $file == __FILE__ ) {
-                                       $hooks = array_merge( $hooks, $this->getBadHooksFromFile( $path . $file ) );
-                               }
+       private function getHooksFromDir( $dir, $recurse = 0 ) {
+               $good = [];
+               $bad = [];
+
+               if ( $recurse === self::FIND_RECURSIVE ) {
+                       $iterator = new RecursiveIteratorIterator(
+                               new RecursiveDirectoryIterator( $dir ),
+                               RecursiveIteratorIterator::SELF_FIRST | RecursiveDirectoryIterator::SKIP_DOTS
+                       );
+               } else {
+                       $iterator = new DirectoryIterator( $dir );
+               }
+
+               foreach ( $iterator as $info ) {
+                       // Ignore directories, ignore json (installer and api i18n),
+                       // ignore extension-less files like HISTORY
+                       if ( $info->isFile() && $info->getExtension() !== 'json' && $info->getExtension()
+                               // Skip this file as it contains text that looks like a bad wfRunHooks() call
+                               && $info->getRealPath() !== __FILE__
+                       ) {
+                               $good = array_merge( $good, $this->getHooksFromFile( $info->getRealPath() ) );
+                               $bad = array_merge( $bad, $this->getBadHooksFromFile( $info->getRealPath() ) );
                        }
-                       closedir( $dh );
                }
 
-               return $hooks;
+               return [ 'good' => $good, 'bad' => $bad ];
        }
 
        /**
index 6bc9a6a..3c679e6 100644 (file)
@@ -53,7 +53,7 @@ class GetConfiguration extends Maintenance {
                $this->addOption( 'regex', 'regex to filter variables with', false, true );
                $this->addOption( 'iregex', 'same as --regex but case insensitive', false, true );
                $this->addOption( 'settings', 'Space-separated list of wg* variables', false, true );
-               $this->addOption( 'format', join( ', ', self::$outFormats ), false, true );
+               $this->addOption( 'format', implode( ', ', self::$outFormats ), false, true );
        }
 
        protected function validateParamsAndArgs() {
index f0c6569..512c38c 100644 (file)
@@ -36,6 +36,12 @@ $optionsWithArgs = [
        'extensions', 'comment', 'comment-file', 'comment-ext', 'summary', 'user',
        'license', 'sleep', 'limit', 'from', 'source-wiki-url', 'timestamp',
 ];
+
+$optionsWithoutArgs = [
+       'protect', 'unprotect', 'search-recursively', 'check-userblock', 'overwrite',
+       'skip-dupes', 'dry'
+];
+
 require_once __DIR__ . '/commandLine.inc';
 require_once __DIR__ . '/importImages.inc';
 $processed = $added = $ignored = $skipped = $overwritten = $failed = 0;
index 7e62b89..b2530ce 100644 (file)
@@ -63,6 +63,9 @@ class InitSiteStats extends Maintenance {
                        $this->output( "\nUpdating site statistics..." );
                        $counter->refresh();
                        $this->output( "done.\n" );
+               } else {
+                       $this->output( "\nTo update the site statistics table, run the script "
+                               . "with the --update option.\n" );
                }
 
                if ( $this->hasOption( 'active' ) ) {
index 41b56f6..d9e2c50 100644 (file)
@@ -32,7 +32,8 @@
                                        "mw.util",
                                        "mw.plugin.*",
                                        "mw.cookie",
-                                       "mw.experiments"
+                                       "mw.experiments",
+                                       "mw.viewport"
                                ]
                        },
                        {
index 5d48244..baa9c71 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup MaintenanceLanguage
  */
 
+$optionsWithArgs = [ 'lang', 'clang', 'mode' ];
 require_once __DIR__ . '/../commandLine.inc';
 $messagesDir = __DIR__ . '/../../languages/messages/';
 $runTest = false;
index bd9f9af..a8cbac1 100644 (file)
  * @ingroup MaintenanceLanguage
  */
 
+$optionsWithArgs = [
+       'lang', 'level', 'blacklist', 'whitelist', 'wikilang', 'output', 'prefix'
+];
+$optionsWithoutArgs = [
+       'help', 'links', 'noexif', 'easy', 'duplicate', 'all'
+];
 require_once __DIR__ . '/../commandLine.inc';
 require_once 'checkLanguage.inc';
 require_once 'languages.inc';
index ac53554..7202952 100644 (file)
@@ -27,6 +27,7 @@
  * https://www.mediawiki.org/wiki/Localisation_statistics
  */
 $optionsWithArgs = [ 'output' ];
+$optionsWithoutArgs = [ 'help' ];
 
 require_once __DIR__ . '/../commandLine.inc';
 require_once 'languages.inc';
@@ -72,7 +73,7 @@ switch ( $options['output'] ) {
 }
 
 # Languages
-$wgLanguages = new Languages();
+$languages = new Languages();
 
 # Header
 $output->heading();
@@ -88,10 +89,10 @@ $output->element( 'Problematic', true );
 $output->element( '%', true );
 $output->blockend();
 
-$wgGeneralMessages = $wgLanguages->getGeneralMessages();
+$wgGeneralMessages = $languages->getGeneralMessages();
 $wgRequiredMessagesNumber = count( $wgGeneralMessages['required'] );
 
-foreach ( $wgLanguages->getLanguages() as $code ) {
+foreach ( $languages->getLanguages() as $code ) {
        # Don't check English, RTL English or dummy language codes
        if ( $code == 'en' || $code == 'enRTL' || ( is_array( $wgDummyLanguageCodes ) &&
                        isset( $wgDummyLanguageCodes[$code] ) )
@@ -101,8 +102,8 @@ foreach ( $wgLanguages->getLanguages() as $code ) {
 
        # Calculate the numbers
        $language = Language::fetchLanguageName( $code );
-       $fallback = $wgLanguages->getFallback( $code );
-       $messages = $wgLanguages->getMessages( $code );
+       $fallback = $languages->getFallback( $code );
+       $messages = $languages->getMessages( $code );
        $messagesNumber = count( $messages['translated'] );
        $requiredMessagesNumber = count( $messages['required'] );
        $requiredMessagesPercent = $output->formatPercent(
@@ -115,11 +116,11 @@ foreach ( $wgLanguages->getLanguages() as $code ) {
                $messagesNumber,
                true
        );
-       $messagesWithMismatchVariables = $wgLanguages->getMessagesWithMismatchVariables( $code );
-       $emptyMessages = $wgLanguages->getEmptyMessages( $code );
-       $messagesWithWhitespace = $wgLanguages->getMessagesWithWhitespace( $code );
-       $nonXHTMLMessages = $wgLanguages->getNonXHTMLMessages( $code );
-       $messagesWithWrongChars = $wgLanguages->getMessagesWithWrongChars( $code );
+       $messagesWithMismatchVariables = $languages->getMessagesWithMismatchVariables( $code );
+       $emptyMessages = $languages->getEmptyMessages( $code );
+       $messagesWithWhitespace = $languages->getMessagesWithWhitespace( $code );
+       $nonXHTMLMessages = $languages->getNonXHTMLMessages( $code );
+       $messagesWithWrongChars = $languages->getMessagesWithWrongChars( $code );
        $problematicMessagesNumber = count( array_unique( array_merge(
                $messagesWithMismatchVariables,
                $emptyMessages,
index 999f25c..15a1cb9 100755 (executable)
@@ -417,17 +417,17 @@ def main():
 namespace MediaWiki\Languages\Data;
 
 class ZhConversion {
-public static $zh2Hant = array(\n'''
+public static $zh2Hant = [\n'''
     php += PHPArray(toHant) \
-        + '\n);\n\npublic static $zh2Hans = array(\n' \
+        + '\n];\n\npublic static $zh2Hans = [\n' \
         + PHPArray(toHans) \
-        + '\n);\n\npublic static $zh2TW = array(\n' \
+        + '\n];\n\npublic static $zh2TW = [\n' \
         + PHPArray(toTW) \
-        + '\n);\n\npublic static $zh2HK = array(\n' \
+        + '\n];\n\npublic static $zh2HK = [\n' \
         + PHPArray(toHK) \
-        + '\n);\n\npublic static $zh2CN = array(\n' \
+        + '\n];\n\npublic static $zh2CN = [\n' \
         + PHPArray(toCN) \
-        + '\n);\n}\n'
+        + '\n];\n}\n'
 
     if pyversion[:1] in ['2']:
         f = open(os.path.join('..', '..', '..', 'languages', 'data', 'ZhConversion.php'), 'wb', encoding='utf8')
index 944e20e..915c699 100644 (file)
@@ -37,6 +37,7 @@
 鹽份 盐分
 組份 组分
 成份 成分
+成份股      成份股
 本份 本分
 本本份份   本本分分
 恰如其份   恰如其分
 散佈著      散布着
 遍佈著      遍布着
 遍布著      遍布着
+記錄著      记录着
+紀錄著      纪录着
+收錄著      收录着
 三十六著   三十六着
 走為上著   走为上着
 記憶體      内存
 區域網路   局域网络
 巨集 宏
 掃瞄器      扫描仪
-寬頻 宽带
 資料庫      数据库
 母音 元音
 印表機      打印机
 寮國 老挝
 貢寮 贡寮 #分詞用
 蘇利南      苏里南
+奈洛比      内罗毕
 莫三比克   莫桑比克
 賴索托      莱索托
 尚比亞      赞比亚
 提比里西   第比利斯
 巴斯拉      巴士拉
 杜拜 迪拜
+坚杜拜      坚杜拜
+堅杜拜      坚杜拜
 賽普勒斯   塞浦路斯
 荷姆茲      霍尔木兹
 加薩走廊   加沙地带
 密西根      密歇根
 紐澤西      新泽西
 蒙特婁      蒙特利尔
-滿地可      蒙特利尔
 千里達及托巴哥  特立尼达和多巴哥
 千里達      特立尼达
 托巴哥      多巴哥
index 457457a..f76d875 100644 (file)
@@ -55,7 +55,6 @@
 布光 佈光
 布局 佈局
 布防 佈防
-布施 佈施
 布满 佈滿
 布滿 佈滿
 布告 佈告
 占整 佔整
 占局部      佔局部
 日占 日佔
+擇日占星   擇日占星
+择日占星   擇日占星
 美占 美佔
 英占 英佔
 德占 德佔
 小时里      小時裏
 体里 體裏
 柜里 櫃裏
+告里 告裏
 电影里      電影裏
 广播里      廣播裏
 电视里      電視裏
 散佈著      散佈着
 遍佈著      遍佈着
 遍布著      遍佈着
+記錄著      記錄着
+紀錄著      紀錄着
+收錄著      收錄着
 三十六著   三十六着
 走為上著   走為上着
 鬧著 鬧着
 寮國 老撾
 貢寮 貢寮 #分詞用
 肯尼亚      肯雅
+奈洛比      內羅畢
 莫三比克   莫桑比克
 賴索托      萊索托
 尚比亞      贊比亞
 爱荷华      艾奧瓦
 得克萨斯   德克薩斯
 蒙特婁      蒙特利爾
-滿地可      蒙特利爾
 紐賓士域   紐賓士域
 默多克      梅鐸
 梅鐸 梅鐸
index ddd6f9d..12431b3 100644 (file)
 字库 字型檔
 字段 欄位
 存盘 存檔
-界面 介面
 控件 控制項
 盘片 碟片
 硬盘 硬碟
 服务器      伺服器
 局域网      區域網
 局域网络   區域網路
-宽带 寬頻
 数据库      資料庫
 打印机      印表機
 打印機      印表機
 老挝 寮國
 老撾 寮國
 肯尼亚      肯亞
+内罗毕      奈洛比
+內羅畢      奈洛比
 苏里南      蘇利南
 莫桑比克   莫三比克
 莱索托      賴索托
 得克薩斯   德克薩斯
 蒙特利尔   蒙特婁
 蒙特利爾   蒙特婁
-滿地可      蒙特婁
 麦克尔      麥可
 迈克尔      麥可
 魯賓斯·巴里切羅        魯本·巴瑞切羅
index 2bc8945..5c6a70b 100644 (file)
@@ -75,7 +75,6 @@
 馬占山      馬占山
 闫怀礼      閆懷禮
 薴烯 薴烯
-后豐 后豐
 于謙 于謙
 詩云 詩云
 云為 云為
 涂澤民      涂澤民
 涂長望      涂長望
 涂敏恆      涂敏恆
+后豐 后豐
 艷后 艷后
 廢后 廢后
 后髮座      后髮座
 賢后 賢后
 呂后 呂后
 蟻后 蟻后
+陳有后      陳有后
+天神之后   天神之后
+豔后 豔后
+后綜 后綜
+葉陽后      葉陽后
+后庄 后庄
+後庄 後庄
+后蒼 后蒼
 馬格里布   馬格里布
 佳里鎮      佳里鎮
 有只採      有只採
 复苏 復甦
 苹果 蘋果
 苹果干      蘋果乾
-后庄 后庄
-後庄 後庄
 龜山庄      龜山庄
 寶山庄      寶山庄
 員山庄      員山庄
 鮮于 鮮于
 賦范 賦范
 茅于軾      茅于軾
-陳有后      陳有后
-天神之后   天神之后
-豔后 豔后
-后綜 后綜
-葉陽后      葉陽后
 壽天里      壽天里
 貴子里      貴子里
 東湖里      東湖里
 水里鳳林   水里鳳林
 水里濁水溪        水里濁水溪
 洞里薩      洞里薩
+愛河里花子        愛河里花子
 划不來      划不來
 划來划去   划來划去
 划動 划動
 升平 昇平
 升阳 昇陽
 陈升 陳昇
+尔冬升      爾冬陞
 南宮适      南宮适
 舊庄 舊庄
 拿破仑      拿破崙
 扑冬 撲鼕
 冬冬鼓      鼕鼕鼓
 苧麻 苧麻
+张柏芝      張栢芝
index 03c42d9..c9d78b7 100644 (file)
@@ -323,6 +323,7 @@ U+06ED9滙|U+06C47汇|
 U+06EDB滛|U+06DEB淫|
 U+06EF7滷|U+05364卤|
 U+06F44潄|U+06F31漱|
+U+06F55潕|U+23C98𣲘|
 U+06F59潙|U+06CA9沩|
 U+06F81澁|U+06DA9涩|
 U+06F90澐|U+06C84沄|
@@ -618,6 +619,7 @@ U+08E5F蹟|U+08FF9迹|
 U+08E60蹠|U+08DD6跖|
 U+08E67蹧|U+07CDF糟|
 U+08E75蹵|U+08E74蹴|
+U+08E98躘|U+28001𨀁|
 U+08EAD躭|U+0803D耽|
 U+08EB3躳|U+08EAC躬|
 U+08EB6躶|U+088F8裸|
index 309bd5d..492a99d 100644 (file)
 數罪併罰
 催併
 狂併潮
+合併
+併為一體
+併為一家
+併吞
+並吞下
 提摩太後書
 裏海
 不採
 髮釵
 髮飾
 髮紗
+髮簪
 髮上指冠
 髮上沖冠
 髮乳
 髮已霜白
 髮油
 髮為血之本
-髮網
+髮網
 髮踊沖冠
 髮際
 黃髮
 美髮業
 美髮沙龍
 美容美髮
+程十髮
 模范棒棒堂
 模范三軍
 模范七棒
 複分解
 複合 #因複合詞頻遠高於復合
 複方
+複穗
 撥穀
 扁擬穀盜蟲
 不穀
 鹹批
 鹹濕
 鹹豬
+甜鹹
+鹹甜
+甜、鹹
+鹹、甜
 錦綉花園
 籲天
 勃鬱
 儒略曆
 伊斯蘭曆
 酒麴
-爾冬陞
 澹臺
 拜託
 委託
 筑陽
 南筑
 悲筑
-批准
-核准
+批准
+核准
 為準
 準直
 擺鐘
 看錶
 看表面
 鐵鐘
-看下鐘
-看下錶
-瞅下鐘
-瞅下錶
-拿下鐘
-拿下錶
 鐘不敲不響
 對準鐘
 對準鐘錶
 錶慢
 響鐘
 鐘敲
-大本鐘敲
-大笨鐘敲
 世紀鐘錶
 世紀鐘
 錶王
 鐘頂
 鐘紐
 鐘座
-他鐘
 寺鐘
 座鐘
 大笨鐘
 遊牧
 遊蕩
 遊刃
+遊廊
+遊春
 遊美學務
 黑奴籲天錄
 林郁方
 挑大樑
 扛大樑
 后豐
-製得
-限制
-控制
-製取
 心臟
 肝臟
 脾臟
 于敏中
 註:# 不作“注:”
 劃為# 不作“划為”
-併為一體
-併為一家
 一個# 避免“個裡”的錯誤
 兩個
 二個
 節目裡
 場裡
 世紀裡
-亞美尼亞曆
 注釋
 月面
 路面
 體裡
 櫃裡
 片裡
+告裡
 電影裡
 廣播裡
 電視裡
 逆風後
 順風後
 大風後
+賭后
+山仔后
+甲后路
+劉芸后
+謝華后
+趙惠后
+昭惠后
+周惠后
+孝惠后
+趙威后
+聖后
+陳有后
+惠文后
+葉陽后
+后蒼
 馬格里布
 伊里布
 劃入
 黎吉雲
 代表
 水無怜奈
-賭后
-山仔后
-甲后路
-劉芸后
-謝華后
-趙惠后
-昭惠后
-周惠后
-孝惠后
-趙威后
-聖后
-陳有后
-惠文后
-葉陽后
 于冠華
 于雲鶴
 于忠肅集
 億周後
 幾周後
 多周後
-前往
 后瑞站
 帝后臺
+紅后假說
+尊后
+前往
 新井里美
 樗里子
 伊達里子
 王田里
 小井里
 西井里
-尊后
+碧河里
+愛河里花子
 叶志穗
 叶不二子
 于立成
 後天
 學家
 游離
-紅后假說
 書面
 不只
 湧水
 陽穀
 太醜
 御製
-合併
 聖人曆
 電影後
 封為后
 僱車
 僱船
 米糰
+集團
 謹愿
 瞎矇
 里舖
 電子製表
 製毒
 製販
+製得
+製取
 譯製
 遏制 #以下分詞用
 管制
 抑制
 控制
 限制
+強制
 體徵
 綜合徵
 价川
 0齣
 0出現
 0出線
-第一齣
-第二齣
-第三齣
-第四齣
-第五齣
-第六齣
-第七齣
-第八齣
-第九齣
-第一出現
-第一出線
-第二出線
-第三出局
-第四出局
-第五出局
 這齣
 這出現
 這出乎
 秀發生
 秀發起
 秀發展
+留發生
+留發行
+留發展
 縮短發
 簡短發
 短發生
+頭發現
+蛋白發
 古人有云
 昔人有云
 云敞
index 07cb389..09a41ad 100644 (file)
 六齣
 弔兒郎當
 髮小
-髮網
 修鍊
 麵線
 繫上
 防颱
 慾望
 剋星
+挂
+掛
+陸遊
+徵人
+髮針
+供製
+并吞
+併吞下
+髮網
index 0fff823..784ba0e 100644 (file)
  * @ingroup Maintenance
  */
 
-/** */
+$optionsWithArgs = [ 'cache' ];
+$optionsWithoutArgs = [
+       'debug', 'help'
+];
 require_once __DIR__ . '/commandLine.inc';
 
-$options = getopt( '', [ 'debug', 'help', 'cache:' ] );
-
 $debug = isset( $options['debug'] );
 $help = isset( $options['help'] );
 $cache = isset( $options['cache'] ) ? $options['cache'] : null;
index 46d5474..a650aa0 100644 (file)
@@ -81,7 +81,12 @@ class MergeMessageFileList extends Maintenance {
                # Now find out files in a directory
                if ( $this->hasOption( 'extensions-dir' ) ) {
                        $extdir = $this->getOption( 'extensions-dir' );
-                       $entries = scandir( $extdir );
+                       # Allow multiple directories to be passed with ":" as delimiter
+                       $extdirs = explode( ':', $extdir );
+                       $entries = [];
+                       foreach ( $extdirs as $extdir ) {
+                               $entries = array_merge( $entries, scandir( $extdir ) );
+                       }
                        foreach ( $entries as $extname ) {
                                if ( $extname == '.' || $extname == '..' || !is_dir( "$extdir/$extname" ) ) {
                                        continue;
diff --git a/maintenance/mssql/archives/patch-watchlist-wl_id.sql b/maintenance/mssql/archives/patch-watchlist-wl_id.sql
new file mode 100644 (file)
index 0000000..b71f817
--- /dev/null
@@ -0,0 +1,2 @@
+ALTER TABLE /*_*/watchlist ADD wl_id INT IDENTITY;
+ALTER TABLE /*_*/watchlist ADD CONSTRAINT pk_watchlist PRIMARY KEY(wl_id)
index 0e58563..86bd735 100644 (file)
@@ -847,6 +847,7 @@ CREATE INDEX /*i*/rc_user_text ON /*_*/recentchanges (rc_user_text, rc_timestamp
 
 
 CREATE TABLE /*_*/watchlist (
+  wl_id int NOT NULL PRIMARY KEY IDENTITY,
   -- Key to user.user_id
   wl_user int NOT NULL REFERENCES /*_*/mwuser(user_id) ON DELETE CASCADE,
 
index 6d2a553..55f361c 100644 (file)
@@ -583,7 +583,7 @@ class NamespaceConflictChecker extends Maintenance {
                $wikiPage = new WikiPage( $sourceTitle );
                $wikiPage->loadPageData( 'fromdbmaster' );
 
-               $destId = $newTitle->getArticleId();
+               $destId = $newTitle->getArticleID();
                $this->beginTransaction( $this->db, __METHOD__ );
                $this->db->update( 'revision',
                        // SET
diff --git a/maintenance/oracle/archives/patch-watchlist-wl_id.sql b/maintenance/oracle/archives/patch-watchlist-wl_id.sql
new file mode 100644 (file)
index 0000000..4f7180d
--- /dev/null
@@ -0,0 +1,6 @@
+define mw_prefix='{$wgDBprefix}';
+
+ALTER TABLE &mw_prefix.watchlist ADD (
+wl_id NUMBER NOT NULL,
+);
+ALTER TABLE &mw_prefix.watchlist ADD CONSTRAINT &mw_prefix.watchlist_pk PRIMARY KEY (wl_id);
index 9a70b87..27c3030 100644 (file)
@@ -436,11 +436,13 @@ CREATE INDEX &mw_prefix.recentchanges_i06 ON &mw_prefix.recentchanges (rc_namesp
 CREATE INDEX &mw_prefix.recentchanges_i07 ON &mw_prefix.recentchanges (rc_user_text, rc_timestamp);
 
 CREATE TABLE &mw_prefix.watchlist (
+  wl_id                     NUMBER     NOT NULL,
   wl_user                   NUMBER     NOT NULL,
   wl_namespace              NUMBER    DEFAULT 0 NOT NULL,
   wl_title                  VARCHAR2(255)        NOT NULL,
   wl_notificationtimestamp  TIMESTAMP(6) WITH TIME ZONE
 );
+ALTER TABLE &mw_prefix.watchlist ADD CONSTRAINT &mw_prefix.watchlist_pk PRIMARY KEY (wl_id);
 ALTER TABLE &mw_prefix.watchlist ADD CONSTRAINT &mw_prefix.watchlist_fk1 FOREIGN KEY (wl_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
 CREATE UNIQUE INDEX &mw_prefix.watchlist_u01 ON &mw_prefix.watchlist (wl_user, wl_namespace, wl_title);
 CREATE INDEX &mw_prefix.watchlist_i01 ON &mw_prefix.watchlist (wl_namespace, wl_title);
index effed56..17a8d2e 100644 (file)
@@ -73,7 +73,7 @@ class CLIParser extends Maintenance {
 
        public function execute() {
                $this->initParser();
-               print $this->render( $this->WikiText() );
+               print $this->render( $this->Wikitext() );
        }
 
        /**
index c9f049b..61cb198 100644 (file)
@@ -18,6 +18,7 @@ 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 watchlist_wl_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;
@@ -447,7 +448,9 @@ CREATE INDEX new_name_timestamp ON recentchanges (rc_new, rc_namespace, rc_times
 CREATE INDEX rc_ip              ON recentchanges (rc_ip);
 
 
+CREATE SEQUENCE watchlist_wl_id_seq;
 CREATE TABLE watchlist (
+  wl_id                     INTEGER     NOT NULL  PRIMARY KEY DEFAULT nextval('watchlist_wl_id_seq'),
   wl_user                   INTEGER     NOT NULL  REFERENCES mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
   wl_namespace              SMALLINT    NOT NULL  DEFAULT 0,
   wl_title                  TEXT        NOT NULL,
index 4f478ac..aa5d69d 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup Maintenance
  */
 
+$optionsWithoutArgs = [ 'verbose' ];
 require_once __DIR__ . '/commandLine.inc';
 
 $wgHooks['BeforeParserFetchTemplateAndtitle'][] = 'PPFuzzTester::templateHook';
index 816e8a4..8d0873f 100644 (file)
@@ -34,6 +34,9 @@ class ResetUserEmail extends Maintenance {
                $this->addDescription( "Resets a user's email" );
                $this->addArg( 'user', 'Username or user ID, if starts with #', true );
                $this->addArg( 'email', 'Email to assign' );
+
+               $this->addOption( 'no-reset-password', 'Don\'t reset the user\'s password', false, false );
+
                parent::__construct();
        }
 
@@ -57,8 +60,11 @@ class ResetUserEmail extends Maintenance {
                $user->setEmail( $email );
                $user->setEmailAuthenticationTimestamp( wfTimestampNow() );
                $user->saveSettings();
-               // Kick whomever is currently controlling the account off
-               $user->setPassword( PasswordFactory::generateRandomPasswordString( 128 ) );
+
+               if ( !$this->hasOption( 'no-reset-password' ) ) {
+                       // Kick whomever is currently controlling the account off
+                       $user->setPassword( PasswordFactory::generateRandomPasswordString( 128 ) );
+               }
        }
 }
 
index 0ac81a4..c3c2391 100644 (file)
@@ -40,6 +40,7 @@ class RunJobs extends Maintenance {
                $this->addOption( 'procs', 'Number of processes to use', false, true );
                $this->addOption( 'nothrottle', 'Ignore job throttling configuration', false, false );
                $this->addOption( 'result', 'Set to JSON to print only a JSON response', false, true );
+               $this->addOption( 'wait', 'Wait for new jobs instead of exiting', false, false );
        }
 
        public function memoryLimit() {
@@ -67,6 +68,7 @@ class RunJobs extends Maintenance {
                }
 
                $outputJSON = ( $this->getOption( 'result' ) === 'json' );
+               $wait = $this->hasOption( 'wait' );
 
                // Enable DBO_TRX for atomicity; JobRunner manages transactions
                // and works well in web server mode already (@TODO: this is a hack)
@@ -77,15 +79,37 @@ class RunJobs extends Maintenance {
                        $runner->setDebugHandler( [ $this, 'debugInternal' ] );
                }
 
-               $response = $runner->run( [
-                       'type'     => $this->getOption( 'type', false ),
-                       'maxJobs'  => $this->getOption( 'maxjobs', false ),
-                       'maxTime'  => $this->getOption( 'maxtime', false ),
-                       'throttle' => $this->hasOption( 'nothrottle' ) ? false : true,
-               ] );
+               $type = $this->getOption( 'type', false );
+               $maxJobs = $this->getOption( 'maxjobs', false );
+               $maxTime = $this->getOption( 'maxtime', false );
+               $throttle = !$this->hasOption( 'nothrottle' );
 
-               if ( $outputJSON ) {
-                       $this->output( FormatJson::encode( $response, true ) );
+               while ( true ) {
+                       $response = $runner->run( [
+                               'type'     => $type,
+                               'maxJobs'  => $maxJobs,
+                               'maxTime'  => $maxTime,
+                               'throttle' => $throttle,
+                       ] );
+
+                       if ( $outputJSON ) {
+                               $this->output( FormatJson::encode( $response, true ) );
+                       }
+
+                       if (
+                               !$wait ||
+                               $response['reached'] === 'time-limit' ||
+                               $response['reached'] === 'job-limit' ||
+                               $response['reached'] === 'memory-limit'
+                       ) {
+                               break;
+                       }
+
+                       if ( $maxJobs !== false ) {
+                               $maxJobs -= count( $response['jobs'] );
+                       }
+
+                       sleep( 1 );
                }
 
                $wgCommandLineMode = true;
index 2d4e82a..454c506 100644 (file)
@@ -128,7 +128,7 @@ class SqliteMaintenance extends Maintenance {
        }
 
        private function checkSyntax() {
-               if ( !Sqlite::IsPresent() ) {
+               if ( !Sqlite::isPresent() ) {
                        $this->error( "Error: SQLite support not found\n" );
                }
                $files = [ $this->getOption( 'check-syntax' ) ];
diff --git a/maintenance/sqlite/archives/patch-watchlist-wl_id.sql b/maintenance/sqlite/archives/patch-watchlist-wl_id.sql
new file mode 100644 (file)
index 0000000..771f9b7
--- /dev/null
@@ -0,0 +1,23 @@
+DROP TABLE IF EXISTS /*_*/watchlist_tmp;
+
+CREATE TABLE /*$wgDBprefix*/watchlist_tmp (
+  wl_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  wl_user INTEGER  NOT NULL,
+  wl_namespace INTEGER NOT NULL default 0,
+  wl_title TEXT  NOT NULL default '',
+  wl_notificationtimestamp BLOB
+);
+
+INSERT OR IGNORE INTO /*_*/watchlist_tmp (
+    wl_user, wl_namespace, wl_title, wl_notificationtimestamp )
+    SELECT
+    wl_user, wl_namespace, wl_title, wl_notificationtimestamp
+    FROM /*_*/watchlist;
+
+DROP TABLE /*_*/watchlist;
+
+ALTER TABLE /*_*/watchlist_tmp RENAME TO /*_*/watchlist;
+
+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);
+CREATE INDEX /*i*/wl_user_notificationtimestamp ON /*_*/watchlist (wl_user, wl_notificationtimestamp);
index 9da3909..d69e5b9 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 if ( !defined( 'MEDIAWIKI' ) ) {
+       $optionsWithoutArgs = [ 'fix' ];
        require_once __DIR__ . '/../commandLine.inc';
 
        $cs = new CheckStorage;
index 8ea5d58..0ea52ca 100644 (file)
@@ -319,7 +319,7 @@ class FixBug20757 extends Maintenance {
                        if ( $path == "" ) {
                                return false;
                        }
-                       $text = ExternalStore::fetchFromUrl( $url );
+                       $text = ExternalStore::fetchFromURL( $url );
                }
                if ( !in_array( 'object', $flags ) ) {
                        return false;
index 776b72f..80dc7f9 100644 (file)
@@ -24,6 +24,7 @@
 define( 'REPORTING_INTERVAL', 1 );
 
 if ( !defined( 'MEDIAWIKI' ) ) {
+       $optionsWithArgs = [ 'e', 's' ];
        require_once __DIR__ . '/../commandLine.inc';
        require_once 'resolveStubs.php';
 
index 58644c2..2692a07 100644 (file)
@@ -30,10 +30,11 @@ if ( !isset( $args[0] ) ) {
        exit( 1 );
 }
 
+$lang = Language::factory( 'en' );
 $title = Title::newFromText( $args[0] );
 if ( isset( $options['start'] ) ) {
        $start = wfTimestamp( TS_MW, strtotime( $options['start'] ) );
-       echo "Starting from " . $wgLang->timeanddate( $start ) . "\n";
+       echo "Starting from " . $lang->timeanddate( $start ) . "\n";
 } else {
        $start = '19700101000000';
 }
@@ -83,7 +84,7 @@ printf( "%s\nCompression ratio for %d revisions: %5.2f, %s -> %d\n",
        $type,
        count( $hashes ),
        $uncompressedSize / strlen( $serialized ),
-       $wgLang->formatSize( $uncompressedSize ),
+       $lang->formatSize( $uncompressedSize ),
        strlen( $serialized )
 );
 printf( "Compression time: %5.2f ms\n", $t * 1000 );
index 743b9be..89aeb9c 100644 (file)
@@ -619,8 +619,8 @@ CREATE INDEX /*i*/cl_sortkey ON /*_*/categorylinks (cl_to,cl_type,cl_sortkey,cl_
 -- 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);
+-- Used when updating collation (e.g. updateCollation.php)
+CREATE INDEX /*i*/cl_collation_ext ON /*_*/categorylinks (cl_collation, cl_to, cl_type, cl_from);
 
 --
 -- Track all existing categories.  Something is a category if 1) it has an en-
@@ -1139,6 +1139,7 @@ CREATE INDEX /*i*/rc_user_text ON /*_*/recentchanges (rc_user_text, rc_timestamp
 
 
 CREATE TABLE /*_*/watchlist (
+  wl_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
   -- Key to user.user_id
   wl_user int unsigned NOT NULL,
 
index e9c006e..f47e13c 100644 (file)
@@ -20,8 +20,7 @@ class TidyUpBug37714 extends Maintenance {
                );
 
                foreach ( $result as $row ) {
-                       $paramLines = explode( "\n", $row->log_params );
-                       $ids = explode( ',', $paramLines[0] ); // Array dereferencing is PHP >= 5.4 :(
+                       $ids = explode( ',', explode( "\n", $row->log_params )[0] );
                        $result = $this->getDB( DB_SLAVE )->select( // Work out what log entries were changed here.
                                'logging',
                                'log_type',
index 7fe9770..43b10c8 100755 (executable)
@@ -112,7 +112,10 @@ class UpdateMediaWiki extends Maintenance {
                        }
                }
 
-               $wgLang = Language::factory( 'en' );
+               $lang = Language::factory( 'en' );
+               // Set global language to ensure localised errors are in English (bug 20633)
+               RequestContext::getMain()->setLanguage( $lang );
+               $wgLang = $lang; // BackCompat
 
                define( 'MW_UPDATER', true );
 
@@ -124,7 +127,7 @@ class UpdateMediaWiki extends Maintenance {
                        $this->compatChecks();
                } else {
                        $this->output( "Skipping compatibility checks, proceed at your own risk (Ctrl+C to abort)\n" );
-                       wfCountdown( 5 );
+                       wfCountDown( 5 );
                }
 
                // Check external dependencies are up to date
@@ -165,7 +168,7 @@ class UpdateMediaWiki extends Maintenance {
                        $updates[] = 'stats';
                }
 
-               $updater = DatabaseUpdater::newForDb( $db, $shared, $this );
+               $updater = DatabaseUpdater::newForDB( $db, $shared, $this );
                $updater->doUpdates( $updates );
 
                foreach ( $updater->getPostDatabaseUpdateMaintenance() as $maint ) {
@@ -191,7 +194,7 @@ class UpdateMediaWiki extends Maintenance {
 
                $time2 = microtime( true );
 
-               $timeDiff = $wgLang->formatTimePeriod( $time2 - $time1 );
+               $timeDiff = $lang->formatTimePeriod( $time2 - $time1 );
                $this->output( "\nDone in $timeDiff.\n" );
        }
 
index af666b0..186feb2 100644 (file)
@@ -33,7 +33,7 @@ require_once __DIR__ . '/Maintenance.php';
  * @ingroup Maintenance
  */
 class UpdateCollation extends Maintenance {
-       const BATCH_SIZE = 10000; // Number of rows to process in one batch
+       const BATCH_SIZE = 100; // Number of rows to process in one batch
        const SYNC_INTERVAL = 20; // Wait for slaves after this many batches
 
        public $sizeHistogram = [];
@@ -85,10 +85,18 @@ TEXT
                // but this will raise an exception, breaking all category pages
                $collation->getFirstLetter( 'MediaWiki' );
 
+               // Locally at least, (my local is a rather old version of mysql)
+               // mysql seems to filesort if there is both an equality
+               // (but not for an inequality) condition on cl_collation in the
+               // WHERE and it is also the first item in the ORDER BY.
+               if ( $this->hasOption( 'previous-collation' ) ) {
+                       $orderBy = 'cl_to, cl_type, cl_from';
+               } else {
+                       $orderBy = 'cl_collation, cl_to, cl_type, cl_from';
+               }
                $options = [
                        'LIMIT' => self::BATCH_SIZE,
-                       'ORDER BY' => 'cl_from, cl_to',
-                       'STRAIGHT_JOIN',
+                       'ORDER BY' => $orderBy,
                ];
 
                if ( $force || $dryRun ) {
@@ -124,16 +132,24 @@ TEXT
                        }
                        $this->output( "Fixing collation for $count rows.\n" );
                }
-
                $count = 0;
                $batchCount = 0;
                $batchConds = [];
                do {
                        $this->output( "Selecting next " . self::BATCH_SIZE . " rows..." );
+
+                       // cl_type must be selected as a number for proper paging because
+                       // enums suck.
+                       if ( $dbw->getType() === 'mysql' ) {
+                               $clType = 'cl_type+0 AS "cl_type_numeric"';
+                       } else {
+                               $clType = 'cl_type';
+                       }
                        $res = $dbw->select(
                                [ 'categorylinks', 'page' ],
                                [ 'cl_from', 'cl_to', 'cl_sortkey_prefix', 'cl_collation',
-                                       'cl_sortkey', 'page_namespace', 'page_title'
+                                       'cl_sortkey', $clType,
+                                       'page_namespace', 'page_title'
                                ],
                                array_merge( $collationConds, $batchConds, [ 'cl_from = page_id' ] ),
                                __METHOD__,
@@ -217,18 +233,28 @@ TEXT
 
        /**
         * Return an SQL expression selecting rows which sort above the given row,
-        * assuming an ordering of cl_from, cl_to
+        * assuming an ordering of cl_collation, cl_to, cl_type, cl_from
         * @param stdClass $row
         * @param DatabaseBase $dbw
         * @return string
         */
        function getBatchCondition( $row, $dbw ) {
-               $fields = [ 'cl_from', 'cl_to' ];
+               if ( $this->hasOption( 'previous-collation' ) ) {
+                       $fields = [ 'cl_to', 'cl_type', 'cl_from' ];
+               } else {
+                       $fields = [ 'cl_collation', 'cl_to', 'cl_type', 'cl_from' ];
+               }
                $first = true;
                $cond = false;
                $prefix = false;
                foreach ( $fields as $field ) {
-                       $encValue = $dbw->addQuotes( $row->$field );
+                       if ( $dbw->getType() === 'mysql' && $field === 'cl_type' ) {
+                               // Range conditions with enums are weird in mysql
+                               // This must be a numeric literal, or it won't work.
+                               $encValue = intval( $row->cl_type_numeric );
+                       } else {
+                               $encValue = $dbw->addQuotes( $row->$field );
+                       }
                        $inequality = "$field > $encValue";
                        $equality = "$field = $encValue";
                        if ( $first ) {
index 8a895f2..cdb7d9f 100644 (file)
@@ -61,7 +61,7 @@ class UpdateSearchIndex extends Maintenance {
        }
 
        public function execute() {
-               $posFile = $this->getOption( 'p', 'searchUpdate.' . wfWikiId() . '.pos' );
+               $posFile = $this->getOption( 'p', 'searchUpdate.' . wfWikiID() . '.pos' );
                $end = $this->getOption( 'e', wfTimestampNow() );
                if ( $this->hasOption( 's' ) ) {
                        $start = $this->getOption( 's' );
index 9b38e6a..9870bab 100644 (file)
Binary files a/mw-config/images/critical-32.png and b/mw-config/images/critical-32.png differ
index e5b8318..6a29cc0 100644 (file)
Binary files a/mw-config/images/download-32.png and b/mw-config/images/download-32.png differ
index ab09e1d..2f6d505 100644 (file)
Binary files a/mw-config/images/info-32.png and b/mw-config/images/info-32.png differ
index c6bd868..43b0e8a 100644 (file)
Binary files a/mw-config/images/installer-logo.png and b/mw-config/images/installer-logo.png differ
index 34cfa9c..7267344 100644 (file)
Binary files a/mw-config/images/tick-32.png and b/mw-config/images/tick-32.png differ
index 0400734..f2db86f 100644 (file)
Binary files a/mw-config/images/warning-32.png and b/mw-config/images/warning-32.png differ
index 33a2039..9ea6c7b 100644 (file)
@@ -9,16 +9,16 @@
     "grunt": "0.4.5",
     "grunt-cli": "0.1.13",
     "grunt-banana-checker": "0.4.0",
-    "grunt-contrib-copy": "0.8.2",
-    "grunt-contrib-jshint": "0.12.0",
-    "grunt-contrib-watch": "0.6.1",
-    "grunt-jscs": "2.7.0",
+    "grunt-contrib-copy": "1.0.0",
+    "grunt-contrib-jshint": "1.0.0",
+    "grunt-contrib-watch": "1.0.0",
+    "grunt-jscs": "2.8.0",
     "grunt-jsonlint": "1.0.7",
-    "grunt-karma": "0.12.1",
-    "karma": "0.13.19",
+    "grunt-karma": "0.12.2",
+    "karma": "0.13.22",
     "karma-chrome-launcher": "0.2.2",
     "karma-firefox-launcher": "0.1.7",
     "karma-qunit": "0.1.9",
-    "qunitjs": "1.18.0"
+    "qunitjs": "1.22.0"
   }
 }
index 38c7aaa..edce2ea 100644 (file)
--- a/phpcs.xml
+++ b/phpcs.xml
@@ -26,9 +26,9 @@
        <rule ref="Generic.ControlStructures.InlineControlStructure.NotAllowed">
                <severity>0</severity>
        </rule>
-       <exclude-pattern>node_modules</exclude-pattern>
-       <exclude-pattern>vendor</exclude-pattern>
-       <exclude-pattern>extensions</exclude-pattern>
-       <exclude-pattern>skins</exclude-pattern>
+       <exclude-pattern>node_modules/</exclude-pattern>
+       <exclude-pattern>vendor/</exclude-pattern>
+       <exclude-pattern type="relative">^extensions/</exclude-pattern>
+       <exclude-pattern type="relative">^skins/</exclude-pattern>
        <exclude-pattern>.git</exclude-pattern>
 </ruleset>
index b4e4a27..07cd7b5 100644 (file)
@@ -957,7 +957,8 @@ return [
                'dependencies' => [
                        'mediawiki.messagePoster',
                        'mediawiki.Title',
-                       'oojs-ui',
+                       'oojs-ui-core',
+                       'oojs-ui-windows',
                ],
                'messages' => [
                        'feedback-adding',
@@ -993,7 +994,7 @@ return [
                'scripts' => 'resources/src/mediawiki/mediawiki.filewarning.js',
                'styles' => 'resources/src/mediawiki/mediawiki.filewarning.less',
                'dependencies' => [
-                       'oojs-ui',
+                       'oojs-ui-core',
                ],
        ],
        'mediawiki.ForeignApi' => [
@@ -1186,9 +1187,11 @@ return [
                        'resources/src/mediawiki/mediawiki.Upload.BookletLayout.css',
                ],
                'dependencies' => [
-                       'oojs-ui',
+                       'oojs-ui-core',
+                       'oojs-ui-windows',
                        'oojs-ui.styles.icons-content',
                        'oojs-ui.styles.icons-editing-advanced',
+                       'moment',
                        'mediawiki.Title',
                        'mediawiki.user',
                        'mediawiki.Upload',
@@ -1329,7 +1332,11 @@ return [
                        'mediawiki.RegExp',
                        'mediawiki.notify',
                ],
-               'position' => 'top', // For $wgPreloadJavaScriptMwUtil
+               'targets' => [ 'desktop', 'mobile' ],
+       ],
+       'mediawiki.viewport' => [
+               'scripts' => 'resources/src/mediawiki/mediawiki.viewport.js',
+               'position' => 'top',
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.checkboxtoggle' => [
@@ -1478,6 +1485,7 @@ return [
        ],
        'mediawiki.action.view.redirectPage' => [
                'position' => 'top',
+               'targets' => [ 'desktop', 'mobile' ],
                'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.redirectPage.css',
        ],
        'mediawiki.action.view.rightClickEdit' => [
@@ -1680,6 +1688,7 @@ return [
                'position' => 'top',
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.js',
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.css',
+               'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.special.apisandbox.styles' => [
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.apisandbox.top.css',
@@ -1803,7 +1812,7 @@ return [
        'mediawiki.special.pageLanguage' => [
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.pageLanguage.js',
                'dependencies' => [
-                       'oojs-ui',
+                       'oojs-ui-core',
                ],
        ],
        'mediawiki.special.pagesWithProp' => [
@@ -2069,7 +2078,7 @@ return [
                        ],
                ],
                'dependencies' => [
-                       'oojs-ui',
+                       'oojs-ui-widgets',
                        'mediawiki.widgets.styles',
                        // TitleInputWidget
                        'mediawiki.Title',
@@ -2115,7 +2124,7 @@ return [
                        'mw-widgets-dateinput-placeholder-month',
                ],
                'dependencies' => [
-                       'oojs-ui',
+                       'oojs-ui-widgets',
                        'moment',
                ],
                'targets' => [ 'desktop', 'mobile' ],
@@ -2179,7 +2188,7 @@ return [
                        'period-pm',
                ],
                'dependencies' => [
-                       'oojs-ui',
+                       'oojs-ui-core',
                ],
                'targets' => [ 'desktop', 'mobile' ],
        ],
@@ -2189,7 +2198,7 @@ return [
                        'resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js',
                ],
                'dependencies' => [
-                       'oojs-ui',
+                       'oojs-ui-widgets',
                        'mediawiki.api',
                        'mediawiki.ForeignApi',
                        'mediawiki.Title',
@@ -2204,8 +2213,27 @@ return [
                        'resources/src/mediawiki.widgets/mw.widgets.UserInputWidget.js',
                ],
                'dependencies' => [
-                       'oojs-ui',
+                       'oojs-ui-widgets',
+               ],
+               'targets' => [ 'desktop', 'mobile' ],
+       ],
+       'mediawiki.widgets.SearchInputWidget' => [
+               'scripts' => [
+                       'resources/src/mediawiki.widgets/mw.widgets.SearchInputWidget.js',
+               ],
+               'dependencies' => [
+                       'mediawiki.searchSuggest',
+                       // FIXME: Needs TitleInputWidget only
+                       'mediawiki.widgets',
                ],
+       ],
+       'mediawiki.widgets.SearchInputWidget.styles' => [
+               'skinStyles' => [
+                       'default' => [
+                               'resources/src/mediawiki.widgets/mw.widgets.SearchInputWidget.css',
+                       ],
+               ],
+               'position' => 'top',
                'targets' => [ 'desktop', 'mobile' ],
        ],
 
index 87ca3fa..8e07a23 100644 (file)
Binary files a/resources/assets/file-type-icons/fileicon-deb.png and b/resources/assets/file-type-icons/fileicon-deb.png differ
index 1da2276..6619912 100644 (file)
Binary files a/resources/assets/file-type-icons/fileicon-djvu.png and b/resources/assets/file-type-icons/fileicon-djvu.png differ
index f37878d..e7b828a 100644 (file)
Binary files a/resources/assets/file-type-icons/fileicon-dvi.png and b/resources/assets/file-type-icons/fileicon-dvi.png differ
index dc020eb..6cfec03 100644 (file)
Binary files a/resources/assets/file-type-icons/fileicon-exe.png and b/resources/assets/file-type-icons/fileicon-exe.png differ
index f28f8a2..d398632 100644 (file)
Binary files a/resources/assets/file-type-icons/fileicon-html.png and b/resources/assets/file-type-icons/fileicon-html.png differ
index a1b4f22..b1fe880 100644 (file)
Binary files a/resources/assets/file-type-icons/fileicon-java.png and b/resources/assets/file-type-icons/fileicon-java.png differ
index ce2bebb..864ce6d 100644 (file)
Binary files a/resources/assets/file-type-icons/fileicon-mid.png and b/resources/assets/file-type-icons/fileicon-mid.png differ
index 952de1f..2b3a0d9 100644 (file)
Binary files a/resources/assets/file-type-icons/fileicon-mov.png and b/resources/assets/file-type-icons/fileicon-mov.png differ
index 8c8da92..ab5149c 100644 (file)
Binary files a/resources/assets/file-type-icons/fileicon-pdf.png and b/resources/assets/file-type-icons/fileicon-pdf.png differ
index e872833..45c00fd 100644 (file)
Binary files a/resources/assets/file-type-icons/fileicon-ps.png and b/resources/assets/file-type-icons/fileicon-ps.png differ
index 598f190..183d1e9 100644 (file)
Binary files a/resources/assets/file-type-icons/fileicon-psd.png and b/resources/assets/file-type-icons/fileicon-psd.png differ
index 81dbe0b..77e9f52 100644 (file)
Binary files a/resources/assets/file-type-icons/fileicon-rm.png and b/resources/assets/file-type-icons/fileicon-rm.png differ
index 1903aac..a28ad27 100644 (file)
Binary files a/resources/assets/file-type-icons/fileicon-rpm.png and b/resources/assets/file-type-icons/fileicon-rpm.png differ
index b782113..759faf3 100644 (file)
Binary files a/resources/assets/file-type-icons/fileicon-svg.png and b/resources/assets/file-type-icons/fileicon-svg.png differ
index a437284..1e82e7a 100644 (file)
Binary files a/resources/assets/file-type-icons/fileicon-tex.png and b/resources/assets/file-type-icons/fileicon-tex.png differ
index 1ed4e74..838a4b2 100644 (file)
Binary files a/resources/assets/file-type-icons/fileicon-ttf.png and b/resources/assets/file-type-icons/fileicon-ttf.png differ
index 9e988e7..9443934 100644 (file)
Binary files a/resources/assets/file-type-icons/fileicon-txt.png and b/resources/assets/file-type-icons/fileicon-txt.png differ
index 1037b50..2a07b83 100644 (file)
Binary files a/resources/assets/file-type-icons/fileicon-xcf.png and b/resources/assets/file-type-icons/fileicon-xcf.png differ
index ebf0107..9458f0a 100644 (file)
Binary files a/resources/assets/licenses/public-domain.png and b/resources/assets/licenses/public-domain.png differ
index 8c42118..53bb23f 100644 (file)
Binary files a/resources/assets/mediawiki.png and b/resources/assets/mediawiki.png differ
index a784ecf..dadf809 100644 (file)
Binary files a/resources/assets/poweredby_mediawiki_132x47.png and b/resources/assets/poweredby_mediawiki_132x47.png differ
index 7970801..cdcb69d 100644 (file)
Binary files a/resources/assets/poweredby_mediawiki_176x62.png and b/resources/assets/poweredby_mediawiki_176x62.png differ
index 30e1d2e..6883e1c 100644 (file)
Binary files a/resources/assets/poweredby_mediawiki_88x31.png and b/resources/assets/poweredby_mediawiki_88x31.png differ
index 48595b0..9793c70 100644 (file)
Binary files a/resources/assets/wiki.png and b/resources/assets/wiki.png differ
index ff915b0..d8c99aa 100644 (file)
@@ -6,9 +6,24 @@
                        "Assele",
                        "Haqmar",
                        "Sagan",
-                       "Рустам Нурыев"
+                       "Рустам Нурыев",
+                       "Азат Хәлилов"
                ]
        },
-       "ooui-outline-control-move-down": "Аҫҡа күсерергә",
-       "ooui-outline-control-move-up": "Өҫкә күсерергә"
+       "ooui-outline-control-move-down": "Элементты аҫҡа күсерергә",
+       "ooui-outline-control-move-up": "Элементты өҫкә күсерергә",
+       "ooui-outline-control-remove": "Биттәрҙе юйырға",
+       "ooui-toolbar-more": "Тағы",
+       "ooui-toolgroup-expand": "Күберәк",
+       "ooui-toolgroup-collapse": "Аҙыраҡ",
+       "ooui-dialog-message-accept": "Тамам",
+       "ooui-dialog-message-reject": "Кире алырға",
+       "ooui-dialog-process-error": "Нимәлер килеп сыҡманы.",
+       "ooui-dialog-process-dismiss": "Йәшерергә",
+       "ooui-dialog-process-retry": "Ҡабатлап ҡарарға.",
+       "ooui-dialog-process-continue": "Дауам итергә",
+       "ooui-selectfile-button-select": "Файлды һайлағыҙ",
+       "ooui-selectfile-not-supported": "Файл һайлау хупланмай.",
+       "ooui-selectfile-placeholder": "Файл һайланмаған",
+       "ooui-selectfile-dragdrop-placeholder": "Файлды бында күсерегеҙ"
 }
index 5c48b9e..e7dfeb2 100644 (file)
@@ -20,6 +20,8 @@
        "ooui-dialog-process-dismiss": "વિસર્જન",
        "ooui-dialog-process-retry": "ફરી પ્રયત્ન કરો",
        "ooui-dialog-process-continue": "ચાલુ રાખો",
+       "ooui-selectfile-button-select": "ફાઈલ પસંદ કરો",
        "ooui-selectfile-not-supported": "ફાઇલ પસંદગીની જોગવાઈ નથી",
-       "ooui-selectfile-placeholder": "કોઇ ફાઇલ પસંદ નથી કરાઈ"
+       "ooui-selectfile-placeholder": "કોઇ ફાઇલ પસંદ નથી કરાઈ",
+       "ooui-selectfile-dragdrop-placeholder": "અહીં ફાઇલ મૂકો"
 }
index 573096f..ce007fc 100644 (file)
@@ -7,7 +7,8 @@
                        "Siddhartha Ghai",
                        "Goelujjwal",
                        "Ankita-ks",
-                       "Param Mudgal"
+                       "Param Mudgal",
+                       "Sfic"
                ]
        },
        "ooui-outline-control-move-down": "प्रविष्टि नीचे ले जाएँ",
@@ -22,6 +23,8 @@
        "ooui-dialog-process-dismiss": "ख़ारिज करें",
        "ooui-dialog-process-retry": "पुनः प्रयास करें",
        "ooui-dialog-process-continue": "जारी रखें",
+       "ooui-selectfile-button-select": "फ़ाइल चुनें",
        "ooui-selectfile-not-supported": "फ़ाइल का चयन समर्थित नहीं है",
-       "ooui-selectfile-placeholder": "कोई फाइल चुनी नही गई हेै"
+       "ooui-selectfile-placeholder": "कोई फाइल चुनी नही गई हेै",
+       "ooui-selectfile-dragdrop-placeholder": "फ़ाइल यहाँ डालें"
 }
diff --git a/resources/lib/oojs-ui/i18n/mn.json b/resources/lib/oojs-ui/i18n/mn.json
new file mode 100644 (file)
index 0000000..500aca7
--- /dev/null
@@ -0,0 +1,20 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Munkhzaya.E"
+               ]
+       },
+       "ooui-toolbar-more": "Илүү",
+       "ooui-toolgroup-expand": "Илүү",
+       "ooui-toolgroup-collapse": "Цөөн",
+       "ooui-dialog-message-accept": "За",
+       "ooui-dialog-message-reject": "Цуцлах",
+       "ooui-dialog-process-error": "Ямар нэг алдаа гарсан",
+       "ooui-dialog-process-dismiss": "Нуух",
+       "ooui-dialog-process-retry": "Дахин оролдох",
+       "ooui-dialog-process-continue": "Цааш явах",
+       "ooui-selectfile-button-select": "Файлаа сонгох",
+       "ooui-selectfile-not-supported": "Сонгосол файл нь дэмжигдэхгүй байна",
+       "ooui-selectfile-placeholder": "Файл сонгоогүй байна",
+       "ooui-selectfile-dragdrop-placeholder": "Файлаа энд хадгалах"
+}
diff --git a/resources/lib/oojs-ui/i18n/nan.json b/resources/lib/oojs-ui/i18n/nan.json
new file mode 100644 (file)
index 0000000..7fdf532
--- /dev/null
@@ -0,0 +1,17 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Luuva"
+               ]
+       },
+       "ooui-dialog-message-accept": "Liáu-kái",
+       "ooui-dialog-message-reject": "Chhú-siau",
+       "ooui-dialog-process-error": "Ū mi̍h bô hó-sè",
+       "ooui-dialog-process-dismiss": "Koaiⁿ tiāu",
+       "ooui-dialog-process-retry": "Koh chhì khòaⁿ-māi",
+       "ooui-dialog-process-continue": "Kè-sio̍k",
+       "ooui-selectfile-button-select": "Soán-tek 1-ê tóng-àn",
+       "ooui-selectfile-not-supported": "Só͘ soán ê tóng-àn bô siū chi-chhî",
+       "ooui-selectfile-placeholder": "Iáu-bē soán tóng-àn",
+       "ooui-selectfile-dragdrop-placeholder": "Kā tóng-àn tàn chia"
+}
index 228291a..579740f 100644 (file)
@@ -18,5 +18,6 @@
        "ooui-dialog-process-continue": "پرله پورې",
        "ooui-selectfile-button-select": "يوه دوتنه وټاکئ",
        "ooui-selectfile-not-supported": "د دوتنې د ټاکنې ملاتړ نه دی شوی",
-       "ooui-selectfile-placeholder": "کومه دوتنه نه ده ټاکل شوې"
+       "ooui-selectfile-placeholder": "کومه دوتنه نه ده ټاکل شوې",
+       "ooui-selectfile-dragdrop-placeholder": "دوتنه مو دلته خوشې کړئ"
 }
index 1e1b05d..1e4bb55 100644 (file)
@@ -17,6 +17,8 @@
        "ooui-dialog-process-dismiss": "Сап",
        "ooui-dialog-process-retry": "Хатылаан көр",
        "ooui-dialog-process-continue": "Салгыы",
+       "ooui-selectfile-button-select": "Билэни тал",
        "ooui-selectfile-not-supported": "Билэни талыы өйөммөт",
-       "ooui-selectfile-placeholder": "Биир да билэ талыллыбатах"
+       "ooui-selectfile-placeholder": "Биир да билэ талыллыбатах",
+       "ooui-selectfile-dragdrop-placeholder": "Билэни манна сыҕарыт"
 }
index e113671..1b481a3 100644 (file)
@@ -19,6 +19,8 @@
        "ooui-dialog-process-dismiss": "Skrij",
        "ooui-dialog-process-retry": "Poskusi znova",
        "ooui-dialog-process-continue": "Nadaljuj",
+       "ooui-selectfile-button-select": "Izberite datoteko",
        "ooui-selectfile-not-supported": "Izbira datoteke ni podprta",
-       "ooui-selectfile-placeholder": "Nobena datoteka ni izbrana"
+       "ooui-selectfile-placeholder": "Nobena datoteka ni izbrana",
+       "ooui-selectfile-dragdrop-placeholder": "Tukaj spustite datoteko"
 }
index 19725cc..00d1961 100644 (file)
@@ -5,5 +5,21 @@
                        "Tel'et",
                        "Tifinaghes"
                ]
-       }
+       },
+       "ooui-outline-control-move-down": "تۆۋەنگە يۆتكە",
+       "ooui-outline-control-move-up": "يۇقۇرىغا يۆتكە",
+       "ooui-outline-control-remove": "ئۆچۈر",
+       "ooui-toolbar-more": "تېخىمۇ كۆپ",
+       "ooui-toolgroup-expand": "تېخىمۇ كۆپ",
+       "ooui-toolgroup-collapse": "ئاز",
+       "ooui-dialog-message-accept": "تامام",
+       "ooui-dialog-message-reject": "ۋاز كەچ",
+       "ooui-dialog-process-error": "نامەلۇم خاتالىق كۆرۈلدى",
+       "ooui-dialog-process-dismiss": "چىقىرىۋەت",
+       "ooui-dialog-process-retry": "قايتا سىنا",
+       "ooui-dialog-process-continue": "داۋاملاشتۇر",
+       "ooui-selectfile-button-select": "بىر ھۆججەت تاللا",
+       "ooui-selectfile-not-supported": "تاللانغان ھۆججەتتە مەسىلە بار",
+       "ooui-selectfile-placeholder": "ھۆججەت تاللانمىدى",
+       "ooui-selectfile-dragdrop-placeholder": "ھۆججەتنى بۇ يەرگە تاشلاڭ"
 }
index 58b0ed0..211101e 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.15.4
+ * OOjs UI v0.16.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2016 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2016-02-17T02:03:23Z
+ * Date: 2016-03-22T22:48:21Z
  */
 ( function ( OO ) {
 
index 633c558..865dda4 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.15.4
+ * OOjs UI v0.16.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2016 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2016-02-17T02:03:27Z
+ * Date: 2016-03-22T22:48:25Z
  */
 .oo-ui-element-hidden {
        display: none !important;
@@ -31,7 +31,8 @@
        cursor: default;
 }
 .oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
+.oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
        display: inline-block;
        vertical-align: middle;
 }
        display: inline-block;
        position: relative;
 }
-.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       display: inline-block;
-       vertical-align: middle;
-}
 .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
-       display: inline-block;
        vertical-align: top;
        text-align: center;
 }
-.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       display: inline-block;
-       vertical-align: middle;
-}
 .oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
 .oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
 .oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
           -moz-box-sizing: border-box;
                box-sizing: border-box;
 }
+.oo-ui-floatableElement-hidden {
+       display: none;
+}
 .oo-ui-iconElement .oo-ui-iconElement-icon,
 .oo-ui-iconElement.oo-ui-iconElement-icon {
        background-size: contain;
 .oo-ui-indicatorElement.oo-ui-indicatorElement-indicator {
        opacity: 0.8;
 }
+.oo-ui-labelElement .oo-ui-labelElement-label-highlight {
+       font-weight: bold;
+}
 .oo-ui-pendingElement-pending {
        background-image: /* @embed */ url(themes/apex/images/textures/pending.gif);
 }
        line-height: 1.875em;
        vertical-align: middle;
 }
+.oo-ui-actionFieldLayout {
+       max-width: 50em;
+}
 .oo-ui-actionFieldLayout-input,
 .oo-ui-actionFieldLayout-button {
        display: table-cell;
        width: 100%;
        max-width: 50em;
 }
+.oo-ui-dropdownInputWidget .oo-ui-dropdownWidget,
+.oo-ui-dropdownInputWidget select {
+       display: block;
+}
 .oo-ui-dropdownInputWidget select {
-       display: inline-block;
        width: 100%;
        resize: none;
        -webkit-box-sizing: border-box;
 }
 .oo-ui-textInputWidget input,
 .oo-ui-textInputWidget textarea {
-       display: inline-block;
+       display: block;
        width: 100%;
        resize: none;
        -webkit-box-sizing: border-box;
        overflow: auto;
 }
 .oo-ui-textInputWidget input[type="search"] {
-       -webkit-appearance: none;
+       -webkit-appearance: texfield;
 }
 .oo-ui-textInputWidget input[type="search"]::-ms-clear {
        display: none;
 }
-.oo-ui-textInputWidget input[type="search"]::-ms-reveal {
-       display: none;
-}
 .oo-ui-textInputWidget input[type="search"]::-webkit-search-decoration,
 .oo-ui-textInputWidget input[type="search"]::-webkit-search-cancel-button,
 .oo-ui-textInputWidget input[type="search"]::-webkit-search-results-button,
 }
 .oo-ui-dropdownWidget-handle {
        width: 100%;
-       display: inline-block;
+       display: block;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
        cursor: default;
        opacity: 0.2;
 }
-.oo-ui-comboBoxInputWidget > .oo-ui-selectWidget {
-       margin-top: -3px;
-}
index 2062ec6..9dd296c 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.15.4
+ * OOjs UI v0.16.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2016 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2016-02-17T02:03:27Z
+ * Date: 2016-03-22T22:48:25Z
  */
 .oo-ui-element-hidden {
        display: none !important;
@@ -31,7 +31,8 @@
        cursor: default;
 }
 .oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
+.oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
        display: inline-block;
        vertical-align: middle;
 }
        display: inline-block;
        position: relative;
 }
-.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       display: inline-block;
-       vertical-align: middle;
-}
 .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
-       display: inline-block;
        vertical-align: top;
        text-align: center;
 }
-.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       display: inline-block;
-       vertical-align: middle;
-}
 .oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
 .oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
 .oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
-       color: #008064;
+       color: #2962cc;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #00af89;
+       color: #347bff;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #005946;
+       color: #1f4999;
        box-shadow: none;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
 .oo-ui-buttonElement-framed > input.oo-ui-buttonElement-button,
 .oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
        line-height: 1.2em;
-       display: inline-block;
 }
 .oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
        position: absolute;
 .oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
        margin-left: 0.3em;
 }
-.oo-ui-buttonElement-framed.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-       display: inline-block;
-}
 .oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
 .oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-iconElement:not( .oo-ui-labelElement ) > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
        margin-left: 0.46875em;
        color: #ffffff;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
-       color: #00af89;
+       color: #347bff;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover {
-       background-color: rgba(0, 171, 137, 0.1);
-       border-color: rgba(0, 89, 70, 0.5);
+       background-color: rgba(52, 123, 255, 0.1);
+       border-color: rgba(31, 73, 153, 0.5);
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
-       box-shadow: inset 0 0 0 1px #005946;
-       border-color: #005946;
+       box-shadow: inset 0 0 0 1px #1f4999;
+       border-color: #1f4999;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-       color: #005946;
-       border-color: #005946;
+       color: #1f4999;
+       border-color: #1f4999;
        box-shadow: none;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
        color: #ffffff;
-       background-color: #00af89;
-       border-color: #00af89;
+       background-color: #347bff;
+       border-color: #347bff;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover {
-       background: #008064;
-       border-color: #008064;
+       background: #2962cc;
+       border-color: #2962cc;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
        box-shadow: inset 0 0 0 1px #ffffff;
-       border-color: #00af89;
+       border-color: #347bff;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
        color: #ffffff;
-       background-color: #005946;
-       border-color: #005946;
+       background-color: #1f4999;
+       border-color: #1f4999;
        box-shadow: none;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
           -moz-box-sizing: border-box;
                box-sizing: border-box;
 }
+.oo-ui-floatableElement-hidden {
+       display: none;
+}
 .oo-ui-iconElement .oo-ui-iconElement-icon,
 .oo-ui-iconElement.oo-ui-iconElement-icon {
        background-size: contain;
        background-position: center center;
        background-repeat: no-repeat;
 }
+.oo-ui-labelElement .oo-ui-labelElement-label-highlight {
+       font-weight: bold;
+}
 .oo-ui-pendingElement-pending {
        background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
 }
        line-height: 1.875em;
        vertical-align: middle;
 }
+.oo-ui-actionFieldLayout {
+       max-width: 50em;
+}
 .oo-ui-actionFieldLayout-input,
 .oo-ui-actionFieldLayout-button {
        display: table-cell;
        height: 1.6em;
        background-color: white;
        border: 1px solid #777777;
-       background-image: url("themes/mediawiki/images/icons/check-constructive.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-constructive.png");
+       background-image: url("themes/mediawiki/images/icons/check-constructive-deprecated.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive-deprecated.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive-deprecated.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-constructive-deprecated.png");
        background-repeat: no-repeat;
        background-position: center center;
        background-origin: border-box;
        width: 100%;
        max-width: 50em;
 }
+.oo-ui-dropdownInputWidget .oo-ui-dropdownWidget,
+.oo-ui-dropdownInputWidget select {
+       display: block;
+}
 .oo-ui-dropdownInputWidget select {
-       display: inline-block;
        width: 100%;
        resize: none;
        -webkit-box-sizing: border-box;
        height: 1.6em;
        background: white;
        border: 1px solid #777777;
-       background-image: url("themes/mediawiki/images/icons/circle-constructive.png");
-       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive.svg");
-       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive.svg");
-       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle-constructive.png");
+       background-image: url("themes/mediawiki/images/icons/circle-constructive-deprecated.png");
+       background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive-deprecated.svg");
+       background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive-deprecated.svg");
+       background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle-constructive-deprecated.png");
        background-repeat: no-repeat;
        background-position: center center;
        background-origin: border-box;
 }
 .oo-ui-textInputWidget input,
 .oo-ui-textInputWidget textarea {
-       display: inline-block;
+       display: block;
        width: 100%;
        resize: none;
        -webkit-box-sizing: border-box;
        overflow: auto;
 }
 .oo-ui-textInputWidget input[type="search"] {
-       -webkit-appearance: none;
+       -webkit-appearance: texfield;
 }
 .oo-ui-textInputWidget input[type="search"]::-ms-clear {
        display: none;
 }
-.oo-ui-textInputWidget input[type="search"]::-ms-reveal {
-       display: none;
-}
 .oo-ui-textInputWidget input[type="search"]::-webkit-search-decoration,
 .oo-ui-textInputWidget input[type="search"]::-webkit-search-cancel-button,
 .oo-ui-textInputWidget input[type="search"]::-webkit-search-results-button,
 }
 .oo-ui-dropdownWidget-handle {
        width: 100%;
-       display: inline-block;
+       display: block;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
        left: 0.25em;
 }
 .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
-       line-height: 1.275em;
        margin: 0 1em;
 }
 .oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
 .oo-ui-dropdownWidget.oo-ui-indicatorElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
        margin-right: 2em;
 }
-.oo-ui-dropdownWidget .oo-ui-selectWidget {
-       border-top-color: #ffffff;
-}
 .oo-ui-comboBoxInputWidget {
        display: inline-block;
        position: relative;
index f0b96d5..add3f0a 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.15.4
+ * OOjs UI v0.16.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2016 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2016-02-17T02:03:23Z
+ * Date: 2016-03-22T22:48:21Z
  */
 ( function ( OO ) {
 
@@ -56,14 +56,14 @@ OO.ui.MouseButtons = {
 };
 
 /**
- * @property {Number}
+ * @property {number}
  */
 OO.ui.elementId = 0;
 
 /**
  * Generate a unique ID for element
  *
- * @return {String} [id]
+ * @return {string} [id]
  */
 OO.ui.generateElementId = function () {
        OO.ui.elementId += 1;
@@ -74,7 +74,7 @@ OO.ui.generateElementId = function () {
  * Check if an element is focusable.
  * Inspired from :focusable in jQueryUI v1.11.4 - 2015-04-14
  *
- * @param {jQuery} element Element to test
+ * @param {jQuery} $element Element to test
  * @return {boolean}
  */
 OO.ui.isFocusableElement = function ( $element ) {
@@ -253,18 +253,72 @@ OO.ui.debounce = function ( func, wait, immediate ) {
                if ( immediate && !timeout ) {
                        func.apply( context, args );
                }
-               clearTimeout( timeout );
-               timeout = setTimeout( later, wait );
+               if ( !timeout || wait ) {
+                       clearTimeout( timeout );
+                       timeout = setTimeout( later, wait );
+               }
+       };
+};
+
+/**
+ * Returns a function, that, when invoked, will only be triggered at most once
+ * during a given window of time. If called again during that window, it will
+ * wait until the window ends and then trigger itself again.
+ *
+ * As it's not knowable to the caller whether the function will actually run
+ * when the wrapper is called, return values from the function are entirely
+ * discarded.
+ *
+ * @param {Function} func
+ * @param {number} wait
+ * @return {Function}
+ */
+OO.ui.throttle = function ( func, wait ) {
+       var context, args, timeout,
+               previous = 0,
+               run = function () {
+                       timeout = null;
+                       previous = OO.ui.now();
+                       func.apply( context, args );
+               };
+       return function () {
+               // Check how long it's been since the last time the function was
+               // called, and whether it's more or less than the requested throttle
+               // period. If it's less, run the function immediately. If it's more,
+               // set a timeout for the remaining time -- but don't replace an
+               // existing timeout, since that'd indefinitely prolong the wait.
+               var remaining = wait - ( OO.ui.now() - previous );
+               context = this;
+               args = arguments;
+               if ( remaining <= 0 ) {
+                       // Note: unless wait was ridiculously large, this means we'll
+                       // automatically run the first time the function was called in a
+                       // given period. (If you provide a wait period larger than the
+                       // current Unix timestamp, you *deserve* unexpected behavior.)
+                       clearTimeout( timeout );
+                       run();
+               } else if ( !timeout ) {
+                       timeout = setTimeout( run, remaining );
+               }
        };
 };
 
+/**
+ * A (possibly faster) way to get the current timestamp as an integer
+ *
+ * @return {number} Current timestamp
+ */
+OO.ui.now = Date.now || function () {
+       return new Date().getTime();
+};
+
 /**
  * Proxy for `node.addEventListener( eventName, handler, true )`.
  *
  * @param {HTMLElement} node
  * @param {string} eventName
  * @param {Function} handler
- * @deprecated
+ * @deprecated since 0.15.0
  */
 OO.ui.addCaptureEventListener = function ( node, eventName, handler ) {
        node.addEventListener( eventName, handler, true );
@@ -276,7 +330,7 @@ OO.ui.addCaptureEventListener = function ( node, eventName, handler ) {
  * @param {HTMLElement} node
  * @param {string} eventName
  * @param {Function} handler
- * @deprecated
+ * @deprecated since 0.15.0
  */
 OO.ui.removeCaptureEventListener = function ( node, eventName, handler ) {
        node.removeEventListener( eventName, handler, true );
@@ -354,7 +408,7 @@ OO.ui.infuse = function ( idOrNode ) {
         * they support unnamed, ordered message parameters.
         *
         * @param {string} key Message key
-        * @param {Mixed...} [params] Message parameters
+        * @param {...Mixed} [params] Message parameters
         * @return {string} Translated message with parameters substituted
         */
        OO.ui.msg = function ( key ) {
@@ -380,7 +434,7 @@ OO.ui.infuse = function ( idOrNode ) {
  * Use this when you are statically specifying a message and the message may not yet be present.
  *
  * @param {string} key Message key
- * @param {Mixed...} [params] Message parameters
+ * @param {...Mixed} [params] Message parameters
  * @return {Function} Function that returns the resolved message when executed
  */
 OO.ui.deferMsg = function () {
@@ -577,6 +631,7 @@ OO.ui.Element.static.infuse = function ( idOrNode ) {
 /**
  * Implementation helper for `infuse`; skips the type check and has an
  * extra property so that only the top-level invocation touches the DOM.
+ *
  * @private
  * @param {string|HTMLElement|jQuery} idOrNode
  * @param {jQuery.Promise|boolean} domPromise A promise that will be resolved
@@ -608,13 +663,13 @@ OO.ui.Element.static.unsafeInfuse = function ( idOrNode, domPromise ) {
                }
                if ( domPromise ) {
                        // pick up dynamic state, like focus, value of form inputs, scroll position, etc.
-                       state = data.gatherPreInfuseState( $elem );
+                       state = data.constructor.static.gatherPreInfuseState( $elem, data );
                        // restore dynamic state after the new element is re-inserted into DOM under infused parent
                        domPromise.done( data.restorePreInfuseState.bind( data, state ) );
                        infusedChildren = $elem.data( 'ooui-infused-children' );
                        if ( infusedChildren && infusedChildren.length ) {
                                infusedChildren.forEach( function ( data ) {
-                                       var state = data.gatherPreInfuseState( $elem );
+                                       var state = data.constructor.static.gatherPreInfuseState( $elem, data );
                                        domPromise.done( data.restorePreInfuseState.bind( data, state ) );
                                } );
                        }
@@ -682,7 +737,7 @@ OO.ui.Element.static.unsafeInfuse = function ( idOrNode, domPromise ) {
                                infused.$element.removeData( 'ooui-infused-children' );
                                return infused;
                        }
-                       if ( value.html ) {
+                       if ( value.html !== undefined ) {
                                return new OO.ui.HtmlSnippet( value.html );
                        }
                }
@@ -1203,7 +1258,7 @@ OO.ui.Element.prototype.getData = function () {
 /**
  * Set element data.
  *
- * @param {Mixed} Element data
+ * @param {Mixed} data Element data
  * @chainable
  */
 OO.ui.Element.prototype.setData = function ( data ) {
@@ -1264,6 +1319,7 @@ OO.ui.Element.prototype.getTagName = function () {
 
 /**
  * Check if the element is attached to the DOM
+ *
  * @return {boolean} The element is attached to the DOM
  */
 OO.ui.Element.prototype.isElementAttached = function () {
@@ -1724,6 +1780,7 @@ OO.ui.mixin.TabIndexedElement.prototype.getTabIndex = function () {
  * See the [OOjs UI documentation on MediaWiki] [1] for examples.
  *
  * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Buttons_and_Switches#Buttons
+ *
  * @abstract
  * @class
  *
@@ -2575,7 +2632,7 @@ OO.ui.mixin.IndicatorElement.prototype.setIndicator = function ( indicator ) {
  *
  * The title is displayed when a user moves the mouse over the indicator.
  *
- * @param {string|Function|null} indicator Indicator title text, a function that returns text, or
+ * @param {string|Function|null} indicatorTitle Indicator title text, a function that returns text, or
  *   `null` for no indicator title
  * @chainable
  */
@@ -2636,8 +2693,6 @@ OO.ui.mixin.IndicatorElement.prototype.getIndicatorTitle = function () {
  *  as a plaintext string, a jQuery selection of elements, or a function that will produce a string
  *  in the future. See the [OOjs UI documentation on MediaWiki] [2] for examples.
  *  [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Labels
- * @cfg {boolean} [autoFitLabel=true] Fit the label to the width of the parent element.
- *  The label will be truncated to fit if necessary.
  */
 OO.ui.mixin.LabelElement = function OoUiMixinLabelElement( config ) {
        // Configuration initialization
@@ -2646,7 +2701,6 @@ OO.ui.mixin.LabelElement = function OoUiMixinLabelElement( config ) {
        // Properties
        this.$label = null;
        this.label = null;
-       this.autoFitLabel = config.autoFitLabel === undefined || !!config.autoFitLabel;
 
        // Initialization
        this.setLabel( config.label || this.constructor.static.label );
@@ -2677,6 +2731,33 @@ OO.initClass( OO.ui.mixin.LabelElement );
  */
 OO.ui.mixin.LabelElement.static.label = null;
 
+/* Static methods */
+
+/**
+ * Highlight the first occurrence of the query in the given text
+ *
+ * @param {string} text Text
+ * @param {string} query Query to find
+ * @return {jQuery} Text with the first match of the query
+ *  sub-string wrapped in highlighted span
+ */
+OO.ui.mixin.LabelElement.static.highlightQuery = function ( text, query ) {
+       var $result = $( '<span>' ),
+               offset = text.toLowerCase().indexOf( query.toLowerCase() );
+
+       if ( !query.length || offset === -1 ) {
+               return $result.text( text );
+       }
+       $result.append(
+               document.createTextNode( text.slice( 0, offset ) ),
+               $( '<span>' )
+                       .addClass( 'oo-ui-labelElement-label-highlight' )
+                       .text( text.slice( offset, offset + query.length ) ),
+               document.createTextNode( text.slice( offset + query.length ) )
+       );
+       return $result.contents();
+};
+
 /* Methods */
 
 /**
@@ -2707,9 +2788,7 @@ OO.ui.mixin.LabelElement.prototype.setLabelElement = function ( $label ) {
  */
 OO.ui.mixin.LabelElement.prototype.setLabel = function ( label ) {
        label = typeof label === 'function' ? OO.ui.resolveMsg( label ) : label;
-       label = ( ( typeof label === 'string' && label.length ) || label instanceof jQuery || label instanceof OO.ui.HtmlSnippet ) ? label : null;
-
-       this.$element.toggleClass( 'oo-ui-labelElement', !!label );
+       label = ( ( typeof label === 'string' || label instanceof jQuery ) && label.length ) || ( label instanceof OO.ui.HtmlSnippet && label.toString().length ) ? label : null;
 
        if ( this.label !== label ) {
                if ( this.$label ) {
@@ -2719,9 +2798,22 @@ OO.ui.mixin.LabelElement.prototype.setLabel = function ( label ) {
                this.emit( 'labelChange' );
        }
 
+       this.$element.toggleClass( 'oo-ui-labelElement', !!this.label );
+
        return this;
 };
 
+/**
+ * Set the label as plain text with a highlighted query
+ *
+ * @param {string} text Text label to set
+ * @param {string} query Substring of text to highlight
+ * @chainable
+ */
+OO.ui.mixin.LabelElement.prototype.setHighlightedQuery = function ( text, query ) {
+       return this.setLabel( this.constructor.static.highlightQuery( text, query ) );
+};
+
 /**
  * Get the label.
  *
@@ -2736,12 +2828,9 @@ OO.ui.mixin.LabelElement.prototype.getLabel = function () {
  * Fit the label.
  *
  * @chainable
+ * @deprecated since 0.16.0
  */
 OO.ui.mixin.LabelElement.prototype.fitLabel = function () {
-       if ( this.$label && this.$label.autoEllipsis && this.autoFitLabel ) {
-               this.$label.autoEllipsis( { hasSpan: false, tooltip: true } );
-       }
-
        return this;
 };
 
@@ -3017,7 +3106,7 @@ OO.ui.mixin.TitledElement = function OoUiMixinTitledElement( config ) {
        this.title = null;
 
        // Initialization
-       this.setTitle( config.title || this.constructor.static.title );
+       this.setTitle( config.title !== undefined ? config.title : this.constructor.static.title );
        this.setTitledElement( config.$titled || this.$element );
 };
 
@@ -3169,7 +3258,7 @@ OO.ui.mixin.AccessKeyedElement.prototype.setAccessKeyedElement = function ( $acc
 /**
  * Set accesskey.
  *
- * @param {string|Function|null} accesskey Key, a function that returns a key, or `null` for no accesskey
+ * @param {string|Function|null} accessKey Key, a function that returns a key, or `null` for no accesskey
  * @chainable
  */
 OO.ui.mixin.AccessKeyedElement.prototype.setAccessKey = function ( accessKey ) {
@@ -4015,6 +4104,9 @@ OO.ui.mixin.ClippableElement.prototype.clip = function () {
                ccWidth + ccOffset.left :
                ( scOffset.left + scrollLeft + scWidth ) - ccOffset.left;
        desiredHeight = ( scOffset.top + scrollTop + scHeight ) - ccOffset.top;
+       // It should never be desirable to exceed the dimensions of the browser viewport... right?
+       desiredWidth = Math.min( desiredWidth, document.documentElement.clientWidth );
+       desiredHeight = Math.min( desiredHeight, document.documentElement.clientHeight );
        allotedWidth = Math.ceil( desiredWidth - extraWidth );
        allotedHeight = Math.ceil( desiredHeight - extraHeight );
        naturalWidth = this.$clippable.prop( 'scrollWidth' );
@@ -4432,6 +4524,7 @@ OO.ui.PopupWidget.prototype.updateDimensions = function ( transition ) {
 
 /**
  * Set popup alignment
+ *
  * @param {string} align Alignment of the popup, `center`, `force-left`, `force-right`,
  *  `backwards` or `forwards`.
  */
@@ -4446,6 +4539,7 @@ OO.ui.PopupWidget.prototype.setAlignment = function ( align ) {
 
 /**
  * Get popup alignment
+ *
  * @return {string} align Alignment of the popup, `center`, `force-left`, `force-right`,
  *  `backwards` or `forwards`.
  */
@@ -5154,7 +5248,7 @@ OO.ui.SelectWidget.prototype.unbindKeyDownListener = function () {
 /**
  * Scroll item into view, preventing spurious mouse highlight actions from happening.
  *
- * @return {OO.ui.OptionWidget} Item to scroll into view
+ * @param {OO.ui.OptionWidget} item Item to scroll into view
  */
 OO.ui.SelectWidget.prototype.scrollItemIntoView = function ( item ) {
        var widget = this;
@@ -5866,7 +5960,6 @@ OO.ui.MenuSelectWidget = function OoUiMenuSelectWidget( config ) {
        OO.ui.mixin.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$group } ) );
 
        // Properties
-       this.newItems = null;
        this.autoHide = config.autoHide === undefined || !!config.autoHide;
        this.filterFromInput = !!config.filterFromInput;
        this.$input = config.$input ? config.$input : config.input ? config.input.$input : null;
@@ -5944,6 +6037,7 @@ OO.ui.MenuSelectWidget.prototype.onKeyDown = function ( e ) {
 
 /**
  * Update menu item visibility after input changes.
+ *
  * @protected
  */
 OO.ui.MenuSelectWidget.prototype.updateItemVisibility = function () {
@@ -6019,6 +6113,7 @@ OO.ui.MenuSelectWidget.prototype.unbindKeyPressListener = function () {
  *
  * Note that ‘choose’ should never be modified programmatically. A user can choose an option with the keyboard
  * or mouse and it becomes selected. To select an item programmatically, use the #selectItem method.
+ *
  * @param {OO.ui.OptionWidget} item Item to choose
  * @chainable
  */
@@ -6032,26 +6127,9 @@ OO.ui.MenuSelectWidget.prototype.chooseItem = function ( item ) {
  * @inheritdoc
  */
 OO.ui.MenuSelectWidget.prototype.addItems = function ( items, index ) {
-       var i, len, item;
-
        // Parent method
        OO.ui.MenuSelectWidget.parent.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.isVisible() ) {
-                       // Defer fitting label until item has been attached
-                       item.fitLabel();
-               } else {
-                       this.newItems.push( item );
-               }
-       }
-
        // Reevaluate clipping
        this.clip();
 
@@ -6088,7 +6166,7 @@ OO.ui.MenuSelectWidget.prototype.clearItems = function () {
  * @inheritdoc
  */
 OO.ui.MenuSelectWidget.prototype.toggle = function ( visible ) {
-       var i, len, change;
+       var change;
 
        visible = ( visible === undefined ? !this.visible : !!visible ) && !!this.items.length;
        change = visible !== this.isVisible();
@@ -6101,12 +6179,6 @@ OO.ui.MenuSelectWidget.prototype.toggle = function ( visible ) {
                        this.bindKeyDownListener();
                        this.bindKeyPressListener();
 
-                       if ( this.newItems && this.newItems.length ) {
-                               for ( i = 0, len = this.newItems.length; i < len; i++ ) {
-                                       this.newItems[ i ].fitLabel();
-                               }
-                               this.newItems = null;
-                       }
                        this.toggleClipping( true );
 
                        if ( this.getSelectedItem() ) {
@@ -6546,22 +6618,19 @@ OO.ui.mixin.FloatableElement.prototype.togglePositioning = function ( positionin
 
                closestScrollableOfContainer = OO.ui.Element.static.getClosestScrollableContainer( this.$floatableContainer[ 0 ] );
                closestScrollableOfFloatable = OO.ui.Element.static.getClosestScrollableContainer( this.$floatable[ 0 ] );
-               if ( closestScrollableOfContainer !== closestScrollableOfFloatable ) {
-                       // If the scrollable is the root, we have to listen to scroll events
-                       // on the window because of browser inconsistencies (or do we? someone should verify this)
-                       if ( $( closestScrollableOfContainer ).is( 'html, body' ) ) {
-                               closestScrollableOfContainer = OO.ui.Element.static.getWindow( closestScrollableOfContainer );
-                       }
+               this.needsCustomPosition = closestScrollableOfContainer !== closestScrollableOfFloatable;
+               // If the scrollable is the root, we have to listen to scroll events
+               // on the window because of browser inconsistencies.
+               if ( $( closestScrollableOfContainer ).is( 'html, body' ) ) {
+                       closestScrollableOfContainer = OO.ui.Element.static.getWindow( closestScrollableOfContainer );
                }
 
                if ( positioning ) {
                        this.$floatableWindow = $( this.getElementWindow() );
                        this.$floatableWindow.on( 'resize', this.onFloatableWindowResizeHandler );
 
-                       if ( closestScrollableOfContainer !== closestScrollableOfFloatable ) {
-                               this.$floatableClosestScrollable = $( closestScrollableOfContainer );
-                               this.$floatableClosestScrollable.on( 'scroll', this.onFloatableScrollHandler );
-                       }
+                       this.$floatableClosestScrollable = $( closestScrollableOfContainer );
+                       this.$floatableClosestScrollable.on( 'scroll', this.onFloatableScrollHandler );
 
                        // Initial position after visible
                        this.position();
@@ -6583,6 +6652,50 @@ OO.ui.mixin.FloatableElement.prototype.togglePositioning = function ( positionin
        return this;
 };
 
+/**
+ * Check whether the bottom edge of the given element is within the viewport of the given container.
+ *
+ * @private
+ * @param {jQuery} $element
+ * @param {jQuery} $container
+ * @return {boolean}
+ */
+OO.ui.mixin.FloatableElement.prototype.isElementInViewport = function ( $element, $container ) {
+       var elemRect, contRect,
+               topEdgeInBounds = false,
+               leftEdgeInBounds = false,
+               bottomEdgeInBounds = false,
+               rightEdgeInBounds = false;
+
+       elemRect = $element[ 0 ].getBoundingClientRect();
+       if ( $container[ 0 ] === window ) {
+               contRect = {
+                       top: 0,
+                       left: 0,
+                       right: document.documentElement.clientWidth,
+                       bottom: document.documentElement.clientHeight
+               };
+       } else {
+               contRect = $container[ 0 ].getBoundingClientRect();
+       }
+
+       if ( elemRect.top >= contRect.top && elemRect.top <= contRect.bottom ) {
+               topEdgeInBounds = true;
+       }
+       if ( elemRect.left >= contRect.left && elemRect.left <= contRect.right ) {
+               leftEdgeInBounds = true;
+       }
+       if ( elemRect.bottom >= contRect.top && elemRect.bottom <= contRect.bottom ) {
+               bottomEdgeInBounds = true;
+       }
+       if ( elemRect.right >= contRect.left && elemRect.right <= contRect.right ) {
+               rightEdgeInBounds = true;
+       }
+
+       // We only care that any part of the bottom edge is visible
+       return bottomEdgeInBounds && ( leftEdgeInBounds || rightEdgeInBounds );
+};
+
 /**
  * Position the floatable below its container.
  *
@@ -6597,6 +6710,17 @@ OO.ui.mixin.FloatableElement.prototype.position = function () {
                return this;
        }
 
+       if ( !this.isElementInViewport( this.$floatableContainer, this.$floatableClosestScrollable ) ) {
+               this.$floatable.addClass( 'oo-ui-floatableElement-hidden' );
+               return;
+       } else {
+               this.$floatable.removeClass( 'oo-ui-floatableElement-hidden' );
+       }
+
+       if ( !this.needsCustomPosition ) {
+               return;
+       }
+
        pos = OO.ui.Element.static.getRelativePosition( this.$floatableContainer, this.$floatable.offsetParent() );
 
        // Position under container
@@ -6728,7 +6852,8 @@ OO.ui.InputWidget = function OoUiInputWidget( config ) {
        OO.ui.InputWidget.parent.call( this, config );
 
        // Properties
-       this.$input = this.getInputElement( config );
+       // See #reusePreInfuseDOM about config.$input
+       this.$input = config.$input || this.getInputElement( config );
        this.value = '';
        this.inputFilter = config.inputFilter;
 
@@ -6812,9 +6937,8 @@ OO.ui.InputWidget.static.gatherPreInfuseState = function ( node, config ) {
  * @param {Object} config Configuration options
  * @return {jQuery} Input element
  */
-OO.ui.InputWidget.prototype.getInputElement = function ( config ) {
-       // See #reusePreInfuseDOM about config.$input
-       return config.$input || $( '<input>' );
+OO.ui.InputWidget.prototype.getInputElement = function () {
+       return $( '<input>' );
 };
 
 /**
@@ -6851,7 +6975,7 @@ OO.ui.InputWidget.prototype.getValue = function () {
 /**
  * Set the directionality of the input, either RTL (right-to-left) or LTR (left-to-right).
  *
- * @deprecated since v0.13.1, use #setDir directly
+ * @deprecated since v0.13.1; use #setDir directly
  * @param {boolean} isRTL Directionality is right-to-left
  * @chainable
  */
@@ -7003,12 +7127,17 @@ OO.ui.InputWidget.prototype.restorePreInfuseState = function ( state ) {
  * @cfg {boolean} [useInputTag=false] Use an `<input/>` tag instead of a `<button/>` tag, the default.
  *  Widgets configured to be an `<input/>` do not support {@link #icon icons} and {@link #indicator indicators},
  *  non-plaintext {@link #label labels}, or {@link #value values}. In general, useInputTag should only
- *  be set to `true` when there’s need to support IE6 in a form with multiple buttons.
+ *  be set to `true` when there’s need to support IE 6 in a form with multiple buttons.
  */
 OO.ui.ButtonInputWidget = function OoUiButtonInputWidget( config ) {
        // Configuration initialization
        config = $.extend( { type: 'button', useInputTag: false }, config );
 
+       // See InputWidget#reusePreInfuseDOM about config.$input
+       if ( config.$input ) {
+               config.$input.empty();
+       }
+
        // Properties (must be set before parent constructor, which calls #setValue)
        this.useInputTag = config.useInputTag;
 
@@ -7054,10 +7183,6 @@ OO.ui.ButtonInputWidget.static.supportsSimpleLabel = false;
  */
 OO.ui.ButtonInputWidget.prototype.getInputElement = function ( config ) {
        var type;
-       // See InputWidget#reusePreInfuseDOM about config.$input
-       if ( config.$input ) {
-               return config.$input.empty();
-       }
        type = [ 'button', 'submit', 'reset' ].indexOf( config.type ) !== -1 ? config.type : 'button';
        return $( '<' + ( config.useInputTag ? 'input' : 'button' ) + ' type="' + type + '">' );
 };
@@ -7072,22 +7197,20 @@ OO.ui.ButtonInputWidget.prototype.getInputElement = function ( config ) {
  * @chainable
  */
 OO.ui.ButtonInputWidget.prototype.setLabel = function ( label ) {
-       OO.ui.mixin.LabelElement.prototype.setLabel.call( this, label );
+       if ( typeof label === 'function' ) {
+               label = OO.ui.resolveMsg( label );
+       }
 
        if ( this.useInputTag ) {
-               if ( typeof label === 'function' ) {
-                       label = OO.ui.resolveMsg( label );
-               }
-               if ( label instanceof jQuery ) {
-                       label = label.text();
-               }
-               if ( !label ) {
+               // Discard non-plaintext labels
+               if ( typeof label !== 'string' ) {
                        label = '';
                }
+
                this.$input.val( label );
        }
 
-       return this;
+       return OO.ui.mixin.LabelElement.prototype.setLabel.call( this, label );
 };
 
 /**
@@ -7184,7 +7307,7 @@ OO.ui.CheckboxInputWidget.static.gatherPreInfuseState = function ( node, config
  * @protected
  */
 OO.ui.CheckboxInputWidget.prototype.getInputElement = function () {
-       return $( '<input type="checkbox" />' );
+       return $( '<input>' ).attr( 'type', 'checkbox' );
 };
 
 /**
@@ -7279,6 +7402,11 @@ OO.ui.DropdownInputWidget = function OoUiDropdownInputWidget( config ) {
        // Configuration initialization
        config = config || {};
 
+       // See InputWidget#reusePreInfuseDOM about config.$input
+       if ( config.$input ) {
+               config.$input.addClass( 'oo-ui-element-hidden' );
+       }
+
        // Properties (must be done before parent constructor which calls #setDisabled)
        this.dropdownWidget = new OO.ui.DropdownWidget( config.dropdown );
 
@@ -7309,12 +7437,8 @@ OO.mixinClass( OO.ui.DropdownInputWidget, OO.ui.mixin.TitledElement );
  * @inheritdoc
  * @protected
  */
-OO.ui.DropdownInputWidget.prototype.getInputElement = function ( config ) {
-       // See InputWidget#reusePreInfuseDOM about config.$input
-       if ( config.$input ) {
-               return config.$input.addClass( 'oo-ui-element-hidden' );
-       }
-       return $( '<input type="hidden">' );
+OO.ui.DropdownInputWidget.prototype.getInputElement = function () {
+       return $( '<input>' ).attr( 'type', 'hidden' );
 };
 
 /**
@@ -7476,7 +7600,7 @@ OO.ui.RadioInputWidget.static.gatherPreInfuseState = function ( node, config ) {
  * @protected
  */
 OO.ui.RadioInputWidget.prototype.getInputElement = function () {
-       return $( '<input type="radio" />' );
+       return $( '<input>' ).attr( 'type', 'radio' );
 };
 
 /**
@@ -7591,7 +7715,7 @@ OO.ui.RadioSelectInputWidget.static.gatherPreInfuseState = function ( node, conf
  * @protected
  */
 OO.ui.RadioSelectInputWidget.prototype.getInputElement = function () {
-       return $( '<input type="hidden">' );
+       return $( '<input>' ).attr( 'type', 'hidden' );
 };
 
 /**
@@ -7688,7 +7812,7 @@ OO.ui.RadioSelectInputWidget.prototype.setOptions = function ( options ) {
  * @constructor
  * @param {Object} [config] Configuration options
  * @cfg {string} [type='text'] The value of the HTML `type` attribute: 'text', 'password', 'search',
- *  'email' or 'url'. Ignored if `multiline` is true.
+ *  'email', 'url' or 'date'. Ignored if `multiline` is true.
  *
  *  Some values of `type` result in additional behaviors:
  *
@@ -7788,7 +7912,7 @@ OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
                .append( this.$icon, this.$indicator );
        this.setReadOnly( !!config.readOnly );
        this.updateSearchIndicator();
-       if ( config.placeholder ) {
+       if ( config.placeholder !== undefined ) {
                this.$input.attr( 'placeholder', config.placeholder );
        }
        if ( config.maxLength !== undefined ) {
@@ -8089,8 +8213,8 @@ OO.ui.TextInputWidget.prototype.adjustSize = function () {
                                .val( '' );
                        maxInnerHeight = this.$clone.innerHeight();
 
-                       // Difference between reported innerHeight and scrollHeight with no scrollbars present
-                       // Equals 1 on Blink-based browsers and 0 everywhere else
+                       // Difference between reported innerHeight and scrollHeight with no scrollbars present.
+                       // This is sometimes non-zero on Blink-based browsers, depending on zoom level.
                        measurementError = maxInnerHeight - this.$clone[ 0 ].scrollHeight;
                        idealHeight = Math.min( maxInnerHeight, scrollHeight + measurementError );
 
@@ -8133,7 +8257,7 @@ OO.ui.TextInputWidget.prototype.adjustSize = function () {
 OO.ui.TextInputWidget.prototype.getInputElement = function ( config ) {
        return config.multiline ?
                $( '<textarea>' ) :
-               $( '<input type="' + this.getSaneType( config ) + '" />' );
+               $( '<input>' ).attr( 'type', this.getSaneType( config ) );
 };
 
 /**
@@ -8144,7 +8268,7 @@ OO.ui.TextInputWidget.prototype.getInputElement = function ( config ) {
  * @private
  */
 OO.ui.TextInputWidget.prototype.getSaneType = function ( config ) {
-       var type = [ 'text', 'password', 'search', 'email', 'url' ].indexOf( config.type ) !== -1 ?
+       var type = [ 'text', 'password', 'search', 'email', 'url', 'date' ].indexOf( config.type ) !== -1 ?
                config.type :
                'text';
        return config.multiline ? 'multiline' : type;
@@ -8187,7 +8311,16 @@ OO.ui.TextInputWidget.prototype.selectRange = function ( from, to ) {
 
        this.focus();
 
-       input.setSelectionRange( start, end, isBackwards ? 'backward' : 'forward' );
+       try {
+               input.setSelectionRange( start, end, isBackwards ? 'backward' : 'forward' );
+       } catch ( e ) {
+               // IE throws an exception if you call setSelectionRange on a unattached DOM node.
+               // Rather than expensively check if the input is attached every time, just check
+               // if it was the cause of an error being thrown. If not, rethrow the error.
+               if ( this.getElementDocument().body.contains( input ) ) {
+                       throw e;
+               }
+       }
        return this;
 };
 
@@ -8339,7 +8472,7 @@ OO.ui.TextInputWidget.prototype.setValidityFlag = function ( isValid ) {
  * This method returns a promise that resolves with a boolean `true` if the current value is
  * considered valid according to the supplied {@link #validate validation pattern}.
  *
- * @deprecated
+ * @deprecated since v0.12.3
  * @return {jQuery.Promise} A promise that resolves to a boolean `true` if the value is valid.
  */
 OO.ui.TextInputWidget.prototype.isValid = function () {
@@ -8398,7 +8531,11 @@ OO.ui.TextInputWidget.prototype.getValidity = function () {
  */
 OO.ui.TextInputWidget.prototype.setLabelPosition = function ( labelPosition ) {
        this.labelPosition = labelPosition;
-       this.updatePosition();
+       if ( this.label ) {
+               // If there is no label and we only change the position, #updatePosition is a no-op,
+               // but it takes really a lot of work to do nothing.
+               this.updatePosition();
+       }
        return this;
 };
 
@@ -8603,6 +8740,7 @@ OO.inheritClass( OO.ui.ComboBoxInputWidget, OO.ui.TextInputWidget );
 
 /**
  * Get the combobox's menu.
+ *
  * @return {OO.ui.FloatingMenuSelectWidget} Menu widget
  */
 OO.ui.ComboBoxInputWidget.prototype.getMenu = function () {
@@ -8611,6 +8749,7 @@ OO.ui.ComboBoxInputWidget.prototype.getMenu = function () {
 
 /**
  * Get the combobox's text input widget.
+ *
  * @return {OO.ui.TextInputWidget} Text input widget
  */
 OO.ui.ComboBoxInputWidget.prototype.getInput = function () {
@@ -8734,7 +8873,7 @@ OO.ui.ComboBoxInputWidget.prototype.setOptions = function ( options ) {
 
 /**
  * @class
- * @deprecated Use OO.ui.ComboBoxInputWidget instead.
+ * @deprecated since 0.13.2; use OO.ui.ComboBoxInputWidget instead
  */
 OO.ui.ComboBoxWidget = OO.ui.ComboBoxInputWidget;
 
@@ -8758,6 +8897,7 @@ OO.ui.ComboBoxWidget = OO.ui.ComboBoxInputWidget;
  * Please see the [OOjs UI documentation on MediaWiki] [1] for examples and more information.
  *
  * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Layouts/Fields_and_Fieldsets
+ *
  * @class
  * @extends OO.ui.Layout
  * @mixins OO.ui.mixin.LabelElement
index de585a7..9715e66 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.15.4
+ * OOjs UI v0.16.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2016 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2016-02-17T02:03:23Z
+ * Date: 2016-03-22T22:48:21Z
  */
 ( function ( OO ) {
 
@@ -49,11 +49,15 @@ OO.ui.MediaWikiTheme.prototype.getElementClasses = function ( element ) {
                isFramed = element.supports( [ 'isFramed' ] ) && element.isFramed();
                isActive = element.supports( [ 'isActive' ] ) && element.isActive();
                if (
-                       ( isFramed && ( isActive || element.isDisabled() || element.hasFlag( 'primary' ) ) ) ||
-                       ( !isFramed && element.hasFlag( 'primary' ) )
+                       ( isFramed && ( isActive || element.isDisabled() || element.hasFlag( 'primary' ) ) )
                ) {
+                       // Button with a dark background, use white icon
                        variants.invert = true;
+               } else if ( !isFramed && element.isDisabled() ) {
+                       // Frameless disabled button, always use black icon regardless of flags
+                       variants.invert = false;
                } else {
+                       // Any other kind of button, use the right colored icon if available
                        variants.progressive = element.hasFlag( 'progressive' );
                        variants.constructive = element.hasFlag( 'constructive' );
                        variants.destructive = element.hasFlag( 'destructive' );
index 4a37310..8e10ed5 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.15.4
+ * OOjs UI v0.16.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2016 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2016-02-17T02:03:27Z
+ * Date: 2016-03-22T22:48:25Z
  */
 .oo-ui-popupTool .oo-ui-popupWidget-popup,
 .oo-ui-popupTool .oo-ui-popupWidget-anchor {
index a13af69..d89852d 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.15.4
+ * OOjs UI v0.16.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2016 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2016-02-17T02:03:27Z
+ * Date: 2016-03-22T22:48:25Z
  */
 .oo-ui-popupTool .oo-ui-popupWidget-popup,
 .oo-ui-popupTool .oo-ui-popupWidget-anchor {
index b033276..3f88fa7 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.15.4
+ * OOjs UI v0.16.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2016 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2016-02-17T02:03:23Z
+ * Date: 2016-03-22T22:48:21Z
  */
 ( function ( OO ) {
 
@@ -356,7 +356,7 @@ OO.mixinClass( OO.ui.Toolbar, OO.ui.mixin.GroupElement );
  * every time the state of the application using the toolbar changes, and an update to the state of
  * tools is required.
  *
- * @param {Mixed...} data Application-defined parameters
+ * @param {...Mixed} data Application-defined parameters
  */
 
 /* Methods */
@@ -1359,6 +1359,7 @@ OO.ui.ToolFactory.prototype.extract = function ( collection, used ) {
  * For more information about toolbars in general, please see the [OOjs UI documentation on MediaWiki][1].
  *
  * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars
+ *
  * @class
  * @extends OO.Factory
  * @constructor
index dff61e9..0ffeba3 100644 (file)
@@ -1,29 +1,38 @@
 /*!
- * OOjs UI v0.15.4
+ * OOjs UI v0.16.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2016 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2016-02-17T02:03:27Z
+ * Date: 2016-03-22T22:48:25Z
  */
-.oo-ui-draggableElement {
-       cursor: -webkit-grab -moz-grab, url(images/grab.cur), move;
+.oo-ui-draggableElement-handle,
+.oo-ui-draggableElement-handle.oo-ui-widget {
+       cursor: move;
+       cursor: url(images/grab.cur );
+       cursor: -webkit-grab;
+       cursor:    -moz-grab;
+       cursor:         grab;
+}
+.oo-ui-draggableElement-handle:active {
+       cursor: move;
+       cursor: url(images/grabbing.cur );
+       cursor: -webkit-grabbing;
+       cursor:    -moz-grabbing;
+       cursor:         grabbing;
+}
+.oo-ui-draggableElement-handle.oo-ui-widget-disabled,
+.oo-ui-widget-disabled .oo-ui-draggableElement-handle {
+       cursor: default;
 }
-.oo-ui-draggableElement-dragging {
-       cursor: -webkit-grabbing -moz-grabbing, url(images/grabbing.cur), move;
-       background: rgba(0, 0, 0, 0.2);
-       opacity: 0.4;
+.oo-ui-draggableElement-placeholder {
+       opacity: 0.2;
 }
-.oo-ui-draggableGroupElement-horizontal .oo-ui-draggableElement.oo-ui-optionWidget {
+.oo-ui-draggableGroupElement-horizontal .oo-ui-draggableElement {
        display: inline-block;
 }
-.oo-ui-draggableGroupElement-placeholder {
-       position: absolute;
-       display: block;
-       background: rgba(0, 0, 0, 0.4);
-}
 .oo-ui-lookupElement > .oo-ui-menuSelectWidget {
        z-index: 1;
        width: 100%;
 }
 .oo-ui-capsuleMultiSelectWidget-handle {
        width: 100%;
-       display: inline-block;
+       display: block;
        position: relative;
 }
 .oo-ui-capsuleMultiSelectWidget-content {
 .oo-ui-capsuleMultiSelectWidget.oo-ui-widget-disabled .oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-indicatorElement-indicator {
        opacity: 0.2;
 }
-.oo-ui-capsuleMultiSelectWidget .oo-ui-selectWidget {
-       border-top-color: #ffffff;
-}
 .oo-ui-capsuleItemWidget {
        position: relative;
        display: inline-block;
        text-overflow: ellipsis;
        overflow: hidden;
 }
-.oo-ui-capsuleItemWidget .oo-ui-buttonElement {
-       margin-top: -1.6em;
-       padding-left: 0.3em;
-}
 .oo-ui-capsuleItemWidget:focus {
        outline: none;
        border-color: #087ecc;
 }
-.oo-ui-capsuleItemWidget.oo-ui-indicatorElement > .oo-ui-labelElement-label {
-       padding-right: 1.3375em;
-}
-.oo-ui-capsuleItemWidget.oo-ui-indicatorElement > .oo-ui-indicatorElement-indicator {
-       position: absolute;
-       right: 0.4em;
-       top: 0;
-       width: 0.9375em;
-       height: 100%;
-       background-repeat: no-repeat;
-}
-.oo-ui-capsuleItemWidget.oo-ui-indicatorElement > .oo-ui-indicator-clear {
-       cursor: pointer;
-}
 .oo-ui-capsuleItemWidget.oo-ui-widget-disabled {
        opacity: 0.5;
        -webkit-transform: translate3d(0, 0, 0);
        background: #eeeeee;
        border-color: #cccccc;
 }
-.oo-ui-capsuleItemWidget.oo-ui-widget-disabled > .oo-ui-indicatorElement-indicator {
-       opacity: 0.2;
+.oo-ui-capsuleItemWidget > .oo-ui-buttonElement {
+       margin-top: -1.25em;
+       padding-left: 0.3em;
 }
 .oo-ui-searchWidget-query {
        position: absolute;
 .oo-ui-numberInputWidget-field > .oo-ui-buttonWidget {
        width: 2.25em;
 }
-.oo-ui-numberInputWidget-minusButton.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button {
+.oo-ui-numberInputWidget-minusButton.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
        border-top-right-radius: 0;
        border-bottom-right-radius: 0;
        border-right-width: 0;
 }
-.oo-ui-numberInputWidget-plusButton.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button {
+.oo-ui-numberInputWidget-plusButton.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
        border-top-left-radius: 0;
        border-bottom-left-radius: 0;
        border-left-width: 0;
 }
-.oo-ui-numberInputWidget .oo-ui-textInputWidget input {
+.oo-ui-numberInputWidget-buttoned .oo-ui-textInputWidget input {
        border-radius: 0;
 }
index cc12598..9b98124 100644 (file)
@@ -1,29 +1,38 @@
 /*!
- * OOjs UI v0.15.4
+ * OOjs UI v0.16.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2016 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2016-02-17T02:03:27Z
+ * Date: 2016-03-22T22:48:25Z
  */
-.oo-ui-draggableElement {
-       cursor: -webkit-grab -moz-grab, url(images/grab.cur), move;
+.oo-ui-draggableElement-handle,
+.oo-ui-draggableElement-handle.oo-ui-widget {
+       cursor: move;
+       cursor: url(images/grab.cur );
+       cursor: -webkit-grab;
+       cursor:    -moz-grab;
+       cursor:         grab;
+}
+.oo-ui-draggableElement-handle:active {
+       cursor: move;
+       cursor: url(images/grabbing.cur );
+       cursor: -webkit-grabbing;
+       cursor:    -moz-grabbing;
+       cursor:         grabbing;
+}
+.oo-ui-draggableElement-handle.oo-ui-widget-disabled,
+.oo-ui-widget-disabled .oo-ui-draggableElement-handle {
+       cursor: default;
 }
-.oo-ui-draggableElement-dragging {
-       cursor: -webkit-grabbing -moz-grabbing, url(images/grabbing.cur), move;
-       background: rgba(0, 0, 0, 0.2);
-       opacity: 0.4;
+.oo-ui-draggableElement-placeholder {
+       opacity: 0.2;
 }
-.oo-ui-draggableGroupElement-horizontal .oo-ui-draggableElement.oo-ui-optionWidget {
+.oo-ui-draggableGroupElement-horizontal .oo-ui-draggableElement {
        display: inline-block;
 }
-.oo-ui-draggableGroupElement-placeholder {
-       position: absolute;
-       display: block;
-       background: rgba(0, 0, 0, 0.4);
-}
 .oo-ui-lookupElement > .oo-ui-menuSelectWidget {
        z-index: 1;
        width: 100%;
        right: 2em;
 }
 .oo-ui-selectFileWidget-supported.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop .oo-ui-selectFileWidget-dropTarget {
-       background: rgba(52, 123, 255, 0.1);
+       background-color: rgba(52, 123, 255, 0.1);
 }
 .oo-ui-selectFileWidget-empty.oo-ui-widget-disabled .oo-ui-selectFileWidget-dropTarget,
 .oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-dropTarget {
 }
 .oo-ui-capsuleMultiSelectWidget-handle {
        width: 100%;
-       display: inline-block;
+       display: block;
        position: relative;
 }
 .oo-ui-capsuleMultiSelectWidget-content {
 .oo-ui-capsuleMultiSelectWidget.oo-ui-widget-disabled .oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-indicatorElement-indicator {
        opacity: 0.2;
 }
-.oo-ui-capsuleMultiSelectWidget .oo-ui-selectWidget {
-       border-top-color: #ffffff;
-}
 .oo-ui-capsuleItemWidget {
        position: relative;
        display: inline-block;
        text-overflow: ellipsis;
        overflow: hidden;
 }
-.oo-ui-capsuleItemWidget .oo-ui-buttonElement {
-       margin-top: -1.6em;
-       padding-left: 0.3em;
-}
 .oo-ui-capsuleItemWidget:focus {
        outline: none;
        border-color: #347bff;
 }
-.oo-ui-capsuleItemWidget.oo-ui-indicatorElement > .oo-ui-labelElement-label {
-       padding-right: 1.3375em;
-}
-.oo-ui-capsuleItemWidget.oo-ui-indicatorElement > .oo-ui-indicatorElement-indicator {
-       position: absolute;
-       right: 0.4em;
-       top: 0;
-       width: 0.9375em;
-       height: 100%;
-       background-repeat: no-repeat;
-}
-.oo-ui-capsuleItemWidget.oo-ui-indicatorElement > .oo-ui-indicator-clear {
-       cursor: pointer;
-}
 .oo-ui-capsuleItemWidget.oo-ui-widget-disabled {
        color: #cccccc;
        text-shadow: 0 1px 1px #ffffff;
        border-color: #dddddd;
        background-color: #f3f3f3;
 }
-.oo-ui-capsuleItemWidget.oo-ui-widget-disabled > .oo-ui-indicatorElement-indicator {
-       opacity: 0.2;
+.oo-ui-capsuleItemWidget > .oo-ui-buttonElement {
+       margin-top: -1.4em;
+       padding-left: 0.3em;
 }
 .oo-ui-searchWidget-query {
        position: absolute;
        border-bottom-left-radius: 0;
        border-left-width: 0;
 }
-.oo-ui-numberInputWidget .oo-ui-textInputWidget input {
+.oo-ui-numberInputWidget-buttoned .oo-ui-textInputWidget input {
        border-radius: 0;
 }
index 4f5e0ed..abb2b1b 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.15.4
+ * OOjs UI v0.16.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2016 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2016-02-17T02:03:23Z
+ * Date: 2016-03-22T22:48:21Z
  */
 ( function ( OO ) {
 
  * @class
  *
  * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$handle] The part of the element which can be used for dragging, defaults to the whole element
  */
-OO.ui.mixin.DraggableElement = function OoUiMixinDraggableElement() {
+OO.ui.mixin.DraggableElement = function OoUiMixinDraggableElement( config ) {
+       config = config || {};
+
        // Properties
        this.index = null;
+       this.$handle = config.$handle || this.$element;
+       this.wasHandleUsed = null;
 
        // Initialize and events
-       this.$element
+       this.$element.addClass( 'oo-ui-draggableElement' )
+               // We make the entire element draggable, not just the handle, so that
+               // the whole element appears to move. wasHandleUsed prevents drags from
+               // starting outside the handle
                .attr( 'draggable', true )
-               .addClass( 'oo-ui-draggableElement' )
                .on( {
+                       mousedown: this.onDragMouseDown.bind( this ),
                        dragstart: this.onDragStart.bind( this ),
                        dragover: this.onDragOver.bind( this ),
                        dragend: this.onDragEnd.bind( this ),
                        drop: this.onDrop.bind( this )
                } );
+       this.$handle.addClass( 'oo-ui-draggableElement-handle' );
 };
 
 OO.initClass( OO.ui.mixin.DraggableElement );
@@ -71,15 +81,35 @@ OO.ui.mixin.DraggableElement.static.cancelButtonMouseDownEvents = false;
 
 /* Methods */
 
+/**
+ * Respond to mousedown event.
+ *
+ * @private
+ * @param {jQuery.Event} e jQuery event
+ */
+OO.ui.mixin.DraggableElement.prototype.onDragMouseDown = function ( e ) {
+       this.wasHandleUsed =
+               // Optimization: if the handle is the whole element this is always true
+               this.$handle[ 0 ] === this.$element[ 0 ] ||
+               // Check the mousedown occurred inside the handle
+               OO.ui.contains( this.$handle[ 0 ], e.target, true );
+};
+
 /**
  * Respond to dragstart event.
  *
  * @private
- * @param {jQuery.Event} event jQuery event
+ * @param {jQuery.Event} e jQuery event
  * @fires dragstart
  */
 OO.ui.mixin.DraggableElement.prototype.onDragStart = function ( e ) {
-       var dataTransfer = e.originalEvent.dataTransfer;
+       var element = this,
+               dataTransfer = e.originalEvent.dataTransfer;
+
+       if ( !this.wasHandleUsed ) {
+               return false;
+       }
+
        // Define drop effect
        dataTransfer.dropEffect = 'none';
        dataTransfer.effectAllowed = 'move';
@@ -91,8 +121,14 @@ OO.ui.mixin.DraggableElement.prototype.onDragStart = function ( e ) {
        } catch ( err ) {
                // The above is only for Firefox. Move on if it fails.
        }
-       // Add dragging class
-       this.$element.addClass( 'oo-ui-draggableElement-dragging' );
+       // Briefly add a 'clone' class to style the browser's native drag image
+       this.$element.addClass( 'oo-ui-draggableElement-clone' );
+       // Add placeholder class after the browser has rendered the clone
+       setTimeout( function () {
+               element.$element
+                       .removeClass( 'oo-ui-draggableElement-clone' )
+                       .addClass( 'oo-ui-draggableElement-placeholder' );
+       } );
        // Emit event
        this.emit( 'dragstart', this );
        return true;
@@ -105,7 +141,7 @@ OO.ui.mixin.DraggableElement.prototype.onDragStart = function ( e ) {
  * @fires dragend
  */
 OO.ui.mixin.DraggableElement.prototype.onDragEnd = function () {
-       this.$element.removeClass( 'oo-ui-draggableElement-dragging' );
+       this.$element.removeClass( 'oo-ui-draggableElement-placeholder' );
        this.emit( 'dragend' );
 };
 
@@ -113,7 +149,7 @@ OO.ui.mixin.DraggableElement.prototype.onDragEnd = function () {
  * Handle drop event.
  *
  * @private
- * @param {jQuery.Event} event jQuery event
+ * @param {jQuery.Event} e jQuery event
  * @fires drop
  */
 OO.ui.mixin.DraggableElement.prototype.onDrop = function ( e ) {
@@ -136,7 +172,7 @@ OO.ui.mixin.DraggableElement.prototype.onDragOver = function ( e ) {
  * Store it in the DOM so we can access from the widget drag event
  *
  * @private
- * @param {number} Item index
+ * @param {number} index Item index
  */
 OO.ui.mixin.DraggableElement.prototype.setIndex = function ( index ) {
        if ( this.index !== index ) {
@@ -181,9 +217,9 @@ OO.ui.mixin.DraggableGroupElement = function OoUiMixinDraggableGroupElement( con
        // Properties
        this.orientation = config.orientation || 'vertical';
        this.dragItem = null;
-       this.itemDragOver = null;
        this.itemKeys = {};
-       this.sideInsertion = '';
+       this.dir = null;
+       this.itemsOrder = null;
 
        // Events
        this.aggregate( {
@@ -193,25 +229,18 @@ OO.ui.mixin.DraggableGroupElement = function OoUiMixinDraggableGroupElement( con
        } );
        this.connect( this, {
                itemDragStart: 'onItemDragStart',
-               itemDrop: 'onItemDrop',
-               itemDragEnd: 'onItemDragEnd'
-       } );
-       this.$element.on( {
-               dragover: this.onDragOver.bind( this ),
-               dragleave: this.onDragLeave.bind( this )
+               itemDrop: 'onItemDropOrDragEnd',
+               itemDragEnd: 'onItemDropOrDragEnd'
        } );
 
        // Initialize
        if ( Array.isArray( config.items ) ) {
                this.addItems( config.items );
        }
-       this.$placeholder = $( '<div>' )
-               .addClass( 'oo-ui-draggableGroupElement-placeholder' );
        this.$element
                .addClass( 'oo-ui-draggableGroupElement' )
                .append( this.$status )
-               .toggleClass( 'oo-ui-draggableGroupElement-horizontal', this.orientation === 'horizontal' )
-               .prepend( this.$placeholder );
+               .toggleClass( 'oo-ui-draggableGroupElement-horizontal', this.orientation === 'horizontal' );
 };
 
 /* Setup */
@@ -220,7 +249,15 @@ OO.mixinClass( OO.ui.mixin.DraggableGroupElement, OO.ui.mixin.GroupElement );
 /* Events */
 
 /**
- * A 'reorder' event is emitted when the order of items in the group changes.
+ * An item has been dragged to a new position, but not yet dropped.
+ *
+ * @event drag
+ * @param {OO.ui.mixin.DraggableElement} item Dragged item
+ * @param {number} [newIndex] New index for the item
+ */
+
+/**
+ * And item has been dropped at a new position.
  *
  * @event reorder
  * @param {OO.ui.mixin.DraggableElement} item Reordered item
@@ -236,86 +273,70 @@ OO.mixinClass( OO.ui.mixin.DraggableGroupElement, OO.ui.mixin.GroupElement );
  * @param {OO.ui.mixin.DraggableElement} item Dragged item
  */
 OO.ui.mixin.DraggableGroupElement.prototype.onItemDragStart = function ( item ) {
-       var i, len;
-
-       // Map the index of each object
-       for ( i = 0, len = this.items.length; i < len; i++ ) {
-               this.items[ i ].setIndex( i );
-       }
-
+       // Make a shallow copy of this.items so we can re-order it during previews
+       // without affecting the original array.
+       this.itemsOrder = this.items.slice();
+       this.updateIndexes();
        if ( this.orientation === 'horizontal' ) {
-               // Set the height of the indicator
-               this.$placeholder.css( {
-                       height: item.$element.outerHeight(),
-                       width: 2
-               } );
-       } else {
-               // Set the width of the indicator
-               this.$placeholder.css( {
-                       height: 2,
-                       width: item.$element.outerWidth()
-               } );
+               // Calculate and cache directionality on drag start - it's a little
+               // expensive and it shouldn't change while dragging.
+               this.dir = this.$element.css( 'direction' );
        }
        this.setDragItem( item );
 };
 
 /**
- * Respond to item drag end event
- *
- * @private
+ * Update the index properties of the items
  */
-OO.ui.mixin.DraggableGroupElement.prototype.onItemDragEnd = function () {
-       this.unsetDragItem();
-       return false;
+OO.ui.mixin.DraggableGroupElement.prototype.updateIndexes = function () {
+       var i, len;
+
+       // Map the index of each object
+       for ( i = 0, len = this.itemsOrder.length; i < len; i++ ) {
+               this.itemsOrder[ i ].setIndex( i );
+       }
 };
 
 /**
- * Handle drop event and switch the order of the items accordingly
+ * Handle drop or dragend event and switch the order of the items accordingly
  *
  * @private
  * @param {OO.ui.mixin.DraggableElement} item Dropped item
- * @fires reorder
  */
-OO.ui.mixin.DraggableGroupElement.prototype.onItemDrop = function ( item ) {
-       var toIndex = item.getIndex();
-       // Check if the dropped item is from the current group
+OO.ui.mixin.DraggableGroupElement.prototype.onItemDropOrDragEnd = function () {
+       var targetIndex, originalIndex,
+               item = this.getDragItem();
+
        // TODO: Figure out a way to configure a list of legally droppable
        // elements even if they are not yet in the list
-       if ( this.getDragItem() ) {
-               // If the insertion point is 'after', the insertion index
-               // is shifted to the right (or to the left in RTL, hence 'after')
-               if ( this.sideInsertion === 'after' ) {
-                       toIndex++;
+       if ( item ) {
+               originalIndex = this.items.indexOf( item );
+               // If the item has moved forward, add one to the index to account for the left shift
+               targetIndex = item.getIndex() + ( item.getIndex() > originalIndex ? 1 : 0 );
+               if ( targetIndex !== originalIndex ) {
+                       this.reorder( this.getDragItem(), targetIndex );
+                       this.emit( 'reorder', this.getDragItem(), targetIndex );
                }
-               // Emit change event
-               this.emit( 'reorder', this.getDragItem(), toIndex );
+               this.updateIndexes();
        }
        this.unsetDragItem();
        // Return false to prevent propogation
        return false;
 };
 
-/**
- * Handle dragleave event.
- *
- * @private
- */
-OO.ui.mixin.DraggableGroupElement.prototype.onDragLeave = function () {
-       // This means the item was dragged outside the widget
-       this.$placeholder
-               .css( 'left', 0 )
-               .addClass( 'oo-ui-element-hidden' );
-};
-
 /**
  * Respond to dragover event
  *
  * @private
- * @param {jQuery.Event} event Event details
+ * @param {jQuery.Event} e Dragover event
+ * @fires reorder
  */
 OO.ui.mixin.DraggableGroupElement.prototype.onDragOver = function ( e ) {
        var dragOverObj, $optionWidget, itemOffset, itemMidpoint, itemBoundingRect,
-               itemSize, cssOutput, dragPosition, itemIndex, itemPosition,
+               itemSize, cssOutput, dragPosition, overIndex, itemPosition, after,
+               targetIndex = null,
+               item = this.getDragItem(),
+               dragItemIndex = item.getIndex(),
                clientX = e.originalEvent.clientX,
                clientY = e.originalEvent.clientY;
 
@@ -326,13 +347,12 @@ OO.ui.mixin.DraggableGroupElement.prototype.onDragOver = function ( e ) {
                itemOffset = $optionWidget.offset();
                itemBoundingRect = $optionWidget[ 0 ].getBoundingClientRect();
                itemPosition = $optionWidget.position();
-               itemIndex = $optionWidget.data( 'index' );
+               overIndex = $optionWidget.data( 'index' );
        }
 
        if (
                itemOffset &&
-               this.isDragging() &&
-               itemIndex !== this.getDragItem().getIndex()
+               overIndex !== dragItemIndex
        ) {
                if ( this.orientation === 'horizontal' ) {
                        // Calculate where the mouse is relative to the item width
@@ -340,7 +360,7 @@ OO.ui.mixin.DraggableGroupElement.prototype.onDragOver = function ( e ) {
                        itemMidpoint = itemBoundingRect.left + itemSize / 2;
                        dragPosition = clientX;
                        // Which side of the item we hover over will dictate
-                       // where the placeholder will appear, on the left or
+                       // where to drop the selected item, on the left or
                        // on the right
                        cssOutput = {
                                left: dragPosition < itemMidpoint ? itemPosition.left : itemPosition.left + itemSize,
@@ -352,7 +372,7 @@ OO.ui.mixin.DraggableGroupElement.prototype.onDragOver = function ( e ) {
                        itemMidpoint = itemBoundingRect.top + itemSize / 2;
                        dragPosition = clientY;
                        // Which side of the item we hover over will dictate
-                       // where the placeholder will appear, on the top or
+                       // where to drop the selected item, on the top or
                        // on the bottom
                        cssOutput = {
                                top: dragPosition < itemMidpoint ? itemPosition.top : itemPosition.top + itemSize,
@@ -361,25 +381,44 @@ OO.ui.mixin.DraggableGroupElement.prototype.onDragOver = function ( e ) {
                }
                // Store whether we are before or after an item to rearrange
                // For horizontal layout, we need to account for RTL, as this is flipped
-               if (  this.orientation === 'horizontal' && this.$element.css( 'direction' ) === 'rtl' ) {
-                       this.sideInsertion = dragPosition < itemMidpoint ? 'after' : 'before';
+               if ( this.orientation === 'horizontal' && this.dir === 'rtl' ) {
+                       after = dragPosition < itemMidpoint;
                } else {
-                       this.sideInsertion = dragPosition < itemMidpoint ? 'before' : 'after';
+                       after = dragPosition > itemMidpoint;
                }
-               // Add drop indicator between objects
-               this.$placeholder
-                       .css( cssOutput )
-                       .removeClass( 'oo-ui-element-hidden' );
-       } else {
-               // This means the item was dragged outside the widget
-               this.$placeholder
-                       .css( 'left', 0 )
-                       .addClass( 'oo-ui-element-hidden' );
+               targetIndex = overIndex + ( after ? 1 : 0 );
+               // Check the targetIndex isn't immediately to the left or right of the current item (a no-op)
+               if ( targetIndex === dragItemIndex || targetIndex === dragItemIndex + 1 ) {
+                       targetIndex = null;
+               }
+       }
+       if ( targetIndex !== null ) {
+               if ( targetIndex > 0 ) {
+                       this.$group.children().eq( targetIndex - 1 ).after( item.$element );
+               } else {
+                       this.$group.prepend( item.$element );
+               }
+               // Move item in itemsOrder array. Needs to account for left shift if the item is moved forward.
+               this.itemsOrder.splice( targetIndex - ( targetIndex > dragItemIndex ? 1 : 0 ), 0,
+                       this.itemsOrder.splice( dragItemIndex, 1 )[ 0 ]
+               );
+               this.updateIndexes();
+               this.emit( 'drag', item, targetIndex );
        }
        // Prevent default
        e.preventDefault();
 };
 
+/**
+ * Reorder the items in the group
+ *
+ * @param {OO.ui.mixin.DraggableElement} item Reordered item
+ * @param {number} newIndex New index
+ */
+OO.ui.mixin.DraggableGroupElement.prototype.reorder = function ( item, newIndex ) {
+       this.addItems( [ item ], newIndex );
+};
+
 /**
  * Set a dragged item
  *
@@ -387,6 +426,8 @@ OO.ui.mixin.DraggableGroupElement.prototype.onDragOver = function ( e ) {
  */
 OO.ui.mixin.DraggableGroupElement.prototype.setDragItem = function ( item ) {
        this.dragItem = item;
+       this.$element.on( 'dragover', this.onDragOver.bind( this ) );
+       this.$element.addClass( 'oo-ui-draggableGroupElement-dragging' );
 };
 
 /**
@@ -394,9 +435,8 @@ OO.ui.mixin.DraggableGroupElement.prototype.setDragItem = function ( item ) {
  */
 OO.ui.mixin.DraggableGroupElement.prototype.unsetDragItem = function () {
        this.dragItem = null;
-       this.itemDragOver = null;
-       this.$placeholder.addClass( 'oo-ui-element-hidden' );
-       this.sideInsertion = '';
+       this.$element.off( 'dragover' );
+       this.$element.removeClass( 'oo-ui-draggableGroupElement-dragging' );
 };
 
 /**
@@ -408,15 +448,6 @@ OO.ui.mixin.DraggableGroupElement.prototype.getDragItem = function () {
        return this.dragItem;
 };
 
-/**
- * Check if an item in the group is currently being dragged.
- *
- * @return {Boolean} Item is being dragged
- */
-OO.ui.mixin.DraggableGroupElement.prototype.isDragging = function () {
-       return this.getDragItem() !== null;
-};
-
 /**
  * RequestManager is a mixin that manages the lifecycle of a promise-backed request for a widget, such as
  * the {@link OO.ui.mixin.LookupElement}.
@@ -1023,7 +1054,7 @@ OO.ui.CardLayout.prototype.setupTabItem = function () {
  * CSS is applied to the tab item to reflect the card's active state. Outside of the index
  * context, setting the active state on a card does nothing.
  *
- * @param {boolean} value Card is active
+ * @param {boolean} active Card is active
  * @fires active
  */
 OO.ui.CardLayout.prototype.setActive = function ( active ) {
@@ -1162,7 +1193,7 @@ OO.ui.PageLayout.prototype.setupOutlineItem = function () {
  * CSS is applied to the outline item to reflect the page's active state. Outside of the booklet
  * context, setting the active state on a page does nothing.
  *
- * @param {boolean} value Page is active
+ * @param {boolean} active Page is active
  * @fires active
  */
 OO.ui.PageLayout.prototype.setActive = function ( active ) {
@@ -1802,6 +1833,7 @@ OO.ui.BookletLayout.prototype.onStackLayoutSet = function ( page ) {
  *
  * If no page is selected, the first selectable page will be selected.
  * If the focus is already in an element on the current page, nothing will happen.
+ *
  * @param {number} [itemIndex] A specific item to focus on
  */
 OO.ui.BookletLayout.prototype.focus = function ( itemIndex ) {
@@ -2309,6 +2341,7 @@ OO.ui.IndexLayout.prototype.onStackLayoutSet = function ( card ) {
  *
  * If no card is selected, the first selectable card will be selected.
  * If the focus is already in an element on the current card, nothing will happen.
+ *
  * @param {number} [itemIndex] A specific item to focus on
  */
 OO.ui.IndexLayout.prototype.focus = function ( itemIndex ) {
@@ -2992,8 +3025,9 @@ OO.ui.OutlineControlsWidget.prototype.setAbilities = function ( abilities ) {
 };
 
 /**
- * @private
  * Handle outline change events.
+ *
+ * @private
  */
 OO.ui.OutlineControlsWidget.prototype.onOutlineChange = function () {
        var i, len, firstMovable, lastMovable,
@@ -3686,6 +3720,13 @@ OO.mixinClass( OO.ui.CapsuleMultiSelectWidget, OO.ui.mixin.IconElement );
  * @param {Mixed[]} datas Data of the now-selected items
  */
 
+/**
+ * @event resize
+ *
+ * A resize event is emitted when the widget's dimensions change to accomodate newly added items or
+ * current user input.
+ */
+
 /* Methods */
 
 /**
@@ -3702,6 +3743,7 @@ OO.ui.CapsuleMultiSelectWidget.prototype.createItemWidget = function ( data, lab
 
 /**
  * Get the data of the items in the capsule
+ *
  * @return {Mixed[]}
  */
 OO.ui.CapsuleMultiSelectWidget.prototype.getItemsData = function () {
@@ -3710,6 +3752,7 @@ OO.ui.CapsuleMultiSelectWidget.prototype.getItemsData = function () {
 
 /**
  * Set the items in the capsule by providing data
+ *
  * @chainable
  * @param {Mixed[]} datas
  * @return {OO.ui.CapsuleMultiSelectWidget}
@@ -3754,6 +3797,7 @@ OO.ui.CapsuleMultiSelectWidget.prototype.setItemsFromData = function ( datas ) {
 
 /**
  * Add items to the capsule by providing their data
+ *
  * @chainable
  * @param {Mixed[]} datas
  * @return {OO.ui.CapsuleMultiSelectWidget}
@@ -3785,6 +3829,7 @@ OO.ui.CapsuleMultiSelectWidget.prototype.addItemsFromData = function ( datas ) {
 
 /**
  * Add items to the capsule by providing a label
+ *
  * @param {string} label
  * @return {boolean} Whether the item was added or not
  */
@@ -3802,6 +3847,7 @@ OO.ui.CapsuleMultiSelectWidget.prototype.addItemFromLabel = function ( label ) {
 
 /**
  * Remove items by data
+ *
  * @chainable
  * @param {Mixed[]} datas
  * @return {OO.ui.CapsuleMultiSelectWidget}
@@ -3843,7 +3889,7 @@ OO.ui.CapsuleMultiSelectWidget.prototype.addItems = function ( items ) {
        }
        if ( !same ) {
                this.emit( 'change', this.getItemsData() );
-               this.menu.position();
+               this.updateIfHeightChanged();
        }
 
        return this;
@@ -3880,7 +3926,7 @@ OO.ui.CapsuleMultiSelectWidget.prototype.removeItems = function ( items ) {
        }
        if ( !same ) {
                this.emit( 'change', this.getItemsData() );
-               this.menu.position();
+               this.updateIfHeightChanged();
        }
 
        return this;
@@ -3893,7 +3939,7 @@ OO.ui.CapsuleMultiSelectWidget.prototype.clearItems = function () {
        if ( this.items.length ) {
                OO.ui.mixin.GroupElement.prototype.clearItems.call( this );
                this.emit( 'change', this.getItemsData() );
-               this.menu.position();
+               this.updateIfHeightChanged();
        }
        return this;
 };
@@ -3950,6 +3996,7 @@ OO.ui.CapsuleMultiSelectWidget.prototype.getPreviousItem = function ( item ) {
 
 /**
  * Get the capsule widget's menu.
+ *
  * @return {OO.ui.MenuSelectWidget} Menu widget
  */
 OO.ui.CapsuleMultiSelectWidget.prototype.getMenu = function () {
@@ -4122,8 +4169,21 @@ OO.ui.CapsuleMultiSelectWidget.prototype.updateInputSize = function () {
                        bestWidth = this.$content.innerWidth() - 10;
                }
                this.$input.width( Math.floor( bestWidth ) );
+               this.updateIfHeightChanged();
+       }
+};
 
+/**
+ * Determine if widget height changed, and if so, update menu position and emit 'resize' event.
+ *
+ * @private
+ */
+OO.ui.CapsuleMultiSelectWidget.prototype.updateIfHeightChanged = function () {
+       var height = this.$element.height();
+       if ( height !== this.height ) {
+               this.height = height;
                this.menu.position();
+               this.emit( 'resize' );
        }
 };
 
@@ -4152,6 +4212,7 @@ OO.ui.CapsuleMultiSelectWidget.prototype.onMenuItemsChange = function () {
 
 /**
  * Clear the input field
+ *
  * @private
  */
 OO.ui.CapsuleMultiSelectWidget.prototype.clearInput = function () {
@@ -4197,6 +4258,7 @@ OO.ui.CapsuleMultiSelectWidget.prototype.setDisabled = function ( disabled ) {
 
 /**
  * Focus the widget
+ *
  * @chainable
  * @return {OO.ui.CapsuleMultiSelectWidget}
  */
@@ -4245,18 +4307,12 @@ OO.ui.CapsuleMultiSelectWidget.prototype.focus = function () {
  * @cfg {string} [notsupported] Text to display when file support is missing in the browser.
  * @cfg {boolean} [droppable=true] Whether to accept files by drag and drop.
  * @cfg {boolean} [showDropTarget=false] Whether to show a drop target. Requires droppable to be true.
- * @cfg {boolean} [dragDropUI=false] Deprecated alias for showDropTarget
- * @cfg {Number} [thumbnailSizeLimit=20] File size limit in MiB above which to not try and show a
+ * @cfg {number} [thumbnailSizeLimit=20] File size limit in MiB above which to not try and show a
  *  preview (for performance)
  */
 OO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {
        var dragHandler;
 
-       // TODO: Remove in next release
-       if ( config && config.dragDropUI ) {
-               config.showDropTarget = true;
-       }
-
        // Configuration initialization
        config = $.extend( {
                accept: null,
@@ -4274,7 +4330,7 @@ OO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {
        OO.ui.mixin.IconElement.call( this, config );
        OO.ui.mixin.IndicatorElement.call( this, config );
        OO.ui.mixin.PendingElement.call( this, $.extend( {}, config, { $pending: this.$info } ) );
-       OO.ui.mixin.LabelElement.call( this, $.extend( {}, config, { autoFitLabel: true } ) );
+       OO.ui.mixin.LabelElement.call( this, config );
 
        // Properties
        this.$info = $( '<span>' );
@@ -4373,7 +4429,7 @@ OO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.LabelElement );
 OO.ui.SelectFileWidget.static.isSupported = function () {
        var $input;
        if ( OO.ui.SelectFileWidget.static.isSupportedCache === null ) {
-               $input = $( '<input type="file">' );
+               $input = $( '<input>' ).attr( 'type', 'file' );
                OO.ui.SelectFileWidget.static.isSupportedCache = $input[ 0 ].files !== undefined;
        }
        return OO.ui.SelectFileWidget.static.isSupportedCache;
@@ -4542,7 +4598,7 @@ OO.ui.SelectFileWidget.prototype.addInput = function () {
                return;
        }
 
-       this.$input = $( '<input type="file">' );
+       this.$input = $( '<input>' ).attr( 'type', 'file' );
        this.$input.on( 'change', this.onFileSelectedHandler );
        this.$input.on( 'click', function ( e ) {
                // Prevents dropTarget to get clicked which calls
@@ -4562,7 +4618,7 @@ OO.ui.SelectFileWidget.prototype.addInput = function () {
  * Determine if we should accept this file
  *
  * @private
- * @param {string} File MIME type
+ * @param {string} mimeType File MIME type
  * @return {boolean}
  */
 OO.ui.SelectFileWidget.prototype.isAllowedType = function ( mimeType ) {
@@ -4973,7 +5029,9 @@ OO.ui.SearchWidget.prototype.getResults = function () {
  *     // Example: A NumberInputWidget.
  *     var numberInput = new OO.ui.NumberInputWidget( {
  *         label: 'NumberInputWidget',
- *         input: { value: 5, min: 1, max: 10 }
+ *         input: { value: 5 },
+ *         min: 1,
+ *         max: 10
  *     } );
  *     $( 'body' ).append( numberInput.$element );
  *
@@ -4990,6 +5048,7 @@ OO.ui.SearchWidget.prototype.getResults = function () {
  * @cfg {number} [max=Infinity] Maximum allowed value
  * @cfg {number} [step=1] Delta when using the buttons or up/down arrow keys
  * @cfg {number|null} [pageStep] Delta when using the page-up/page-down keys. Defaults to 10 times #step.
+ * @cfg {boolean} [showButtons=true] Whether to show the plus and minus buttons.
  */
 OO.ui.NumberInputWidget = function OoUiNumberInputWidget( config ) {
        // Configuration initialization
@@ -4998,7 +5057,8 @@ OO.ui.NumberInputWidget = function OoUiNumberInputWidget( config ) {
                min: -Infinity,
                max: Infinity,
                step: 1,
-               pageStep: null
+               pageStep: null,
+               showButtons: true
        }, config );
 
        // Parent constructor
@@ -5011,28 +5071,30 @@ OO.ui.NumberInputWidget = function OoUiNumberInputWidget( config ) {
                },
                config.input
        ) );
-       this.minusButton = new OO.ui.ButtonWidget( $.extend(
-               {
-                       disabled: this.isDisabled(),
-                       tabIndex: -1
-               },
-               config.minusButton,
-               {
-                       classes: [ 'oo-ui-numberInputWidget-minusButton' ],
-                       label: '−'
-               }
-       ) );
-       this.plusButton = new OO.ui.ButtonWidget( $.extend(
-               {
-                       disabled: this.isDisabled(),
-                       tabIndex: -1
-               },
-               config.plusButton,
-               {
-                       classes: [ 'oo-ui-numberInputWidget-plusButton' ],
-                       label: '+'
-               }
-       ) );
+       if ( config.showButtons ) {
+               this.minusButton = new OO.ui.ButtonWidget( $.extend(
+                       {
+                               disabled: this.isDisabled(),
+                               tabIndex: -1
+                       },
+                       config.minusButton,
+                       {
+                               classes: [ 'oo-ui-numberInputWidget-minusButton' ],
+                               label: '−'
+                       }
+               ) );
+               this.plusButton = new OO.ui.ButtonWidget( $.extend(
+                       {
+                               disabled: this.isDisabled(),
+                               tabIndex: -1
+                       },
+                       config.plusButton,
+                       {
+                               classes: [ 'oo-ui-numberInputWidget-plusButton' ],
+                               label: '+'
+                       }
+               ) );
+       }
 
        // Events
        this.input.connect( this, {
@@ -5043,12 +5105,14 @@ OO.ui.NumberInputWidget = function OoUiNumberInputWidget( config ) {
                keydown: this.onKeyDown.bind( this ),
                'wheel mousewheel DOMMouseScroll': this.onWheel.bind( this )
        } );
-       this.plusButton.connect( this, {
-               click: [ 'onButtonClick', +1 ]
-       } );
-       this.minusButton.connect( this, {
-               click: [ 'onButtonClick', -1 ]
-       } );
+       if ( config.showButtons ) {
+               this.plusButton.connect( this, {
+                       click: [ 'onButtonClick', +1 ]
+               } );
+               this.minusButton.connect( this, {
+                       click: [ 'onButtonClick', -1 ]
+               } );
+       }
 
        // Initialization
        this.setIsInteger( !!config.isInteger );
@@ -5056,12 +5120,14 @@ OO.ui.NumberInputWidget = function OoUiNumberInputWidget( config ) {
        this.setStep( config.step, config.pageStep );
 
        this.$field = $( '<div>' ).addClass( 'oo-ui-numberInputWidget-field' )
-               .append(
-                       this.minusButton.$element,
-                       this.input.$element,
-                       this.plusButton.$element
-               );
+               .append( this.input.$element );
        this.$element.addClass( 'oo-ui-numberInputWidget' ).append( this.$field );
+       if ( config.showButtons ) {
+               this.$field
+                       .prepend( this.minusButton.$element )
+                       .append( this.plusButton.$element );
+               this.$element.addClass( 'oo-ui-numberInputWidget-buttoned' );
+       }
        this.input.setValidation( this.validateNumber.bind( this ) );
 };
 
@@ -5087,6 +5153,7 @@ OO.inheritClass( OO.ui.NumberInputWidget, OO.ui.Widget );
 
 /**
  * Set whether only integers are allowed
+ *
  * @param {boolean} flag
  */
 OO.ui.NumberInputWidget.prototype.setIsInteger = function ( flag ) {
@@ -5096,6 +5163,7 @@ OO.ui.NumberInputWidget.prototype.setIsInteger = function ( flag ) {
 
 /**
  * Get whether only integers are allowed
+ *
  * @return {boolean} Flag value
  */
 OO.ui.NumberInputWidget.prototype.getIsInteger = function () {
@@ -5104,6 +5172,7 @@ OO.ui.NumberInputWidget.prototype.getIsInteger = function () {
 
 /**
  * Set the range of allowed values
+ *
  * @param {number} min Minimum allowed value
  * @param {number} max Maximum allowed value
  */
@@ -5118,6 +5187,7 @@ OO.ui.NumberInputWidget.prototype.setRange = function ( min, max ) {
 
 /**
  * Get the current range
+ *
  * @return {number[]} Minimum and maximum values
  */
 OO.ui.NumberInputWidget.prototype.getRange = function () {
@@ -5126,6 +5196,7 @@ OO.ui.NumberInputWidget.prototype.getRange = function () {
 
 /**
  * Set the stepping deltas
+ *
  * @param {number} step Normal step
  * @param {number|null} pageStep Page step. If null, 10 * step will be used.
  */
@@ -5144,6 +5215,7 @@ OO.ui.NumberInputWidget.prototype.setStep = function ( step, pageStep ) {
 
 /**
  * Get the current stepping values
+ *
  * @return {number[]} Step and page step
  */
 OO.ui.NumberInputWidget.prototype.getStep = function () {
@@ -5152,6 +5224,7 @@ OO.ui.NumberInputWidget.prototype.getStep = function () {
 
 /**
  * Get the current value of the widget
+ *
  * @return {string}
  */
 OO.ui.NumberInputWidget.prototype.getValue = function () {
@@ -5160,6 +5233,7 @@ OO.ui.NumberInputWidget.prototype.getValue = function () {
 
 /**
  * Get the current value of the widget as a number
+ *
  * @return {number} May be NaN, or an invalid number
  */
 OO.ui.NumberInputWidget.prototype.getNumericValue = function () {
@@ -5168,6 +5242,7 @@ OO.ui.NumberInputWidget.prototype.getNumericValue = function () {
 
 /**
  * Set the value of the widget
+ *
  * @param {string} value Invalid values are allowed
  */
 OO.ui.NumberInputWidget.prototype.setValue = function ( value ) {
@@ -5176,6 +5251,7 @@ OO.ui.NumberInputWidget.prototype.setValue = function ( value ) {
 
 /**
  * Adjust the value of the widget
+ *
  * @param {number} delta Adjustment amount
  */
 OO.ui.NumberInputWidget.prototype.adjustValue = function ( delta ) {
@@ -5203,6 +5279,7 @@ OO.ui.NumberInputWidget.prototype.adjustValue = function ( delta ) {
 
 /**
  * Validate input
+ *
  * @private
  * @param {string} value Field value
  * @return {boolean}
index f122db5..0f9c145 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.15.4
+ * OOjs UI v0.16.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2016 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2016-02-17T02:03:27Z
+ * Date: 2016-03-22T22:48:25Z
  */
 .oo-ui-actionWidget.oo-ui-pendingElement-pending {
        background-image: /* @embed */ url(themes/apex/images/textures/pending.gif);
 .oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
        text-align: center;
        line-height: 3.4em;
-       padding: 0 2em;
 }
 .oo-ui-messageDialog-actions .oo-ui-actionWidget:hover {
        background-color: rgba(0, 0, 0, 0.05);
index ed0716a..4f93f53 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.15.4
+ * OOjs UI v0.16.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2016 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2016-02-17T02:03:27Z
+ * Date: 2016-03-22T22:48:25Z
  */
 .oo-ui-window {
        background: transparent;
 .oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
        text-align: center;
        line-height: 3.4em;
-       padding: 0 2em;
 }
 .oo-ui-messageDialog-actions .oo-ui-actionWidget:hover {
        background-color: rgba(0, 0, 0, 0.05);
        font-weight: bold;
 }
 .oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
-       background-color: rgba(118, 171, 54, 0.05);
+       background-color: rgba(8, 126, 204, 0.05);
 }
 .oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
-       background-color: rgba(118, 171, 54, 0.1);
+       background-color: rgba(8, 126, 204, 0.1);
 }
 .oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
        background-color: rgba(212, 83, 83, 0.05);
index aa11142..2a5aa64 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.15.4
+ * OOjs UI v0.16.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2016 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2016-02-17T02:03:23Z
+ * Date: 2016-03-22T22:48:21Z
  */
 ( function ( OO ) {
 
@@ -525,7 +525,7 @@ OO.ui.ActionSet.prototype.setAbilities = function ( actions ) {
  * When making changes to multiple actions, use this method instead of iterating over the actions
  * manually to defer emitting a #change event until after all actions have been changed.
  *
- * @param {Object|null} actions Filters to use to determine which actions to iterate over; see #get
+ * @param {Object|null} filter Filters to use to determine which actions to iterate over; see #get
  * @param {Function} callback Callback to run for each action; callback is invoked with three
  *   arguments: the action, the action's index, the list of actions being iterated over
  * @chainable
@@ -2417,10 +2417,18 @@ OO.ui.Dialog.static.escapable = true;
  * @param {jQuery.Event} e Key down event
  */
 OO.ui.Dialog.prototype.onDialogKeyDown = function ( e ) {
-       if ( e.which === OO.ui.Keys.ESCAPE ) {
+       var actions;
+       if ( e.which === OO.ui.Keys.ESCAPE && this.constructor.static.escapable ) {
                this.executeAction( '' );
                e.preventDefault();
                e.stopPropagation();
+       } else if ( e.which === OO.ui.Keys.ENTER && e.ctrlKey ) {
+               actions = this.actions.get( { flags: 'primary', visible: true, disabled: false } );
+               if ( actions.length > 0 ) {
+                       this.executeAction( actions[ 0 ].getAction() );
+                       e.preventDefault();
+                       e.stopPropagation();
+               }
        }
 };
 
@@ -2511,9 +2519,7 @@ OO.ui.Dialog.prototype.getSetupProcess = function ( data ) {
                        );
                        this.actions.add( this.getActionWidgets( actions ) );
 
-                       if ( this.constructor.static.escapable ) {
-                               this.$element.on( 'keydown', this.onDialogKeyDownHandler );
-                       }
+                       this.$element.on( 'keydown', this.onDialogKeyDownHandler );
                }, this );
 };
 
@@ -2524,9 +2530,7 @@ OO.ui.Dialog.prototype.getTeardownProcess = function ( data ) {
        // Parent method
        return OO.ui.Dialog.parent.prototype.getTeardownProcess.call( this, data )
                .first( function () {
-                       if ( this.constructor.static.escapable ) {
-                               this.$element.off( 'keydown', this.onDialogKeyDownHandler );
-                       }
+                       this.$element.off( 'keydown', this.onDialogKeyDownHandler );
 
                        this.actions.clear();
                        this.currentAction = null;
index aae5201..ec755a1 100644 (file)
@@ -13,6 +13,7 @@
                        "ltr": "images/icons/calendar-ltr.svg",
                        "rtl": "images/icons/calendar-rtl.svg"
                } },
+               "code": { "file": "images/icons/code.svg" },
                "find": { "file": {
                        "ltr": "images/icons/find-ltr.svg",
                        "rtl": "images/icons/find-rtl.svg"
@@ -25,6 +26,7 @@
                        "ltr": "images/icons/layout-ltr.svg",
                        "rtl": "images/icons/layout-rtl.svg"
                } },
+               "markup": { "file": "images/icons/markup.svg" },
                "newline": { "file": {
                        "ltr": "images/icons/newline-ltr.svg",
                        "rtl": "images/icons/newline-rtl.svg"
index ceb3199..b303071 100644 (file)
                        "ltr": "images/icons/external-link-ltr.svg",
                        "rtl": "images/icons/external-link-rtl.svg"
                } },
-               "linkSecure": { "file": "images/icons/secure-link.svg" }
+               "linkSecure": { "file": "images/icons/secure-link.svg" },
+               "redo": { "file": {
+                       "ltr": "images/icons/arched-arrow-ltr.svg",
+                       "rtl": "images/icons/arched-arrow-rtl.svg"
+               } },
+               "undo": { "file": {
+                       "ltr": "images/icons/arched-arrow-rtl.svg",
+                       "rtl": "images/icons/arched-arrow-ltr.svg"
+               } }
        }
 }
index decae86..bd26399 100644 (file)
@@ -31,7 +31,7 @@
                                "fr,it": "images/icons/bold-g.svg",
                                "hy": "images/icons/bold-armn-to.svg",
                                "ka": "images/icons/bold-geor-man.svg",
-                               "ky,ru": "images/icons/bold-cyrl-zhe.svg",
+                               "ky,ru,uk": "images/icons/bold-cyrl-zhe.svg",
                                "nl": "images/icons/bold-v.svg",
                                "os": "images/icons/bold-cyrl-be.svg"
                        }
@@ -41,7 +41,7 @@
                        "lang": {
                                        "ar": "images/icons/italic-arab-meem.svg",
                                        "cs,en,fr,he,ml,pl,pt,sco": "images/icons/italic-i.svg",
-                                       "be,da,de,fi,ky,nn,no,os,sv,ru": "images/icons/italic-k.svg",
+                                       "be,da,de,fi,ky,nn,no,os,sv,ru,uk": "images/icons/italic-k.svg",
                                        "es,gl,it,nl": "images/icons/italic-c.svg",
                                        "eu": "images/icons/italic-e.svg",
                                        "fa": "images/icons/italic-arab-keheh-jeem.svg",
index c0d04e9..4c70ee4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/add.png and b/resources/lib/oojs-ui/themes/apex/images/icons/add.png differ
index a82600c..dd3ef8a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/advanced.png and b/resources/lib/oojs-ui/themes/apex/images/icons/advanced.png differ
index 98e94fb..7355084 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/alert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/alert.png differ
index 92d231e..a912b03 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/align-center.png and b/resources/lib/oojs-ui/themes/apex/images/icons/align-center.png differ
index 2880478..e395036 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/align-float-left.png and b/resources/lib/oojs-ui/themes/apex/images/icons/align-float-left.png differ
index e9c2f0e..c72a956 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/align-float-right.png and b/resources/lib/oojs-ui/themes/apex/images/icons/align-float-right.png differ
index 88d1439..87a84e2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-ltr.png differ
index 83a1c23..12285f9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-rtl.png differ
index 8bef0a5..24905bc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/arrow-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/arrow-ltr.png differ
index 26e3e69..1cd81cb 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/arrow-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/arrow-rtl.png differ
index 8b0920f..3dbe20e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/articleRedirect-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/articleRedirect-ltr.png differ
index 09631d7..60beb6e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/articleRedirect-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/articleRedirect-rtl.png differ
index cbcd675..92dfaf2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/attachment-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/attachment-ltr.png differ
index 43a0161..f793246 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/attachment-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/attachment-rtl.png differ
index 7d23df2..c3b26b8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/beta-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/beta-invert.png differ
index ef3e20a..7b31e1e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/beta.png and b/resources/lib/oojs-ui/themes/apex/images/icons/beta.png differ
index d620367..0963538 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/betaLaunch-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/betaLaunch-invert.png differ
index f1e48ac..6d3c067 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/betaLaunch.png and b/resources/lib/oojs-ui/themes/apex/images/icons/betaLaunch.png differ
index b1c13a2..82fbd14 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bigger-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bigger-ltr.png differ
index 052ae37..64d1cf1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bigger-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bigger-rtl.png differ
index 181dace..7f8eb2a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/block.png and b/resources/lib/oojs-ui/themes/apex/images/icons/block.png differ
index 76e0db4..640bb2a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/blockUndo-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/blockUndo-ltr.png differ
index e31809e..2475b06 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/blockUndo-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/blockUndo-rtl.png differ
index 86611e3..2907677 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-a.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-a.png differ
index 2ac8bfc..931b6cf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-ain.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-ain.png differ
index 4d45ea0..1121257 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-dad.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-dad.png differ
index 034e2d6..6f6349b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-armn-to.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-armn-to.png differ
index b1c6955..8d09636 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-b.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-b.png differ
index 07a721b..de9e9d1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-be.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-be.png differ
index 6058d8f..281d718 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-te.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-te.png differ
index 205800b..9838701 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-zhe.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-zhe.png differ
index e650eb6..ad0d89b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-f.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-f.png differ
index 13fd1ad..55e766a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-g.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-g.png differ
index d6dcb5d..c050074 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-geor-man.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-geor-man.png differ
index ff021ce..11b67a1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-l.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-l.png differ
index 7ae9321..708d421 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-n.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-n.png differ
index 39c2be0..a60786c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-v.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-v.png differ
index 008246c..084cbc7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bookmark-ltr-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bookmark-ltr-invert.png differ
index 371dfc6..ad046b6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bookmark-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bookmark-ltr.png differ
index deff3f6..125fb74 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bookmark-rtl-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bookmark-rtl-invert.png differ
index 4a50c17..0d19f03 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bookmark-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bookmark-rtl.png differ
index 4632447..027df2d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/browser-ltr-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/browser-ltr-invert.png differ
index 80f1a47..ae059ad 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/browser-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/browser-ltr.png differ
index 5a3df4b..51937b7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/browser-rtl-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/browser-rtl-invert.png differ
index ea215df..939a858 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/browser-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/browser-rtl.png differ
index 8b3ed72..0ab46dd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/calendar-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/calendar-ltr.png differ
index 8ec5023..0236393 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/calendar-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/calendar-rtl.png differ
index 180e3ab..f9354e3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/cancel.png and b/resources/lib/oojs-ui/themes/apex/images/icons/cancel.png differ
index d90b371..e95caf2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/caret-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/caret-ltr.png differ
index 9064f61..e59bdd5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/caret-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/caret-rtl.png differ
index bc453ea..a46ffdb 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/caretDown.png and b/resources/lib/oojs-ui/themes/apex/images/icons/caretDown.png differ
index efd2356..9e5c022 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/caretUp.png and b/resources/lib/oojs-ui/themes/apex/images/icons/caretUp.png differ
index 202cbf7..426c5de 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/case-sensitive.png and b/resources/lib/oojs-ui/themes/apex/images/icons/case-sensitive.png differ
index 7ecd312..0cc9f74 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/check.png and b/resources/lib/oojs-ui/themes/apex/images/icons/check.png differ
index 3bdc8e2..32ba403 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/circle.png and b/resources/lib/oojs-ui/themes/apex/images/icons/circle.png differ
index d8b538e..ec90ed9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/clear-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/clear-invert.png differ
index b18e2e6..973dc03 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/clear.png and b/resources/lib/oojs-ui/themes/apex/images/icons/clear.png differ
index a05c7d9..fdd3e51 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/clock-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/clock-invert.png differ
index 3e94b3a..b826457 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/clock.png and b/resources/lib/oojs-ui/themes/apex/images/icons/clock.png differ
index 86dc8b3..9b3d4ae 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/close.png and b/resources/lib/oojs-ui/themes/apex/images/icons/close.png differ
index 98584c0..ba89e4e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/code.png and b/resources/lib/oojs-ui/themes/apex/images/icons/code.png differ
index 4dad20f..1d8c6db 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/collapse.png and b/resources/lib/oojs-ui/themes/apex/images/icons/collapse.png differ
index 959637a..dcaa881 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/comment.png and b/resources/lib/oojs-ui/themes/apex/images/icons/comment.png differ
index 9408199..7df0592 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/downTriangle.png and b/resources/lib/oojs-ui/themes/apex/images/icons/downTriangle.png differ
index afaddc5..504f29b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/edit-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/edit-ltr.png differ
index 4755937..7ea3aee 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/edit-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/edit-rtl.png differ
index 966bfcb..aa4b8c3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/editLock-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/editLock-ltr.png differ
index 961abe6..3d8b751 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/editLock-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/editLock-rtl.png differ
index e3dc95a..c163360 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/editUndo-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/editUndo-ltr.png differ
index 6dd8b46..fc98968 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/editUndo-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/editUndo-rtl.png differ
index 1e4050c..85fa4f3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/ellipsis.png and b/resources/lib/oojs-ui/themes/apex/images/icons/ellipsis.png differ
index 9073d24..f72b6f2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/expand.png and b/resources/lib/oojs-ui/themes/apex/images/icons/expand.png differ
index 4b59b2a..185ffc6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/external-link-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/external-link-ltr.png differ
index 2978654..7066001 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/external-link-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/external-link-rtl.png differ
index 0335ea1..066d84a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/find-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/find-ltr.png differ
index 2a56ff6..ed834af 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/find-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/find-rtl.png differ
index 63ceaaf..bd19f2b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/flag-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/flag-ltr.png differ
index 80835c0..e881d7c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/flag-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/flag-rtl.png differ
index 6f84122..84d50e9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/flagUndo-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/flagUndo-ltr.png differ
index 89674cc..777322b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/flagUndo-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/flagUndo-rtl.png differ
index 056e781..2949648 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/funnel-ltr-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/funnel-ltr-invert.png differ
index df174d6..9396cba 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/funnel-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/funnel-ltr.png differ
index 7d4f60a..c0f155a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/funnel-rtl-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/funnel-rtl-invert.png differ
index 1204eb1..7aee05f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/funnel-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/funnel-rtl.png differ
index b631396..2070997 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/heart-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/heart-invert.png differ
index 0bd2124..76d76d0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/heart.png and b/resources/lib/oojs-ui/themes/apex/images/icons/heart.png differ
index 4428ef3..9bb1382 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/help-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/help-ltr.png differ
index e6ab21b..50899b0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/help-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/help-rtl.png differ
index 95686fb..417f529 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/history.png and b/resources/lib/oojs-ui/themes/apex/images/icons/history.png differ
index d680396..f76b374 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/image.png and b/resources/lib/oojs-ui/themes/apex/images/icons/image.png differ
index 62c5e10..937ef3c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-ltr.png differ
index 9e688ed..8a26322 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/imageGallery-rtl.png differ
index 9de6d98..ea48759 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/indent-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/indent-ltr.png differ
index 003343c..ea967d0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/indent-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/indent-rtl.png differ
index f021189..d9f5d75 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/info.png and b/resources/lib/oojs-ui/themes/apex/images/icons/info.png differ
index a81e803..2f5fd18 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-a.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-a.png differ
index ce99ac7..c8e03ee 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-keheh-jeem.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-keheh-jeem.png differ
index 258699c..409a416 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-meem.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-meem.png differ
index c9546eb..2dd80f7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-armn-sha.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-armn-sha.png differ
index 1bb9cdb..dc70ded 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-c.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-c.png differ
index 0f102b2..cd5ac9d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-d.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-d.png differ
index 882a535..bb51c22 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-e.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-e.png differ
index 41be11f..9750f42 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-geor-kan.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-geor-kan.png differ
index 28aab44..a37620b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-i.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-i.png differ
index 4f87e9a..9b156fd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-k.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-k.png differ
index 030a98e..3213d6d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-s.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-s.png differ
index 1e9d92d..265da14 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/key-ltr-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/key-ltr-invert.png differ
index ba9ce73..9a4dca8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/key-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/key-ltr.png differ
index 9d46092..a5f2904 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/key-rtl-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/key-rtl-invert.png differ
index 65ed300..f49e112 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/key-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/key-rtl.png differ
index 1dcd4c3..d7d1a0b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/keyboard-ltr-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/keyboard-ltr-invert.png differ
index 7af2472..886d37a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/keyboard-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/keyboard-ltr.png differ
index 61c95be..1b0275e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/keyboard-rtl-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/keyboard-rtl-invert.png differ
index b6e9b6e..790a5e2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/keyboard-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/keyboard-rtl.png differ
index e27be3c..f7b785c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/language-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/language-ltr.png differ
index a7fd0cd..c78f2cd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/language-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/language-rtl.png differ
index dac7b2c..ea6d2f5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/layout-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/layout-ltr.png differ
index 470b785..46bf59b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/layout-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/layout-rtl.png differ
index 0b87983..985a520 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/link.png and b/resources/lib/oojs-ui/themes/apex/images/icons/link.png differ
index a7655e6..e678733 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/listBullet-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/listBullet-ltr.png differ
index 1410d61..5d3b9f9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/listBullet-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/listBullet-rtl.png differ
index a76559d..fc2a369 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-ltr.png differ
index d807f9e..fd7bc00 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-rtl.png differ
index b22626f..5f295f8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/lock.png and b/resources/lib/oojs-ui/themes/apex/images/icons/lock.png differ
index 52467f2..fb1bb0c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/logOut-ltr-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/logOut-ltr-invert.png differ
index a08b629..18f82eb 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/logOut-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/logOut-ltr.png differ
index 734b5f2..dcd2f15 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/logOut-rtl-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/logOut-rtl-invert.png differ
index 135df45..0ffb723 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/logOut-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/logOut-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/markup.png b/resources/lib/oojs-ui/themes/apex/images/icons/markup.png
new file mode 100644 (file)
index 0000000..c78f418
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/markup.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/markup.svg b/resources/lib/oojs-ui/themes/apex/images/icons/markup.svg
new file mode 100644 (file)
index 0000000..7f8c253
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
+    <g id="markup">
+        <path id="left-bracket" d="M9.665 6.32l-4.259 4.274-1.406 1.406 1.406 1.406 4.259 4.274 1.406-1.438-4.259-4.243 4.259-4.243z"/>
+        <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" xlink:href="#left-bracket"/>
+    </g>
+</svg>
index 0a78119..d2278db 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/menu.png and b/resources/lib/oojs-ui/themes/apex/images/icons/menu.png differ
index fc4cd39..b57d8da 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/move-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/move-ltr.png differ
index 7aab217..e401a8f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.png differ
index 7ba0ee9..7071499 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/move.png and b/resources/lib/oojs-ui/themes/apex/images/icons/move.png differ
index c1a9fab..5e432b0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/newWindow-ltr-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/newWindow-ltr-invert.png differ
index ed7b930..29563d8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/newWindow-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/newWindow-ltr.png differ
index 8dd0188..f9a742e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/newWindow-rtl-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/newWindow-rtl-invert.png differ
index 46567c7..c49609f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/newWindow-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/newWindow-rtl.png differ
index 9e7c67f..f41eb0c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/newline-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/newline-ltr.png differ
index 20f5d0d..93c7e52 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/newline-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/newline-rtl.png differ
index 875958b..f9fcbba 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/noWikiText-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/noWikiText-ltr.png differ
index 6ebb399..a4dad7f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/noWikiText-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/noWikiText-rtl.png differ
index a57e2bf..114020e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/notice.png and b/resources/lib/oojs-ui/themes/apex/images/icons/notice.png differ
index 7596c4a..e3af672 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/outdent-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/outdent-ltr.png differ
index 58737cb..ff08acf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/outdent-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/outdent-rtl.png differ
index a9a186b..bcbfa5c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/outline-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/outline-ltr.png differ
index b7f025d..d89e06e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/outline-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/outline-rtl.png differ
index 786beb1..2517166 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/printer-ltr-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/printer-ltr-invert.png differ
index 051ab1d..0084ac9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/printer-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/printer-ltr.png differ
index bd37410..37a9e3d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/printer-rtl-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/printer-rtl-invert.png differ
index 18e247d..6e5b175 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/printer-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/printer-rtl.png differ
index 47dad2b..9b40609 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/puzzle-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/puzzle-ltr.png differ
index 51c40db..6f7334b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/puzzle-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/puzzle-rtl.png differ
index b458c39..0252b74 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/quotes-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/quotes-ltr.png differ
index 6e8917f..7bcc7c7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/quotes-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/quotes-rtl.png differ
index 39d68bd..e1a0c4b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-ltr.png differ
index 4290e87..0ef9d01 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-rtl.png differ
index ef8cfc3..f27e421 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/regular-expression.png and b/resources/lib/oojs-ui/themes/apex/images/icons/regular-expression.png differ
index 329da36..46a180d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/ribbonPrize-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/ribbonPrize-invert.png differ
index 304a4fa..1010574 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/ribbonPrize.png and b/resources/lib/oojs-ui/themes/apex/images/icons/ribbonPrize.png differ
index c461272..7b47539 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/search.png and b/resources/lib/oojs-ui/themes/apex/images/icons/search.png differ
index 2b89d37..8a44a92 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/secure-link.png and b/resources/lib/oojs-ui/themes/apex/images/icons/secure-link.png differ
index dd2706b..1c8e587 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/settings.png and b/resources/lib/oojs-ui/themes/apex/images/icons/settings.png differ
index 7181e6d..f5e89ba 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/smaller-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/smaller-ltr.png differ
index cc539f0..e07c7b0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/smaller-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/smaller-rtl.png differ
index 92f887d..9b02a41 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/specialCharacter.png and b/resources/lib/oojs-ui/themes/apex/images/icons/specialCharacter.png differ
index 046bbf7..36b6a1f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/star.png and b/resources/lib/oojs-ui/themes/apex/images/icons/star.png differ
index cab7a98..279d1f7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-a.png and b/resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-a.png differ
index 45f096f..21b9baa 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-s.png and b/resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-s.png differ
index 5b1c1fd..d769468 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-y.png and b/resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-y.png differ
index f8b8766..c2cf4cf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/subscript-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/subscript-ltr.png differ
index f01e11d..b1ee51b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/subscript-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/subscript-rtl.png differ
index 9c2fe07..2bc944a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/sun-ltr-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/sun-ltr-invert.png differ
index 459f4c9..0c00745 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/sun-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/sun-ltr.png differ
index 3481d18..7ac54ff 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/sun-rtl-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/sun-rtl-invert.png differ
index 8a0fc83..77c7806 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/sun-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/sun-rtl.png differ
index 69fe6e7..8df4609 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/superscript-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/superscript-ltr.png differ
index eac3d1d..48bfd68 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/superscript-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/superscript-rtl.png differ
index 1389d3d..80b474d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/table-caption.png and b/resources/lib/oojs-ui/themes/apex/images/icons/table-caption.png differ
index dfd5e51..64c2148 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/table-insert-column-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/table-insert-column-ltr.png differ
index 1354a88..650be0c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/table-insert-column-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/table-insert-column-rtl.png differ
index 3d8091e..67d488d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/table-insert-row-after.png and b/resources/lib/oojs-ui/themes/apex/images/icons/table-insert-row-after.png differ
index e357f90..2477475 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/table-insert-row-before.png and b/resources/lib/oojs-ui/themes/apex/images/icons/table-insert-row-before.png differ
index 202a120..e6b2da3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/table-merge-cells.png and b/resources/lib/oojs-ui/themes/apex/images/icons/table-merge-cells.png differ
index 2eedd1e..f4008f6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/table.png and b/resources/lib/oojs-ui/themes/apex/images/icons/table.png differ
index 46c07c9..82461ef 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/tag.png and b/resources/lib/oojs-ui/themes/apex/images/icons/tag.png differ
index f7a51c9..f3ce49e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/templateAdd-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/templateAdd-ltr.png differ
index 3bb8174..448caf4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/templateAdd-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/templateAdd-rtl.png differ
index ffd190a..fede39a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/text-dir-lefttoright.png and b/resources/lib/oojs-ui/themes/apex/images/icons/text-dir-lefttoright.png differ
index 214f8d1..9f60ed5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/text-dir-righttoleft.png and b/resources/lib/oojs-ui/themes/apex/images/icons/text-dir-righttoleft.png differ
index a2f48be..65ab476 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/text-style.png and b/resources/lib/oojs-ui/themes/apex/images/icons/text-style.png differ
index 9dc34b8..3957e7a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/trash.png and b/resources/lib/oojs-ui/themes/apex/images/icons/trash.png differ
index 89448ed..dce4a9f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/trashUndo-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/trashUndo-ltr.png differ
index 51abef3..f3801e4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/trashUndo-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/trashUndo-rtl.png differ
index 2906614..82919e7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/unLock-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/unLock-ltr.png differ
index 63ec5cb..94d1593 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/unLock-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/unLock-rtl.png differ
index bdb1c4f..2329af3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/unStar.png and b/resources/lib/oojs-ui/themes/apex/images/icons/unStar.png differ
index f4add0a..78a3c3f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/underline-a.png and b/resources/lib/oojs-ui/themes/apex/images/icons/underline-a.png differ
index 2504e66..0dbeb80 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/underline-u.png and b/resources/lib/oojs-ui/themes/apex/images/icons/underline-u.png differ
index 1b65589..f1aca31 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/upTriangle.png and b/resources/lib/oojs-ui/themes/apex/images/icons/upTriangle.png differ
index fa2da24..08e31e9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/upload-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/upload-ltr.png differ
index 1ac6106..ccabf98 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/upload-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/upload-rtl.png differ
index 19b4561..7018968 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/watchlist-ltr-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/watchlist-ltr-invert.png differ
index 4b94c1a..53e7011 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/watchlist-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/watchlist-ltr.png differ
index 48bf383..28008b5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/watchlist-rtl-invert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/watchlist-rtl-invert.png differ
index f9cc5ea..8fc4df5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/watchlist-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/watchlist-rtl.png differ
index 850f157..40309aa 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/wikiText.png and b/resources/lib/oojs-ui/themes/apex/images/icons/wikiText.png differ
index db726a1..bae13d7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/window.png and b/resources/lib/oojs-ui/themes/apex/images/icons/window.png differ
index ca60c43..9d25a24 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/indicators/alert.png and b/resources/lib/oojs-ui/themes/apex/images/indicators/alert.png differ
index 6574725..f6ff705 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-down.png and b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-down.png differ
index 7c84397..3c94da3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-ltr.png differ
index 5bf9064..6b1422f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-rtl.png differ
index 1a05ade..5b2081c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-up.png and b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-up.png differ
index 5db444c..a858a03 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/indicators/clear.png and b/resources/lib/oojs-ui/themes/apex/images/indicators/clear.png differ
index 45eb03b..aca9239 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/indicators/required.png and b/resources/lib/oojs-ui/themes/apex/images/indicators/required.png differ
index 1146082..123fbfa 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/indicators/search-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/indicators/search-ltr.png differ
index c21cc61..db74061 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/indicators/search-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/indicators/search-rtl.png differ
index 1843f27..dbf69b9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/textures/transparency.png and b/resources/lib/oojs-ui/themes/apex/images/textures/transparency.png differ
index 97e8d13..eeb20b0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/toolbar-shadow.png and b/resources/lib/oojs-ui/themes/apex/images/toolbar-shadow.png differ
index b03950c..40516c0 100644 (file)
@@ -20,6 +20,7 @@
                        "ltr": "images/icons/calendar-ltr.svg",
                        "rtl": "images/icons/calendar-rtl.svg"
                } },
+               "code": { "file": "images/icons/code.svg" },
                "find": { "file": {
                        "ltr": "images/icons/find-ltr.svg",
                        "rtl": "images/icons/find-rtl.svg"
@@ -32,6 +33,7 @@
                        "ltr": "images/icons/layout-ltr.svg",
                        "rtl": "images/icons/layout-rtl.svg"
                } },
+               "markup": { "file": "images/icons/markup.svg" },
                "newline": { "file": {
                        "ltr": "images/icons/newline-ltr.svg",
                        "rtl": "images/icons/newline-rtl.svg"
index ffa8905..d70f60e 100644 (file)
@@ -11,7 +11,7 @@
                        "color": "#347bff"
                },
                "constructive": {
-                       "color": "#00af89"
+                       "color": "#347bff"
                },
                "destructive": {
                        "color": "#d11d13"
                        "ltr": "images/icons/external-link-ltr.svg",
                        "rtl":  "images/icons/external-link-rtl.svg"
                } },
-               "linkSecure": { "file": "images/icons/secure-link.svg" }
+               "linkSecure": { "file": "images/icons/secure-link.svg" },
+               "redo": { "file": {
+                       "ltr": "images/icons/arched-arrow-ltr.svg",
+                       "rtl": "images/icons/arched-arrow-rtl.svg"
+               } },
+               "undo": { "file": {
+                       "ltr": "images/icons/arched-arrow-rtl.svg",
+                       "rtl": "images/icons/arched-arrow-ltr.svg"
+               } }
        }
 }
index 28188ea..45c6a64 100644 (file)
@@ -38,7 +38,7 @@
                                "fr,it": "images/icons/bold-g.svg",
                                "hy": "images/icons/bold-armn-to.svg",
                                "ka": "images/icons/bold-geor-man.svg",
-                               "ky,ru": "images/icons/bold-cyrl-zhe.svg",
+                               "ky,ru,uk": "images/icons/bold-cyrl-zhe.svg",
                                "nl": "images/icons/bold-v.svg",
                                "os": "images/icons/bold-cyrl-be.svg"
                        }
@@ -48,7 +48,7 @@
                        "lang": {
                                        "ar": "images/icons/italic-arab-meem.svg",
                                        "cs,en,fr,he,ml,pl,pt,sco": "images/icons/italic-i.svg",
-                                       "be,da,de,fi,ky,nn,no,os,sv,ru": "images/icons/italic-k.svg",
+                                       "be,da,de,fi,ky,nn,no,os,sv,ru,uk": "images/icons/italic-k.svg",
                                        "es,gl,it,nl": "images/icons/italic-c.svg",
                                        "eu": "images/icons/italic-e.svg",
                                        "fa": "images/icons/italic-arab-keheh-jeem.svg",
index b713146..efad42e 100644 (file)
@@ -11,7 +11,7 @@
                        "color": "#347bff"
                },
                "constructive": {
-                       "color": "#00af89"
+                       "color": "#347bff"
                },
                "destructive": {
                        "color": "#d11d13"
index 7029bc2..65c7c5b 100644 (file)
@@ -11,7 +11,7 @@
                        "color": "#347bff"
                },
                "constructive": {
-                       "color": "#00af89"
+                       "color": "#347bff"
                },
                "destructive": {
                        "color": "#d11d13"
@@ -45,7 +45,7 @@
                        },
                        "variants": [ "progressive" ]
                },
-               "star": { "file": "images/icons/star.svg", "variants": [ "constructive" ] },
+               "star": { "file": "images/icons/star.svg", "variants": [ "constructive", "progressive" ] },
                "trash": { "file": "images/icons/trash.svg" },
                "trashUndo": { "file": {
                        "ltr": "images/icons/trashUndo-ltr.svg",
@@ -55,6 +55,6 @@
                        "ltr": "images/icons/unLock-ltr.svg",
                        "rtl": "images/icons/unLock-rtl.svg"
                }, "variants": [ "destructive" ] },
-               "unStar": { "file": "images/icons/unStar.svg", "variants": [ "constructive" ] }
+               "unStar": { "file": "images/icons/unStar.svg", "variants": [ "constructive", "progressive" ] }
        }
 }
index c332e3c..047bc6b 100644 (file)
@@ -11,6 +11,9 @@
                        "color": "#347bff"
                },
                "constructive": {
+                       "color": "#347bff"
+               },
+               "constructive-deprecated": {
                        "color": "#00af89"
                },
                "destructive": {
                }
        },
        "images": {
-               "add": { "file": "images/icons/add.svg", "variants": [ "constructive" ] },
+               "add": { "file": "images/icons/add.svg", "variants": [ "constructive", "progressive" ] },
                "advanced": { "file": "images/icons/advanced.svg" },
                "alert": { "file": "images/icons/alert.svg", "variants": [ "warning" ] },
                "cancel": { "file": "images/icons/cancel.svg", "variants": [ "destructive" ] },
-               "check": { "file": "images/icons/check.svg", "variants": [ "constructive", "progressive", "destructive" ] },
-               "circle": { "file": "images/icons/circle.svg", "variants": [ "constructive" ] },
+               "check": { "file": "images/icons/check.svg", "variants": [ "constructive-deprecated", "constructive", "progressive", "destructive" ] },
+               "circle": { "file": "images/icons/circle.svg", "variants": [ "constructive-deprecated", "constructive", "progressive" ] },
                "close": { "file": {
                        "ltr": "images/icons/close-ltr.svg",
                        "rtl": "images/icons/close-rtl.svg"
index e81206c..02d4f12 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.png differ
index 0bd0e73..34a4bba 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #00af89 }</style>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #347bff }</style>
     <g id="add">
         <path id="plus" d="M13 6h-2v5H6v2h5v5h2v-5h5v-2h-5z"/>
     </g>
index 34a293f..8deeddf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-progressive.png
new file mode 100644 (file)
index 0000000..02d4f12
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-progressive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-progressive.svg
new file mode 100644 (file)
index 0000000..34a4bba
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #347bff }</style>
+    <g id="add">
+        <path id="plus" d="M13 6h-2v5H6v2h5v5h2v-5h5v-2h-5z"/>
+    </g>
+</svg>
index c0d04e9..4c70ee4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add.png differ
index 92da111..67fec17 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.png differ
index 1d4dce7..32892a5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.png differ
index 6071d88..2a66b03 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.png differ
index 82bcd06..6276502 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-warning.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-warning.png differ
index 98e94fb..7355084 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.png differ
index 0cdfef9..0343b3f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center-invert.png differ
index 92d231e..a912b03 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center.png differ
index a2338b9..6d3d375 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left-invert.png differ
index 2880478..e395036 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left.png differ
index 80d5f6b..655d7cc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right-invert.png differ
index e9c2f0e..c72a956 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right.png differ
index 327e1dd..d8d64f1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png differ
index 649cd14..c2fae72 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.png differ
index f04017c..21fa9ab 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png differ
index d591768..df22b7d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.png differ
index 15b0e44..6299e86 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr-invert.png differ
index 8bef0a5..24905bc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr.png differ
index bef0ab4..fb375e4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl-invert.png differ
index 26e3e69..1cd81cb 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl.png differ
index 764b7c0..8c264dd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr-invert.png differ
index 99dd638..cf7de13 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr.png differ
index b701339..ab20718 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl-invert.png differ
index e5e47aa..d0b0e70 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl.png differ
index f67ac4a..5eed717 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr-invert.png differ
index a7c76b8..5b169e2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr.png differ
index 1db4c2e..cc9c9de 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl-invert.png differ
index 314b8eb..9f22672 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl.png differ
index 9261197..76cc11f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleRedirect-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleRedirect-ltr-invert.png differ
index 8b0920f..3dbe20e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleRedirect-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleRedirect-ltr.png differ
index 7c4c294..b31e0f9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleRedirect-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleRedirect-rtl-invert.png differ
index 09631d7..60beb6e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleRedirect-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleRedirect-rtl.png differ
index 7f7b0a3..1bd1587 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr-invert.png differ
index 93f8624..1802dfc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr.png differ
index dafab9b..a8e8a3a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl-invert.png differ
index 7cf4ac8..a2611da 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl.png differ
index a77a23e..aa1b38e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/attachment-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/attachment-ltr-invert.png differ
index cbcd675..92dfaf2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/attachment-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/attachment-ltr.png differ
index e2e2e02..bba8db5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/attachment-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/attachment-rtl-invert.png differ
index 43a0161..f793246 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/attachment-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/attachment-rtl.png differ
index 16d67ef..2f0c960 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bell-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bell-invert.png differ
index 948443f..b86d5f7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bell.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bell.png differ
index e59b49d..1c0de72 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr-invert.png differ
index 9572f43..1f9ae71 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr.png differ
index 114d215..c21e1c0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl-invert.png differ
index 6e71a86..81d9a0a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl.png differ
index 7d23df2..c3b26b8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/beta-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/beta-invert.png differ
index ef3e20a..7b31e1e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/beta.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/beta.png differ
index d620367..0963538 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch-invert.png differ
index f1e48ac..6d3c067 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch.png differ
index 867a1d8..97f77f4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr-invert.png differ
index b1c13a2..82fbd14 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr.png differ
index 2575108..628de3d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl-invert.png differ
index 052ae37..64d1cf1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl.png differ
index 3e91997..31f14c5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.png differ
index 9529e5b..ca81ab7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-invert.png differ
index 181dace..7f8eb2a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/block.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block.png differ
index aeee727..7426f56 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr-invert.png differ
index 76e0db4..640bb2a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr.png differ
index 46b680c..a02e2e0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl-invert.png differ
index e31809e..2475b06 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl.png differ
index 7d531fe..8c11dad 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a-invert.png differ
index 86611e3..2907677 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a.png differ
index 838af39..eac1ac7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain-invert.png differ
index 2ac8bfc..931b6cf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.png differ
index 6c2130d..0973b1f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad-invert.png differ
index 4d45ea0..1121257 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.png differ
index 7be426d..2ae27c2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to-invert.png differ
index 034e2d6..6f6349b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.png differ
index 1f96ddf..e242b55 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b-invert.png differ
index b1c6955..8d09636 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b.png differ
index 7ea9092..c131903 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be-invert.png differ
index 07a721b..de9e9d1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.png differ
index 82835f6..803d066 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te-invert.png differ
index 6058d8f..281d718 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te.png differ
index 764795f..080e731 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe-invert.png differ
index 205800b..9838701 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe.png differ
index e695e7e..9281a0d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f-invert.png differ
index e650eb6..ad0d89b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f.png differ
index ed60059..2f1b7ac 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g-invert.png differ
index 13fd1ad..55e766a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.png differ
index e699abb..ef2da34 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man-invert.png differ
index d6dcb5d..c050074 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man.png differ
index 45a84ab..26c7018 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l-invert.png differ
index ff021ce..11b67a1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l.png differ
index 13b5b72..d57d0a5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n-invert.png differ
index 7ae9321..708d421 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n.png differ
index ea7e7fd..ad990be 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v-invert.png differ
index 39c2be0..a60786c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v.png differ
index 8f8feb6..a32272e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr-invert.png differ
index 636d3bd..49ac06a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr.png differ
index 573fc84..7258970 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl-invert.png differ
index 87f9189..e0edc34 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl.png differ
index 008246c..084cbc7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr-invert.png differ
index 371dfc6..ad046b6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr.png differ
index deff3f6..125fb74 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl-invert.png differ
index 4a50c17..0d19f03 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl.png differ
index 2e93e35..6194ed4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bright-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bright-invert.png differ
index 3e9e2f1..788fc94 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bright.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bright.png differ
index 4632447..027df2d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr-invert.png differ
index 80f1a47..ae059ad 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr.png differ
index 5a3df4b..51937b7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl-invert.png differ
index ea215df..939a858 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl.png differ
index 330a53d..1463874 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr-invert.png differ
index 8b3ed72..0ab46dd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr.png differ
index 2f9c5ba..806c55d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl-invert.png differ
index 8ec5023..0236393 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl.png differ
index acb8b01..50c6acd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-destructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-destructive.png differ
index 02538ef..b7529a2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.png differ
index 180e3ab..f9354e3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.png differ
index 80488fc..0bf8286 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr-invert.png differ
index d90b371..e95caf2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr.png differ
index 69eba72..4a880d3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl-invert.png differ
index 9064f61..e59bdd5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl.png differ
index eea3f84..f3031d9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown-invert.png differ
index bc453ea..a46ffdb 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown.png differ
index 7386e14..5706cb4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp-invert.png differ
index efd2356..9e5c022 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp.png differ
index 3a267f7..6fe1260 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.png differ
index 202cbf7..426c5de 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive-deprecated.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive-deprecated.png
new file mode 100644 (file)
index 0000000..a0f9871
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive-deprecated.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive-deprecated.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive-deprecated.svg
new file mode 100644 (file)
index 0000000..07a5614
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #00af89 }</style>
+    <path d="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z" id="check"/>
+</svg>
index 875fa68..eb72d14 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.png differ
index 07a5614..3084e5a 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #00af89 }</style>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #347bff }</style>
     <path d="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z" id="check"/>
 </svg>
index 9577504..65e5e8d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-destructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-destructive.png differ
index 83ba2b0..708bb39 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.png differ
index 343d52f..eb72d14 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-progressive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-progressive.png differ
index 1ea326d..65ab0e9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive-deprecated.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive-deprecated.png
new file mode 100644 (file)
index 0000000..43ed482
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive-deprecated.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive-deprecated.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive-deprecated.svg
new file mode 100644 (file)
index 0000000..b96e771
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #00af89 }</style>
+    <circle cx="12" cy="12" r="6"/>
+</svg>
index 0e0d9c2..d2e71c6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive.png differ
index b96e771..136b43e 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #00af89 }</style>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #347bff }</style>
     <circle cx="12" cy="12" r="6"/>
 </svg>
index 82c327a..f4dd1ff 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-progressive.png
new file mode 100644 (file)
index 0000000..d2e71c6
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-progressive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-progressive.svg
new file mode 100644 (file)
index 0000000..136b43e
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #347bff }</style>
+    <circle cx="12" cy="12" r="6"/>
+</svg>
index 3bdc8e2..32ba403 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle.png differ
index 08a5fe1..c6a4751 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr-invert.png differ
index ae1621c..bf131c5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr.png differ
index af33ec0..7b90a83 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl-invert.png differ
index 4acaa0f..df0c204 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl.png differ
index d8b538e..ec90ed9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.png differ
index b18e2e6..973dc03 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.png differ
index 2ac138b..2f944d7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clock-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clock-invert.png differ
index e62c52c..98b504e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clock.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clock.png differ
index 32d5ae8..a35e9d1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png differ
index 072276b..b90f031 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #ffffff }</style>
     <g id="close">
-        <path id="cross" d="M17.4 9.1c.8-.8.8-2 0-2.8L12 11.8 7.4 7.2 6 8.6l4.6 4.6-4 4c-.8.8-.8 2 0 2.8l5.4-5.4 4.6 4.6 1.4-1.4-4.6-4.6z"/>
+        <path id="cross" d="M17.4 8.1c.8-.8.8-2 0-2.8L12 10.8 7.4 6.2 6 7.6l4.6 4.6-4 4c-.8.8-.8 2 0 2.8l5.4-5.4 4.6 4.6 1.4-1.4-4.6-4.6z"/>
     </g>
 </svg>
index b05cc97..b6a42b8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png differ
index 1427670..c269316 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="close">
-        <path id="cross" d="M17.4 9.1c.8-.8.8-2 0-2.8L12 11.8 7.4 7.2 6 8.6l4.6 4.6-4 4c-.8.8-.8 2 0 2.8l5.4-5.4 4.6 4.6 1.4-1.4-4.6-4.6z"/>
+        <path id="cross" d="M17.4 8.1c.8-.8.8-2 0-2.8L12 10.8 7.4 6.2 6 7.6l4.6 4.6-4 4c-.8.8-.8 2 0 2.8l5.4-5.4 4.6 4.6 1.4-1.4-4.6-4.6z"/>
     </g>
 </svg>
index 731baf9..16462a2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png differ
index 19ddef6..34afc43 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #ffffff }</style>
     <g id="close">
-        <path id="cross" d="M6.6 9.1c-.8-.8-.8-2 0-2.8l5.4 5.5 4.6-4.6L18 8.6l-4.6 4.6 4 4c.8.8.8 2 0 2.8L12 14.6l-4.6 4.6L6 17.8l4.6-4.6z"/>
+        <path id="cross" d="M6.6 8.1c-.8-.8-.8-2 0-2.8l5.4 5.5 4.6-4.6L18 7.6l-4.6 4.6 4 4c.8.8.8 2 0 2.8L12 13.6l-4.6 4.6L6 16.8l4.6-4.6z"/>
     </g>
 </svg>
index 3752520..e3e2417 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png differ
index 6e0ca93..36e58ec 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="close">
-        <path id="cross" d="M6.6 9.1c-.8-.8-.8-2 0-2.8l5.4 5.5 4.6-4.6L18 8.6l-4.6 4.6 4 4c.8.8.8 2 0 2.8L12 14.6l-4.6 4.6L6 17.8l4.6-4.6z"/>
+        <path id="cross" d="M6.6 8.1c-.8-.8-.8-2 0-2.8l5.4 5.5 4.6-4.6L18 7.6l-4.6 4.6 4 4c.8.8.8 2 0 2.8L12 13.6l-4.6 4.6L6 16.8l4.6-4.6z"/>
     </g>
 </svg>
index e1b2199..1804fb8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.png differ
index 98584c0..ba89e4e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/code.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code.png differ
index 3e7e993..951a840 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.png differ
index 4dad20f..1d8c6db 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.png differ
index 80171e3..1de3b9d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment-invert.png differ
index 959637a..dcaa881 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment.png differ
index add46d4..014f7fe 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr-invert.png differ
index 07abcbe..79f4497 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr.png differ
index 2ecf913..9848fcd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl-invert.png differ
index 54c0af7..c01002f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl.png differ
index b87c977..b186eb0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle-invert.png differ
index 9408199..7df0592 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle.png differ
index 1e2f6c9..ce0f041 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr-invert.png differ
index b63ca2d..4d67c8d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr.png differ
index 167fd8d..09286f7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl-invert.png differ
index 457ef94..660d7d0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl.png differ
index 65b4c65..682e18f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-invert.png differ
index ee2be2d..44ceb9c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-progressive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-progressive.png differ
index afaddc5..504f29b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr.png differ
index c66c5fd..2d23719 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-invert.png differ
index ef6c949..4d2e0a4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-progressive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-progressive.png differ
index 4755937..7ea3aee 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl.png differ
index fe07392..c90c593 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr-invert.png differ
index 966bfcb..aa4b8c3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr.png differ
index ff54699..5a40486 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl-invert.png differ
index 961abe6..3d8b751 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl.png differ
index 1977477..19726d1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr-invert.png differ
index e3dc95a..c163360 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr.png differ
index 9070cab..8e72010 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl-invert.png differ
index 6dd8b46..fc98968 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl.png differ
index 1c876e3..7d57d11 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis-invert.png differ
index 1e4050c..85fa4f3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis.png differ
index 05f7138..38a2c39 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand-invert.png differ
index 9073d24..f72b6f2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand.png differ
index eec3102..18a1801 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.png differ
index 4b59b2a..185ffc6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.png differ
index bf0ef13..105fd0d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.png differ
index 2978654..7066001 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.png differ
index 84a838b..b456478 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/eye-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eye-invert.png differ
index 9a0dbaa..fb90b1e 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #ffffff }</style>
-    <path d="M12 8C7 8 1 14 1 14s6 6 11 6l11-6s-6-6-11-6zm0 10c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z"/>
+    <path d="M12 8c-5 0-11 6-11 6s6 6 11 6 11-6 11-6-6-6-11-6zm0 10c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z"/>
     <circle cx="12" cy="14" r="2"/>
 </svg>
index f851591..62c82c0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/eye.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eye.png differ
index 36c043f..343e9cf 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 8C7 8 1 14 1 14s6 6 11 6l11-6s-6-6-11-6zm0 10c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z"/>
+    <path d="M12 8c-5 0-11 6-11 6s6 6 11 6 11-6 11-6-6-6-11-6zm0 10c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z"/>
     <circle cx="12" cy="14" r="2"/>
 </svg>
index 7b4bb15..bd499f1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed-invert.png differ
index f350b57..1ac37d6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed.png differ
index 1210980..e6602c9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr-invert.png differ
index 0335ea1..066d84a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.png differ
index fbba51e..bd3e862 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl-invert.png differ
index 2a56ff6..ed834af 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.png differ
index b9ad2b8..ea79f46 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr-invert.png differ
index 63ceaaf..bd19f2b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr.png differ
index da059cf..e0b8859 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl-invert.png differ
index 80835c0..e881d7c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl.png differ
index 9ef0552..b297849 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr-invert.png differ
index 6f84122..84d50e9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr.png differ
index 1ae130d..1faeae3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl-invert.png differ
index 89674cc..777322b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl.png differ
index 5c9d194..d7c6e28 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr-invert.png differ
index 163465e..45c3ee9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr.png differ
index 9fd77b2..46b3f94 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl-invert.png differ
index 4856f62..8a624c1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl.png differ
index 056e781..2949648 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr-invert.png differ
index df174d6..9396cba 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr.png differ
index 7d4f60a..c0f155a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl-invert.png differ
index 1204eb1..7aee05f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl.png differ
index 7d3d996..2a4d547 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/halfBright-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/halfBright-invert.png differ
index 9332bea..f843210 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/halfBright.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/halfBright.png differ
index b631396..2070997 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/heart-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/heart-invert.png differ
index 0bd2124..76d76d0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/heart.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/heart.png differ
index ac9968d..35d8f22 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.png differ
index 4428ef3..9bb1382 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.png differ
index f425c35..9cb8cb2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.png differ
index e6ab21b..50899b0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl.png differ
index 8c1cc2b..0bd8394 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/history-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/history-invert.png differ
index 95686fb..417f529 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/history.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/history.png differ
index fc724c8..42797a2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr-invert.png differ
index 23c2331..f91dfa2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.png differ
index 9845260..c33eed6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl-invert.png differ
index 1260378..f33be17 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl.png differ
index 32b7d1a..422f8ea 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr-invert.png differ
index a071e4e..f08883c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr.png differ
index bfc5625..375a79f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl-invert.png differ
index ad22a4e..dd60447 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl.png differ
index 6bb8581..bd15ff0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-ltr-invert.png differ
index db12fcd..3934d14 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-ltr.png differ
index 964d8b1..85b22c4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-rtl-invert.png differ
index ca56cc3..f8af41f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageGallery-rtl.png differ
index 20cda89..61b5d22 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr-invert.png differ
index 973e363..a1a1e1e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr.png differ
index 2058be0..2223f5f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl-invert.png differ
index d160db5..f0ddda4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl.png differ
index f1c6cd6..af944e7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr-invert.png differ
index daf4257..b7663ae 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr.png differ
index fc48622..f52ff9b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl-invert.png differ
index 6ebe883..63b2750 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl.png differ
index a89528f..2c4e028 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.png differ
index f021189..d9f5d75 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/info.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/info.png differ
index 7627397..12dfc56 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a-invert.png differ
index a81e803..2f5fd18 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a.png differ
index 5e36975..567b290 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem-invert.png differ
index ce99ac7..c8e03ee 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.png differ
index 475d014..03989d4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem-invert.png differ
index 258699c..409a416 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.png differ
index ed79915..75dc339 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha-invert.png differ
index c9546eb..2dd80f7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.png differ
index 68fe590..a165657 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c-invert.png differ
index 1bb9cdb..dc70ded 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.png differ
index a2d6800..b656d1c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d-invert.png differ
index 0f102b2..cd5ac9d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d.png differ
index cf39073..2e0918d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e-invert.png differ
index 882a535..bb51c22 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e.png differ
index 1601810..b0e5b2c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan-invert.png differ
index 41be11f..9750f42 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.png differ
index ad101c7..cc8fee4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i-invert.png differ
index 28aab44..a37620b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i.png differ
index 260a03c..5387c36 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k-invert.png differ
index 4f87e9a..9b156fd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k.png differ
index 09e3cfb..42b674e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s-invert.png differ
index 030a98e..3213d6d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.png differ
index 4f5e01e..7ce988d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr-invert.png differ
index b08c1d4..f30b5ff 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr.png differ
index 519bf10..4c30950 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl-invert.png differ
index 31dbb88..7826fa8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.png differ
index 1e9d92d..265da14 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr-invert.png differ
index ba9ce73..9a4dca8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr.png differ
index 9d46092..a5f2904 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl-invert.png differ
index 65ed300..f49e112 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl.png differ
index 1dcd4c3..d7d1a0b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr-invert.png differ
index 7af2472..886d37a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr.png differ
index 61c95be..1b0275e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl-invert.png differ
index b6e9b6e..790a5e2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl.png differ
index 9de74f2..d9ac348 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/language-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/language-ltr-invert.png differ
index e27be3c..f7b785c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/language-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/language-ltr.png differ
index 97c0c09..80dad94 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/language-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/language-rtl-invert.png differ
index a7fd0cd..c78f2cd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/language-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/language-rtl.png differ
index e9b226c..264811b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-ltr-invert.png differ
index 79a2824..4b6d298 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-ltr.png differ
index e9b226c..264811b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-rtl-invert.png differ
index 79a2824..4b6d298 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-rtl.png differ
index edee6ac..68f2452 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr-invert.png differ
index dac7b2c..ea6d2f5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr.png differ
index 83e0145..1ef7734 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl-invert.png differ
index 470b785..46bf59b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl.png differ
index ca5beaf..7c9195e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.png differ
index 25980e6..617d325 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.png differ
index ead64bc..ece611a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl-invert.png differ
index 024c2db..ef48413 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl.png differ
index f304cef..05d4180 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr-invert.png differ
index c73e1a1..7796dd1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr.png differ
index 41cdbfb..6aeed4c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl-invert.png differ
index e586f02..2c727b1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl.png differ
index d1caa84..208c726 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr-invert.png differ
index ab6dfe0..c2d28dc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr.png differ
index ded0765..58be38a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl-invert.png differ
index b433b2c..b0bd959 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl.png differ
index 16974b2..9c3c948 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-destructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-destructive.png differ
index 082f2e9..a81a2a1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-invert.png differ
index 06a6afb..a87541f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr.png differ
index 4bafac8..53ca51a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-destructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-destructive.png differ
index c5d842a..ab62257 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-invert.png differ
index 15dd61e..55f2d22 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl.png differ
index 52467f2..fb1bb0c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr-invert.png differ
index a08b629..18f82eb 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr.png differ
index 734b5f2..dcd2f15 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl-invert.png differ
index 135df45..0ffb723 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl.png differ
index 7dcc6fa..7f04a80 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc-invert.png differ
index 7c2c123..80ef2a6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc.png differ
index 2ae214f..0f8d9a6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons-invert.png differ
index cde6003..c41c247 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons.png differ
index ea3aec3..9d576d0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia-invert.png differ
index 05bf48c..f1d8330 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia.png differ
index 054cfd2..6e0cd01 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr-invert.png differ
index 3629f55..43a97d2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr.png differ
index afd1dc7..4993f57 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl-invert.png differ
index 5d1362f..36e9cad 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl.png differ
index 3b041dd..55a68db 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin-invert.png differ
index 46b31a4..536e77c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin.png differ
index ab176c9..607354c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr-invert.png differ
index 6d51b9a..88160bc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr.png differ
index 9cb0343..6ea8226 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl-invert.png differ
index b7797c4..20aba25 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/markup-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/markup-invert.png
new file mode 100644 (file)
index 0000000..0f64c02
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/markup-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/markup-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/markup-invert.svg
new file mode 100644 (file)
index 0000000..9d87725
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #ffffff }</style>
+    <g id="markup">
+        <path id="left-bracket" d="M9.665 6.32l-4.259 4.274-1.406 1.406 1.406 1.406 4.259 4.274 1.406-1.438-4.259-4.243 4.259-4.243z"/>
+        <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" xlink:href="#left-bracket"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/markup.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/markup.png
new file mode 100644 (file)
index 0000000..c78f418
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/markup.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/markup.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/markup.svg
new file mode 100644 (file)
index 0000000..7f8c253
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
+    <g id="markup">
+        <path id="left-bracket" d="M9.665 6.32l-4.259 4.274-1.406 1.406 1.406 1.406 4.259 4.274 1.406-1.438-4.259-4.243 4.259-4.243z"/>
+        <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" xlink:href="#left-bracket"/>
+    </g>
+</svg>
index 0400c19..b61db4a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.png differ
index 0a78119..d2278db 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.png differ
index 7e1c9fb..33a9800 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr-invert.png differ
index 279c61d..2171c1f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr.png differ
index d965979..c2d617b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl-invert.png differ
index c44dea0..fba7920 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl.png differ
index 576c531..38bcc0a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/moon-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/moon-invert.png differ
index 98df69c..7aef8bd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/moon.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/moon.png differ
index e72516a..6d7e5ec 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-invert.png differ
index 7c9bdc1..fe5f614 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr-invert.png differ
index fc4cd39..b57d8da 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr.png differ
index db69b5a..cfca1e2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.png differ
index 7aab217..e401a8f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.png differ
index 7ba0ee9..7071499 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move.png differ
index c1a9fab..5e432b0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr-invert.png differ
index ed7b930..29563d8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr.png differ
index 8dd0188..f9a742e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl-invert.png differ
index 46567c7..c49609f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl.png differ
index fb09227..874ff29 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr-invert.png differ
index 9e7c67f..f41eb0c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr.png differ
index 11b6b25..99be840 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl-invert.png differ
index 20f5d0d..93c7e52 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl.png differ
index 69ceeaf..3f48ede 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr-invert.png differ
index 056e7dd..ccd6474 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr.png differ
index c34589a..85cfa83 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl-invert.png differ
index 8221a09..b5df1df 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl.png differ
index 39e00b1..aacacca 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr-invert.png differ
index 875958b..f9fcbba 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr.png differ
index 6cd62a1..5e50951 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl-invert.png differ
index 6ebb399..a4dad7f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl.png differ
index 2be7397..de7e529 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/notBright-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/notBright-invert.png differ
index 37145c7..5273b4c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/notBright.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/notBright.png differ
index 8d1d3af..e18795b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/notice-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/notice-invert.png differ
index a57e2bf..114020e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/notice.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/notice.png differ
index 5db6cf8..b2dea7c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-invert.png differ
index 6292977..6fffe1a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-progressive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-progressive.png differ
index eff32eb..df49095 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr.png differ
index f471ce7..a3d6013 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-invert.png differ
index eea07b4..4c0bd30 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-progressive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-progressive.png differ
index 7b01a27..3d7e9bd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl.png differ
index c552e53..6bb2f99 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr-invert.png differ
index 4ac336c..c1cd66a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr.png differ
index 309681e..eb3d700 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl-invert.png differ
index 68577dd..a1d9454 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl.png differ
index 148a87e..eceedbd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr-invert.png differ
index a9a186b..bcbfa5c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr.png differ
index f30534f..96c4719 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl-invert.png differ
index b7f025d..d89e06e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl.png differ
index 8a86884..82fcfa3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr-invert.png differ
index c5050e0..a3b711b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr.png differ
index eb878da..c31dbea 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl-invert.png differ
index 1264e9f..2e45883 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl.png differ
index 786beb1..2517166 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr-invert.png differ
index 051ab1d..0084ac9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr.png differ
index bd37410..37a9e3d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl-invert.png differ
index 18e247d..6e5b175 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl.png differ
index 4ad9160..0dbe87e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr-invert.png differ
index 47dad2b..9b40609 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr.png differ
index faff0ae..dc5a97f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl-invert.png differ
index 51c40db..6f7334b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl.png differ
index 4ddc796..46ac181 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr-invert.png differ
index b458c39..0252b74 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.png differ
index c4e9c67..6637ca2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl-invert.png differ
index 6e8917f..7bcc7c7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.png differ
index b33bc95..40e3a06 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr-invert.png differ
index 39d68bd..e1a0c4b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr.png differ
index 88f3c9f..e15cc90 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl-invert.png differ
index 4290e87..0ef9d01 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl.png differ
index 2a78c4f..0206be9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression-invert.png differ
index ef8cfc3..f27e421 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.png differ
index 329da36..46a180d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize-invert.png differ
index 304a4fa..1010574 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize.png differ
index 6cb23d8..4b2913b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.png differ
index c897837..e8e99f8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.png differ
index 6f45003..0409aa4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.png differ
index 1275716..3ab96be 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.png differ
index 61ce959..a74063d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.png differ
index 2b89d37..8a44a92 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.png differ
index 17b4379..34c6afe 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings-invert.png differ
index dd2706b..1c8e587 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings.png differ
index c7776c0..4538011 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr-invert.png differ
index 30e88db..f68a7bf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr.png differ
index 5686bdb..a99fe52 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl-invert.png differ
index 665c4e2..9166e8d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl.png differ
index 29675cf..84b1bcd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr-invert.png differ
index 7181e6d..f5e89ba 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr.png differ
index 20c2845..c9cdd77 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl-invert.png differ
index cc539f0..e07c7b0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl.png differ
index bd09b83..dec125e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-ltr-invert.png differ
index 63551b4..b38dca3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-ltr.png differ
index 950622a..9aba246 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-rtl-invert.png differ
index a245556..b9864ef 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-rtl.png differ
index 6fb42f2..b7c9996 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter-invert.png differ
index 92f887d..9b02a41 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.png differ
index 15ae3ab..6409de2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr-invert.png differ
index 902d548..2eedf9f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr.png differ
index 02c0fa1..e85fd44 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl-invert.png differ
index 133ef1d..0d14443 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl.png differ
index 15ae3ab..6409de2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr-invert.png differ
index 53e3f2c..08c458b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr.png differ
index 02c0fa1..e85fd44 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl-invert.png differ
index ef78b5e..4c13c16 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl.png differ
index 405f8ed..24a8e4e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr-invert.png differ
index ed649b8..f2e0564 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr.png differ
index 6350811..4119746 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl-invert.png differ
index fa3bd32..9c67f3f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl.png differ
index b0bc3b1..39e7978 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-constructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-constructive.png differ
index ffe5556..4a6dae9 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #00af89 }</style>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #347bff }</style>
     <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
 </svg>
index 445f2d4..7c949a6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-progressive.png
new file mode 100644 (file)
index 0000000..39e7978
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-progressive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-progressive.svg
new file mode 100644 (file)
index 0000000..4a6dae9
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #347bff }</style>
+    <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
+</svg>
index 046bbf7..36b6a1f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/star.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star.png differ
index c2a07c6..4c74c3e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stop-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stop-invert.png differ
index b7e20ef..12a1912 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stop.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stop.png differ
index bf6e28f..ebabd3b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a-invert.png differ
index cab7a98..279d1f7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a.png differ
index 7760693..2a29a6e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s-invert.png differ
index 45f096f..21b9baa 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.png differ
index 63028d6..5ed9097 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y-invert.png differ
index 5b1c1fd..d769468 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y.png differ
index 35e6837..966d7d9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr-invert.png differ
index 093b1a9..5423b36 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr.png differ
index 2ae83c7..a89c992 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl-invert.png differ
index e8aea5e..0ff3d7c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl.png differ
index b944490..1969195 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu-invert.png differ
index a49eaef..93c22fb 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu.png differ
index 88d26c2..fdbdabe 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr-invert.png differ
index 2c1e230..21af785 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr.png differ
index 279d80a..9679530 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl-invert.png differ
index 5ce176c..82ca2bf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl.png differ
index 57ac8b7..629ea35 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-invert.png differ
index 5d9fca8..126e8bd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-progressive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-progressive.png differ
index 533a915..b482d3e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr.png differ
index 72d4906..f81e503 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-invert.png differ
index a51e389..03b6555 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-progressive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-progressive.png differ
index 282c652..516bc2c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl.png differ
index 1607d39..f7f291e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr-invert.png differ
index f8b8766..c2cf4cf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr.png differ
index 3970bb1..56ad252 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl-invert.png differ
index f01e11d..b1ee51b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl.png differ
index 9c2fe07..2bc944a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr-invert.png differ
index 459f4c9..0c00745 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr.png differ
index 3481d18..7ac54ff 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl-invert.png differ
index 8a0fc83..77c7806 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl.png differ
index 7099d7f..abb7229 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr-invert.png differ
index 69fe6e7..8df4609 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr.png differ
index 7d73f51..ee76ff4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl-invert.png differ
index eac3d1d..48bfd68 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl.png differ
index 81c258e..9d50a42 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption-invert.png differ
index 1389d3d..80b474d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption.png differ
index 13bb421..5884af3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr-invert.png differ
index dfd5e51..64c2148 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr.png differ
index 363241b..b379072 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl-invert.png differ
index 1354a88..650be0c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl.png differ
index eb82a50..e073790 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after-invert.png differ
index 3d8091e..67d488d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after.png differ
index f5ff540..6a5f1a0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before-invert.png differ
index e357f90..2477475 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before.png differ
index ee9885f..4c19203 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-invert.png differ
index 67c095d..b24537d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells-invert.png differ
index 202a120..e6b2da3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells.png differ
index 2eedd1e..f4008f6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table.png differ
index 415863e..41e2735 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.png differ
index 9feb601..1526306 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #00af89 }</style>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #347bff }</style>
     <path d="M18.748 11.717a1 1 0 0 1 0 1.414l-4.95 4.95a1 1 0 0 1-1.413 0l-6.01-6.01c-.39-.382-.707-1.15-.707-1.7V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457a1.477 1.477 0 0 0 0 2.092 1.49 1.49 0 0 0 2.094 0 1.49 1.49 0 0 0 0-2.1 1.484 1.484 0 0 0-2.094 0z" id="tag"/>
 </svg>
index d4697b3..45d2767 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-destructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-destructive.png differ
index de3190c..fd5956c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.png differ
index b37a917..41e2735 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-progressive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-progressive.png differ
index 93ebb5d..880616f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-warning.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-warning.png differ
index 46c07c9..82461ef 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.png differ
index 10cb834..cba38d2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr-invert.png differ
index f7a51c9..f3ce49e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr.png differ
index d47a083..eb8d08d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl-invert.png differ
index 3bb8174..448caf4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl.png differ
index fb7b900..44394d9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright-invert.png differ
index ffd190a..fede39a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright.png differ
index b935d7c..d5b78c2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft-invert.png differ
index 214f8d1..9f60ed5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft.png differ
index 4bea5a1..f173ad7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style-invert.png differ
index a2f48be..65ab476 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.png differ
index ca4a7b9..722eebe 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash-destructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash-destructive.png differ
index d730765..04eaa41 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash-invert.png differ
index dfee886..b3e899d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash.png differ
index bc977a7..af3f0e9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr-invert.png differ
index 594836e..3b5231f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr.png differ
index 162d9a9..1cb5449 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl-invert.png differ
index 182e56d..a1d2388 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl.png differ
index b4c1366..3b9a736 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-destructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-destructive.png differ
index 3a0bc75..68c1437 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-invert.png differ
index 8f261a8..e6d9aae 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr.png differ
index 03d91f2..7db9fea 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-destructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-destructive.png differ
index b823325..d50b4c7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-invert.png differ
index e683c52..0529c16 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl.png differ
index c30fe9d..7601951 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-constructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-constructive.png differ
index 5e98ccb..131743d 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #00af89 }</style>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #347bff }</style>
     <path d="M21 11l-6-1-3-6-3 6-6 1 4 4-1 6 6-3 6 3-1-6 4-4z"/>
 </svg>
index 03a5687..20ce036 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-progressive.png
new file mode 100644 (file)
index 0000000..7601951
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-progressive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-progressive.svg
new file mode 100644 (file)
index 0000000..131743d
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #347bff }</style>
+    <path d="M21 11l-6-1-3-6-3 6-6 1 4 4-1 6 6-3 6 3-1-6 4-4z"/>
+</svg>
index bdb1c4f..2329af3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar.png differ
index b12856d..8a6ca42 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a-invert.png differ
index f4add0a..78a3c3f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a.png differ
index c1f52df..9f0af6c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u-invert.png differ
index 2504e66..0dbeb80 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.png differ
index 720f335..9fcea7f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle-invert.png differ
index 1b65589..f1aca31 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle.png differ
index c7b7fd5..aa26066 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr-invert.png differ
index fa2da24..08e31e9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr.png differ
index 1fb0995..602ae42 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl-invert.png differ
index 1ac6106..ccabf98 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl.png differ
index b234763..98083be 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr-invert.png differ
index bc94f18..ce385f9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr.png differ
index 29d54e2..3dc0f44 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl-invert.png differ
index 6fb01ce..ee1afbc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl.png differ
index f1e7c79..1f4d3a4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar-invert.png differ
index 33e5fe9..8190095 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar.png differ
index 184deb7..db34f59 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr-invert.png differ
index b6f9b15..05170e1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr.png differ
index fad58d4..8fe830a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl-invert.png differ
index d71a08b..bf953f1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl.png differ
index 0d2d304..332bcba 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr-invert.png differ
index 952410a..18981fd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr.png differ
index 68d92b0..187f3e6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl-invert.png differ
index 1a0983d..7122efa 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl.png differ
index 8e0abb0..e716ba5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact-invert.png differ
index bc4bc26..13fe420 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact.png differ
index 35bbc8d..3cfba94 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr-invert.png differ
index 4ab5394..4341f0e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr.png differ
index c45dd11..9bac0da 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl-invert.png differ
index 46587ec..2905903 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl.png differ
index 118e468..e18ee17 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.png differ
index e1afbae..afa5652 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator.png differ
index 19b4561..7018968 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr-invert.png differ
index 4b94c1a..53e7011 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr.png differ
index 48bf383..28008b5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl-invert.png differ
index f9cc5ea..8fc4df5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl.png differ
index 5e53c45..bed3a11 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText-invert.png differ
index 850f157..40309aa 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText.png differ
index 917a577..075f84e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-invert.png differ
index db4b6a5..331fd59 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.png differ
index 7b02236..75c8dcf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-invert.png differ
index f2ce844..62f1fe9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.png differ
index 1c6ed1f..74c54ff 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/window-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/window-invert.png differ
index db726a1..bae13d7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/window.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/window.png differ
index 1f964b9..035b626 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.png differ
index ca60c43..9d25a24 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.png differ
index fcb50d6..582adce 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png differ
index 034fe2b..af67c7a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png differ
index 22bf897..05578be 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.png differ
index 4440329..d7a4111 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.png differ
index 4f3c9d1..9731658 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.png differ
index 5f1f868..afceed6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.png differ
index e6fad56..218a700 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.png differ
index 38d01c7..ee12d6e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.png differ
index d68353b..82f5bf1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear-invert.png differ
index 5db444c..a858a03 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear.png differ
index 614c6e8..d9ff42f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.png differ
index 45eb03b..aca9239 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.png differ
index 8504977..9529803 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.png differ
index 1146082..123fbfa 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.png differ
index ace4775..a727057 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.png differ
index c21cc61..db74061 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.png differ
index 1843f27..dbf69b9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/textures/transparency.png and b/resources/lib/oojs-ui/themes/mediawiki/images/textures/transparency.png differ
index f1dcd4e..8c78b67 100644 (file)
@@ -1,27 +1,27 @@
 /*!
- * QUnit 1.18.0
- * http://qunitjs.com/
+ * QUnit 1.22.0
+ * https://qunitjs.com/
  *
  * Copyright jQuery Foundation and other contributors
  * Released under the MIT license
- * http://jquery.org/license
+ * https://jquery.org/license
  *
- * Date: 2015-04-03T10:23Z
+ * Date: 2016-02-23T15:57Z
  */
 
 /** Font Family and Sizes */
 
-#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
+#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-filteredTest, #qunit-userAgent, #qunit-testresult {
        font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
 }
 
-#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
+#qunit-testrunner-toolbar, #qunit-filteredTest, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
 #qunit-tests { font-size: smaller; }
 
 
 /** Resets */
 
-#qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
+#qunit-tests, #qunit-header, #qunit-banner, #qunit-filteredTest, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
        margin: 0;
        padding: 0;
 }
        overflow: hidden;
 }
 
+#qunit-filteredTest {
+       padding: 0.5em 1em 0.5em 1em;
+       background-color: #F4FF77;
+       color: #366097;
+}
+
 #qunit-userAgent {
        padding: 0.5em 1em 0.5em 1em;
        background-color: #2B81AF;
        display: list-item;
 }
 
+#qunit-tests.hidepass {
+       position: relative;
+}
+
 #qunit-tests.hidepass li.running,
 #qunit-tests.hidepass li.pass {
        visibility: hidden;
        position: absolute;
-       width:   0px;
-       height:  0px;
+       width:   0;
+       height:  0;
        padding: 0;
        border:  0;
        margin:  0;
        border-radius: 5px;
 }
 
+.qunit-source {
+       margin: 0.6em 0 0.3em;
+}
+
 .qunit-collapsed {
        display: none;
 }
index f3542ca..84873ae 100644 (file)
 /*!
- * QUnit 1.18.0
- * http://qunitjs.com/
+ * QUnit 1.22.0
+ * https://qunitjs.com/
  *
  * Copyright jQuery Foundation and other contributors
  * Released under the MIT license
- * http://jquery.org/license
+ * https://jquery.org/license
  *
- * Date: 2015-04-03T10:23Z
+ * Date: 2016-02-23T15:57Z
  */
 
-(function( window ) {
+(function( global ) {
 
-var QUnit,
-       config,
-       onErrorFnPrev,
-       loggingCallbacks = {},
-       fileName = ( sourceFromStacktrace( 0 ) || "" ).replace( /(:\d+)+\)?/, "" ).replace( /.+\//, "" ),
-       toString = Object.prototype.toString,
-       hasOwn = Object.prototype.hasOwnProperty,
-       // Keep a local reference to Date (GH-283)
-       Date = window.Date,
-       now = Date.now || function() {
-               return new Date().getTime();
-       },
-       globalStartCalled = false,
-       runStarted = false,
-       setTimeout = window.setTimeout,
-       clearTimeout = window.clearTimeout,
-       defined = {
-               document: window.document !== undefined,
-               setTimeout: window.setTimeout !== undefined,
-               sessionStorage: (function() {
-                       var x = "qunit-test-string";
-                       try {
-                               sessionStorage.setItem( x, x );
-                               sessionStorage.removeItem( x );
-                               return true;
-                       } catch ( e ) {
-                               return false;
+var QUnit = {};
+
+var Date = global.Date;
+var now = Date.now || function() {
+       return new Date().getTime();
+};
+
+var setTimeout = global.setTimeout;
+var clearTimeout = global.clearTimeout;
+
+// Store a local window from the global to allow direct references.
+var window = global.window;
+
+var defined = {
+       document: window && window.document !== undefined,
+       setTimeout: setTimeout !== undefined,
+       sessionStorage: (function() {
+               var x = "qunit-test-string";
+               try {
+                       sessionStorage.setItem( x, x );
+                       sessionStorage.removeItem( x );
+                       return true;
+               } catch ( e ) {
+                       return false;
+               }
+       }() )
+};
+
+var fileName = ( sourceFromStacktrace( 0 ) || "" ).replace( /(:\d+)+\)?/, "" ).replace( /.+\//, "" );
+var globalStartCalled = false;
+var runStarted = false;
+
+var toString = Object.prototype.toString,
+       hasOwn = Object.prototype.hasOwnProperty;
+
+// returns a new Array with the elements that are in a but not in b
+function diff( a, b ) {
+       var i, j,
+               result = a.slice();
+
+       for ( i = 0; i < result.length; i++ ) {
+               for ( j = 0; j < b.length; j++ ) {
+                       if ( result[ i ] === b[ j ] ) {
+                               result.splice( i, 1 );
+                               i--;
+                               break;
                        }
-               }())
-       },
-       /**
-        * Provides a normalized error string, correcting an issue
-        * with IE 7 (and prior) where Error.prototype.toString is
-        * not properly implemented
-        *
-        * Based on http://es5.github.com/#x15.11.4.4
-        *
-        * @param {String|Error} error
-        * @return {String} error message
-        */
-       errorString = function( error ) {
-               var name, message,
-                       errorString = error.toString();
-               if ( errorString.substring( 0, 7 ) === "[object" ) {
-                       name = error.name ? error.name.toString() : "Error";
-                       message = error.message ? error.message.toString() : "";
-                       if ( name && message ) {
-                               return name + ": " + message;
-                       } else if ( name ) {
-                               return name;
-                       } else if ( message ) {
-                               return message;
+               }
+       }
+       return result;
+}
+
+// from jquery.js
+function inArray( elem, array ) {
+       if ( array.indexOf ) {
+               return array.indexOf( elem );
+       }
+
+       for ( var i = 0, length = array.length; i < length; i++ ) {
+               if ( array[ i ] === elem ) {
+                       return i;
+               }
+       }
+
+       return -1;
+}
+
+/**
+ * Makes a clone of an object using only Array or Object as base,
+ * and copies over the own enumerable properties.
+ *
+ * @param {Object} obj
+ * @return {Object} New object with only the own properties (recursively).
+ */
+function objectValues ( obj ) {
+       var key, val,
+               vals = QUnit.is( "array", obj ) ? [] : {};
+       for ( key in obj ) {
+               if ( hasOwn.call( obj, key ) ) {
+                       val = obj[ key ];
+                       vals[ key ] = val === Object( val ) ? objectValues( val ) : val;
+               }
+       }
+       return vals;
+}
+
+function extend( a, b, undefOnly ) {
+       for ( var prop in b ) {
+               if ( hasOwn.call( b, prop ) ) {
+
+                       // Avoid "Member not found" error in IE8 caused by messing with window.constructor
+                       // This block runs on every environment, so `global` is being used instead of `window`
+                       // to avoid errors on node.
+                       if ( prop !== "constructor" || a !== global ) {
+                               if ( b[ prop ] === undefined ) {
+                                       delete a[ prop ];
+                               } else if ( !( undefOnly && typeof a[ prop ] !== "undefined" ) ) {
+                                       a[ prop ] = b[ prop ];
+                               }
+                       }
+               }
+       }
+
+       return a;
+}
+
+function objectType( obj ) {
+       if ( typeof obj === "undefined" ) {
+               return "undefined";
+       }
+
+       // Consider: typeof null === object
+       if ( obj === null ) {
+               return "null";
+       }
+
+       var match = toString.call( obj ).match( /^\[object\s(.*)\]$/ ),
+               type = match && match[ 1 ];
+
+       switch ( type ) {
+               case "Number":
+                       if ( isNaN( obj ) ) {
+                               return "nan";
+                       }
+                       return "number";
+               case "String":
+               case "Boolean":
+               case "Array":
+               case "Set":
+               case "Map":
+               case "Date":
+               case "RegExp":
+               case "Function":
+               case "Symbol":
+                       return type.toLowerCase();
+       }
+       if ( typeof obj === "object" ) {
+               return "object";
+       }
+}
+
+// Safe object type checking
+function is( type, obj ) {
+       return QUnit.objectType( obj ) === type;
+}
+
+var getUrlParams = function() {
+       var i, param, name, value;
+       var urlParams = {};
+       var location = window.location;
+       var params = location.search.slice( 1 ).split( "&" );
+       var length = params.length;
+
+       for ( i = 0; i < length; i++ ) {
+               if ( params[ i ] ) {
+                       param = params[ i ].split( "=" );
+                       name = decodeURIComponent( param[ 0 ] );
+
+                       // allow just a key to turn on a flag, e.g., test.html?noglobals
+                       value = param.length === 1 ||
+                               decodeURIComponent( param.slice( 1 ).join( "=" ) ) ;
+                       if ( urlParams[ name ] ) {
+                               urlParams[ name ] = [].concat( urlParams[ name ], value );
                        } else {
-                               return "Error";
+                               urlParams[ name ] = value;
                        }
-               } else {
-                       return errorString;
                }
-       },
-       /**
-        * Makes a clone of an object using only Array or Object as base,
-        * and copies over the own enumerable properties.
-        *
-        * @param {Object} obj
-        * @return {Object} New object with only the own properties (recursively).
-        */
-       objectValues = function( obj ) {
-               var key, val,
-                       vals = QUnit.is( "array", obj ) ? [] : {};
-               for ( key in obj ) {
-                       if ( hasOwn.call( obj, key ) ) {
-                               val = obj[ key ];
-                               vals[ key ] = val === Object( val ) ? objectValues( val ) : val;
+       }
+
+       return urlParams;
+};
+
+// Doesn't support IE6 to IE9, it will return undefined on these browsers
+// See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack
+function extractStacktrace( e, offset ) {
+       offset = offset === undefined ? 4 : offset;
+
+       var stack, include, i;
+
+       if ( e.stack ) {
+               stack = e.stack.split( "\n" );
+               if ( /^error$/i.test( stack[ 0 ] ) ) {
+                       stack.shift();
+               }
+               if ( fileName ) {
+                       include = [];
+                       for ( i = offset; i < stack.length; i++ ) {
+                               if ( stack[ i ].indexOf( fileName ) !== -1 ) {
+                                       break;
+                               }
+                               include.push( stack[ i ] );
+                       }
+                       if ( include.length ) {
+                               return include.join( "\n" );
                        }
                }
-               return vals;
-       };
+               return stack[ offset ];
+
+       // Support: Safari <=6 only
+       } else if ( e.sourceURL ) {
+
+               // exclude useless self-reference for generated Error objects
+               if ( /qunit.js$/.test( e.sourceURL ) ) {
+                       return;
+               }
+
+               // for actual exceptions, this is useful
+               return e.sourceURL + ":" + e.line;
+       }
+}
+
+function sourceFromStacktrace( offset ) {
+       var error = new Error();
+
+       // Support: Safari <=7 only, IE <=10 - 11 only
+       // Not all browsers generate the `stack` property for `new Error()`, see also #636
+       if ( !error.stack ) {
+               try {
+                       throw error;
+               } catch ( err ) {
+                       error = err;
+               }
+       }
 
-QUnit = {};
+       return extractStacktrace( error, offset );
+}
 
 /**
  * Config object: Maintain internal state
  * Later exposed as QUnit.config
  * `config` initialized at top of scope
  */
-config = {
+var config = {
        // The queue of tests to run
        queue: [],
 
@@ -110,15 +257,19 @@ config = {
        // by default, modify document.title when suite is done
        altertitle: true,
 
+       // HTML Reporter: collapse every test except the first failing test
+       // If false, all failing tests will be expanded
+       collapse: true,
+
        // by default, scroll to top of the page when suite is done
        scrolltop: true,
 
-       // when enabled, all tests must call expect()
-       requireExpects: false,
-
        // depth up-to which object will be dumped
        maxDepth: 5,
 
+       // when enabled, all tests must call expect()
+       requireExpects: false,
+
        // add checkboxes that are persisted in the query-string
        // when enabled, the id is set to `true` as a `QUnit.config` property
        urlConfig: [
@@ -131,7 +282,7 @@ config = {
                        id: "noglobals",
                        label: "Check for Globals",
                        tooltip: "Enabling this will test if any test introduces new properties on the " +
-                               "`window` object. Stored as query-strings."
+                               "global object (`window` in Browsers). Stored as query-strings."
                },
                {
                        id: "notrycatch",
@@ -144,6 +295,9 @@ config = {
        // Set of all modules.
        modules: [],
 
+       // Stack of nested modules
+       moduleStack: [],
+
        // The first unnamed module
        currentModule: {
                name: "",
@@ -153,75 +307,162 @@ config = {
        callbacks: {}
 };
 
+var urlParams = defined.document ? getUrlParams() : {};
+
 // Push a loose unnamed module to the modules collection
 config.modules.push( config.currentModule );
 
-// Initialize more QUnit.config and QUnit.urlParams
-(function() {
-       var i, current,
-               location = window.location || { search: "", protocol: "file:" },
-               params = location.search.slice( 1 ).split( "&" ),
-               length = params.length,
-               urlParams = {};
+if ( urlParams.filter === true ) {
+       delete urlParams.filter;
+}
 
-       if ( params[ 0 ] ) {
-               for ( i = 0; i < length; i++ ) {
-                       current = params[ i ].split( "=" );
-                       current[ 0 ] = decodeURIComponent( current[ 0 ] );
+// String search anywhere in moduleName+testName
+config.filter = urlParams.filter;
 
-                       // allow just a key to turn on a flag, e.g., test.html?noglobals
-                       current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true;
-                       if ( urlParams[ current[ 0 ] ] ) {
-                               urlParams[ current[ 0 ] ] = [].concat( urlParams[ current[ 0 ] ], current[ 1 ] );
-                       } else {
-                               urlParams[ current[ 0 ] ] = current[ 1 ];
+config.testId = [];
+if ( urlParams.testId ) {
+       // Ensure that urlParams.testId is an array
+       urlParams.testId = decodeURIComponent( urlParams.testId ).split( "," );
+       for (var i = 0; i < urlParams.testId.length; i++ ) {
+               config.testId.push( urlParams.testId[ i ] );
+       }
+}
+
+var loggingCallbacks = {};
+
+// Register logging callbacks
+function registerLoggingCallbacks( obj ) {
+       var i, l, key,
+               callbackNames = [ "begin", "done", "log", "testStart", "testDone",
+                       "moduleStart", "moduleDone" ];
+
+       function registerLoggingCallback( key ) {
+               var loggingCallback = function( callback ) {
+                       if ( objectType( callback ) !== "function" ) {
+                               throw new Error(
+                                       "QUnit logging methods require a callback function as their first parameters."
+                               );
                        }
+
+                       config.callbacks[ key ].push( callback );
+               };
+
+               // DEPRECATED: This will be removed on QUnit 2.0.0+
+               // Stores the registered functions allowing restoring
+               // at verifyLoggingCallbacks() if modified
+               loggingCallbacks[ key ] = loggingCallback;
+
+               return loggingCallback;
+       }
+
+       for ( i = 0, l = callbackNames.length; i < l; i++ ) {
+               key = callbackNames[ i ];
+
+               // Initialize key collection of logging callback
+               if ( objectType( config.callbacks[ key ] ) === "undefined" ) {
+                       config.callbacks[ key ] = [];
                }
+
+               obj[ key ] = registerLoggingCallback( key );
        }
+}
+
+function runLoggingCallbacks( key, args ) {
+       var i, l, callbacks;
 
-       if ( urlParams.filter === true ) {
-               delete urlParams.filter;
+       callbacks = config.callbacks[ key ];
+       for ( i = 0, l = callbacks.length; i < l; i++ ) {
+               callbacks[ i ]( args );
        }
+}
+
+// DEPRECATED: This will be removed on 2.0.0+
+// This function verifies if the loggingCallbacks were modified by the user
+// If so, it will restore it, assign the given callback and print a console warning
+function verifyLoggingCallbacks() {
+       var loggingCallback, userCallback;
 
-       QUnit.urlParams = urlParams;
+       for ( loggingCallback in loggingCallbacks ) {
+               if ( QUnit[ loggingCallback ] !== loggingCallbacks[ loggingCallback ] ) {
 
-       // String search anywhere in moduleName+testName
-       config.filter = urlParams.filter;
+                       userCallback = QUnit[ loggingCallback ];
 
-       if ( urlParams.maxDepth ) {
-               config.maxDepth = parseInt( urlParams.maxDepth, 10 ) === -1 ?
-                       Number.POSITIVE_INFINITY :
-                       urlParams.maxDepth;
-       }
+                       // Restore the callback function
+                       QUnit[ loggingCallback ] = loggingCallbacks[ loggingCallback ];
 
-       config.testId = [];
-       if ( urlParams.testId ) {
+                       // Assign the deprecated given callback
+                       QUnit[ loggingCallback ]( userCallback );
 
-               // Ensure that urlParams.testId is an array
-               urlParams.testId = decodeURIComponent( urlParams.testId ).split( "," );
-               for ( i = 0; i < urlParams.testId.length; i++ ) {
-                       config.testId.push( urlParams.testId[ i ] );
+                       if ( global.console && global.console.warn ) {
+                               global.console.warn(
+                                       "QUnit." + loggingCallback + " was replaced with a new value.\n" +
+                                       "Please, check out the documentation on how to apply logging callbacks.\n" +
+                                       "Reference: https://api.qunitjs.com/category/callbacks/"
+                               );
+                       }
                }
        }
+}
 
-       // Figure out if we're running the tests from a server or not
-       QUnit.isLocal = location.protocol === "file:";
+( function() {
+       if ( !defined.document ) {
+               return;
+       }
 
-       // Expose the current QUnit version
-       QUnit.version = "1.18.0";
-}());
+       // `onErrorFnPrev` initialized at top of scope
+       // Preserve other handlers
+       var onErrorFnPrev = window.onerror;
+
+       // Cover uncaught exceptions
+       // Returning true will suppress the default browser handler,
+       // returning false will let it run.
+       window.onerror = function( error, filePath, linerNr ) {
+               var ret = false;
+               if ( onErrorFnPrev ) {
+                       ret = onErrorFnPrev( error, filePath, linerNr );
+               }
+
+               // Treat return value as window.onerror itself does,
+               // Only do our handling if not suppressed.
+               if ( ret !== true ) {
+                       if ( QUnit.config.current ) {
+                               if ( QUnit.config.current.ignoreGlobalErrors ) {
+                                       return true;
+                               }
+                               QUnit.pushFailure( error, filePath + ":" + linerNr );
+                       } else {
+                               QUnit.test( "global failure", extend(function() {
+                                       QUnit.pushFailure( error, filePath + ":" + linerNr );
+                               }, { validTest: true } ) );
+                       }
+                       return false;
+               }
+
+               return ret;
+       };
+} )();
+
+QUnit.urlParams = urlParams;
+
+// Figure out if we're running the tests from a server or not
+QUnit.isLocal = !( defined.document && window.location.protocol !== "file:" );
+
+// Expose the current QUnit version
+QUnit.version = "1.22.0";
 
-// Root QUnit object.
-// `QUnit` initialized at top of scope
 extend( QUnit, {
 
        // call on start of module test to prepend name to all tests
-       module: function( name, testEnvironment ) {
-               var currentModule = {
-                       name: name,
-                       testEnvironment: testEnvironment,
-                       tests: []
-               };
+       module: function( name, testEnvironment, executeNow ) {
+               var module, moduleFns;
+               var currentModule = config.currentModule;
+
+               if ( arguments.length === 2 ) {
+                       if ( testEnvironment instanceof Function ) {
+                               executeNow = testEnvironment;
+                               testEnvironment = undefined;
+                       }
+               }
 
                // DEPRECATED: handles setup/teardown functions,
                // beforeEach and afterEach should be used instead
@@ -234,46 +475,61 @@ extend( QUnit, {
                        delete testEnvironment.teardown;
                }
 
-               config.modules.push( currentModule );
-               config.currentModule = currentModule;
-       },
+               module = createModule();
 
-       // DEPRECATED: QUnit.asyncTest() will be removed in QUnit 2.0.
-       asyncTest: function( testName, expected, callback ) {
-               if ( arguments.length === 2 ) {
-                       callback = expected;
-                       expected = null;
-               }
+               moduleFns = {
+                       beforeEach: setHook( module, "beforeEach" ),
+                       afterEach: setHook( module, "afterEach" )
+               };
 
-               QUnit.test( testName, expected, callback, true );
-       },
+               if ( executeNow instanceof Function ) {
+                       config.moduleStack.push( module );
+                       setCurrentModule( module );
+                       executeNow.call( module.testEnvironment, moduleFns );
+                       config.moduleStack.pop();
+                       module = module.parentModule || currentModule;
+               }
+
+               setCurrentModule( module );
+
+               function createModule() {
+                       var parentModule = config.moduleStack.length ?
+                               config.moduleStack.slice( -1 )[ 0 ] : null;
+                       var moduleName = parentModule !== null ?
+                               [ parentModule.name, name ].join( " > " ) : name;
+                       var module = {
+                               name: moduleName,
+                               parentModule: parentModule,
+                               tests: []
+                       };
 
-       test: function( testName, expected, callback, async ) {
-               var test;
+                       var env = {};
+                       if ( parentModule ) {
+                               extend( env, parentModule.testEnvironment );
+                               delete env.beforeEach;
+                               delete env.afterEach;
+                       }
+                       extend( env, testEnvironment );
+                       module.testEnvironment = env;
 
-               if ( arguments.length === 2 ) {
-                       callback = expected;
-                       expected = null;
+                       config.modules.push( module );
+                       return module;
                }
 
-               test = new Test({
-                       testName: testName,
-                       expected: expected,
-                       async: async,
-                       callback: callback
-               });
+               function setCurrentModule( module ) {
+                       config.currentModule = module;
+               }
 
-               test.queue();
        },
 
-       skip: function( testName ) {
-               var test = new Test({
-                       testName: testName,
-                       skip: true
-               });
+       // DEPRECATED: QUnit.asyncTest() will be removed in QUnit 2.0.
+       asyncTest: asyncTest,
 
-               test.queue();
-       },
+       test: test,
+
+       skip: skip,
+
+       only: only,
 
        // DEPRECATED: The functionality of QUnit.start() will be altered in QUnit 2.0.
        // In QUnit 2.0, invoking it will ONLY affect the `QUnit.config.autostart` blocking behavior.
@@ -301,6 +557,17 @@ extend( QUnit, {
                        // If a test is running, adjust its semaphore
                        config.current.semaphore -= count || 1;
 
+                       // If semaphore is non-numeric, throw error
+                       if ( isNaN( config.current.semaphore ) ) {
+                               config.current.semaphore = 0;
+
+                               QUnit.pushFailure(
+                                       "Called start() with a non-numeric decrement.",
+                                       sourceFromStacktrace( 2 )
+                               );
+                               return;
+                       }
+
                        // Don't start until equal number of stop-calls
                        if ( config.current.semaphore > 0 ) {
                                return;
@@ -337,43 +604,9 @@ extend( QUnit, {
 
        config: config,
 
-       // Safe object type checking
-       is: function( type, obj ) {
-               return QUnit.objectType( obj ) === type;
-       },
-
-       objectType: function( obj ) {
-               if ( typeof obj === "undefined" ) {
-                       return "undefined";
-               }
-
-               // Consider: typeof null === object
-               if ( obj === null ) {
-                       return "null";
-               }
-
-               var match = toString.call( obj ).match( /^\[object\s(.*)\]$/ ),
-                       type = match && match[ 1 ] || "";
+       is: is,
 
-               switch ( type ) {
-                       case "Number":
-                               if ( isNaN( obj ) ) {
-                                       return "nan";
-                               }
-                               return "number";
-                       case "String":
-                       case "Boolean":
-                       case "Array":
-                       case "Date":
-                       case "RegExp":
-                       case "Function":
-                               return type.toLowerCase();
-               }
-               if ( typeof obj === "object" ) {
-                       return "object";
-               }
-               return undefined;
-       },
+       objectType: objectType,
 
        extend: extend,
 
@@ -395,174 +628,50 @@ extend( QUnit, {
                if ( config.autostart ) {
                        resumeProcessing();
                }
+       },
+
+       stack: function( offset ) {
+               offset = ( offset || 0 ) + 2;
+               return sourceFromStacktrace( offset );
        }
 });
 
-// Register logging callbacks
-(function() {
-       var i, l, key,
-               callbacks = [ "begin", "done", "log", "testStart", "testDone",
-                       "moduleStart", "moduleDone" ];
-
-       function registerLoggingCallback( key ) {
-               var loggingCallback = function( callback ) {
-                       if ( QUnit.objectType( callback ) !== "function" ) {
-                               throw new Error(
-                                       "QUnit logging methods require a callback function as their first parameters."
-                               );
-                       }
+registerLoggingCallbacks( QUnit );
 
-                       config.callbacks[ key ].push( callback );
-               };
+function begin() {
+       var i, l,
+               modulesLog = [];
 
-               // DEPRECATED: This will be removed on QUnit 2.0.0+
-               // Stores the registered functions allowing restoring
-               // at verifyLoggingCallbacks() if modified
-               loggingCallbacks[ key ] = loggingCallback;
+       // If the test run hasn't officially begun yet
+       if ( !config.started ) {
 
-               return loggingCallback;
-       }
+               // Record the time of the test run's beginning
+               config.started = now();
 
-       for ( i = 0, l = callbacks.length; i < l; i++ ) {
-               key = callbacks[ i ];
+               verifyLoggingCallbacks();
 
-               // Initialize key collection of logging callback
-               if ( QUnit.objectType( config.callbacks[ key ] ) === "undefined" ) {
-                       config.callbacks[ key ] = [];
+               // Delete the loose unnamed module if unused.
+               if ( config.modules[ 0 ].name === "" && config.modules[ 0 ].tests.length === 0 ) {
+                       config.modules.shift();
                }
 
-               QUnit[ key ] = registerLoggingCallback( key );
-       }
-})();
-
-// `onErrorFnPrev` initialized at top of scope
-// Preserve other handlers
-onErrorFnPrev = window.onerror;
-
-// Cover uncaught exceptions
-// Returning true will suppress the default browser handler,
-// returning false will let it run.
-window.onerror = function( error, filePath, linerNr ) {
-       var ret = false;
-       if ( onErrorFnPrev ) {
-               ret = onErrorFnPrev( error, filePath, linerNr );
-       }
-
-       // Treat return value as window.onerror itself does,
-       // Only do our handling if not suppressed.
-       if ( ret !== true ) {
-               if ( QUnit.config.current ) {
-                       if ( QUnit.config.current.ignoreGlobalErrors ) {
-                               return true;
-                       }
-                       QUnit.pushFailure( error, filePath + ":" + linerNr );
-               } else {
-                       QUnit.test( "global failure", extend(function() {
-                               QUnit.pushFailure( error, filePath + ":" + linerNr );
-                       }, { validTest: true } ) );
+               // Avoid unnecessary information by not logging modules' test environments
+               for ( i = 0, l = config.modules.length; i < l; i++ ) {
+                       modulesLog.push({
+                               name: config.modules[ i ].name,
+                               tests: config.modules[ i ].tests
+                       });
                }
-               return false;
-       }
-
-       return ret;
-};
-
-function done() {
-       var runtime, passed;
-
-       config.autorun = true;
 
-       // Log the last module results
-       if ( config.previousModule ) {
-               runLoggingCallbacks( "moduleDone", {
-                       name: config.previousModule.name,
-                       tests: config.previousModule.tests,
-                       failed: config.moduleStats.bad,
-                       passed: config.moduleStats.all - config.moduleStats.bad,
-                       total: config.moduleStats.all,
-                       runtime: now() - config.moduleStats.started
+               // The test run is officially beginning now
+               runLoggingCallbacks( "begin", {
+                       totalTests: Test.count,
+                       modules: modulesLog
                });
        }
-       delete config.previousModule;
-
-       runtime = now() - config.started;
-       passed = config.stats.all - config.stats.bad;
-
-       runLoggingCallbacks( "done", {
-               failed: config.stats.bad,
-               passed: passed,
-               total: config.stats.all,
-               runtime: runtime
-       });
-}
-
-// Doesn't support IE6 to IE9, it will return undefined on these browsers
-// See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack
-function extractStacktrace( e, offset ) {
-       offset = offset === undefined ? 4 : offset;
-
-       var stack, include, i;
-
-       if ( e.stack ) {
-               stack = e.stack.split( "\n" );
-               if ( /^error$/i.test( stack[ 0 ] ) ) {
-                       stack.shift();
-               }
-               if ( fileName ) {
-                       include = [];
-                       for ( i = offset; i < stack.length; i++ ) {
-                               if ( stack[ i ].indexOf( fileName ) !== -1 ) {
-                                       break;
-                               }
-                               include.push( stack[ i ] );
-                       }
-                       if ( include.length ) {
-                               return include.join( "\n" );
-                       }
-               }
-               return stack[ offset ];
-
-       // Support: Safari <=6 only
-       } else if ( e.sourceURL ) {
-
-               // exclude useless self-reference for generated Error objects
-               if ( /qunit.js$/.test( e.sourceURL ) ) {
-                       return;
-               }
-
-               // for actual exceptions, this is useful
-               return e.sourceURL + ":" + e.line;
-       }
-}
-
-function sourceFromStacktrace( offset ) {
-       var error = new Error();
-
-       // Support: Safari <=7 only, IE <=10 - 11 only
-       // Not all browsers generate the `stack` property for `new Error()`, see also #636
-       if ( !error.stack ) {
-               try {
-                       throw error;
-               } catch ( err ) {
-                       error = err;
-               }
-       }
-
-       return extractStacktrace( error, offset );
-}
-
-function synchronize( callback, last ) {
-       if ( QUnit.objectType( callback ) === "array" ) {
-               while ( callback.length ) {
-                       synchronize( callback.shift() );
-               }
-               return;
-       }
-       config.queue.push( callback );
 
-       if ( config.autorun && !config.blocking ) {
-               process( last );
-       }
+       config.blocking = false;
+       process( true );
 }
 
 function process( last ) {
@@ -592,40 +701,21 @@ function process( last ) {
        }
 }
 
-function begin() {
-       var i, l,
-               modulesLog = [];
-
-       // If the test run hasn't officially begun yet
-       if ( !config.started ) {
-
-               // Record the time of the test run's beginning
-               config.started = now();
-
-               verifyLoggingCallbacks();
-
-               // Delete the loose unnamed module if unused.
-               if ( config.modules[ 0 ].name === "" && config.modules[ 0 ].tests.length === 0 ) {
-                       config.modules.shift();
-               }
-
-               // Avoid unnecessary information by not logging modules' test environments
-               for ( i = 0, l = config.modules.length; i < l; i++ ) {
-                       modulesLog.push({
-                               name: config.modules[ i ].name,
-                               tests: config.modules[ i ].tests
-                       });
-               }
+function pauseProcessing() {
+       config.blocking = true;
 
-               // The test run is officially beginning now
-               runLoggingCallbacks( "begin", {
-                       totalTests: Test.count,
-                       modules: modulesLog
-               });
+       if ( config.testTimeout && defined.setTimeout ) {
+               clearTimeout( config.timeout );
+               config.timeout = setTimeout(function() {
+                       if ( config.current ) {
+                               config.current.semaphore = 0;
+                               QUnit.pushFailure( "Test timed out", sourceFromStacktrace( 2 ) );
+                       } else {
+                               throw new Error( "Test timed out" );
+                       }
+                       resumeProcessing();
+               }, config.testTimeout );
        }
-
-       config.blocking = false;
-       process( true );
 }
 
 function resumeProcessing() {
@@ -648,143 +738,47 @@ function resumeProcessing() {
        }
 }
 
-function pauseProcessing() {
-       config.blocking = true;
-
-       if ( config.testTimeout && defined.setTimeout ) {
-               clearTimeout( config.timeout );
-               config.timeout = setTimeout(function() {
-                       if ( config.current ) {
-                               config.current.semaphore = 0;
-                               QUnit.pushFailure( "Test timed out", sourceFromStacktrace( 2 ) );
-                       } else {
-                               throw new Error( "Test timed out" );
-                       }
-                       resumeProcessing();
-               }, config.testTimeout );
-       }
-}
+function done() {
+       var runtime, passed;
 
-function saveGlobal() {
-       config.pollution = [];
+       config.autorun = true;
 
-       if ( config.noglobals ) {
-               for ( var key in window ) {
-                       if ( hasOwn.call( window, key ) ) {
-                               // in Opera sometimes DOM element ids show up here, ignore them
-                               if ( /^qunit-test-output/.test( key ) ) {
-                                       continue;
-                               }
-                               config.pollution.push( key );
-                       }
-               }
-       }
-}
-
-function checkPollution() {
-       var newGlobals,
-               deletedGlobals,
-               old = config.pollution;
-
-       saveGlobal();
-
-       newGlobals = diff( config.pollution, old );
-       if ( newGlobals.length > 0 ) {
-               QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join( ", " ) );
-       }
-
-       deletedGlobals = diff( old, config.pollution );
-       if ( deletedGlobals.length > 0 ) {
-               QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join( ", " ) );
-       }
-}
-
-// returns a new Array with the elements that are in a but not in b
-function diff( a, b ) {
-       var i, j,
-               result = a.slice();
-
-       for ( i = 0; i < result.length; i++ ) {
-               for ( j = 0; j < b.length; j++ ) {
-                       if ( result[ i ] === b[ j ] ) {
-                               result.splice( i, 1 );
-                               i--;
-                               break;
-                       }
-               }
+       // Log the last module results
+       if ( config.previousModule ) {
+               runLoggingCallbacks( "moduleDone", {
+                       name: config.previousModule.name,
+                       tests: config.previousModule.tests,
+                       failed: config.moduleStats.bad,
+                       passed: config.moduleStats.all - config.moduleStats.bad,
+                       total: config.moduleStats.all,
+                       runtime: now() - config.moduleStats.started
+               });
        }
-       return result;
-}
-
-function extend( a, b, undefOnly ) {
-       for ( var prop in b ) {
-               if ( hasOwn.call( b, prop ) ) {
+       delete config.previousModule;
 
-                       // Avoid "Member not found" error in IE8 caused by messing with window.constructor
-                       if ( !( prop === "constructor" && a === window ) ) {
-                               if ( b[ prop ] === undefined ) {
-                                       delete a[ prop ];
-                               } else if ( !( undefOnly && typeof a[ prop ] !== "undefined" ) ) {
-                                       a[ prop ] = b[ prop ];
-                               }
-                       }
-               }
-       }
+       runtime = now() - config.started;
+       passed = config.stats.all - config.stats.bad;
 
-       return a;
+       runLoggingCallbacks( "done", {
+               failed: config.stats.bad,
+               passed: passed,
+               total: config.stats.all,
+               runtime: runtime
+       });
 }
 
-function runLoggingCallbacks( key, args ) {
-       var i, l, callbacks;
-
-       callbacks = config.callbacks[ key ];
-       for ( i = 0, l = callbacks.length; i < l; i++ ) {
-               callbacks[ i ]( args );
+function setHook( module, hookName ) {
+       if ( module.testEnvironment === undefined ) {
+               module.testEnvironment = {};
        }
-}
-
-// DEPRECATED: This will be removed on 2.0.0+
-// This function verifies if the loggingCallbacks were modified by the user
-// If so, it will restore it, assign the given callback and print a console warning
-function verifyLoggingCallbacks() {
-       var loggingCallback, userCallback;
-
-       for ( loggingCallback in loggingCallbacks ) {
-               if ( QUnit[ loggingCallback ] !== loggingCallbacks[ loggingCallback ] ) {
-
-                       userCallback = QUnit[ loggingCallback ];
-
-                       // Restore the callback function
-                       QUnit[ loggingCallback ] = loggingCallbacks[ loggingCallback ];
 
-                       // Assign the deprecated given callback
-                       QUnit[ loggingCallback ]( userCallback );
-
-                       if ( window.console && window.console.warn ) {
-                               window.console.warn(
-                                       "QUnit." + loggingCallback + " was replaced with a new value.\n" +
-                                       "Please, check out the documentation on how to apply logging callbacks.\n" +
-                                       "Reference: http://api.qunitjs.com/category/callbacks/"
-                               );
-                       }
-               }
-       }
+       return function( callback ) {
+               module.testEnvironment[ hookName ] = callback;
+       };
 }
 
-// from jquery.js
-function inArray( elem, array ) {
-       if ( array.indexOf ) {
-               return array.indexOf( elem );
-       }
-
-       for ( var i = 0, length = array.length; i < length; i++ ) {
-               if ( array[ i ] === elem ) {
-                       return i;
-               }
-       }
-
-       return -1;
-}
+var focused = false;
+var priorityCount = 0;
 
 function Test( settings ) {
        var i, l;
@@ -858,9 +852,11 @@ Test.prototype = {
 
                config.current = this;
 
+               if ( this.module.testEnvironment ) {
+                       delete this.module.testEnvironment.beforeEach;
+                       delete this.module.testEnvironment.afterEach;
+               }
                this.testEnvironment = extend( {}, this.module.testEnvironment );
-               delete this.testEnvironment.beforeEach;
-               delete this.testEnvironment.afterEach;
 
                this.started = now();
                runLoggingCallbacks( "testStart", {
@@ -886,14 +882,12 @@ Test.prototype = {
                this.callbackStarted = now();
 
                if ( config.notrycatch ) {
-                       promise = this.callback.call( this.testEnvironment, this.assert );
-                       this.resolvePromise( promise );
+                       runTest( this );
                        return;
                }
 
                try {
-                       promise = this.callback.call( this.testEnvironment, this.assert );
-                       this.resolvePromise( promise );
+                       runTest( this );
                } catch ( e ) {
                        this.pushFailure( "Died on test #" + ( this.assertions.length + 1 ) + " " +
                                this.stack + ": " + ( e.message || e ), extractStacktrace( e, 0 ) );
@@ -906,6 +900,11 @@ Test.prototype = {
                                QUnit.start();
                        }
                }
+
+               function runTest( test ) {
+                       promise = test.callback.call( test.testEnvironment, test.assert );
+                       test.resolvePromise( promise );
+               }
        },
 
        after: function() {
@@ -918,16 +917,19 @@ Test.prototype = {
                return function runHook() {
                        config.current = test;
                        if ( config.notrycatch ) {
-                               promise = hook.call( test.testEnvironment, test.assert );
-                               test.resolvePromise( promise, hookName );
+                               callHook();
                                return;
                        }
                        try {
-                               promise = hook.call( test.testEnvironment, test.assert );
-                               test.resolvePromise( promise, hookName );
+                               callHook();
                        } catch ( error ) {
                                test.pushFailure( hookName + " failed on " + test.testName + ": " +
-                                       ( error.message || error ), extractStacktrace( error, 0 ) );
+                               ( error.message || error ), extractStacktrace( error, 0 ) );
+                       }
+
+                       function callHook() {
+                               promise = hook.call( test.testEnvironment, test.assert );
+                               test.resolvePromise( promise, hookName );
                        }
                };
        },
@@ -936,16 +938,20 @@ Test.prototype = {
        hooks: function( handler ) {
                var hooks = [];
 
-               // Hooks are ignored on skipped tests
-               if ( this.skip ) {
-                       return hooks;
+               function processHooks( test, module ) {
+                       if ( module.parentModule ) {
+                               processHooks( test, module.parentModule );
+                       }
+                       if ( module.testEnvironment &&
+                               QUnit.objectType( module.testEnvironment[ handler ] ) === "function" ) {
+                               hooks.push( test.queueHook( module.testEnvironment[ handler ], handler ) );
+                       }
                }
 
-               if ( this.module.testEnvironment &&
-                               QUnit.objectType( this.module.testEnvironment[ handler ] ) === "function" ) {
-                       hooks.push( this.queueHook( this.module.testEnvironment[ handler ], handler ) );
+               // Hooks are ignored on skipped tests
+               if ( !this.skip ) {
+                       processHooks( this, this.module );
                }
-
                return hooks;
        },
 
@@ -990,6 +996,9 @@ Test.prototype = {
                        assertions: this.assertions,
                        testId: this.testId,
 
+                       // Source of Test
+                       source: this.stack,
+
                        // DEPRECATED: this property will be removed in 2.0.0, use runtime instead
                        duration: this.runtime
                });
@@ -1003,7 +1012,7 @@ Test.prototype = {
        },
 
        queue: function() {
-               var bad,
+               var priority,
                        test = this;
 
                if ( !this.valid() ) {
@@ -1019,7 +1028,6 @@ Test.prototype = {
                                },
 
                                test.hooks( "beforeEach" ),
-
                                function() {
                                        test.run();
                                },
@@ -1035,32 +1043,30 @@ Test.prototype = {
                        ]);
                }
 
-               // `bad` initialized at top of scope
-               // defer when previous test run passed, if storage is available
-               bad = QUnit.config.reorder && defined.sessionStorage &&
+               // Prioritize previously failed tests, detected from sessionStorage
+               priority = QUnit.config.reorder && defined.sessionStorage &&
                                +sessionStorage.getItem( "qunit-test-" + this.module.name + "-" + this.testName );
 
-               if ( bad ) {
-                       run();
-               } else {
-                       synchronize( run, true );
-               }
+               return synchronize( run, priority );
        },
 
-       push: function( result, actual, expected, message ) {
+       pushResult: function( resultInfo ) {
+
+               // resultInfo = { result, actual, expected, message, negative }
                var source,
                        details = {
                                module: this.module.name,
                                name: this.testName,
-                               result: result,
-                               message: message,
-                               actual: actual,
-                               expected: expected,
+                               result: resultInfo.result,
+                               message: resultInfo.message,
+                               actual: resultInfo.actual,
+                               expected: resultInfo.expected,
                                testId: this.testId,
+                               negative: resultInfo.negative || false,
                                runtime: now() - this.started
                        };
 
-               if ( !result ) {
+               if ( !resultInfo.result ) {
                        source = sourceFromStacktrace();
 
                        if ( source ) {
@@ -1071,13 +1077,13 @@ Test.prototype = {
                runLoggingCallbacks( "log", details );
 
                this.assertions.push({
-                       result: !!result,
-                       message: message
+                       result: !!resultInfo.result,
+                       message: resultInfo.message
                });
        },
 
        pushFailure: function( message, source, actual ) {
-               if ( !this instanceof Test ) {
+               if ( !( this instanceof Test ) ) {
                        throw new Error( "pushFailure() assertion outside test context, was " +
                                sourceFromStacktrace( 2 ) );
                }
@@ -1113,7 +1119,7 @@ Test.prototype = {
                                QUnit.stop();
                                then.call(
                                        promise,
-                                       QUnit.start,
+                                       function() { QUnit.start(); },
                                        function( error ) {
                                                message = "Promise rejected " +
                                                        ( !phase ? "during" : phase.replace( /Each$/, "" ) ) +
@@ -1132,10 +1138,21 @@ Test.prototype = {
        },
 
        valid: function() {
-               var include,
-                       filter = config.filter && config.filter.toLowerCase(),
+               var filter = config.filter,
+                       regexFilter = /^(!?)\/([\w\W]*)\/(i?$)/.exec( filter ),
                        module = QUnit.urlParams.module && QUnit.urlParams.module.toLowerCase(),
-                       fullName = ( this.module.name + ": " + this.testName ).toLowerCase();
+                       fullName = ( this.module.name + ": " + this.testName );
+
+               function testInModuleChain( testModule ) {
+                       var testModuleName = testModule.name ? testModule.name.toLowerCase() : null;
+                       if ( testModuleName === module ) {
+                               return true;
+                       } else if ( testModule.parentModule ) {
+                               return testInModuleChain( testModule.parentModule );
+                       } else {
+                               return false;
+                       }
+               }
 
                // Internally-generated tests are always valid
                if ( this.callback && this.callback.validTest ) {
@@ -1146,7 +1163,7 @@ Test.prototype = {
                        return false;
                }
 
-               if ( module && ( !this.module.name || this.module.name.toLowerCase() !== module ) ) {
+               if ( module && !testInModuleChain( this.module ) ) {
                        return false;
                }
 
@@ -1154,7 +1171,23 @@ Test.prototype = {
                        return true;
                }
 
-               include = filter.charAt( 0 ) !== "!";
+               return regexFilter ?
+                       this.regexFilter( !!regexFilter[1], regexFilter[2], regexFilter[3], fullName ) :
+                       this.stringFilter( filter, fullName );
+       },
+
+       regexFilter: function( exclude, pattern, flags, fullName ) {
+               var regex = new RegExp( pattern, flags );
+               var match = regex.test( fullName );
+
+               return match !== exclude;
+       },
+
+       stringFilter: function( filter, fullName ) {
+               filter = filter.toLowerCase();
+               fullName = fullName.toLowerCase();
+
+               var include = filter.charAt( 0 ) !== "!";
                if ( !include ) {
                        filter = filter.slice( 1 );
                }
@@ -1167,7 +1200,6 @@ Test.prototype = {
                // Otherwise, do the opposite
                return !include;
        }
-
 };
 
 // Resets the test setup. Useful for tests that modify the DOM.
@@ -1180,7 +1212,7 @@ QUnit.reset = function() {
 
        // Return on non-browser environments
        // This is necessary to not break on node tests
-       if ( typeof window === "undefined" ) {
+       if ( !defined.document ) {
                return;
        }
 
@@ -1228,6 +1260,129 @@ function generateHash( module, testName ) {
        return hex.slice( -8 );
 }
 
+function synchronize( callback, priority ) {
+       var last = !priority;
+
+       if ( QUnit.objectType( callback ) === "array" ) {
+               while ( callback.length ) {
+                       synchronize( callback.shift() );
+               }
+               return;
+       }
+
+       if ( priority ) {
+               config.queue.splice( priorityCount++, 0, callback );
+       } else {
+               config.queue.push( callback );
+       }
+
+       if ( config.autorun && !config.blocking ) {
+               process( last );
+       }
+}
+
+function saveGlobal() {
+       config.pollution = [];
+
+       if ( config.noglobals ) {
+               for ( var key in global ) {
+                       if ( hasOwn.call( global, key ) ) {
+
+                               // in Opera sometimes DOM element ids show up here, ignore them
+                               if ( /^qunit-test-output/.test( key ) ) {
+                                       continue;
+                               }
+                               config.pollution.push( key );
+                       }
+               }
+       }
+}
+
+function checkPollution() {
+       var newGlobals,
+               deletedGlobals,
+               old = config.pollution;
+
+       saveGlobal();
+
+       newGlobals = diff( config.pollution, old );
+       if ( newGlobals.length > 0 ) {
+               QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join( ", " ) );
+       }
+
+       deletedGlobals = diff( old, config.pollution );
+       if ( deletedGlobals.length > 0 ) {
+               QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join( ", " ) );
+       }
+}
+
+// Will be exposed as QUnit.asyncTest
+function asyncTest( testName, expected, callback ) {
+       if ( arguments.length === 2 ) {
+               callback = expected;
+               expected = null;
+       }
+
+       QUnit.test( testName, expected, callback, true );
+}
+
+// Will be exposed as QUnit.test
+function test( testName, expected, callback, async ) {
+       if ( focused )  { return; }
+
+       var newTest;
+
+       if ( arguments.length === 2 ) {
+               callback = expected;
+               expected = null;
+       }
+
+       newTest = new Test({
+               testName: testName,
+               expected: expected,
+               async: async,
+               callback: callback
+       });
+
+       newTest.queue();
+}
+
+// Will be exposed as QUnit.skip
+function skip( testName ) {
+       if ( focused )  { return; }
+
+       var test = new Test({
+               testName: testName,
+               skip: true
+       });
+
+       test.queue();
+}
+
+// Will be exposed as QUnit.only
+function only( testName, expected, callback, async ) {
+       var newTest;
+
+       if ( focused )  { return; }
+
+       QUnit.config.queue.length = 0;
+       focused = true;
+
+       if ( arguments.length === 2 ) {
+               callback = expected;
+               expected = null;
+       }
+
+       newTest = new Test({
+               testName: testName,
+               expected: expected,
+               async: async,
+               callback: callback
+       });
+
+       newTest.queue();
+}
+
 function Assert( testContext ) {
        this.test = testContext;
 }
@@ -1245,30 +1400,55 @@ QUnit.assert = Assert.prototype = {
                }
        },
 
-       // Increment this Test's semaphore counter, then return a single-use function that
+       // Increment this Test's semaphore counter, then return a function that
        // decrements that counter a maximum of once.
-       async: function() {
+       async: function( count ) {
                var test = this.test,
-                       popped = false;
+                       popped = false,
+                       acceptCallCount = count;
+
+               if ( typeof acceptCallCount === "undefined" ) {
+                       acceptCallCount = 1;
+               }
 
                test.semaphore += 1;
                test.usedAsync = true;
                pauseProcessing();
 
                return function done() {
-                       if ( !popped ) {
-                               test.semaphore -= 1;
-                               popped = true;
-                               resumeProcessing();
-                       } else {
-                               test.pushFailure( "Called the callback returned from `assert.async` more than once",
+
+                       if ( popped ) {
+                               test.pushFailure( "Too many calls to the `assert.async` callback",
                                        sourceFromStacktrace( 2 ) );
+                               return;
+                       }
+                       acceptCallCount -= 1;
+                       if ( acceptCallCount > 0 ) {
+                               return;
                        }
+
+                       test.semaphore -= 1;
+                       popped = true;
+                       resumeProcessing();
                };
        },
 
        // Exports test.push() to the user API
-       push: function( /* result, actual, expected, message */ ) {
+       // Alias of pushResult.
+       push: function( result, actual, expected, message, negative ) {
+               var currentAssert = this instanceof Assert ? this : QUnit.config.current.assert;
+               return currentAssert.pushResult( {
+                       result: result,
+                       actual: actual,
+                       expected: expected,
+                       message: message,
+                       negative: negative
+               } );
+       },
+
+       pushResult: function( resultInfo ) {
+
+               // resultInfo = { result, actual, expected, message, negative }
                var assert = this,
                        currentTest = ( assert instanceof Assert && assert.test ) || QUnit.config.current;
 
@@ -1291,57 +1471,112 @@ QUnit.assert = Assert.prototype = {
                if ( !( assert instanceof Assert ) ) {
                        assert = currentTest.assert;
                }
-               return assert.test.push.apply( assert.test, arguments );
+
+               return assert.test.pushResult( resultInfo );
        },
 
        ok: function( result, message ) {
                message = message || ( result ? "okay" : "failed, expected argument to be truthy, was: " +
                        QUnit.dump.parse( result ) );
-               this.push( !!result, result, true, message );
+               this.pushResult( {
+                       result: !!result,
+                       actual: result,
+                       expected: true,
+                       message: message
+               } );
        },
 
        notOk: function( result, message ) {
                message = message || ( !result ? "okay" : "failed, expected argument to be falsy, was: " +
                        QUnit.dump.parse( result ) );
-               this.push( !result, result, false, message );
+               this.pushResult( {
+                       result: !result,
+                       actual: result,
+                       expected: false,
+                       message: message
+               } );
        },
 
        equal: function( actual, expected, message ) {
                /*jshint eqeqeq:false */
-               this.push( expected == actual, actual, expected, message );
+               this.pushResult( {
+                       result: expected == actual,
+                       actual: actual,
+                       expected: expected,
+                       message: message
+               } );
        },
 
        notEqual: function( actual, expected, message ) {
                /*jshint eqeqeq:false */
-               this.push( expected != actual, actual, expected, message );
+               this.pushResult( {
+                       result: expected != actual,
+                       actual: actual,
+                       expected: expected,
+                       message: message,
+                       negative: true
+               } );
        },
 
        propEqual: function( actual, expected, message ) {
                actual = objectValues( actual );
                expected = objectValues( expected );
-               this.push( QUnit.equiv( actual, expected ), actual, expected, message );
+               this.pushResult( {
+                       result: QUnit.equiv( actual, expected ),
+                       actual: actual,
+                       expected: expected,
+                       message: message
+               } );
        },
 
        notPropEqual: function( actual, expected, message ) {
                actual = objectValues( actual );
                expected = objectValues( expected );
-               this.push( !QUnit.equiv( actual, expected ), actual, expected, message );
+               this.pushResult( {
+                       result: !QUnit.equiv( actual, expected ),
+                       actual: actual,
+                       expected: expected,
+                       message: message,
+                       negative: true
+               } );
        },
 
        deepEqual: function( actual, expected, message ) {
-               this.push( QUnit.equiv( actual, expected ), actual, expected, message );
+               this.pushResult( {
+                       result: QUnit.equiv( actual, expected ),
+                       actual: actual,
+                       expected: expected,
+                       message: message
+               } );
        },
 
        notDeepEqual: function( actual, expected, message ) {
-               this.push( !QUnit.equiv( actual, expected ), actual, expected, message );
+               this.pushResult( {
+                       result: !QUnit.equiv( actual, expected ),
+                       actual: actual,
+                       expected: expected,
+                       message: message,
+                       negative: true
+               } );
        },
 
        strictEqual: function( actual, expected, message ) {
-               this.push( expected === actual, actual, expected, message );
+               this.pushResult( {
+                       result: expected === actual,
+                       actual: actual,
+                       expected: expected,
+                       message: message
+               } );
        },
 
        notStrictEqual: function( actual, expected, message ) {
-               this.push( expected !== actual, actual, expected, message );
+               this.pushResult( {
+                       result: expected !== actual,
+                       actual: actual,
+                       expected: expected,
+                       message: message,
+                       negative: true
+               } );
        },
 
        "throws": function( block, expected, message ) {
@@ -1397,233 +1632,280 @@ QUnit.assert = Assert.prototype = {
                        }
                }
 
-               currentTest.assert.push( ok, actual, expectedOutput, message );
+               currentTest.assert.pushResult( {
+                       result: ok,
+                       actual: actual,
+                       expected: expectedOutput,
+                       message: message
+               } );
        }
 };
 
-// Provide an alternative to assert.throws(), for enviroments that consider throws a reserved word
+// Provide an alternative to assert.throws(), for environments that consider throws a reserved word
 // Known to us are: Closure Compiler, Narwhal
 (function() {
        /*jshint sub:true */
        Assert.prototype.raises = Assert.prototype[ "throws" ];
 }());
 
+function errorString( error ) {
+       var name, message,
+               resultErrorString = error.toString();
+       if ( resultErrorString.substring( 0, 7 ) === "[object" ) {
+               name = error.name ? error.name.toString() : "Error";
+               message = error.message ? error.message.toString() : "";
+               if ( name && message ) {
+                       return name + ": " + message;
+               } else if ( name ) {
+                       return name;
+               } else if ( message ) {
+                       return message;
+               } else {
+                       return "Error";
+               }
+       } else {
+               return resultErrorString;
+       }
+}
+
 // Test for equality any JavaScript type.
 // Author: Philippe Rathé <prathe@gmail.com>
 QUnit.equiv = (function() {
 
-       // Call the o related callback with the given arguments.
-       function bindCallbacks( o, callbacks, args ) {
-               var prop = QUnit.objectType( o );
-               if ( prop ) {
-                       if ( QUnit.objectType( callbacks[ prop ] ) === "function" ) {
-                               return callbacks[ prop ].apply( callbacks, args );
-                       } else {
-                               return callbacks[ prop ]; // or undefined
-                       }
-               }
-       }
+       // Stack to decide between skip/abort functions
+       var callers = [];
 
-       // the real equiv function
-       var innerEquiv,
+       // Stack to avoiding loops from circular referencing
+       var parents = [];
+       var parentsB = [];
 
-               // stack to decide between skip/abort functions
-               callers = [],
+       var getProto = Object.getPrototypeOf || function( obj ) {
 
-               // stack to avoiding loops from circular referencing
-               parents = [],
-               parentsB = [],
+               /*jshint proto: true */
+               return obj.__proto__;
+       };
 
-               getProto = Object.getPrototypeOf || function( obj ) {
-                       /* jshint camelcase: false, proto: true */
-                       return obj.__proto__;
-               },
-               callbacks = (function() {
+       function useStrictEquality( b, a ) {
 
-                       // for string, boolean, number and null
-                       function useStrictEquality( b, a ) {
+               // To catch short annotation VS 'new' annotation of a declaration. e.g.:
+               // `var i = 1;`
+               // `var j = new Number(1);`
+               if ( typeof a === "object" ) {
+                       a = a.valueOf();
+               }
+               if ( typeof b === "object" ) {
+                       b = b.valueOf();
+               }
 
-                               /*jshint eqeqeq:false */
-                               if ( b instanceof a.constructor || a instanceof b.constructor ) {
+               return a === b;
+       }
 
-                                       // to catch short annotation VS 'new' annotation of a
-                                       // declaration
-                                       // e.g. var i = 1;
-                                       // var j = new Number(1);
-                                       return a == b;
-                               } else {
-                                       return a === b;
-                               }
-                       }
+       function compareConstructors( a, b ) {
+               var protoA = getProto( a );
+               var protoB = getProto( b );
+
+               // Comparing constructors is more strict than using `instanceof`
+               if ( a.constructor === b.constructor ) {
+                       return true;
+               }
 
-                       return {
-                               "string": useStrictEquality,
-                               "boolean": useStrictEquality,
-                               "number": useStrictEquality,
-                               "null": useStrictEquality,
-                               "undefined": useStrictEquality,
+               // Ref #851
+               // If the obj prototype descends from a null constructor, treat it
+               // as a null prototype.
+               if ( protoA && protoA.constructor === null ) {
+                       protoA = null;
+               }
+               if ( protoB && protoB.constructor === null ) {
+                       protoB = null;
+               }
 
-                               "nan": function( b ) {
-                                       return isNaN( b );
-                               },
+               // Allow objects with no prototype to be equivalent to
+               // objects with Object as their constructor.
+               if ( ( protoA === null && protoB === Object.prototype ) ||
+                               ( protoB === null && protoA === Object.prototype ) ) {
+                       return true;
+               }
 
-                               "date": function( b, a ) {
-                                       return QUnit.objectType( b ) === "date" && a.valueOf() === b.valueOf();
-                               },
+               return false;
+       }
 
-                               "regexp": function( b, a ) {
-                                       return QUnit.objectType( b ) === "regexp" &&
+       function getRegExpFlags( regexp ) {
+               return "flags" in regexp ? regexp.flags : regexp.toString().match( /[gimuy]*$/ )[ 0 ];
+       }
 
-                                               // the regex itself
-                                               a.source === b.source &&
+       var callbacks = {
+               "string": useStrictEquality,
+               "boolean": useStrictEquality,
+               "number": useStrictEquality,
+               "null": useStrictEquality,
+               "undefined": useStrictEquality,
+               "symbol": useStrictEquality,
+               "date": useStrictEquality,
 
-                                               // and its modifiers
-                                               a.global === b.global &&
+               "nan": function() {
+                       return true;
+               },
 
-                                               // (gmi) ...
-                                               a.ignoreCase === b.ignoreCase &&
-                                               a.multiline === b.multiline &&
-                                               a.sticky === b.sticky;
-                               },
+               "regexp": function( b, a ) {
+                       return a.source === b.source &&
 
-                               // - skip when the property is a method of an instance (OOP)
-                               // - abort otherwise,
-                               // initial === would have catch identical references anyway
-                               "function": function() {
-                                       var caller = callers[ callers.length - 1 ];
-                                       return caller !== Object && typeof caller !== "undefined";
-                               },
+                               // Include flags in the comparison
+                               getRegExpFlags( a ) === getRegExpFlags( b );
+               },
 
-                               "array": function( b, a ) {
-                                       var i, j, len, loop, aCircular, bCircular;
+               // - skip when the property is a method of an instance (OOP)
+               // - abort otherwise,
+               // initial === would have catch identical references anyway
+               "function": function() {
+                       var caller = callers[ callers.length - 1 ];
+                       return caller !== Object && typeof caller !== "undefined";
+               },
 
-                                       // b could be an object literal here
-                                       if ( QUnit.objectType( b ) !== "array" ) {
-                                               return false;
-                                       }
+               "array": function( b, a ) {
+                       var i, j, len, loop, aCircular, bCircular;
 
-                                       len = a.length;
-                                       if ( len !== b.length ) {
-                                               // safe and faster
-                                               return false;
-                                       }
+                       len = a.length;
+                       if ( len !== b.length ) {
+                               // safe and faster
+                               return false;
+                       }
 
-                                       // track reference to avoid circular references
-                                       parents.push( a );
-                                       parentsB.push( b );
-                                       for ( i = 0; i < len; i++ ) {
-                                               loop = false;
-                                               for ( j = 0; j < parents.length; j++ ) {
-                                                       aCircular = parents[ j ] === a[ i ];
-                                                       bCircular = parentsB[ j ] === b[ i ];
-                                                       if ( aCircular || bCircular ) {
-                                                               if ( a[ i ] === b[ i ] || aCircular && bCircular ) {
-                                                                       loop = true;
-                                                               } else {
-                                                                       parents.pop();
-                                                                       parentsB.pop();
-                                                                       return false;
-                                                               }
-                                                       }
-                                               }
-                                               if ( !loop && !innerEquiv( a[ i ], b[ i ] ) ) {
+                       // Track reference to avoid circular references
+                       parents.push( a );
+                       parentsB.push( b );
+                       for ( i = 0; i < len; i++ ) {
+                               loop = false;
+                               for ( j = 0; j < parents.length; j++ ) {
+                                       aCircular = parents[ j ] === a[ i ];
+                                       bCircular = parentsB[ j ] === b[ i ];
+                                       if ( aCircular || bCircular ) {
+                                               if ( a[ i ] === b[ i ] || aCircular && bCircular ) {
+                                                       loop = true;
+                                               } else {
                                                        parents.pop();
                                                        parentsB.pop();
                                                        return false;
                                                }
                                        }
+                               }
+                               if ( !loop && !innerEquiv( a[ i ], b[ i ] ) ) {
                                        parents.pop();
                                        parentsB.pop();
-                                       return true;
-                               },
+                                       return false;
+                               }
+                       }
+                       parents.pop();
+                       parentsB.pop();
+                       return true;
+               },
 
-                               "object": function( b, a ) {
+               "set": function( b, a ) {
+                       var aArray, bArray;
 
-                                       /*jshint forin:false */
-                                       var i, j, loop, aCircular, bCircular,
-                                               // Default to true
-                                               eq = true,
-                                               aProperties = [],
-                                               bProperties = [];
+                       aArray = [];
+                       a.forEach( function( v ) {
+                               aArray.push( v );
+                       });
+                       bArray = [];
+                       b.forEach( function( v ) {
+                               bArray.push( v );
+                       });
 
-                                       // comparing constructors is more strict than using
-                                       // instanceof
-                                       if ( a.constructor !== b.constructor ) {
+                       return innerEquiv( bArray, aArray );
+               },
 
-                                               // Allow objects with no prototype to be equivalent to
-                                               // objects with Object as their constructor.
-                                               if ( !( ( getProto( a ) === null && getProto( b ) === Object.prototype ) ||
-                                                       ( getProto( b ) === null && getProto( a ) === Object.prototype ) ) ) {
-                                                       return false;
-                                               }
-                                       }
+               "map": function( b, a ) {
+                       var aArray, bArray;
 
-                                       // stack constructor before traversing properties
-                                       callers.push( a.constructor );
-
-                                       // track reference to avoid circular references
-                                       parents.push( a );
-                                       parentsB.push( b );
-
-                                       // be strict: don't ensure hasOwnProperty and go deep
-                                       for ( i in a ) {
-                                               loop = false;
-                                               for ( j = 0; j < parents.length; j++ ) {
-                                                       aCircular = parents[ j ] === a[ i ];
-                                                       bCircular = parentsB[ j ] === b[ i ];
-                                                       if ( aCircular || bCircular ) {
-                                                               if ( a[ i ] === b[ i ] || aCircular && bCircular ) {
-                                                                       loop = true;
-                                                               } else {
-                                                                       eq = false;
-                                                                       break;
-                                                               }
-                                                       }
-                                               }
-                                               aProperties.push( i );
-                                               if ( !loop && !innerEquiv( a[ i ], b[ i ] ) ) {
+                       aArray = [];
+                       a.forEach( function( v, k ) {
+                               aArray.push( [ k, v ] );
+                       });
+                       bArray = [];
+                       b.forEach( function( v, k ) {
+                               bArray.push( [ k, v ] );
+                       });
+
+                       return innerEquiv( bArray, aArray );
+               },
+
+               "object": function( b, a ) {
+                       var i, j, loop, aCircular, bCircular;
+
+                       // Default to true
+                       var eq = true;
+                       var aProperties = [];
+                       var bProperties = [];
+
+                       if ( compareConstructors( a, b ) === false ) {
+                               return false;
+                       }
+
+                       // Stack constructor before traversing properties
+                       callers.push( a.constructor );
+
+                       // Track reference to avoid circular references
+                       parents.push( a );
+                       parentsB.push( b );
+
+                       // Be strict: don't ensure hasOwnProperty and go deep
+                       for ( i in a ) {
+                               loop = false;
+                               for ( j = 0; j < parents.length; j++ ) {
+                                       aCircular = parents[ j ] === a[ i ];
+                                       bCircular = parentsB[ j ] === b[ i ];
+                                       if ( aCircular || bCircular ) {
+                                               if ( a[ i ] === b[ i ] || aCircular && bCircular ) {
+                                                       loop = true;
+                                               } else {
                                                        eq = false;
                                                        break;
                                                }
                                        }
+                               }
+                               aProperties.push( i );
+                               if ( !loop && !innerEquiv( a[ i ], b[ i ] ) ) {
+                                       eq = false;
+                                       break;
+                               }
+                       }
 
-                                       parents.pop();
-                                       parentsB.pop();
-                                       callers.pop(); // unstack, we are done
+                       parents.pop();
+                       parentsB.pop();
 
-                                       for ( i in b ) {
-                                               bProperties.push( i ); // collect b's properties
-                                       }
+                       // Unstack, we are done
+                       callers.pop();
 
-                                       // Ensures identical properties name
-                                       return eq && innerEquiv( aProperties.sort(), bProperties.sort() );
-                               }
-                       };
-               }());
+                       for ( i in b ) {
 
-       innerEquiv = function() { // can take multiple arguments
-               var args = [].slice.apply( arguments );
-               if ( args.length < 2 ) {
-                       return true; // end transition
+                               // Collect b's properties
+                               bProperties.push( i );
+                       }
+
+                       // Ensures identical properties name
+                       return eq && innerEquiv( aProperties.sort(), bProperties.sort() );
                }
+       };
 
-               return ( (function( a, b ) {
-                       if ( a === b ) {
-                               return true; // catch the most you can
-                       } else if ( a === null || b === null || typeof a === "undefined" ||
-                                       typeof b === "undefined" ||
-                                       QUnit.objectType( a ) !== QUnit.objectType( b ) ) {
+       function typeEquiv( a, b ) {
+               var type = QUnit.objectType( a );
+               return QUnit.objectType( b ) === type && callbacks[ type ]( b, a );
+       }
 
-                               // don't lose time with error prone cases
-                               return false;
-                       } else {
-                               return bindCallbacks( a, callbacks, [ b, a ] );
-                       }
+       // The real equiv function
+       function innerEquiv( a, b ) {
 
-                       // apply transition with (1..n) arguments
-               }( args[ 0 ], args[ 1 ] ) ) &&
-                       innerEquiv.apply( this, args.splice( 1, args.length - 1 ) ) );
-       };
+               // We're done when there's nothing more to compare
+               if ( arguments.length < 2 ) {
+                       return true;
+               }
+
+               // Require type-specific equality
+               return ( a === b || typeEquiv( a, b ) ) &&
+
+                       // ...across all consecutive argument pairs
+                       ( arguments.length === 2 || innerEquiv.apply( this, [].slice.call( arguments, 1 ) ) );
+       }
 
        return innerEquiv;
 }());
@@ -1632,7 +1914,7 @@ QUnit.equiv = (function() {
 // http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html
 QUnit.dump = (function() {
        function quote( str ) {
-               return "\"" + str.toString().replace( /"/g, "\\\"" ) + "\"";
+               return "\"" + str.toString().replace( /\\/g, "\\\\" ).replace( /"/g, "\\\"" ) + "\"";
        }
        function literal( o ) {
                return o + "";
@@ -1839,1225 +2121,1255 @@ QUnit.dump = (function() {
                                                        }
                                                }
                                        }
-                                       ret += close;
+                                       ret += close;
+
+                                       // Show content of TextNode or CDATASection
+                                       if ( node.nodeType === 3 || node.nodeType === 4 ) {
+                                               ret += node.nodeValue;
+                                       }
+
+                                       return ret + open + "/" + tag + close;
+                               },
+
+                               // function calls it internally, it's the arguments part of the function
+                               functionArgs: function( fn ) {
+                                       var args,
+                                               l = fn.length;
+
+                                       if ( !l ) {
+                                               return "";
+                                       }
+
+                                       args = new Array( l );
+                                       while ( l-- ) {
+
+                                               // 97 is 'a'
+                                               args[ l ] = String.fromCharCode( 97 + l );
+                                       }
+                                       return " " + args.join( ", " ) + " ";
+                               },
+                               // object calls it internally, the key part of an item in a map
+                               key: quote,
+                               // function calls it internally, it's the content of the function
+                               functionCode: "[code]",
+                               // node calls it internally, it's a html attribute value
+                               attribute: quote,
+                               string: quote,
+                               date: quote,
+                               regexp: literal,
+                               number: literal,
+                               "boolean": literal
+                       },
+                       // if true, entities are escaped ( <, >, \t, space and \n )
+                       HTML: false,
+                       // indentation unit
+                       indentChar: "  ",
+                       // if true, items in a collection, are separated by a \n, else just a space.
+                       multiline: true
+               };
+
+       return dump;
+}());
+
+// back compat
+QUnit.jsDump = QUnit.dump;
+
+// Deprecated
+// Extend assert methods to QUnit for Backwards compatibility
+(function() {
+       var i,
+               assertions = Assert.prototype;
+
+       function applyCurrent( current ) {
+               return function() {
+                       var assert = new Assert( QUnit.config.current );
+                       current.apply( assert, arguments );
+               };
+       }
+
+       for ( i in assertions ) {
+               QUnit[ i ] = applyCurrent( assertions[ i ] );
+       }
+})();
+
+// For browser, export only select globals
+if ( defined.document ) {
+
+       (function() {
+               var i, l,
+                       keys = [
+                               "test",
+                               "module",
+                               "expect",
+                               "asyncTest",
+                               "start",
+                               "stop",
+                               "ok",
+                               "notOk",
+                               "equal",
+                               "notEqual",
+                               "propEqual",
+                               "notPropEqual",
+                               "deepEqual",
+                               "notDeepEqual",
+                               "strictEqual",
+                               "notStrictEqual",
+                               "throws",
+                               "raises"
+                       ];
+
+               for ( i = 0, l = keys.length; i < l; i++ ) {
+                       window[ keys[ i ] ] = QUnit[ keys[ i ] ];
+               }
+       })();
+
+       window.QUnit = QUnit;
+}
+
+// For nodejs
+if ( typeof module !== "undefined" && module && module.exports ) {
+       module.exports = QUnit;
+
+       // For consistency with CommonJS environments' exports
+       module.exports.QUnit = QUnit;
+}
+
+// For CommonJS with exports, but without module.exports, like Rhino
+if ( typeof exports !== "undefined" && exports ) {
+       exports.QUnit = QUnit;
+}
+
+if ( typeof define === "function" && define.amd ) {
+       define( function() {
+               return QUnit;
+       } );
+       QUnit.config.autostart = false;
+}
+
+/*
+ * This file is a modified version of google-diff-match-patch's JavaScript implementation
+ * (https://code.google.com/p/google-diff-match-patch/source/browse/trunk/javascript/diff_match_patch_uncompressed.js),
+ * modifications are licensed as more fully set forth in LICENSE.txt.
+ *
+ * The original source of google-diff-match-patch is attributable and licensed as follows:
+ *
+ * Copyright 2006 Google Inc.
+ * https://code.google.com/p/google-diff-match-patch/
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * More Info:
+ *  https://code.google.com/p/google-diff-match-patch/
+ *
+ * Usage: QUnit.diff(expected, actual)
+ *
+ */
+QUnit.diff = ( function() {
+       function DiffMatchPatch() {
+       }
+
+       //  DIFF FUNCTIONS
+
+       /**
+        * The data structure representing a diff is an array of tuples:
+        * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]
+        * which means: delete 'Hello', add 'Goodbye' and keep ' world.'
+        */
+       var DIFF_DELETE = -1,
+               DIFF_INSERT = 1,
+               DIFF_EQUAL = 0;
+
+       /**
+        * Find the differences between two texts.  Simplifies the problem by stripping
+        * any common prefix or suffix off the texts before diffing.
+        * @param {string} text1 Old string to be diffed.
+        * @param {string} text2 New string to be diffed.
+        * @param {boolean=} optChecklines Optional speedup flag. If present and false,
+        *     then don't run a line-level diff first to identify the changed areas.
+        *     Defaults to true, which does a faster, slightly less optimal diff.
+        * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
+        */
+       DiffMatchPatch.prototype.DiffMain = function( text1, text2, optChecklines ) {
+               var deadline, checklines, commonlength,
+                       commonprefix, commonsuffix, diffs;
+
+               // The diff must be complete in up to 1 second.
+               deadline = ( new Date() ).getTime() + 1000;
+
+               // Check for null inputs.
+               if ( text1 === null || text2 === null ) {
+                       throw new Error( "Null input. (DiffMain)" );
+               }
+
+               // Check for equality (speedup).
+               if ( text1 === text2 ) {
+                       if ( text1 ) {
+                               return [
+                                       [ DIFF_EQUAL, text1 ]
+                               ];
+                       }
+                       return [];
+               }
+
+               if ( typeof optChecklines === "undefined" ) {
+                       optChecklines = true;
+               }
+
+               checklines = optChecklines;
+
+               // Trim off common prefix (speedup).
+               commonlength = this.diffCommonPrefix( text1, text2 );
+               commonprefix = text1.substring( 0, commonlength );
+               text1 = text1.substring( commonlength );
+               text2 = text2.substring( commonlength );
+
+               // Trim off common suffix (speedup).
+               commonlength = this.diffCommonSuffix( text1, text2 );
+               commonsuffix = text1.substring( text1.length - commonlength );
+               text1 = text1.substring( 0, text1.length - commonlength );
+               text2 = text2.substring( 0, text2.length - commonlength );
+
+               // Compute the diff on the middle block.
+               diffs = this.diffCompute( text1, text2, checklines, deadline );
+
+               // Restore the prefix and suffix.
+               if ( commonprefix ) {
+                       diffs.unshift( [ DIFF_EQUAL, commonprefix ] );
+               }
+               if ( commonsuffix ) {
+                       diffs.push( [ DIFF_EQUAL, commonsuffix ] );
+               }
+               this.diffCleanupMerge( diffs );
+               return diffs;
+       };
+
+       /**
+        * Reduce the number of edits by eliminating operationally trivial equalities.
+        * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
+        */
+       DiffMatchPatch.prototype.diffCleanupEfficiency = function( diffs ) {
+               var changes, equalities, equalitiesLength, lastequality,
+                       pointer, preIns, preDel, postIns, postDel;
+               changes = false;
+               equalities = []; // Stack of indices where equalities are found.
+               equalitiesLength = 0; // Keeping our own length var is faster in JS.
+               /** @type {?string} */
+               lastequality = null;
+               // Always equal to diffs[equalities[equalitiesLength - 1]][1]
+               pointer = 0; // Index of current position.
+               // Is there an insertion operation before the last equality.
+               preIns = false;
+               // Is there a deletion operation before the last equality.
+               preDel = false;
+               // Is there an insertion operation after the last equality.
+               postIns = false;
+               // Is there a deletion operation after the last equality.
+               postDel = false;
+               while ( pointer < diffs.length ) {
+
+                       // Equality found.
+                       if ( diffs[ pointer ][ 0 ] === DIFF_EQUAL ) {
+                               if ( diffs[ pointer ][ 1 ].length < 4 && ( postIns || postDel ) ) {
+
+                                       // Candidate found.
+                                       equalities[ equalitiesLength++ ] = pointer;
+                                       preIns = postIns;
+                                       preDel = postDel;
+                                       lastequality = diffs[ pointer ][ 1 ];
+                               } else {
+
+                                       // Not a candidate, and can never become one.
+                                       equalitiesLength = 0;
+                                       lastequality = null;
+                               }
+                               postIns = postDel = false;
+
+                       // An insertion or deletion.
+                       } else {
+
+                               if ( diffs[ pointer ][ 0 ] === DIFF_DELETE ) {
+                                       postDel = true;
+                               } else {
+                                       postIns = true;
+                               }
+
+                               /*
+                                * Five types to be split:
+                                * <ins>A</ins><del>B</del>XY<ins>C</ins><del>D</del>
+                                * <ins>A</ins>X<ins>C</ins><del>D</del>
+                                * <ins>A</ins><del>B</del>X<ins>C</ins>
+                                * <ins>A</del>X<ins>C</ins><del>D</del>
+                                * <ins>A</ins><del>B</del>X<del>C</del>
+                                */
+                               if ( lastequality && ( ( preIns && preDel && postIns && postDel ) ||
+                                               ( ( lastequality.length < 2 ) &&
+                                               ( preIns + preDel + postIns + postDel ) === 3 ) ) ) {
+
+                                       // Duplicate record.
+                                       diffs.splice(
+                                               equalities[ equalitiesLength - 1 ],
+                                               0,
+                                               [ DIFF_DELETE, lastequality ]
+                                       );
+
+                                       // Change second copy to insert.
+                                       diffs[ equalities[ equalitiesLength - 1 ] + 1 ][ 0 ] = DIFF_INSERT;
+                                       equalitiesLength--; // Throw away the equality we just deleted;
+                                       lastequality = null;
+                                       if ( preIns && preDel ) {
+                                               // No changes made which could affect previous entry, keep going.
+                                               postIns = postDel = true;
+                                               equalitiesLength = 0;
+                                       } else {
+                                               equalitiesLength--; // Throw away the previous equality.
+                                               pointer = equalitiesLength > 0 ? equalities[ equalitiesLength - 1 ] : -1;
+                                               postIns = postDel = false;
+                                       }
+                                       changes = true;
+                               }
+                       }
+                       pointer++;
+               }
+
+               if ( changes ) {
+                       this.diffCleanupMerge( diffs );
+               }
+       };
+
+       /**
+        * Convert a diff array into a pretty HTML report.
+        * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
+        * @param {integer} string to be beautified.
+        * @return {string} HTML representation.
+        */
+       DiffMatchPatch.prototype.diffPrettyHtml = function( diffs ) {
+               var op, data, x,
+                       html = [];
+               for ( x = 0; x < diffs.length; x++ ) {
+                       op = diffs[ x ][ 0 ]; // Operation (insert, delete, equal)
+                       data = diffs[ x ][ 1 ]; // Text of change.
+                       switch ( op ) {
+                       case DIFF_INSERT:
+                               html[ x ] = "<ins>" + data + "</ins>";
+                               break;
+                       case DIFF_DELETE:
+                               html[ x ] = "<del>" + data + "</del>";
+                               break;
+                       case DIFF_EQUAL:
+                               html[ x ] = "<span>" + data + "</span>";
+                               break;
+                       }
+               }
+               return html.join( "" );
+       };
+
+       /**
+        * Determine the common prefix of two strings.
+        * @param {string} text1 First string.
+        * @param {string} text2 Second string.
+        * @return {number} The number of characters common to the start of each
+        *     string.
+        */
+       DiffMatchPatch.prototype.diffCommonPrefix = function( text1, text2 ) {
+               var pointermid, pointermax, pointermin, pointerstart;
+               // Quick check for common null cases.
+               if ( !text1 || !text2 || text1.charAt( 0 ) !== text2.charAt( 0 ) ) {
+                       return 0;
+               }
+               // Binary search.
+               // Performance analysis: https://neil.fraser.name/news/2007/10/09/
+               pointermin = 0;
+               pointermax = Math.min( text1.length, text2.length );
+               pointermid = pointermax;
+               pointerstart = 0;
+               while ( pointermin < pointermid ) {
+                       if ( text1.substring( pointerstart, pointermid ) ===
+                                       text2.substring( pointerstart, pointermid ) ) {
+                               pointermin = pointermid;
+                               pointerstart = pointermin;
+                       } else {
+                               pointermax = pointermid;
+                       }
+                       pointermid = Math.floor( ( pointermax - pointermin ) / 2 + pointermin );
+               }
+               return pointermid;
+       };
+
+       /**
+        * Determine the common suffix of two strings.
+        * @param {string} text1 First string.
+        * @param {string} text2 Second string.
+        * @return {number} The number of characters common to the end of each string.
+        */
+       DiffMatchPatch.prototype.diffCommonSuffix = function( text1, text2 ) {
+               var pointermid, pointermax, pointermin, pointerend;
+               // Quick check for common null cases.
+               if ( !text1 ||
+                               !text2 ||
+                               text1.charAt( text1.length - 1 ) !== text2.charAt( text2.length - 1 ) ) {
+                       return 0;
+               }
+               // Binary search.
+               // Performance analysis: https://neil.fraser.name/news/2007/10/09/
+               pointermin = 0;
+               pointermax = Math.min( text1.length, text2.length );
+               pointermid = pointermax;
+               pointerend = 0;
+               while ( pointermin < pointermid ) {
+                       if ( text1.substring( text1.length - pointermid, text1.length - pointerend ) ===
+                                       text2.substring( text2.length - pointermid, text2.length - pointerend ) ) {
+                               pointermin = pointermid;
+                               pointerend = pointermin;
+                       } else {
+                               pointermax = pointermid;
+                       }
+                       pointermid = Math.floor( ( pointermax - pointermin ) / 2 + pointermin );
+               }
+               return pointermid;
+       };
+
+       /**
+        * Find the differences between two texts.  Assumes that the texts do not
+        * have any common prefix or suffix.
+        * @param {string} text1 Old string to be diffed.
+        * @param {string} text2 New string to be diffed.
+        * @param {boolean} checklines Speedup flag.  If false, then don't run a
+        *     line-level diff first to identify the changed areas.
+        *     If true, then run a faster, slightly less optimal diff.
+        * @param {number} deadline Time when the diff should be complete by.
+        * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
+        * @private
+        */
+       DiffMatchPatch.prototype.diffCompute = function( text1, text2, checklines, deadline ) {
+               var diffs, longtext, shorttext, i, hm,
+                       text1A, text2A, text1B, text2B,
+                       midCommon, diffsA, diffsB;
+
+               if ( !text1 ) {
+                       // Just add some text (speedup).
+                       return [
+                               [ DIFF_INSERT, text2 ]
+                       ];
+               }
+
+               if ( !text2 ) {
+                       // Just delete some text (speedup).
+                       return [
+                               [ DIFF_DELETE, text1 ]
+                       ];
+               }
+
+               longtext = text1.length > text2.length ? text1 : text2;
+               shorttext = text1.length > text2.length ? text2 : text1;
+               i = longtext.indexOf( shorttext );
+               if ( i !== -1 ) {
+                       // Shorter text is inside the longer text (speedup).
+                       diffs = [
+                               [ DIFF_INSERT, longtext.substring( 0, i ) ],
+                               [ DIFF_EQUAL, shorttext ],
+                               [ DIFF_INSERT, longtext.substring( i + shorttext.length ) ]
+                       ];
+                       // Swap insertions for deletions if diff is reversed.
+                       if ( text1.length > text2.length ) {
+                               diffs[ 0 ][ 0 ] = diffs[ 2 ][ 0 ] = DIFF_DELETE;
+                       }
+                       return diffs;
+               }
+
+               if ( shorttext.length === 1 ) {
+                       // Single character string.
+                       // After the previous speedup, the character can't be an equality.
+                       return [
+                               [ DIFF_DELETE, text1 ],
+                               [ DIFF_INSERT, text2 ]
+                       ];
+               }
+
+               // Check to see if the problem can be split in two.
+               hm = this.diffHalfMatch( text1, text2 );
+               if ( hm ) {
+                       // A half-match was found, sort out the return data.
+                       text1A = hm[ 0 ];
+                       text1B = hm[ 1 ];
+                       text2A = hm[ 2 ];
+                       text2B = hm[ 3 ];
+                       midCommon = hm[ 4 ];
+                       // Send both pairs off for separate processing.
+                       diffsA = this.DiffMain( text1A, text2A, checklines, deadline );
+                       diffsB = this.DiffMain( text1B, text2B, checklines, deadline );
+                       // Merge the results.
+                       return diffsA.concat( [
+                               [ DIFF_EQUAL, midCommon ]
+                       ], diffsB );
+               }
+
+               if ( checklines && text1.length > 100 && text2.length > 100 ) {
+                       return this.diffLineMode( text1, text2, deadline );
+               }
+
+               return this.diffBisect( text1, text2, deadline );
+       };
+
+       /**
+        * Do the two texts share a substring which is at least half the length of the
+        * longer text?
+        * This speedup can produce non-minimal diffs.
+        * @param {string} text1 First string.
+        * @param {string} text2 Second string.
+        * @return {Array.<string>} Five element Array, containing the prefix of
+        *     text1, the suffix of text1, the prefix of text2, the suffix of
+        *     text2 and the common middle.  Or null if there was no match.
+        * @private
+        */
+       DiffMatchPatch.prototype.diffHalfMatch = function( text1, text2 ) {
+               var longtext, shorttext, dmp,
+                       text1A, text2B, text2A, text1B, midCommon,
+                       hm1, hm2, hm;
+
+               longtext = text1.length > text2.length ? text1 : text2;
+               shorttext = text1.length > text2.length ? text2 : text1;
+               if ( longtext.length < 4 || shorttext.length * 2 < longtext.length ) {
+                       return null; // Pointless.
+               }
+               dmp = this; // 'this' becomes 'window' in a closure.
+
+               /**
+                * Does a substring of shorttext exist within longtext such that the substring
+                * is at least half the length of longtext?
+                * Closure, but does not reference any external variables.
+                * @param {string} longtext Longer string.
+                * @param {string} shorttext Shorter string.
+                * @param {number} i Start index of quarter length substring within longtext.
+                * @return {Array.<string>} Five element Array, containing the prefix of
+                *     longtext, the suffix of longtext, the prefix of shorttext, the suffix
+                *     of shorttext and the common middle.  Or null if there was no match.
+                * @private
+                */
+               function diffHalfMatchI( longtext, shorttext, i ) {
+                       var seed, j, bestCommon, prefixLength, suffixLength,
+                               bestLongtextA, bestLongtextB, bestShorttextA, bestShorttextB;
+                       // Start with a 1/4 length substring at position i as a seed.
+                       seed = longtext.substring( i, i + Math.floor( longtext.length / 4 ) );
+                       j = -1;
+                       bestCommon = "";
+                       while ( ( j = shorttext.indexOf( seed, j + 1 ) ) !== -1 ) {
+                               prefixLength = dmp.diffCommonPrefix( longtext.substring( i ),
+                                       shorttext.substring( j ) );
+                               suffixLength = dmp.diffCommonSuffix( longtext.substring( 0, i ),
+                                       shorttext.substring( 0, j ) );
+                               if ( bestCommon.length < suffixLength + prefixLength ) {
+                                       bestCommon = shorttext.substring( j - suffixLength, j ) +
+                                               shorttext.substring( j, j + prefixLength );
+                                       bestLongtextA = longtext.substring( 0, i - suffixLength );
+                                       bestLongtextB = longtext.substring( i + prefixLength );
+                                       bestShorttextA = shorttext.substring( 0, j - suffixLength );
+                                       bestShorttextB = shorttext.substring( j + prefixLength );
+                               }
+                       }
+                       if ( bestCommon.length * 2 >= longtext.length ) {
+                               return [ bestLongtextA, bestLongtextB,
+                                       bestShorttextA, bestShorttextB, bestCommon
+                               ];
+                       } else {
+                               return null;
+                       }
+               }
+
+               // First check if the second quarter is the seed for a half-match.
+               hm1 = diffHalfMatchI( longtext, shorttext,
+                       Math.ceil( longtext.length / 4 ) );
+               // Check again based on the third quarter.
+               hm2 = diffHalfMatchI( longtext, shorttext,
+                       Math.ceil( longtext.length / 2 ) );
+               if ( !hm1 && !hm2 ) {
+                       return null;
+               } else if ( !hm2 ) {
+                       hm = hm1;
+               } else if ( !hm1 ) {
+                       hm = hm2;
+               } else {
+                       // Both matched.  Select the longest.
+                       hm = hm1[ 4 ].length > hm2[ 4 ].length ? hm1 : hm2;
+               }
+
+               // A half-match was found, sort out the return data.
+               text1A, text1B, text2A, text2B;
+               if ( text1.length > text2.length ) {
+                       text1A = hm[ 0 ];
+                       text1B = hm[ 1 ];
+                       text2A = hm[ 2 ];
+                       text2B = hm[ 3 ];
+               } else {
+                       text2A = hm[ 0 ];
+                       text2B = hm[ 1 ];
+                       text1A = hm[ 2 ];
+                       text1B = hm[ 3 ];
+               }
+               midCommon = hm[ 4 ];
+               return [ text1A, text1B, text2A, text2B, midCommon ];
+       };
+
+       /**
+        * Do a quick line-level diff on both strings, then rediff the parts for
+        * greater accuracy.
+        * This speedup can produce non-minimal diffs.
+        * @param {string} text1 Old string to be diffed.
+        * @param {string} text2 New string to be diffed.
+        * @param {number} deadline Time when the diff should be complete by.
+        * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
+        * @private
+        */
+       DiffMatchPatch.prototype.diffLineMode = function( text1, text2, deadline ) {
+               var a, diffs, linearray, pointer, countInsert,
+                       countDelete, textInsert, textDelete, j;
+               // Scan the text on a line-by-line basis first.
+               a = this.diffLinesToChars( text1, text2 );
+               text1 = a.chars1;
+               text2 = a.chars2;
+               linearray = a.lineArray;
+
+               diffs = this.DiffMain( text1, text2, false, deadline );
+
+               // Convert the diff back to original text.
+               this.diffCharsToLines( diffs, linearray );
+               // Eliminate freak matches (e.g. blank lines)
+               this.diffCleanupSemantic( diffs );
+
+               // Rediff any replacement blocks, this time character-by-character.
+               // Add a dummy entry at the end.
+               diffs.push( [ DIFF_EQUAL, "" ] );
+               pointer = 0;
+               countDelete = 0;
+               countInsert = 0;
+               textDelete = "";
+               textInsert = "";
+               while ( pointer < diffs.length ) {
+                       switch ( diffs[ pointer ][ 0 ] ) {
+                       case DIFF_INSERT:
+                               countInsert++;
+                               textInsert += diffs[ pointer ][ 1 ];
+                               break;
+                       case DIFF_DELETE:
+                               countDelete++;
+                               textDelete += diffs[ pointer ][ 1 ];
+                               break;
+                       case DIFF_EQUAL:
+                               // Upon reaching an equality, check for prior redundancies.
+                               if ( countDelete >= 1 && countInsert >= 1 ) {
+                                       // Delete the offending records and add the merged ones.
+                                       diffs.splice( pointer - countDelete - countInsert,
+                                               countDelete + countInsert );
+                                       pointer = pointer - countDelete - countInsert;
+                                       a = this.DiffMain( textDelete, textInsert, false, deadline );
+                                       for ( j = a.length - 1; j >= 0; j-- ) {
+                                               diffs.splice( pointer, 0, a[ j ] );
+                                       }
+                                       pointer = pointer + a.length;
+                               }
+                               countInsert = 0;
+                               countDelete = 0;
+                               textDelete = "";
+                               textInsert = "";
+                               break;
+                       }
+                       pointer++;
+               }
+               diffs.pop(); // Remove the dummy entry at the end.
+
+               return diffs;
+       };
+
+       /**
+        * Find the 'middle snake' of a diff, split the problem in two
+        * and return the recursively constructed diff.
+        * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.
+        * @param {string} text1 Old string to be diffed.
+        * @param {string} text2 New string to be diffed.
+        * @param {number} deadline Time at which to bail if not yet complete.
+        * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
+        * @private
+        */
+       DiffMatchPatch.prototype.diffBisect = function( text1, text2, deadline ) {
+               var text1Length, text2Length, maxD, vOffset, vLength,
+                       v1, v2, x, delta, front, k1start, k1end, k2start,
+                       k2end, k2Offset, k1Offset, x1, x2, y1, y2, d, k1, k2;
+               // Cache the text lengths to prevent multiple calls.
+               text1Length = text1.length;
+               text2Length = text2.length;
+               maxD = Math.ceil( ( text1Length + text2Length ) / 2 );
+               vOffset = maxD;
+               vLength = 2 * maxD;
+               v1 = new Array( vLength );
+               v2 = new Array( vLength );
+               // Setting all elements to -1 is faster in Chrome & Firefox than mixing
+               // integers and undefined.
+               for ( x = 0; x < vLength; x++ ) {
+                       v1[ x ] = -1;
+                       v2[ x ] = -1;
+               }
+               v1[ vOffset + 1 ] = 0;
+               v2[ vOffset + 1 ] = 0;
+               delta = text1Length - text2Length;
+               // If the total number of characters is odd, then the front path will collide
+               // with the reverse path.
+               front = ( delta % 2 !== 0 );
+               // Offsets for start and end of k loop.
+               // Prevents mapping of space beyond the grid.
+               k1start = 0;
+               k1end = 0;
+               k2start = 0;
+               k2end = 0;
+               for ( d = 0; d < maxD; d++ ) {
+                       // Bail out if deadline is reached.
+                       if ( ( new Date() ).getTime() > deadline ) {
+                               break;
+                       }
+
+                       // Walk the front path one step.
+                       for ( k1 = -d + k1start; k1 <= d - k1end; k1 += 2 ) {
+                               k1Offset = vOffset + k1;
+                               if ( k1 === -d || ( k1 !== d && v1[ k1Offset - 1 ] < v1[ k1Offset + 1 ] ) ) {
+                                       x1 = v1[ k1Offset + 1 ];
+                               } else {
+                                       x1 = v1[ k1Offset - 1 ] + 1;
+                               }
+                               y1 = x1 - k1;
+                               while ( x1 < text1Length && y1 < text2Length &&
+                                       text1.charAt( x1 ) === text2.charAt( y1 ) ) {
+                                       x1++;
+                                       y1++;
+                               }
+                               v1[ k1Offset ] = x1;
+                               if ( x1 > text1Length ) {
+                                       // Ran off the right of the graph.
+                                       k1end += 2;
+                               } else if ( y1 > text2Length ) {
+                                       // Ran off the bottom of the graph.
+                                       k1start += 2;
+                               } else if ( front ) {
+                                       k2Offset = vOffset + delta - k1;
+                                       if ( k2Offset >= 0 && k2Offset < vLength && v2[ k2Offset ] !== -1 ) {
+                                               // Mirror x2 onto top-left coordinate system.
+                                               x2 = text1Length - v2[ k2Offset ];
+                                               if ( x1 >= x2 ) {
+                                                       // Overlap detected.
+                                                       return this.diffBisectSplit( text1, text2, x1, y1, deadline );
+                                               }
+                                       }
+                               }
+                       }
 
-                                       // Show content of TextNode or CDATASection
-                                       if ( node.nodeType === 3 || node.nodeType === 4 ) {
-                                               ret += node.nodeValue;
+                       // Walk the reverse path one step.
+                       for ( k2 = -d + k2start; k2 <= d - k2end; k2 += 2 ) {
+                               k2Offset = vOffset + k2;
+                               if ( k2 === -d || ( k2 !== d && v2[ k2Offset - 1 ] < v2[ k2Offset + 1 ] ) ) {
+                                       x2 = v2[ k2Offset + 1 ];
+                               } else {
+                                       x2 = v2[ k2Offset - 1 ] + 1;
+                               }
+                               y2 = x2 - k2;
+                               while ( x2 < text1Length && y2 < text2Length &&
+                                       text1.charAt( text1Length - x2 - 1 ) ===
+                                       text2.charAt( text2Length - y2 - 1 ) ) {
+                                       x2++;
+                                       y2++;
+                               }
+                               v2[ k2Offset ] = x2;
+                               if ( x2 > text1Length ) {
+                                       // Ran off the left of the graph.
+                                       k2end += 2;
+                               } else if ( y2 > text2Length ) {
+                                       // Ran off the top of the graph.
+                                       k2start += 2;
+                               } else if ( !front ) {
+                                       k1Offset = vOffset + delta - k2;
+                                       if ( k1Offset >= 0 && k1Offset < vLength && v1[ k1Offset ] !== -1 ) {
+                                               x1 = v1[ k1Offset ];
+                                               y1 = vOffset + x1 - k1Offset;
+                                               // Mirror x2 onto top-left coordinate system.
+                                               x2 = text1Length - x2;
+                                               if ( x1 >= x2 ) {
+                                                       // Overlap detected.
+                                                       return this.diffBisectSplit( text1, text2, x1, y1, deadline );
+                                               }
                                        }
+                               }
+                       }
+               }
+               // Diff took too long and hit the deadline or
+               // number of diffs equals number of characters, no commonality at all.
+               return [
+                       [ DIFF_DELETE, text1 ],
+                       [ DIFF_INSERT, text2 ]
+               ];
+       };
 
-                                       return ret + open + "/" + tag + close;
-                               },
-
-                               // function calls it internally, it's the arguments part of the function
-                               functionArgs: function( fn ) {
-                                       var args,
-                                               l = fn.length;
+       /**
+        * Given the location of the 'middle snake', split the diff in two parts
+        * and recurse.
+        * @param {string} text1 Old string to be diffed.
+        * @param {string} text2 New string to be diffed.
+        * @param {number} x Index of split point in text1.
+        * @param {number} y Index of split point in text2.
+        * @param {number} deadline Time at which to bail if not yet complete.
+        * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
+        * @private
+        */
+       DiffMatchPatch.prototype.diffBisectSplit = function( text1, text2, x, y, deadline ) {
+               var text1a, text1b, text2a, text2b, diffs, diffsb;
+               text1a = text1.substring( 0, x );
+               text2a = text2.substring( 0, y );
+               text1b = text1.substring( x );
+               text2b = text2.substring( y );
+
+               // Compute both diffs serially.
+               diffs = this.DiffMain( text1a, text2a, false, deadline );
+               diffsb = this.DiffMain( text1b, text2b, false, deadline );
+
+               return diffs.concat( diffsb );
+       };
 
-                                       if ( !l ) {
-                                               return "";
-                                       }
+       /**
+        * Reduce the number of edits by eliminating semantically trivial equalities.
+        * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
+        */
+       DiffMatchPatch.prototype.diffCleanupSemantic = function( diffs ) {
+               var changes, equalities, equalitiesLength, lastequality,
+                       pointer, lengthInsertions2, lengthDeletions2, lengthInsertions1,
+                       lengthDeletions1, deletion, insertion, overlapLength1, overlapLength2;
+               changes = false;
+               equalities = []; // Stack of indices where equalities are found.
+               equalitiesLength = 0; // Keeping our own length var is faster in JS.
+               /** @type {?string} */
+               lastequality = null;
+               // Always equal to diffs[equalities[equalitiesLength - 1]][1]
+               pointer = 0; // Index of current position.
+               // Number of characters that changed prior to the equality.
+               lengthInsertions1 = 0;
+               lengthDeletions1 = 0;
+               // Number of characters that changed after the equality.
+               lengthInsertions2 = 0;
+               lengthDeletions2 = 0;
+               while ( pointer < diffs.length ) {
+                       if ( diffs[ pointer ][ 0 ] === DIFF_EQUAL ) { // Equality found.
+                               equalities[ equalitiesLength++ ] = pointer;
+                               lengthInsertions1 = lengthInsertions2;
+                               lengthDeletions1 = lengthDeletions2;
+                               lengthInsertions2 = 0;
+                               lengthDeletions2 = 0;
+                               lastequality = diffs[ pointer ][ 1 ];
+                       } else { // An insertion or deletion.
+                               if ( diffs[ pointer ][ 0 ] === DIFF_INSERT ) {
+                                       lengthInsertions2 += diffs[ pointer ][ 1 ].length;
+                               } else {
+                                       lengthDeletions2 += diffs[ pointer ][ 1 ].length;
+                               }
+                               // Eliminate an equality that is smaller or equal to the edits on both
+                               // sides of it.
+                               if ( lastequality && ( lastequality.length <=
+                                               Math.max( lengthInsertions1, lengthDeletions1 ) ) &&
+                                               ( lastequality.length <= Math.max( lengthInsertions2,
+                                                       lengthDeletions2 ) ) ) {
+
+                                       // Duplicate record.
+                                       diffs.splice(
+                                               equalities[ equalitiesLength - 1 ],
+                                               0,
+                                               [ DIFF_DELETE, lastequality ]
+                                       );
+
+                                       // Change second copy to insert.
+                                       diffs[ equalities[ equalitiesLength - 1 ] + 1 ][ 0 ] = DIFF_INSERT;
+
+                                       // Throw away the equality we just deleted.
+                                       equalitiesLength--;
+
+                                       // Throw away the previous equality (it needs to be reevaluated).
+                                       equalitiesLength--;
+                                       pointer = equalitiesLength > 0 ? equalities[ equalitiesLength - 1 ] : -1;
+
+                                       // Reset the counters.
+                                       lengthInsertions1 = 0;
+                                       lengthDeletions1 = 0;
+                                       lengthInsertions2 = 0;
+                                       lengthDeletions2 = 0;
+                                       lastequality = null;
+                                       changes = true;
+                               }
+                       }
+                       pointer++;
+               }
 
-                                       args = new Array( l );
-                                       while ( l-- ) {
+               // Normalize the diff.
+               if ( changes ) {
+                       this.diffCleanupMerge( diffs );
+               }
 
-                                               // 97 is 'a'
-                                               args[ l ] = String.fromCharCode( 97 + l );
+               // Find any overlaps between deletions and insertions.
+               // e.g: <del>abcxxx</del><ins>xxxdef</ins>
+               //   -> <del>abc</del>xxx<ins>def</ins>
+               // e.g: <del>xxxabc</del><ins>defxxx</ins>
+               //   -> <ins>def</ins>xxx<del>abc</del>
+               // Only extract an overlap if it is as big as the edit ahead or behind it.
+               pointer = 1;
+               while ( pointer < diffs.length ) {
+                       if ( diffs[ pointer - 1 ][ 0 ] === DIFF_DELETE &&
+                                       diffs[ pointer ][ 0 ] === DIFF_INSERT ) {
+                               deletion = diffs[ pointer - 1 ][ 1 ];
+                               insertion = diffs[ pointer ][ 1 ];
+                               overlapLength1 = this.diffCommonOverlap( deletion, insertion );
+                               overlapLength2 = this.diffCommonOverlap( insertion, deletion );
+                               if ( overlapLength1 >= overlapLength2 ) {
+                                       if ( overlapLength1 >= deletion.length / 2 ||
+                                                       overlapLength1 >= insertion.length / 2 ) {
+                                               // Overlap found.  Insert an equality and trim the surrounding edits.
+                                               diffs.splice(
+                                                       pointer,
+                                                       0,
+                                                       [ DIFF_EQUAL, insertion.substring( 0, overlapLength1 ) ]
+                                               );
+                                               diffs[ pointer - 1 ][ 1 ] =
+                                                       deletion.substring( 0, deletion.length - overlapLength1 );
+                                               diffs[ pointer + 1 ][ 1 ] = insertion.substring( overlapLength1 );
+                                               pointer++;
                                        }
-                                       return " " + args.join( ", " ) + " ";
-                               },
-                               // object calls it internally, the key part of an item in a map
-                               key: quote,
-                               // function calls it internally, it's the content of the function
-                               functionCode: "[code]",
-                               // node calls it internally, it's an html attribute value
-                               attribute: quote,
-                               string: quote,
-                               date: quote,
-                               regexp: literal,
-                               number: literal,
-                               "boolean": literal
-                       },
-                       // if true, entities are escaped ( <, >, \t, space and \n )
-                       HTML: false,
-                       // indentation unit
-                       indentChar: "  ",
-                       // if true, items in a collection, are separated by a \n, else just a space.
-                       multiline: true
-               };
-
-       return dump;
-}());
+                               } else {
+                                       if ( overlapLength2 >= deletion.length / 2 ||
+                                                       overlapLength2 >= insertion.length / 2 ) {
+
+                                               // Reverse overlap found.
+                                               // Insert an equality and swap and trim the surrounding edits.
+                                               diffs.splice(
+                                                       pointer,
+                                                       0,
+                                                       [ DIFF_EQUAL, deletion.substring( 0, overlapLength2 ) ]
+                                               );
+
+                                               diffs[ pointer - 1 ][ 0 ] = DIFF_INSERT;
+                                               diffs[ pointer - 1 ][ 1 ] =
+                                                       insertion.substring( 0, insertion.length - overlapLength2 );
+                                               diffs[ pointer + 1 ][ 0 ] = DIFF_DELETE;
+                                               diffs[ pointer + 1 ][ 1 ] =
+                                                       deletion.substring( overlapLength2 );
+                                               pointer++;
+                                       }
+                               }
+                               pointer++;
+                       }
+                       pointer++;
+               }
+       };
 
-// back compat
-QUnit.jsDump = QUnit.dump;
+       /**
+        * Determine if the suffix of one string is the prefix of another.
+        * @param {string} text1 First string.
+        * @param {string} text2 Second string.
+        * @return {number} The number of characters common to the end of the first
+        *     string and the start of the second string.
+        * @private
+        */
+       DiffMatchPatch.prototype.diffCommonOverlap = function( text1, text2 ) {
+               var text1Length, text2Length, textLength,
+                       best, length, pattern, found;
+               // Cache the text lengths to prevent multiple calls.
+               text1Length = text1.length;
+               text2Length = text2.length;
+               // Eliminate the null case.
+               if ( text1Length === 0 || text2Length === 0 ) {
+                       return 0;
+               }
+               // Truncate the longer string.
+               if ( text1Length > text2Length ) {
+                       text1 = text1.substring( text1Length - text2Length );
+               } else if ( text1Length < text2Length ) {
+                       text2 = text2.substring( 0, text1Length );
+               }
+               textLength = Math.min( text1Length, text2Length );
+               // Quick check for the worst case.
+               if ( text1 === text2 ) {
+                       return textLength;
+               }
 
-// For browser, export only select globals
-if ( typeof window !== "undefined" ) {
+               // Start by looking for a single character match
+               // and increase length until no match is found.
+               // Performance analysis: https://neil.fraser.name/news/2010/11/04/
+               best = 0;
+               length = 1;
+               while ( true ) {
+                       pattern = text1.substring( textLength - length );
+                       found = text2.indexOf( pattern );
+                       if ( found === -1 ) {
+                               return best;
+                       }
+                       length += found;
+                       if ( found === 0 || text1.substring( textLength - length ) ===
+                                       text2.substring( 0, length ) ) {
+                               best = length;
+                               length++;
+                       }
+               }
+       };
 
-       // Deprecated
-       // Extend assert methods to QUnit and Global scope through Backwards compatibility
-       (function() {
-               var i,
-                       assertions = Assert.prototype;
+       /**
+        * Split two texts into an array of strings.  Reduce the texts to a string of
+        * hashes where each Unicode character represents one line.
+        * @param {string} text1 First string.
+        * @param {string} text2 Second string.
+        * @return {{chars1: string, chars2: string, lineArray: !Array.<string>}}
+        *     An object containing the encoded text1, the encoded text2 and
+        *     the array of unique strings.
+        *     The zeroth element of the array of unique strings is intentionally blank.
+        * @private
+        */
+       DiffMatchPatch.prototype.diffLinesToChars = function( text1, text2 ) {
+               var lineArray, lineHash, chars1, chars2;
+               lineArray = []; // e.g. lineArray[4] === 'Hello\n'
+               lineHash = {}; // e.g. lineHash['Hello\n'] === 4
+
+               // '\x00' is a valid character, but various debuggers don't like it.
+               // So we'll insert a junk entry to avoid generating a null character.
+               lineArray[ 0 ] = "";
+
+               /**
+                * Split a text into an array of strings.  Reduce the texts to a string of
+                * hashes where each Unicode character represents one line.
+                * Modifies linearray and linehash through being a closure.
+                * @param {string} text String to encode.
+                * @return {string} Encoded string.
+                * @private
+                */
+               function diffLinesToCharsMunge( text ) {
+                       var chars, lineStart, lineEnd, lineArrayLength, line;
+                       chars = "";
+                       // Walk the text, pulling out a substring for each line.
+                       // text.split('\n') would would temporarily double our memory footprint.
+                       // Modifying text would create many large strings to garbage collect.
+                       lineStart = 0;
+                       lineEnd = -1;
+                       // Keeping our own length variable is faster than looking it up.
+                       lineArrayLength = lineArray.length;
+                       while ( lineEnd < text.length - 1 ) {
+                               lineEnd = text.indexOf( "\n", lineStart );
+                               if ( lineEnd === -1 ) {
+                                       lineEnd = text.length - 1;
+                               }
+                               line = text.substring( lineStart, lineEnd + 1 );
+                               lineStart = lineEnd + 1;
 
-               function applyCurrent( current ) {
-                       return function() {
-                               var assert = new Assert( QUnit.config.current );
-                               current.apply( assert, arguments );
-                       };
+                               if ( lineHash.hasOwnProperty ? lineHash.hasOwnProperty( line ) :
+                                                       ( lineHash[ line ] !== undefined ) ) {
+                                       chars += String.fromCharCode( lineHash[ line ] );
+                               } else {
+                                       chars += String.fromCharCode( lineArrayLength );
+                                       lineHash[ line ] = lineArrayLength;
+                                       lineArray[ lineArrayLength++ ] = line;
+                               }
+                       }
+                       return chars;
                }
 
-               for ( i in assertions ) {
-                       QUnit[ i ] = applyCurrent( assertions[ i ] );
+               chars1 = diffLinesToCharsMunge( text1 );
+               chars2 = diffLinesToCharsMunge( text2 );
+               return {
+                       chars1: chars1,
+                       chars2: chars2,
+                       lineArray: lineArray
+               };
+       };
+
+       /**
+        * Rehydrate the text in a diff from a string of line hashes to real lines of
+        * text.
+        * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
+        * @param {!Array.<string>} lineArray Array of unique strings.
+        * @private
+        */
+       DiffMatchPatch.prototype.diffCharsToLines = function( diffs, lineArray ) {
+               var x, chars, text, y;
+               for ( x = 0; x < diffs.length; x++ ) {
+                       chars = diffs[ x ][ 1 ];
+                       text = [];
+                       for ( y = 0; y < chars.length; y++ ) {
+                               text[ y ] = lineArray[ chars.charCodeAt( y ) ];
+                       }
+                       diffs[ x ][ 1 ] = text.join( "" );
                }
-       })();
+       };
 
-       (function() {
-               var i, l,
-                       keys = [
-                               "test",
-                               "module",
-                               "expect",
-                               "asyncTest",
-                               "start",
-                               "stop",
-                               "ok",
-                               "notOk",
-                               "equal",
-                               "notEqual",
-                               "propEqual",
-                               "notPropEqual",
-                               "deepEqual",
-                               "notDeepEqual",
-                               "strictEqual",
-                               "notStrictEqual",
-                               "throws"
-                       ];
+       /**
+        * Reorder and merge like edit sections.  Merge equalities.
+        * Any edit section can move as long as it doesn't cross an equality.
+        * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
+        */
+       DiffMatchPatch.prototype.diffCleanupMerge = function( diffs ) {
+               var pointer, countDelete, countInsert, textInsert, textDelete,
+                       commonlength, changes, diffPointer, position;
+               diffs.push( [ DIFF_EQUAL, "" ] ); // Add a dummy entry at the end.
+               pointer = 0;
+               countDelete = 0;
+               countInsert = 0;
+               textDelete = "";
+               textInsert = "";
+               commonlength;
+               while ( pointer < diffs.length ) {
+                       switch ( diffs[ pointer ][ 0 ] ) {
+                       case DIFF_INSERT:
+                               countInsert++;
+                               textInsert += diffs[ pointer ][ 1 ];
+                               pointer++;
+                               break;
+                       case DIFF_DELETE:
+                               countDelete++;
+                               textDelete += diffs[ pointer ][ 1 ];
+                               pointer++;
+                               break;
+                       case DIFF_EQUAL:
+                               // Upon reaching an equality, check for prior redundancies.
+                               if ( countDelete + countInsert > 1 ) {
+                                       if ( countDelete !== 0 && countInsert !== 0 ) {
+                                               // Factor out any common prefixes.
+                                               commonlength = this.diffCommonPrefix( textInsert, textDelete );
+                                               if ( commonlength !== 0 ) {
+                                                       if ( ( pointer - countDelete - countInsert ) > 0 &&
+                                                                       diffs[ pointer - countDelete - countInsert - 1 ][ 0 ] ===
+                                                                       DIFF_EQUAL ) {
+                                                               diffs[ pointer - countDelete - countInsert - 1 ][ 1 ] +=
+                                                                       textInsert.substring( 0, commonlength );
+                                                       } else {
+                                                               diffs.splice( 0, 0, [ DIFF_EQUAL,
+                                                                       textInsert.substring( 0, commonlength )
+                                                               ] );
+                                                               pointer++;
+                                                       }
+                                                       textInsert = textInsert.substring( commonlength );
+                                                       textDelete = textDelete.substring( commonlength );
+                                               }
+                                               // Factor out any common suffixies.
+                                               commonlength = this.diffCommonSuffix( textInsert, textDelete );
+                                               if ( commonlength !== 0 ) {
+                                                       diffs[ pointer ][ 1 ] = textInsert.substring( textInsert.length -
+                                                                       commonlength ) + diffs[ pointer ][ 1 ];
+                                                       textInsert = textInsert.substring( 0, textInsert.length -
+                                                               commonlength );
+                                                       textDelete = textDelete.substring( 0, textDelete.length -
+                                                               commonlength );
+                                               }
+                                       }
+                                       // Delete the offending records and add the merged ones.
+                                       if ( countDelete === 0 ) {
+                                               diffs.splice( pointer - countInsert,
+                                                       countDelete + countInsert, [ DIFF_INSERT, textInsert ] );
+                                       } else if ( countInsert === 0 ) {
+                                               diffs.splice( pointer - countDelete,
+                                                       countDelete + countInsert, [ DIFF_DELETE, textDelete ] );
+                                       } else {
+                                               diffs.splice(
+                                                       pointer - countDelete - countInsert,
+                                                       countDelete + countInsert,
+                                                       [ DIFF_DELETE, textDelete ], [ DIFF_INSERT, textInsert ]
+                                               );
+                                       }
+                                       pointer = pointer - countDelete - countInsert +
+                                               ( countDelete ? 1 : 0 ) + ( countInsert ? 1 : 0 ) + 1;
+                               } else if ( pointer !== 0 && diffs[ pointer - 1 ][ 0 ] === DIFF_EQUAL ) {
 
-               for ( i = 0, l = keys.length; i < l; i++ ) {
-                       window[ keys[ i ] ] = QUnit[ keys[ i ] ];
+                                       // Merge this equality with the previous one.
+                                       diffs[ pointer - 1 ][ 1 ] += diffs[ pointer ][ 1 ];
+                                       diffs.splice( pointer, 1 );
+                               } else {
+                                       pointer++;
+                               }
+                               countInsert = 0;
+                               countDelete = 0;
+                               textDelete = "";
+                               textInsert = "";
+                               break;
+                       }
+               }
+               if ( diffs[ diffs.length - 1 ][ 1 ] === "" ) {
+                       diffs.pop(); // Remove the dummy entry at the end.
                }
-       })();
 
-       window.QUnit = QUnit;
-}
+               // Second pass: look for single edits surrounded on both sides by equalities
+               // which can be shifted sideways to eliminate an equality.
+               // e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC
+               changes = false;
+               pointer = 1;
 
-// For nodejs
-if ( typeof module !== "undefined" && module && module.exports ) {
-       module.exports = QUnit;
+               // Intentionally ignore the first and last element (don't need checking).
+               while ( pointer < diffs.length - 1 ) {
+                       if ( diffs[ pointer - 1 ][ 0 ] === DIFF_EQUAL &&
+                                       diffs[ pointer + 1 ][ 0 ] === DIFF_EQUAL ) {
 
-       // For consistency with CommonJS environments' exports
-       module.exports.QUnit = QUnit;
-}
+                               diffPointer = diffs[ pointer ][ 1 ];
+                               position = diffPointer.substring(
+                                       diffPointer.length - diffs[ pointer - 1 ][ 1 ].length
+                               );
 
-// For CommonJS with exports, but without module.exports, like Rhino
-if ( typeof exports !== "undefined" && exports ) {
-       exports.QUnit = QUnit;
-}
+                               // This is a single edit surrounded by equalities.
+                               if ( position === diffs[ pointer - 1 ][ 1 ] ) {
+
+                                       // Shift the edit over the previous equality.
+                                       diffs[ pointer ][ 1 ] = diffs[ pointer - 1 ][ 1 ] +
+                                               diffs[ pointer ][ 1 ].substring( 0, diffs[ pointer ][ 1 ].length -
+                                                       diffs[ pointer - 1 ][ 1 ].length );
+                                       diffs[ pointer + 1 ][ 1 ] =
+                                               diffs[ pointer - 1 ][ 1 ] + diffs[ pointer + 1 ][ 1 ];
+                                       diffs.splice( pointer - 1, 1 );
+                                       changes = true;
+                               } else if ( diffPointer.substring( 0, diffs[ pointer + 1 ][ 1 ].length ) ===
+                                               diffs[ pointer + 1 ][ 1 ] ) {
+
+                                       // Shift the edit over the next equality.
+                                       diffs[ pointer - 1 ][ 1 ] += diffs[ pointer + 1 ][ 1 ];
+                                       diffs[ pointer ][ 1 ] =
+                                               diffs[ pointer ][ 1 ].substring( diffs[ pointer + 1 ][ 1 ].length ) +
+                                               diffs[ pointer + 1 ][ 1 ];
+                                       diffs.splice( pointer + 1, 1 );
+                                       changes = true;
+                               }
+                       }
+                       pointer++;
+               }
+               // If shifts were made, the diff needs reordering and another shift sweep.
+               if ( changes ) {
+                       this.diffCleanupMerge( diffs );
+               }
+       };
 
-if ( typeof define === "function" && define.amd ) {
-       define( function() {
-               return QUnit;
-       } );
-       QUnit.config.autostart = false;
-}
+       return function( o, n ) {
+               var diff, output, text;
+               diff = new DiffMatchPatch();
+               output = diff.DiffMain( o, n );
+               diff.diffCleanupEfficiency( output );
+               text = diff.diffPrettyHtml( output );
+
+               return text;
+       };
+}() );
 
 // Get a reference to the global object, like window in browsers
 }( (function() {
        return this;
 })() ));
 
-/*istanbul ignore next */
-// jscs:disable maximumLineLength
-/*
- * This file is a modified version of google-diff-match-patch's JavaScript implementation
- * (https://code.google.com/p/google-diff-match-patch/source/browse/trunk/javascript/diff_match_patch_uncompressed.js),
- * modifications are licensed as more fully set forth in LICENSE.txt.
- *
- * The original source of google-diff-match-patch is attributable and licensed as follows:
- *
- * Copyright 2006 Google Inc.
- * http://code.google.com/p/google-diff-match-patch/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * More Info:
- *  https://code.google.com/p/google-diff-match-patch/
- *
- * Usage: QUnit.diff(expected, actual)
- *
- * QUnit.diff( "the quick brown fox jumped over", "the quick fox jumps over" ) === "the  quick <del>brown </del> fox jump<ins>s</ins><del>ed</del over"
- */
-QUnit.diff = (function() {
-
-    function DiffMatchPatch() {
-
-        // Defaults.
-        // Redefine these in your program to override the defaults.
-
-        // Number of seconds to map a diff before giving up (0 for infinity).
-        this.DiffTimeout = 1.0;
-        // Cost of an empty edit operation in terms of edit characters.
-        this.DiffEditCost = 4;
-    }
-
-    //  DIFF FUNCTIONS
-
-    /**
-     * The data structure representing a diff is an array of tuples:
-     * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]
-     * which means: delete 'Hello', add 'Goodbye' and keep ' world.'
-     */
-    var DIFF_DELETE = -1,
-               DIFF_INSERT = 1,
-               DIFF_EQUAL = 0;
-
-    /**
-     * Find the differences between two texts.  Simplifies the problem by stripping
-     * any common prefix or suffix off the texts before diffing.
-     * @param {string} text1 Old string to be diffed.
-     * @param {string} text2 New string to be diffed.
-     * @param {boolean=} optChecklines Optional speedup flag. If present and false,
-     *     then don't run a line-level diff first to identify the changed areas.
-     *     Defaults to true, which does a faster, slightly less optimal diff.
-     * @param {number} optDeadline Optional time when the diff should be complete
-     *     by.  Used internally for recursive calls.  Users should set DiffTimeout
-     *     instead.
-     * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
-     */
-    DiffMatchPatch.prototype.DiffMain = function( text1, text2, optChecklines, optDeadline ) {
-        var deadline, checklines, commonlength,
-                       commonprefix, commonsuffix, diffs;
-        // Set a deadline by which time the diff must be complete.
-        if ( typeof optDeadline === "undefined" ) {
-            if ( this.DiffTimeout <= 0 ) {
-                optDeadline = Number.MAX_VALUE;
-            } else {
-                optDeadline = ( new Date() ).getTime() + this.DiffTimeout * 1000;
-            }
-        }
-        deadline = optDeadline;
-
-        // Check for null inputs.
-        if ( text1 === null || text2 === null ) {
-            throw new Error( "Null input. (DiffMain)" );
-        }
-
-        // Check for equality (speedup).
-        if ( text1 === text2 ) {
-            if ( text1 ) {
-                return [
-                    [ DIFF_EQUAL, text1 ]
-                ];
-            }
-            return [];
-        }
-
-        if ( typeof optChecklines === "undefined" ) {
-            optChecklines = true;
-        }
-
-        checklines = optChecklines;
-
-        // Trim off common prefix (speedup).
-        commonlength = this.diffCommonPrefix( text1, text2 );
-        commonprefix = text1.substring( 0, commonlength );
-        text1 = text1.substring( commonlength );
-        text2 = text2.substring( commonlength );
-
-        // Trim off common suffix (speedup).
-        /////////
-        commonlength = this.diffCommonSuffix( text1, text2 );
-        commonsuffix = text1.substring( text1.length - commonlength );
-        text1 = text1.substring( 0, text1.length - commonlength );
-        text2 = text2.substring( 0, text2.length - commonlength );
-
-        // Compute the diff on the middle block.
-        diffs = this.diffCompute( text1, text2, checklines, deadline );
-
-        // Restore the prefix and suffix.
-        if ( commonprefix ) {
-            diffs.unshift( [ DIFF_EQUAL, commonprefix ] );
-        }
-        if ( commonsuffix ) {
-            diffs.push( [ DIFF_EQUAL, commonsuffix ] );
-        }
-        this.diffCleanupMerge( diffs );
-        return diffs;
-    };
-
-    /**
-     * Reduce the number of edits by eliminating operationally trivial equalities.
-     * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
-     */
-    DiffMatchPatch.prototype.diffCleanupEfficiency = function( diffs ) {
-        var changes, equalities, equalitiesLength, lastequality,
-                       pointer, preIns, preDel, postIns, postDel;
-        changes = false;
-        equalities = []; // Stack of indices where equalities are found.
-        equalitiesLength = 0; // Keeping our own length var is faster in JS.
-        /** @type {?string} */
-        lastequality = null;
-        // Always equal to diffs[equalities[equalitiesLength - 1]][1]
-        pointer = 0; // Index of current position.
-        // Is there an insertion operation before the last equality.
-        preIns = false;
-        // Is there a deletion operation before the last equality.
-        preDel = false;
-        // Is there an insertion operation after the last equality.
-        postIns = false;
-        // Is there a deletion operation after the last equality.
-        postDel = false;
-        while ( pointer < diffs.length ) {
-            if ( diffs[ pointer ][ 0 ] === DIFF_EQUAL ) { // Equality found.
-                if ( diffs[ pointer ][ 1 ].length < this.DiffEditCost && ( postIns || postDel ) ) {
-                    // Candidate found.
-                    equalities[ equalitiesLength++ ] = pointer;
-                    preIns = postIns;
-                    preDel = postDel;
-                    lastequality = diffs[ pointer ][ 1 ];
-                } else {
-                    // Not a candidate, and can never become one.
-                    equalitiesLength = 0;
-                    lastequality = null;
-                }
-                postIns = postDel = false;
-            } else { // An insertion or deletion.
-                if ( diffs[ pointer ][ 0 ] === DIFF_DELETE ) {
-                    postDel = true;
-                } else {
-                    postIns = true;
-                }
-                /*
-                 * Five types to be split:
-                 * <ins>A</ins><del>B</del>XY<ins>C</ins><del>D</del>
-                 * <ins>A</ins>X<ins>C</ins><del>D</del>
-                 * <ins>A</ins><del>B</del>X<ins>C</ins>
-                 * <ins>A</del>X<ins>C</ins><del>D</del>
-                 * <ins>A</ins><del>B</del>X<del>C</del>
-                 */
-                if ( lastequality && ( ( preIns && preDel && postIns && postDel ) ||
-                        ( ( lastequality.length < this.DiffEditCost / 2 ) &&
-                            ( preIns + preDel + postIns + postDel ) === 3 ) ) ) {
-                    // Duplicate record.
-                    diffs.splice( equalities[equalitiesLength - 1], 0, [ DIFF_DELETE, lastequality ] );
-                    // Change second copy to insert.
-                    diffs[ equalities[ equalitiesLength - 1 ] + 1 ][ 0 ] = DIFF_INSERT;
-                    equalitiesLength--; // Throw away the equality we just deleted;
-                    lastequality = null;
-                    if (preIns && preDel) {
-                        // No changes made which could affect previous entry, keep going.
-                        postIns = postDel = true;
-                        equalitiesLength = 0;
-                    } else {
-                        equalitiesLength--; // Throw away the previous equality.
-                        pointer = equalitiesLength > 0 ? equalities[ equalitiesLength - 1 ] : -1;
-                        postIns = postDel = false;
-                    }
-                    changes = true;
-                }
-            }
-            pointer++;
-        }
-
-        if ( changes ) {
-            this.diffCleanupMerge( diffs );
-        }
-    };
-
-    /**
-     * Convert a diff array into a pretty HTML report.
-     * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
-     * @param {integer} string to be beautified.
-     * @return {string} HTML representation.
-     */
-    DiffMatchPatch.prototype.diffPrettyHtml = function( diffs ) {
-        var op, data, x, html = [];
-        for ( x = 0; x < diffs.length; x++ ) {
-            op = diffs[x][0]; // Operation (insert, delete, equal)
-            data = diffs[x][1]; // Text of change.
-            switch ( op ) {
-                case DIFF_INSERT:
-                    html[x] = "<ins>" + data + "</ins>";
-                    break;
-                case DIFF_DELETE:
-                    html[x] = "<del>" + data + "</del>";
-                    break;
-                case DIFF_EQUAL:
-                    html[x] = "<span>" + data + "</span>";
-                    break;
-            }
-        }
-        return html.join("");
-    };
-
-    /**
-     * Determine the common prefix of two strings.
-     * @param {string} text1 First string.
-     * @param {string} text2 Second string.
-     * @return {number} The number of characters common to the start of each
-     *     string.
-     */
-    DiffMatchPatch.prototype.diffCommonPrefix = function( text1, text2 ) {
-        var pointermid, pointermax, pointermin, pointerstart;
-        // Quick check for common null cases.
-        if ( !text1 || !text2 || text1.charAt(0) !== text2.charAt(0) ) {
-            return 0;
-        }
-        // Binary search.
-        // Performance analysis: http://neil.fraser.name/news/2007/10/09/
-        pointermin = 0;
-        pointermax = Math.min( text1.length, text2.length );
-        pointermid = pointermax;
-        pointerstart = 0;
-        while ( pointermin < pointermid ) {
-            if ( text1.substring( pointerstart, pointermid ) === text2.substring( pointerstart, pointermid ) ) {
-                pointermin = pointermid;
-                pointerstart = pointermin;
-            } else {
-                pointermax = pointermid;
-            }
-            pointermid = Math.floor( ( pointermax - pointermin ) / 2 + pointermin );
-        }
-        return pointermid;
-    };
-
-    /**
-     * Determine the common suffix of two strings.
-     * @param {string} text1 First string.
-     * @param {string} text2 Second string.
-     * @return {number} The number of characters common to the end of each string.
-     */
-    DiffMatchPatch.prototype.diffCommonSuffix = function( text1, text2 ) {
-        var pointermid, pointermax, pointermin, pointerend;
-        // Quick check for common null cases.
-        if (!text1 || !text2 || text1.charAt(text1.length - 1) !== text2.charAt(text2.length - 1)) {
-            return 0;
-        }
-        // Binary search.
-        // Performance analysis: http://neil.fraser.name/news/2007/10/09/
-        pointermin = 0;
-        pointermax = Math.min(text1.length, text2.length);
-        pointermid = pointermax;
-        pointerend = 0;
-        while ( pointermin < pointermid ) {
-            if (text1.substring( text1.length - pointermid, text1.length - pointerend ) ===
-                text2.substring( text2.length - pointermid, text2.length - pointerend ) ) {
-                pointermin = pointermid;
-                pointerend = pointermin;
-            } else {
-                pointermax = pointermid;
-            }
-            pointermid = Math.floor( ( pointermax - pointermin ) / 2 + pointermin );
-        }
-        return pointermid;
-    };
-
-    /**
-     * Find the differences between two texts.  Assumes that the texts do not
-     * have any common prefix or suffix.
-     * @param {string} text1 Old string to be diffed.
-     * @param {string} text2 New string to be diffed.
-     * @param {boolean} checklines Speedup flag.  If false, then don't run a
-     *     line-level diff first to identify the changed areas.
-     *     If true, then run a faster, slightly less optimal diff.
-     * @param {number} deadline Time when the diff should be complete by.
-     * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
-     * @private
-     */
-    DiffMatchPatch.prototype.diffCompute = function( text1, text2, checklines, deadline ) {
-        var diffs, longtext, shorttext, i, hm,
-                       text1A, text2A, text1B, text2B,
-                       midCommon, diffsA, diffsB;
-
-        if ( !text1 ) {
-            // Just add some text (speedup).
-            return [
-                [ DIFF_INSERT, text2 ]
-            ];
-        }
-
-        if (!text2) {
-            // Just delete some text (speedup).
-            return [
-                [ DIFF_DELETE, text1 ]
-            ];
-        }
-
-        longtext = text1.length > text2.length ? text1 : text2;
-        shorttext = text1.length > text2.length ? text2 : text1;
-        i = longtext.indexOf( shorttext );
-        if ( i !== -1 ) {
-            // Shorter text is inside the longer text (speedup).
-            diffs = [
-                [ DIFF_INSERT, longtext.substring( 0, i ) ],
-                [ DIFF_EQUAL, shorttext ],
-                [ DIFF_INSERT, longtext.substring( i + shorttext.length ) ]
-            ];
-            // Swap insertions for deletions if diff is reversed.
-            if ( text1.length > text2.length ) {
-                diffs[0][0] = diffs[2][0] = DIFF_DELETE;
-            }
-            return diffs;
-        }
-
-        if ( shorttext.length === 1 ) {
-            // Single character string.
-            // After the previous speedup, the character can't be an equality.
-            return [
-                [ DIFF_DELETE, text1 ],
-                [ DIFF_INSERT, text2 ]
-            ];
-        }
-
-        // Check to see if the problem can be split in two.
-        hm = this.diffHalfMatch(text1, text2);
-        if (hm) {
-            // A half-match was found, sort out the return data.
-            text1A = hm[0];
-            text1B = hm[1];
-            text2A = hm[2];
-            text2B = hm[3];
-            midCommon = hm[4];
-            // Send both pairs off for separate processing.
-            diffsA = this.DiffMain(text1A, text2A, checklines, deadline);
-            diffsB = this.DiffMain(text1B, text2B, checklines, deadline);
-            // Merge the results.
-            return diffsA.concat([
-                [ DIFF_EQUAL, midCommon ]
-            ], diffsB);
-        }
-
-        if (checklines && text1.length > 100 && text2.length > 100) {
-            return this.diffLineMode(text1, text2, deadline);
-        }
-
-        return this.diffBisect(text1, text2, deadline);
-    };
-
-    /**
-     * Do the two texts share a substring which is at least half the length of the
-     * longer text?
-     * This speedup can produce non-minimal diffs.
-     * @param {string} text1 First string.
-     * @param {string} text2 Second string.
-     * @return {Array.<string>} Five element Array, containing the prefix of
-     *     text1, the suffix of text1, the prefix of text2, the suffix of
-     *     text2 and the common middle.  Or null if there was no match.
-     * @private
-     */
-    DiffMatchPatch.prototype.diffHalfMatch = function(text1, text2) {
-        var longtext, shorttext, dmp,
-                       text1A, text2B, text2A, text1B, midCommon,
-                       hm1, hm2, hm;
-        if (this.DiffTimeout <= 0) {
-            // Don't risk returning a non-optimal diff if we have unlimited time.
-            return null;
-        }
-        longtext = text1.length > text2.length ? text1 : text2;
-        shorttext = text1.length > text2.length ? text2 : text1;
-        if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {
-            return null; // Pointless.
-        }
-        dmp = this; // 'this' becomes 'window' in a closure.
-
-        /**
-         * Does a substring of shorttext exist within longtext such that the substring
-         * is at least half the length of longtext?
-         * Closure, but does not reference any external variables.
-         * @param {string} longtext Longer string.
-         * @param {string} shorttext Shorter string.
-         * @param {number} i Start index of quarter length substring within longtext.
-         * @return {Array.<string>} Five element Array, containing the prefix of
-         *     longtext, the suffix of longtext, the prefix of shorttext, the suffix
-         *     of shorttext and the common middle.  Or null if there was no match.
-         * @private
-         */
-        function diffHalfMatchI(longtext, shorttext, i) {
-            var seed, j, bestCommon, prefixLength, suffixLength,
-                               bestLongtextA, bestLongtextB, bestShorttextA, bestShorttextB;
-            // Start with a 1/4 length substring at position i as a seed.
-            seed = longtext.substring(i, i + Math.floor(longtext.length / 4));
-            j = -1;
-            bestCommon = "";
-            while ((j = shorttext.indexOf(seed, j + 1)) !== -1) {
-                prefixLength = dmp.diffCommonPrefix(longtext.substring(i),
-                    shorttext.substring(j));
-                suffixLength = dmp.diffCommonSuffix(longtext.substring(0, i),
-                    shorttext.substring(0, j));
-                if (bestCommon.length < suffixLength + prefixLength) {
-                    bestCommon = shorttext.substring(j - suffixLength, j) +
-                        shorttext.substring(j, j + prefixLength);
-                    bestLongtextA = longtext.substring(0, i - suffixLength);
-                    bestLongtextB = longtext.substring(i + prefixLength);
-                    bestShorttextA = shorttext.substring(0, j - suffixLength);
-                    bestShorttextB = shorttext.substring(j + prefixLength);
-                }
-            }
-            if (bestCommon.length * 2 >= longtext.length) {
-                return [ bestLongtextA, bestLongtextB,
-                    bestShorttextA, bestShorttextB, bestCommon
-                ];
-            } else {
-                return null;
-            }
-        }
-
-        // First check if the second quarter is the seed for a half-match.
-        hm1 = diffHalfMatchI(longtext, shorttext,
-            Math.ceil(longtext.length / 4));
-        // Check again based on the third quarter.
-        hm2 = diffHalfMatchI(longtext, shorttext,
-            Math.ceil(longtext.length / 2));
-        if (!hm1 && !hm2) {
-            return null;
-        } else if (!hm2) {
-            hm = hm1;
-        } else if (!hm1) {
-            hm = hm2;
-        } else {
-            // Both matched.  Select the longest.
-            hm = hm1[4].length > hm2[4].length ? hm1 : hm2;
-        }
-
-        // A half-match was found, sort out the return data.
-        text1A, text1B, text2A, text2B;
-        if (text1.length > text2.length) {
-            text1A = hm[0];
-            text1B = hm[1];
-            text2A = hm[2];
-            text2B = hm[3];
-        } else {
-            text2A = hm[0];
-            text2B = hm[1];
-            text1A = hm[2];
-            text1B = hm[3];
-        }
-        midCommon = hm[4];
-        return [ text1A, text1B, text2A, text2B, midCommon ];
-    };
-
-    /**
-     * Do a quick line-level diff on both strings, then rediff the parts for
-     * greater accuracy.
-     * This speedup can produce non-minimal diffs.
-     * @param {string} text1 Old string to be diffed.
-     * @param {string} text2 New string to be diffed.
-     * @param {number} deadline Time when the diff should be complete by.
-     * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
-     * @private
-     */
-    DiffMatchPatch.prototype.diffLineMode = function(text1, text2, deadline) {
-        var a, diffs, linearray, pointer, countInsert,
-                       countDelete, textInsert, textDelete, j;
-        // Scan the text on a line-by-line basis first.
-        a = this.diffLinesToChars(text1, text2);
-        text1 = a.chars1;
-        text2 = a.chars2;
-        linearray = a.lineArray;
-
-        diffs = this.DiffMain(text1, text2, false, deadline);
-
-        // Convert the diff back to original text.
-        this.diffCharsToLines(diffs, linearray);
-        // Eliminate freak matches (e.g. blank lines)
-        this.diffCleanupSemantic(diffs);
-
-        // Rediff any replacement blocks, this time character-by-character.
-        // Add a dummy entry at the end.
-        diffs.push( [ DIFF_EQUAL, "" ] );
-        pointer = 0;
-        countDelete = 0;
-        countInsert = 0;
-        textDelete = "";
-        textInsert = "";
-        while (pointer < diffs.length) {
-            switch ( diffs[pointer][0] ) {
-                case DIFF_INSERT:
-                    countInsert++;
-                    textInsert += diffs[pointer][1];
-                    break;
-                case DIFF_DELETE:
-                    countDelete++;
-                    textDelete += diffs[pointer][1];
-                    break;
-                case DIFF_EQUAL:
-                    // Upon reaching an equality, check for prior redundancies.
-                    if (countDelete >= 1 && countInsert >= 1) {
-                        // Delete the offending records and add the merged ones.
-                        diffs.splice(pointer - countDelete - countInsert,
-                            countDelete + countInsert);
-                        pointer = pointer - countDelete - countInsert;
-                        a = this.DiffMain(textDelete, textInsert, false, deadline);
-                        for (j = a.length - 1; j >= 0; j--) {
-                            diffs.splice( pointer, 0, a[j] );
-                        }
-                        pointer = pointer + a.length;
-                    }
-                    countInsert = 0;
-                    countDelete = 0;
-                    textDelete = "";
-                    textInsert = "";
-                    break;
-            }
-            pointer++;
-        }
-        diffs.pop(); // Remove the dummy entry at the end.
-
-        return diffs;
-    };
-
-    /**
-     * Find the 'middle snake' of a diff, split the problem in two
-     * and return the recursively constructed diff.
-     * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.
-     * @param {string} text1 Old string to be diffed.
-     * @param {string} text2 New string to be diffed.
-     * @param {number} deadline Time at which to bail if not yet complete.
-     * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
-     * @private
-     */
-    DiffMatchPatch.prototype.diffBisect = function(text1, text2, deadline) {
-        var text1Length, text2Length, maxD, vOffset, vLength,
-                       v1, v2, x, delta, front, k1start, k1end, k2start,
-                       k2end, k2Offset, k1Offset, x1, x2, y1, y2, d, k1, k2;
-        // Cache the text lengths to prevent multiple calls.
-        text1Length = text1.length;
-        text2Length = text2.length;
-        maxD = Math.ceil((text1Length + text2Length) / 2);
-        vOffset = maxD;
-        vLength = 2 * maxD;
-        v1 = new Array(vLength);
-        v2 = new Array(vLength);
-        // Setting all elements to -1 is faster in Chrome & Firefox than mixing
-        // integers and undefined.
-        for (x = 0; x < vLength; x++) {
-            v1[x] = -1;
-            v2[x] = -1;
-        }
-        v1[vOffset + 1] = 0;
-        v2[vOffset + 1] = 0;
-        delta = text1Length - text2Length;
-        // If the total number of characters is odd, then the front path will collide
-        // with the reverse path.
-        front = (delta % 2 !== 0);
-        // Offsets for start and end of k loop.
-        // Prevents mapping of space beyond the grid.
-        k1start = 0;
-        k1end = 0;
-        k2start = 0;
-        k2end = 0;
-        for (d = 0; d < maxD; d++) {
-            // Bail out if deadline is reached.
-            if ((new Date()).getTime() > deadline) {
-                break;
-            }
-
-            // Walk the front path one step.
-            for (k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {
-                k1Offset = vOffset + k1;
-                if ( k1 === -d || ( k1 !== d && v1[ k1Offset - 1 ] < v1[ k1Offset + 1 ] ) ) {
-                    x1 = v1[k1Offset + 1];
-                } else {
-                    x1 = v1[k1Offset - 1] + 1;
-                }
-                y1 = x1 - k1;
-                while (x1 < text1Length && y1 < text2Length &&
-                    text1.charAt(x1) === text2.charAt(y1)) {
-                    x1++;
-                    y1++;
-                }
-                v1[k1Offset] = x1;
-                if (x1 > text1Length) {
-                    // Ran off the right of the graph.
-                    k1end += 2;
-                } else if (y1 > text2Length) {
-                    // Ran off the bottom of the graph.
-                    k1start += 2;
-                } else if (front) {
-                    k2Offset = vOffset + delta - k1;
-                    if (k2Offset >= 0 && k2Offset < vLength && v2[k2Offset] !== -1) {
-                        // Mirror x2 onto top-left coordinate system.
-                        x2 = text1Length - v2[k2Offset];
-                        if (x1 >= x2) {
-                            // Overlap detected.
-                            return this.diffBisectSplit(text1, text2, x1, y1, deadline);
-                        }
-                    }
-                }
-            }
-
-            // Walk the reverse path one step.
-            for (k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {
-                k2Offset = vOffset + k2;
-                if ( k2 === -d || (k2 !== d && v2[ k2Offset - 1 ] < v2[ k2Offset + 1 ] ) ) {
-                    x2 = v2[k2Offset + 1];
-                } else {
-                    x2 = v2[k2Offset - 1] + 1;
-                }
-                y2 = x2 - k2;
-                while (x2 < text1Length && y2 < text2Length &&
-                    text1.charAt(text1Length - x2 - 1) ===
-                    text2.charAt(text2Length - y2 - 1)) {
-                    x2++;
-                    y2++;
-                }
-                v2[k2Offset] = x2;
-                if (x2 > text1Length) {
-                    // Ran off the left of the graph.
-                    k2end += 2;
-                } else if (y2 > text2Length) {
-                    // Ran off the top of the graph.
-                    k2start += 2;
-                } else if (!front) {
-                    k1Offset = vOffset + delta - k2;
-                    if (k1Offset >= 0 && k1Offset < vLength && v1[k1Offset] !== -1) {
-                        x1 = v1[k1Offset];
-                        y1 = vOffset + x1 - k1Offset;
-                        // Mirror x2 onto top-left coordinate system.
-                        x2 = text1Length - x2;
-                        if (x1 >= x2) {
-                            // Overlap detected.
-                            return this.diffBisectSplit(text1, text2, x1, y1, deadline);
-                        }
-                    }
-                }
-            }
-        }
-        // Diff took too long and hit the deadline or
-        // number of diffs equals number of characters, no commonality at all.
-        return [
-            [ DIFF_DELETE, text1 ],
-            [ DIFF_INSERT, text2 ]
-        ];
-    };
-
-    /**
-     * Given the location of the 'middle snake', split the diff in two parts
-     * and recurse.
-     * @param {string} text1 Old string to be diffed.
-     * @param {string} text2 New string to be diffed.
-     * @param {number} x Index of split point in text1.
-     * @param {number} y Index of split point in text2.
-     * @param {number} deadline Time at which to bail if not yet complete.
-     * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
-     * @private
-     */
-    DiffMatchPatch.prototype.diffBisectSplit = function( text1, text2, x, y, deadline ) {
-        var text1a, text1b, text2a, text2b, diffs, diffsb;
-        text1a = text1.substring(0, x);
-        text2a = text2.substring(0, y);
-        text1b = text1.substring(x);
-        text2b = text2.substring(y);
-
-        // Compute both diffs serially.
-        diffs = this.DiffMain(text1a, text2a, false, deadline);
-        diffsb = this.DiffMain(text1b, text2b, false, deadline);
-
-        return diffs.concat(diffsb);
-    };
-
-    /**
-     * Reduce the number of edits by eliminating semantically trivial equalities.
-     * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
-     */
-    DiffMatchPatch.prototype.diffCleanupSemantic = function(diffs) {
-        var changes, equalities, equalitiesLength, lastequality,
-                       pointer, lengthInsertions2, lengthDeletions2, lengthInsertions1,
-                       lengthDeletions1, deletion, insertion, overlapLength1, overlapLength2;
-        changes = false;
-        equalities = []; // Stack of indices where equalities are found.
-        equalitiesLength = 0; // Keeping our own length var is faster in JS.
-        /** @type {?string} */
-        lastequality = null;
-        // Always equal to diffs[equalities[equalitiesLength - 1]][1]
-        pointer = 0; // Index of current position.
-        // Number of characters that changed prior to the equality.
-        lengthInsertions1 = 0;
-        lengthDeletions1 = 0;
-        // Number of characters that changed after the equality.
-        lengthInsertions2 = 0;
-        lengthDeletions2 = 0;
-        while (pointer < diffs.length) {
-            if (diffs[pointer][0] === DIFF_EQUAL) { // Equality found.
-                equalities[equalitiesLength++] = pointer;
-                lengthInsertions1 = lengthInsertions2;
-                lengthDeletions1 = lengthDeletions2;
-                lengthInsertions2 = 0;
-                lengthDeletions2 = 0;
-                lastequality = diffs[pointer][1];
-            } else { // An insertion or deletion.
-                if (diffs[pointer][0] === DIFF_INSERT) {
-                    lengthInsertions2 += diffs[pointer][1].length;
-                } else {
-                    lengthDeletions2 += diffs[pointer][1].length;
-                }
-                // Eliminate an equality that is smaller or equal to the edits on both
-                // sides of it.
-                if (lastequality && (lastequality.length <=
-                        Math.max(lengthInsertions1, lengthDeletions1)) &&
-                    (lastequality.length <= Math.max(lengthInsertions2,
-                        lengthDeletions2))) {
-                    // Duplicate record.
-                    diffs.splice( equalities[ equalitiesLength - 1 ], 0, [ DIFF_DELETE, lastequality ] );
-                    // Change second copy to insert.
-                    diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;
-                    // Throw away the equality we just deleted.
-                    equalitiesLength--;
-                    // Throw away the previous equality (it needs to be reevaluated).
-                    equalitiesLength--;
-                    pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;
-                    lengthInsertions1 = 0; // Reset the counters.
-                    lengthDeletions1 = 0;
-                    lengthInsertions2 = 0;
-                    lengthDeletions2 = 0;
-                    lastequality = null;
-                    changes = true;
-                }
-            }
-            pointer++;
-        }
-
-        // Normalize the diff.
-        if (changes) {
-            this.diffCleanupMerge(diffs);
-        }
-
-        // Find any overlaps between deletions and insertions.
-        // e.g: <del>abcxxx</del><ins>xxxdef</ins>
-        //   -> <del>abc</del>xxx<ins>def</ins>
-        // e.g: <del>xxxabc</del><ins>defxxx</ins>
-        //   -> <ins>def</ins>xxx<del>abc</del>
-        // Only extract an overlap if it is as big as the edit ahead or behind it.
-        pointer = 1;
-        while (pointer < diffs.length) {
-            if (diffs[pointer - 1][0] === DIFF_DELETE &&
-                diffs[pointer][0] === DIFF_INSERT) {
-                deletion = diffs[pointer - 1][1];
-                insertion = diffs[pointer][1];
-                overlapLength1 = this.diffCommonOverlap(deletion, insertion);
-                overlapLength2 = this.diffCommonOverlap(insertion, deletion);
-                if (overlapLength1 >= overlapLength2) {
-                    if (overlapLength1 >= deletion.length / 2 ||
-                        overlapLength1 >= insertion.length / 2) {
-                        // Overlap found.  Insert an equality and trim the surrounding edits.
-                        diffs.splice( pointer, 0, [ DIFF_EQUAL, insertion.substring( 0, overlapLength1 ) ] );
-                        diffs[pointer - 1][1] =
-                            deletion.substring(0, deletion.length - overlapLength1);
-                        diffs[pointer + 1][1] = insertion.substring(overlapLength1);
-                        pointer++;
-                    }
-                } else {
-                    if (overlapLength2 >= deletion.length / 2 ||
-                        overlapLength2 >= insertion.length / 2) {
-                        // Reverse overlap found.
-                        // Insert an equality and swap and trim the surrounding edits.
-                        diffs.splice( pointer, 0, [ DIFF_EQUAL, deletion.substring( 0, overlapLength2 ) ] );
-                        diffs[pointer - 1][0] = DIFF_INSERT;
-                        diffs[pointer - 1][1] =
-                            insertion.substring(0, insertion.length - overlapLength2);
-                        diffs[pointer + 1][0] = DIFF_DELETE;
-                        diffs[pointer + 1][1] =
-                            deletion.substring(overlapLength2);
-                        pointer++;
-                    }
-                }
-                pointer++;
-            }
-            pointer++;
-        }
-    };
-
-    /**
-     * Determine if the suffix of one string is the prefix of another.
-     * @param {string} text1 First string.
-     * @param {string} text2 Second string.
-     * @return {number} The number of characters common to the end of the first
-     *     string and the start of the second string.
-     * @private
-     */
-    DiffMatchPatch.prototype.diffCommonOverlap = function(text1, text2) {
-        var text1Length, text2Length, textLength,
-                       best, length, pattern, found;
-        // Cache the text lengths to prevent multiple calls.
-        text1Length = text1.length;
-        text2Length = text2.length;
-        // Eliminate the null case.
-        if (text1Length === 0 || text2Length === 0) {
-            return 0;
-        }
-        // Truncate the longer string.
-        if (text1Length > text2Length) {
-            text1 = text1.substring(text1Length - text2Length);
-        } else if (text1Length < text2Length) {
-            text2 = text2.substring(0, text1Length);
-        }
-        textLength = Math.min(text1Length, text2Length);
-        // Quick check for the worst case.
-        if (text1 === text2) {
-            return textLength;
-        }
-
-        // Start by looking for a single character match
-        // and increase length until no match is found.
-        // Performance analysis: http://neil.fraser.name/news/2010/11/04/
-        best = 0;
-        length = 1;
-        while (true) {
-            pattern = text1.substring(textLength - length);
-            found = text2.indexOf(pattern);
-            if (found === -1) {
-                return best;
-            }
-            length += found;
-            if (found === 0 || text1.substring(textLength - length) ===
-                text2.substring(0, length)) {
-                best = length;
-                length++;
-            }
-        }
-    };
-
-    /**
-     * Split two texts into an array of strings.  Reduce the texts to a string of
-     * hashes where each Unicode character represents one line.
-     * @param {string} text1 First string.
-     * @param {string} text2 Second string.
-     * @return {{chars1: string, chars2: string, lineArray: !Array.<string>}}
-     *     An object containing the encoded text1, the encoded text2 and
-     *     the array of unique strings.
-     *     The zeroth element of the array of unique strings is intentionally blank.
-     * @private
-     */
-    DiffMatchPatch.prototype.diffLinesToChars = function(text1, text2) {
-        var lineArray, lineHash, chars1, chars2;
-        lineArray = []; // e.g. lineArray[4] === 'Hello\n'
-        lineHash = {}; // e.g. lineHash['Hello\n'] === 4
-
-        // '\x00' is a valid character, but various debuggers don't like it.
-        // So we'll insert a junk entry to avoid generating a null character.
-        lineArray[0] = "";
-
-        /**
-         * Split a text into an array of strings.  Reduce the texts to a string of
-         * hashes where each Unicode character represents one line.
-         * Modifies linearray and linehash through being a closure.
-         * @param {string} text String to encode.
-         * @return {string} Encoded string.
-         * @private
-         */
-        function diffLinesToCharsMunge(text) {
-            var chars, lineStart, lineEnd, lineArrayLength, line;
-            chars = "";
-            // Walk the text, pulling out a substring for each line.
-            // text.split('\n') would would temporarily double our memory footprint.
-            // Modifying text would create many large strings to garbage collect.
-            lineStart = 0;
-            lineEnd = -1;
-            // Keeping our own length variable is faster than looking it up.
-            lineArrayLength = lineArray.length;
-            while (lineEnd < text.length - 1) {
-                lineEnd = text.indexOf("\n", lineStart);
-                if (lineEnd === -1) {
-                    lineEnd = text.length - 1;
-                }
-                line = text.substring(lineStart, lineEnd + 1);
-                lineStart = lineEnd + 1;
-
-                if (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) :
-                    (lineHash[line] !== undefined)) {
-                    chars += String.fromCharCode( lineHash[ line ] );
-                } else {
-                    chars += String.fromCharCode(lineArrayLength);
-                    lineHash[line] = lineArrayLength;
-                    lineArray[lineArrayLength++] = line;
-                }
-            }
-            return chars;
-        }
-
-        chars1 = diffLinesToCharsMunge(text1);
-        chars2 = diffLinesToCharsMunge(text2);
-        return {
-            chars1: chars1,
-            chars2: chars2,
-            lineArray: lineArray
-        };
-    };
-
-    /**
-     * Rehydrate the text in a diff from a string of line hashes to real lines of
-     * text.
-     * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
-     * @param {!Array.<string>} lineArray Array of unique strings.
-     * @private
-     */
-    DiffMatchPatch.prototype.diffCharsToLines = function( diffs, lineArray ) {
-        var x, chars, text, y;
-        for ( x = 0; x < diffs.length; x++ ) {
-            chars = diffs[x][1];
-            text = [];
-            for ( y = 0; y < chars.length; y++ ) {
-                text[y] = lineArray[chars.charCodeAt(y)];
-            }
-            diffs[x][1] = text.join("");
-        }
-    };
-
-    /**
-     * Reorder and merge like edit sections.  Merge equalities.
-     * Any edit section can move as long as it doesn't cross an equality.
-     * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
-     */
-    DiffMatchPatch.prototype.diffCleanupMerge = function(diffs) {
-        var pointer, countDelete, countInsert, textInsert, textDelete,
-                       commonlength, changes;
-        diffs.push( [ DIFF_EQUAL, "" ] ); // Add a dummy entry at the end.
-        pointer = 0;
-        countDelete = 0;
-        countInsert = 0;
-        textDelete = "";
-        textInsert = "";
-        commonlength;
-        while (pointer < diffs.length) {
-            switch ( diffs[ pointer ][ 0 ] ) {
-                case DIFF_INSERT:
-                    countInsert++;
-                    textInsert += diffs[pointer][1];
-                    pointer++;
-                    break;
-                case DIFF_DELETE:
-                    countDelete++;
-                    textDelete += diffs[pointer][1];
-                    pointer++;
-                    break;
-                case DIFF_EQUAL:
-                    // Upon reaching an equality, check for prior redundancies.
-                    if (countDelete + countInsert > 1) {
-                        if (countDelete !== 0 && countInsert !== 0) {
-                            // Factor out any common prefixies.
-                            commonlength = this.diffCommonPrefix(textInsert, textDelete);
-                            if (commonlength !== 0) {
-                                if ((pointer - countDelete - countInsert) > 0 &&
-                                    diffs[pointer - countDelete - countInsert - 1][0] ===
-                                    DIFF_EQUAL) {
-                                    diffs[pointer - countDelete - countInsert - 1][1] +=
-                                        textInsert.substring(0, commonlength);
-                                } else {
-                                    diffs.splice( 0, 0, [ DIFF_EQUAL,
-                                        textInsert.substring( 0, commonlength )
-                                     ] );
-                                    pointer++;
-                                }
-                                textInsert = textInsert.substring(commonlength);
-                                textDelete = textDelete.substring(commonlength);
-                            }
-                            // Factor out any common suffixies.
-                            commonlength = this.diffCommonSuffix(textInsert, textDelete);
-                            if (commonlength !== 0) {
-                                diffs[pointer][1] = textInsert.substring(textInsert.length -
-                                    commonlength) + diffs[pointer][1];
-                                textInsert = textInsert.substring(0, textInsert.length -
-                                    commonlength);
-                                textDelete = textDelete.substring(0, textDelete.length -
-                                    commonlength);
-                            }
-                        }
-                        // Delete the offending records and add the merged ones.
-                        if (countDelete === 0) {
-                            diffs.splice( pointer - countInsert,
-                                countDelete + countInsert, [ DIFF_INSERT, textInsert ] );
-                        } else if (countInsert === 0) {
-                            diffs.splice( pointer - countDelete,
-                                countDelete + countInsert, [ DIFF_DELETE, textDelete ] );
-                        } else {
-                            diffs.splice( pointer - countDelete - countInsert,
-                                countDelete + countInsert, [ DIFF_DELETE, textDelete ], [ DIFF_INSERT, textInsert ] );
-                        }
-                        pointer = pointer - countDelete - countInsert +
-                            (countDelete ? 1 : 0) + (countInsert ? 1 : 0) + 1;
-                    } else if (pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL) {
-                        // Merge this equality with the previous one.
-                        diffs[pointer - 1][1] += diffs[pointer][1];
-                        diffs.splice(pointer, 1);
-                    } else {
-                        pointer++;
-                    }
-                    countInsert = 0;
-                    countDelete = 0;
-                    textDelete = "";
-                    textInsert = "";
-                    break;
-            }
-        }
-        if (diffs[diffs.length - 1][1] === "") {
-            diffs.pop(); // Remove the dummy entry at the end.
-        }
-
-        // Second pass: look for single edits surrounded on both sides by equalities
-        // which can be shifted sideways to eliminate an equality.
-        // e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC
-        changes = false;
-        pointer = 1;
-        // Intentionally ignore the first and last element (don't need checking).
-        while (pointer < diffs.length - 1) {
-            if (diffs[pointer - 1][0] === DIFF_EQUAL &&
-                diffs[pointer + 1][0] === DIFF_EQUAL) {
-                // This is a single edit surrounded by equalities.
-                if ( diffs[ pointer ][ 1 ].substring( diffs[ pointer ][ 1 ].length -
-                        diffs[ pointer - 1 ][ 1 ].length ) === diffs[ pointer - 1 ][ 1 ] ) {
-                    // Shift the edit over the previous equality.
-                    diffs[pointer][1] = diffs[pointer - 1][1] +
-                        diffs[pointer][1].substring(0, diffs[pointer][1].length -
-                            diffs[pointer - 1][1].length);
-                    diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];
-                    diffs.splice(pointer - 1, 1);
-                    changes = true;
-                } else if ( diffs[ pointer ][ 1 ].substring( 0, diffs[ pointer + 1 ][ 1 ].length ) ===
-                    diffs[ pointer + 1 ][ 1 ] ) {
-                    // Shift the edit over the next equality.
-                    diffs[pointer - 1][1] += diffs[pointer + 1][1];
-                    diffs[pointer][1] =
-                        diffs[pointer][1].substring(diffs[pointer + 1][1].length) +
-                        diffs[pointer + 1][1];
-                    diffs.splice(pointer + 1, 1);
-                    changes = true;
-                }
-            }
-            pointer++;
-        }
-        // If shifts were made, the diff needs reordering and another shift sweep.
-        if (changes) {
-            this.diffCleanupMerge(diffs);
-        }
-    };
-
-    return function(o, n) {
-               var diff, output, text;
-        diff = new DiffMatchPatch();
-        output = diff.DiffMain(o, n);
-        //console.log(output);
-        diff.diffCleanupEfficiency(output);
-        text = diff.diffPrettyHtml(output);
-
-        return text;
-    };
-}());
-// jscs:enable
-
 (function() {
 
+// Don't load the HTML Reporter on non-Browser environments
+if ( typeof window === "undefined" || !window.document ) {
+       return;
+}
+
 // Deprecated QUnit.init - Ref #530
 // Re-initialize the configuration options
 QUnit.init = function() {
@@ -3115,12 +3427,8 @@ QUnit.init = function() {
        }
 };
 
-// Don't load the HTML Reporter on non-Browser environments
-if ( typeof window === "undefined" ) {
-       return;
-}
-
 var config = QUnit.config,
+       collapseNext = false,
        hasOwn = Object.prototype.hasOwnProperty,
        defined = {
                document: window.document !== undefined,
@@ -3479,7 +3787,7 @@ function appendHeader() {
 
        if ( header ) {
                header.innerHTML = "<a href='" +
-                       setUrl({ filter: undefined, module: undefined, testId: undefined }) +
+                       escapeText( setUrl( { filter: undefined, module: undefined, testId: undefined } ) ) +
                        "'>" + header.innerHTML + "</a> ";
        }
 }
@@ -3517,6 +3825,18 @@ function storeFixture() {
        }
 }
 
+function appendFilteredTest() {
+       var testId = QUnit.config.testId;
+       if ( !testId || testId.length <= 0 ) {
+               return "";
+       }
+       return "<div id='qunit-filteredTest'>Rerunning selected tests: " +
+               escapeText( testId.join(", ") ) +
+               " <a id='qunit-clearFilter' href='" +
+               escapeText( setUrl( { filter: undefined, module: undefined, testId: undefined } ) ) +
+               "'>" + "Run all tests" + "</a></div>";
+}
+
 function appendUserAgent() {
        var userAgent = id( "qunit-userAgent" );
 
@@ -3524,7 +3844,7 @@ function appendUserAgent() {
                userAgent.innerHTML = "";
                userAgent.appendChild(
                        document.createTextNode(
-                               "QUnit " + QUnit.version  + "; " + navigator.userAgent
+                               "QUnit " + QUnit.version + "; " + navigator.userAgent
                        )
                );
        }
@@ -3588,6 +3908,7 @@ QUnit.begin(function( details ) {
                        "<h1 id='qunit-header'>" + escapeText( document.title ) + "</h1>" +
                        "<h2 id='qunit-banner'></h2>" +
                        "<div id='qunit-testrunner-toolbar'></div>" +
+                       appendFilteredTest() +
                        "<h2 id='qunit-userAgent'></h2>" +
                        "<ol id='qunit-tests'></ol>";
        }
@@ -3693,9 +4014,15 @@ QUnit.testStart(function( details ) {
 
 });
 
+function stripHtml( string ) {
+       // strip tags, html entity and whitespaces
+       return string.replace(/<\/?[^>]+(>|$)/g, "").replace(/\&quot;/g, "").replace(/\s+/g, "");
+}
+
 QUnit.log(function( details ) {
        var assertList, assertLi,
-               message, expected, actual,
+               message, expected, actual, diff,
+               showDiff = false,
                testItem = id( "qunit-test-output-" + details.testId );
 
        if ( !testItem ) {
@@ -3710,26 +4037,44 @@ QUnit.log(function( details ) {
        // when it calls, it's implicit to also not show expected and diff stuff
        // Also, we need to check details.expected existence, as it can exist and be undefined
        if ( !details.result && hasOwn.call( details, "expected" ) ) {
-               expected = escapeText( QUnit.dump.parse( details.expected ) );
+               if ( details.negative ) {
+                       expected = escapeText( "NOT " + QUnit.dump.parse( details.expected ) );
+               } else {
+                       expected = escapeText( QUnit.dump.parse( details.expected ) );
+               }
+
                actual = escapeText( QUnit.dump.parse( details.actual ) );
                message += "<table><tr class='test-expected'><th>Expected: </th><td><pre>" +
                        expected +
                        "</pre></td></tr>";
 
                if ( actual !== expected ) {
+
                        message += "<tr class='test-actual'><th>Result: </th><td><pre>" +
-                               actual + "</pre></td></tr>" +
-                               "<tr class='test-diff'><th>Diff: </th><td><pre>" +
-                               QUnit.diff( expected, actual ) + "</pre></td></tr>";
-               } else {
-                       if ( expected.indexOf( "[object Array]" ) !== -1 ||
-                                       expected.indexOf( "[object Object]" ) !== -1 ) {
-                               message += "<tr class='test-message'><th>Message: </th><td>" +
-                                       "Diff suppressed as the depth of object is more than current max depth (" +
-                                       QUnit.config.maxDepth + ").<p>Hint: Use <code>QUnit.dump.maxDepth</code> to " +
-                                       " run with a higher max depth or <a href='" + setUrl({ maxDepth: -1 }) + "'>" +
-                                       "Rerun</a> without max depth.</p></td></tr>";
+                               actual + "</pre></td></tr>";
+
+                       // Don't show diff if actual or expected are booleans
+                       if ( !( /^(true|false)$/.test( actual ) ) &&
+                                       !( /^(true|false)$/.test( expected ) ) ) {
+                               diff = QUnit.diff( expected, actual );
+                               showDiff = stripHtml( diff ).length !==
+                                       stripHtml( expected ).length +
+                                       stripHtml( actual ).length;
+                       }
+
+                       // Don't show diff if expected and actual are totally different
+                       if ( showDiff ) {
+                               message += "<tr class='test-diff'><th>Diff: </th><td><pre>" +
+                                       diff + "</pre></td></tr>";
                        }
+               } else if ( expected.indexOf( "[object Array]" ) !== -1 ||
+                               expected.indexOf( "[object Object]" ) !== -1 ) {
+                       message += "<tr class='test-message'><th>Message: </th><td>" +
+                               "Diff suppressed as the depth of object is more than current max depth (" +
+                               QUnit.config.maxDepth + ").<p>Hint: Use <code>QUnit.dump.maxDepth</code> to " +
+                               " run with a higher max depth or <a href='" +
+                               escapeText( setUrl( { maxDepth: -1 } ) ) + "'>" +
+                               "Rerun</a> without max depth.</p></td></tr>";
                }
 
                if ( details.source ) {
@@ -3739,7 +4084,7 @@ QUnit.log(function( details ) {
 
                message += "</table>";
 
-       // this occours when pushFailure is set and we have an extracted stack trace
+       // this occurs when pushFailure is set and we have an extracted stack trace
        } else if ( !details.result && details.source ) {
                message += "<table>" +
                        "<tr class='test-source'><th>Source: </th><td><pre>" +
@@ -3757,7 +4102,7 @@ QUnit.log(function( details ) {
 
 QUnit.testDone(function( details ) {
        var testTitle, time, testItem, assertList,
-               good, bad, testCounts, skipped,
+               good, bad, testCounts, skipped, sourceName,
                tests = id( "qunit-tests" );
 
        if ( !tests ) {
@@ -3781,6 +4126,16 @@ QUnit.testDone(function( details ) {
        }
 
        if ( bad === 0 ) {
+
+               // Collapse the passing tests
+               addClass( assertList, "qunit-collapsed" );
+       } else if ( bad && config.collapse && !collapseNext ) {
+
+               // Skip collapsing the first failing test
+               collapseNext = true;
+       } else {
+
+               // Collapse remaining tests
                addClass( assertList, "qunit-collapsed" );
        }
 
@@ -3812,10 +4167,31 @@ QUnit.testDone(function( details ) {
                time.innerHTML = details.runtime + " ms";
                testItem.insertBefore( time, assertList );
        }
+
+       // Show the source of the test when showing assertions
+       if ( details.source ) {
+               sourceName = document.createElement( "p" );
+               sourceName.innerHTML = "<strong>Source: </strong>" + details.source;
+               addClass( sourceName, "qunit-source" );
+               if ( bad === 0 ) {
+                       addClass( sourceName, "qunit-collapsed" );
+               }
+               addEvent( testTitle, "click", function() {
+                       toggleClass( sourceName, "qunit-collapsed" );
+               });
+               testItem.appendChild( sourceName );
+       }
 });
 
 if ( defined.document ) {
-       if ( document.readyState === "complete" ) {
+
+       // Avoid readyState issue with phantomjs
+       // Ref: #818
+       var notPhantom = ( function( p ) {
+               return !( p && p.version && p.version.major > 0 );
+       } )( window.phantom );
+
+       if ( notPhantom && document.readyState === "complete" ) {
                QUnit.load();
        } else {
                addEvent( window, "load", QUnit.load );
diff --git a/resources/lib/sinonjs/sinon-1.15.4.js b/resources/lib/sinonjs/sinon-1.15.4.js
deleted file mode 100644 (file)
index 20bc9e2..0000000
+++ /dev/null
@@ -1,5949 +0,0 @@
-/**
- * Sinon.JS 1.15.4, 2015/06/27
- *
- * @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.
- */
-
-(function (root, factory) {
-  'use strict';
-  if (typeof define === 'function' && define.amd) {
-    define('sinon', [], function () {
-      return (root.sinon = factory());
-    });
-  } else if (typeof exports === 'object') {
-    module.exports = factory();
-  } else {
-    root.sinon = factory();
-  }
-}(this, function () {
-  'use strict';
-  var samsam, formatio, lolex;
-  (function () {
-                function define(mod, deps, fn) {
-                  if (mod == "samsam") {
-                    samsam = deps();
-                  } else if (typeof deps === "function" && mod.length === 0) {
-                    lolex = deps();
-                  } else if (typeof fn === "function") {
-                    formatio = fn(samsam);
-                  }
-                }
-    define.amd = {};
-((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 (getClass(object) === 'Arguments') { return true; }
-        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 (typeof(matcher) === "undefined") {
-            return typeof(object) === "undefined";
-        }
-
-        if (matcher === null) {
-            return object === null;
-        }
-
-        if (getClass(object) === "Array" && getClass(matcher) === "Array") {
-            return arrayContains(object, matcher);
-        }
-
-        if (matcher && typeof matcher === "object") {
-            if (matcher === object) {
-                return true;
-            }
-            var prop;
-            for (prop in matcher) {
-                var value = object[prop];
-                if (typeof value === "undefined" &&
-                        typeof object.getAttribute === "function") {
-                    value = object.getAttribute(prop);
-                }
-                if (matcher[prop] === null || typeof matcher[prop] === 'undefined') {
-                    if (value !== matcher[prop]) {
-                        return false;
-                    }
-                } else if (typeof  value === "undefined" || !match(value, 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,
-        limitChildrenCount: 0
-    };
-
-    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 pieces = [];
-        var i, l;
-        l = (this.limitChildrenCount > 0) ? 
-            Math.min(this.limitChildrenCount, array.length) : array.length;
-
-        for (i = 0; i < l; ++i) {
-            pieces.push(ascii(this, array[i], processed));
-        }
-
-        if(l < array.length)
-            pieces.push("[... " + (array.length - l) + " more elements]");
-
-        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, k, l;
-        l = (this.limitChildrenCount > 0) ? 
-            Math.min(this.limitChildrenCount, properties.length) : properties.length;
-
-        for (i = 0; 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, k = indent; i < k; ++i) { is += " "; }
-
-        if(l < properties.length)
-            pieces.push("[... " + (properties.length - l) + " more elements]");
-
-        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;
-});
-!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.lolex=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
-(function (global){
-/*jslint eqeqeq: false, plusplus: false, evil: true, onevar: false, browser: true, forin: false*/
-/*global global*/
-/**
- * @author Christian Johansen (christian@cjohansen.no) and contributors
- * @license BSD
- *
- * Copyright (c) 2010-2014 Christian Johansen
- */
-
-// node expects setTimeout/setInterval to return a fn object w/ .ref()/.unref()
-// browsers, a number.
-// see https://github.com/cjohansen/Sinon.JS/pull/436
-var timeoutResult = setTimeout(function() {}, 0);
-var addTimerReturnsObject = typeof timeoutResult === "object";
-clearTimeout(timeoutResult);
-
-var NativeDate = Date;
-var id = 1;
-
-/**
- * Parse strings like "01:10:00" (meaning 1 hour, 10 minutes, 0 seconds) into
- * number of milliseconds. This is used to support human-readable strings passed
- * to clock.tick()
- */
-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;
-}
-
-/**
- * Used to grok the `now` parameter to createClock.
- */
-function getEpoch(epoch) {
-    if (!epoch) { return 0; }
-    if (typeof epoch.getTime === "function") { return epoch.getTime(); }
-    if (typeof epoch === "number") { return epoch; }
-    throw new TypeError("now should be milliseconds since UNIX epoch");
-}
-
-function inRange(from, to, timer) {
-    return timer && timer.callAt >= from && timer.callAt <= to;
-}
-
-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;
-}
-
-function createDate() {
-    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 addTimer(clock, timer) {
-    if (typeof timer.func === "undefined") {
-        throw new Error("Callback must be provided to timer calls");
-    }
-
-    if (!clock.timers) {
-        clock.timers = {};
-    }
-
-    timer.id = id++;
-    timer.createdAt = clock.now;
-    timer.callAt = clock.now + (timer.delay || 0);
-
-    clock.timers[timer.id] = timer;
-
-    if (addTimerReturnsObject) {
-        return {
-            id: timer.id,
-            ref: function() {},
-            unref: function() {}
-        };
-    }
-    else {
-        return timer.id;
-    }
-}
-
-function firstTimerInRange(clock, from, to) {
-    var timers = clock.timers, timer = null;
-
-    for (var id in timers) {
-        if (!inRange(from, to, timers[id])) {
-            continue;
-        }
-
-        if (!timer || ~compareTimers(timer, timers[id])) {
-            timer = timers[id];
-        }
-    }
-
-    return timer;
-}
-
-function compareTimers(a, b) {
-    // Sort first by absolute timing
-    if (a.callAt < b.callAt) {
-        return -1;
-    }
-    if (a.callAt > b.callAt) {
-        return 1;
-    }
-
-    // Sort next by immediate, immediate timers take precedence
-    if (a.immediate && !b.immediate) {
-        return -1;
-    }
-    if (!a.immediate && b.immediate) {
-        return 1;
-    }
-
-    // Sort next by creation time, earlier-created timers take precedence
-    if (a.createdAt < b.createdAt) {
-        return -1;
-    }
-    if (a.createdAt > b.createdAt) {
-        return 1;
-    }
-
-    // Sort next by id, lower-id timers take precedence
-    if (a.id < b.id) {
-        return -1;
-    }
-    if (a.id > b.id) {
-        return 1;
-    }
-
-    // As timer ids are unique, no fallback `0` is necessary
-}
-
-function callTimer(clock, timer) {
-    if (typeof timer.interval == "number") {
-        clock.timers[timer.id].callAt += timer.interval;
-    } else {
-        delete clock.timers[timer.id];
-    }
-
-    try {
-        if (typeof timer.func == "function") {
-            timer.func.apply(null, timer.args);
-        } else {
-            eval(timer.func);
-        }
-    } catch (e) {
-        var exception = e;
-    }
-
-    if (!clock.timers[timer.id]) {
-        if (exception) {
-            throw exception;
-        }
-        return;
-    }
-
-    if (exception) {
-        throw exception;
-    }
-}
-
-function uninstall(clock, target) {
-    var method;
-
-    for (var i = 0, l = clock.methods.length; i < l; i++) {
-        method = clock.methods[i];
-
-        if (target[method].hadOwnProperty) {
-            target[method] = clock["_" + method];
-        } else {
-            try {
-                delete target[method];
-            } catch (e) {}
-        }
-    }
-
-    // Prevent multiple executions which will completely remove these props
-    clock.methods = [];
-}
-
-function hijackMethod(target, method, clock) {
-    clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method);
-    clock["_" + method] = target[method];
-
-    if (method == "Date") {
-        var date = mirrorDateProperties(clock[method], target[method]);
-        target[method] = date;
-    } else {
-        target[method] = function () {
-            return clock[method].apply(clock, arguments);
-        };
-
-        for (var prop in clock[method]) {
-            if (clock[method].hasOwnProperty(prop)) {
-                target[method][prop] = clock[method][prop];
-            }
-        }
-    }
-
-    target[method].clock = clock;
-}
-
-var timers = {
-    setTimeout: setTimeout,
-    clearTimeout: clearTimeout,
-    setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined),
-    clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate: undefined),
-    setInterval: setInterval,
-    clearInterval: clearInterval,
-    Date: Date
-};
-
-var keys = Object.keys || function (obj) {
-    var ks = [];
-    for (var key in obj) {
-        ks.push(key);
-    }
-    return ks;
-};
-
-exports.timers = timers;
-
-var createClock = exports.createClock = function (now) {
-    var clock = {
-        now: getEpoch(now),
-        timeouts: {},
-        Date: createDate()
-    };
-
-    clock.Date.clock = clock;
-
-    clock.setTimeout = function setTimeout(func, timeout) {
-        return addTimer(clock, {
-            func: func,
-            args: Array.prototype.slice.call(arguments, 2),
-            delay: timeout
-        });
-    };
-
-    clock.clearTimeout = function clearTimeout(timerId) {
-        if (!timerId) {
-            // null appears to be allowed in most browsers, and appears to be
-            // relied upon by some libraries, like Bootstrap carousel
-            return;
-        }
-        if (!clock.timers) {
-            clock.timers = [];
-        }
-        // in Node, timerId is an object with .ref()/.unref(), and
-        // its .id field is the actual timer id.
-        if (typeof timerId === "object") {
-            timerId = timerId.id
-        }
-        if (timerId in clock.timers) {
-            delete clock.timers[timerId];
-        }
-    };
-
-    clock.setInterval = function setInterval(func, timeout) {
-        return addTimer(clock, {
-            func: func,
-            args: Array.prototype.slice.call(arguments, 2),
-            delay: timeout,
-            interval: timeout
-        });
-    };
-
-    clock.clearInterval = function clearInterval(timerId) {
-        clock.clearTimeout(timerId);
-    };
-
-    clock.setImmediate = function setImmediate(func) {
-        return addTimer(clock, {
-            func: func,
-            args: Array.prototype.slice.call(arguments, 1),
-            immediate: true
-        });
-    };
-
-    clock.clearImmediate = function clearImmediate(timerId) {
-        clock.clearTimeout(timerId);
-    };
-
-    clock.tick = function tick(ms) {
-        ms = typeof ms == "number" ? ms : parseTime(ms);
-        var tickFrom = clock.now, tickTo = clock.now + ms, previous = clock.now;
-        var timer = firstTimerInRange(clock, tickFrom, tickTo);
-
-        var firstException;
-        while (timer && tickFrom <= tickTo) {
-            if (clock.timers[timer.id]) {
-                tickFrom = clock.now = timer.callAt;
-                try {
-                    callTimer(clock, timer);
-                } catch (e) {
-                    firstException = firstException || e;
-                }
-            }
-
-            timer = firstTimerInRange(clock, previous, tickTo);
-            previous = tickFrom;
-        }
-
-        clock.now = tickTo;
-
-        if (firstException) {
-            throw firstException;
-        }
-
-        return clock.now;
-    };
-
-    clock.reset = function reset() {
-        clock.timers = {};
-    };
-
-    return clock;
-};
-
-exports.install = function install(target, now, toFake) {
-    if (typeof target === "number") {
-        toFake = now;
-        now = target;
-        target = null;
-    }
-
-    if (!target) {
-        target = global;
-    }
-
-    var clock = createClock(now);
-
-    clock.uninstall = function () {
-        uninstall(clock, target);
-    };
-
-    clock.methods = toFake || [];
-
-    if (clock.methods.length === 0) {
-        clock.methods = keys(timers);
-    }
-
-    for (var i = 0, l = clock.methods.length; i < l; i++) {
-        hijackMethod(target, clock.methods[i], clock);
-    }
-
-    return clock;
-};
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{}]},{},[1])(1)
-});
-  })();
-  var define;
-/**
- * Sinon core utilities. For internal use only.
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-var sinon = (function () {
-"use strict";
-
-    var sinon;
-    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    function loadDependencies(require, exports, module) {
-        sinon = module.exports = require("./sinon/util/core");
-        require("./sinon/extend");
-        require("./sinon/typeOf");
-        require("./sinon/times_in_words");
-        require("./sinon/spy");
-        require("./sinon/call");
-        require("./sinon/behavior");
-        require("./sinon/stub");
-        require("./sinon/mock");
-        require("./sinon/collection");
-        require("./sinon/assert");
-        require("./sinon/sandbox");
-        require("./sinon/test");
-        require("./sinon/test_case");
-        require("./sinon/match");
-        require("./sinon/format");
-        require("./sinon/log_error");
-    }
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-        sinon = module.exports;
-    } else {
-        sinon = {};
-    }
-
-    return sinon;
-}());
-
-/**
- * @depend ../../sinon.js
- */
-/**
- * Sinon core utilities. For internal use only.
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function (sinon) {
-    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 isReallyNaN(val) {
-        return typeof val === "number" && isNaN(val);
-    }
-
-    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;
-    }
-
-    // Cheap way to detect if we have ES5 support.
-    var hasES5Support = "keys" in Object;
-
-    function makeApi(sinon) {
-        sinon.wrapMethod = function wrapMethod(object, property, method) {
-            if (!object) {
-                throw new TypeError("Should wrap property of object");
-            }
-
-            if (typeof method != "function" && typeof method != "object") {
-                throw new TypeError("Method wrapper should be a function or a property descriptor");
-            }
-
-            function checkWrappedMethod(wrappedMethod) {
-                if (!isFunction(wrappedMethod)) {
-                    error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " +
-                                        property + " as function");
-                } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) {
-                    error = new TypeError("Attempted to wrap " + property + " which is already wrapped");
-                } else 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 && wrappedMethod.stackTrace) {
-                        error.stack += "\n--------------\n" + wrappedMethod.stackTrace;
-                    }
-                    throw error;
-                }
-            }
-
-            var error, wrappedMethod;
-
-            // 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);
-
-            if (hasES5Support) {
-                var methodDesc = (typeof method == "function") ? {value: method} : method,
-                    wrappedMethodDesc = sinon.getPropertyDescriptor(object, property),
-                    i;
-
-                if (!wrappedMethodDesc) {
-                    error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " +
-                                        property + " as function");
-                } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) {
-                    error = new TypeError("Attempted to wrap " + property + " which is already wrapped");
-                }
-                if (error) {
-                    if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) {
-                        error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace;
-                    }
-                    throw error;
-                }
-
-                var types = sinon.objectKeys(methodDesc);
-                for (i = 0; i < types.length; i++) {
-                    wrappedMethod = wrappedMethodDesc[types[i]];
-                    checkWrappedMethod(wrappedMethod);
-                }
-
-                mirrorProperties(methodDesc, wrappedMethodDesc);
-                for (i = 0; i < types.length; i++) {
-                    mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]);
-                }
-                Object.defineProperty(object, property, methodDesc);
-            } else {
-                wrappedMethod = object[property];
-                checkWrappedMethod(wrappedMethod);
-                object[property] = method;
-                method.displayName = property;
-            }
-
-            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.stackTrace = (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) {
-                    // In some cases `delete` may throw an error
-                    try {
-                        delete object[property];
-                    } catch (e) {}
-                    // For native code functions `delete` fails without throwing an error
-                    // on Chrome < 43, PhantomJS, etc.
-                } else if (hasES5Support) {
-                    Object.defineProperty(object, property, wrappedMethodDesc);
-                }
-
-                // Use strict equality comparison to check failures then force a reset
-                // via direct assignment.
-                if (object[property] === method) {
-                    object[property] = wrappedMethod;
-                }
-            };
-
-            method.restore.sinon = true;
-
-            if (!hasES5Support) {
-                mirrorProperties(method, wrappedMethod);
-            }
-
-            return method;
-        };
-
-        sinon.create = function create(proto) {
-            var F = function () {};
-            F.prototype = proto;
-            return new F();
-        };
-
-        sinon.deepEqual = function deepEqual(a, b) {
-            if (sinon.match && sinon.match.isMatcher(a)) {
-                return a.test(b);
-            }
-
-            if (typeof a != "object" || typeof b != "object") {
-                if (isReallyNaN(a) && isReallyNaN(b)) {
-                    return true;
-                } else {
-                    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 (!(prop in b)) {
-                    return false;
-                }
-
-                if (!deepEqual(a[prop], b[prop])) {
-                    return false;
-                }
-            }
-
-            for (prop in b) {
-                bLength += 1;
-            }
-
-            return aLength == bLength;
-        };
-
-        sinon.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;
-        };
-
-        sinon.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";
-        };
-
-        sinon.objectKeys = function objectKeys(obj) {
-            if (obj !== Object(obj)) {
-                throw new TypeError("sinon.objectKeys called on a non-object");
-            }
-
-            var keys = [];
-            var key;
-            for (key in obj) {
-                if (hasOwn.call(obj, key)) {
-                    keys.push(key);
-                }
-            }
-
-            return keys;
-        };
-
-        sinon.getPropertyDescriptor = function getPropertyDescriptor(object, property) {
-            var proto = object, descriptor;
-            while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) {
-                proto = Object.getPrototypeOf(proto);
-            }
-            return descriptor;
-        }
-
-        sinon.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;
-        };
-
-        sinon.defaultConfig = {
-            injectIntoThis: true,
-            injectInto: null,
-            properties: ["spy", "stub", "mock", "clock", "server", "requests"],
-            useFakeTimers: true,
-            useFakeServer: true
-        };
-
-        sinon.timesInWords = function timesInWords(count) {
-            return count == 1 && "once" ||
-                count == 2 && "twice" ||
-                count == 3 && "thrice" ||
-                (count || 0) + " times";
-        };
-
-        sinon.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;
-        };
-
-        sinon.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;
-            });
-        };
-
-        sinon.createStubInstance = function (constructor) {
-            if (typeof constructor !== "function") {
-                throw new TypeError("The constructor should be a function.");
-            }
-            return sinon.stub(sinon.create(constructor.prototype));
-        };
-
-        sinon.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();
-            }
-        };
-
-        return sinon;
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    function loadDependencies(require, exports) {
-        makeApi(exports);
-    }
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports);
-    } else if (!sinon) {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend util/core.js
- */
-
-(function (sinon) {
-    function makeApi(sinon) {
-
-        // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug
-        var hasDontEnumBug = (function () {
-            var obj = {
-                constructor: function () {
-                    return "0";
-                },
-                toString: function () {
-                    return "1";
-                },
-                valueOf: function () {
-                    return "2";
-                },
-                toLocaleString: function () {
-                    return "3";
-                },
-                prototype: function () {
-                    return "4";
-                },
-                isPrototypeOf: function () {
-                    return "5";
-                },
-                propertyIsEnumerable: function () {
-                    return "6";
-                },
-                hasOwnProperty: function () {
-                    return "7";
-                },
-                length: function () {
-                    return "8";
-                },
-                unique: function () {
-                    return "9"
-                }
-            };
-
-            var result = [];
-            for (var prop in obj) {
-                result.push(obj[prop]());
-            }
-            return result.join("") !== "0123456789";
-        })();
-
-        /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will
-         *         override properties in previous sources.
-         *
-         * target - The Object to extend
-         * sources - Objects to copy properties from.
-         *
-         * Returns the extended target
-         */
-        function extend(target /*, sources */) {
-            var sources = Array.prototype.slice.call(arguments, 1),
-                source, i, prop;
-
-            for (i = 0; i < sources.length; i++) {
-                source = sources[i];
-
-                for (prop in source) {
-                    if (source.hasOwnProperty(prop)) {
-                        target[prop] = source[prop];
-                    }
-                }
-
-                // Make sure we copy (own) toString method even when in JScript with DontEnum bug
-                // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug
-                if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) {
-                    target.toString = source.toString;
-                }
-            }
-
-            return target;
-        };
-
-        sinon.extend = extend;
-        return sinon.extend;
-    }
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./util/core");
-        module.exports = makeApi(sinon);
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else if (!sinon) {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend util/core.js
- */
-
-(function (sinon) {
-    function makeApi(sinon) {
-
-        function timesInWords(count) {
-            switch (count) {
-                case 1:
-                    return "once";
-                case 2:
-                    return "twice";
-                case 3:
-                    return "thrice";
-                default:
-                    return (count || 0) + " times";
-            }
-        }
-
-        sinon.timesInWords = timesInWords;
-        return sinon.timesInWords;
-    }
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./util/core");
-        module.exports = makeApi(sinon);
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else if (!sinon) {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend util/core.js
- */
-/**
- * Format functions
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2014 Christian Johansen
- */
-
-(function (sinon, formatio) {
-    function makeApi(sinon) {
-        function typeOf(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();
-        };
-
-        sinon.typeOf = typeOf;
-        return sinon.typeOf;
-    }
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./util/core");
-        module.exports = makeApi(sinon);
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else if (!sinon) {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-}(
-    (typeof sinon == "object" && sinon || null),
-    (typeof formatio == "object" && formatio)
-));
-
-/**
- * @depend util/core.js
- * @depend typeOf.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) {
-    function makeApi(sinon) {
-        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");
-
-        sinon.match = match;
-        return match;
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./util/core");
-        require("./typeOf");
-        module.exports = makeApi(sinon);
-    }
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else if (!sinon) {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend util/core.js
- */
-/**
- * Format functions
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2014 Christian Johansen
- */
-
-(function (sinon, formatio) {
-    function makeApi(sinon) {
-        function valueFormatter(value) {
-            return "" + value;
-        }
-
-        function getFormatioFormatter() {
-            var formatter = formatio.configure({
-                    quoteStrings: false,
-                    limitChildrenCount: 250
-                });
-
-            function format() {
-                return formatter.ascii.apply(formatter, arguments);
-            };
-
-            return format;
-        }
-
-        function getNodeFormatter(value) {
-            function format(value) {
-                return typeof value == "object" && value.toString === Object.prototype.toString ? util.inspect(value) : value;
-            };
-
-            try {
-                var util = require("util");
-            } catch (e) {
-                /* Node, but no util module - would be very old, but better safe than sorry */
-            }
-
-            return util ? format : valueFormatter;
-        }
-
-        var isNode = typeof module !== "undefined" && module.exports && typeof require == "function",
-            formatter;
-
-        if (isNode) {
-            try {
-                formatio = require("formatio");
-            } catch (e) {}
-        }
-
-        if (formatio) {
-            formatter = getFormatioFormatter()
-        } else if (isNode) {
-            formatter = getNodeFormatter();
-        } else {
-            formatter = valueFormatter;
-        }
-
-        sinon.format = formatter;
-        return sinon.format;
-    }
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./util/core");
-        module.exports = makeApi(sinon);
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else if (!sinon) {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-}(
-    (typeof sinon == "object" && sinon || null),
-    (typeof formatio == "object" && formatio)
-));
-
-/**
-  * @depend util/core.js
-  * @depend match.js
-  * @depend format.js
-  */
-/**
-  * 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) {
-    function makeApi(sinon) {
-        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() {
-                var l = arguments.length;
-                if (l > this.args.length) {
-                    return false;
-                }
-                for (var i = 0; i < l; i += 1) {
-                    if (!sinon.deepEqual(arguments[i], this.args[i])) {
-                        return false;
-                    }
-                }
-
-                return true;
-            },
-
-            calledWithMatch: function calledWithMatch() {
-                var l = arguments.length;
-                if (l > this.args.length) {
-                    return false;
-                }
-                for (var i = 0; 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
-
-        sinon.spyCall = createSpyCall;
-        return createSpyCall;
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./util/core");
-        require("./match");
-        require("./format");
-        module.exports = makeApi(sinon);
-    }
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else if (!sinon) {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
-  * @depend times_in_words.js
-  * @depend util/core.js
-  * @depend extend.js
-  * @depend call.js
-  * @depend format.js
-  */
-/**
-  * Spy functions
-  *
-  * @author Christian Johansen (christian@cjohansen.no)
-  * @license BSD
-  *
-  * Copyright (c) 2010-2013 Christian Johansen
-  */
-
-(function (sinon) {
-
-    function makeApi(sinon) {
-        var push = Array.prototype.push;
-        var slice = Array.prototype.slice;
-        var callId = 0;
-
-        function spy(object, property, types) {
-            if (!property && typeof object == "function") {
-                return spy.create(object);
-            }
-
-            if (!object && !property) {
-                return spy.create(function () { });
-            }
-
-            if (types) {
-                var methodDesc = sinon.getPropertyDescriptor(object, property);
-                for (var i = 0; i < types.length; i++) {
-                    methodDesc[types[i]] = spy.create(methodDesc[types[i]]);
-                }
-                return sinon.wrapMethod(object, property, methodDesc);
-            } else {
-                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, proxyLength) {
-            // Retain the function length:
-            var p;
-            if (proxyLength) {
-                eval("p = (function proxy(" + vars.substring(0, proxyLength * 2 - 1) +
-                    ") { return p.invoke(func, this, slice.call(arguments)); });");
-            } else {
-                p = function proxy() {
-                    return p.invoke(func, this, slice.call(arguments));
-                };
-            }
-            p.isSinonProxy = true;
-            return p;
-        }
-
-        var uuid = 0;
-
-        // Public API
-        var spyApi = {
-            reset: function () {
-                if (this.invoking) {
-                    var err = new Error("Cannot reset Sinon function while invoking it. " +
-                                        "Move the call to .reset outside of the callback.");
-                    err.name = "InvalidResetException";
-                    throw err;
-                }
-
-                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();
-                    }
-                }
-
-                return this;
-            },
-
-            create: function create(func, spyLength) {
-                var name;
-
-                if (typeof func != "function") {
-                    func = function () { };
-                } else {
-                    name = sinon.functionName(func);
-                }
-
-                if (!spyLength) {
-                    spyLength = func.length;
-                }
-
-                var proxy = createProxy(func, spyLength);
-
-                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.instantiateFake = 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++);
-
-                // Make call properties available from within the spied function:
-                createCallProperties.call(this);
-
-                try {
-                    this.invoking = true;
-
-                    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;
-                } finally {
-                    delete this.invoking;
-                }
-
-                push.call(this.exceptions, exception);
-                push.call(this.returnValues, returnValue);
-
-                // Make return value and exception available in the calls:
-                createCallProperties.call(this);
-
-                if (exception !== undefined) {
-                    throw exception;
-                }
-
-                return returnValue;
-            },
-
-            named: function named(name) {
-                this.displayName = name;
-                return this;
-            },
-
-            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.instantiateFake();
-                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;
-        sinon.spy = spy;
-
-        return spy;
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./util/core");
-        require("./call");
-        require("./extend");
-        require("./times_in_words");
-        require("./format");
-        module.exports = makeApi(sinon);
-    }
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else if (!sinon) {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend util/core.js
- * @depend extend.js
- */
-/**
- * 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 slice = Array.prototype.slice;
-    var join = Array.prototype.join;
-    var useLeftMostCallback = -1;
-    var useRightMostCallback = -2;
-
-    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) {
-            return args[callArgAt];
-        }
-
-        var argumentList;
-
-        if (callArgAt === useLeftMostCallback) {
-            argumentList = args;
-        }
-
-        if (callArgAt === useRightMostCallback) {
-            argumentList = slice.call(args).reverse();
-        }
-
-        var callArgProp = behavior.callArgProp;
-
-        for (var i = 0, l = argumentList.length; i < l; ++i) {
-            if (!callArgProp && typeof argumentList[i] == "function") {
-                return argumentList[i];
-            }
-
-            if (callArgProp && argumentList[i] &&
-                typeof argumentList[i][callArgProp] == "function") {
-                return argumentList[i][callArgProp];
-            }
-        }
-
-        return null;
-    }
-
-    function makeApi(sinon) {
-        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);
-                }
-            }
-        }
-
-        var proto = {
-            create: function create(stub) {
-                var behavior = sinon.extend({}, sinon.behavior);
-                delete behavior.create;
-                behavior.stub = stub;
-
-                return behavior;
-            },
-
-            isPresent: function isPresent() {
-                return (typeof this.callArgAt == "number" ||
-                        this.exception ||
-                        typeof this.returnArgAt == "number" ||
-                        this.returnThis ||
-                        this.returnValueDefined);
-            },
-
-            invoke: function invoke(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 onCall(index) {
-                return this.stub.onCall(index);
-            },
-
-            onFirstCall: function onFirstCall() {
-                return this.stub.onFirstCall();
-            },
-
-            onSecondCall: function onSecondCall() {
-                return this.stub.onSecondCall();
-            },
-
-            onThirdCall: function onThirdCall() {
-                return this.stub.onThirdCall();
-            },
-
-            withArgs: function withArgs(/* 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 = useLeftMostCallback;
-                this.callbackArguments = slice.call(arguments, 0);
-                this.callbackContext = undefined;
-                this.callArgProp = undefined;
-                this.callbackAsync = false;
-
-                return this;
-            },
-
-            yieldsRight: function () {
-                this.callArgAt = useRightMostCallback;
-                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 = useLeftMostCallback;
-                this.callbackArguments = slice.call(arguments, 1);
-                this.callbackContext = context;
-                this.callArgProp = undefined;
-                this.callbackAsync = false;
-
-                return this;
-            },
-
-            yieldsTo: function (prop) {
-                this.callArgAt = useLeftMostCallback;
-                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 = useLeftMostCallback;
-                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);
-            }
-        }
-
-        sinon.behavior = proto;
-        return proto;
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./util/core");
-        require("./extend");
-        module.exports = makeApi(sinon);
-    }
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else if (!sinon) {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend util/core.js
- * @depend extend.js
- * @depend spy.js
- * @depend behavior.js
- */
-/**
- * Stub functions
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function (sinon) {
-    function makeApi(sinon) {
-        function stub(object, property, func) {
-            if (!!func && typeof func != "function" && typeof func != "object") {
-                throw new TypeError("Custom stub should be a function or a property descriptor");
-            }
-
-            var wrapper;
-
-            if (func) {
-                if (typeof func == "function") {
-                    wrapper = sinon.spy && sinon.spy.create ? sinon.spy.create(func) : func;
-                } else {
-                    wrapper = func;
-                    if (sinon.spy && sinon.spy.create) {
-                        var types = sinon.objectKeys(wrapper);
-                        for (var i = 0; i < types.length; i++) {
-                            wrapper[types[i]] = sinon.spy.create(wrapper[types[i]]);
-                        }
-                    }
-                }
-            } else {
-                var stubLength = 0;
-                if (typeof object == "object" && typeof object[property] == "function") {
-                    stubLength = object[property].length;
-                }
-                wrapper = stub.create(stubLength);
-            }
-
-            if (!object && typeof property === "undefined") {
-                return sinon.stub.create();
-            }
-
-            if (typeof property === "undefined" && typeof object == "object") {
-                for (var prop in object) {
-                    if (typeof sinon.getPropertyDescriptor(object, prop).value === "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;
-
-        var proto = {
-            create: function create(stubLength) {
-                var functionStub = function () {
-                    return getCurrentBehavior(functionStub).invoke(this, arguments);
-                };
-
-                functionStub.id = "stub#" + uuid++;
-                var orig = functionStub;
-                functionStub = sinon.spy.create(functionStub, stubLength);
-                functionStub.func = orig;
-
-                sinon.extend(functionStub, stub);
-                functionStub.instantiateFake = 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 onCall(index) {
-                if (!this.behaviors[index]) {
-                    this.behaviors[index] = sinon.behavior.create(this);
-                }
-
-                return this.behaviors[index];
-            },
-
-            onFirstCall: function onFirstCall() {
-                return this.onCall(0);
-            },
-
-            onSecondCall: function onSecondCall() {
-                return this.onCall(1);
-            },
-
-            onThirdCall: function onThirdCall() {
-                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));
-            }
-        }
-
-        sinon.extend(stub, proto);
-        sinon.stub = stub;
-
-        return stub;
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./util/core");
-        require("./behavior");
-        require("./spy");
-        require("./extend");
-        module.exports = makeApi(sinon);
-    }
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else if (!sinon) {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend times_in_words.js
- * @depend util/core.js
- * @depend call.js
- * @depend extend.js
- * @depend match.js
- * @depend spy.js
- * @depend stub.js
- * @depend format.js
- */
-/**
- * Mock functions.
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function (sinon) {
-    function makeApi(sinon) {
-        var push = [].push;
-        var match = sinon.match;
-
-        function mock(object) {
-            // if (typeof console !== undefined && console.warn) {
-            //     console.warn("mock will be removed from Sinon.JS v2.0");
-            // }
-
-            if (!object) {
-                return sinon.expectation.create("Anonymous mock");
-            }
-
-            return mock.create(object);
-        }
-
-        function each(collection, callback) {
-            if (!collection) {
-                return;
-            }
-
-            for (var i = 0, l = collection.length; i < l; i += 1) {
-                callback(collection[i]);
-            }
-        }
-
-        sinon.extend(mock, {
-            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 if (met.length > 0) {
-                    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;
-        var slice = Array.prototype.slice;
-
-        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;
-            }
-        }
-
-        sinon.expectation = {
-            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 sinon.spy.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 pass(message) {
-                sinon.assert.pass(message);
-            },
-
-            fail: function fail(message) {
-                var exception = new Error(message);
-                exception.name = "ExpectationError";
-
-                throw exception;
-            }
-        };
-
-        sinon.mock = mock;
-        return mock;
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./util/core");
-        require("./times_in_words");
-        require("./call");
-        require("./extend");
-        require("./match");
-        require("./spy");
-        require("./stub");
-        require("./format");
-
-        module.exports = makeApi(sinon);
-    }
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else if (!sinon) {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend util/core.js
- * @depend spy.js
- * @depend stub.js
- * @depend mock.js
- */
-/**
- * Collections of stubs, spies and mocks.
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function (sinon) {
-    var push = [].push;
-    var hasOwnProperty = Object.prototype.hasOwnProperty;
-
-    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);
-        }
-    }
-
-    function makeApi(sinon) {
-        var collection = {
-            verify: function resolve() {
-                each(this, "verify");
-            },
-
-            restore: function restore() {
-                each(this, "restore");
-                compact(this);
-            },
-
-            reset: function restore() {
-                each(this, "reset");
-            },
-
-            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;
-            }
-        };
-
-        sinon.collection = collection;
-        return collection;
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./util/core");
-        require("./mock");
-        require("./spy");
-        require("./stub");
-        module.exports = makeApi(sinon);
-    }
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else if (!sinon) {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/*global lolex */
-
-/**
- * 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) {
-    function makeApi(sinon, lol) {
-        var llx = typeof lolex !== "undefined" ? lolex : lol;
-
-        sinon.useFakeTimers = function () {
-            var now, methods = Array.prototype.slice.call(arguments);
-
-            if (typeof methods[0] === "string") {
-                now = 0;
-            } else {
-                now = methods.shift();
-            }
-
-            var clock = llx.install(now || 0, methods);
-            clock.restore = clock.uninstall;
-            return clock;
-        };
-
-        sinon.clock = {
-            create: function (now) {
-                return llx.createClock(now);
-            }
-        };
-
-        sinon.timers = {
-            setTimeout: setTimeout,
-            clearTimeout: clearTimeout,
-            setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined),
-            clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined),
-            setInterval: setInterval,
-            clearInterval: clearInterval,
-            Date: Date
-        };
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    function loadDependencies(require, epxorts, module, lolex) {
-        var sinon = require("./core");
-        makeApi(sinon, lolex);
-        module.exports = sinon;
-    }
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module, require("lolex"));
-    } else {
-        makeApi(sinon);
-    }
-}(typeof global != "undefined" && typeof global !== "function" ? global : this));
-
-/**
- * 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;
-
-    function makeApi(sinon) {
-        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;
-            this.lengthComputable = !!progressEventRaw.total;
-        };
-
-        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;
-            }
-        };
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    function loadDependencies(require) {
-        var sinon = require("./core");
-        makeApi(sinon);
-    }
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require);
-    } else {
-        makeApi(sinon);
-    }
-}());
-
-/**
- * @depend util/core.js
- */
-/**
- * Logs errors
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2014 Christian Johansen
- */
-
-(function (sinon) {
-    // cache a reference to setTimeout, so that our reference won't be stubbed out
-    // when using fake timers and errors will still get logged
-    // https://github.com/cjohansen/Sinon.JS/issues/381
-    var realSetTimeout = setTimeout;
-
-    function makeApi(sinon) {
-
-        function log() {}
-
-        function logError(label, err) {
-            var msg = label + " threw exception: ";
-
-            sinon.log(msg + "[" + err.name + "] " + err.message);
-
-            if (err.stack) {
-                sinon.log(err.stack);
-            }
-
-            logError.setTimeout(function () {
-                err.message = msg + err.message;
-                throw err;
-            }, 0);
-        };
-
-        // wrap realSetTimeout with something we can stub in tests
-        logError.setTimeout = function (func, timeout) {
-            realSetTimeout(func, timeout);
-        }
-
-        var exports = {};
-        exports.log = sinon.log = log;
-        exports.logError = sinon.logError = logError;
-
-        return exports;
-    }
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./util/core");
-        module.exports = makeApi(sinon);
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else if (!sinon) {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend core.js
- * @depend ../extend.js
- * @depend event.js
- * @depend ../log_error.js
- */
-/**
- * Fake XDomainRequest object
- */
-
-if (typeof sinon == "undefined") {
-    this.sinon = {};
-}
-
-// wrapper for global
-(function (global) {
-    var xdr = { XDomainRequest: global.XDomainRequest };
-    xdr.GlobalXDomainRequest = global.XDomainRequest;
-    xdr.supportsXDR = typeof xdr.GlobalXDomainRequest != "undefined";
-    xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest :  false;
-
-    function makeApi(sinon) {
-        sinon.xdr = xdr;
-
-        function FakeXDomainRequest() {
-            this.readyState = FakeXDomainRequest.UNSENT;
-            this.requestBody = null;
-            this.requestHeaders = {};
-            this.status = 0;
-            this.timeout = null;
-
-            if (typeof FakeXDomainRequest.onCreate == "function") {
-                FakeXDomainRequest.onCreate(this);
-            }
-        }
-
-        function verifyState(xdr) {
-            if (xdr.readyState !== FakeXDomainRequest.OPENED) {
-                throw new Error("INVALID_STATE_ERR");
-            }
-
-            if (xdr.sendFlag) {
-                throw new Error("INVALID_STATE_ERR");
-            }
-        }
-
-        function verifyRequestSent(xdr) {
-            if (xdr.readyState == FakeXDomainRequest.UNSENT) {
-                throw new Error("Request not sent");
-            }
-            if (xdr.readyState == FakeXDomainRequest.DONE) {
-                throw new Error("Request done");
-            }
-        }
-
-        function verifyResponseBodyType(body) {
-            if (typeof body != "string") {
-                var error = new Error("Attempted to respond to fake XDomainRequest with " +
-                                    body + ", which is not a string.");
-                error.name = "InvalidBodyException";
-                throw error;
-            }
-        }
-
-        sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, {
-            open: function open(method, url) {
-                this.method = method;
-                this.url = url;
-
-                this.responseText = null;
-                this.sendFlag = false;
-
-                this.readyStateChange(FakeXDomainRequest.OPENED);
-            },
-
-            readyStateChange: function readyStateChange(state) {
-                this.readyState = state;
-                var eventName = "";
-                switch (this.readyState) {
-                case FakeXDomainRequest.UNSENT:
-                    break;
-                case FakeXDomainRequest.OPENED:
-                    break;
-                case FakeXDomainRequest.LOADING:
-                    if (this.sendFlag) {
-                        //raise the progress event
-                        eventName = "onprogress";
-                    }
-                    break;
-                case FakeXDomainRequest.DONE:
-                    if (this.isTimeout) {
-                        eventName = "ontimeout"
-                    } else if (this.errorFlag || (this.status < 200 || this.status > 299)) {
-                        eventName = "onerror";
-                    } else {
-                        eventName = "onload"
-                    }
-                    break;
-                }
-
-                // raising event (if defined)
-                if (eventName) {
-                    if (typeof this[eventName] == "function") {
-                        try {
-                            this[eventName]();
-                        } catch (e) {
-                            sinon.logError("Fake XHR " + eventName + " handler", e);
-                        }
-                    }
-                }
-            },
-
-            send: function send(data) {
-                verifyState(this);
-
-                if (!/^(get|head)$/i.test(this.method)) {
-                    this.requestBody = data;
-                }
-                this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8";
-
-                this.errorFlag = false;
-                this.sendFlag = true;
-                this.readyStateChange(FakeXDomainRequest.OPENED);
-
-                if (typeof this.onSend == "function") {
-                    this.onSend(this);
-                }
-            },
-
-            abort: function abort() {
-                this.aborted = true;
-                this.responseText = null;
-                this.errorFlag = true;
-
-                if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) {
-                    this.readyStateChange(sinon.FakeXDomainRequest.DONE);
-                    this.sendFlag = false;
-                }
-            },
-
-            setResponseBody: function setResponseBody(body) {
-                verifyRequestSent(this);
-                verifyResponseBodyType(body);
-
-                var chunkSize = this.chunkSize || 10;
-                var index = 0;
-                this.responseText = "";
-
-                do {
-                    this.readyStateChange(FakeXDomainRequest.LOADING);
-                    this.responseText += body.substring(index, index + chunkSize);
-                    index += chunkSize;
-                } while (index < body.length);
-
-                this.readyStateChange(FakeXDomainRequest.DONE);
-            },
-
-            respond: function respond(status, contentType, body) {
-                // content-type ignored, since XDomainRequest does not carry this
-                // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease
-                // test integration across browsers
-                this.status = typeof status == "number" ? status : 200;
-                this.setResponseBody(body || "");
-            },
-
-            simulatetimeout: function simulatetimeout() {
-                this.status = 0;
-                this.isTimeout = true;
-                // Access to this should actually throw an error
-                this.responseText = undefined;
-                this.readyStateChange(FakeXDomainRequest.DONE);
-            }
-        });
-
-        sinon.extend(FakeXDomainRequest, {
-            UNSENT: 0,
-            OPENED: 1,
-            LOADING: 3,
-            DONE: 4
-        });
-
-        sinon.useFakeXDomainRequest = function useFakeXDomainRequest() {
-            sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) {
-                if (xdr.supportsXDR) {
-                    global.XDomainRequest = xdr.GlobalXDomainRequest;
-                }
-
-                delete sinon.FakeXDomainRequest.restore;
-
-                if (keepOnCreate !== true) {
-                    delete sinon.FakeXDomainRequest.onCreate;
-                }
-            };
-            if (xdr.supportsXDR) {
-                global.XDomainRequest = sinon.FakeXDomainRequest;
-            }
-            return sinon.FakeXDomainRequest;
-        };
-
-        sinon.FakeXDomainRequest = FakeXDomainRequest;
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./core");
-        require("../extend");
-        require("./event");
-        require("../log_error");
-        makeApi(sinon);
-        module.exports = sinon;
-    }
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else {
-        makeApi(sinon);
-    }
-})(typeof global !== "undefined" ? global : self);
-
-/**
- * @depend core.js
- * @depend ../extend.js
- * @depend event.js
- * @depend ../log_error.js
- */
-/**
- * Fake XMLHttpRequest object
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function (global) {
-
-    var supportsProgress = typeof ProgressEvent !== "undefined";
-    var supportsCustomEvent = typeof CustomEvent !== "undefined";
-    var supportsFormData = typeof FormData !== "undefined";
-    var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest };
-    sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest;
-    sinonXhr.GlobalActiveXObject = global.ActiveXObject;
-    sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject != "undefined";
-    sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest != "undefined";
-    sinonXhr.workingXHR = sinonXhr.supportsXHR ? sinonXhr.GlobalXMLHttpRequest : sinonXhr.supportsActiveX
-                                     ? function () {
-                                        return new sinonXhr.GlobalActiveXObject("MSXML2.XMLHTTP.3.0")
-                                    } : false;
-    sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.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*/
-
-    // Note that for FakeXMLHttpRequest to work pre ES5
-    // we lose some of the alignment with the spec.
-    // To ensure as close a match as possible,
-    // set responseType before calling open, send or respond;
-    function FakeXMLHttpRequest() {
-        this.readyState = FakeXMLHttpRequest.UNSENT;
-        this.requestHeaders = {};
-        this.requestBody = null;
-        this.status = 0;
-        this.statusText = "";
-        this.upload = new UploadProgress();
-        this.responseType = "";
-        this.response = "";
-        if (sinonXhr.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 addEventListener(event, listener) {
-        this.eventListeners[event].push(listener);
-    };
-
-    UploadProgress.prototype.removeEventListener = function removeEventListener(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 dispatchEvent(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");
-        }
-    }
-
-    function getHeader(headers, header) {
-        header = header.toLowerCase();
-
-        for (var h in headers) {
-            if (h.toLowerCase() == header) {
-                return h;
-            }
-        }
-
-        return null;
-    }
-
-    // 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 addFilter(fn) {
-        this.filters.push(fn)
-    };
-    var IE6Re = /MSIE 6/;
-    FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) {
-        var xhr = new sinonXhr.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 stateChange() {
-            fakeXhr.readyState = xhr.readyState;
-            if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) {
-                copyAttrs(["status", "statusText"]);
-            }
-            if (xhr.readyState >= FakeXMLHttpRequest.LOADING) {
-                copyAttrs(["responseText", "response"]);
-            }
-            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;
-        }
-    }
-
-    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",
-        207: "Multi-Status",
-        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"
-    };
-
-    function makeApi(sinon) {
-        sinon.xhr = sinonXhr;
-
-        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.response = this.responseType === "json" ? null : "";
-                this.responseXML = null;
-                this.requestHeaders = {};
-                this.sendFlag = false;
-
-                if (FakeXMLHttpRequest.useFilters === true) {
-                    var xhrArgs = arguments;
-                    var defake = some(FakeXMLHttpRequest.filters, function (filter) {
-                        return filter.apply(this, xhrArgs)
-                    });
-                    if (defake) {
-                        return 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);
-                    }
-                }
-
-                switch (this.readyState) {
-                    case FakeXMLHttpRequest.DONE:
-                        if (supportsProgress) {
-                            this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100}));
-                            this.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100}));
-                        }
-                        this.upload.dispatchEvent(new sinon.Event("load", false, false, this));
-                        this.dispatchEvent(new sinon.Event("load", false, false, this));
-                        this.dispatchEvent(new sinon.Event("loadend", false, false, this));
-                        break;
-                }
-
-                this.dispatchEvent(new sinon.Event("readystatechange"));
-            },
-
-            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)) {
-                    var contentType = getHeader(this.requestHeaders, "Content-Type");
-                    if (this.requestHeaders[contentType]) {
-                        var value = this.requestHeaders[contentType].split(";");
-                        this.requestHeaders[contentType] = value[0] + ";charset=utf-8";
-                    } else if (supportsFormData && !(data instanceof FormData)) {
-                        this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8";
-                    }
-
-                    this.requestBody = data;
-                }
-
-                this.errorFlag = false;
-                this.sendFlag = this.async;
-                this.response = this.responseType === "json" ? null : "";
-                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.response = this.responseType === "json" ? null : "";
-                this.errorFlag = true;
-                this.requestHeaders = {};
-                this.responseHeaders = {};
-
-                if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) {
-                    this.readyStateChange(FakeXMLHttpRequest.DONE);
-                    this.sendFlag = false;
-                }
-
-                this.readyState = 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 = getHeader(this.responseHeaders, header);
-
-                return this.responseHeaders[header] || 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
-                    }
-                }
-
-                this.response = this.responseType === "json" ? JSON.parse(this.responseText) : this.responseText;
-                this.readyStateChange(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));
-                }
-            },
-
-            downloadProgress: function downloadProgress(progressEventRaw) {
-                if (supportsProgress) {
-                    this.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
-        });
-
-        sinon.useFakeXMLHttpRequest = function () {
-            FakeXMLHttpRequest.restore = function restore(keepOnCreate) {
-                if (sinonXhr.supportsXHR) {
-                    global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest;
-                }
-
-                if (sinonXhr.supportsActiveX) {
-                    global.ActiveXObject = sinonXhr.GlobalActiveXObject;
-                }
-
-                delete FakeXMLHttpRequest.restore;
-
-                if (keepOnCreate !== true) {
-                    delete FakeXMLHttpRequest.onCreate;
-                }
-            };
-            if (sinonXhr.supportsXHR) {
-                global.XMLHttpRequest = FakeXMLHttpRequest;
-            }
-
-            if (sinonXhr.supportsActiveX) {
-                global.ActiveXObject = function ActiveXObject(objId) {
-                    if (objId == "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) {
-
-                        return new FakeXMLHttpRequest();
-                    }
-
-                    return new sinonXhr.GlobalActiveXObject(objId);
-                };
-            }
-
-            return FakeXMLHttpRequest;
-        };
-
-        sinon.FakeXMLHttpRequest = FakeXMLHttpRequest;
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./core");
-        require("../extend");
-        require("./event");
-        require("../log_error");
-        makeApi(sinon);
-        module.exports = sinon;
-    }
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else if (typeof sinon === "undefined") {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-
-})(typeof global !== "undefined" ? global : self);
-
-/**
- * @depend fake_xdomain_request.js
- * @depend fake_xml_http_request.js
- * @depend ../format.js
- * @depend ../log_error.js
- */
-/**
- * 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 = {};
-}
-
-(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 makeApi(sinon) {
-        sinon.fakeServer = {
-            create: function () {
-                var server = create(this);
-                if (!sinon.xhr.supportsCORS) {
-                    this.xhr = sinon.useFakeXDomainRequest();
-                } else {
-                    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.respondImmediately) {
-                        server.respond();
-                    } else 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);
-                }
-            },
-
-            log: 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);
-            },
-
-            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, queue.length);
-                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) {
-                        this.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);
-            }
-        };
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./core");
-        require("./fake_xdomain_request");
-        require("./fake_xml_http_request");
-        require("../format");
-        makeApi(sinon);
-        module.exports = sinon;
-    }
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else {
-        makeApi(sinon);
-    }
-}());
-
-/**
- * @depend fake_server.js
- * @depend fake_timers.js
- */
-/**
- * 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 makeApi(sinon) {
-        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);
-        };
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    function loadDependencies(require) {
-        var sinon = require("./core");
-        require("./fake_server");
-        require("./fake_timers");
-        makeApi(sinon);
-    }
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require);
-    } else {
-        makeApi(sinon);
-    }
-}());
-
-/**
- * @depend util/core.js
- * @depend extend.js
- * @depend collection.js
- * @depend util/fake_timers.js
- * @depend util/fake_server_with_clock.js
- */
-/**
- * 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
- */
-
-(function () {
-    function makeApi(sinon) {
-        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;
-                }
-
-                obj.match = sinon.match;
-
-                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;
-            },
-
-            match: sinon.match
-        });
-
-        sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer;
-
-        return sinon.sandbox;
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./util/core");
-        require("./extend");
-        require("./util/fake_server_with_clock");
-        require("./util/fake_timers");
-        require("./collection");
-        module.exports = makeApi(sinon);
-    }
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else if (!sinon) {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-}());
-
-/**
- * @depend util/core.js
- * @depend sandbox.js
- */
-/**
- * Test function, sandboxes fakes
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function (sinon) {
-    function makeApi(sinon) {
-        var slice = Array.prototype.slice;
-
-        function test(callback) {
-            var type = typeof callback;
-
-            if (type != "function") {
-                throw new TypeError("sinon.test needs to wrap a test function, got " + type);
-            }
-
-            function sinonSandboxedTest() {
-                var config = sinon.getConfig(sinon.config);
-                config.injectInto = config.injectIntoThis && this || config.injectInto;
-                var sandbox = sinon.sandbox.create(config);
-                var args = slice.call(arguments);
-                var oldDone = args.length && args[args.length - 1];
-                var exception, result;
-
-                if (typeof oldDone == "function") {
-                    args[args.length - 1] = function sinonDone(result) {
-                        if (result) {
-                            sandbox.restore();
-                            throw exception;
-                        } else {
-                            sandbox.verifyAndRestore();
-                        }
-                        oldDone(result);
-                    };
-                }
-
-                try {
-                    result = callback.apply(this, args.concat(sandbox.args));
-                } catch (e) {
-                    exception = e;
-                }
-
-                if (typeof oldDone != "function") {
-                    if (typeof exception !== "undefined") {
-                        sandbox.restore();
-                        throw exception;
-                    } else {
-                        sandbox.verifyAndRestore();
-                    }
-                }
-
-                return result;
-            }
-
-            if (callback.length) {
-                return function sinonAsyncSandboxedTest(callback) {
-                    return sinonSandboxedTest.apply(this, arguments);
-                };
-            }
-
-            return sinonSandboxedTest;
-        }
-
-        test.config = {
-            injectIntoThis: true,
-            injectInto: null,
-            properties: ["spy", "stub", "mock", "clock", "server", "requests"],
-            useFakeTimers: true,
-            useFakeServer: true
-        };
-
-        sinon.test = test;
-        return test;
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./util/core");
-        require("./sandbox");
-        module.exports = makeApi(sinon);
-    }
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else if (sinon) {
-        makeApi(sinon);
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend util/core.js
- * @depend test.js
- */
-/**
- * Test case, sandboxes all test functions
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function (sinon) {
-    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 makeApi(sinon) {
-        function testCase(tests, prefix) {
-            if (!tests || typeof tests != "object") {
-                throw new TypeError("sinon.testCase needs an object with test functions");
-            }
-
-            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) && !/^(setUp|tearDown)$/.test(testName)) {
-                    property = tests[testName];
-
-                    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;
-        }
-
-        sinon.testCase = testCase;
-        return testCase;
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./util/core");
-        require("./test");
-        module.exports = makeApi(sinon);
-    }
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else if (!sinon) {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend times_in_words.js
- * @depend util/core.js
- * @depend match.js
- * @depend format.js
- */
-/**
- * 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 slice = Array.prototype.slice;
-
-    function makeApi(sinon) {
-        var assert;
-
-        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 (method.proxy && method.proxy.isSinonProxy) {
-                    verifyIsStub(method.proxy);
-                } else {
-                    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 || fake.proxy.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 != "expose" && (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");
-
-        sinon.assert = assert;
-        return assert;
-    }
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
-
-    function loadDependencies(require, exports, module) {
-        var sinon = require("./util/core");
-        require("./match");
-        require("./format");
-        module.exports = makeApi(sinon);
-    }
-
-    if (isAMD) {
-        define(loadDependencies);
-    } else if (isNode) {
-        loadDependencies(require, module.exports, module);
-    } else if (!sinon) {
-        return;
-    } else {
-        makeApi(sinon);
-    }
-
-}(typeof sinon == "object" && sinon || null, typeof window != "undefined" ? window : (typeof self != "undefined") ? self : global));
-
-  return sinon;
-}));
diff --git a/resources/lib/sinonjs/sinon-1.17.3.js b/resources/lib/sinonjs/sinon-1.17.3.js
new file mode 100644 (file)
index 0000000..d77b317
--- /dev/null
@@ -0,0 +1,6437 @@
+/**
+ * Sinon.JS 1.17.3, 2016/01/27
+ *
+ * @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.
+ */
+
+(function (root, factory) {
+  'use strict';
+  if (typeof define === 'function' && define.amd) {
+    define('sinon', [], function () {
+      return (root.sinon = factory());
+    });
+  } else if (typeof exports === 'object') {
+    module.exports = factory();
+  } else {
+    root.sinon = factory();
+  }
+}(this, function () {
+  'use strict';
+  var samsam, formatio, lolex;
+  (function () {
+                function define(mod, deps, fn) {
+                  if (mod == "samsam") {
+                    samsam = deps();
+                  } else if (typeof deps === "function" && mod.length === 0) {
+                    lolex = deps();
+                  } else if (typeof fn === "function") {
+                    formatio = fn(samsam);
+                  }
+                }
+    define.amd = {};
+((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 (getClass(object) === 'Arguments') { return true; }
+        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 (typeof(matcher) === "undefined") {
+            return typeof(object) === "undefined";
+        }
+
+        if (matcher === null) {
+            return object === null;
+        }
+
+        if (getClass(object) === "Array" && getClass(matcher) === "Array") {
+            return arrayContains(object, matcher);
+        }
+
+        if (matcher && typeof matcher === "object") {
+            if (matcher === object) {
+                return true;
+            }
+            var prop;
+            for (prop in matcher) {
+                var value = object[prop];
+                if (typeof value === "undefined" &&
+                        typeof object.getAttribute === "function") {
+                    value = object.getAttribute(prop);
+                }
+                if (matcher[prop] === null || typeof matcher[prop] === 'undefined') {
+                    if (value !== matcher[prop]) {
+                        return false;
+                    }
+                } else if (typeof  value === "undefined" || !match(value, 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,
+        limitChildrenCount: 0
+    };
+
+    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 pieces = [];
+        var i, l;
+        l = (this.limitChildrenCount > 0) ? 
+            Math.min(this.limitChildrenCount, array.length) : array.length;
+
+        for (i = 0; i < l; ++i) {
+            pieces.push(ascii(this, array[i], processed));
+        }
+
+        if(l < array.length)
+            pieces.push("[... " + (array.length - l) + " more elements]");
+
+        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, k, l;
+        l = (this.limitChildrenCount > 0) ? 
+            Math.min(this.limitChildrenCount, properties.length) : properties.length;
+
+        for (i = 0; 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, k = indent; i < k; ++i) { is += " "; }
+
+        if(l < properties.length)
+            pieces.push("[... " + (properties.length - l) + " more elements]");
+
+        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;
+});
+!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.lolex=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+(function (global){
+/*global global, window*/
+/**
+ * @author Christian Johansen (christian@cjohansen.no) and contributors
+ * @license BSD
+ *
+ * Copyright (c) 2010-2014 Christian Johansen
+ */
+
+(function (global) {
+    
+    // Make properties writable in IE, as per
+    // http://www.adequatelygood.com/Replacing-setTimeout-Globally.html
+    // JSLint being anal
+    var glbl = global;
+
+    global.setTimeout = glbl.setTimeout;
+    global.clearTimeout = glbl.clearTimeout;
+    global.setInterval = glbl.setInterval;
+    global.clearInterval = glbl.clearInterval;
+    global.Date = glbl.Date;
+
+    // setImmediate is not a standard function
+    // avoid adding the prop to the window object if not present
+    if('setImmediate' in global) {
+        global.setImmediate = glbl.setImmediate;
+        global.clearImmediate = glbl.clearImmediate;
+    }
+
+    // node expects setTimeout/setInterval to return a fn object w/ .ref()/.unref()
+    // browsers, a number.
+    // see https://github.com/cjohansen/Sinon.JS/pull/436
+
+    var NOOP = function () { return undefined; };
+    var timeoutResult = setTimeout(NOOP, 0);
+    var addTimerReturnsObject = typeof timeoutResult === "object";
+    clearTimeout(timeoutResult);
+
+    var NativeDate = Date;
+    var uniqueTimerId = 1;
+
+    /**
+     * Parse strings like "01:10:00" (meaning 1 hour, 10 minutes, 0 seconds) into
+     * number of milliseconds. This is used to support human-readable strings passed
+     * to clock.tick()
+     */
+    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, 'm:s' and 'h:m:s'. Each part must be two digits");
+        }
+
+        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;
+    }
+
+    /**
+     * Used to grok the `now` parameter to createClock.
+     */
+    function getEpoch(epoch) {
+        if (!epoch) { return 0; }
+        if (typeof epoch.getTime === "function") { return epoch.getTime(); }
+        if (typeof epoch === "number") { return epoch; }
+        throw new TypeError("now should be milliseconds since UNIX epoch");
+    }
+
+    function inRange(from, to, timer) {
+        return timer && timer.callAt >= from && timer.callAt <= to;
+    }
+
+    function mirrorDateProperties(target, source) {
+        var prop;
+        for (prop in source) {
+            if (source.hasOwnProperty(prop)) {
+                target[prop] = source[prop];
+            }
+        }
+
+        // set special now implementation
+        if (source.now) {
+            target.now = function now() {
+                return target.clock.now;
+            };
+        } else {
+            delete target.now;
+        }
+
+        // set special toSource implementation
+        if (source.toSource) {
+            target.toSource = function toSource() {
+                return source.toSource();
+            };
+        } else {
+            delete target.toSource;
+        }
+
+        // set special toString implementation
+        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;
+
+        return target;
+    }
+
+    function createDate() {
+        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 addTimer(clock, timer) {
+        if (timer.func === undefined) {
+            throw new Error("Callback must be provided to timer calls");
+        }
+
+        if (!clock.timers) {
+            clock.timers = {};
+        }
+
+        timer.id = uniqueTimerId++;
+        timer.createdAt = clock.now;
+        timer.callAt = clock.now + (timer.delay || (clock.duringTick ? 1 : 0));
+
+        clock.timers[timer.id] = timer;
+
+        if (addTimerReturnsObject) {
+            return {
+                id: timer.id,
+                ref: NOOP,
+                unref: NOOP
+            };
+        }
+
+        return timer.id;
+    }
+
+
+    function compareTimers(a, b) {
+        // Sort first by absolute timing
+        if (a.callAt < b.callAt) {
+            return -1;
+        }
+        if (a.callAt > b.callAt) {
+            return 1;
+        }
+
+        // Sort next by immediate, immediate timers take precedence
+        if (a.immediate && !b.immediate) {
+            return -1;
+        }
+        if (!a.immediate && b.immediate) {
+            return 1;
+        }
+
+        // Sort next by creation time, earlier-created timers take precedence
+        if (a.createdAt < b.createdAt) {
+            return -1;
+        }
+        if (a.createdAt > b.createdAt) {
+            return 1;
+        }
+
+        // Sort next by id, lower-id timers take precedence
+        if (a.id < b.id) {
+            return -1;
+        }
+        if (a.id > b.id) {
+            return 1;
+        }
+
+        // As timer ids are unique, no fallback `0` is necessary
+    }
+
+    function firstTimerInRange(clock, from, to) {
+        var timers = clock.timers,
+            timer = null,
+            id,
+            isInRange;
+
+        for (id in timers) {
+            if (timers.hasOwnProperty(id)) {
+                isInRange = inRange(from, to, timers[id]);
+
+                if (isInRange && (!timer || compareTimers(timer, timers[id]) === 1)) {
+                    timer = timers[id];
+                }
+            }
+        }
+
+        return timer;
+    }
+
+    function firstTimer(clock) {
+        var timers = clock.timers,
+            timer = null,
+            id;
+
+        for (id in timers) {
+            if (timers.hasOwnProperty(id)) {
+                if (!timer || compareTimers(timer, timers[id]) === 1) {
+                    timer = timers[id];
+                }
+            }
+        }
+
+        return timer;
+    }
+
+    function callTimer(clock, timer) {
+        var exception;
+
+        if (typeof timer.interval === "number") {
+            clock.timers[timer.id].callAt += timer.interval;
+        } else {
+            delete clock.timers[timer.id];
+        }
+
+        try {
+            if (typeof timer.func === "function") {
+                timer.func.apply(null, timer.args);
+            } else {
+                eval(timer.func);
+            }
+        } catch (e) {
+            exception = e;
+        }
+
+        if (!clock.timers[timer.id]) {
+            if (exception) {
+                throw exception;
+            }
+            return;
+        }
+
+        if (exception) {
+            throw exception;
+        }
+    }
+
+    function timerType(timer) {
+        if (timer.immediate) {
+            return "Immediate";
+        } else if (typeof timer.interval !== "undefined") {
+            return "Interval";
+        } else {
+            return "Timeout";
+        }
+    }
+
+    function clearTimer(clock, timerId, ttype) {
+        if (!timerId) {
+            // null appears to be allowed in most browsers, and appears to be
+            // relied upon by some libraries, like Bootstrap carousel
+            return;
+        }
+
+        if (!clock.timers) {
+            clock.timers = [];
+        }
+
+        // in Node, timerId is an object with .ref()/.unref(), and
+        // its .id field is the actual timer id.
+        if (typeof timerId === "object") {
+            timerId = timerId.id;
+        }
+
+        if (clock.timers.hasOwnProperty(timerId)) {
+            // check that the ID matches a timer of the correct type
+            var timer = clock.timers[timerId];
+            if (timerType(timer) === ttype) {
+                delete clock.timers[timerId];
+            } else {
+                               throw new Error("Cannot clear timer: timer created with set" + ttype + "() but cleared with clear" + timerType(timer) + "()");
+                       }
+        }
+    }
+
+    function uninstall(clock, target) {
+        var method,
+            i,
+            l;
+
+        for (i = 0, l = clock.methods.length; i < l; i++) {
+            method = clock.methods[i];
+
+            if (target[method].hadOwnProperty) {
+                target[method] = clock["_" + method];
+            } else {
+                try {
+                    delete target[method];
+                } catch (ignore) {}
+            }
+        }
+
+        // Prevent multiple executions which will completely remove these props
+        clock.methods = [];
+    }
+
+    function hijackMethod(target, method, clock) {
+        var prop;
+
+        clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method);
+        clock["_" + method] = target[method];
+
+        if (method === "Date") {
+            var date = mirrorDateProperties(clock[method], target[method]);
+            target[method] = date;
+        } else {
+            target[method] = function () {
+                return clock[method].apply(clock, arguments);
+            };
+
+            for (prop in clock[method]) {
+                if (clock[method].hasOwnProperty(prop)) {
+                    target[method][prop] = clock[method][prop];
+                }
+            }
+        }
+
+        target[method].clock = clock;
+    }
+
+    var timers = {
+        setTimeout: setTimeout,
+        clearTimeout: clearTimeout,
+        setImmediate: global.setImmediate,
+        clearImmediate: global.clearImmediate,
+        setInterval: setInterval,
+        clearInterval: clearInterval,
+        Date: Date
+    };
+
+    var keys = Object.keys || function (obj) {
+        var ks = [],
+            key;
+
+        for (key in obj) {
+            if (obj.hasOwnProperty(key)) {
+                ks.push(key);
+            }
+        }
+
+        return ks;
+    };
+
+    exports.timers = timers;
+
+    function createClock(now) {
+        var clock = {
+            now: getEpoch(now),
+            timeouts: {},
+            Date: createDate()
+        };
+
+        clock.Date.clock = clock;
+
+        clock.setTimeout = function setTimeout(func, timeout) {
+            return addTimer(clock, {
+                func: func,
+                args: Array.prototype.slice.call(arguments, 2),
+                delay: timeout
+            });
+        };
+
+        clock.clearTimeout = function clearTimeout(timerId) {
+            return clearTimer(clock, timerId, "Timeout");
+        };
+
+        clock.setInterval = function setInterval(func, timeout) {
+            return addTimer(clock, {
+                func: func,
+                args: Array.prototype.slice.call(arguments, 2),
+                delay: timeout,
+                interval: timeout
+            });
+        };
+
+        clock.clearInterval = function clearInterval(timerId) {
+            return clearTimer(clock, timerId, "Interval");
+        };
+
+        clock.setImmediate = function setImmediate(func) {
+            return addTimer(clock, {
+                func: func,
+                args: Array.prototype.slice.call(arguments, 1),
+                immediate: true
+            });
+        };
+
+        clock.clearImmediate = function clearImmediate(timerId) {
+            return clearTimer(clock, timerId, "Immediate");
+        };
+
+        clock.tick = function tick(ms) {
+            ms = typeof ms === "number" ? ms : parseTime(ms);
+            var tickFrom = clock.now, tickTo = clock.now + ms, previous = clock.now;
+            var timer = firstTimerInRange(clock, tickFrom, tickTo);
+            var oldNow;
+
+            clock.duringTick = true;
+
+            var firstException;
+            while (timer && tickFrom <= tickTo) {
+                if (clock.timers[timer.id]) {
+                    tickFrom = clock.now = timer.callAt;
+                    try {
+                        oldNow = clock.now;
+                        callTimer(clock, timer);
+                        // compensate for any setSystemTime() call during timer callback
+                        if (oldNow !== clock.now) {
+                            tickFrom += clock.now - oldNow;
+                            tickTo += clock.now - oldNow;
+                            previous += clock.now - oldNow;
+                        }
+                    } catch (e) {
+                        firstException = firstException || e;
+                    }
+                }
+
+                timer = firstTimerInRange(clock, previous, tickTo);
+                previous = tickFrom;
+            }
+
+            clock.duringTick = false;
+            clock.now = tickTo;
+
+            if (firstException) {
+                throw firstException;
+            }
+
+            return clock.now;
+        };
+
+        clock.next = function next() {
+            var timer = firstTimer(clock);
+            if (!timer) {
+                return clock.now;
+            }
+
+            clock.duringTick = true;
+            try {
+                clock.now = timer.callAt;
+                callTimer(clock, timer);
+                return clock.now;
+            } finally {
+                clock.duringTick = false;
+            }
+        };
+
+        clock.reset = function reset() {
+            clock.timers = {};
+        };
+
+        clock.setSystemTime = function setSystemTime(now) {
+            // determine time difference
+            var newNow = getEpoch(now);
+            var difference = newNow - clock.now;
+
+            // update 'system clock'
+            clock.now = newNow;
+
+            // update timers and intervals to keep them stable
+            for (var id in clock.timers) {
+                if (clock.timers.hasOwnProperty(id)) {
+                    var timer = clock.timers[id];
+                    timer.createdAt += difference;
+                    timer.callAt += difference;
+                }
+            }
+        };
+
+        return clock;
+    }
+    exports.createClock = createClock;
+
+    exports.install = function install(target, now, toFake) {
+        var i,
+            l;
+
+        if (typeof target === "number") {
+            toFake = now;
+            now = target;
+            target = null;
+        }
+
+        if (!target) {
+            target = global;
+        }
+
+        var clock = createClock(now);
+
+        clock.uninstall = function () {
+            uninstall(clock, target);
+        };
+
+        clock.methods = toFake || [];
+
+        if (clock.methods.length === 0) {
+            clock.methods = keys(timers);
+        }
+
+        for (i = 0, l = clock.methods.length; i < l; i++) {
+            hijackMethod(target, clock.methods[i], clock);
+        }
+
+        return clock;
+    };
+
+}(global || this));
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{}]},{},[1])(1)
+});
+  })();
+  var define;
+/**
+ * Sinon core utilities. For internal use only.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+var sinon = (function () {
+"use strict";
+ // eslint-disable-line no-unused-vars
+    
+    var sinonModule;
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        sinonModule = module.exports = require("./sinon/util/core");
+        require("./sinon/extend");
+        require("./sinon/walk");
+        require("./sinon/typeOf");
+        require("./sinon/times_in_words");
+        require("./sinon/spy");
+        require("./sinon/call");
+        require("./sinon/behavior");
+        require("./sinon/stub");
+        require("./sinon/mock");
+        require("./sinon/collection");
+        require("./sinon/assert");
+        require("./sinon/sandbox");
+        require("./sinon/test");
+        require("./sinon/test_case");
+        require("./sinon/match");
+        require("./sinon/format");
+        require("./sinon/log_error");
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module);
+        sinonModule = module.exports;
+    } else {
+        sinonModule = {};
+    }
+
+    return sinonModule;
+}());
+
+/**
+ * @depend ../../sinon.js
+ */
+/**
+ * Sinon core utilities. For internal use only.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+(function (sinonGlobal) {
+    
+    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 isReallyNaN(val) {
+        return typeof val === "number" && isNaN(val);
+    }
+
+    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;
+    }
+
+    // Cheap way to detect if we have ES5 support.
+    var hasES5Support = "keys" in Object;
+
+    function makeApi(sinon) {
+        sinon.wrapMethod = function wrapMethod(object, property, method) {
+            if (!object) {
+                throw new TypeError("Should wrap property of object");
+            }
+
+            if (typeof method !== "function" && typeof method !== "object") {
+                throw new TypeError("Method wrapper should be a function or a property descriptor");
+            }
+
+            function checkWrappedMethod(wrappedMethod) {
+                var error;
+
+                if (!isFunction(wrappedMethod)) {
+                    error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " +
+                                        property + " as function");
+                } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) {
+                    error = new TypeError("Attempted to wrap " + property + " which is already wrapped");
+                } else 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 && wrappedMethod.stackTrace) {
+                        error.stack += "\n--------------\n" + wrappedMethod.stackTrace;
+                    }
+                    throw error;
+                }
+            }
+
+            var error, wrappedMethod, i;
+
+            // 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);
+
+            if (hasES5Support) {
+                var methodDesc = (typeof method === "function") ? {value: method} : method;
+                var wrappedMethodDesc = sinon.getPropertyDescriptor(object, property);
+
+                if (!wrappedMethodDesc) {
+                    error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " +
+                                        property + " as function");
+                } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) {
+                    error = new TypeError("Attempted to wrap " + property + " which is already wrapped");
+                }
+                if (error) {
+                    if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) {
+                        error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace;
+                    }
+                    throw error;
+                }
+
+                var types = sinon.objectKeys(methodDesc);
+                for (i = 0; i < types.length; i++) {
+                    wrappedMethod = wrappedMethodDesc[types[i]];
+                    checkWrappedMethod(wrappedMethod);
+                }
+
+                mirrorProperties(methodDesc, wrappedMethodDesc);
+                for (i = 0; i < types.length; i++) {
+                    mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]);
+                }
+                Object.defineProperty(object, property, methodDesc);
+            } else {
+                wrappedMethod = object[property];
+                checkWrappedMethod(wrappedMethod);
+                object[property] = method;
+                method.displayName = property;
+            }
+
+            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.stackTrace = (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) {
+                    // In some cases `delete` may throw an error
+                    try {
+                        delete object[property];
+                    } catch (e) {} // eslint-disable-line no-empty
+                    // For native code functions `delete` fails without throwing an error
+                    // on Chrome < 43, PhantomJS, etc.
+                } else if (hasES5Support) {
+                    Object.defineProperty(object, property, wrappedMethodDesc);
+                }
+
+                // Use strict equality comparison to check failures then force a reset
+                // via direct assignment.
+                if (object[property] === method) {
+                    object[property] = wrappedMethod;
+                }
+            };
+
+            method.restore.sinon = true;
+
+            if (!hasES5Support) {
+                mirrorProperties(method, wrappedMethod);
+            }
+
+            return method;
+        };
+
+        sinon.create = function create(proto) {
+            var F = function () {};
+            F.prototype = proto;
+            return new F();
+        };
+
+        sinon.deepEqual = function deepEqual(a, b) {
+            if (sinon.match && sinon.match.isMatcher(a)) {
+                return a.test(b);
+            }
+
+            if (typeof a !== "object" || typeof b !== "object") {
+                return isReallyNaN(a) && isReallyNaN(b) || 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;
+            var aLength = 0;
+            var bLength = 0;
+
+            if (aString === "[object Array]" && a.length !== b.length) {
+                return false;
+            }
+
+            for (prop in a) {
+                if (a.hasOwnProperty(prop)) {
+                    aLength += 1;
+
+                    if (!(prop in b)) {
+                        return false;
+                    }
+
+                    if (!deepEqual(a[prop], b[prop])) {
+                        return false;
+                    }
+                }
+            }
+
+            for (prop in b) {
+                if (b.hasOwnProperty(prop)) {
+                    bLength += 1;
+                }
+            }
+
+            return aLength === bLength;
+        };
+
+        sinon.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;
+        };
+
+        sinon.functionToString = function toString() {
+            if (this.getCall && this.callCount) {
+                var thisValue,
+                    prop;
+                var 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";
+        };
+
+        sinon.objectKeys = function objectKeys(obj) {
+            if (obj !== Object(obj)) {
+                throw new TypeError("sinon.objectKeys called on a non-object");
+            }
+
+            var keys = [];
+            var key;
+            for (key in obj) {
+                if (hasOwn.call(obj, key)) {
+                    keys.push(key);
+                }
+            }
+
+            return keys;
+        };
+
+        sinon.getPropertyDescriptor = function getPropertyDescriptor(object, property) {
+            var proto = object;
+            var descriptor;
+
+            while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) {
+                proto = Object.getPrototypeOf(proto);
+            }
+            return descriptor;
+        };
+
+        sinon.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;
+        };
+
+        sinon.defaultConfig = {
+            injectIntoThis: true,
+            injectInto: null,
+            properties: ["spy", "stub", "mock", "clock", "server", "requests"],
+            useFakeTimers: true,
+            useFakeServer: true
+        };
+
+        sinon.timesInWords = function timesInWords(count) {
+            return count === 1 && "once" ||
+                count === 2 && "twice" ||
+                count === 3 && "thrice" ||
+                (count || 0) + " times";
+        };
+
+        sinon.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;
+        };
+
+        sinon.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;
+            });
+        };
+
+        sinon.createStubInstance = function (constructor) {
+            if (typeof constructor !== "function") {
+                throw new TypeError("The constructor should be a function.");
+            }
+            return sinon.stub(sinon.create(constructor.prototype));
+        };
+
+        sinon.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();
+            }
+        };
+
+        return sinon;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports) {
+        makeApi(exports);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+        return;
+    }
+
+    if (isNode) {
+        loadDependencies(require, module.exports, module);
+        return;
+    }
+
+    if (sinonGlobal) {
+        makeApi(sinonGlobal);
+    }
+}(
+    typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend util/core.js
+ */
+(function (sinonGlobal) {
+    
+    function makeApi(sinon) {
+
+        // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug
+        var hasDontEnumBug = (function () {
+            var obj = {
+                constructor: function () {
+                    return "0";
+                },
+                toString: function () {
+                    return "1";
+                },
+                valueOf: function () {
+                    return "2";
+                },
+                toLocaleString: function () {
+                    return "3";
+                },
+                prototype: function () {
+                    return "4";
+                },
+                isPrototypeOf: function () {
+                    return "5";
+                },
+                propertyIsEnumerable: function () {
+                    return "6";
+                },
+                hasOwnProperty: function () {
+                    return "7";
+                },
+                length: function () {
+                    return "8";
+                },
+                unique: function () {
+                    return "9";
+                }
+            };
+
+            var result = [];
+            for (var prop in obj) {
+                if (obj.hasOwnProperty(prop)) {
+                    result.push(obj[prop]());
+                }
+            }
+            return result.join("") !== "0123456789";
+        })();
+
+        /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will
+         *         override properties in previous sources.
+         *
+         * target - The Object to extend
+         * sources - Objects to copy properties from.
+         *
+         * Returns the extended target
+         */
+        function extend(target /*, sources */) {
+            var sources = Array.prototype.slice.call(arguments, 1);
+            var source, i, prop;
+
+            for (i = 0; i < sources.length; i++) {
+                source = sources[i];
+
+                for (prop in source) {
+                    if (source.hasOwnProperty(prop)) {
+                        target[prop] = source[prop];
+                    }
+                }
+
+                // Make sure we copy (own) toString method even when in JScript with DontEnum bug
+                // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug
+                if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) {
+                    target.toString = source.toString;
+                }
+            }
+
+            return target;
+        }
+
+        sinon.extend = extend;
+        return sinon.extend;
+    }
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        module.exports = makeApi(sinon);
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    if (isAMD) {
+        define(loadDependencies);
+        return;
+    }
+
+    if (isNode) {
+        loadDependencies(require, module.exports, module);
+        return;
+    }
+
+    if (sinonGlobal) {
+        makeApi(sinonGlobal);
+    }
+}(
+    typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend util/core.js
+ */
+(function (sinonGlobal) {
+    
+    function makeApi(sinon) {
+
+        function timesInWords(count) {
+            switch (count) {
+                case 1:
+                    return "once";
+                case 2:
+                    return "twice";
+                case 3:
+                    return "thrice";
+                default:
+                    return (count || 0) + " times";
+            }
+        }
+
+        sinon.timesInWords = timesInWords;
+        return sinon.timesInWords;
+    }
+
+    function loadDependencies(require, exports, module) {
+        var core = require("./util/core");
+        module.exports = makeApi(core);
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    if (isAMD) {
+        define(loadDependencies);
+        return;
+    }
+
+    if (isNode) {
+        loadDependencies(require, module.exports, module);
+        return;
+    }
+
+    if (sinonGlobal) {
+        makeApi(sinonGlobal);
+    }
+}(
+    typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend util/core.js
+ */
+/**
+ * Format functions
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2014 Christian Johansen
+ */
+(function (sinonGlobal) {
+    
+    function makeApi(sinon) {
+        function typeOf(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();
+        }
+
+        sinon.typeOf = typeOf;
+        return sinon.typeOf;
+    }
+
+    function loadDependencies(require, exports, module) {
+        var core = require("./util/core");
+        module.exports = makeApi(core);
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    if (isAMD) {
+        define(loadDependencies);
+        return;
+    }
+
+    if (isNode) {
+        loadDependencies(require, module.exports, module);
+        return;
+    }
+
+    if (sinonGlobal) {
+        makeApi(sinonGlobal);
+    }
+}(
+    typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend util/core.js
+ * @depend typeOf.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 (sinonGlobal) {
+    
+    function makeApi(sinon) {
+        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 (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;
+        }
+
+        function match(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) {
+                    // we need type coercion here
+                    return expectation == actual; // eslint-disable-line eqeqeq
+                };
+                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;
+        }
+
+        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;
+        };
+
+        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");
+
+        sinon.match = match;
+        return match;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        require("./typeOf");
+        module.exports = makeApi(sinon);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+        return;
+    }
+
+    if (isNode) {
+        loadDependencies(require, module.exports, module);
+        return;
+    }
+
+    if (sinonGlobal) {
+        makeApi(sinonGlobal);
+    }
+}(
+    typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend util/core.js
+ */
+/**
+ * Format functions
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2014 Christian Johansen
+ */
+(function (sinonGlobal, formatio) {
+    
+    function makeApi(sinon) {
+        function valueFormatter(value) {
+            return "" + value;
+        }
+
+        function getFormatioFormatter() {
+            var formatter = formatio.configure({
+                    quoteStrings: false,
+                    limitChildrenCount: 250
+                });
+
+            function format() {
+                return formatter.ascii.apply(formatter, arguments);
+            }
+
+            return format;
+        }
+
+        function getNodeFormatter() {
+            try {
+                var util = require("util");
+            } catch (e) {
+                /* Node, but no util module - would be very old, but better safe than sorry */
+            }
+
+            function format(v) {
+                var isObjectWithNativeToString = typeof v === "object" && v.toString === Object.prototype.toString;
+                return isObjectWithNativeToString ? util.inspect(v) : v;
+            }
+
+            return util ? format : valueFormatter;
+        }
+
+        var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+        var formatter;
+
+        if (isNode) {
+            try {
+                formatio = require("formatio");
+            }
+            catch (e) {} // eslint-disable-line no-empty
+        }
+
+        if (formatio) {
+            formatter = getFormatioFormatter();
+        } else if (isNode) {
+            formatter = getNodeFormatter();
+        } else {
+            formatter = valueFormatter;
+        }
+
+        sinon.format = formatter;
+        return sinon.format;
+    }
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        module.exports = makeApi(sinon);
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    if (isAMD) {
+        define(loadDependencies);
+        return;
+    }
+
+    if (isNode) {
+        loadDependencies(require, module.exports, module);
+        return;
+    }
+
+    if (sinonGlobal) {
+        makeApi(sinonGlobal);
+    }
+}(
+    typeof sinon === "object" && sinon, // eslint-disable-line no-undef
+    typeof formatio === "object" && formatio // eslint-disable-line no-undef
+));
+
+/**
+  * @depend util/core.js
+  * @depend match.js
+  * @depend format.js
+  */
+/**
+  * 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 (sinonGlobal) {
+    
+    var slice = Array.prototype.slice;
+
+    function makeApi(sinon) {
+        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 callProto = {
+            calledOn: function calledOn(thisValue) {
+                if (sinon.match && sinon.match.isMatcher(thisValue)) {
+                    return thisValue.test(this.thisValue);
+                }
+                return this.thisValue === thisValue;
+            },
+
+            calledWith: function calledWith() {
+                var l = arguments.length;
+                if (l > this.args.length) {
+                    return false;
+                }
+                for (var i = 0; i < l; i += 1) {
+                    if (!sinon.deepEqual(arguments[i], this.args[i])) {
+                        return false;
+                    }
+                }
+
+                return true;
+            },
+
+            calledWithMatch: function calledWithMatch() {
+                var l = arguments.length;
+                if (l > this.args.length) {
+                    return false;
+                }
+                for (var i = 0; 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);
+            },
+
+            getStackFrames: function () {
+                // Omit the error message and the two top stack frames in sinon itself:
+                return this.stack && this.stack.split("\n").slice(3);
+            },
+
+            toString: function () {
+                var callStr = this.proxy ? this.proxy.toString() + "(" : "";
+                var args = [];
+
+                if (!this.args) {
+                    return ":(";
+                }
+
+                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 + ")";
+                    }
+                }
+                if (this.stack) {
+                    callStr += this.getStackFrames()[0].replace(/^\s*(?:at\s+|@)?/, " at ");
+
+                }
+
+                return callStr;
+            }
+        };
+
+        callProto.invokeCallback = callProto.yield;
+
+        function createSpyCall(spy, thisValue, args, returnValue, exception, id, stack) {
+            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;
+            proxyCall.stack = stack;
+
+            return proxyCall;
+        }
+        createSpyCall.toString = callProto.toString; // used by mocks
+
+        sinon.spyCall = createSpyCall;
+        return createSpyCall;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        require("./match");
+        require("./format");
+        module.exports = makeApi(sinon);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+        return;
+    }
+
+    if (isNode) {
+        loadDependencies(require, module.exports, module);
+        return;
+    }
+
+    if (sinonGlobal) {
+        makeApi(sinonGlobal);
+    }
+}(
+    typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+  * @depend times_in_words.js
+  * @depend util/core.js
+  * @depend extend.js
+  * @depend call.js
+  * @depend format.js
+  */
+/**
+  * Spy functions
+  *
+  * @author Christian Johansen (christian@cjohansen.no)
+  * @license BSD
+  *
+  * Copyright (c) 2010-2013 Christian Johansen
+  */
+(function (sinonGlobal) {
+    
+    function makeApi(sinon) {
+        var push = Array.prototype.push;
+        var slice = Array.prototype.slice;
+        var callId = 0;
+
+        function spy(object, property, types) {
+            if (!property && typeof object === "function") {
+                return spy.create(object);
+            }
+
+            if (!object && !property) {
+                return spy.create(function () { });
+            }
+
+            if (types) {
+                var methodDesc = sinon.getPropertyDescriptor(object, property);
+                for (var i = 0; i < types.length; i++) {
+                    methodDesc[types[i]] = spy.create(methodDesc[types[i]]);
+                }
+                return sinon.wrapMethod(object, property, methodDesc);
+            }
+
+            return sinon.wrapMethod(object, property, spy.create(object[property]));
+        }
+
+        function matchingFake(fakes, args, strict) {
+            if (!fakes) {
+                return undefined;
+            }
+
+            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, proxyLength) {
+            // Retain the function length:
+            var p;
+            if (proxyLength) {
+                eval("p = (function proxy(" + vars.substring(0, proxyLength * 2 - 1) + // eslint-disable-line no-eval
+                    ") { return p.invoke(func, this, slice.call(arguments)); });");
+            } else {
+                p = function proxy() {
+                    return p.invoke(func, this, slice.call(arguments));
+                };
+            }
+            p.isSinonProxy = true;
+            return p;
+        }
+
+        var uuid = 0;
+
+        // Public API
+        var spyApi = {
+            reset: function () {
+                if (this.invoking) {
+                    var err = new Error("Cannot reset Sinon function while invoking it. " +
+                                        "Move the call to .reset outside of the callback.");
+                    err.name = "InvalidResetException";
+                    throw err;
+                }
+
+                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 = [];
+                this.stacks = [];
+                if (this.fakes) {
+                    for (var i = 0; i < this.fakes.length; i++) {
+                        this.fakes[i].reset();
+                    }
+                }
+
+                return this;
+            },
+
+            create: function create(func, spyLength) {
+                var name;
+
+                if (typeof func !== "function") {
+                    func = function () { };
+                } else {
+                    name = sinon.functionName(func);
+                }
+
+                if (!spyLength) {
+                    spyLength = func.length;
+                }
+
+                var proxy = createProxy(func, spyLength);
+
+                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.instantiateFake = 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++);
+
+                // Make call properties available from within the spied function:
+                createCallProperties.call(this);
+
+                try {
+                    this.invoking = true;
+
+                    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;
+                } finally {
+                    delete this.invoking;
+                }
+
+                push.call(this.exceptions, exception);
+                push.call(this.returnValues, returnValue);
+                push.call(this.stacks, new Error().stack);
+
+                // Make return value and exception available in the calls:
+                createCallProperties.call(this);
+
+                if (exception !== undefined) {
+                    throw exception;
+                }
+
+                return returnValue;
+            },
+
+            named: function named(name) {
+                this.displayName = name;
+                return this;
+            },
+
+            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], this.stacks[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.instantiateFake();
+                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 spyInstance = 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, spyInstance, 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 (spyInstance) {
+                return sinon.timesInWords(spyInstance.callCount);
+            },
+
+            n: function (spyInstance) {
+                return spyInstance.toString();
+            },
+
+            C: function (spyInstance) {
+                var calls = [];
+
+                for (var i = 0, l = spyInstance.callCount; i < l; ++i) {
+                    var stringifiedCall = "    " + spyInstance.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 (spyInstance) {
+                var objects = [];
+
+                for (var i = 0, l = spyInstance.callCount; i < l; ++i) {
+                    push.call(objects, sinon.format(spyInstance.thisValues[i]));
+                }
+
+                return objects.join(", ");
+            },
+
+            "*": function (spyInstance, 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;
+        sinon.spy = spy;
+
+        return spy;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var core = require("./util/core");
+        require("./call");
+        require("./extend");
+        require("./times_in_words");
+        require("./format");
+        module.exports = makeApi(core);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+        return;
+    }
+
+    if (isNode) {
+        loadDependencies(require, module.exports, module);
+        return;
+    }
+
+    if (sinonGlobal) {
+        makeApi(sinonGlobal);
+    }
+}(
+    typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend util/core.js
+ * @depend extend.js
+ */
+/**
+ * Stub behavior
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @author Tim Fischbach (mail@timfischbach.de)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+(function (sinonGlobal) {
+    
+    var slice = Array.prototype.slice;
+    var join = Array.prototype.join;
+    var useLeftMostCallback = -1;
+    var useRightMostCallback = -2;
+
+    var nextTick = (function () {
+        if (typeof process === "object" && typeof process.nextTick === "function") {
+            return process.nextTick;
+        }
+
+        if (typeof setImmediate === "function") {
+            return setImmediate;
+        }
+
+        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) {
+            return args[callArgAt];
+        }
+
+        var argumentList;
+
+        if (callArgAt === useLeftMostCallback) {
+            argumentList = args;
+        }
+
+        if (callArgAt === useRightMostCallback) {
+            argumentList = slice.call(args).reverse();
+        }
+
+        var callArgProp = behavior.callArgProp;
+
+        for (var i = 0, l = argumentList.length; i < l; ++i) {
+            if (!callArgProp && typeof argumentList[i] === "function") {
+                return argumentList[i];
+            }
+
+            if (callArgProp && argumentList[i] &&
+                typeof argumentList[i][callArgProp] === "function") {
+                return argumentList[i][callArgProp];
+            }
+        }
+
+        return null;
+    }
+
+    function makeApi(sinon) {
+        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);
+                }
+            }
+        }
+
+        var proto = {
+            create: function create(stub) {
+                var behavior = sinon.extend({}, sinon.behavior);
+                delete behavior.create;
+                behavior.stub = stub;
+
+                return behavior;
+            },
+
+            isPresent: function isPresent() {
+                return (typeof this.callArgAt === "number" ||
+                        this.exception ||
+                        typeof this.returnArgAt === "number" ||
+                        this.returnThis ||
+                        this.returnValueDefined);
+            },
+
+            invoke: function invoke(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 onCall(index) {
+                return this.stub.onCall(index);
+            },
+
+            onFirstCall: function onFirstCall() {
+                return this.stub.onFirstCall();
+            },
+
+            onSecondCall: function onSecondCall() {
+                return this.stub.onSecondCall();
+            },
+
+            onThirdCall: function onThirdCall() {
+                return this.stub.onThirdCall();
+            },
+
+            withArgs: function withArgs(/* 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 = useLeftMostCallback;
+                this.callbackArguments = slice.call(arguments, 0);
+                this.callbackContext = undefined;
+                this.callArgProp = undefined;
+                this.callbackAsync = false;
+
+                return this;
+            },
+
+            yieldsRight: function () {
+                this.callArgAt = useRightMostCallback;
+                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 = useLeftMostCallback;
+                this.callbackArguments = slice.call(arguments, 1);
+                this.callbackContext = context;
+                this.callArgProp = undefined;
+                this.callbackAsync = false;
+
+                return this;
+            },
+
+            yieldsTo: function (prop) {
+                this.callArgAt = useLeftMostCallback;
+                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 = useLeftMostCallback;
+                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;
+                this.exception = undefined;
+
+                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;
+            }
+        };
+
+        function createAsyncVersion(syncFnName) {
+            return function () {
+                var result = this[syncFnName].apply(this, arguments);
+                this.callbackAsync = true;
+                return result;
+            };
+        }
+
+        // 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"] = createAsyncVersion(method);
+            }
+        }
+
+        sinon.behavior = proto;
+        return proto;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        require("./extend");
+        module.exports = makeApi(sinon);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+        return;
+    }
+
+    if (isNode) {
+        loadDependencies(require, module.exports, module);
+        return;
+    }
+
+    if (sinonGlobal) {
+        makeApi(sinonGlobal);
+    }
+}(
+    typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend util/core.js
+ */
+(function (sinonGlobal) {
+    
+    function makeApi(sinon) {
+        function walkInternal(obj, iterator, context, originalObj, seen) {
+            var proto, prop;
+
+            if (typeof Object.getOwnPropertyNames !== "function") {
+                // We explicitly want to enumerate through all of the prototype's properties
+                // in this case, therefore we deliberately leave out an own property check.
+                /* eslint-disable guard-for-in */
+                for (prop in obj) {
+                    iterator.call(context, obj[prop], prop, obj);
+                }
+                /* eslint-enable guard-for-in */
+
+                return;
+            }
+
+            Object.getOwnPropertyNames(obj).forEach(function (k) {
+                if (!seen[k]) {
+                    seen[k] = true;
+                    var target = typeof Object.getOwnPropertyDescriptor(obj, k).get === "function" ?
+                        originalObj : obj;
+                    iterator.call(context, target[k], k, target);
+                }
+            });
+
+            proto = Object.getPrototypeOf(obj);
+            if (proto) {
+                walkInternal(proto, iterator, context, originalObj, seen);
+            }
+        }
+
+        /* Public: walks the prototype chain of an object and iterates over every own property
+         * name encountered. The iterator is called in the same fashion that Array.prototype.forEach
+         * works, where it is passed the value, key, and own object as the 1st, 2nd, and 3rd positional
+         * argument, respectively. In cases where Object.getOwnPropertyNames is not available, walk will
+         * default to using a simple for..in loop.
+         *
+         * obj - The object to walk the prototype chain for.
+         * iterator - The function to be called on each pass of the walk.
+         * context - (Optional) When given, the iterator will be called with this object as the receiver.
+         */
+        function walk(obj, iterator, context) {
+            return walkInternal(obj, iterator, context, obj, {});
+        }
+
+        sinon.walk = walk;
+        return sinon.walk;
+    }
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        module.exports = makeApi(sinon);
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    if (isAMD) {
+        define(loadDependencies);
+        return;
+    }
+
+    if (isNode) {
+        loadDependencies(require, module.exports, module);
+        return;
+    }
+
+    if (sinonGlobal) {
+        makeApi(sinonGlobal);
+    }
+}(
+    typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend util/core.js
+ * @depend extend.js
+ * @depend spy.js
+ * @depend behavior.js
+ * @depend walk.js
+ */
+/**
+ * Stub functions
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+(function (sinonGlobal) {
+    
+    function makeApi(sinon) {
+        function stub(object, property, func) {
+            if (!!func && typeof func !== "function" && typeof func !== "object") {
+                throw new TypeError("Custom stub should be a function or a property descriptor");
+            }
+
+            var wrapper;
+
+            if (func) {
+                if (typeof func === "function") {
+                    wrapper = sinon.spy && sinon.spy.create ? sinon.spy.create(func) : func;
+                } else {
+                    wrapper = func;
+                    if (sinon.spy && sinon.spy.create) {
+                        var types = sinon.objectKeys(wrapper);
+                        for (var i = 0; i < types.length; i++) {
+                            wrapper[types[i]] = sinon.spy.create(wrapper[types[i]]);
+                        }
+                    }
+                }
+            } else {
+                var stubLength = 0;
+                if (typeof object === "object" && typeof object[property] === "function") {
+                    stubLength = object[property].length;
+                }
+                wrapper = stub.create(stubLength);
+            }
+
+            if (!object && typeof property === "undefined") {
+                return sinon.stub.create();
+            }
+
+            if (typeof property === "undefined" && typeof object === "object") {
+                sinon.walk(object || {}, function (value, prop, propOwner) {
+                    // we don't want to stub things like toString(), valueOf(), etc. so we only stub if the object
+                    // is not Object.prototype
+                    if (
+                        propOwner !== Object.prototype &&
+                        prop !== "constructor" &&
+                        typeof sinon.getPropertyDescriptor(propOwner, prop).value === "function"
+                    ) {
+                        stub(object, prop);
+                    }
+                });
+
+                return object;
+            }
+
+            return sinon.wrapMethod(object, property, wrapper);
+        }
+
+
+        /*eslint-disable no-use-before-define*/
+        function getParentBehaviour(stubInstance) {
+            return (stubInstance.parent && getCurrentBehavior(stubInstance.parent));
+        }
+
+        function getDefaultBehavior(stubInstance) {
+            return stubInstance.defaultBehavior ||
+                    getParentBehaviour(stubInstance) ||
+                    sinon.behavior.create(stubInstance);
+        }
+
+        function getCurrentBehavior(stubInstance) {
+            var behavior = stubInstance.behaviors[stubInstance.callCount - 1];
+            return behavior && behavior.isPresent() ? behavior : getDefaultBehavior(stubInstance);
+        }
+        /*eslint-enable no-use-before-define*/
+
+        var uuid = 0;
+
+        var proto = {
+            create: function create(stubLength) {
+                var functionStub = function () {
+                    return getCurrentBehavior(functionStub).invoke(this, arguments);
+                };
+
+                functionStub.id = "stub#" + uuid++;
+                var orig = functionStub;
+                functionStub = sinon.spy.create(functionStub, stubLength);
+                functionStub.func = orig;
+
+                sinon.extend(functionStub, stub);
+                functionStub.instantiateFake = 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 onCall(index) {
+                if (!this.behaviors[index]) {
+                    this.behaviors[index] = sinon.behavior.create(this);
+                }
+
+                return this.behaviors[index];
+            },
+
+            onFirstCall: function onFirstCall() {
+                return this.onCall(0);
+            },
+
+            onSecondCall: function onSecondCall() {
+                return this.onCall(1);
+            },
+
+            onThirdCall: function onThirdCall() {
+                return this.onCall(2);
+            }
+        };
+
+        function createBehavior(behaviorMethod) {
+            return function () {
+                this.defaultBehavior = this.defaultBehavior || sinon.behavior.create(this);
+                this.defaultBehavior[behaviorMethod].apply(this.defaultBehavior, arguments);
+                return this;
+            };
+        }
+
+        for (var method in sinon.behavior) {
+            if (sinon.behavior.hasOwnProperty(method) &&
+                !proto.hasOwnProperty(method) &&
+                method !== "create" &&
+                method !== "withArgs" &&
+                method !== "invoke") {
+                proto[method] = createBehavior(method);
+            }
+        }
+
+        sinon.extend(stub, proto);
+        sinon.stub = stub;
+
+        return stub;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var core = require("./util/core");
+        require("./behavior");
+        require("./spy");
+        require("./extend");
+        module.exports = makeApi(core);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+        return;
+    }
+
+    if (isNode) {
+        loadDependencies(require, module.exports, module);
+        return;
+    }
+
+    if (sinonGlobal) {
+        makeApi(sinonGlobal);
+    }
+}(
+    typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend times_in_words.js
+ * @depend util/core.js
+ * @depend call.js
+ * @depend extend.js
+ * @depend match.js
+ * @depend spy.js
+ * @depend stub.js
+ * @depend format.js
+ */
+/**
+ * Mock functions.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+(function (sinonGlobal) {
+    
+    function makeApi(sinon) {
+        var push = [].push;
+        var match = sinon.match;
+
+        function mock(object) {
+            // if (typeof console !== undefined && console.warn) {
+            //     console.warn("mock will be removed from Sinon.JS v2.0");
+            // }
+
+            if (!object) {
+                return sinon.expectation.create("Anonymous mock");
+            }
+
+            return mock.create(object);
+        }
+
+        function each(collection, callback) {
+            if (!collection) {
+                return;
+            }
+
+            for (var i = 0, l = collection.length; i < l; i += 1) {
+                callback(collection[i]);
+            }
+        }
+
+        function arrayEquals(arr1, arr2, compareLength) {
+            if (compareLength && (arr1.length !== arr2.length)) {
+                return false;
+            }
+
+            for (var i = 0, l = arr1.length; i < l; i++) {
+                if (!sinon.deepEqual(arr1[i], arr2[i])) {
+                    return false;
+                }
+            }
+            return true;
+        }
+
+        sinon.extend(mock, {
+            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 = [];
+                var 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 if (met.length > 0) {
+                    sinon.expectation.pass(messages.concat(met).join("\n"));
+                }
+
+                return true;
+            },
+
+            invokeMethod: function invokeMethod(method, thisValue, args) {
+                var expectations = this.expectations && this.expectations[method] ? this.expectations[method] : [];
+                var expectationsWithMatchingArgs = [];
+                var currentArgs = args || [];
+                var i, available;
+
+                for (i = 0; i < expectations.length; i += 1) {
+                    var expectedArgs = expectations[i].expectedArguments || [];
+                    if (arrayEquals(expectedArgs, currentArgs, expectations[i].expectsExactArgCount)) {
+                        expectationsWithMatchingArgs.push(expectations[i]);
+                    }
+                }
+
+                for (i = 0; i < expectationsWithMatchingArgs.length; i += 1) {
+                    if (!expectationsWithMatchingArgs[i].met() &&
+                        expectationsWithMatchingArgs[i].allowsCall(thisValue, args)) {
+                        return expectationsWithMatchingArgs[i].apply(thisValue, args);
+                    }
+                }
+
+                var messages = [];
+                var exhausted = 0;
+
+                for (i = 0; i < expectationsWithMatchingArgs.length; i += 1) {
+                    if (expectationsWithMatchingArgs[i].allowsCall(thisValue, args)) {
+                        available = available || expectationsWithMatchingArgs[i];
+                    } else {
+                        exhausted += 1;
+                    }
+                }
+
+                if (available && exhausted === 0) {
+                    return available.apply(thisValue, args);
+                }
+
+                for (i = 0; i < expectations.length; i += 1) {
+                    push.call(messages, "    " + expectations[i].toString());
+                }
+
+                messages.unshift("Unexpected call: " + sinon.spyCall.toString.call({
+                    proxy: method,
+                    args: args
+                }));
+
+                sinon.expectation.fail(messages.join("\n"));
+            }
+        });
+
+        var times = sinon.timesInWords;
+        var slice = Array.prototype.slice;
+
+        function callCountInWords(callCount) {
+            if (callCount === 0) {
+                return "never called";
+            }
+
+            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) {
+            var isMatcher = match && match.isMatcher(possibleMatcher);
+
+            return isMatcher && possibleMatcher.test(arg) || true;
+        }
+
+        sinon.expectation = {
+            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 sinon.spy.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 pass(message) {
+                sinon.assert.pass(message);
+            },
+
+            fail: function fail(message) {
+                var exception = new Error(message);
+                exception.name = "ExpectationError";
+
+                throw exception;
+            }
+        };
+
+        sinon.mock = mock;
+        return mock;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        require("./times_in_words");
+        require("./call");
+        require("./extend");
+        require("./match");
+        require("./spy");
+        require("./stub");
+        require("./format");
+
+        module.exports = makeApi(sinon);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+        return;
+    }
+
+    if (isNode) {
+        loadDependencies(require, module.exports, module);
+        return;
+    }
+
+    if (sinonGlobal) {
+        makeApi(sinonGlobal);
+    }
+}(
+    typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend util/core.js
+ * @depend spy.js
+ * @depend stub.js
+ * @depend mock.js
+ */
+/**
+ * Collections of stubs, spies and mocks.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+(function (sinonGlobal) {
+    
+    var push = [].push;
+    var hasOwnProperty = Object.prototype.hasOwnProperty;
+
+    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);
+        }
+    }
+
+    function makeApi(sinon) {
+        var collection = {
+            verify: function resolve() {
+                each(this, "verify");
+            },
+
+            restore: function restore() {
+                each(this, "restore");
+                compact(this);
+            },
+
+            reset: function restore() {
+                each(this, "reset");
+            },
+
+            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;
+            }
+        };
+
+        sinon.collection = collection;
+        return collection;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        require("./mock");
+        require("./spy");
+        require("./stub");
+        module.exports = makeApi(sinon);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+        return;
+    }
+
+    if (isNode) {
+        loadDependencies(require, module.exports, module);
+        return;
+    }
+
+    if (sinonGlobal) {
+        makeApi(sinonGlobal);
+    }
+}(
+    typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * 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
+ */
+(function () {
+    
+    function makeApi(s, lol) {
+        /*global lolex */
+        var llx = typeof lolex !== "undefined" ? lolex : lol;
+
+        s.useFakeTimers = function () {
+            var now;
+            var methods = Array.prototype.slice.call(arguments);
+
+            if (typeof methods[0] === "string") {
+                now = 0;
+            } else {
+                now = methods.shift();
+            }
+
+            var clock = llx.install(now || 0, methods);
+            clock.restore = clock.uninstall;
+            return clock;
+        };
+
+        s.clock = {
+            create: function (now) {
+                return llx.createClock(now);
+            }
+        };
+
+        s.timers = {
+            setTimeout: setTimeout,
+            clearTimeout: clearTimeout,
+            setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined),
+            clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined),
+            setInterval: setInterval,
+            clearInterval: clearInterval,
+            Date: Date
+        };
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, epxorts, module, lolex) {
+        var core = require("./core");
+        makeApi(core, lolex);
+        module.exports = core;
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module, require("lolex"));
+    } else {
+        makeApi(sinon); // eslint-disable-line no-undef
+    }
+}());
+
+/**
+ * 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;
+
+    function makeApi(sinon) {
+        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;
+            this.lengthComputable = !!progressEventRaw.total;
+        };
+
+        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;
+            }
+        };
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require) {
+        var sinon = require("./core");
+        makeApi(sinon);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require);
+    } else {
+        makeApi(sinon); // eslint-disable-line no-undef
+    }
+}());
+
+/**
+ * @depend util/core.js
+ */
+/**
+ * Logs errors
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2014 Christian Johansen
+ */
+(function (sinonGlobal) {
+    
+    // cache a reference to setTimeout, so that our reference won't be stubbed out
+    // when using fake timers and errors will still get logged
+    // https://github.com/cjohansen/Sinon.JS/issues/381
+    var realSetTimeout = setTimeout;
+
+    function makeApi(sinon) {
+
+        function log() {}
+
+        function logError(label, err) {
+            var msg = label + " threw exception: ";
+
+            function throwLoggedError() {
+                err.message = msg + err.message;
+                throw err;
+            }
+
+            sinon.log(msg + "[" + err.name + "] " + err.message);
+
+            if (err.stack) {
+                sinon.log(err.stack);
+            }
+
+            if (logError.useImmediateExceptions) {
+                throwLoggedError();
+            } else {
+                logError.setTimeout(throwLoggedError, 0);
+            }
+        }
+
+        // When set to true, any errors logged will be thrown immediately;
+        // If set to false, the errors will be thrown in separate execution frame.
+        logError.useImmediateExceptions = false;
+
+        // wrap realSetTimeout with something we can stub in tests
+        logError.setTimeout = function (func, timeout) {
+            realSetTimeout(func, timeout);
+        };
+
+        var exports = {};
+        exports.log = sinon.log = log;
+        exports.logError = sinon.logError = logError;
+
+        return exports;
+    }
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        module.exports = makeApi(sinon);
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    if (isAMD) {
+        define(loadDependencies);
+        return;
+    }
+
+    if (isNode) {
+        loadDependencies(require, module.exports, module);
+        return;
+    }
+
+    if (sinonGlobal) {
+        makeApi(sinonGlobal);
+    }
+}(
+    typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend core.js
+ * @depend ../extend.js
+ * @depend event.js
+ * @depend ../log_error.js
+ */
+/**
+ * Fake XDomainRequest object
+ */
+
+/**
+ * Returns the global to prevent assigning values to 'this' when this is undefined.
+ * This can occur when files are interpreted by node in strict mode.
+ * @private
+ */
+function getGlobal() {
+    
+    return typeof window !== "undefined" ? window : global;
+}
+
+if (typeof sinon === "undefined") {
+    if (typeof this === "undefined") {
+        getGlobal().sinon = {};
+    } else {
+        this.sinon = {};
+    }
+}
+
+// wrapper for global
+(function (global) {
+    
+    var xdr = { XDomainRequest: global.XDomainRequest };
+    xdr.GlobalXDomainRequest = global.XDomainRequest;
+    xdr.supportsXDR = typeof xdr.GlobalXDomainRequest !== "undefined";
+    xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest : false;
+
+    function makeApi(sinon) {
+        sinon.xdr = xdr;
+
+        function FakeXDomainRequest() {
+            this.readyState = FakeXDomainRequest.UNSENT;
+            this.requestBody = null;
+            this.requestHeaders = {};
+            this.status = 0;
+            this.timeout = null;
+
+            if (typeof FakeXDomainRequest.onCreate === "function") {
+                FakeXDomainRequest.onCreate(this);
+            }
+        }
+
+        function verifyState(x) {
+            if (x.readyState !== FakeXDomainRequest.OPENED) {
+                throw new Error("INVALID_STATE_ERR");
+            }
+
+            if (x.sendFlag) {
+                throw new Error("INVALID_STATE_ERR");
+            }
+        }
+
+        function verifyRequestSent(x) {
+            if (x.readyState === FakeXDomainRequest.UNSENT) {
+                throw new Error("Request not sent");
+            }
+            if (x.readyState === FakeXDomainRequest.DONE) {
+                throw new Error("Request done");
+            }
+        }
+
+        function verifyResponseBodyType(body) {
+            if (typeof body !== "string") {
+                var error = new Error("Attempted to respond to fake XDomainRequest with " +
+                                    body + ", which is not a string.");
+                error.name = "InvalidBodyException";
+                throw error;
+            }
+        }
+
+        sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, {
+            open: function open(method, url) {
+                this.method = method;
+                this.url = url;
+
+                this.responseText = null;
+                this.sendFlag = false;
+
+                this.readyStateChange(FakeXDomainRequest.OPENED);
+            },
+
+            readyStateChange: function readyStateChange(state) {
+                this.readyState = state;
+                var eventName = "";
+                switch (this.readyState) {
+                case FakeXDomainRequest.UNSENT:
+                    break;
+                case FakeXDomainRequest.OPENED:
+                    break;
+                case FakeXDomainRequest.LOADING:
+                    if (this.sendFlag) {
+                        //raise the progress event
+                        eventName = "onprogress";
+                    }
+                    break;
+                case FakeXDomainRequest.DONE:
+                    if (this.isTimeout) {
+                        eventName = "ontimeout";
+                    } else if (this.errorFlag || (this.status < 200 || this.status > 299)) {
+                        eventName = "onerror";
+                    } else {
+                        eventName = "onload";
+                    }
+                    break;
+                }
+
+                // raising event (if defined)
+                if (eventName) {
+                    if (typeof this[eventName] === "function") {
+                        try {
+                            this[eventName]();
+                        } catch (e) {
+                            sinon.logError("Fake XHR " + eventName + " handler", e);
+                        }
+                    }
+                }
+            },
+
+            send: function send(data) {
+                verifyState(this);
+
+                if (!/^(get|head)$/i.test(this.method)) {
+                    this.requestBody = data;
+                }
+                this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8";
+
+                this.errorFlag = false;
+                this.sendFlag = true;
+                this.readyStateChange(FakeXDomainRequest.OPENED);
+
+                if (typeof this.onSend === "function") {
+                    this.onSend(this);
+                }
+            },
+
+            abort: function abort() {
+                this.aborted = true;
+                this.responseText = null;
+                this.errorFlag = true;
+
+                if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) {
+                    this.readyStateChange(sinon.FakeXDomainRequest.DONE);
+                    this.sendFlag = false;
+                }
+            },
+
+            setResponseBody: function setResponseBody(body) {
+                verifyRequestSent(this);
+                verifyResponseBodyType(body);
+
+                var chunkSize = this.chunkSize || 10;
+                var index = 0;
+                this.responseText = "";
+
+                do {
+                    this.readyStateChange(FakeXDomainRequest.LOADING);
+                    this.responseText += body.substring(index, index + chunkSize);
+                    index += chunkSize;
+                } while (index < body.length);
+
+                this.readyStateChange(FakeXDomainRequest.DONE);
+            },
+
+            respond: function respond(status, contentType, body) {
+                // content-type ignored, since XDomainRequest does not carry this
+                // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease
+                // test integration across browsers
+                this.status = typeof status === "number" ? status : 200;
+                this.setResponseBody(body || "");
+            },
+
+            simulatetimeout: function simulatetimeout() {
+                this.status = 0;
+                this.isTimeout = true;
+                // Access to this should actually throw an error
+                this.responseText = undefined;
+                this.readyStateChange(FakeXDomainRequest.DONE);
+            }
+        });
+
+        sinon.extend(FakeXDomainRequest, {
+            UNSENT: 0,
+            OPENED: 1,
+            LOADING: 3,
+            DONE: 4
+        });
+
+        sinon.useFakeXDomainRequest = function useFakeXDomainRequest() {
+            sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) {
+                if (xdr.supportsXDR) {
+                    global.XDomainRequest = xdr.GlobalXDomainRequest;
+                }
+
+                delete sinon.FakeXDomainRequest.restore;
+
+                if (keepOnCreate !== true) {
+                    delete sinon.FakeXDomainRequest.onCreate;
+                }
+            };
+            if (xdr.supportsXDR) {
+                global.XDomainRequest = sinon.FakeXDomainRequest;
+            }
+            return sinon.FakeXDomainRequest;
+        };
+
+        sinon.FakeXDomainRequest = FakeXDomainRequest;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./core");
+        require("../extend");
+        require("./event");
+        require("../log_error");
+        makeApi(sinon);
+        module.exports = sinon;
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module);
+    } else {
+        makeApi(sinon); // eslint-disable-line no-undef
+    }
+})(typeof global !== "undefined" ? global : self);
+
+/**
+ * @depend core.js
+ * @depend ../extend.js
+ * @depend event.js
+ * @depend ../log_error.js
+ */
+/**
+ * Fake XMLHttpRequest object
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+(function (sinonGlobal, global) {
+    
+    function getWorkingXHR(globalScope) {
+        var supportsXHR = typeof globalScope.XMLHttpRequest !== "undefined";
+        if (supportsXHR) {
+            return globalScope.XMLHttpRequest;
+        }
+
+        var supportsActiveX = typeof globalScope.ActiveXObject !== "undefined";
+        if (supportsActiveX) {
+            return function () {
+                return new globalScope.ActiveXObject("MSXML2.XMLHTTP.3.0");
+            };
+        }
+
+        return false;
+    }
+
+    var supportsProgress = typeof ProgressEvent !== "undefined";
+    var supportsCustomEvent = typeof CustomEvent !== "undefined";
+    var supportsFormData = typeof FormData !== "undefined";
+    var supportsArrayBuffer = typeof ArrayBuffer !== "undefined";
+    var supportsBlob = typeof Blob === "function";
+    var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest };
+    sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest;
+    sinonXhr.GlobalActiveXObject = global.ActiveXObject;
+    sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject !== "undefined";
+    sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest !== "undefined";
+    sinonXhr.workingXHR = getWorkingXHR(global);
+    sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest());
+
+    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
+    };
+
+    // 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 addEventListener(event, listener) {
+        this.eventListeners[event].push(listener);
+    };
+
+    UploadProgress.prototype.removeEventListener = function removeEventListener(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 dispatchEvent(event) {
+        var listeners = this.eventListeners[event.type] || [];
+
+        for (var i = 0, listener; (listener = listeners[i]) != null; i++) {
+            listener(event);
+        }
+    };
+
+    // Note that for FakeXMLHttpRequest to work pre ES5
+    // we lose some of the alignment with the spec.
+    // To ensure as close a match as possible,
+    // set responseType before calling open, send or respond;
+    function FakeXMLHttpRequest() {
+        this.readyState = FakeXMLHttpRequest.UNSENT;
+        this.requestHeaders = {};
+        this.requestBody = null;
+        this.status = 0;
+        this.statusText = "";
+        this.upload = new UploadProgress();
+        this.responseType = "";
+        this.response = "";
+        if (sinonXhr.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);
+        }
+    }
+
+    function verifyState(xhr) {
+        if (xhr.readyState !== FakeXMLHttpRequest.OPENED) {
+            throw new Error("INVALID_STATE_ERR");
+        }
+
+        if (xhr.sendFlag) {
+            throw new Error("INVALID_STATE_ERR");
+        }
+    }
+
+    function getHeader(headers, header) {
+        header = header.toLowerCase();
+
+        for (var h in headers) {
+            if (h.toLowerCase() === header) {
+                return h;
+            }
+        }
+
+        return null;
+    }
+
+    // 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 addFilter(fn) {
+        this.filters.push(fn);
+    };
+    var IE6Re = /MSIE 6/;
+    FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) {
+        var xhr = new sinonXhr.workingXHR(); // eslint-disable-line new-cap
+
+        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 stateChange() {
+            fakeXhr.readyState = xhr.readyState;
+            if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) {
+                copyAttrs(["status", "statusText"]);
+            }
+            if (xhr.readyState >= FakeXMLHttpRequest.LOADING) {
+                copyAttrs(["responseText", "response"]);
+            }
+            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)) {
+
+                    /*eslint-disable no-loop-func*/
+                    each(fakeXhr.eventListeners[event], function (handler) {
+                        xhr.addEventListener(event, handler);
+                    });
+                    /*eslint-enable no-loop-func*/
+                }
+            }
+            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;
+        }
+    }
+
+    function convertToArrayBuffer(body) {
+        var buffer = new ArrayBuffer(body.length);
+        var view = new Uint8Array(buffer);
+        for (var i = 0; i < body.length; i++) {
+            var charCode = body.charCodeAt(i);
+            if (charCode >= 256) {
+                throw new TypeError("arraybuffer or blob responseTypes require binary string, " +
+                                    "invalid character " + body[i] + " found.");
+            }
+            view[i] = charCode;
+        }
+        return buffer;
+    }
+
+    function isXmlContentType(contentType) {
+        return !contentType || /(text\/xml)|(application\/xml)|(\+xml)/.test(contentType);
+    }
+
+    function convertResponseBody(responseType, contentType, body) {
+        if (responseType === "" || responseType === "text") {
+            return body;
+        } else if (supportsArrayBuffer && responseType === "arraybuffer") {
+            return convertToArrayBuffer(body);
+        } else if (responseType === "json") {
+            try {
+                return JSON.parse(body);
+            } catch (e) {
+                // Return parsing failure as null
+                return null;
+            }
+        } else if (supportsBlob && responseType === "blob") {
+            var blobOptions = {};
+            if (contentType) {
+                blobOptions.type = contentType;
+            }
+            return new Blob([convertToArrayBuffer(body)], blobOptions);
+        } else if (responseType === "document") {
+            if (isXmlContentType(contentType)) {
+                return FakeXMLHttpRequest.parseXML(body);
+            }
+            return null;
+        }
+        throw new Error("Invalid responseType " + responseType);
+    }
+
+    function clearResponse(xhr) {
+        if (xhr.responseType === "" || xhr.responseType === "text") {
+            xhr.response = xhr.responseText = "";
+        } else {
+            xhr.response = xhr.responseText = null;
+        }
+        xhr.responseXML = null;
+    }
+
+    FakeXMLHttpRequest.parseXML = function parseXML(text) {
+        // Treat empty string as parsing failure
+        if (text !== "") {
+            try {
+                if (typeof DOMParser !== "undefined") {
+                    var parser = new DOMParser();
+                    return parser.parseFromString(text, "text/xml");
+                }
+                var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM");
+                xmlDoc.async = "false";
+                xmlDoc.loadXML(text);
+                return xmlDoc;
+            } catch (e) {
+                // Unable to parse XML - no biggie
+            }
+        }
+
+        return null;
+    };
+
+    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",
+        207: "Multi-Status",
+        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"
+    };
+
+    function makeApi(sinon) {
+        sinon.xhr = sinonXhr;
+
+        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;
+                clearResponse(this);
+                this.requestHeaders = {};
+                this.sendFlag = false;
+
+                if (FakeXMLHttpRequest.useFilters === true) {
+                    var xhrArgs = arguments;
+                    var defake = some(FakeXMLHttpRequest.filters, function (filter) {
+                        return filter.apply(this, xhrArgs);
+                    });
+                    if (defake) {
+                        return FakeXMLHttpRequest.defake(this, arguments);
+                    }
+                }
+                this.readyStateChange(FakeXMLHttpRequest.OPENED);
+            },
+
+            readyStateChange: function readyStateChange(state) {
+                this.readyState = state;
+
+                var readyStateChangeEvent = new sinon.Event("readystatechange", false, false, this);
+
+                if (typeof this.onreadystatechange === "function") {
+                    try {
+                        this.onreadystatechange(readyStateChangeEvent);
+                    } catch (e) {
+                        sinon.logError("Fake XHR onreadystatechange handler", e);
+                    }
+                }
+
+                switch (this.readyState) {
+                    case FakeXMLHttpRequest.DONE:
+                        if (supportsProgress) {
+                            this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100}));
+                            this.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100}));
+                        }
+                        this.upload.dispatchEvent(new sinon.Event("load", false, false, this));
+                        this.dispatchEvent(new sinon.Event("load", false, false, this));
+                        this.dispatchEvent(new sinon.Event("loadend", false, false, this));
+                        break;
+                }
+
+                this.dispatchEvent(readyStateChangeEvent);
+            },
+
+            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)) {
+                    var contentType = getHeader(this.requestHeaders, "Content-Type");
+                    if (this.requestHeaders[contentType]) {
+                        var value = this.requestHeaders[contentType].split(";");
+                        this.requestHeaders[contentType] = value[0] + ";charset=utf-8";
+                    } else if (supportsFormData && !(data instanceof FormData)) {
+                        this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8";
+                    }
+
+                    this.requestBody = data;
+                }
+
+                this.errorFlag = false;
+                this.sendFlag = this.async;
+                clearResponse(this);
+                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;
+                clearResponse(this);
+                this.errorFlag = true;
+                this.requestHeaders = {};
+                this.responseHeaders = {};
+
+                if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) {
+                    this.readyStateChange(FakeXMLHttpRequest.DONE);
+                    this.sendFlag = false;
+                }
+
+                this.readyState = 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 = getHeader(this.responseHeaders, header);
+
+                return this.responseHeaders[header] || 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 contentType = this.getResponseHeader("Content-Type");
+
+                var isTextResponse = this.responseType === "" || this.responseType === "text";
+                clearResponse(this);
+                if (this.async) {
+                    var chunkSize = this.chunkSize || 10;
+                    var index = 0;
+
+                    do {
+                        this.readyStateChange(FakeXMLHttpRequest.LOADING);
+
+                        if (isTextResponse) {
+                            this.responseText = this.response += body.substring(index, index + chunkSize);
+                        }
+                        index += chunkSize;
+                    } while (index < body.length);
+                }
+
+                this.response = convertResponseBody(this.responseType, contentType, body);
+                if (isTextResponse) {
+                    this.responseText = this.response;
+                }
+
+                if (this.responseType === "document") {
+                    this.responseXML = this.response;
+                } else if (this.responseType === "" && isXmlContentType(contentType)) {
+                    this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText);
+                }
+                this.readyStateChange(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));
+                }
+            },
+
+            downloadProgress: function downloadProgress(progressEventRaw) {
+                if (supportsProgress) {
+                    this.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
+        });
+
+        sinon.useFakeXMLHttpRequest = function () {
+            FakeXMLHttpRequest.restore = function restore(keepOnCreate) {
+                if (sinonXhr.supportsXHR) {
+                    global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest;
+                }
+
+                if (sinonXhr.supportsActiveX) {
+                    global.ActiveXObject = sinonXhr.GlobalActiveXObject;
+                }
+
+                delete FakeXMLHttpRequest.restore;
+
+                if (keepOnCreate !== true) {
+                    delete FakeXMLHttpRequest.onCreate;
+                }
+            };
+            if (sinonXhr.supportsXHR) {
+                global.XMLHttpRequest = FakeXMLHttpRequest;
+            }
+
+            if (sinonXhr.supportsActiveX) {
+                global.ActiveXObject = function ActiveXObject(objId) {
+                    if (objId === "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) {
+
+                        return new FakeXMLHttpRequest();
+                    }
+
+                    return new sinonXhr.GlobalActiveXObject(objId);
+                };
+            }
+
+            return FakeXMLHttpRequest;
+        };
+
+        sinon.FakeXMLHttpRequest = FakeXMLHttpRequest;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./core");
+        require("../extend");
+        require("./event");
+        require("../log_error");
+        makeApi(sinon);
+        module.exports = sinon;
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+        return;
+    }
+
+    if (isNode) {
+        loadDependencies(require, module.exports, module);
+        return;
+    }
+
+    if (sinonGlobal) {
+        makeApi(sinonGlobal);
+    }
+}(
+    typeof sinon === "object" && sinon, // eslint-disable-line no-undef
+    typeof global !== "undefined" ? global : self
+));
+
+/**
+ * @depend fake_xdomain_request.js
+ * @depend fake_xml_http_request.js
+ * @depend ../format.js
+ * @depend ../log_error.js
+ */
+/**
+ * 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
+ */
+(function () {
+    
+    var push = [].push;
+
+    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 makeApi(sinon) {
+        sinon.fakeServer = {
+            create: function (config) {
+                var server = sinon.create(this);
+                server.configure(config);
+                if (!sinon.xhr.supportsCORS) {
+                    this.xhr = sinon.useFakeXDomainRequest();
+                } else {
+                    this.xhr = sinon.useFakeXMLHttpRequest();
+                }
+                server.requests = [];
+
+                this.xhr.onCreate = function (xhrObj) {
+                    server.addRequest(xhrObj);
+                };
+
+                return server;
+            },
+            configure: function (config) {
+                var whitelist = {
+                    "autoRespond": true,
+                    "autoRespondAfter": true,
+                    "respondImmediately": true,
+                    "fakeHTTPMethods": true
+                };
+                var setting;
+
+                config = config || {};
+                for (setting in config) {
+                    if (whitelist.hasOwnProperty(setting) && config.hasOwnProperty(setting)) {
+                        this[setting] = config[setting];
+                    }
+                }
+            },
+            addRequest: function addRequest(xhrObj) {
+                var server = this;
+                push.call(this.requests, xhrObj);
+
+                xhrObj.onSend = function () {
+                    server.handleRequest(this);
+
+                    if (server.respondImmediately) {
+                        server.respond();
+                    } else 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);
+                }
+            },
+
+            log: 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);
+            },
+
+            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, queue.length);
+
+                for (var i = 0; i < requests.length; i++) {
+                    this.processRequest(requests[i]);
+                }
+            },
+
+            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) {
+                        this.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);
+            }
+        };
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./core");
+        require("./fake_xdomain_request");
+        require("./fake_xml_http_request");
+        require("../format");
+        makeApi(sinon);
+        module.exports = sinon;
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module);
+    } else {
+        makeApi(sinon); // eslint-disable-line no-undef
+    }
+}());
+
+/**
+ * @depend fake_server.js
+ * @depend fake_timers.js
+ */
+/**
+ * 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 makeApi(sinon) {
+        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);
+        };
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require) {
+        var sinon = require("./core");
+        require("./fake_server");
+        require("./fake_timers");
+        makeApi(sinon);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require);
+    } else {
+        makeApi(sinon); // eslint-disable-line no-undef
+    }
+}());
+
+/**
+ * @depend util/core.js
+ * @depend extend.js
+ * @depend collection.js
+ * @depend util/fake_timers.js
+ * @depend util/fake_server_with_clock.js
+ */
+/**
+ * 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
+ */
+(function (sinonGlobal) {
+    
+    function makeApi(sinon) {
+        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;
+                }
+
+                obj.match = sinon.match;
+
+                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;
+                var 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;
+            },
+
+            match: sinon.match
+        });
+
+        sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer;
+
+        return sinon.sandbox;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        require("./extend");
+        require("./util/fake_server_with_clock");
+        require("./util/fake_timers");
+        require("./collection");
+        module.exports = makeApi(sinon);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+        return;
+    }
+
+    if (isNode) {
+        loadDependencies(require, module.exports, module);
+        return;
+    }
+
+    if (sinonGlobal) {
+        makeApi(sinonGlobal);
+    }
+}(
+    typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend util/core.js
+ * @depend sandbox.js
+ */
+/**
+ * Test function, sandboxes fakes
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+(function (sinonGlobal) {
+    
+    function makeApi(sinon) {
+        var slice = Array.prototype.slice;
+
+        function test(callback) {
+            var type = typeof callback;
+
+            if (type !== "function") {
+                throw new TypeError("sinon.test needs to wrap a test function, got " + type);
+            }
+
+            function sinonSandboxedTest() {
+                var config = sinon.getConfig(sinon.config);
+                config.injectInto = config.injectIntoThis && this || config.injectInto;
+                var sandbox = sinon.sandbox.create(config);
+                var args = slice.call(arguments);
+                var oldDone = args.length && args[args.length - 1];
+                var exception, result;
+
+                if (typeof oldDone === "function") {
+                    args[args.length - 1] = function sinonDone(res) {
+                        if (res) {
+                            sandbox.restore();
+                        } else {
+                            sandbox.verifyAndRestore();
+                        }
+                        oldDone(res);
+                    };
+                }
+
+                try {
+                    result = callback.apply(this, args.concat(sandbox.args));
+                } catch (e) {
+                    exception = e;
+                }
+
+                if (typeof oldDone !== "function") {
+                    if (typeof exception !== "undefined") {
+                        sandbox.restore();
+                        throw exception;
+                    } else {
+                        sandbox.verifyAndRestore();
+                    }
+                }
+
+                return result;
+            }
+
+            if (callback.length) {
+                return function sinonAsyncSandboxedTest(done) { // eslint-disable-line no-unused-vars
+                    return sinonSandboxedTest.apply(this, arguments);
+                };
+            }
+
+            return sinonSandboxedTest;
+        }
+
+        test.config = {
+            injectIntoThis: true,
+            injectInto: null,
+            properties: ["spy", "stub", "mock", "clock", "server", "requests"],
+            useFakeTimers: true,
+            useFakeServer: true
+        };
+
+        sinon.test = test;
+        return test;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var core = require("./util/core");
+        require("./sandbox");
+        module.exports = makeApi(core);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module);
+    } else if (sinonGlobal) {
+        makeApi(sinonGlobal);
+    }
+}(typeof sinon === "object" && sinon || null)); // eslint-disable-line no-undef
+
+/**
+ * @depend util/core.js
+ * @depend test.js
+ */
+/**
+ * Test case, sandboxes all test functions
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+(function (sinonGlobal) {
+    
+    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 makeApi(sinon) {
+        function testCase(tests, prefix) {
+            if (!tests || typeof tests !== "object") {
+                throw new TypeError("sinon.testCase needs an object with test functions");
+            }
+
+            prefix = prefix || "test";
+            var rPrefix = new RegExp("^" + prefix);
+            var methods = {};
+            var setUp = tests.setUp;
+            var tearDown = tests.tearDown;
+            var testName,
+                property,
+                method;
+
+            for (testName in tests) {
+                if (tests.hasOwnProperty(testName) && !/^(setUp|tearDown)$/.test(testName)) {
+                    property = tests[testName];
+
+                    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;
+        }
+
+        sinon.testCase = testCase;
+        return testCase;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var core = require("./util/core");
+        require("./test");
+        module.exports = makeApi(core);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+        return;
+    }
+
+    if (isNode) {
+        loadDependencies(require, module.exports, module);
+        return;
+    }
+
+    if (sinonGlobal) {
+        makeApi(sinonGlobal);
+    }
+}(
+    typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend times_in_words.js
+ * @depend util/core.js
+ * @depend match.js
+ * @depend format.js
+ */
+/**
+ * Assertions matching the test spy retrieval interface.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+(function (sinonGlobal, global) {
+    
+    var slice = Array.prototype.slice;
+
+    function makeApi(sinon) {
+        var assert;
+
+        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 (method.proxy && method.proxy.isSinonProxy) {
+                    verifyIsStub(method.proxy);
+                } else {
+                    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 || fake.proxy.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() {},
+
+            callOrder: function assertCallOrder() {
+                verifyIsStub.apply(null, arguments);
+                var expected = "";
+                var 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 !== "expose" && (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");
+
+        sinon.assert = assert;
+        return assert;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        require("./match");
+        require("./format");
+        module.exports = makeApi(sinon);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+        return;
+    }
+
+    if (isNode) {
+        loadDependencies(require, module.exports, module);
+        return;
+    }
+
+    if (sinonGlobal) {
+        makeApi(sinonGlobal);
+    }
+}(
+    typeof sinon === "object" && sinon, // eslint-disable-line no-undef
+    typeof global !== "undefined" ? global : self
+));
+
+  return sinon;
+}));
diff --git a/resources/lib/sinonjs/sinon-ie-1.15.4.js b/resources/lib/sinonjs/sinon-ie-1.15.4.js
deleted file mode 100644 (file)
index 9eac958..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * Sinon.JS 1.15.4, 2015/06/27
- *
- * @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.
- */
-
-/**
- * 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
- */
-if (typeof window !== "undefined") {
-    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;
-}
-
-/**
- * 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
- */
-if (typeof window !== "undefined") {
-    function XMLHttpRequest() {}
-
-    // Reassign the original function. Now its writable attribute
-    // should be true. Hackish, I know, but it works.
-    XMLHttpRequest = sinon.xhr.XMLHttpRequest || undefined;
-}
-/**
- * Helps IE run the fake XDomainRequest. 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 XDR to work in IE, don't include this file.
- */
-if (typeof window !== "undefined") {
-    function XDomainRequest() {}
-
-    // Reassign the original function. Now its writable attribute
-    // should be true. Hackish, I know, but it works.
-    XDomainRequest = sinon.xdr.XDomainRequest || undefined;
-}
index ef17cc3..53f7153 100644 (file)
Binary files a/resources/src/jquery.tipsy/images/tipsy.png and b/resources/src/jquery.tipsy/images/tipsy.png differ
index 7cfbfeb..c212aeb 100644 (file)
Binary files a/resources/src/jquery/images/jquery.arrowSteps.divider-rtl.png and b/resources/src/jquery/images/jquery.arrowSteps.divider-rtl.png differ
index eb07028..e6546bf 100644 (file)
Binary files a/resources/src/jquery/images/jquery.arrowSteps.head-ltr.png and b/resources/src/jquery/images/jquery.arrowSteps.head-ltr.png differ
index 7ea2fdb..2af30b9 100644 (file)
Binary files a/resources/src/jquery/images/jquery.arrowSteps.head-rtl.png and b/resources/src/jquery/images/jquery.arrowSteps.head-rtl.png differ
index 19efb6c..915b347 100644 (file)
Binary files a/resources/src/jquery/images/marker.png and b/resources/src/jquery/images/marker.png differ
index fe08de0..c9606b0 100644 (file)
Binary files a/resources/src/jquery/images/mask.png and b/resources/src/jquery/images/mask.png differ
index e340425..fc63091 100644 (file)
Binary files a/resources/src/jquery/images/sort_both.png and b/resources/src/jquery/images/sort_both.png differ
index d58d54d..ce04a0f 100644 (file)
Binary files a/resources/src/jquery/images/sort_down.png and b/resources/src/jquery/images/sort_down.png differ
index 1a5f27e..2ebe071 100644 (file)
Binary files a/resources/src/jquery/images/sort_up.png and b/resources/src/jquery/images/sort_up.png differ
index 7e53103..d930224 100644 (file)
Binary files a/resources/src/jquery/images/wheel.png and b/resources/src/jquery/images/wheel.png differ
index 01d9a43..38e5a1f 100644 (file)
@@ -14,7 +14,7 @@
  *
  *             $( '#textbox' ).suggestions();
  *
- * Uses jQuery.suggestions singleteon internally.
+ * Uses jQuery.suggestions singleton internally.
  *
  * @class jQuery.plugin.suggestions
  */
                                                if ( +new Date() - cache[ val ].timestamp < context.config.cacheMaxAge ) {
                                                        context.data.$textbox.suggestions( 'suggestions', cache[ val ].suggestions );
                                                        if ( typeof context.config.update.after === 'function' ) {
-                                                               context.config.update.after.call( context.data.$textbox );
+                                                               context.config.update.after.call( context.data.$textbox, cache[ val ].metadata );
                                                        }
                                                        cacheHit = true;
                                                } else {
                                                context.config.fetch.call(
                                                        context.data.$textbox,
                                                        val,
-                                                       function ( suggestions ) {
+                                                       function ( suggestions, metadata ) {
                                                                suggestions = suggestions.slice( 0, context.config.maxRows );
                                                                context.data.$textbox.suggestions( 'suggestions', suggestions );
                                                                if ( typeof context.config.update.after === 'function' ) {
-                                                                       context.config.update.after.call( context.data.$textbox );
+                                                                       context.config.update.after.call( context.data.$textbox, metadata );
                                                                }
                                                                if ( context.config.cache ) {
                                                                        cache[ val ] = {
                                                                                suggestions: suggestions,
+                                                                               metadata: metadata,
                                                                                timestamp: +new Date()
                                                                        };
                                                                }
index 2318b33..50bfa87 100644 (file)
                                        $.data( table, 'tablesorter', { config: config } );
 
                                        // Get the CSS class names, could be done elsewhere
-                                       sortCSS = [ config.cssDesc, config.cssAsc ];
+                                       sortCSS = [ config.cssAsc, config.cssDesc ];
+                                       // Messages tell the the user what the *next* state will be
+                                       // so are in reverse order to the CSS classes.
                                        sortMsg = [ mw.msg( 'sort-descending' ), mw.msg( 'sort-ascending' ) ];
 
                                        // Build headers
index 8ec604e..9fc5800 100644 (file)
Binary files a/resources/src/mediawiki.action/images/green-checkmark.png and b/resources/src/mediawiki.action/images/green-checkmark.png differ
index e0a6bd7..d99ba3c 100644 (file)
Binary files a/resources/src/mediawiki.action/images/nextredirect-ltr.png and b/resources/src/mediawiki.action/images/nextredirect-ltr.png differ
index ddb5273..a25d78a 100644 (file)
Binary files a/resources/src/mediawiki.action/images/nextredirect-rtl.png and b/resources/src/mediawiki.action/images/nextredirect-rtl.png differ
index 0734d73..ef4a110 100644 (file)
Binary files a/resources/src/mediawiki.action/images/redirect-ltr.png and b/resources/src/mediawiki.action/images/redirect-ltr.png differ
index 168a1c1..b339371 100644 (file)
@@ -2,6 +2,10 @@
        'use strict';
 
        /**
+        * Fired after an edit was successfully saved.
+        *
+        * Does not fire for null edits.
+        *
         * @event postEdit
         * @member mw.hook
         * @param {Object} [data] Optional data
index 712b1b4..afad5c6 100644 (file)
Binary files a/resources/src/mediawiki.legacy/images/magnify-clip-ltr.png and b/resources/src/mediawiki.legacy/images/magnify-clip-ltr.png differ
index 1d03a8c..4ccc943 100644 (file)
Binary files a/resources/src/mediawiki.legacy/images/magnify-clip-rtl.png and b/resources/src/mediawiki.legacy/images/magnify-clip-rtl.png differ
index ec3cddc..fd615b7 100644 (file)
@@ -1,12 +1,12 @@
-.animation (...) {
-       -webkit-animation: @arguments;
-       -moz-animation: @arguments;
-       -o-animation: @arguments;
-       animation: @arguments;
+.animation( ... ) {
+       -webkit-animation: @arguments; // Chrome 4-42, Safari 4-8, Opera 15-29, Android 2.1-4.4.4
+       -moz-animation: @arguments; // Firefox 5-15
+       -o-animation: @arguments; // Opera 12.1
+       animation: @arguments; // Chrome 43+, Firefox 16+, IE 10+, Edge 12+, Safari 9+, Opera 30+, iOS 9+, Android 47+
 }
 
-.transform-rotate (@deg) {
-       -webkit-transform: rotate(@deg);
-       -moz-transform: rotate(@deg);
-       transform: rotate(@deg);
+.transform-rotate( @deg ) {
+       -webkit-transform: rotate( @deg );
+       -moz-transform: rotate( @deg );
+       transform: rotate( @deg );
 }
\ No newline at end of file
index a550cbe..3535be8 100644 (file)
@@ -8,22 +8,22 @@
 //
 // See <http://lesscss.org/#-mixins> for more information about how to write mixins.
 
-.background-image(@url) {
-       background-image: e('/* @embed */') url(@url);
+.background-image( @url ) {
+       background-image: e( '/* @embed */' ) url( @url );
 }
 
 // Deprecated in MW 1.27
-.background-size(@width, @height) {
+.background-size( @width, @height ) {
        // Vendor prefix is added to support Android 2
        -webkit-background-size: @width @height;
        background-size: @width @height;
 }
 
-.vertical-gradient(@startColor: gray, @endColor: white, @startPos: 0, @endPos: 100%) {
+.vertical-gradient( @startColor: gray, @endColor: white, @startPos: 0, @endPos: 100% ) {
        background-color: @endColor;
-       background-image: -moz-linear-gradient( top, @startColor @startPos, @endColor @endPos ); // Firefox 3.6+
        background-image: -webkit-gradient( linear, left top, left bottom, color-stop( @startPos, @startColor ), color-stop( @endPos, @endColor ) ); // Safari 4+, Chrome 2+
        background-image: -webkit-linear-gradient( top, @startColor @startPos, @endColor @endPos ); // Safari 5.1+, Chrome 10+
+       background-image: -moz-linear-gradient( top, @startColor @startPos, @endColor @endPos ); // Firefox 3.6+
        background-image: linear-gradient( @startColor @startPos, @endColor @endPos ); // Standard
 }
 
 //
 // We do not embed the fallback image on the assumption that the gain for old browsers
 // is not worth the harm done to modern ones.
-.background-image-svg(@svg, @fallback) {
-       background-image: url(@fallback);
-       background-image: linear-gradient(transparent, transparent), e('/* @embed */') url(@svg);
+.background-image-svg( @svg, @fallback ) {
+       background-image: url( @fallback );
+       background-image: linear-gradient( transparent, transparent ), e( '/* @embed */' ) url( @svg );
        // Do not serve SVG to Opera 12, bad rendering with border-radius or background-size (T87504)
-       background-image: -o-linear-gradient(transparent, transparent), url(@fallback);
+       background-image: -o-linear-gradient( transparent, transparent ), url( @fallback );
 }
 
-.list-style-image(@url) {
-       list-style-image: e('/* @embed */') url(@url);
+.list-style-image( @url ) {
+       list-style-image: e( '/* @embed */' ) url( @url );
 }
 
-.list-style-image-svg(@svg, @fallback) {
-       list-style-image: e('/* @embed */') url(@svg);
+.list-style-image-svg( @svg, @fallback ) {
+       list-style-image: e( '/* @embed */' ) url( @svg );
        /* Fallback to PNG bullet for IE 8 and below using CSS hack */
-       list-style-image: e('/* @embed */') url(@fallback) e('\9');
+       list-style-image: e( '/* @embed */' ) url( @fallback ) e( '\9' );
 }
 
-.transition(@value) {
+.transition( @value ) {
        -webkit-transition: @value; // Safari 3.1-6.0, iOS 3.2-6.1, Android 2.1-4.3
        -moz-transition: @value; // Firefox 4-15
        transition: @value; // Chrome 26+, Firefox 16+, IE 10+, Safari 6.1+, Opera 12.1+, iOS 7+, Android 4.4+
 }
 
-.box-sizing(@value) {
+.box-sizing( @value ) {
        -webkit-box-sizing: @value; // Safari 3.1-5.0, iOS 3.2-4.3, Android 2.1-3.0
        -moz-box-sizing: @value; // Firefox 4-28,
        box-sizing: @value; // Chrome 10+, Firefox 29+, IE 8+, Safari 5.1+, Opera 10+, iOS 5+, Android 4+
 }
 
-.box-shadow(@value) {
+.box-shadow( @value ) {
        -webkit-box-shadow: @value; // Safari 3.1-5.0, iOS 3.2-4.3, Android 2.1-3.0
        box-shadow: @value; // Chrome 10+, Firefox 4+, IE 9+, Safari 5.1+, Opera 11+, iOS 5+, Android 4+
 }
 
-.column-count(@value) {
+.column-count( @value ) {
        -webkit-column-count: @value;
        -moz-column-count: @value;
        column-count: @value;
 }
 
-.column-width(@value) {
+.column-width( @value ) {
        -webkit-column-width: @value; // Chrome Any, Safari 3+, Opera 15+
        -moz-column-width: @value; // Firefox 1.5+
        column-width: @value; // IE 10+, Opera 11.1-12.1
        break-inside: avoid-column; // IE 10+, Opera 11.1-12.1
 }
 
-.flex-display(@display: flex) {
+.flex-display( @display: flex ) {
        display: ~"-webkit-@{display}"; // iOS 6-, Safari 3.1-6
        display: ~"-moz-@{display}"; // Firefox 21-
        display: ~"-ms-@{display}box"; // IE 10
        display: @display;
 }
 
-.flex(@grow: 1, @shrink: 1, @width: auto, @order: 1) {
+.flex( @grow: 1, @shrink: 1, @width: auto, @order: 1 ) {
        // For 2009/2012 spec alignment consistency with current default
        -webkit-box-pack: justify; // iOS 6-, Safari 3.1-6
        -moz-box-pack: justify; // Firefox 21-
-       -ms-flex-pack: justify; // IE10 (2012 spec)
+       -ms-flex-pack: justify; // IE 10 (2012 spec)
        justify-content: space-between; // Current default
 
        // 2009 spec only supports 'flexible' as opposed to grow (flexPositive)
        -moz-box-flex: @grow; // Firefox 21-
        width: @width; // Fallback for flex-basis
 
-       -ms-flex: @grow @shrink @width; // IE10
+       -ms-flex: @grow @shrink @width; // IE 10
        flex: @grow @shrink @width;
 
        -webkit-box-ordinal-group: @order; // iOS 6-, Safari 3.1-6
        -moz-box-ordinal-group: @order; // Firefox 21-
-       -ms-flex-order: @order; // IE10
+       -ms-flex-order: @order; // IE 10
        order: @order;
 }
+
+
+// Screen Reader Helper Mixin
+.mixin-screen-reader-text() {
+       display: block;
+       position: absolute !important;
+       clip: rect( 1px, 1px, 1px, 1px );
+       width: 1px;
+       height: 1px;
+       margin: -1px;
+       border: 0;
+       padding: 0;
+       overflow: hidden;
+}
index 85b6bd4..a404286 100644 (file)
@@ -3,12 +3,12 @@
 // of whether .rotation is used.
 @import "mediawiki.mixins.animation";
 
-.rotate-frames () {
+.rotate-frames() {
        from {
-               .transform-rotate(0deg);
+               .transform-rotate( 0deg );
        }
        to {
-               .transform-rotate(360deg);
+               .transform-rotate( 360deg );
        }
 }
 
@@ -25,5 +25,5 @@
 }
 
 .rotation( @time ) {
-       .animation(rotate, @time, infinite, linear);
+       .animation( rotate, @time, infinite, linear );
 }
index 1b31956..12825de 100644 (file)
@@ -33,7 +33,7 @@
 // Button styling
 // ----------------------------------------------------------------------------
 
-.button-colors(@bgColor, @highlightColor, @activeColor) {
+.button-colors( @bgColor, @highlightColor, @activeColor ) {
        background: @bgColor;
 
        &:hover {
        }
 
        &:active,
+       &.is-on,
        &.mw-ui-checked {
                background: @activeColor;
                box-shadow: none;
        }
 }
 
-.button-colors(@bgColor, @highlightColor, @activeColor) when (lightness(@bgColor) >= 70%) {
+.button-colors( @bgColor, @highlightColor, @activeColor ) when ( lightness( @bgColor ) >= 70% ) {
        color: @colorButtonText;
        border: 1px solid @colorGray12;
 
@@ -86,7 +87,7 @@
        }
 }
 
-.button-colors(@bgColor, @highlightColor, @activeColor) when (lightness(@bgColor) < 70%) {
+.button-colors( @bgColor, @highlightColor, @activeColor ) when ( lightness( @bgColor ) < 70% ) {
        color: #fff;
        // border of the same color as background so that light background and
        // dark background buttons are the same height and width
        }
 }
 
-.button-colors-quiet(@textColor, @highlightColor, @activeColor) {
+.button-colors-quiet( @textColor, @highlightColor, @activeColor ) {
        // Quiet buttons all start gray, and reveal
        // constructive/progressive/destructive color on hover and active.
        color: @colorButtonText;
index 8efc4f2..c6ae166 100644 (file)
Binary files a/resources/src/mediawiki.skinning/images/audio-ltr.png and b/resources/src/mediawiki.skinning/images/audio-ltr.png differ
index 1afdf40..5a70289 100644 (file)
Binary files a/resources/src/mediawiki.skinning/images/audio-rtl.png and b/resources/src/mediawiki.skinning/images/audio-rtl.png differ
index 624ecec..7c92825 100644 (file)
Binary files a/resources/src/mediawiki.skinning/images/chat-ltr.png and b/resources/src/mediawiki.skinning/images/chat-ltr.png differ
index f90fa33..5411b14 100644 (file)
Binary files a/resources/src/mediawiki.skinning/images/chat-rtl.png and b/resources/src/mediawiki.skinning/images/chat-rtl.png differ
index 4ea9373..039b780 100644 (file)
Binary files a/resources/src/mediawiki.skinning/images/document-ltr.png and b/resources/src/mediawiki.skinning/images/document-ltr.png differ
index c281677..3fd177e 100644 (file)
Binary files a/resources/src/mediawiki.skinning/images/document-rtl.png and b/resources/src/mediawiki.skinning/images/document-rtl.png differ
index 75750ef..c0f64dc 100644 (file)
Binary files a/resources/src/mediawiki.skinning/images/external-ltr.png and b/resources/src/mediawiki.skinning/images/external-ltr.png differ
index 7b56aaa..feea115 100644 (file)
Binary files a/resources/src/mediawiki.skinning/images/external-rtl.png and b/resources/src/mediawiki.skinning/images/external-rtl.png differ
index f940b06..0052cf2 100644 (file)
Binary files a/resources/src/mediawiki.skinning/images/ftp-ltr.png and b/resources/src/mediawiki.skinning/images/ftp-ltr.png differ
index ff76304..f562031 100644 (file)
Binary files a/resources/src/mediawiki.skinning/images/ftp-rtl.png and b/resources/src/mediawiki.skinning/images/ftp-rtl.png differ
index 712b1b4..afad5c6 100644 (file)
Binary files a/resources/src/mediawiki.skinning/images/magnify-clip-ltr.png and b/resources/src/mediawiki.skinning/images/magnify-clip-ltr.png differ
index 1d03a8c..4ccc943 100644 (file)
Binary files a/resources/src/mediawiki.skinning/images/magnify-clip-rtl.png and b/resources/src/mediawiki.skinning/images/magnify-clip-rtl.png differ
index 5085611..fbab74a 100644 (file)
Binary files a/resources/src/mediawiki.skinning/images/mail.png and b/resources/src/mediawiki.skinning/images/mail.png differ
index 12f6545..b81f898 100644 (file)
Binary files a/resources/src/mediawiki.skinning/images/video.png and b/resources/src/mediawiki.skinning/images/video.png differ
index 0578be0..cba3caf 100644 (file)
Binary files a/resources/src/mediawiki.special/images/glyph-people-large.png and b/resources/src/mediawiki.special/images/glyph-people-large.png differ
index f933aa6..30bf53a 100644 (file)
Binary files a/resources/src/mediawiki.special/images/icon-contributors.png and b/resources/src/mediawiki.special/images/icon-contributors.png differ
index 39f4f2d..17508f9 100644 (file)
Binary files a/resources/src/mediawiki.special/images/icon-edits.png and b/resources/src/mediawiki.special/images/icon-edits.png differ
index 59513db..8e37278 100644 (file)
Binary files a/resources/src/mediawiki.special/images/icon-pages.png and b/resources/src/mediawiki.special/images/icon-pages.png differ
index e52955f..2517605 100644 (file)
        width: 5em;
 }
 
+.mw-apisandbox-help-field {
+       border-bottom: 1px solid rgba( 0, 0, 0, 0.1 );
+}
+
+.mw-apisandbox-help-field:last-child {
+       border-bottom: none;
+}
+
 .mw-apisandbox-optionalWidget {
        width: 100%;
 }
index 10664fa..a2d106d 100644 (file)
 
                        // I'm surprised this doesn't seem to exist in jQuery or mw.util.
                        params = {};
-                       hash = hash.replace( '+', '%20' );
+                       hash = hash.replace( /\+/g, '%20' );
                        re = /([^&=#]+)=?([^&#]*)/g;
                        while ( ( m = re.exec( hash ) ) ) {
                                params[ decodeURIComponent( m[ 1 ] ) ] = decodeURIComponent( m[ 2 ] );
                 * Submit button handler
                 */
                sendRequest: function () {
-                       var page, subpages, i, query, $result,
+                       var page, subpages, i, query, $result, $focus,
                                progress, $progressText, progressLoading,
                                deferreds = [],
                                params = {},
                                displayParams = {},
                                checkPages = [ pages.main ];
 
+                       // Blur any focused widget before submit, because
+                       // OO.ui.ButtonWidget doesn't take focus itself (T128054)
+                       $focus = $( '#mw-apisandbox-ui' ).find( document.activeElement );
+                       if ( $focus.length ) {
+                               $focus[ 0 ].blur();
+                       }
+
                        suppressErrors = false;
 
                        while ( checkPages.length ) {
                                                                classes: [ 'mw-apisandbox-spacer' ]
                                                        } ), {
                                                                align: 'inline',
+                                                               classes: [ 'mw-apisandbox-help-field' ],
                                                                label: dl
                                                        }
                                                );
                                                        widget,
                                                        {
                                                                align: 'left',
+                                                               classes: [ 'mw-apisandbox-widget-field' ],
                                                                label: prefix + pi.parameters[ i ].name,
                                                                $label: $widgetLabel
                                                        }
index 29322f4..a756f22 100644 (file)
 
                // Check if all of the form values are unchanged
                function isPrefsChanged() {
-                       var inputs = $( '#mw-prefs-form :input' ),
+                       var inputs = $( '#mw-prefs-form :input[name]' ),
                                input, $input, inputType,
                                index, optIndex,
                                opt;
                                $input = $( input );
 
                                // Different types of inputs have different methods for accessing defaults
-                               if ( $input.is( 'select' ) ) { // <select> has the property defaultSelected for each option
+                               if ( $input.is( 'select' ) ) {
+                                       // <select> has the property defaultSelected for each option
                                        for ( optIndex = 0; optIndex < input.options.length; optIndex++ ) {
                                                opt = input.options[ optIndex ];
                                                if ( opt.selected !== opt.defaultSelected ) {
index 831ba8c..9da6c83 100644 (file)
@@ -1,11 +1,12 @@
-/* Styles for user login and signup forms */
-.mw-form-related-link-container {
+/* User login and signup forms */
+.mw-ui-vform .mw-form-related-link-container {
+       margin-bottom: 0.5em;
        text-align: center;
 }
 
 .mw-ui-vform .mw-secure {
        /* @embed */
-       background: url(images/icon-lock.png) no-repeat scroll left center transparent;
+       background: url( images/icon-lock.png ) no-repeat left center;
        margin: 0 0 0 1px;
        padding: 0 0 0 11px;
 }
@@ -57,7 +58,7 @@ section.mw-form-header {
        /* Other display formats end up too wide */
        display: table-cell;
        width: 270px;
-       background-color: #FFF;
+       background-color: #fff;
 }
 
 /* Make the fancycaptcha-image-container full-width within its parent. */
index df3db57..620c83a 100644 (file)
@@ -1,9 +1,33 @@
 /* The login form invites users to create an account */
 #mw-createaccount-cta {
        width: 20em;
-       height: 10em;
        /* @embed */
-       background: url(images/glyph-people-large.png) no-repeat 50%;
+       background: url( images/glyph-people-large.png ) no-repeat 50%;
        margin: 0 auto;
-       padding-top: 4em;
+       padding-top: 7.8em;
+       font-weight: bold;
+}
+
+/* Login Button, following `ButtonWidget (progressive)‎` from OOjs UI */
+#mw-createaccount-join {
+       color: #347bff;
+}
+#mw-createaccount-join:hover {
+       background-color: #ebf2ff; /* rgba(52, 123, 255, 0.1); */
+       border-color: #859ecc;
+       box-shadow: none;
+}
+#mw-createaccount-join:active {
+       background-color: #ebf2ff;
+       color: #1f4999;
+       border-color: #1f4999;
+}
+#mw-createaccount-join:focus {
+       background-color: #fff;
+       color: #1f4999;
+       border-color: #1f4999;
+       box-shadow: inset 0 0 0 1px #1f4999;
+}
+#mw-createaccount-join:active:focus {
+       background-color: #ebf2ff;
 }
index e524f6c..50e2ff0 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/ar/button_bold.png and b/resources/src/mediawiki.toolbar/images/ar/button_bold.png differ
index 398e561..2e3e781 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/ar/button_headline.png and b/resources/src/mediawiki.toolbar/images/ar/button_headline.png differ
index 6ec73e9..6b54fb6 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/ar/button_italic.png and b/resources/src/mediawiki.toolbar/images/ar/button_italic.png differ
index c9c63f6..4434e7f 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/ar/button_link.png and b/resources/src/mediawiki.toolbar/images/ar/button_link.png differ
index 743ea61..c9378de 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/ar/button_nowiki.png and b/resources/src/mediawiki.toolbar/images/ar/button_nowiki.png differ
index 5c10cfe..df6700d 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/be-tarask/button_bold.png and b/resources/src/mediawiki.toolbar/images/be-tarask/button_bold.png differ
index 72209d7..872c00f 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/be-tarask/button_italic.png and b/resources/src/mediawiki.toolbar/images/be-tarask/button_italic.png differ
index 09c86fb..d3dd88e 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/be-tarask/button_link.png and b/resources/src/mediawiki.toolbar/images/be-tarask/button_link.png differ
index 367d5bc..8e6b389 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/de/button_bold.png and b/resources/src/mediawiki.toolbar/images/de/button_bold.png differ
index fdd8c9f..5e3cd11 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/de/button_italic.png and b/resources/src/mediawiki.toolbar/images/de/button_italic.png differ
index 75c3f10..e582fb1 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/en/button_bold.png and b/resources/src/mediawiki.toolbar/images/en/button_bold.png differ
index 9cf751d..7d64a16 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/en/button_headline.png and b/resources/src/mediawiki.toolbar/images/en/button_headline.png differ
index 527fbd1..820efe2 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/en/button_italic.png and b/resources/src/mediawiki.toolbar/images/en/button_italic.png differ
index eb5634b..5dd362c 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/en/button_link.png and b/resources/src/mediawiki.toolbar/images/en/button_link.png differ
index 4194ec1..80c3156 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/en/button_media.png and b/resources/src/mediawiki.toolbar/images/en/button_media.png differ
index 2ba818d..05a977a 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/en/button_nowiki.png and b/resources/src/mediawiki.toolbar/images/en/button_nowiki.png differ
index fe34b3f..2cbcc0b 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/en/button_sig.png and b/resources/src/mediawiki.toolbar/images/en/button_sig.png differ
index c54d094..5489343 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/fa/button_bold.png and b/resources/src/mediawiki.toolbar/images/fa/button_bold.png differ
index 9890d15..4d48a5d 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/fa/button_headline.png and b/resources/src/mediawiki.toolbar/images/fa/button_headline.png differ
index 33f91ed..41098c7 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/fa/button_italic.png and b/resources/src/mediawiki.toolbar/images/fa/button_italic.png differ
index 76b939e..8c2d85a 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/fa/button_link.png and b/resources/src/mediawiki.toolbar/images/fa/button_link.png differ
index 743ea61..c9378de 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/fa/button_nowiki.png and b/resources/src/mediawiki.toolbar/images/fa/button_nowiki.png differ
index 15496c0..34268d9 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/ksh/button_italic.png and b/resources/src/mediawiki.toolbar/images/ksh/button_italic.png differ
index eae30d9..a7dceb1 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/ru/button_bold.png and b/resources/src/mediawiki.toolbar/images/ru/button_bold.png differ
index b958d22..44a0a74 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/ru/button_italic.png and b/resources/src/mediawiki.toolbar/images/ru/button_italic.png differ
index 12ad373..36b9059 100644 (file)
Binary files a/resources/src/mediawiki.toolbar/images/ru/button_link.png and b/resources/src/mediawiki.toolbar/images/ru/button_link.png differ
index 4ffaeee..5931efb 100644 (file)
        font-size: 1em;
        // Container layout
        display: inline-block;
+       min-width: 4em;
+       max-width: 28.75em; // equivalent to 460px, @see T95367
        padding: .5em 1em;
        margin: 0;
+       border-radius: @borderRadius;
        .box-sizing( border-box );
 
        // Disable weird iOS styling
        *display: inline;
        zoom: 1;
 
-       // Container styling
-       .button-colors( #fff, #ccc, #777 );
-       border-radius: @borderRadius;
-       min-width: 4em;
-
        // Ensure that buttons and inputs are nicely aligned when they have differing heights
        vertical-align: middle;
 
        // Content styling
+       .button-colors( #fff, @colorGray12, @colorGray7 );
        text-align: center;
        font-weight: bold;
 
        &.mw-ui-block {
                display: block;
                width: 100%;
+               margin-left: auto;
+               margin-right: auto;
        }
 
        // Progressive buttons
                }
        }
 
-       // Constructive buttons
+       // Constructive buttons (deprecated, consolidated with `progressive` – see T110555)
        //
        // Use constructive buttons for actions which result in a final action in the process that results
        // in a change of state.
        //
        // Styleguide 2.1.2.
        &.mw-ui-constructive {
-               .button-colors( @colorConstructive, @colorConstructiveHighlight, @colorConstructiveActive );
+               .button-colors( @colorProgressive, @colorProgressiveHighlight, @colorProgressiveActive );
 
                &.mw-ui-quiet {
-                       .button-colors-quiet( @colorConstructive, @colorConstructiveHighlight, @colorConstructiveActive );
+                       .button-colors-quiet( @colorProgressive, @colorProgressiveHighlight, @colorProgressiveActive );
                }
        }
 
@@ -252,29 +253,35 @@ a.mw-ui-button {
 //
 // Markup:
 // <div class="mw-ui-button-group">
-//   <div class="mw-ui-button">A</div>
+//   <div class="mw-ui-button is-on">A</div>
 //   <div class="mw-ui-button">B</div>
 //   <div class="mw-ui-button">C</div>
 //   <div class="mw-ui-button">D</div>
 // </div><div style="clear:both"></div>
 //
 // Styleguide 2.2.
-.mw-ui-button-group > * {
-       min-width: 48px;
-       border-radius: 0;
-       float: left;
+.mw-ui-button-group {
+       & > * {
+               min-width: 48px;
+               border-radius: 0;
+               float: left;
 
-       &:first-child {
-               border-top-left-radius: @borderRadius;
-               border-bottom-left-radius: @borderRadius;
-       }
+               &:first-child {
+                       border-top-left-radius: @borderRadius;
+                       border-bottom-left-radius: @borderRadius;
+               }
+
+               &:not( :first-child ) {
+                       border-left: 0;
+               }
 
-       &:not( :first-child ) {
-               border-left: 0;
+               &:last-child {
+                       border-top-right-radius: @borderRadius;
+                       border-bottom-right-radius: @borderRadius;
+               }
        }
 
-       &:last-child{
-               border-top-right-radius: @borderRadius;
-               border-bottom-right-radius: @borderRadius;
+       & .is-on .button {
+               cursor: default;
        }
 }
index ce4e6b9..672a824 100644 (file)
Binary files a/resources/src/mediawiki.ui/components/images/checked.png and b/resources/src/mediawiki.ui/components/images/checked.png differ
index 523b880..8217815 100644 (file)
Binary files a/resources/src/mediawiki.ui/components/images/checked_disabled.png and b/resources/src/mediawiki.ui/components/images/checked_disabled.png differ
index d573516..adee2c9 100644 (file)
Binary files a/resources/src/mediawiki.ui/components/images/radio_checked.png and b/resources/src/mediawiki.ui/components/images/radio_checked.png differ
index 945b3dd..75989e6 100644 (file)
Binary files a/resources/src/mediawiki.ui/components/images/radio_disabled.png and b/resources/src/mediawiki.ui/components/images/radio_disabled.png differ
index 7a7b9cd..3daa70a 100644 (file)
@@ -19,6 +19,8 @@
         *
         * @constructor
         * @param {Object} [config] Configuration options
+        * @cfg {boolean} [lazyInitOnToggle=false] Don't build most of the interface until
+        *     `.toggle( true )` is called. Meant to be used when the calendar is not immediately visible.
         * @cfg {string} [precision='day'] Date precision to use, 'day' or 'month'
         * @cfg {string|null} [date=null] Day or month date (depending on `precision`), in the format
         *     'YYYY-MM-DD' or 'YYYY-MM'. When null, the calendar will show today's date, but not select
@@ -36,6 +38,7 @@
                OO.ui.mixin.FloatableElement.call( this, config );
 
                // Properties
+               this.lazyInitOnToggle = !!config.lazyInitOnToggle;
                this.precision = config.precision || 'day';
                // Currently selected date (day or month)
                this.date = null;
                this.$bodyOuterWrapper = $( '<div>' ).addClass( 'mw-widget-calendarWidget-body-outer-wrapper' );
                this.$bodyWrapper = $( '<div>' ).addClass( 'mw-widget-calendarWidget-body-wrapper' );
                this.$body = $( '<div>' ).addClass( 'mw-widget-calendarWidget-body' );
-               this.labelButton = new OO.ui.ButtonWidget( {
-                       tabIndex: -1,
-                       label: '',
-                       framed: false,
-                       classes: [ 'mw-widget-calendarWidget-labelButton' ]
-               } );
-               this.upButton = new OO.ui.ButtonWidget( {
-                       tabIndex: -1,
-                       framed: false,
-                       icon: 'collapse',
-                       classes: [ 'mw-widget-calendarWidget-upButton' ]
-               } );
-               this.prevButton = new OO.ui.ButtonWidget( {
-                       tabIndex: -1,
-                       framed: false,
-                       icon: 'previous',
-                       classes: [ 'mw-widget-calendarWidget-prevButton' ]
-               } );
-               this.nextButton = new OO.ui.ButtonWidget( {
-                       tabIndex: -1,
-                       framed: false,
-                       icon: 'next',
-                       classes: [ 'mw-widget-calendarWidget-nextButton' ]
-               } );
 
                // Events
-               this.labelButton.connect( this, { click: 'onUpButtonClick' } );
-               this.upButton.connect( this, { click: 'onUpButtonClick' } );
-               this.prevButton.connect( this, { click: 'onPrevButtonClick' } );
-               this.nextButton.connect( this, { click: 'onNextButtonClick' } );
                this.$element.on( {
                        focus: this.onFocus.bind( this ),
                        mousedown: this.onClick.bind( this ),
                this.$element
                        .addClass( 'mw-widget-calendarWidget' )
                        .append( this.$header, this.$bodyOuterWrapper.append( this.$bodyWrapper.append( this.$body ) ) );
-               this.$header.append(
-                       this.prevButton.$element,
-                       this.nextButton.$element,
-                       this.upButton.$element,
-                       this.labelButton.$element
-               );
+               if ( !this.lazyInitOnToggle ) {
+                       this.buildHeaderButtons();
+               }
                this.setDate( config.date !== undefined ? config.date : null );
        };
 
                var items, today, selected, currentMonth, currentYear, currentDay, i, needsFade,
                        $bodyWrapper = this.$bodyWrapper;
 
+               if ( this.lazyInitOnToggle ) {
+                       // We're being called from the constructor and not being shown yet, do nothing
+                       return;
+               }
+
                if (
                        this.displayLayer === this.previousDisplayLayer &&
                        this.date === this.previousDate &&
                this.$body.on( 'click', this.onBodyClick.bind( this ) );
        };
 
+       /**
+        * Construct and display buttons to navigate the calendar.
+        *
+        * @private
+        */
+       mw.widgets.CalendarWidget.prototype.buildHeaderButtons = function () {
+               this.labelButton = new OO.ui.ButtonWidget( {
+                       tabIndex: -1,
+                       label: '',
+                       framed: false,
+                       classes: [ 'mw-widget-calendarWidget-labelButton' ]
+               } );
+               this.upButton = new OO.ui.ButtonWidget( {
+                       tabIndex: -1,
+                       framed: false,
+                       icon: 'collapse',
+                       classes: [ 'mw-widget-calendarWidget-upButton' ]
+               } );
+               this.prevButton = new OO.ui.ButtonWidget( {
+                       tabIndex: -1,
+                       framed: false,
+                       icon: 'previous',
+                       classes: [ 'mw-widget-calendarWidget-prevButton' ]
+               } );
+               this.nextButton = new OO.ui.ButtonWidget( {
+                       tabIndex: -1,
+                       framed: false,
+                       icon: 'next',
+                       classes: [ 'mw-widget-calendarWidget-nextButton' ]
+               } );
+
+               this.labelButton.connect( this, { click: 'onUpButtonClick' } );
+               this.upButton.connect( this, { click: 'onUpButtonClick' } );
+               this.prevButton.connect( this, { click: 'onPrevButtonClick' } );
+               this.nextButton.connect( this, { click: 'onNextButtonClick' } );
+
+               this.$header.append(
+                       this.prevButton.$element,
+                       this.nextButton.$element,
+                       this.upButton.$element,
+                       this.labelButton.$element
+               );
+       };
+
        /**
         * Handle click events on the "up" button, switching to less precise view.
         *
         * @inheritdoc
         */
        mw.widgets.CalendarWidget.prototype.toggle = function ( visible ) {
+               if ( this.lazyInitOnToggle && visible ) {
+                       this.lazyInitOnToggle = false;
+                       this.buildHeaderButtons();
+                       this.updateUI();
+               }
+
                // Parent method
                mw.widgets.CalendarWidget.parent.prototype.toggle.call( this, visible );
 
index 29eaaad..5369d35 100644 (file)
@@ -55,7 +55,7 @@
                                var title = new ForeignTitle( page.title ).getPrefixedText();
                                this.existenceCache[ title ] = !page.missing;
                                queue[ title ].resolve( this.existenceCache[ title ] );
-                       } );
+                       }.bind( this ) );
                }.bind( this ) );
        };
 
index cba580b..a9b5bc3 100644 (file)
                        validate: this.validateDate.bind( this )
                } );
                this.calendar = new mw.widgets.CalendarWidget( {
+                       lazyInitOnToggle: true,
                        // Can't pass `$floatableContainer: this.$element` here, the latter is not set yet.
                        // Instead we call setFloatableContainer() below.
                        precision: config.precision
                this.placeholderLabel = config.placeholderLabel;
 
                // Validate and set min and max dates as properties
-               mustBeAfter = moment( config.mustBeAfter, 'YYYY-MM-DD' );
-               mustBeBefore = moment( config.mustBeBefore, 'YYYY-MM-DD' );
-               if (
-                       config.mustBeAfter !== undefined &&
-                       mustBeAfter.isValid()
-               ) {
-                       this.mustBeAfter = mustBeAfter;
+               if ( config.mustBeAfter !== undefined ) {
+                       mustBeAfter = moment( config.mustBeAfter, 'YYYY-MM-DD' );
+                       if ( mustBeAfter.isValid() ) {
+                               this.mustBeAfter = mustBeAfter;
+                       }
                }
-
-               if (
-                       config.mustBeBefore !== undefined &&
-                       mustBeBefore.isValid()
-               ) {
-                       this.mustBeBefore = mustBeBefore;
+               if ( config.mustBeBefore !== undefined ) {
+                       mustBeBefore = moment( config.mustBeBefore, 'YYYY-MM-DD' );
+                       if ( mustBeBefore.isValid() ) {
+                               this.mustBeBefore = mustBeBefore;
+                       }
                }
 
                // Parent constructor
         * @private
         */
        mw.widgets.DateInputWidget.prototype.updateUI = function () {
+               var moment;
                if ( this.getValue() === '' ) {
                        this.textInput.setValue( '' );
                        this.calendar.setDate( null );
                        this.label.setLabel( this.placeholderLabel );
                        this.$element.addClass( 'mw-widget-dateInputWidget-empty' );
                } else {
+                       moment = this.getMoment();
                        if ( !this.inTextInput ) {
-                               this.textInput.setValue( this.getMoment().format( this.getInputFormat() ) );
+                               this.textInput.setValue( moment.format( this.getInputFormat() ) );
                        }
                        if ( !this.inCalendar ) {
                                this.calendar.setDate( this.getValue() );
                        }
-                       this.label.setLabel( this.getMoment().format( this.getDisplayFormat() ) );
+                       this.label.setLabel( moment.format( this.getDisplayFormat() ) );
                        this.$element.removeClass( 'mw-widget-dateInputWidget-empty' );
                }
        };
        mw.widgets.DateInputWidget.prototype.isValidDate = function ( date ) {
                // "Half-strict mode": for example, for the format 'YYYY-MM-DD', 2015-1-3 instead of 2015-01-03
                // is okay, but 2015-01 isn't, and neither is 2015-01-foo. Use Moment's "fuzzy" mode and check
-               // parsing flags for the details (stoled from implementation of moment#isValid).
+               // parsing flags for the details (stolen from implementation of moment#isValid).
                var
                        mom = moment( date, this.getInputFormat() ),
                        flags = mom.parsingFlags();
         * @return {boolean}
         */
        mw.widgets.DateInputWidget.prototype.isInRange = function ( date ) {
-               var momentDate = moment( date, 'YYYY-MM-DD' ),
-                       isAfter = ( this.mustBeAfter === undefined || momentDate.isAfter( this.mustBeAfter ) ),
-                       isBefore = ( this.mustBeBefore === undefined || momentDate.isBefore( this.mustBeBefore ) );
-
+               var momentDate, isAfter, isBefore;
+               if ( this.mustBeAfter === undefined && this.mustBeBefore === undefined ) {
+                       return true;
+               }
+               momentDate = moment( date, 'YYYY-MM-DD' );
+               isAfter = ( this.mustBeAfter === undefined || momentDate.isAfter( this.mustBeAfter ) );
+               isBefore = ( this.mustBeBefore === undefined || momentDate.isBefore( this.mustBeBefore ) );
                return isAfter && isBefore;
        };
 
index 4f1b874..c88395e 100644 (file)
        mw.widgets.NamespaceInputWidget.prototype.getNamespaceDropdownOptions = function ( config ) {
                var options,
                        exclude = config.exclude || [],
-                       NS_MAIN = 0;
+                       mainNamespace = mw.config.get( 'wgNamespaceIds' )[ '' ];
 
                options = $.map( mw.config.get( 'wgFormattedNamespaces' ), function ( name, ns ) {
-                       if ( ns < NS_MAIN || exclude.indexOf( Number( ns ) ) !== -1 ) {
+                       if ( ns < mainNamespace || exclude.indexOf( Number( ns ) ) !== -1 ) {
                                return null; // skip
                        }
                        ns = String( ns );
-                       if ( ns === String( NS_MAIN ) ) {
+                       if ( ns === String( mainNamespace ) ) {
                                name = mw.message( 'blanknamespace' ).text();
                        }
                        return { data: ns, label: name };
diff --git a/resources/src/mediawiki.widgets/mw.widgets.SearchInputWidget.css b/resources/src/mediawiki.widgets/mw.widgets.SearchInputWidget.css
new file mode 100644 (file)
index 0000000..3da5d31
--- /dev/null
@@ -0,0 +1,3 @@
+.mw-widget-searchInputWidget {
+       display: inline-block;
+}
diff --git a/resources/src/mediawiki.widgets/mw.widgets.SearchInputWidget.js b/resources/src/mediawiki.widgets/mw.widgets.SearchInputWidget.js
new file mode 100644 (file)
index 0000000..1f526e2
--- /dev/null
@@ -0,0 +1,111 @@
+/*!
+ * MediaWiki Widgets - SearchInputWidget class.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+( function ( $, mw ) {
+
+       /**
+        * Creates a mw.widgets.SearchInputWidget object.
+        *
+        * @class
+        * @extends mw.widgets.TitleInputWidget
+        *
+        * @constructor
+        * @cfg {boolean} [pushPending=true] Visually mark the input field as "pending", while
+        *  requesting suggestions.
+        */
+       mw.widgets.SearchInputWidget = function MwWidgetsSearchInputWidget( config ) {
+               config = $.extend( {
+                       type: 'search',
+                       icon: 'search',
+                       maxLength: undefined
+               }, config );
+
+               // Parent constructor
+               mw.widgets.SearchInputWidget.parent.call( this, config );
+
+               // Initialization
+               this.$element.addClass( 'mw-widget-searchInputWidget' );
+               this.lookupMenu.$element.addClass( 'mw-widget-searchWidget-menu' );
+               if ( !config.pushPending ) {
+                       this.pushPending = false;
+               }
+               this.setLookupsDisabled( !this.suggestions );
+       };
+
+       /* Setup */
+
+       OO.inheritClass( mw.widgets.SearchInputWidget, mw.widgets.TitleInputWidget );
+
+       /* Methods */
+
+       /**
+        * @inheritdoc mw.widgets.TitleWidget
+        */
+       mw.widgets.SearchInputWidget.prototype.getSuggestionsPromise = function () {
+               var api = new mw.Api();
+
+               // reuse the searchSuggest function from mw.searchSuggest
+               return mw.searchSuggest.request( api, this.getQueryValue(), $.noop, this.limit );
+       };
+
+       /**
+        * @inheritdoc mw.widgets.TitleInputWidget
+        */
+       mw.widgets.SearchInputWidget.prototype.getLookupCacheDataFromResponse = function ( response ) {
+               // mw.widgets.TitleInputWidget uses response.query, which doesn't exist for opensearch,
+               // so return the whole response (titles only, and links)
+               return response || {};
+       };
+
+       /**
+        * @inheritdoc mw.widgets.TitleWidget
+        */
+       mw.widgets.SearchInputWidget.prototype.getOptionsFromData = function ( data ) {
+               var items = [],
+                       self = this;
+
+               // mw.widgets.TitleWidget does a lot more work here, because the TitleOptionWidgets can
+               // differ a lot, depending on the returned data from the request. With the request used here
+               // we get only the search results.
+               $.each( data[ 1 ], function ( i, result ) {
+                       items.push( new mw.widgets.TitleOptionWidget(
+                               // data[ 3 ][ i ] is the link for this result
+                               self.getOptionWidgetData( result, null, data[ 3 ][ i ] )
+                       ) );
+               } );
+
+               mw.track( 'mw.widgets.SearchInputWidget', {
+                       action: 'impression-results',
+                       numberOfResults: items.length,
+                       resultSetType: mw.searchSuggest.type
+               } );
+
+               return items;
+       };
+
+       /**
+        * @inheritdoc mw.widgets.TitleWidget
+        *
+        * @param {string} title
+        * @param {Object} data
+        * @param {string} url The Url to the result
+        */
+       mw.widgets.SearchInputWidget.prototype.getOptionWidgetData = function ( title, data, url ) {
+               // the values used in mw.widgets-TitleWidget doesn't exist here, that's why
+               // the values are hard-coded here
+               return {
+                       data: title,
+                       url: url,
+                       imageUrl: null,
+                       description: null,
+                       missing: false,
+                       redirect: false,
+                       disambiguation: false,
+                       query: this.getQueryValue()
+               };
+       };
+
+}( jQuery, mediaWiki ) );
index abe1228..b805e65 100644 (file)
@@ -23,7 +23,8 @@
         * @cfg {boolean} [showRedlink] Show red link to exact match if it doesn't exist
         * @cfg {boolean} [showImages] Show page images
         * @cfg {boolean} [showDescriptions] Show page descriptions
-        * @cfg {boolean} [validateTitle=true] Whether the input must be a valid title
+        * @cfg {boolean} [validateTitle=true] Whether the input must be a valid title (if set to true,
+        *  the widget will marks itself red for invalid inputs, including an empty query).
         * @cfg {Object} [cache] Result cache which implements a 'set' method, taking keyed values as an argument
         */
        mw.widgets.TitleWidget = function MwWidgetsTitleWidget( config ) {
index 9dd276d..bd6fa06 100644 (file)
@@ -55,6 +55,7 @@
                                } else {
                                        if ( value !== null ) {
                                                deferreds.push( this.postWithToken( 'options', {
+                                                       formatversion: 2,
                                                        action: 'options',
                                                        optionname: name,
                                                        optionvalue: value
@@ -62,6 +63,7 @@
                                        } else {
                                                // Omitting value resets the option
                                                deferreds.push( this.postWithToken( 'options', {
+                                                       formatversion: 2,
                                                        action: 'options',
                                                        optionname: name
                                                } ) );
@@ -71,6 +73,7 @@
 
                        if ( grouped.length ) {
                                deferreds.push( this.postWithToken( 'options', {
+                                       formatversion: 2,
                                        action: 'options',
                                        change: grouped
                                } ) );
index 49219d7..418fd23 100644 (file)
@@ -7,18 +7,30 @@
                /**
                 * Convenience method for 'action=parse'.
                 *
-                * @param {string} wikitext
+                * @param {string|mw.Title} content Content to parse, either as a wikitext string or
+                *   a mw.Title.
+                * @param {Object} additionalParams Parameters object to set custom settings, e.g.
+                *   redirects, sectionpreview.  prop should not be overridden.
                 * @return {jQuery.Promise}
                 * @return {Function} return.done
                 * @return {string} return.done.data Parsed HTML of `wikitext`.
                 */
-               parse: function ( wikitext ) {
-                       var apiPromise = this.get( {
+               parse: function ( content, additionalParams ) {
+                       var apiPromise, config = $.extend( {
                                formatversion: 2,
                                action: 'parse',
-                               contentmodel: 'wikitext',
-                               text: wikitext
-                       } );
+                               contentmodel: 'wikitext'
+                       }, additionalParams );
+
+                       if ( mw.Title && content instanceof mw.Title ) {
+                               // Parse existing page
+                               config.page = content.getPrefixedDb();
+                       } else {
+                               // Parse wikitext from input
+                               config.text = String( content );
+                       }
+
+                       apiPromise = this.get( config );
 
                        return apiPromise
                                .then( function ( data ) {
index 437ddec..981a2e9 100644 (file)
@@ -17,9 +17,9 @@
                };
 
        /**
-        * @private
         * Get nonce for iframe IDs on the page.
         *
+        * @private
         * @return {number}
         */
        function getNonce() {
@@ -27,9 +27,9 @@
        }
 
        /**
-        * @private
         * Given a non-empty object, return one of its keys.
         *
+        * @private
         * @param {Object} obj
         * @return {string}
         */
@@ -42,9 +42,9 @@
        }
 
        /**
-        * @private
         * Get new iframe object for an upload.
         *
+        * @private
         * @return {HTMLIframeElement}
         */
        function getNewIframe( id ) {
@@ -55,9 +55,9 @@
        }
 
        /**
-        * @private
         * Shortcut for getting hidden inputs
         *
+        * @private
         * @return {jQuery}
         */
        function getHiddenInput( name, val ) {
index b17e578..80c4fbd 100644 (file)
Binary files a/resources/src/mediawiki/images/arrow-collapsed-ltr.png and b/resources/src/mediawiki/images/arrow-collapsed-ltr.png differ
index a834548..5f14489 100644 (file)
Binary files a/resources/src/mediawiki/images/arrow-collapsed-rtl.png and b/resources/src/mediawiki/images/arrow-collapsed-rtl.png differ
index 2bec798..252d006 100644 (file)
Binary files a/resources/src/mediawiki/images/arrow-expanded.png and b/resources/src/mediawiki/images/arrow-expanded.png differ
index f2d339d..d5b66c0 100644 (file)
Binary files a/resources/src/mediawiki/images/arrow-sort-ascending.png and b/resources/src/mediawiki/images/arrow-sort-ascending.png differ
index 8afbca9..ab3979e 100644 (file)
Binary files a/resources/src/mediawiki/images/arrow-sort-descending.png and b/resources/src/mediawiki/images/arrow-sort-descending.png differ
index 00f49f6..8e2d49e 100644 (file)
Binary files a/resources/src/mediawiki/images/feed-icon.png and b/resources/src/mediawiki/images/feed-icon.png differ
index 9910582..301e23b 100644 (file)
Binary files a/resources/src/mediawiki/images/help.png and b/resources/src/mediawiki/images/help.png differ
index caf5033..8904b89 100644 (file)
Binary files a/resources/src/mediawiki/images/pager-arrow-fastforward-ltr.png and b/resources/src/mediawiki/images/pager-arrow-fastforward-ltr.png differ
index 52b32a5..71d0819 100644 (file)
Binary files a/resources/src/mediawiki/images/pager-arrow-fastforward-rtl.png and b/resources/src/mediawiki/images/pager-arrow-fastforward-rtl.png differ
index 3f8fee3..c68a4fc 100644 (file)
Binary files a/resources/src/mediawiki/images/pager-arrow-forward-ltr.png and b/resources/src/mediawiki/images/pager-arrow-forward-ltr.png differ
index f363bf6..d0a7030 100644 (file)
Binary files a/resources/src/mediawiki/images/pager-arrow-forward-rtl.png and b/resources/src/mediawiki/images/pager-arrow-forward-rtl.png differ
index f7405d2..acce58c 100644 (file)
Binary files a/resources/src/mediawiki/images/question.png and b/resources/src/mediawiki/images/question.png differ
index 23e80b9..1fabe17 100644 (file)
                this.filePreview = new OO.ui.Widget( {
                        classes: [ 'mw-upload-bookletLayout-filePreview' ]
                } );
+               this.progressBarWidget = new OO.ui.ProgressBarWidget( {
+                       progress: 0
+               } );
+               this.filePreview.$element.append( this.progressBarWidget.$element );
+
                this.filenameWidget = new OO.ui.TextInputWidget( {
                        required: true,
                        validate: /.+/
                this.descriptionWidget.on( 'change', this.onInfoFormChange.bind( this ) );
                this.dateWidget.on( 'change', this.onInfoFormChange.bind( this ) );
 
+               this.on( 'fileUploadProgress', function ( progress ) {
+                       this.progressBarWidget.setProgress( progress * 100 );
+               }.bind( this ) );
+
                return this.infoForm;
        };
 
index ffb3041..c438d05 100644 (file)
 
        var
 
+       namespaceIds = mw.config.get( 'wgNamespaceIds' ),
+
        /**
         * @private
         * @static
         * @property NS_MAIN
         */
-       NS_MAIN = 0,
+       NS_MAIN = namespaceIds[ '' ],
 
        /**
         * @private
         * @static
         * @property NS_TALK
         */
-       NS_TALK = 1,
+       NS_TALK = namespaceIds.talk,
 
        /**
         * @private
         * @static
         * @property NS_SPECIAL
         */
-       NS_SPECIAL = -1,
+       NS_SPECIAL = namespaceIds.special,
 
        /**
         * @private
         * @static
         * @property NS_MEDIA
         */
-       NS_MEDIA = -2,
+       NS_MEDIA = namespaceIds.media,
 
        /**
         * @private
         * @static
         * @property NS_FILE
         */
-       NS_FILE = 6,
+       NS_FILE = namespaceIds.file,
 
        /**
         * @private
                if ( typeof ns !== 'string' ) {
                        return false;
                }
-               ns = ns.toLowerCase();
-               id = mw.config.get( 'wgNamespaceIds' )[ ns ];
+               // TODO: Should just use local var namespaceIds here but it
+               // breaks test which modify the config
+               id = mw.config.get( 'wgNamespaceIds' )[ ns.toLowerCase() ];
                if ( id === undefined ) {
                        return false;
                }
index 11bad8c..68062d0 100644 (file)
@@ -7,6 +7,7 @@
        padding: 1.5em;
        margin: -1.5em;
        margin-bottom: 1.5em;
+       position: relative;
 }
 
 .mw-upload-bookletLayout-infoForm.mw-upload-bookletLayout-hasThumbnail .mw-upload-bookletLayout-filePreview {
 .mw-upload-bookletLayout-filePreview p {
        line-height: 1em;
        margin: 0;
+}
+
+.mw-upload-bookletLayout-filePreview .oo-ui-progressBarWidget {
+       border: none;
+       border-radius: 0;
+       background-color: transparent;
+       position: absolute;
+       bottom: 0;
+       left: 0;
+       right: 0;
+}
+
+.mw-upload-bookletLayout-filePreview .oo-ui-progressBarWidget-bar {
+       background-color: #347bff;
+       height: 0.5em;
 }
\ No newline at end of file
index eaab8c7..33b10bd 100644 (file)
@@ -1,4 +1,5 @@
-( function ( $, mw ) {
+/*global moment*/
+( function ( $, mw, moment ) {
 
        /**
         * mw.Upload.BookletLayout encapsulates the process of uploading a file
 
        /* Events */
 
+       /**
+        * Progress events for the uploaded file
+        *
+        * @event fileUploadProgress
+        * @param {number} progress In percentage
+        * @param {Object} duration Duration object from `moment.duration()`
+        */
+
        /**
         * The file has finished uploading
         *
         * file object.
         *
         * @protected
+        * @fires fileUploadProgress
         * @fires fileUploaded
         * @return {jQuery.Promise}
         */
        mw.Upload.BookletLayout.prototype.uploadFile = function () {
                var deferred = $.Deferred(),
+                       startTime = new Date(),
                        layout = this,
                        file = this.getFile();
 
                        // really be an error...
                        var errorMessage = layout.getErrorMessageForStateDetails();
                        deferred.reject( errorMessage );
+               }, function ( progress ) {
+                       var elapsedTime = new Date() - startTime,
+                               estimatedTotalTime = ( 1 / progress ) * elapsedTime,
+                               estimatedRemainingTime = moment.duration( estimatedTotalTime - elapsedTime );
+                       layout.emit( 'fileUploadProgress', progress, estimatedRemainingTime );
                } );
 
                // If there is an error in uploading, come back to the upload page
                this.filePreview = new OO.ui.Widget( {
                        classes: [ 'mw-upload-bookletLayout-filePreview' ]
                } );
+               this.progressBarWidget = new OO.ui.ProgressBarWidget( {
+                       progress: 0
+               } );
+               this.filePreview.$element.append( this.progressBarWidget.$element );
+
                this.filenameWidget = new OO.ui.TextInputWidget( {
                        indicator: 'required',
                        required: true,
                        items: [ this.filePreview, fieldset ]
                } );
 
+               this.on( 'fileUploadProgress', function ( progress ) {
+                       this.progressBarWidget.setProgress( progress * 100 );
+               }.bind( this ) );
+
                this.filenameWidget.on( 'change', this.onInfoFormChange.bind( this ) );
                this.descriptionWidget.on( 'change', this.onInfoFormChange.bind( this ) );
 
         */
        mw.Upload.BookletLayout.prototype.clear = function () {
                this.selectFileWidget.setValue( null );
+               this.progressBarWidget.setProgress( 0 );
                this.filenameWidget.setValue( null ).setValidityFlag( true );
                this.descriptionWidget.setValue( null ).setValidityFlag( true );
                this.filenameUsageWidget.setValue( null );
        };
 
-}( jQuery, mediaWiki ) );
+}( jQuery, mediaWiki, moment ) );
index 671f38f..fdb7adf 100644 (file)
 
                                // Convert size to human-readable string.
                                $.each( modules, function ( i, module ) {
+                                       module.sizeInBytes = module.size;
                                        module.size = humanSize( module.size );
                                } );
 
index f282db6..9d799db 100644 (file)
                         * @param {string} [moduleName] Name of currently executing module
                         * @return {jQuery.Promise}
                         */
-                       function queueModuleScript( src, moduleName ) {
+                       function queueModuleScript( src ) {
                                var r = $.Deferred();
 
                                pendingRequests.push( function () {
-                                       if ( moduleName && !hasOwn.call( registry, moduleName ) ) {
-                                               window.require = mw.loader.require;
-                                               window.module = registry[ moduleName ].module;
-                                       }
                                        addScript( src ).always( function () {
-                                               // Clear environment
-                                               delete window.require;
-                                               delete window.module;
                                                r.resolve();
 
                                                // Start the next one (if any)
index 796639f..d0e21ae 100644 (file)
@@ -3,37 +3,19 @@
  *
  * Loosely based on https://w3c.github.io/requestidlecallback/
  */
-( function ( mw, $ ) {
-       var tasks = [],
-               maxIdleDuration = 50,
-               timeout = null;
-
-       function schedule( trigger ) {
-               clearTimeout( timeout );
-               timeout = setTimeout( trigger, 700 );
-       }
-
-       function triggerIdle() {
-               var elapsed,
-                       start = mw.now();
-
-               while ( tasks.length ) {
-                       elapsed = mw.now() - start;
-                       if ( elapsed < maxIdleDuration ) {
-                               tasks.shift().callback();
-                       } else {
-                               // Idle moment expired, try again later
-                               schedule( triggerIdle );
-                               break;
-                       }
-               }
-       }
+( function ( mw ) {
+       var maxBusy = 50;
 
        mw.requestIdleCallbackInternal = function ( callback ) {
-               var task = { callback: callback };
-               tasks.push( task );
-
-               $( function () { schedule( triggerIdle ); } );
+               setTimeout( function () {
+                       var start = mw.now();
+                       callback( {
+                               didTimeout: false,
+                               timeRemaining: function () {
+                                       return Math.max( 0, maxBusy - ( mw.now() - start ) );
+                               }
+                       } );
+               }, 1 );
        };
 
        /**
@@ -43,8 +25,7 @@
         * @param {Function} callback
         */
        mw.requestIdleCallback = window.requestIdleCallback
-               ? function ( callback ) {
-                       window.requestIdleCallback( callback );
-               }
+               // Bind because it throws TypeError if context is not window
+               ? window.requestIdleCallback.bind( window )
                : mw.requestIdleCallbackInternal;
 }( mediaWiki, jQuery ) );
index 0fcd22c..17a3b21 100644 (file)
                                namespace: 0,
                                limit: maxRows,
                                suggest: true
-                       } ).done( function ( data ) {
-                               response( data[ 1 ] );
+                       } ).done( function ( data, jqXHR ) {
+                               response( data[ 1 ], {
+                                       type: jqXHR.getResponseHeader( 'X-OpenSearch-Type' ),
+                                       query: query
+                               } );
                        } );
-               },
-               // The name of the request api for event logging purposes
-               type: 'prefix'
+               }
        };
 
        $( function () {
                        previousSearchText = searchText;
                }
 
+               /**
+                * defines the location of autocomplete. Typically either
+                * header, which is in the top right of vector (for example)
+                * and content which identifies the main search bar on
+                * Special:Search.  Defaults to header for skins that don't set
+                * explicitly.
+                *
+                * @ignore
+                */
+               function getInputLocation( context ) {
+                       return context.config.$region
+                                       .closest( 'form' )
+                                       .find( '[data-search-loc]' )
+                                       .data( 'search-loc' ) || 'header';
+               }
+
                /**
                 * Callback that's run when suggestions have been updated either from the cache or the API
                 * 'this' is the search input box (jQuery object)
                 *
                 * @ignore
                 */
-               function onAfterUpdate() {
+               function onAfterUpdate( metadata ) {
                        var context = this.data( 'suggestionsContext' );
 
                        mw.track( 'mediawiki.searchSuggest', {
                                action: 'impression-results',
                                numberOfResults: context.config.suggestions.length,
-                               resultSetType: mw.searchSuggest.type
+                               resultSetType: metadata.type || 'unknown',
+                               query: metadata.query,
+                               inputLocation: getInputLocation( context )
                        } );
                }
 
                // The function used to render the suggestions.
                function renderFunction( text, context ) {
-                       var formData = getFormData( context );
+                       var formData = getFormData( context ),
+                               textboxConfig = context.data.$textbox.data( 'mw-searchsuggest' ) || {};
 
                        // linkParams object is modified and reused
                        formData.linkParams[ formData.textParam ] = text;
 
+                       // Allow trackers to attach tracking information, such
+                       // as wprov, to clicked links.
+                       mw.track( 'mediawiki.searchSuggest', {
+                               action: 'render-one',
+                               formData: formData,
+                               index: context.config.suggestions.indexOf( text ) + 1
+                       } );
+
                        // this is the container <div>, jQueryfied
-                       this.text( text )
-                               .wrap(
+                       this.text( text );
+
+                       // wrap only as link, if the config doesn't disallow it
+                       if ( textboxConfig.wrapAsLink !== false ) {
+                               this.wrap(
                                        $( '<a>' )
                                                .attr( 'href', formData.baseHref + $.param( formData.linkParams ) )
                                                .attr( 'title', text )
                                                .addClass( 'mw-searchSuggest-link' )
                                );
+                       }
                }
 
                // The function used when the user makes a selection
                                                return true;
                                        }
                                },
+                               update: {
+                                       before: onBeforeUpdate,
+                                       after: onAfterUpdate
+                               },
                                cache: true,
                                highlightInput: true
                        } )
                                var context = $searchInput.data( 'suggestionsContext' );
                                mw.track( 'mediawiki.searchSuggest', {
                                        action: 'submit-form',
-                                       numberOfResults: context.config.suggestions.length
+                                       numberOfResults: context.config.suggestions.length,
+                                       $form: context.config.$region.closest( 'form' ),
+                                       inputLocation: getInputLocation( context )
                                } );
                        } )
                        // If the form includes any fallback fulltext search buttons, remove them
diff --git a/resources/src/mediawiki/mediawiki.viewport.js b/resources/src/mediawiki/mediawiki.viewport.js
new file mode 100644 (file)
index 0000000..6396331
--- /dev/null
@@ -0,0 +1,100 @@
+( function ( mw, $ ) {
+       'use strict';
+
+       /**
+        * Utility library for viewport-related functions
+        *
+        * Notable references:
+        * - https://github.com/tuupola/jquery_lazyload
+        * - https://github.com/luis-almeida/unveil
+        *
+        * @class mw.viewport
+        * @singleton
+        */
+       var viewport = {
+
+               /**
+                * This is a private method pulled inside the module for testing purposes.
+                *
+                * @ignore
+                * @private
+                */
+               makeViewportFromWindow: function () {
+                       var $window = $( window ),
+                               scrollTop = $window.scrollTop(),
+                               scrollLeft = $window.scrollLeft();
+
+                       return {
+                               top: scrollTop,
+                               left: scrollLeft,
+                               right: scrollLeft + $window.width(),
+                               bottom: ( window.innerHeight ? window.innerHeight : $window.height() ) + scrollTop
+                       };
+               },
+
+               /**
+                * Check if any part of a given element is in a given viewport
+                *
+                * @method
+                * @param {HTMLElement} el Element that's being tested
+                * @param {Object} [rectangle] Viewport to test against; structured as such:
+                *
+                *      var rectangle = {
+                *              top: topEdge,
+                *              left: leftEdge,
+                *              right: rightEdge,
+                *              bottom: bottomEdge
+                *      }
+                *      Defaults to viewport made from `window`.
+                *
+                * @return {boolean}
+                */
+               isElementInViewport: function ( el, rectangle ) {
+                       var $el = $( el ),
+                               offset = $el.offset(),
+                               rect = {
+                                       height: $el.height(),
+                                       width: $el.width(),
+                                       top: offset.top,
+                                       left: offset.left
+                               },
+                               viewport = rectangle || this.makeViewportFromWindow();
+
+                       return (
+                               // Top border must be above viewport's bottom
+                               ( viewport.bottom >= rect.top ) &&
+                               // Left border must be before viewport's right border
+                               ( viewport.right >= rect.left ) &&
+                               // Bottom border must be below viewport's top
+                               ( viewport.top <= rect.top + rect.height ) &&
+                               // Right border must be after viewport's left border
+                               ( viewport.left <= rect.left + rect.width )
+                       );
+               },
+
+               /**
+                * Check if an element is a given threshold away in any direction from a given viewport
+                *
+                * @method
+                * @param {HTMLElement} el Element that's being tested
+                * @param {number} [threshold] Pixel distance considered "close". Must be a positive number.
+                *  Defaults to 50.
+                * @param {Object} [rectangle] Viewport to test against.
+                *  Defaults to viewport made from `window`.
+                * @return {boolean}
+                */
+               isElementCloseToViewport: function ( el, threshold, rectangle ) {
+                       var viewport = rectangle ? $.extend( {}, rectangle ) : this.makeViewportFromWindow();
+                       threshold = threshold || 50 ;
+
+                       viewport.top -= threshold;
+                       viewport.left -= threshold;
+                       viewport.right += threshold;
+                       viewport.bottom += threshold;
+                       return this.isElementInViewport( el, viewport );
+               }
+
+       };
+
+       mw.viewport = viewport;
+}( mediaWiki, jQuery ) );
index 63f6a19..76a6335 100644 (file)
@@ -126,6 +126,7 @@ $wgAutoloadClasses += [
        'MockImageHandler' => "$testDir/phpunit/mocks/media/MockImageHandler.php",
        'MockSvgHandler' => "$testDir/phpunit/mocks/media/MockSvgHandler.php",
        'MockDjVuHandler' => "$testDir/phpunit/mocks/media/MockDjVuHandler.php",
+       'MockOggHandler' => "$testDir/phpunit/mocks/media/MockOggHandler.php",
        'MockWebRequest' => "$testDir/phpunit/mocks/MockWebRequest.php",
        'MediaWiki\\Session\\DummySessionBackend'
                => "$testDir/phpunit/mocks/session/DummySessionBackend.php",
index 35df8b4..8029182 100644 (file)
@@ -1,4 +1,4 @@
-@chrome @clean @firefox @phantomjs
+@chrome @firefox @vagrant
 Feature: Create account
 
   Scenario Outline: Go to Create account page
index a0aa624..510c467 100644 (file)
@@ -1,4 +1,4 @@
-@chrome @clean @firefox @login @phantomjs
+@chrome @firefox @vagrant
 Feature: Create Page With Wiki Link
 
   Scenario: Create Page With Wiki Link
index b905795..ade6914 100644 (file)
@@ -1,4 +1,4 @@
-@chrome @clean @firefox @login @phantomjs
+@chrome @firefox @vagrant
 Feature: Edit Page
 
   Scenario: Create and edit page
index 35a6675..0b59c88 100644 (file)
@@ -1,11 +1,10 @@
-@chrome @clean @firefox @internet_explorer_6 @internet_explorer_7 @internet_explorer_8 @internet_explorer_9 @internet_explorer_10 @phantomjs
+@chrome @firefox @vagrant
 Feature: File
 
  Scenario: Anonymous goes to file that does not exist
    Given I am at file that does not exist
    Then page should show that no such file exists
 
- @login
  Scenario: Logged-in user goes to file that does not exist
    Given I am logged in
      And I am at file that does not exist
index 7ed66a0..c18f087 100644 (file)
@@ -1,4 +1,4 @@
-@chrome @clean @firefox @internet_explorer_6 @internet_explorer_7 @internet_explorer_8 @internet_explorer_9 @internet_explorer_10 @phantomjs
+@chrome @firefox @vagrant
 Feature: Log in
 
   Background:
@@ -25,7 +25,6 @@ Feature: Log in
     When I log in with incorrect password
     Then error box should be visible
 
-  @login
   Scenario: Log in with valid credentials
     When I log in
     Then error box should not be visible
index 3613c82..1f3621b 100644 (file)
@@ -1,4 +1,4 @@
-@chrome @clean @firefox @phantomjs
+@chrome @firefox @vagrant
 Feature: Main Page View History Links
 
   Background:
index 9fed9cf..23663c2 100644 (file)
@@ -1,11 +1,11 @@
-@chrome @clean @firefox @internet_explorer_6 @internet_explorer_7 @internet_explorer_8 @internet_explorer_9 @internet_explorer_10 @login @phantomjs
+@chrome @firefox @vagrant
 Feature: Preferences
 
   Scenario: Preferences Appearance
     Given I am logged in
     When I navigate to Preferences
       And I click Appearance
-    Then I can select skins
+    Then I can select skin Vector
       And I can select image size
       And I can select thumbnail size
       And I can select Threshold for stub link
@@ -18,7 +18,6 @@ Feature: Preferences
       And I can see local time
       And I can select my time zone
 
-
   Scenario: Preferences Editing
     Given I am logged in
     When I navigate to Preferences
@@ -34,7 +33,6 @@ Feature: Preferences
       And I can select show preview before edit box
       And I can select live preview
 
-
   Scenario: Preferences User profile
     Given I am logged in
     When I navigate to Preferences
index 133eec3..e1953a0 100644 (file)
@@ -54,11 +54,8 @@ Then(/^I can select my time zone$/) do
   end
 end
 
-Then(/^I can select skins$/) do
+Then(/^I can select skin Vector$/) do
   on(PreferencesAppearancePage) do |page|
-    expect(page.cologne_blue_element).to exist
-    expect(page.modern_element).to exist
-    expect(page.monobook_element).to exist
     expect(page.vector_element).to exist
   end
 end
index 1e5ffaa..4f8fb66 100644 (file)
@@ -15,7 +15,6 @@ class PreferencesAppearancePage
   page_url 'Special:Preferences#mw-prefsection-rendering'
 
   checkbox(:auto_number_check, id: 'mw-input-wpnumberheadings')
-  radio_button(:cologne_blue, id: 'mw-input-wpskin-cologneblue')
   radio_button(:day_mo_year_radio, id: 'mw-input-wpdate-dmy')
   checkbox(:dont_show_aft_check, id: 'mw-input-wparticlefeedback-disable')
   checkbox(:exclude_from_experiments_check, id: 'mw-input-wpvector-noexperiments')
@@ -23,8 +22,6 @@ class PreferencesAppearancePage
   radio_button(:iso_8601_radio, id: 'mw-input-wpdate-ISO_8601')
   span(:local_time_span, id: 'wpLocalTime')
   radio_button(:mo_day_year_radio, id: 'mw-input-wpdate-mdy')
-  radio_button(:modern, id: 'mw-input-wpskin-modern')
-  radio_button(:monobook, id: 'mw-input-wpskin-monobook')
   radio_button(:no_preference_radio, id: 'mw-input-wpdate-default')
   text_field(:other_offset, id: 'mw-input-wptimecorrection-other')
   a(:restore_default_link, id: 'mw-prefs-restoreprefs')
index ba61ebd..95136d2 100644 (file)
@@ -1,4 +1,4 @@
-@chrome @clean @firefox @phantomjs
+@chrome @firefox @vagrant
 Feature: View History
 
   Scenario: Edit page and view history
index fa774c7..15f2dcf 100644 (file)
@@ -168,15 +168,16 @@ class ParserTest {
                        $wgUser, $wgLang, $wgOut, $wgRequest, $wgStyleDirectory,
                        $wgExtraNamespaces, $wgNamespaceAliases, $wgNamespaceProtection, $wgLocalFileRepo,
                        $wgExtraInterlanguageLinkPrefixes, $wgLocalInterwikis,
-                       $parserMemc, $wgThumbnailScriptPath, $wgScriptPath,
+                       $parserMemc, $wgThumbnailScriptPath, $wgScriptPath, $wgResourceBasePath,
                        $wgArticlePath, $wgScript, $wgStylePath, $wgExtensionAssetsPath,
                        $wgMainCacheType, $wgMessageCacheType, $wgParserCacheType, $wgLockManagers;
 
+               $wgScriptPath = '';
                $wgScript = '/index.php';
-               $wgScriptPath = '/';
-               $wgArticlePath = '/wiki/$1';
                $wgStylePath = '/skins';
+               $wgResourceBasePath = '';
                $wgExtensionAssetsPath = '/extensions';
+               $wgArticlePath = '/wiki/$1';
                $wgThumbnailScriptPath = false;
                $wgLockManagers = [ [
                        'name' => 'fsLockManager',
@@ -194,7 +195,7 @@ class ParserTest {
                        'transformVia404' => false,
                        'backend' => new FSFileBackend( [
                                'name' => 'local-backend',
-                               'wikiId' => wfWikiId(),
+                               'wikiId' => wfWikiID(),
                                'containerPaths' => [
                                        'local-public' => $this->uploadDir . '/public',
                                        'local-thumb' => $this->uploadDir . '/thumb',
@@ -226,12 +227,13 @@ class ParserTest {
                $messageMemc = wfGetMessageCacheStorage();
                $parserMemc = wfGetParserCacheStorage();
 
-               $wgUser = new User;
+               RequestContext::resetMain();
                $context = new RequestContext;
+               $wgUser = new User;
                $wgLang = $context->getLanguage();
                $wgOut = $context->getOutput();
-               $wgParser = new StubObject( 'wgParser', $wgParserConf['class'], [ $wgParserConf ] );
                $wgRequest = $context->getRequest();
+               $wgParser = new StubObject( 'wgParser', $wgParserConf['class'], [ $wgParserConf ] );
 
                if ( $wgStyleDirectory === false ) {
                        $wgStyleDirectory = "$IP/skins";
@@ -828,7 +830,7 @@ class ParserTest {
                        'wgServer' => 'http://example.org',
                        'wgServerName' => 'example.org',
                        'wgScript' => '/index.php',
-                       'wgScriptPath' => '/',
+                       'wgScriptPath' => '',
                        'wgArticlePath' => '/wiki/$1',
                        'wgActionPaths' => [],
                        'wgLockManagers' => [ [
@@ -847,7 +849,7 @@ class ParserTest {
                                'transformVia404' => false,
                                'backend' => new FSFileBackend( [
                                        'name' => 'local-backend',
-                                       'wikiId' => wfWikiId(),
+                                       'wikiId' => wfWikiID(),
                                        'containerPaths' => [
                                                'local-public' => $this->uploadDir,
                                                'local-thumb' => $this->uploadDir . '/thumb',
@@ -894,7 +896,6 @@ class ParserTest {
                        'wgExternalLinkTarget' => false,
                        'wgHtml5' => true,
                        'wgWellFormedXml' => true,
-                       'wgAllowMicrodataAttributes' => true,
                        'wgAdaptiveMessageCache' => true,
                        'wgDisableLangConversion' => false,
                        'wgDisableTitleConversion' => false,
@@ -930,10 +931,12 @@ class ParserTest {
                        $GLOBALS[$var] = $val;
                }
 
+               // Must be set before $context as user language defaults to $wgContLang
                $GLOBALS['wgContLang'] = Language::factory( $lang );
                $GLOBALS['wgMemc'] = new EmptyBagOStuff;
 
-               $context = new RequestContext();
+               RequestContext::resetMain();
+               $context = RequestContext::getMain();
                $GLOBALS['wgLang'] = $context->getLanguage();
                $GLOBALS['wgOut'] = $context->getOutput();
                $GLOBALS['wgUser'] = $context->getUser();
index d4e7119..260e0f0 100644 (file)
@@ -2534,7 +2534,7 @@ parsoid=wt2html
 <table><pre></pre></table>
 
 !! html/parsoid
-<pre about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"a":{"&lt;pre":null},"sa":{"&lt;pre":""},"stx":"html","pi":[[{"k":"1","spc":["","","",""]}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;pre &lt;pre>x&lt;/pre>"}},"i":0}}]}'>x</pre>
+<pre about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"a":{"&lt;pre":null},"sa":{"&lt;pre":""},"stx":"html","pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;pre &lt;pre>x&lt;/pre>"}},"i":0}}]}'>x</pre>
 
 
 <p>&lt;pre </p>
@@ -2728,9 +2728,9 @@ Templates: Handle comments in parameter names (bug 67657)
 <!-- should be ignored -->
 1 = foo}}
 
-{{echo|1<!-- should be ignored --> = foo}}
+{{echo|1<!-- should be ignored -->=foo}}
 
-{{echo|<!-- should be ignored -->1 = foo}}
+{{echo|<!-- should be ignored -->1=foo}}
 !!html/parsoid
 <p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo","key":{"wt":"1\n&lt;!-- should be ignored -->"}}},"i":0}}]}'>foo</p>
 
@@ -2872,7 +2872,7 @@ Templates: Preserve blank parameter names in other positions
 !! html/php+tidy
 <p>bar foo</p>
 !! html/parsoid
-<p about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]},{"k":"","named":true,"spc":["","","",""]}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"blank_param","href":"./Template:Blank_param"},"params":{"1":{"wt":"bar"},"":{"wt":"foo"}},"i":0}}]}'>bar
+<p about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"},{"k":"","named":true}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"blank_param","href":"./Template:Blank_param"},"params":{"1":{"wt":"bar"},"":{"wt":"foo"}},"i":0}}]}'>bar
 foo</p>
 !! end
 
@@ -4374,8 +4374,8 @@ Definition Lists: colons occurring in tags
 <dt><div data-parsoid='{"stx":"html"}'>a:b</div></dt>
 <dt><div data-parsoid='{"stx":"html","autoInsertedEnd":true}'>a</div></dt>
 <dd>b</dd>
-<dt><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a:b"}},"i":0}}]}'>a:b</span></dt>
-<dt><i about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&#39;&#39;a:b&#39;&#39;"}},"i":0}}]}'>a:b</i>
+<dt><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a:b"}},"i":0}}]}'>a:b</span></dt>
+<dt><i about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&#39;&#39;a:b&#39;&#39;"}},"i":0}}]}'>a:b</i>
 <dl><dt><dl><dt><i>a:b</i></dt></dl></dt></dl></dt></dl>
 !! end
 
@@ -4773,7 +4773,7 @@ External image
 !! wikitext
 External image: http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png
 !! html
-<p>External image: <img src="http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png" />
+<p>External image: <img src="http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png"/>
 </p>
 !! end
 
@@ -4782,7 +4782,7 @@ External image from https
 !! wikitext
 External image from https: https://meta.wikimedia.org/upload/f/f1/Ncwikicol.png
 !! html
-<p>External image from https: <img src="https://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png" />
+<p>External image from https: <img src="https://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png"/>
 </p>
 !! end
 
@@ -4856,7 +4856,7 @@ External links: Clickable images
 !! wikitext
 ja-style clickable images: [http://example.com http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png]
 !! html/php
-<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>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>
 !! html/parsoid
 <p>ja-style clickable images: <a rel="mw:ExtLink" href="http://example.com"><img src="http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png" data-parsoid='{"type":"extlink"}'/></a></p>
@@ -5629,7 +5629,7 @@ Parenthesis in external links, w/ transclusion or comment
 </p><p>(<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>)
 </p>
 !! html/parsoid
-<p>(<a 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}}"}}' data-mw='{"attribs":[[{"txt":"href"},{"html":"http://example.com/&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&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;]}]],&amp;quot;dsr&amp;quot;:[20,31,null,null]}\" 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}}]}\">hi&lt;/span>"}]]}'>http://example.com/hi</a>)</p>
+<p>(<a 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}}"}}' data-mw='{"attribs":[[{"txt":"href"},{"html":"http://example.com/&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;}]],&amp;quot;dsr&amp;quot;:[20,31,null,null]}\" 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}}]}\">hi&lt;/span>"}]]}'>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 -->"}}'>http://example.com</a>)</p>
 !! end
@@ -6085,7 +6085,7 @@ Accept "!!" in templates
 
 !! html/parsoid
 <table>
-<tbody><tr><th typeof="mw:Transclusion" about="#mwt1" data-parsoid='{"autoInsertedEnd":true,"pi":[[{"k":"1","spc":["","","",""]}]]}' data-mw='{"parts":["!a ",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b!!c"}},"i":0}}]}'>a b</th><th about="#mwt1">c</th></tr>
+<tbody><tr><th typeof="mw:Transclusion" about="#mwt1" data-parsoid='{"autoInsertedEnd":true,"pi":[[{"k":"1"}]]}' data-mw='{"parts":["!a ",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b!!c"}},"i":0}}]}'>a b</th><th about="#mwt1">c</th></tr>
 !! end
 
 !! test
@@ -6370,6 +6370,19 @@ parsoid=wt2html
 </tbody></table>
 !! end
 
+!! test
+Break on | in element attribute in template
+!! options
+parsoid=wt2html,html2html
+!! wikitext
+{{echo|1=<div class="hi|ho">ha</div>}}
+!! html/php
+<p>ho"&gt;ha&lt;/div&gt;
+</p>
+!! html/parsoid
+<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"ho\">ha&lt;/div>"}},"i":0}}]}'>ho">ha</span>
+!! end
+
 !! test
 Indented table markup mixed with indented pre content (proposed in bug 6200)
 !! wikitext
@@ -6552,14 +6565,18 @@ Table with empty line following the start tag
 
 !! end
 
-# FIXME: Preserve the attribute properly (with an empty string as value) in
-# the PHP parser. Parsoid implements the behavior below.
 !! test
 Table attributes with empty value
 !! wikitext
 {|
 | style=| hello
 |}
+!! html/php
+<table>
+<tr>
+<td style=""> hello
+</td></tr></table>
+
 !! html/parsoid
 <table>
 <tbody>
@@ -7796,7 +7813,7 @@ parsoid
 !! wikitext
 {{echo|Some [[Fool]]}}s
 !! html
-<p><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" title="Fool" about="#mwt1" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a></p>
+<p><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"}]]}'>Some </span><a rel="mw:WikiLink" href="./Fool" title="Fool" about="#mwt1" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a></p>
 !! end
 
 !! test
@@ -7806,7 +7823,7 @@ 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" title="Fool" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a> are <b>bold and foolish</b></p>
+<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"}]]}'>Some <a rel="mw:WikiLink" href="./Fool" title="Fool" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a> are <b>bold and foolish</b></p>
 !! end
 
 !! article
@@ -8395,7 +8412,7 @@ Blah blah blah
 !! wikitext
 #REDIRECT [[{{echo|Foo}}bar]]
 !! html/parsoid
-<link typeof="mw:ExpandedAttrs" rel="mw:PageProp/redirect" href="./Foobar" data-mw='{"attribs":[[{"txt":"href"},{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&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;]}]],&amp;quot;dsr&amp;quot;:[12,24,null,null]}\" 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;Foo&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">Foo&lt;/span>bar"}]]}'/>
+<link typeof="mw:ExpandedAttrs" rel="mw:PageProp/redirect" href="./Foobar" data-mw='{"attribs":[[{"txt":"href"},{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;}]],&amp;quot;dsr&amp;quot;:[12,24,null,null]}\" 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;Foo&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">Foo&lt;/span>bar"}]]}'/>
 !! end
 
 !! test
@@ -8832,7 +8849,7 @@ Mixed list
 
 !! html/parsoid
 <dl><dt> hi</dt>
-<dd> <li about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","pi":[[{"k":"1","spc":["","","",""]}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;li>ho&lt;/li>"}},"i":0}}]}'>ho</li></dd></dl>
+<dd> <li about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;li>ho&lt;/li>"}},"i":0}}]}'>ho</li></dd></dl>
 !! end
 
 !! test
@@ -9800,8 +9817,7 @@ Magic Word: {{SCRIPTPATH}}
 !! wikitext
 {{SCRIPTPATH}}
 !! html
-<p>/
-</p>
+
 !! end
 
 !! test
@@ -10436,7 +10452,7 @@ Template with complex template as argument
 !! test
 Template with thumb image (with link in description)
 !! wikitext
-{{paramtest|param =[[Image:noimage.png|thumb|[[no link|link]] [[no link|caption]]]]}}
+{{paramtest|param=[[Image:noimage.png|thumb|[[no link|link]] [[no link|caption]]]]}}
 !! html/php
 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>
 
@@ -10519,7 +10535,7 @@ Don't abort table cell attribute parsing if wikilink is found in template arg
 |}
 !! html/parsoid
 <table>
-<tbody><tr><td> Test <ref about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"#tag:ref","function":"#tag"},"params":{"1":{"wt":"One two \"[[three]]\" four"}},"i":0}}]}'>One two "<a rel="mw:WikiLink" href="./Three" title="Three">three</a>" four</ref></td></tr>
+<tbody><tr><td> Test <ref about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"#tag:ref","function":"#tag"},"params":{"1":{"wt":"One two \"[[three]]\" four"}},"i":0}}]}'>One two "<a rel="mw:WikiLink" href="./Three" title="Three">three</a>" four</ref></td></tr>
 </tbody></table>
 !! end
 
@@ -10734,7 +10750,7 @@ Templates with intersecting and overlapping ranges
 </tr>
 </table>
 !! html/parsoid
-<p about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[{"k":"1","spc":["","","",""]}],[{"k":"1","spc":["","","",""]}],[{"k":"1","spc":["","","",""]}]],"firstWikitextNode":"table"}' data-mw='{"parts":["{|",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"\n&lt;p>ha&lt;/p>"}},"i":0}},"\n","{|",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"\n&lt;p>ho&lt;/p>"}},"i":1}},"\n",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"{{!}}hi"}},"i":2}},"\n|}"]}'>ha</p><table about="#mwt1" typeof="mw:ExpandedAttrs" data-mw='{"attribs":[[{"txt":"","html":""},{"html":""}]]}'>
+<p about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[{"k":"1"}],[{"k":"1"}],[{"k":"1"}]],"firstWikitextNode":"table"}' data-mw='{"parts":["{|",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"\n&lt;p>ha&lt;/p>"}},"i":0}},"\n","{|",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"\n&lt;p>ho&lt;/p>"}},"i":1}},"\n",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"{{!}}hi"}},"i":2}},"\n|}"]}'>ha</p><table about="#mwt1" typeof="mw:ExpandedAttrs" data-mw='{"attribs":[[{"txt":"","html":""},{"html":""}]]}'>
 
 </table><p about="#mwt1">ho</p><table about="#mwt1" typeof="mw:ExpandedAttrs" data-mw='{"attribs":[[{"txt":"","html":""},{"html":""}]]}'>
 
@@ -10964,7 +10980,9 @@ section=1
 Un-closed <includeonly>
 !! wikitext
 <includeonly>
-!! html
+!! html/php
+!! html/parsoid
+<meta typeof="mw:Includes/IncludeOnly" data-parsoid='{"src":"&lt;includeonly>"}'/>
 !! end
 
 ## We used to, but no longer wt2wt this test since the default serializer
@@ -11023,13 +11041,13 @@ c}}d
 
 b}}
 !! html
-<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":["a",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b&lt;table>&lt;/table>c"}},"i":0}},"d"]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>ab</p><table about="#mwt1" data-parsoid='{"stx":"html"}'></table><p about="#mwt1">cd</p>
+<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":["a",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b&lt;table>&lt;/table>c"}},"i":0}},"d"]}' data-parsoid='{"pi":[[{"k":"1"}]]}'>ab</p><table about="#mwt1" data-parsoid='{"stx":"html"}'></table><p about="#mwt1">cd</p>
 
-<p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["a",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b\n&lt;table>&lt;/table>\nc"}},"i":0}},"d"]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>ab</p><span about="#mwt2">
+<p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["a",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b\n&lt;table>&lt;/table>\nc"}},"i":0}},"d"]}' data-parsoid='{"pi":[[{"k":"1"}]]}'>ab</p><span about="#mwt2">
 </span><table about="#mwt2" data-parsoid='{"stx":"html"}'></table><span about="#mwt2">
 </span><p about="#mwt2">cd</p>
 
-<p about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\n\n&lt;table>&lt;/table>\n\nb"}},"i":0}}]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>a</p><span about="#mwt3">
+<p about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\n\n&lt;table>&lt;/table>\n\nb"}},"i":0}}]}' data-parsoid='{"pi":[[{"k":"1"}]]}'>a</p><span about="#mwt3">
 
 </span><table about="#mwt3" data-parsoid='{"stx":"html"}'></table><span about="#mwt3">
 
@@ -11529,7 +11547,7 @@ Templates: Support for templates generating attributes and content
 <div style="background:#f9f9f9;">foo</div>
 
 !! html/parsoid
-<div style="background:#f9f9f9;" about="#mwt3" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html"}' data-mw='{"attribs":[[{"txt":"style","html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&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;]}]],&amp;quot;dsr&amp;quot;:[5,49,null,null]}\" 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;style{{=}}\\&amp;quot;background:&amp;amp;#35;f9f9f9;\\&amp;quot;&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">style&lt;/span>&lt;span typeof=\"mw:Nowiki\" about=\"#mwt1\" data-parsoid=\"{}\">=&lt;/span>&lt;span about=\"#mwt1\" data-parsoid=\"{}\">\"background:&lt;/span>&lt;span typeof=\"mw:Entity\" about=\"#mwt1\" data-parsoid=\"{&amp;quot;src&amp;quot;:&amp;quot;&amp;amp;#35;&amp;quot;,&amp;quot;srcContent&amp;quot;:&amp;quot;#&amp;quot;}\">#&lt;/span>&lt;span about=\"#mwt1\" data-parsoid=\"{}\">f9f9f9;\"&lt;/span>"},{"html":""}]]}'>foo</div>
+<div style="background:#f9f9f9;" about="#mwt3" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html"}' data-mw='{"attribs":[[{"txt":"style","html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;}]],&amp;quot;dsr&amp;quot;:[5,49,null,null]}\" 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;style{{=}}\\&amp;quot;background:&amp;amp;#35;f9f9f9;\\&amp;quot;&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">style&lt;/span>&lt;span typeof=\"mw:Nowiki\" about=\"#mwt1\" data-parsoid=\"{}\">=&lt;/span>&lt;span about=\"#mwt1\" data-parsoid=\"{}\">\"background:&lt;/span>&lt;span typeof=\"mw:Entity\" about=\"#mwt1\" data-parsoid=\"{&amp;quot;src&amp;quot;:&amp;quot;&amp;amp;#35;&amp;quot;,&amp;quot;srcContent&amp;quot;:&amp;quot;#&amp;quot;}\">#&lt;/span>&lt;span about=\"#mwt1\" data-parsoid=\"{}\">f9f9f9;\"&lt;/span>"},{"html":""}]]}'>foo</div>
 !! end
 
 !! test
@@ -12008,7 +12026,7 @@ Templates: Ugly templates: 5. Template encapsulation test: Non-trivial overlap o
 {{echo|<div>foo}}
 {{echo|</table>}}
 !! html/parsoid
-<div about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;table>"}},"i":0}},"\n",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;div>foo"}},"i":1}},"\n",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;/table>"}},"i":2}}]}' data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[{"k":"1","spc":["","","",""]}],[{"k":"1","spc":["","","",""]}],[{"k":"1","spc":["","","",""]}]]}'>foo
+<div about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;table>"}},"i":0}},"\n",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;div>foo"}},"i":1}},"\n",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;/table>"}},"i":2}}]}' data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[{"k":"1"}],[{"k":"1"}],[{"k":"1"}]]}'>foo
 </div><table about="#mwt1" data-parsoid='{"stx":"html"}'>
 </table>
 !! end
@@ -12022,7 +12040,7 @@ Templates: Ugly templates: 6. Template encapsulation test: Cyclical nesting of t
 {{echo|<div>}}
 {{echo|</div>}}
 !! html/parsoid
-<table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;table>&lt;tr>&lt;td>&lt;table>"}},"i":0}},"\n",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;div>"}},"i":1}},"\n",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;/div>"}},"i":2}}]}' data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[{"k":"1","spc":["","","",""]}],[{"k":"1","spc":["","","",""]}],[{"k":"1","spc":["","","",""]}]]}'><tbody><tr data-parsoid='{"stx":"html"}'><td data-parsoid='{"stx":"html"}'><div data-parsoid='{"stx":"html"}'>
+<table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;table>&lt;tr>&lt;td>&lt;table>"}},"i":0}},"\n",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;div>"}},"i":1}},"\n",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;/div>"}},"i":2}}]}' data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[{"k":"1"}],[{"k":"1"}],[{"k":"1"}]]}'><tbody><tr data-parsoid='{"stx":"html"}'><td data-parsoid='{"stx":"html"}'><div data-parsoid='{"stx":"html"}'>
 </div><table about="#mwt1" data-parsoid='{"stx":"html"}'>
 </table></td></tr></tbody></table>
 !! end
@@ -12888,7 +12906,7 @@ parsoid=wt2html,wt2wt,html2html
 <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"></a></div>This is a caption</div></div></div>
 
 !! html/parsoid
-<figure typeof="mw:Image/Thumb mw:ExpandedAttrs" about="#mwt2" data-mw='{"attribs":[["thumbnail",{"html":"thumb"}],["width",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&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;]}]],&amp;quot;dsr&amp;quot;:[24,38,null,null]}\" 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}}]}\">137px&lt;/span>"}]]}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="16" width="137"/></a><figcaption>This is a caption</figcaption></figure>
+<figure typeof="mw:Image/Thumb mw:ExpandedAttrs" about="#mwt2" data-mw='{"attribs":[["thumbnail",{"html":"thumb"}],["width",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;}]],&amp;quot;dsr&amp;quot;:[24,38,null,null]}\" 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}}]}\">137px&lt;/span>"}]]}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="16" width="137"/></a><figcaption>This is a caption</figcaption></figure>
 !! end
 
 !! test
@@ -12899,7 +12917,7 @@ parsoid=wt2html,wt2wt,html2html
 <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"></a></div>This is a caption</div></div></div>
 
 !! html/parsoid
-<figure typeof="mw:Image/Thumb mw:ExpandedAttrs" about="#mwt3" data-mw='{"attribs":[["thumbnail",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&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;]}]],&amp;quot;dsr&amp;quot;:[18,32,null,null]}\" 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}}]}\">thumb&lt;/span>"}],["width",{"html":"&lt;span about=\"#mwt2\" typeof=\"mw:Transclusion\" data-parsoid=\"{&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;]}]],&amp;quot;dsr&amp;quot;:[33,47,null,null]}\" 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}}]}\">137px&lt;/span>"}]]}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="16" width="137"/></a><figcaption>This is a caption</figcaption></figure>
+<figure typeof="mw:Image/Thumb mw:ExpandedAttrs" about="#mwt3" data-mw='{"attribs":[["thumbnail",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;}]],&amp;quot;dsr&amp;quot;:[18,32,null,null]}\" 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}}]}\">thumb&lt;/span>"}],["width",{"html":"&lt;span about=\"#mwt2\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;}]],&amp;quot;dsr&amp;quot;:[33,47,null,null]}\" 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}}]}\">137px&lt;/span>"}]]}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="16" width="137"/></a><figcaption>This is a caption</figcaption></figure>
 !! end
 
 !! test
@@ -12910,7 +12928,7 @@ parsoid=wt2html,wt2wt,html2html
 <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 mw:ExpandedAttrs" about="#mwt2" data-parsoid='{"optList":[{"ck":"width","ak":"{{echo|50px}}"}]}' data-mw='{"attribs":[["width",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&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;]}]],&amp;quot;dsr&amp;quot;:[18,31,null,null]}\" 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}}]}\">50px&lt;/span>"}]]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a></span></p>
+<p><span typeof="mw:Image mw:ExpandedAttrs" about="#mwt2" data-parsoid='{"optList":[{"ck":"width","ak":"{{echo|50px}}"}]}' data-mw='{"attribs":[["width",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;}]],&amp;quot;dsr&amp;quot;:[18,31,null,null]}\" 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}}]}\">50px&lt;/span>"}]]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a></span></p>
 !! end
 
 ## Parsoid does not provide editing support for images where templates produce multiple image attributes.
@@ -13292,7 +13310,7 @@ Alt image option should handle most kinds of wikitext without barfing
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="This is a link and a bold template." 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"></a></div>This is the image caption</div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb mw:ExpandedAttrs" about="#mwt2" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"This is the image caption"},{"ck":"alt","ak":"alt=This is a [[link]] and a {{echo|&#39;&#39;bold template&#39;&#39;}}."}]}' data-mw='{"attribs":[["thumbnail",{"html":"thumb"}],["alt",{"html":"alt=This is a &lt;a rel=\"mw:WikiLink\" href=\"./Link\" title=\"Link\" data-parsoid=\"{&amp;quot;stx&amp;quot;:&amp;quot;simple&amp;quot;,&amp;quot;a&amp;quot;:{&amp;quot;href&amp;quot;:&amp;quot;./Link&amp;quot;},&amp;quot;sa&amp;quot;:{&amp;quot;href&amp;quot;:&amp;quot;link&amp;quot;},&amp;quot;dsr&amp;quot;:[65,73,2,2]}\">link&lt;/a> and a &lt;i about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[80,106,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;]}]]}\" 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;&#39;&#39;bold template&#39;&#39;&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">bold template&lt;/i>."}]]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img alt="This is a link and a bold template." resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220" data-parsoid='{"a":{"alt":"This is a link and a bold template.","resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"alt":"alt=This is a [[link]] and a {{echo|&#39;&#39;bold template&#39;&#39;}}.","resource":"Image:Foobar.jpg"}}'/></a><figcaption>This is the image caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb mw:ExpandedAttrs" about="#mwt2" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"This is the image caption"},{"ck":"alt","ak":"alt=This is a [[link]] and a {{echo|&#39;&#39;bold template&#39;&#39;}}."}]}' data-mw='{"attribs":[["thumbnail",{"html":"thumb"}],["alt",{"html":"alt=This is a &lt;a rel=\"mw:WikiLink\" href=\"./Link\" title=\"Link\" data-parsoid=\"{&amp;quot;stx&amp;quot;:&amp;quot;simple&amp;quot;,&amp;quot;a&amp;quot;:{&amp;quot;href&amp;quot;:&amp;quot;./Link&amp;quot;},&amp;quot;sa&amp;quot;:{&amp;quot;href&amp;quot;:&amp;quot;link&amp;quot;},&amp;quot;dsr&amp;quot;:[65,73,2,2]}\">link&lt;/a> and a &lt;i about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[80,106,null,null],&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;}]]}\" 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;&#39;&#39;bold template&#39;&#39;&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">bold template&lt;/i>."}]]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img alt="This is a link and a bold template." resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220" data-parsoid='{"a":{"alt":"This is a link and a bold template.","resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"alt":"alt=This is a [[link]] and a {{echo|&#39;&#39;bold template&#39;&#39;}}.","resource":"Image:Foobar.jpg"}}'/></a><figcaption>This is the image caption</figcaption></figure>
 !! end
 
 ###################
@@ -14125,7 +14143,7 @@ T93580: 3. Templated <ref> inside inline images
 
 <references />
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"Undisplayed caption in inline image with ref: {{echo|&lt;ref>{{echo|foo}}&lt;/ref>}}"}]}' data-mw='{"caption":"Undisplayed caption in inline image with ref: &lt;span about=\"#mwt2\" class=\"mw-ref\" id=\"cite_ref-1\" rel=\"dc:references\" typeof=\"mw:Transclusion  mw:Extension/ref\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[64,96,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;]}]]}\" 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;&lt;ref>{{echo|foo}}&lt;/ref>&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">&lt;a href=\"#cite_note-1\" style=\"counter-reset: mw-Ref 1;\">&lt;span class=\"mw-reflink-text\">[1]&lt;/span>&lt;/a>&lt;/span>&lt;meta typeof=\"mw:Transclusion mw:Extension/ref/Marker\" about=\"#mwt2\" data-parsoid=\"{&amp;quot;group&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;foo&amp;quot;,&amp;quot;hasRefInRef&amp;quot;:false,&amp;quot;dsr&amp;quot;:[64,96,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;]}]],&amp;quot;tmp&amp;quot;:{}}\" 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;&lt;ref>{{echo|foo}}&lt;/ref>&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"Undisplayed caption in inline image with ref: {{echo|&lt;ref>{{echo|foo}}&lt;/ref>}}"}]}' data-mw='{"caption":"Undisplayed caption in inline image with ref: &lt;span about=\"#mwt2\" class=\"mw-ref\" id=\"cite_ref-1\" rel=\"dc:references\" typeof=\"mw:Transclusion  mw:Extension/ref\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[64,96,null,null],&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;}]]}\" 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;&lt;ref>{{echo|foo}}&lt;/ref>&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">&lt;a href=\"#cite_note-1\" style=\"counter-reset: mw-Ref 1;\">&lt;span class=\"mw-reflink-text\">[1]&lt;/span>&lt;/a>&lt;/span>&lt;meta typeof=\"mw:Transclusion mw:Extension/ref/Marker\" about=\"#mwt2\" data-parsoid=\"{&amp;quot;group&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;foo&amp;quot;,&amp;quot;hasRefInRef&amp;quot;:false,&amp;quot;dsr&amp;quot;:[64,96,null,null],&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;}]],&amp;quot;tmp&amp;quot;:{}}\" 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;&lt;ref>{{echo|foo}}&lt;/ref>&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
 
 <ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
 !! end
@@ -14618,7 +14636,7 @@ parsoid=wt2html
 * {{echo|a
 [[Category:Foo]]}}
 !! html/parsoid
-<ul><li> <span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\n[[Category:Foo]]"}},"i":0}}]}'>a
+<ul><li> <span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\n[[Category:Foo]]"}},"i":0}}]}'>a
 </span><link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"}}'/></li></ul>
 !! end
 
@@ -14633,7 +14651,7 @@ parsoid=wt2html
 !! html/parsoid
 <ul><li> a</li></ul>
 
-<link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"},"pi":[[{"k":"1","spc":["","","",""]}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[Category:Foo]]\n[[Category:Bar]]"}},"i":0}}]}'/><span about="#mwt1">
+<link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"},"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[Category:Foo]]\n[[Category:Bar]]"}},"i":0}}]}'/><span about="#mwt1">
 </span><link rel="mw:PageProp/Category" href="./Category:Bar" about="#mwt1" data-parsoid='{"stx":"simple","a":{"href":"./Category:Bar"},"sa":{"href":"Category:Bar"}}'/>
 <link rel="mw:PageProp/Category" href="./Category:Baz" data-parsoid='{"stx":"simple","a":{"href":"./Category:Baz"},"sa":{"href":"Category:Baz"}}'/>
 !! end
@@ -15451,12 +15469,8 @@ div with illegal double attributes
 
 !!end
 
-# FIXME: produce empty string instead of "class" in the PHP parser, following
-# the HTML5 spec.
 !! test
 div with empty attribute value, space before equals
-!! options
-parsoid
 !! wikitext
 <div class =>HTML rocks</div>
 !! html
@@ -15464,26 +15478,36 @@ parsoid
 
 !! end
 
+# FIXME: Parsoid doesn't match the html5 spec
 !! test
 div with multiple empty attribute values
 !! options
-parsoid
+parsoid=wt2html,html2html
 !! wikitext
 <div id= title=>HTML rocks</div>
-!! html
-<div id="" title="">HTML rocks</div>
+!! html/php
+<div id="title.3D">HTML rocks</div>
 
+!! html/parsoid
+<div id="" title="">HTML rocks</div>
 !! end
 
+# FIXME: Parsoid doesn't match the html5 spec
 !! test
 table with multiple empty attribute values
 !! options
-parsoid
+parsoid=wt2html,html2html
 !! wikitext
 {| title= id=
 | hi
 |}
-!! html
+!! html/php
+<table title="id=">
+<tr>
+<td> hi
+</td></tr></table>
+
+!! html/parsoid
 <table title="" id="">
 <tbody><tr><td> hi</td></tr>
 </tbody></table>
@@ -15500,13 +15524,6 @@ div with braces in attribute value
 <div title="{}">Foo</div>
 !! end
 
-# This it very inconsistent in the PHP parser: it returns 
-# class="class" if there is a space between the name and the equal sign (see
-# 'div with empty attribute value, space before equals'), but strips the
-# attribute completely if the space is missing. We hope that not much content
-# depends on this, so are implementing the behavior below in Parsoid for
-# consistencies' sake.
-# FIXME: fix this behavior in the PHP parser?
 !! test
 div with empty attribute value, no space before equals
 !! options
@@ -15514,7 +15531,7 @@ parsoid=wt2html,html2html
 !! wikitext
 <div class=>HTML rocks</div>
 !! html/php
-<div>HTML rocks</div>
+<div class="">HTML rocks</div>
 
 !! html/parsoid
 <div class="">HTML rocks</div>
@@ -15836,7 +15853,7 @@ Attribute test: equals, then nothing
 !! wikitext
 <font color=>foo</font>
 !! html
-<p><font>foo</font>
+<p><font color="">foo</font>
 </p>
 !! end
 
@@ -20845,7 +20862,7 @@ Bug 19052 U+3000 IDEOGRAPHIC SPACE should terminate external images links
 !! wikitext
 http://www.example.org/pic.png <-- U+3000 (vim: ^Vu3000)
 !! html
-<p><img src="http://www.example.org/pic.png" alt="pic.png" /> &lt;-- U+3000 (vim: ^Vu3000)
+<p><img src="http://www.example.org/pic.png" alt="pic.png"/> &lt;-- U+3000 (vim: ^Vu3000)
 </p>
 !! end
 
@@ -22028,8 +22045,11 @@ B <span about="#mwt4" class="mw-ref" id="cite_ref-2" rel="dc:references" typeof=
 </ol>
 !!end
 
-!!test
+## Don't expect this to rt since we're dropping content
+!! test
 References: 5. ref tags in references should be processed while ignoring all other content
+!! options
+parsoid=wt2html,html2html
 !! wikitext
 A <ref name="a" />
 B <ref name="b">bar</ref>
@@ -22043,18 +22063,18 @@ This should just get lost.
 B <span about="#mwt4" class="mw-ref" id="cite_ref-b_2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-b-2"},"attrs":{"name":"b"}}'><a href="#cite_note-b-2"><span class="mw-reflink-text">[2]</span></a></span></p>
 
 
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" 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=\"mw-ref\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid=&#39;{\"dsr\":[59,82,14,6]}&#39; data-mw=&#39;{\"name\":\"ref\",\"body\":{\"id\":\"mw-reference-text-cite_note-a-1\"},\"attrs\":{\"name\":\"a\"}}&#39;>&lt;a href=\"#cite_note-a-1\" style=\"counter-reset: mw-Ref 1;\">&lt;span class=\"mw-reflink-text\">[1]&lt;/span>&lt;/a>&lt;/span>\n"},"attrs":{}}'><li about="#cite_note-a-1" id="cite_note-a-1"><a href="#cite_ref-a_1-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-a-1" class="mw-reference-text">foo</span></li><li about="#cite_note-b-2" id="cite_note-b-2"><a href="#cite_ref-b_2-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-b-2" class="mw-reference-text">bar</span></li>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{},"body":{"html":"\n&lt;span about=\"#mwt8\" class=\"mw-ref\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid=&#39;{\"dsr\":[59,82,14,6]}&#39; data-mw=&#39;{\"name\":\"ref\",\"body\":{\"id\":\"mw-reference-text-cite_note-a-1\"},\"attrs\":{\"name\":\"a\"}}&#39;>&lt;a href=\"#cite_note-a-1\" style=\"counter-reset: mw-Ref 1;\">&lt;span class=\"mw-reflink-text\">[1]&lt;/span>&lt;/a>&lt;/span>\n"}}'><li about="#cite_note-a-1" id="cite_note-a-1"><a href="#cite_ref-a_1-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-a-1" class="mw-reference-text">foo</span></li><li about="#cite_note-b-2" id="cite_note-b-2"><a href="#cite_ref-b_2-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-b-2" class="mw-reference-text">bar</span></li>
 </ol>
-!!end
+!! end
 
-!!test
+!! test
 References: 6. <references /> from a transclusion
 !! wikitext
 <ref>Foo</ref> {{echo|<references />}}
 !! html/parsoid
 <p><span about="#mwt3" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span></p> <ol class="mw-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"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">Foo</span></li>
 </ol>
-!!end
+!! end
 
 !! test
 References: 7. Multiple references tags (one without and one with nested refs) should be correctly handled
@@ -22076,7 +22096,7 @@ B <span about="#mwt4" class="mw-ref" id="cite_ref-b_2-0" rel="dc:references" typ
 <li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo bar for a</span></li>
 </ol>
 
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt8" data-mw-group="X" data-mw='{"name":"references","body":{"extsrc":"&lt;ref name=\"b\">foo&lt;/ref>","html":"\n&lt;span about=\"#mwt10\" class=\"mw-ref\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid=&#39;{\"dsr\":[96,119,14,6]}&#39; data-mw=&#39;{\"name\":\"ref\",\"body\":{\"id\":\"mw-reference-text-cite_note-b-2\"},\"attrs\":{\"name\":\"b\"}}&#39;>&lt;a href=\"#cite_note-b-2\" style=\"counter-reset: mw-Ref 1;\" data-mw-group=\"X\">&lt;span class=\"mw-reflink-text\">[X 1]&lt;/span>&lt;/a>&lt;/span>\n"},"attrs":{"group":"X"}}'>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt8" data-mw-group="X" data-mw='{"name":"references","attrs":{"group":"X"},"body":{"html":"\n&lt;span about=\"#mwt10\" class=\"mw-ref\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid=&#39;{\"dsr\":[96,119,14,6]}&#39; data-mw=&#39;{\"name\":\"ref\",\"body\":{\"id\":\"mw-reference-text-cite_note-b-2\"},\"attrs\":{\"name\":\"b\"}}&#39;>&lt;a href=\"#cite_note-b-2\" style=\"counter-reset: mw-Ref 1;\" data-mw-group=\"X\">&lt;span class=\"mw-reflink-text\">[X 1]&lt;/span>&lt;/a>&lt;/span>\n"}}'>
 <li about="#cite_note-b-2" id="cite_note-b-2"><a href="#cite_ref-b_2-0" data-mw-group="X" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-b-2" class="mw-reference-text">foo</span></li>
 </ol>
 !! end
@@ -22349,7 +22369,7 @@ parsoid=html2wt
 !! html/parsoid
 <h1>=<b>bold</b>foo=</h1>
 !! wikitext
-= ='''bold'''<nowiki>foo=</nowiki> =
+= ='''bold'''foo= =
 !!end
 
 !! test
@@ -22553,35 +22573,52 @@ parsoid=html2wt
 <nowiki>;</nowiki>Foo<nowiki>:</nowiki>bar
 !!end
 
+## Making these next 3 tests Parsoid-only since they are html2wt tests
+## to test wikitext escaping, and insignificant whitespace diffs
+## cause PHP parser tests to barf
 !! test
-Lists: 1. Nested inside html
+Lists: 1. Nested inside html (No unnecessary escapes)
 !! options
 parsoid=html2wt
 !! html/parsoid
-<ul><li>*foo</li></ul>
-<ul><li>#foo</li></ul>
-<ul><li>:foo</li></ul>
-<ul><li>;foo</li></ul>
-<ol><li>*foo</li></ol>
-<ol><li>#foo</li></ol>
-<ol><li>:foo</li></ol>
-<ol><li>;foo</li></ol>
+<ul>
+<li>*foo</li>
+<li>#foo</li>
+<li>:foo</li>
+<li>;foo</li>
+<li data-parsoid='{}'>*foo</li>
+<li data-parsoid='{}'>#foo</li>
+<li data-parsoid='{}'>:foo</li>
+<li data-parsoid='{}'>;foo</li>
+</ul>
 
+<ol>
+<li>*foo</li>
+<li>#foo</li>
+<li>:foo</li>
+<li>;foo</li>
+<li data-parsoid='{}'>*foo</li>
+<li data-parsoid='{}'>#foo</li>
+<li data-parsoid='{}'>:foo</li>
+<li data-parsoid='{}'>;foo</li>
+</ol>
 !! wikitext
+* *foo
+* #foo
+* :foo
+* ;foo
 *<nowiki>*foo</nowiki>
-
 *<nowiki>#foo</nowiki>
-
 *<nowiki>:foo</nowiki>
-
 *<nowiki>;foo</nowiki>
 
+# *foo
+# #foo
+# :foo
+# ;foo
 #<nowiki>*foo</nowiki>
-
 #<nowiki>#foo</nowiki>
-
 #<nowiki>:foo</nowiki>
-
 #<nowiki>;foo</nowiki>
 !!end
 
@@ -22595,29 +22632,28 @@ parsoid=html2wt
 <dl><dt>:foo</dt>
 <dd>bar</dd></dl>
 <dl><dd>:foo</dd></dl>
-
 !! wikitext
-;<nowiki>;foo</nowiki>
+; ;foo
 
-;<nowiki>:foo</nowiki>
+; <nowiki>:foo</nowiki>
 
-;<nowiki>:foo</nowiki>
-:bar
+; <nowiki>:foo</nowiki>
+: bar
 
-:<nowiki>:foo</nowiki>
+: :foo
 !!end
 
 !! test
-Lists: 3. Only bullets at start of text should be escaped
+Lists: 3. Only bullets at start of text in wikitext-generated HTML should be escaped
 !! options
 parsoid=html2wt
 !! html/parsoid
-<ul><li>*foo*bar</li></ul>
-<ul><li>*foo<i>it</i>*bar</li></ul>
-
+<ul>
+<li>*foo*bar</li>
+<li data-parsoid='{}'>*foo<i>it</i>*bar</li>
+</ul>
 !! wikitext
-*<nowiki>*foo*bar</nowiki>
-
+* *foo*bar
 *<nowiki>*foo</nowiki>''it''*bar
 !!end
 
@@ -23205,6 +23241,8 @@ parsoid=html2wt
 <a rel="mw:ExtLink" href="http://google.com">google]</a></p>
 <p>[http://google.com]</p>
 <p>[http://google.com google]</p>
+<p>[<a rel="mw:ExtLink" href="http://google.com">http://google.com</a>]</p>
+<p>[<a rel="mw:ExtLink" href="http://google.com" about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"http://google.com"}},"i":0}}]}'>http://google.com</a>]</p>
 !! wikitext
 [http://google.com <nowiki>[google]</nowiki>]
 [http://google.com <nowiki>google]</nowiki>]
@@ -23213,11 +23251,16 @@ parsoid=html2wt
 
 <nowiki>[http://google.com google]</nowiki>
 
+[http://google.com<nowiki>]</nowiki>
+
+[{{echo|http://google.com}}<nowiki>]</nowiki>
 !! html/php
 <p><a rel="nofollow" class="external text" href="http://google.com">[google]</a>
 <a rel="nofollow" class="external text" href="http://google.com">google]</a>
 </p><p>[http://google.com]
 </p><p>[http://google.com google]
+</p><p>[<a rel="nofollow" class="external free" href="http://google.com">http://google.com</a>]
+</p><p>[<a rel="nofollow" class="external free" href="http://google.com">http://google.com</a>]
 </p>
 !! end
 
@@ -23227,10 +23270,14 @@ Links 5. ExtLinks: No escapes needed
 parsoid=html2wt
 !! html/parsoid
 <p><a rel="mw:ExtLink" href="http://google.com">[google</a></p>
+<p>[<a ref="mw:ExtLink" href="http://google.com"></a>]</p>
 !! wikitext
 [http://google.com [google]
+
+[[http://google.com]]
 !! html/php
 <p><a rel="nofollow" class="external text" href="http://google.com">[google</a>
+</p><p>[<a rel="nofollow" class="external autonumber" href="http://google.com">[1]</a>]
 </p>
 !! end
 
@@ -23909,14 +23956,15 @@ HTML tag with 'unnecessary' entity encoding in attributes
 
 !! test
 HTML tag with broken attribute value quoting
+!! options
+parsoid=wt2html,html2html
 !! wikitext
 <span title="Hello world>Foo</span>
 !! html/php
 <p><span title="Hello world">Foo</span>
 </p>
 !! html/parsoid
-<p><span title="Hello world">Foo</span>
-</p>
+<p><span title="Hello world">Foo</span></p>
 !! end
 
 !! test
@@ -23934,6 +23982,8 @@ parsoid=wt2html,html2html
 
 !! test
 Table with broken attribute value quoting
+!! options
+parsoid=wt2html,html2html
 !! wikitext
 {|
 | title="Hello world|Foo
@@ -23954,6 +24004,8 @@ Table with broken attribute value quoting
 
 !! test
 Table with broken attribute value quoting on consecutive lines
+!! options
+parsoid=wt2html,html2html
 !! wikitext
 {|
 | title="Hello world|Foo
@@ -24522,13 +24574,13 @@ parsoid=wt2wt,wt2html
 !! wikitext
 <table>{{echo|hi</table>hello}}
 !! html/parsoid
-<p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["&lt;table>",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"hi&lt;/table>hello"}},"i":0}}]}' data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true,"pi":[[{"k":"1","spc":["","","",""]}]]}'>hi</p><table about="#mwt2" data-parsoid='{"stx":"html"}'></table><p about="#mwt2">hello</p>
+<p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["&lt;table>",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"hi&lt;/table>hello"}},"i":0}}]}' data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true,"pi":[[{"k":"1"}]]}'>hi</p><table about="#mwt2" data-parsoid='{"stx":"html"}'></table><p about="#mwt2">hello</p>
 !!end
 
 !!test
 Table in fosterable position
 !!options
-parsoid=wt2html,wt2wt
+parsoid=wt2html
 !! wikitext
 {{OpenTable}}
 <div>
@@ -24537,7 +24589,7 @@ parsoid=wt2html,wt2wt
 </div>
 |}
 !! html/parsoid
-<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">
+<div about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"OpenTable","href":"./Template:OpenTable"},"params":{},"i":0}},"\n&lt;div>\n"]}' data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[]]}'></div><span about="#mwt1">
 </span>
 <table about="#mwt1" data-parsoid='{"autoInsertedEnd":true}'></table>
 
@@ -24555,7 +24607,7 @@ Properly encapsulate empty-content transclusions in fosterable positions
 }}
 </table>
 !! html/parsoid
-<table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":["&lt;table>\n",{"template":{"target":{"wt":"#if:","function":"#if"},"params":{"1":{"wt":"\n&lt;td>foo&lt;/td>\n"}},"i":0}},"\n&lt;/table>"]}' data-parsoid='{"stx":"html","pi":[[{"k":"1","spc":["","","",""]}]]}'>
+<table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":["&lt;table>\n",{"template":{"target":{"wt":"#if:","function":"#if"},"params":{"1":{"wt":"\n&lt;td>foo&lt;/td>\n"}},"i":0}},"\n&lt;/table>"]}' data-parsoid='{"stx":"html","pi":[[{"k":"1"}]]}'>
 
 </table>
 !! end
@@ -24573,6 +24625,30 @@ hello
 
 !! end
 
+!! test
+T115289: Unclosed table
+!! wikitext
+{{echo|<table>}}<!--c-->[[Category:Two]]
+!! html/parsoid
+<link rel="mw:PageProp/Category" href="./Category:Two" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"simple","a":{"href":"./Category:Two"},"sa":{"href":"Category:Two"},"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;table>"}},"i":0}},"&lt;!--c-->[[Category:Two]]"]}'/><table about="#mwt1" data-parsoid='{"stx":"html","autoInsertedEnd":true}'><!--c--></table>
+!! end
+
+!! test
+T115289: Don't migrate newlines out of tables with fostered content
+!! wikitext
+<table><td></td>{{echo|<tr>[[Category:One]]}}<!--c-->[[Category:Two]]
+!! html/parsoid
+<link rel="mw:PageProp/Category" href="./Category:One" about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"stx":"simple","a":{"href":"./Category:One"},"sa":{"href":"Category:One"},"fostered":true,"pi":[[{"k":"1"}]]}' data-mw='{"parts":["&lt;table>&lt;td>&lt;/td>",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;tr>[[Category:One]]"}},"i":0}},"&lt;!--c-->[[Category:Two]]"]}'/><link rel="mw:PageProp/Category" href="./Category:Two" about="#mwt2"/><table about="#mwt2" data-parsoid='{"stx":"html","autoInsertedEnd":true,"dsr":[0,53,7,0]}'><tbody><tr><td></td></tr><tr><!--c--></tr></tbody></table>
+!! end
+
+!! test
+T73074: More fostering fun
+!! wikitext
+<table><td></td>{{echo|<tr>}}<!--c-->[[Category:Two]]
+!! html/parsoid
+<link rel="mw:PageProp/Category" href="./Category:Two" data-parsoid='{"stx":"simple","a":{"href":"./Category:Two"},"sa":{"href":"Category:Two"},"fostered":true}'/><table data-parsoid='{"stx":"html","autoInsertedEnd":true}'><tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"stx":"html"}'></td></tr><tr about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;tr>"}},"i":0}},"&lt;!--c-->[[Category:Two]]"]}'><!--c--></tr></tbody></table>
+!! end
+
 !!test
 Support <object> element with .data attribute
 !!options
@@ -24588,7 +24664,7 @@ Don't block XML namespace declaration
 !! wikitext
 <span xmlns:dct="http://purl.org/dc/terms/" property="dct:title">MediaWiki</span>
 !! html/php
-<p><span>MediaWiki</span>
+<p><span xmlns:dct="http&#58;//purl.org/dc/terms/" property="dct:title">MediaWiki</span>
 </p>
 !! html/parsoid
 <p><span xmlns:dct="http://purl.org/dc/terms/" data-x-property="dct:title" data-parsoid='{"stx":"html"}'>MediaWiki</span></p>
@@ -25141,11 +25217,11 @@ data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},
 
 <!--Orig params with data-parsoid has heuristics for handling = chars-->
 <!--FIXME: But maybe the heuristic needs fixing to apply to new params as well-->
-<p data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]},{"k":"2","spc":["","","",""]}]]}' about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"f=oo"},"2":{"wt":"bar"}},"i":0}}]}'>foo</p>
+<p data-parsoid='{"pi":[[{"k":"1"},{"k":"2"}]]}' about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"f=oo"},"2":{"wt":"bar"}},"i":0}}]}'>foo</p>
 !! wikitext
-{{echo|1 = f=oo}}
+{{echo|1=f=oo}}
 
-{{echo|1 = f=oo|2 = bar}}
+{{echo|1=f=oo|2=bar}}
 
 <!--Orig params with data-parsoid has heuristics for handling = chars-->
 <!--FIXME: But maybe the heuristic needs fixing to apply to new params as well-->
@@ -25159,7 +25235,7 @@ parsoid=html2wt
 !! html/parsoid
 <p><a rel="mw:ExtLink" href="http://stuff?is=ok" about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"http://stuff?is=ok"}},"i":0}}]}'>http://stuff?is=ok</a></p>
 !! wikitext
-{{echo|1 = http://stuff?is=ok}}
+{{echo|1=http://stuff?is=ok}}
 !! end
 
 !! test
@@ -25857,7 +25933,7 @@ Use data-parsoid.firstWikitextNode to compute newline constraints for template c
 !! options
 parsoid=html2wt
 !! html/parsoid
-<span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a"}},"i":0}}]}'>a</span><table about="#mwt2" typeof="mw:Transclusion mw:ExpandedAttrs" data-parsoid='{"a":{"{{echo|c\n{{!}}d\n}}":null},"sa":{"{{echo|c\n{{!}}d\n}}":""},"firstWikitextNode":"table","pi":[[{"k":"1","spc":["","","",""]}]]}' data-mw='{"parts":["{|",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"c\n{{!}}d\n"}},"i":0}},"\n|}"]}'>
+<span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a"}},"i":0}}]}'>a</span><table about="#mwt2" typeof="mw:Transclusion mw:ExpandedAttrs" data-parsoid='{"a":{"{{echo|c\n{{!}}d\n}}":null},"sa":{"{{echo|c\n{{!}}d\n}}":""},"firstWikitextNode":"table","pi":[[{"k":"1"}]]}' data-mw='{"parts":["{|",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"c\n{{!}}d\n"}},"i":0}},"\n|}"]}'>
 <tbody><tr><td>d
 </td></tr>
 </tbody></table>
index 02c0123..b3cb89a 100644 (file)
  * @ingroup Testing
  */
 
-$otions = [ 'quick', 'color', 'quiet', 'help', 'show-output',
+define( 'MW_PARSER_TEST', true );
+
+$options = [ 'quick', 'color', 'quiet', 'help', 'show-output',
        'record', 'run-disabled', 'run-parsoid' ];
-$optionsWithArgs = [ 'regex', 'filter', 'seed', 'setversion' ];
+$optionsWithArgs = [ 'regex', 'filter', 'seed', 'setversion', 'file' ];
 
 require_once __DIR__ . '/../maintenance/commandLine.inc';
 require_once __DIR__ . '/TestsAutoLoader.php';
index 214bcc1..fd308b2 100644 (file)
@@ -6,7 +6,6 @@
 abstract class MediaWikiLangTestCase extends MediaWikiTestCase {
        protected function setUp() {
                global $wgLanguageCode, $wgContLang;
-               parent::setUp();
 
                if ( $wgLanguageCode != $wgContLang->getCode() ) {
                        throw new MWException( "Error in MediaWikiLangTestCase::setUp(): " .
@@ -14,18 +13,11 @@ abstract class MediaWikiLangTestCase extends MediaWikiTestCase {
                                "\$wgContLang->getCode() (" . $wgContLang->getCode() . ")" );
                }
 
-               // HACK: Call getLanguage() so the real $wgContLang is cached as the user language
-               // rather than our fake one. This is to avoid breaking other, unrelated tests.
-               RequestContext::getMain()->getLanguage();
-
-               $langCode = 'en'; # For mainpage to be 'Main Page'
-               $langObj = Language::factory( $langCode );
+               parent::setUp();
 
-               $this->setMwGlobals( [
-                       'wgLanguageCode' => $langCode,
-                       'wgLang' => $langObj,
-                       'wgContLang' => $langObj,
-               ] );
+               $this->setUserLang( 'en' );
+               // For mainpage to be 'Main Page'
+               $this->setContentLang( 'en' );
 
                MessageCache::singleton()->disable();
        }
index da9c03a..4d0e39c 100644 (file)
@@ -29,6 +29,8 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        public static $users;
 
        /**
+        * Primary database
+        *
         * @var DatabaseBase
         * @since 1.18
         */
@@ -102,7 +104,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                // Complain if self::setUp() was called, but not self::tearDown()
                // $this->called['setUp'] will be checked by self::testMediaWikiTestCaseParentSetupCalled()
                if ( isset( $this->called['setUp'] ) && !isset( $this->called['tearDown'] ) ) {
-                       throw new MWException( get_called_class() . "::tearDown() must call parent::tearDown()" );
+                       throw new MWException( static::class . "::tearDown() must call parent::tearDown()" );
                }
        }
 
@@ -132,14 +134,21 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                        $this->checkDbIsSupported();
 
                        if ( !self::$dbSetup ) {
-                               // switch to a temporary clone of the database
-                               self::setupTestDB( $this->db, $this->dbPrefix() );
+                               $this->setupAllTestDBs();
+                               $this->addCoreDBData();
 
                                if ( ( $this->db->getType() == 'oracle' || !self::$useTemporaryTables ) && self::$reuseDB ) {
-                                       $this->resetDB();
+                                       $this->resetDB( $this->db, $this->tablesUsed );
                                }
                        }
-                       $this->addCoreDBData();
+
+                       // TODO: the DB setup should be done in setUpBeforeClass(), so the test DB
+                       // is available in subclass's setUpBeforeClass() and setUp() methods.
+                       // This would also remove the need for the HACK that is oncePerClass().
+                       if ( $this->oncePerClass() ) {
+                               $this->addDBDataOnce();
+                       }
+
                        $this->addDBData();
                        $needsResetDB = true;
                }
@@ -147,10 +156,26 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                parent::run( $result );
 
                if ( $needsResetDB ) {
-                       $this->resetDB();
+                       $this->resetDB( $this->db, $this->tablesUsed );
                }
        }
 
+       /**
+        * @return bool
+        */
+       private function oncePerClass() {
+               // Remember current test class in the database connection,
+               // so we know when we need to run addData.
+
+               $class = static::class;
+
+               $first = !isset( $this->db->_hasDataForTestClass )
+                       || $this->db->_hasDataForTestClass !== $class;
+
+               $this->db->_hasDataForTestClass = $class;
+               return $first;
+       }
+
        /**
         * @since 1.21
         *
@@ -294,7 +319,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         */
        final public function testMediaWikiTestCaseParentSetupCalled() {
                $this->assertArrayHasKey( 'setUp', $this->called,
-                       get_called_class() . "::setUp() must call parent::setUp()"
+                       static::class . '::setUp() must call parent::setUp()'
                );
        }
 
@@ -415,6 +440,33 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                $this->setMwGlobals( $name, $merged );
        }
 
+       /**
+        * @since 1.27
+        * @param string|Language $lang
+        */
+       public function setUserLang( $lang ) {
+               RequestContext::getMain()->setLanguage( $lang );
+               $this->setMwGlobals( 'wgLang', RequestContext::getMain()->getLanguage() );
+       }
+
+       /**
+        * @since 1.27
+        * @param string|Language $lang
+        */
+       public function setContentLang( $lang ) {
+               if ( $lang instanceof Language ) {
+                       $langCode = $lang->getCode();
+                       $langObj = $lang;
+               } else {
+                       $langCode = $lang;
+                       $langObj = Language::factory( $langCode );
+               }
+               $this->setMwGlobals( [
+                       'wgLanguageCode' => $langCode,
+                       'wgContLang' => $langObj,
+               ] );
+       }
+
        /**
         * Sets the logger for a specified channel, for the duration of the test.
         * @since 1.27
@@ -513,10 +565,6 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                $user = User::newFromName( 'UTSysop' );
                $comment = __METHOD__ . ': Sample page for unit test.';
 
-               // Avoid memory leak...?
-               // LinkCache::singleton()->clear();
-               // Maybe.  But doing this absolutely breaks $title->isRedirect() when called during unit tests....
-
                $page = WikiPage::factory( $title );
                $page->doEditContent( ContentHandler::makeContent( $text, $title ), $comment, 0, false, $user );
 
@@ -527,8 +575,29 @@ 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
+        * Stub. If a test suite needs to add additional data to the database, it should
+        * implement this method and do so. This method is called once per test suite
+        * (i.e. once per class).
+        *
+        * Note data added by this method may be removed by resetDB() depending on
+        * the contents of $tablesUsed.
+        *
+        * To add additional data between test function runs, override prepareDB().
+        *
+        * @see addDBData()
+        * @see resetDB()
+        *
+        * @since 1.27
+        */
+       public function addDBDataOnce() {
+       }
+
+       /**
+        * Stub. Subclasses may override this to prepare the database.
+        * Called before every test run (test function or data set).
+        *
+        * @see addDBDataOnce()
+        * @see resetDB()
         *
         * @since 1.18
         */
@@ -618,6 +687,52 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                self::$dbSetup = false;
        }
 
+       /**
+        * Setups a database with the given prefix.
+        *
+        * If reuseDB is true and certain conditions apply, it will just change the prefix.
+        * Otherwise, it will clone the tables and change the prefix.
+        *
+        * Clones all tables in the given database (whatever database that connection has
+        * open), to versions with the test prefix.
+        *
+        * @param DatabaseBase $db Database to use
+        * @param string $prefix Prefix to use for test tables
+        * @return bool True if tables were cloned, false if only the prefix was changed
+        */
+       protected static function setupDatabaseWithTestPrefix( DatabaseBase $db, $prefix ) {
+               $tablesCloned = self::listTables( $db );
+               $dbClone = new CloneDatabase( $db, $tablesCloned, $prefix );
+               $dbClone->useTemporaryTables( self::$useTemporaryTables );
+
+               if ( ( $db->getType() == 'oracle' || !self::$useTemporaryTables ) && self::$reuseDB ) {
+                       CloneDatabase::changePrefix( $prefix );
+
+                       return false;
+               } else {
+                       $dbClone->cloneTableStructure();
+                       return true;
+               }
+       }
+
+       /**
+        * Set up all test DBs
+        */
+       public function setupAllTestDBs() {
+               global $wgDBprefix;
+
+               self::$oldTablePrefix = $wgDBprefix;
+
+               $testPrefix = $this->dbPrefix();
+
+               // switch to a temporary clone of the database
+               self::setupTestDB( $this->db, $testPrefix );
+
+               if ( self::isUsingExternalStoreDB() ) {
+                       self::setupExternalStoreTestDBs( $testPrefix );
+               }
+       }
+
        /**
         * Creates an empty skeleton of the wiki database by cloning its structure
         * to equivalent tables using the given $prefix. Then sets MediaWiki to
@@ -640,8 +755,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         * @throws MWException If the database table prefix is already $prefix
         */
        public static function setupTestDB( DatabaseBase $db, $prefix ) {
-               global $wgDBprefix;
-               if ( $wgDBprefix === $prefix ) {
+               if ( $db->tablePrefix() === $prefix ) {
                        throw new MWException(
                                'Cannot run unit tests, the database prefix is already "' . $prefix . '"' );
                }
@@ -650,49 +764,110 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                        return;
                }
 
-               $tablesCloned = self::listTables( $db );
-               $dbClone = new CloneDatabase( $db, $tablesCloned, $prefix );
-               $dbClone->useTemporaryTables( self::$useTemporaryTables );
-
                self::$dbSetup = true;
-               self::$oldTablePrefix = $wgDBprefix;
-
-               if ( ( $db->getType() == 'oracle' || !self::$useTemporaryTables ) && self::$reuseDB ) {
-                       CloneDatabase::changePrefix( $prefix );
 
+               if ( !self::setupDatabaseWithTestPrefix( $db, $prefix ) ) {
                        return;
-               } else {
-                       $dbClone->cloneTableStructure();
                }
 
+               // Assuming this isn't needed for External Store database, and not sure if the procedure
+               // would be available there.
                if ( $db->getType() == 'oracle' ) {
                        $db->query( 'BEGIN FILL_WIKI_INFO; END;' );
                }
        }
 
+       /**
+        * Clones the External Store database(s) for testing
+        *
+        * @param string $testPrefix Prefix for test tables
+        */
+       protected static function setupExternalStoreTestDBs( $testPrefix ) {
+               $connections = self::getExternalStoreDatabaseConnections();
+               foreach ( $connections as $dbw ) {
+                       // Hack: cloneTableStructure sets $wgDBprefix to the unit test
+                       // prefix,.  Even though listTables now uses tablePrefix, that
+                       // itself is populated from $wgDBprefix by default.
+
+                       // We have to set it back, or we won't find the original 'blobs'
+                       // table to copy.
+
+                       $dbw->tablePrefix( self::$oldTablePrefix );
+                       self::setupDatabaseWithTestPrefix( $dbw, $testPrefix );
+               }
+       }
+
+       /**
+        * Gets master database connections for all of the ExternalStoreDB
+        * stores configured in $wgDefaultExternalStore.
+        *
+        * @return array Array of DatabaseBase master connections
+        */
+
+       protected static function getExternalStoreDatabaseConnections() {
+               global $wgDefaultExternalStore;
+
+               $externalStoreDB = ExternalStore::getStoreObject( 'DB' );
+               $defaultArray = (array) $wgDefaultExternalStore;
+               $dbws = [];
+               foreach ( $defaultArray as $url ) {
+                       if ( strpos( $url, 'DB://' ) === 0 ) {
+                               list( $proto, $cluster ) = explode( '://', $url, 2 );
+                               $dbw = $externalStoreDB->getMaster( $cluster );
+                               $dbws[] = $dbw;
+                       }
+               }
+
+               return $dbws;
+       }
+
+       /**
+        * Check whether ExternalStoreDB is being used
+        *
+        * @return bool True if it's being used
+        */
+       protected static function isUsingExternalStoreDB() {
+               global $wgDefaultExternalStore;
+               if ( !$wgDefaultExternalStore ) {
+                       return false;
+               }
+
+               $defaultArray = (array) $wgDefaultExternalStore;
+               foreach ( $defaultArray as $url ) {
+                       if ( strpos( $url, 'DB://' ) === 0 ) {
+                               return true;
+                       }
+               }
+
+               return false;
+       }
+
        /**
         * Empty all tables so they can be repopulated for tests
+        *
+        * @param DatabaseBase $db|null Database to reset
+        * @param array $tablesUsed Tables to reset
         */
-       private function resetDB() {
-               if ( $this->db ) {
-                       if ( $this->db->getType() == 'oracle' ) {
-                               if ( self::$useTemporaryTables ) {
-                                       wfGetLB()->closeAll();
-                                       $this->db = wfGetDB( DB_MASTER );
+       private function resetDB( $db, $tablesUsed ) {
+               if ( $db ) {
+                       $truncate = in_array( $db->getType(), [ 'oracle', 'mysql' ] );
+                       foreach ( $tablesUsed as $tbl ) {
+                               // TODO: reset interwiki and user tables to their original content.
+                               if ( $tbl == 'interwiki' || $tbl == 'user' ) {
+                                       continue;
+                               }
+
+                               if ( $truncate ) {
+                                       $db->query( 'TRUNCATE TABLE ' . $db->tableName( $tbl ), __METHOD__ );
                                } else {
-                                       foreach ( $this->tablesUsed as $tbl ) {
-                                               if ( $tbl == 'interwiki' ) {
-                                                       continue;
-                                               }
-                                               $this->db->query( 'TRUNCATE TABLE ' . $this->db->tableName( $tbl ), __METHOD__ );
-                                       }
+
+                                       $db->delete( $tbl, '*', __METHOD__ );
                                }
-                       } else {
-                               foreach ( $this->tablesUsed as $tbl ) {
-                                       if ( $tbl == 'interwiki' || $tbl == 'user' ) {
-                                               continue;
-                                       }
-                                       $this->db->delete( $tbl, '*', __METHOD__ );
+
+                               if ( $tbl === 'page' ) {
+                                       // Forget about the pages since they don't
+                                       // exist in the DB.
+                                       LinkCache::singleton()->clear();
                                }
                        }
                }
@@ -729,10 +904,8 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                $this->assertTrue( $value == '', $msg );
        }
 
-       private static function unprefixTable( $tableName ) {
-               global $wgDBprefix;
-
-               return substr( $tableName, strlen( $wgDBprefix ) );
+       private static function unprefixTable( &$tableName, $ind, $prefix ) {
+               $tableName = substr( $tableName, strlen( $prefix ) );
        }
 
        private static function isNotUnittest( $table ) {
@@ -747,16 +920,15 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         * @return array
         */
        public static function listTables( $db ) {
-               global $wgDBprefix;
-
-               $tables = $db->listTables( $wgDBprefix, __METHOD__ );
+               $prefix = $db->tablePrefix();
+               $tables = $db->listTables( $prefix, __METHOD__ );
 
                if ( $db->getType() === 'mysql' ) {
                        # bug 43571: cannot clone VIEWs under MySQL
-                       $views = $db->listViews( $wgDBprefix, __METHOD__ );
+                       $views = $db->listViews( $prefix, __METHOD__ );
                        $tables = array_diff( $tables, $views );
                }
-               $tables = array_map( [ __CLASS__, 'unprefixTable' ], $tables );
+               array_walk( $tables, [ __CLASS__, 'unprefixTable' ], $prefix );
 
                // Don't duplicate test tables from the previous fataled run
                $tables = array_filter( $tables, [ __CLASS__, 'isNotUnittest' ] );
@@ -1149,33 +1321,6 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                return $loaded;
        }
 
-       /**
-        * Asserts that an exception of the specified type occurs when running
-        * the provided code.
-        *
-        * @since 1.21
-        * @deprecated since 1.22 Use setExpectedException
-        *
-        * @param callable $code
-        * @param string $expected
-        * @param string $message
-        */
-       protected function assertException( $code, $expected = 'Exception', $message = '' ) {
-               $pokemons = null;
-
-               try {
-                       call_user_func( $code );
-               } catch ( Exception $pokemons ) {
-                       // Gotta Catch 'Em All!
-               }
-
-               if ( $message === '' ) {
-                       $message = 'An exception of type "' . $expected . '" should have been thrown';
-               }
-
-               $this->assertInstanceOf( $expected, $pokemons, $message );
-       }
-
        /**
         * Asserts that the given string is a valid HTML snippet.
         * Wraps the given string in the required top level tags and
@@ -1283,4 +1428,5 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        public static function wfResetOutputBuffersBarrier( $buffer ) {
                return $buffer;
        }
+
 }
index 28192e9..9f38659 100644 (file)
@@ -13,18 +13,9 @@ class BlockTest extends MediaWikiLangTestCase {
        /* variable used to save up the blockID we insert in this test suite */
        private $blockId;
 
-       protected function setUp() {
-               parent::setUp();
-               $this->setMwGlobals( [
-                       'wgLanguageCode' => 'en',
-                       'wgContLang' => Language::factory( 'en' )
-               ] );
-       }
-
        function addDBData() {
-
                $user = User::newFromName( 'UTBlockee' );
-               if ( $user->getID() == 0 ) {
+               if ( $user->getId() == 0 ) {
                        $user->addToDatabase();
                        TestUser::setPasswordForUser( $user, 'UTBlockeePassword' );
 
@@ -40,7 +31,7 @@ class BlockTest extends MediaWikiLangTestCase {
 
                $blockOptions = [
                        'address' => 'UTBlockee',
-                       'user' => $user->getID(),
+                       'user' => $user->getId(),
                        'reason' => 'Parce que',
                        'expiry' => time() + 100500,
                ];
@@ -374,7 +365,7 @@ class BlockTest extends MediaWikiLangTestCase {
 
                # Set up the target
                $u = User::newFromName( $username );
-               if ( $u->getID() == 0 ) {
+               if ( $u->getId() == 0 ) {
                        $u->addToDatabase();
                        TestUser::setPasswordForUser( $u, 'TotallyObvious' );
                }
index d451e21..a2bb97a 100644 (file)
@@ -12,8 +12,6 @@ class ExportTest extends MediaWikiLangTestCase {
        protected function setUp() {
                parent::setUp();
                $this->setMwGlobals( [
-                       'wgContLang' => Language::factory( 'en' ),
-                       'wgLanguageCode' => 'en',
                        'wgCapitalLinks' => true,
                ] );
        }
index 78e71ea..5dd4f7a 100644 (file)
@@ -18,12 +18,12 @@ class ExtraParserTest extends MediaWikiTestCase {
                $contLang = Language::factory( 'en' );
                $this->setMwGlobals( [
                        'wgShowDBErrorBacktrace' => true,
-                       'wgLanguageCode' => 'en',
-                       'wgContLang' => $contLang,
-                       'wgLang' => Language::factory( 'en' ),
                        'wgCleanSignatures' => true,
                ] );
+               $this->setUserLang( 'en' );
+               $this->setContentLang( $contLang );
 
+               // FIXME: This test should pass without setting global content language
                $this->options = ParserOptions::newFromUserAndLang( new User, $contLang );
                $this->options->setTemplateCallback( [ __CLASS__, 'statelessFetchTemplate' ] );
                $this->parser = new Parser;
index 85ac4ce..eac56fb 100644 (file)
@@ -69,33 +69,33 @@ class FauxResponseTest extends MediaWikiTestCase {
         * @covers FauxResponse::header
         */
        public function testHeader() {
-               $this->assertEquals( null, $this->response->getheader( 'Location' ), 'Non-existing header' );
+               $this->assertEquals( null, $this->response->getHeader( 'Location' ), 'Non-existing header' );
 
                $this->response->header( 'Location: http://localhost/' );
                $this->assertEquals(
                        'http://localhost/',
-                       $this->response->getheader( 'Location' ),
+                       $this->response->getHeader( 'Location' ),
                        'Set header'
                );
 
                $this->response->header( 'Location: http://127.0.0.1/' );
                $this->assertEquals(
                        'http://127.0.0.1/',
-                       $this->response->getheader( 'Location' ),
+                       $this->response->getHeader( 'Location' ),
                        'Same header'
                );
 
                $this->response->header( 'Location: http://127.0.0.2/', false );
                $this->assertEquals(
                        'http://127.0.0.1/',
-                       $this->response->getheader( 'Location' ),
+                       $this->response->getHeader( 'Location' ),
                        'Same header with override disabled'
                );
 
                $this->response->header( 'Location: http://localhost/' );
                $this->assertEquals(
                        'http://localhost/',
-                       $this->response->getheader( 'LOCATION' ),
+                       $this->response->getHeader( 'LOCATION' ),
                        'Get header case insensitive'
                );
        }
index a18e3c8..98eb0c5 100644 (file)
@@ -6,8 +6,11 @@ class HtmlTest extends MediaWikiTestCase {
        protected function setUp() {
                parent::setUp();
 
-               $langCode = 'en';
-               $langObj = Language::factory( $langCode );
+               $this->setMwGlobals( [
+                       'wgWellFormedXml' => false,
+               ] );
+
+               $langObj = Language::factory( 'en' );
 
                // Hardcode namespaces during test runs,
                // so that html output based on existing namespaces
@@ -32,13 +35,8 @@ class HtmlTest extends MediaWikiTestCase {
                        100 => 'Custom',
                        101 => 'Custom_talk',
                ] );
-
-               $this->setMwGlobals( [
-                       'wgLanguageCode' => $langCode,
-                       'wgContLang' => $langObj,
-                       'wgLang' => $langObj,
-                       'wgWellFormedXml' => false,
-               ] );
+               $this->setUserLang( $langObj );
+               $this->setContentLang( $langObj );
        }
 
        /**
@@ -66,7 +64,7 @@ class HtmlTest extends MediaWikiTestCase {
                $this->setMwGlobals( 'wgWellFormedXml', true );
 
                $this->assertEquals(
-                       '<img />',
+                       '<img/>',
                        Html::element( 'img', null, '' ),
                        'Self-closing tag for short-tag elements (wgWellFormedXml = true)'
                );
index 908376b..bca3982 100644 (file)
@@ -10,8 +10,6 @@ class MWTimestampTest extends MediaWikiLangTestCase {
 
                // Avoid 'GetHumanTimestamp' hook and others
                $this->setMwGlobals( 'wgHooks', [] );
-
-               RequestContext::getMain()->setLanguage( Language::factory( 'en' ) );
        }
 
        /**
index 951cf8d..5ea0cdf 100644 (file)
@@ -8,7 +8,7 @@ class MergeHistoryTest extends MediaWikiTestCase {
        /**
         * Make some pages to work with
         */
-       public function addDBData() {
+       public function addDBDataOnce() {
                // Pages that won't actually be merged
                $this->insertPage( 'Test' );
                $this->insertPage( 'Test2' );
index bdd80e4..cf34b18 100644 (file)
@@ -6,9 +6,9 @@ class MessageTest extends MediaWikiLangTestCase {
                parent::setUp();
 
                $this->setMwGlobals( [
-                       'wgLang' => Language::factory( 'en' ),
                        'wgForceUIMsgAsContentMsg' => [],
                ] );
+               $this->setUserLang( 'en' );
        }
 
        /**
@@ -517,7 +517,7 @@ class MessageTest extends MediaWikiLangTestCase {
         * @covers Message::inContentLanguage
         */
        public function testInContentLanguage() {
-               $this->setMwGlobals( 'wgLang', Language::factory( 'fr' ) );
+               $this->setUserLang( 'fr' );
 
                // NOTE: make sure internal caching of the message text is reset appropriately
                $msg = wfMessage( 'mainpage' );
@@ -531,9 +531,9 @@ class MessageTest extends MediaWikiLangTestCase {
         */
        public function testInContentLanguageOverride() {
                $this->setMwGlobals( [
-                       'wgLang' => Language::factory( 'fr' ),
                        'wgForceUIMsgAsContentMsg' => [ 'mainpage' ],
                ] );
+               $this->setUserLang( 'fr' );
 
                // NOTE: make sure internal caching of the message text is reset appropriately.
                // NOTE: wgForceUIMsgAsContentMsg forces the messages *current* language to be used.
index d404ab8..9bef038 100644 (file)
@@ -142,9 +142,9 @@ class OutputPageTest extends MediaWikiTestCase {
                        // Load module script only
                        array(
                                array( 'test.foo', ResourceLoaderModule::TYPE_SCRIPTS ),
-                               "<script>(window.RLQ = window.RLQ || []).push(function () {\n"
+                               "<script>(window.RLQ=window.RLQ||[]).push(function(){"
                                        . 'mw.loader.load("http://127.0.0.1:8080/w/load.php?debug=false\u0026lang=en\u0026modules=test.foo\u0026only=scripts\u0026skin=fallback");'
-                                       . "\n} );</script>"
+                                       . "});</script>"
                        ),
                        array(
                                // Don't condition wrap raw modules (like the startup module)
@@ -161,17 +161,17 @@ class OutputPageTest extends MediaWikiTestCase {
                        // Load private module (only=scripts)
                        array(
                                array( 'test.quux', ResourceLoaderModule::TYPE_SCRIPTS ),
-                               "<script>(window.RLQ = window.RLQ || []).push(function () {\n"
-                                       . "mw.test.baz({token:123});mw.loader.state({\"test.quux\":\"ready\"});\n"
-                                       . "} );</script>"
+                               "<script>(window.RLQ=window.RLQ||[]).push(function(){"
+                                       . "mw.test.baz({token:123});mw.loader.state({\"test.quux\":\"ready\"});"
+                                       . "});</script>"
                        ),
                        // Load private module (combined)
                        array(
                                array( 'test.quux', ResourceLoaderModule::TYPE_COMBINED ),
-                               "<script>(window.RLQ = window.RLQ || []).push(function () {\n"
+                               "<script>(window.RLQ=window.RLQ||[]).push(function(){"
                                        . "mw.loader.implement(\"test.quux\",function($,jQuery){"
                                        . "mw.test.baz({token:123});},{\"css\":[\".mw-icon{transition:none}"
-                                       . "\"]});\n} );</script>"
+                                       . "\"]});});</script>"
                        ),
                        // Load no modules
                        array(
@@ -186,12 +186,12 @@ class OutputPageTest extends MediaWikiTestCase {
                        // Load two modules in separate groups
                        array(
                                array( array( 'test.group.foo', 'test.group.bar' ), ResourceLoaderModule::TYPE_COMBINED ),
-                               "<script>(window.RLQ = window.RLQ || []).push(function () {\n"
+                               "<script>(window.RLQ=window.RLQ||[]).push(function(){"
                                        . 'mw.loader.load("http://127.0.0.1:8080/w/load.php?debug=false\u0026lang=en\u0026modules=test.group.bar\u0026skin=fallback");'
-                                       . "\n} );</script>\n"
-                                       . "<script>(window.RLQ = window.RLQ || []).push(function () {\n"
+                                       . "});</script>\n"
+                                       . "<script>(window.RLQ=window.RLQ||[]).push(function(){"
                                        . 'mw.loader.load("http://127.0.0.1:8080/w/load.php?debug=false\u0026lang=en\u0026modules=test.group.foo\u0026skin=fallback");'
-                                       . "\n} );</script>"
+                                       . "});</script>"
                        ),
                );
                // @codingStandardsIgnoreEnd
index 6f4c300..6d5154f 100644 (file)
@@ -5,7 +5,7 @@
  */
 class PrefixSearchTest extends MediaWikiLangTestCase {
 
-       public function addDBData() {
+       public function addDBDataOnce() {
                if ( !$this->isWikitextNS( NS_MAIN ) ) {
                        // tests are skipped if NS_MAIN is not wikitext
                        return;
index 16d8c97..0ac9c3c 100644 (file)
@@ -57,6 +57,8 @@ class RevisionStorageTest extends MediaWikiTestCase {
                                CONTENT_MODEL_WIKITEXT
                        );
                }
+
+               $this->tablesUsed[] = 'archive';
        }
 
        protected function tearDown() {
@@ -93,7 +95,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
 
                $rev = new Revision( $props );
 
-               $dbw = wfgetDB( DB_MASTER );
+               $dbw = wfGetDB( DB_MASTER );
                $rev->insertOn( $dbw );
 
                return $rev;
@@ -143,7 +145,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
        public function testConstructFromRow() {
                $orig = $this->makeRevision();
 
-               $dbr = wfgetDB( DB_SLAVE );
+               $dbr = wfGetDB( DB_SLAVE );
                $res = $dbr->select( 'revision', '*', [ 'rev_id' => $orig->getId() ] );
                $this->assertTrue( is_object( $res ), 'query failed' );
 
@@ -161,7 +163,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
        public function testNewFromRow() {
                $orig = $this->makeRevision();
 
-               $dbr = wfgetDB( DB_SLAVE );
+               $dbr = wfGetDB( DB_SLAVE );
                $res = $dbr->select( 'revision', '*', [ 'rev_id' => $orig->getId() ] );
                $this->assertTrue( is_object( $res ), 'query failed' );
 
@@ -185,7 +187,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
                $orig = $page->getRevision();
                $page->doDeleteArticle( 'test Revision::newFromArchiveRow' );
 
-               $dbr = wfgetDB( DB_SLAVE );
+               $dbr = wfGetDB( DB_SLAVE );
                $res = $dbr->select( 'archive', '*', [ 'ar_rev_id' => $orig->getId() ] );
                $this->assertTrue( is_object( $res ), 'query failed' );
 
index fffc4f5..782fab0 100644 (file)
@@ -321,24 +321,25 @@ class StatusTest extends MediaWikiLangTestCase {
        /**
         * @dataProvider provideGetWikiTextAndHtml
         * @covers Status::getWikiText
-        * @todo test long and short context messages generated through this method
-        *       this can not really be done now due to use of wfMessage()->plain()
-        *       It is possible to mock such methods but only if namespaces are used
         */
-       public function testGetWikiText( Status $status, $wikitext, $html ) {
+       public function testGetWikiText(
+               Status $status, $wikitext, $wrappedWikitext, $html, $wrappedHtml
+       ) {
                $this->assertEquals( $wikitext, $status->getWikiText() );
+
+               $this->assertEquals( $wrappedWikitext, $status->getWikiText( 'wrap-short', 'wrap-long', 'qqx' ) );
        }
 
        /**
         * @dataProvider provideGetWikiTextAndHtml
         * @covers Status::getHtml
-        * @todo test long and short context messages generated through this method
-        *   this can not really be done now due to use of $this->getWikiText using
-        *   wfMessage()->plain(). It is possible to mock such methods but only if
-        *   namespaces are used.
         */
-       public function testGetHtml( Status $status, $wikitext, $html ) {
+       public function testGetHtml(
+               Status $status, $wikitext, $wrappedWikitext, $html, $wrappedHtml
+       ) {
                $this->assertEquals( $html, $status->getHTML() );
+
+               $this->assertEquals( $wrappedHtml, $status->getHTML( 'wrap-short', 'wrap-long', 'qqx' ) );
        }
 
        /**
@@ -352,7 +353,11 @@ class StatusTest extends MediaWikiLangTestCase {
                $testCases['GoodStatus'] = [
                        new Status(),
                        "Internal error: Status::getWikiText called for a good result, this is incorrect\n",
+                       "(wrap-short: (internalerror_info: Status::getWikiText called for a good result, " .
+                               "this is incorrect\n))",
                        "<p>Internal error: Status::getWikiText called for a good result, this is incorrect\n</p>",
+                       "<p>(wrap-short: (internalerror_info: Status::getWikiText called for a good result, " .
+                               "this is incorrect\n))\n</p>",
                ];
 
                $status = new Status();
@@ -360,7 +365,11 @@ class StatusTest extends MediaWikiLangTestCase {
                $testCases['GoodButNoError'] = [
                        $status,
                        "Internal error: Status::getWikiText: Invalid result object: no error text but not OK\n",
+                       "(wrap-short: (internalerror_info: Status::getWikiText: Invalid result object: " .
+                               "no error text but not OK\n))",
                        "<p>Internal error: Status::getWikiText: Invalid result object: no error text but not OK\n</p>",
+                       "<p>(wrap-short: (internalerror_info: Status::getWikiText: Invalid result object: " .
+                               "no error text but not OK\n))\n</p>",
                ];
 
                $status = new Status();
@@ -368,7 +377,9 @@ class StatusTest extends MediaWikiLangTestCase {
                $testCases['1StringWarning'] = [
                        $status,
                        "<fooBar!>",
+                       "(wrap-short: (fooBar!))",
                        "<p>&lt;fooBar!&gt;\n</p>",
+                       "<p>(wrap-short: (fooBar!))\n</p>",
                ];
 
                $status = new Status();
@@ -377,7 +388,9 @@ class StatusTest extends MediaWikiLangTestCase {
                $testCases['2StringWarnings'] = [
                        $status,
                        "* <fooBar!>\n* <fooBar2!>\n",
+                       "(wrap-long: * (fooBar!)\n* (fooBar2!)\n)",
                        "<ul><li> &lt;fooBar!&gt;</li>\n<li> &lt;fooBar2!&gt;</li></ul>\n",
+                       "<p>(wrap-long: * (fooBar!)\n</p>\n<ul><li> (fooBar2!)</li></ul>\n<p>)\n</p>",
                ];
 
                $status = new Status();
@@ -385,7 +398,9 @@ class StatusTest extends MediaWikiLangTestCase {
                $testCases['1MessageWarning'] = [
                        $status,
                        "<fooBar!>",
+                       "(wrap-short: (fooBar!: foo, bar))",
                        "<p>&lt;fooBar!&gt;\n</p>",
+                       "<p>(wrap-short: (fooBar!: foo, bar))\n</p>",
                ];
 
                $status = new Status();
@@ -394,22 +409,53 @@ class StatusTest extends MediaWikiLangTestCase {
                $testCases['2MessageWarnings'] = [
                        $status,
                        "* <fooBar!>\n* <fooBar2!>\n",
+                       "(wrap-long: * (fooBar!: foo, bar)\n* (fooBar2!)\n)",
                        "<ul><li> &lt;fooBar!&gt;</li>\n<li> &lt;fooBar2!&gt;</li></ul>\n",
+                       "<p>(wrap-long: * (fooBar!: foo, bar)\n</p>\n<ul><li> (fooBar2!)</li></ul>\n<p>)\n</p>",
                ];
 
                return $testCases;
        }
 
+       private static function sanitizedMessageParams( Message $message ) {
+               return array_map( function ( $p ) {
+                       return $p instanceof Message
+                               ? [
+                                       'key' => $p->getKey(),
+                                       'params' => self::sanitizedMessageParams( $p ),
+                                       'lang' => $p->getLanguage()->getCode(),
+                               ]
+                               : $p;
+               }, $message->getParams() );
+       }
+
        /**
         * @dataProvider provideGetMessage
         * @covers Status::getMessage
-        * @todo test long and short context messages generated through this method
         */
-       public function testGetMessage( Status $status, $expectedParams = [], $expectedKey ) {
-               $message = $status->getMessage();
+       public function testGetMessage(
+               Status $status, $expectedParams = [], $expectedKey, $expectedWrapper
+       ) {
+               $message = $status->getMessage( null, null, 'qqx' );
                $this->assertInstanceOf( 'Message', $message );
-               $this->assertEquals( $expectedParams, $message->getParams(), 'Message::getParams' );
+               $this->assertEquals( $expectedParams, self::sanitizedMessageParams( $message ),
+                       'Message::getParams' );
                $this->assertEquals( $expectedKey, $message->getKey(), 'Message::getKey' );
+
+               $message = $status->getMessage( 'wrapper-short', 'wrapper-long' );
+               $this->assertInstanceOf( 'Message', $message );
+               $this->assertEquals( $expectedWrapper, $message->getKey(), 'Message::getKey with wrappers' );
+               $this->assertCount( 1, $message->getParams(), 'Message::getParams with wrappers' );
+
+               $message = $status->getMessage( 'wrapper' );
+               $this->assertInstanceOf( 'Message', $message );
+               $this->assertEquals( 'wrapper', $message->getKey(), 'Message::getKey with wrappers' );
+               $this->assertCount( 1, $message->getParams(), 'Message::getParams with wrappers' );
+
+               $message = $status->getMessage( false, 'wrapper' );
+               $this->assertInstanceOf( 'Message', $message );
+               $this->assertEquals( 'wrapper', $message->getKey(), 'Message::getKey with wrappers' );
+               $this->assertCount( 1, $message->getParams(), 'Message::getParams with wrappers' );
        }
 
        /**
@@ -424,7 +470,8 @@ class StatusTest extends MediaWikiLangTestCase {
                $testCases['GoodStatus'] = [
                        new Status(),
                        [ "Status::getMessage called for a good result, this is incorrect\n" ],
-                       'internalerror_info'
+                       'internalerror_info',
+                       'wrapper-short'
                ];
 
                $status = new Status();
@@ -432,7 +479,8 @@ class StatusTest extends MediaWikiLangTestCase {
                $testCases['GoodButNoError'] = [
                        $status,
                        [ "Status::getMessage: Invalid result object: no error text but not OK\n" ],
-                       'internalerror_info'
+                       'internalerror_info',
+                       'wrapper-short'
                ];
 
                $status = new Status();
@@ -440,29 +488,30 @@ class StatusTest extends MediaWikiLangTestCase {
                $testCases['1StringWarning'] = [
                        $status,
                        [],
-                       'fooBar!'
+                       'fooBar!',
+                       'wrapper-short'
                ];
 
-               // 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( new Message( 'fooBar!' ), new Message( 'fooBar2!' ) ),
-//                     "* \$1\n* \$2"
-//             );
+               $status = new Status();
+               $status->warning( 'fooBar!' );
+               $status->warning( 'fooBar2!' );
+               $testCases[ '2StringWarnings' ] = [
+                       $status,
+                       [
+                               [ 'key' => 'fooBar!', 'params' => [], 'lang' => 'qqx' ],
+                               [ 'key' => 'fooBar2!', 'params' => [], 'lang' => 'qqx' ]
+                       ],
+                       "* \$1\n* \$2",
+                       'wrapper-long'
+               ];
 
                $status = new Status();
                $status->warning( new Message( 'fooBar!', [ 'foo', 'bar' ] ) );
                $testCases['1MessageWarning'] = [
                        $status,
                        [ 'foo', 'bar' ],
-                       'fooBar!'
+                       'fooBar!',
+                       'wrapper-short'
                ];
 
                $status = new Status();
@@ -470,8 +519,12 @@ class StatusTest extends MediaWikiLangTestCase {
                $status->warning( new Message( 'fooBar2!' ) );
                $testCases['2MessageWarnings'] = [
                        $status,
-                       [ new Message( 'fooBar!', [ 'foo', 'bar' ] ), new Message( 'fooBar2!' ) ],
-                       "* \$1\n* \$2"
+                       [
+                               [ 'key' => 'fooBar!', 'params' => [ 'foo', 'bar' ], 'lang' => 'qqx' ],
+                               [ 'key' => 'fooBar2!', 'params' => [], 'lang' => 'qqx' ]
+                       ],
+                       "* \$1\n* \$2",
+                       'wrapper-long'
                ];
 
                return $testCases;
index a4d0059..5ecdf56 100644 (file)
@@ -26,14 +26,10 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
        protected function setUp() {
                parent::setUp();
 
-               $langObj = Language::factory( 'en' );
                $localZone = 'UTC';
                $localOffset = date( 'Z' ) / 60;
 
                $this->setMwGlobals( [
-                       'wgContLang' => $langObj,
-                       'wgLanguageCode' => 'en',
-                       'wgLang' => $langObj,
                        'wgLocaltimezone' => $localZone,
                        'wgLocalTZoffset' => $localOffset,
                        'wgNamespaceProtection' => [
@@ -52,7 +48,7 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                if ( !isset( $this->userUser ) || !( $this->userUser instanceof User ) ) {
                        $this->userUser = User::newFromName( $this->userName );
 
-                       if ( !$this->userUser->getID() ) {
+                       if ( !$this->userUser->getId() ) {
                                $this->userUser = User::createNew( $this->userName, [
                                        "email" => "test@example.com",
                                        "real_name" => "Test User" ] );
@@ -60,7 +56,7 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                        }
 
                        $this->altUser = User::newFromName( $this->altUserName );
-                       if ( !$this->altUser->getID() ) {
+                       if ( !$this->altUser->getId() ) {
                                $this->altUser = User::createNew( $this->altUserName, [
                                        "email" => "alttest@example.com",
                                        "real_name" => "Test User Alt" ] );
@@ -662,7 +658,7 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                $this->setUserPerm( [ "createpage" ] );
                $this->setTitle( NS_MAIN, "test page" );
                $this->title->mTitleProtection['permission'] = '';
-               $this->title->mTitleProtection['user'] = $this->user->getID();
+               $this->title->mTitleProtection['user'] = $this->user->getId();
                $this->title->mTitleProtection['expiry'] = 'infinity';
                $this->title->mTitleProtection['reason'] = 'test';
                $this->title->mCascadeRestriction = false;
index f2ad1c6..b3465e1 100644 (file)
@@ -9,14 +9,12 @@ class TitleTest extends MediaWikiTestCase {
                parent::setUp();
 
                $this->setMwGlobals( [
-                       'wgLanguageCode' => 'en',
-                       'wgContLang' => Language::factory( 'en' ),
-                       // User language
-                       'wgLang' => Language::factory( 'en' ),
                        'wgAllowUserJs' => false,
                        'wgDefaultLanguageVariant' => false,
                        'wgMetaNamespace' => 'Project',
                ] );
+               $this->setUserLang( 'en' );
+               $this->setContentLang( 'en' );
        }
 
        /**
@@ -421,12 +419,11 @@ class TitleTest extends MediaWikiTestCase {
        ) {
                // Setup environnement for this test
                $this->setMwGlobals( [
-                       'wgLanguageCode' => $contLang,
-                       'wgContLang' => Language::factory( $contLang ),
-                       'wgLang' => Language::factory( $lang ),
                        'wgDefaultLanguageVariant' => $variant,
                        'wgAllowUserJs' => true,
                ] );
+               $this->setUserLang( $lang );
+               $this->setContentLang( $contLang );
 
                $title = Title::newFromText( $titleText );
                $this->assertInstanceOf( 'Title', $title,
diff --git a/tests/phpunit/includes/WatchedItemIntegrationTest.php b/tests/phpunit/includes/WatchedItemIntegrationTest.php
new file mode 100644 (file)
index 0000000..20fcedb
--- /dev/null
@@ -0,0 +1,123 @@
+<?php
+
+/**
+ * @author Addshore
+ *
+ * @group Database
+ *
+ * @covers WatchedItem
+ */
+class WatchedItemIntegrationTest extends MediaWikiTestCase {
+
+       public function setUp() {
+               parent::setUp();
+               self::$users['WatchedItemIntegrationTestUser']
+                       = new TestUser( 'WatchedItemIntegrationTestUser' );
+       }
+
+       private function getUser() {
+               return self::$users['WatchedItemIntegrationTestUser']->getUser();
+       }
+
+       public function testWatchAndUnWatchItem() {
+               $user = $this->getUser();
+               $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
+               // Cleanup after previous tests
+               WatchedItem::fromUserTitle( $user, $title )->removeWatch();
+
+               $this->assertFalse(
+                       WatchedItem::fromUserTitle( $user, $title )->isWatched(),
+                       'Page should not initially be watched'
+               );
+               WatchedItem::fromUserTitle( $user, $title )->addWatch();
+               $this->assertTrue(
+                       WatchedItem::fromUserTitle( $user, $title )->isWatched(),
+                       'Page should be watched'
+               );
+               WatchedItem::fromUserTitle( $user, $title )->removeWatch();
+               $this->assertFalse(
+                       WatchedItem::fromUserTitle( $user, $title )->isWatched(),
+                       'Page should be unwatched'
+               );
+       }
+
+       public function testUpdateAndResetNotificationTimestamp() {
+               $user = $this->getUser();
+               $otherUser = ( new TestUser( 'WatchedItemIntegrationTestUser_otherUser' ) )->getUser();
+               $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
+               WatchedItem::fromUserTitle( $user, $title )->addWatch();
+               $this->assertNull( WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp() );
+
+               EmailNotification::updateWatchlistTimestamp( $otherUser, $title, '20150202010101' );
+               $this->assertEquals(
+                       '20150202010101',
+                       WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp()
+               );
+
+               WatchedItem::fromUserTitle( $user, $title )->resetNotificationTimestamp();
+               $this->assertNull( WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp() );
+       }
+
+       public function testDuplicateAllAssociatedEntries() {
+               $user = $this->getUser();
+               $titleOld = Title::newFromText( 'WatchedItemIntegrationTestPageOld' );
+               $titleNew = Title::newFromText( 'WatchedItemIntegrationTestPageNew' );
+               WatchedItem::fromUserTitle( $user, $titleOld->getSubjectPage() )->addWatch();
+               WatchedItem::fromUserTitle( $user, $titleOld->getTalkPage() )->addWatch();
+               // Cleanup after previous tests
+               WatchedItem::fromUserTitle( $user, $titleNew->getSubjectPage() )->removeWatch();
+               WatchedItem::fromUserTitle( $user, $titleNew->getTalkPage() )->removeWatch();
+
+               WatchedItem::duplicateEntries( $titleOld, $titleNew );
+
+               $this->assertTrue(
+                       WatchedItem::fromUserTitle( $user, $titleOld->getSubjectPage() )->isWatched()
+               );
+               $this->assertTrue(
+                       WatchedItem::fromUserTitle( $user, $titleOld->getTalkPage() )->isWatched()
+               );
+               $this->assertTrue(
+                       WatchedItem::fromUserTitle( $user, $titleNew->getSubjectPage() )->isWatched()
+               );
+               $this->assertTrue(
+                       WatchedItem::fromUserTitle( $user, $titleNew->getTalkPage() )->isWatched()
+               );
+       }
+
+       public function testIsWatched_falseOnNotAllowed() {
+               $user = $this->getUser();
+               $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
+               WatchedItem::fromUserTitle( $user, $title )->addWatch();
+
+               $this->assertTrue( WatchedItem::fromUserTitle( $user, $title )->isWatched() );
+               $user->mRights = [];
+               $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->isWatched() );
+       }
+
+       public function testGetNotificationTimestamp_falseOnNotAllowed() {
+               $user = $this->getUser();
+               $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
+               WatchedItem::fromUserTitle( $user, $title )->addWatch();
+               WatchedItem::fromUserTitle( $user, $title )->resetNotificationTimestamp();
+
+               $this->assertEquals(
+                       null,
+                       WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp()
+               );
+               $user->mRights = [];
+               $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->isWatched() );
+       }
+
+       public function testRemoveWatch_falseOnNotAllowed() {
+               $user = $this->getUser();
+               $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
+               WatchedItem::fromUserTitle( $user, $title )->addWatch();
+
+               $previousRights = $user->mRights;
+               $user->mRights = [];
+               $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->removeWatch() );
+               $user->mRights = $previousRights;
+               $this->assertTrue( WatchedItem::fromUserTitle( $user, $title )->removeWatch() );
+       }
+
+}
diff --git a/tests/phpunit/includes/WatchedItemStoreIntegrationTest.php b/tests/phpunit/includes/WatchedItemStoreIntegrationTest.php
new file mode 100644 (file)
index 0000000..5b2873a
--- /dev/null
@@ -0,0 +1,194 @@
+<?php
+
+/**
+ * @author Addshore
+ *
+ * @group Database
+ *
+ * @covers WatchedItemStore
+ */
+class WatchedItemStoreIntegrationTest extends MediaWikiTestCase {
+
+       public function setUp() {
+               parent::setUp();
+               self::$users['WatchedItemStoreIntegrationTestUser']
+                       = new TestUser( 'WatchedItemStoreIntegrationTestUser' );
+       }
+
+       private function getUser() {
+               return self::$users['WatchedItemStoreIntegrationTestUser']->getUser();
+       }
+
+       public function testWatchAndUnWatchItem() {
+               $user = $this->getUser();
+               $title = Title::newFromText( 'WatchedItemStoreIntegrationTestPage' );
+               $store = WatchedItemStore::getDefaultInstance();
+               // Cleanup after previous tests
+               $store->removeWatch( $user, $title );
+               $initialWatchers = $store->countWatchers( $title );
+               $initialUserWatchedItems = $store->countWatchedItems( $user );
+
+               $this->assertFalse(
+                       $store->isWatched( $user, $title ),
+                       'Page should not initially be watched'
+               );
+
+               $store->addWatch( $user, $title );
+               $this->assertTrue(
+                       $store->isWatched( $user, $title ),
+                       'Page should be watched'
+               );
+               $this->assertEquals( $initialUserWatchedItems + 1, $store->countWatchedItems( $user ) );
+               $watchedItemsForUser = $store->getWatchedItemsForUser( $user );
+               $this->assertCount( $initialUserWatchedItems + 1, $watchedItemsForUser );
+               $watchedItemsForUserHasExpectedItem = false;
+               foreach ( $watchedItemsForUser as $watchedItem ) {
+                       if (
+                               $watchedItem->getUser()->equals( $user ) &&
+                               $watchedItem->getLinkTarget() == $title->getTitleValue()
+                       ) {
+                               $watchedItemsForUserHasExpectedItem = true;
+                       }
+               }
+               $this->assertTrue(
+                       $watchedItemsForUserHasExpectedItem,
+                       'getWatchedItemsForUser should contain the page'
+               );
+               $this->assertEquals( $initialWatchers + 1, $store->countWatchers( $title ) );
+               $this->assertEquals(
+                       $initialWatchers + 1,
+                       $store->countWatchersMultiple( [ $title ] )[$title->getNamespace()][$title->getDBkey()]
+               );
+               $this->assertEquals(
+                       [ 0 => [ 'WatchedItemStoreIntegrationTestPage' => $initialWatchers + 1 ] ],
+                       $store->countWatchersMultiple( [ $title ], [ 'minimumWatchers' => $initialWatchers + 1 ] )
+               );
+               $this->assertEquals(
+                       [ 0 => [ 'WatchedItemStoreIntegrationTestPage' => 0 ] ],
+                       $store->countWatchersMultiple( [ $title ], [ 'minimumWatchers' => $initialWatchers + 2 ] )
+               );
+               $this->assertEquals(
+                       [ $title->getNamespace() => [ $title->getDBkey() => null ] ],
+                       $store->getNotificationTimestampsBatch( $user, [ $title ] )
+               );
+
+               $store->removeWatch( $user, $title );
+               $this->assertFalse(
+                       $store->isWatched( $user, $title ),
+                       'Page should be unwatched'
+               );
+               $this->assertEquals( $initialUserWatchedItems, $store->countWatchedItems( $user ) );
+               $watchedItemsForUser = $store->getWatchedItemsForUser( $user );
+               $this->assertCount( $initialUserWatchedItems, $watchedItemsForUser );
+               $watchedItemsForUserHasExpectedItem = false;
+               foreach ( $watchedItemsForUser as $watchedItem ) {
+                       if (
+                               $watchedItem->getUser()->equals( $user ) &&
+                               $watchedItem->getLinkTarget() == $title->getTitleValue()
+                       ) {
+                               $watchedItemsForUserHasExpectedItem = true;
+                       }
+               }
+               $this->assertFalse(
+                       $watchedItemsForUserHasExpectedItem,
+                       'getWatchedItemsForUser should not contain the page'
+               );
+               $this->assertEquals( $initialWatchers, $store->countWatchers( $title ) );
+               $this->assertEquals(
+                       $initialWatchers,
+                       $store->countWatchersMultiple( [ $title ] )[$title->getNamespace()][$title->getDBkey()]
+               );
+               $this->assertEquals(
+                       [ $title->getNamespace() => [ $title->getDBkey() => false ] ],
+                       $store->getNotificationTimestampsBatch( $user, [ $title ] )
+               );
+       }
+
+       public function testUpdateAndResetNotificationTimestamp() {
+               $user = $this->getUser();
+               $otherUser = ( new TestUser( 'WatchedItemStoreIntegrationTestUser_otherUser' ) )->getUser();
+               $title = Title::newFromText( 'WatchedItemStoreIntegrationTestPage' );
+               $store = WatchedItemStore::getDefaultInstance();
+               $store->addWatch( $user, $title );
+               $this->assertNull( $store->loadWatchedItem( $user, $title )->getNotificationTimestamp() );
+               $initialVisitingWatchers = $store->countVisitingWatchers( $title, '20150202020202' );
+               $initialUnreadNotifications = $store->countUnreadNotifications( $user );
+
+               $store->updateNotificationTimestamp( $otherUser, $title, '20150202010101' );
+               $this->assertEquals(
+                       '20150202010101',
+                       $store->loadWatchedItem( $user, $title )->getNotificationTimestamp()
+               );
+               $this->assertEquals(
+                       [ $title->getNamespace() => [ $title->getDBkey() => '20150202010101' ] ],
+                       $store->getNotificationTimestampsBatch( $user, [ $title ] )
+               );
+               $this->assertEquals(
+                       $initialVisitingWatchers - 1,
+                       $store->countVisitingWatchers( $title, '20150202020202' )
+               );
+               $this->assertEquals(
+                       $initialVisitingWatchers - 1,
+                       $store->countVisitingWatchersMultiple(
+                               [ [ $title, '20150202020202' ] ]
+                       )[$title->getNamespace()][$title->getDBkey()]
+               );
+               $this->assertEquals(
+                       $initialUnreadNotifications + 1,
+                       $store->countUnreadNotifications( $user )
+               );
+               $this->assertSame(
+                       true,
+                       $store->countUnreadNotifications( $user, $initialUnreadNotifications + 1 )
+               );
+
+               $this->assertTrue( $store->resetNotificationTimestamp( $user, $title ) );
+               $this->assertNull( $store->getWatchedItem( $user, $title )->getNotificationTimestamp() );
+               $this->assertEquals(
+                       [ $title->getNamespace() => [ $title->getDBkey() => null ] ],
+                       $store->getNotificationTimestampsBatch( $user, [ $title ] )
+               );
+               $this->assertEquals(
+                       $initialVisitingWatchers,
+                       $store->countVisitingWatchers( $title, '20150202020202' )
+               );
+               $this->assertEquals(
+                       $initialVisitingWatchers,
+                       $store->countVisitingWatchersMultiple(
+                               [ [ $title, '20150202020202' ] ]
+                       )[$title->getNamespace()][$title->getDBkey()]
+               );
+               $this->assertEquals(
+                       [ 0 => [ 'WatchedItemStoreIntegrationTestPage' => $initialVisitingWatchers ] ],
+                       $store->countVisitingWatchersMultiple(
+                               [ [ $title, '20150202020202' ] ], $initialVisitingWatchers
+                       )
+               );
+               $this->assertEquals(
+                       [ 0 => [ 'WatchedItemStoreIntegrationTestPage' => 0 ] ],
+                       $store->countVisitingWatchersMultiple(
+                               [ [ $title, '20150202020202' ] ], $initialVisitingWatchers + 1
+                       )
+               );
+       }
+
+       public function testDuplicateAllAssociatedEntries() {
+               $user = $this->getUser();
+               $titleOld = Title::newFromText( 'WatchedItemStoreIntegrationTestPageOld' );
+               $titleNew = Title::newFromText( 'WatchedItemStoreIntegrationTestPageNew' );
+               $store = WatchedItemStore::getDefaultInstance();
+               $store->addWatch( $user, $titleOld->getSubjectPage() );
+               $store->addWatch( $user, $titleOld->getTalkPage() );
+               // Cleanup after previous tests
+               $store->removeWatch( $user, $titleNew->getSubjectPage() );
+               $store->removeWatch( $user, $titleNew->getTalkPage() );
+
+               $store->duplicateAllAssociatedEntries( $titleOld, $titleNew );
+
+               $this->assertTrue( $store->isWatched( $user, $titleOld->getSubjectPage() ) );
+               $this->assertTrue( $store->isWatched( $user, $titleOld->getTalkPage() ) );
+               $this->assertTrue( $store->isWatched( $user, $titleNew->getSubjectPage() ) );
+               $this->assertTrue( $store->isWatched( $user, $titleNew->getTalkPage() ) );
+       }
+
+}
diff --git a/tests/phpunit/includes/WatchedItemStoreUnitTest.php b/tests/phpunit/includes/WatchedItemStoreUnitTest.php
new file mode 100644 (file)
index 0000000..afde88c
--- /dev/null
@@ -0,0 +1,2282 @@
+<?php
+
+/**
+ * @author Addshore
+ *
+ * @covers WatchedItemStore
+ */
+class WatchedItemStoreUnitTest extends PHPUnit_Framework_TestCase {
+
+       /**
+        * @return PHPUnit_Framework_MockObject_MockObject|IDatabase
+        */
+       private function getMockDb() {
+               return $this->getMock( IDatabase::class );
+       }
+
+       /**
+        * @return PHPUnit_Framework_MockObject_MockObject|LoadBalancer
+        */
+       private function getMockLoadBalancer( $mockDb, $expectedConnectionType = null ) {
+               $mock = $this->getMockBuilder( LoadBalancer::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               if ( $expectedConnectionType !== null ) {
+                       $mock->expects( $this->any() )
+                               ->method( 'getConnection' )
+                               ->with( $expectedConnectionType )
+                               ->will( $this->returnValue( $mockDb ) );
+               } else {
+                       $mock->expects( $this->any() )
+                               ->method( 'getConnection' )
+                               ->will( $this->returnValue( $mockDb ) );
+               }
+               $mock->expects( $this->any() )
+                       ->method( 'getReadOnlyReason' )
+                       ->will( $this->returnValue( false ) );
+               return $mock;
+       }
+
+       /**
+        * @return PHPUnit_Framework_MockObject_MockObject|HashBagOStuff
+        */
+       private function getMockCache() {
+               $mock = $this->getMockBuilder( HashBagOStuff::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $mock->expects( $this->any() )
+                       ->method( 'makeKey' )
+                       ->will( $this->returnCallback( function() {
+                               return implode( ':', func_get_args() );
+                       } ) );
+               return $mock;
+       }
+
+       /**
+        * @param int $id
+        * @return PHPUnit_Framework_MockObject_MockObject|User
+        */
+       private function getMockNonAnonUserWithId( $id ) {
+               $mock = $this->getMock( User::class );
+               $mock->expects( $this->any() )
+                       ->method( 'isAnon' )
+                       ->will( $this->returnValue( false ) );
+               $mock->expects( $this->any() )
+                       ->method( 'getId' )
+                       ->will( $this->returnValue( $id ) );
+               return $mock;
+       }
+
+       /**
+        * @return User
+        */
+       private function getAnonUser() {
+               return User::newFromName( 'Anon_User' );
+       }
+
+       private function getFakeRow( array $rowValues ) {
+               $fakeRow = new stdClass();
+               foreach ( $rowValues as $valueName => $value ) {
+                       $fakeRow->$valueName = $value;
+               }
+               return $fakeRow;
+       }
+
+       public function testGetDefaultInstance() {
+               $instanceOne = WatchedItemStore::getDefaultInstance();
+               $instanceTwo = WatchedItemStore::getDefaultInstance();
+               $this->assertSame( $instanceOne, $instanceTwo );
+       }
+
+       public function testOverrideDefaultInstance() {
+               $instance = WatchedItemStore::getDefaultInstance();
+               $scopedOverride = $instance->overrideDefaultInstance( null );
+
+               $this->assertNotSame( $instance, WatchedItemStore::getDefaultInstance() );
+
+               unset( $scopedOverride );
+
+               $this->assertSame( $instance, WatchedItemStore::getDefaultInstance() );
+       }
+
+       public function testCountWatchedItems() {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->exactly( 1 ) )
+                       ->method( 'selectField' )
+                       ->with(
+                               'watchlist',
+                               'COUNT(*)',
+                               [
+                                       'wl_user' => $user->getId(),
+                               ],
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( 12 ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertEquals( 12, $store->countWatchedItems( $user ) );
+       }
+
+       public function testCountWatchers() {
+               $titleValue = new TitleValue( 0, 'SomeDbKey' );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->exactly( 1 ) )
+                       ->method( 'selectField' )
+                       ->with(
+                               'watchlist',
+                               'COUNT(*)',
+                               [
+                                       'wl_namespace' => $titleValue->getNamespace(),
+                                       'wl_title' => $titleValue->getDBkey(),
+                               ],
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( 7 ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertEquals( 7, $store->countWatchers( $titleValue ) );
+       }
+
+       public function testCountWatchersMultiple() {
+               $titleValues = [
+                       new TitleValue( 0, 'SomeDbKey' ),
+                       new TitleValue( 0, 'OtherDbKey' ),
+                       new TitleValue( 1, 'AnotherDbKey' ),
+               ];
+
+               $mockDb = $this->getMockDb();
+
+               $dbResult = [
+                       $this->getFakeRow( [ 'wl_title' => 'SomeDbKey', 'wl_namespace' => 0, 'watchers' => 100 ] ),
+                       $this->getFakeRow( [ 'wl_title' => 'OtherDbKey', 'wl_namespace' => 0, 'watchers' => 300 ] ),
+                       $this->getFakeRow( [ 'wl_title' => 'AnotherDbKey', 'wl_namespace' => 1, 'watchers' => 500 ]
+                       ),
+               ];
+               $mockDb->expects( $this->once() )
+                       ->method( 'makeWhereFrom2d' )
+                       ->with(
+                               [ [ 'SomeDbKey' => 1, 'OtherDbKey' => 1 ], [ 'AnotherDbKey' => 1 ] ],
+                               $this->isType( 'string' ),
+                               $this->isType( 'string' )
+                               )
+                       ->will( $this->returnValue( 'makeWhereFrom2d return value' ) );
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_title', 'wl_namespace', 'watchers' => 'COUNT(*)' ],
+                               [ 'makeWhereFrom2d return value' ],
+                               $this->isType( 'string' ),
+                               [
+                                       'GROUP BY' => [ 'wl_namespace', 'wl_title' ],
+                               ]
+                       )
+                       ->will(
+                               $this->returnValue( $dbResult )
+                       );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $expected = [
+                       0 => [ 'SomeDbKey' => 100, 'OtherDbKey' => 300 ],
+                       1 => [ 'AnotherDbKey' => 500 ],
+               ];
+               $this->assertEquals( $expected, $store->countWatchersMultiple( $titleValues ) );
+       }
+
+       public function provideIntWithDbUnsafeVersion() {
+               return [
+                       [ 50 ],
+                       [ "50; DROP TABLE watchlist;\n--" ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideIntWithDbUnsafeVersion
+        */
+       public function testCountWatchersMultiple_withMinimumWatchers( $minWatchers ) {
+               $titleValues = [
+                       new TitleValue( 0, 'SomeDbKey' ),
+                       new TitleValue( 0, 'OtherDbKey' ),
+                       new TitleValue( 1, 'AnotherDbKey' ),
+               ];
+
+               $mockDb = $this->getMockDb();
+
+               $dbResult = [
+                       $this->getFakeRow( [ 'wl_title' => 'SomeDbKey', 'wl_namespace' => 0, 'watchers' => 100 ] ),
+                       $this->getFakeRow( [ 'wl_title' => 'OtherDbKey', 'wl_namespace' => 0, 'watchers' => 300 ] ),
+                       $this->getFakeRow( [ 'wl_title' => 'AnotherDbKey', 'wl_namespace' => 1, 'watchers' => 500 ]
+                       ),
+               ];
+               $mockDb->expects( $this->once() )
+                       ->method( 'makeWhereFrom2d' )
+                       ->with(
+                               [ [ 'SomeDbKey' => 1, 'OtherDbKey' => 1 ], [ 'AnotherDbKey' => 1 ] ],
+                               $this->isType( 'string' ),
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( 'makeWhereFrom2d return value' ) );
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_title', 'wl_namespace', 'watchers' => 'COUNT(*)' ],
+                               [ 'makeWhereFrom2d return value' ],
+                               $this->isType( 'string' ),
+                               [
+                                       'GROUP BY' => [ 'wl_namespace', 'wl_title' ],
+                                       'HAVING' => 'COUNT(*) >= 50',
+                               ]
+                       )
+                       ->will(
+                               $this->returnValue( $dbResult )
+                       );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $expected = [
+                       0 => [ 'SomeDbKey' => 100, 'OtherDbKey' => 300 ],
+                       1 => [ 'AnotherDbKey' => 500 ],
+               ];
+               $this->assertEquals(
+                       $expected,
+                       $store->countWatchersMultiple( $titleValues, [ 'minimumWatchers' => $minWatchers ] )
+               );
+       }
+
+       public function testCountVisitingWatchers() {
+               $titleValue = new TitleValue( 0, 'SomeDbKey' );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->exactly( 1 ) )
+                       ->method( 'selectField' )
+                       ->with(
+                               'watchlist',
+                               'COUNT(*)',
+                               [
+                                       'wl_namespace' => $titleValue->getNamespace(),
+                                       'wl_title' => $titleValue->getDBkey(),
+                                       'wl_notificationtimestamp >= \'TS111TS\' OR wl_notificationtimestamp IS NULL',
+                               ],
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( 7 ) );
+               $mockDb->expects( $this->exactly( 1 ) )
+                       ->method( 'addQuotes' )
+                       ->will( $this->returnCallback( function( $value ) {
+                               return "'$value'";
+                       } ) );
+               $mockDb->expects( $this->exactly( 1 ) )
+                       ->method( 'timestamp' )
+                       ->will( $this->returnCallback( function( $value ) {
+                               return 'TS' . $value . 'TS';
+                       } ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertEquals( 7, $store->countVisitingWatchers( $titleValue, '111' ) );
+       }
+
+       public function testCountVisitingWatchersMultiple() {
+               $titleValuesWithThresholds = [
+                       [ new TitleValue( 0, 'SomeDbKey' ), '111' ],
+                       [ new TitleValue( 0, 'OtherDbKey' ), '111' ],
+                       [ new TitleValue( 1, 'AnotherDbKey' ), '123' ],
+               ];
+
+               $dbResult = [
+                       $this->getFakeRow( [ 'wl_title' => 'SomeDbKey', 'wl_namespace' => 0, 'watchers' => 100 ] ),
+                       $this->getFakeRow( [ 'wl_title' => 'OtherDbKey', 'wl_namespace' => 0, 'watchers' => 300 ] ),
+                       $this->getFakeRow( [ 'wl_title' => 'AnotherDbKey', 'wl_namespace' => 1, 'watchers' => 500 ] ),
+               ];
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->exactly( 2 * 3 ) )
+                       ->method( 'addQuotes' )
+                       ->will( $this->returnCallback( function( $value ) {
+                               return "'$value'";
+                       } ) );
+               $mockDb->expects( $this->exactly( 3 ) )
+                       ->method( 'timestamp' )
+                       ->will( $this->returnCallback( function( $value ) {
+                               return 'TS' . $value . 'TS';
+                       } ) );
+               $mockDb->expects( $this->any() )
+                       ->method( 'makeList' )
+                       ->with(
+                               $this->isType( 'array' ),
+                               $this->isType( 'int' )
+                       )
+                       ->will( $this->returnCallback( function( $a, $conj ) {
+                               $sqlConj = $conj === LIST_AND ? ' AND ' : ' OR ';
+                               return join( $sqlConj, array_map( function( $s ) {
+                                       return '(' . $s . ')';
+                               }, $a
+                               ) );
+                       } ) );
+               $mockDb->expects( $this->never() )
+                       ->method( 'makeWhereFrom2d' );
+
+               $expectedCond =
+                       '((wl_namespace = 0) AND (' .
+                       "(((wl_title = 'SomeDbKey') AND (" .
+                       "(wl_notificationtimestamp >= 'TS111TS') OR (wl_notificationtimestamp IS NULL)" .
+                       ')) OR (' .
+                       "(wl_title = 'OtherDbKey') AND (" .
+                       "(wl_notificationtimestamp >= 'TS111TS') OR (wl_notificationtimestamp IS NULL)" .
+                       '))))' .
+                       ') OR ((wl_namespace = 1) AND (' .
+                       "(((wl_title = 'AnotherDbKey') AND (".
+                       "(wl_notificationtimestamp >= 'TS123TS') OR (wl_notificationtimestamp IS NULL)" .
+                       ')))))';
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_namespace', 'wl_title', 'watchers' => 'COUNT(*)' ],
+                               $expectedCond,
+                               $this->isType( 'string' ),
+                               [
+                                       'GROUP BY' => [ 'wl_namespace', 'wl_title' ],
+                               ]
+                       )
+                       ->will(
+                               $this->returnValue( $dbResult )
+                       );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $expected = [
+                       0 => [ 'SomeDbKey' => 100, 'OtherDbKey' => 300 ],
+                       1 => [ 'AnotherDbKey' => 500 ],
+               ];
+               $this->assertEquals(
+                       $expected,
+                       $store->countVisitingWatchersMultiple( $titleValuesWithThresholds )
+               );
+       }
+
+       public function testCountVisitingWatchersMultiple_withMissingTargets() {
+               $titleValuesWithThresholds = [
+                       [ new TitleValue( 0, 'SomeDbKey' ), '111' ],
+                       [ new TitleValue( 0, 'OtherDbKey' ), '111' ],
+                       [ new TitleValue( 1, 'AnotherDbKey' ), '123' ],
+                       [ new TitleValue( 0, 'SomeNotExisitingDbKey' ), null ],
+                       [ new TitleValue( 0, 'OtherNotExisitingDbKey' ), null ],
+               ];
+
+               $dbResult = [
+                       $this->getFakeRow( [ 'wl_title' => 'SomeDbKey', 'wl_namespace' => 0, 'watchers' => 100 ] ),
+                       $this->getFakeRow( [ 'wl_title' => 'OtherDbKey', 'wl_namespace' => 0, 'watchers' => 300 ] ),
+                       $this->getFakeRow( [ 'wl_title' => 'AnotherDbKey', 'wl_namespace' => 1, 'watchers' => 500 ] ),
+                       $this->getFakeRow(
+                               [ 'wl_title' => 'SomeNotExisitingDbKey', 'wl_namespace' => 0, 'watchers' => 100 ]
+                       ),
+                       $this->getFakeRow(
+                               [ 'wl_title' => 'OtherNotExisitingDbKey', 'wl_namespace' => 0, 'watchers' => 200 ]
+                       ),
+               ];
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->exactly( 2 * 3 ) )
+                       ->method( 'addQuotes' )
+                       ->will( $this->returnCallback( function( $value ) {
+                               return "'$value'";
+                       } ) );
+               $mockDb->expects( $this->exactly( 3 ) )
+                       ->method( 'timestamp' )
+                       ->will( $this->returnCallback( function( $value ) {
+                               return 'TS' . $value . 'TS';
+                       } ) );
+               $mockDb->expects( $this->any() )
+                       ->method( 'makeList' )
+                       ->with(
+                               $this->isType( 'array' ),
+                               $this->isType( 'int' )
+                       )
+                       ->will( $this->returnCallback( function( $a, $conj ) {
+                               $sqlConj = $conj === LIST_AND ? ' AND ' : ' OR ';
+                               return join( $sqlConj, array_map( function( $s ) {
+                                       return '(' . $s . ')';
+                               }, $a
+                               ) );
+                       } ) );
+               $mockDb->expects( $this->once() )
+                       ->method( 'makeWhereFrom2d' )
+                       ->with(
+                               [ [ 'SomeNotExisitingDbKey' => 1, 'OtherNotExisitingDbKey' => 1 ] ],
+                               $this->isType( 'string' ),
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( 'makeWhereFrom2d return value' ) );
+
+               $expectedCond =
+                       '((wl_namespace = 0) AND (' .
+                       "(((wl_title = 'SomeDbKey') AND (" .
+                       "(wl_notificationtimestamp >= 'TS111TS') OR (wl_notificationtimestamp IS NULL)" .
+                       ')) OR (' .
+                       "(wl_title = 'OtherDbKey') AND (" .
+                       "(wl_notificationtimestamp >= 'TS111TS') OR (wl_notificationtimestamp IS NULL)" .
+                       '))))' .
+                       ') OR ((wl_namespace = 1) AND (' .
+                       "(((wl_title = 'AnotherDbKey') AND (".
+                       "(wl_notificationtimestamp >= 'TS123TS') OR (wl_notificationtimestamp IS NULL)" .
+                       '))))' .
+                       ') OR ' .
+                       '(makeWhereFrom2d return value)';
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_namespace', 'wl_title', 'watchers' => 'COUNT(*)' ],
+                               $expectedCond,
+                               $this->isType( 'string' ),
+                               [
+                                       'GROUP BY' => [ 'wl_namespace', 'wl_title' ],
+                               ]
+                       )
+                       ->will(
+                               $this->returnValue( $dbResult )
+                       );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $expected = [
+                       0 => [
+                               'SomeDbKey' => 100, 'OtherDbKey' => 300,
+                               'SomeNotExisitingDbKey' => 100, 'OtherNotExisitingDbKey' => 200
+                       ],
+                       1 => [ 'AnotherDbKey' => 500 ],
+               ];
+               $this->assertEquals(
+                       $expected,
+                       $store->countVisitingWatchersMultiple( $titleValuesWithThresholds )
+               );
+       }
+
+       /**
+        * @dataProvider provideIntWithDbUnsafeVersion
+        */
+       public function testCountVisitingWatchersMultiple_withMinimumWatchers( $minWatchers ) {
+               $titleValuesWithThresholds = [
+                       [ new TitleValue( 0, 'SomeDbKey' ), '111' ],
+                       [ new TitleValue( 0, 'OtherDbKey' ), '111' ],
+                       [ new TitleValue( 1, 'AnotherDbKey' ), '123' ],
+               ];
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->any() )
+                       ->method( 'makeList' )
+                       ->will( $this->returnValue( 'makeList return value' ) );
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_namespace', 'wl_title', 'watchers' => 'COUNT(*)' ],
+                               'makeList return value',
+                               $this->isType( 'string' ),
+                               [
+                                       'GROUP BY' => [ 'wl_namespace', 'wl_title' ],
+                                       'HAVING' => 'COUNT(*) >= 50',
+                               ]
+                       )
+                       ->will(
+                               $this->returnValue( [] )
+                       );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $expected = [
+                       0 => [ 'SomeDbKey' => 0, 'OtherDbKey' => 0 ],
+                       1 => [ 'AnotherDbKey' => 0 ],
+               ];
+               $this->assertEquals(
+                       $expected,
+                       $store->countVisitingWatchersMultiple( $titleValuesWithThresholds, $minWatchers )
+               );
+       }
+
+       public function testCountUnreadNotifications() {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->exactly( 1 ) )
+                       ->method( 'selectRowCount' )
+                       ->with(
+                               'watchlist',
+                               '1',
+                               [
+                                       "wl_notificationtimestamp IS NOT NULL",
+                                       'wl_user' => 1,
+                               ],
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( 9 ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertEquals( 9, $store->countUnreadNotifications( $user ) );
+       }
+
+       /**
+        * @dataProvider provideIntWithDbUnsafeVersion
+        */
+       public function testCountUnreadNotifications_withUnreadLimit_overLimit( $limit ) {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->exactly( 1 ) )
+                       ->method( 'selectRowCount' )
+                       ->with(
+                               'watchlist',
+                               '1',
+                               [
+                                       "wl_notificationtimestamp IS NOT NULL",
+                                       'wl_user' => 1,
+                               ],
+                               $this->isType( 'string' ),
+                               [ 'LIMIT' => 50 ]
+                       )
+                       ->will( $this->returnValue( 50 ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertSame(
+                       true,
+                       $store->countUnreadNotifications( $user, $limit )
+               );
+       }
+
+       /**
+        * @dataProvider provideIntWithDbUnsafeVersion
+        */
+       public function testCountUnreadNotifications_withUnreadLimit_underLimit( $limit ) {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->exactly( 1 ) )
+                       ->method( 'selectRowCount' )
+                       ->with(
+                               'watchlist',
+                               '1',
+                               [
+                                       "wl_notificationtimestamp IS NOT NULL",
+                                       'wl_user' => 1,
+                               ],
+                               $this->isType( 'string' ),
+                               [ 'LIMIT' => 50 ]
+                       )
+                       ->will( $this->returnValue( 9 ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertEquals(
+                       9,
+                       $store->countUnreadNotifications( $user, $limit )
+               );
+       }
+
+       public function testDuplicateEntry_nothingToDuplicate() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [
+                                       'wl_user',
+                                       'wl_notificationtimestamp',
+                               ],
+                               [
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'Old_Title',
+                               ],
+                               'WatchedItemStore::duplicateEntry',
+                               [ 'FOR UPDATE' ]
+                       )
+                       ->will( $this->returnValue( new FakeResultWrapper( [] ) ) );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $this->getMockCache()
+               );
+
+               $store->duplicateEntry(
+                       Title::newFromText( 'Old_Title' ),
+                       Title::newFromText( 'New_Title' )
+               );
+       }
+
+       public function testDuplicateEntry_somethingToDuplicate() {
+               $fakeRows = [
+                       $this->getFakeRow( [ 'wl_user' => 1, 'wl_notificationtimestamp' => '20151212010101' ] ),
+                       $this->getFakeRow( [ 'wl_user' => 2, 'wl_notificationtimestamp' => null ] ),
+               ];
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->at( 0 ) )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [
+                                       'wl_user',
+                                       'wl_notificationtimestamp',
+                               ],
+                               [
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'Old_Title',
+                               ]
+                       )
+                       ->will( $this->returnValue( new FakeResultWrapper( $fakeRows ) ) );
+               $mockDb->expects( $this->at( 1 ) )
+                       ->method( 'replace' )
+                       ->with(
+                               'watchlist',
+                               [ [ 'wl_user', 'wl_namespace', 'wl_title' ] ],
+                               [
+                                       [
+                                               'wl_user' => 1,
+                                               'wl_namespace' => 0,
+                                               'wl_title' => 'New_Title',
+                                               'wl_notificationtimestamp' => '20151212010101',
+                                       ],
+                                       [
+                                               'wl_user' => 2,
+                                               'wl_namespace' => 0,
+                                               'wl_title' => 'New_Title',
+                                               'wl_notificationtimestamp' => null,
+                                       ],
+                               ],
+                               $this->isType( 'string' )
+                       );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $store->duplicateEntry(
+                       Title::newFromText( 'Old_Title' ),
+                       Title::newFromText( 'New_Title' )
+               );
+       }
+
+       public function testDuplicateAllAssociatedEntries_nothingToDuplicate() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->at( 0 ) )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [
+                                       'wl_user',
+                                       'wl_notificationtimestamp',
+                               ],
+                               [
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'Old_Title',
+                               ]
+                       )
+                       ->will( $this->returnValue( new FakeResultWrapper( [] ) ) );
+               $mockDb->expects( $this->at( 1 ) )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [
+                                       'wl_user',
+                                       'wl_notificationtimestamp',
+                               ],
+                               [
+                                       'wl_namespace' => 1,
+                                       'wl_title' => 'Old_Title',
+                               ]
+                       )
+                       ->will( $this->returnValue( new FakeResultWrapper( [] ) ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $store->duplicateAllAssociatedEntries(
+                       Title::newFromText( 'Old_Title' ),
+                       Title::newFromText( 'New_Title' )
+               );
+       }
+
+       public function testDuplicateAllAssociatedEntries_somethingToDuplicate() {
+               $fakeRows = [
+                       $this->getFakeRow( [ 'wl_user' => 1, 'wl_notificationtimestamp' => '20151212010101' ] ),
+               ];
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->at( 0 ) )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [
+                                       'wl_user',
+                                       'wl_notificationtimestamp',
+                               ],
+                               [
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'Old_Title',
+                               ]
+                       )
+                       ->will( $this->returnValue( new FakeResultWrapper( $fakeRows ) ) );
+               $mockDb->expects( $this->at( 1 ) )
+                       ->method( 'replace' )
+                       ->with(
+                               'watchlist',
+                               [ [ 'wl_user', 'wl_namespace', 'wl_title' ] ],
+                               [
+                                       [
+                                               'wl_user' => 1,
+                                               'wl_namespace' => 0,
+                                               'wl_title' => 'New_Title',
+                                               'wl_notificationtimestamp' => '20151212010101',
+                                       ],
+                               ],
+                               $this->isType( 'string' )
+                       );
+               $mockDb->expects( $this->at( 2 ) )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [
+                                       'wl_user',
+                                       'wl_notificationtimestamp',
+                               ],
+                               [
+                                       'wl_namespace' => 1,
+                                       'wl_title' => 'Old_Title',
+                               ]
+                       )
+                       ->will( $this->returnValue( new FakeResultWrapper( $fakeRows ) ) );
+               $mockDb->expects( $this->at( 3 ) )
+                       ->method( 'replace' )
+                       ->with(
+                               'watchlist',
+                               [ [ 'wl_user', 'wl_namespace', 'wl_title' ] ],
+                               [
+                                       [
+                                               'wl_user' => 1,
+                                               'wl_namespace' => 1,
+                                               'wl_title' => 'New_Title',
+                                               'wl_notificationtimestamp' => '20151212010101',
+                                       ],
+                               ],
+                               $this->isType( 'string' )
+                       );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $store->duplicateAllAssociatedEntries(
+                       Title::newFromText( 'Old_Title' ),
+                       Title::newFromText( 'New_Title' )
+               );
+       }
+
+       public function testAddWatch_nonAnonymousUser() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'insert' )
+                       ->with(
+                               'watchlist',
+                               [
+                                       [
+                                               'wl_user' => 1,
+                                               'wl_namespace' => 0,
+                                               'wl_title' => 'Some_Page',
+                                               'wl_notificationtimestamp' => null,
+                                       ]
+                               ]
+                       );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->once() )
+                       ->method( 'delete' )
+                       ->with( '0:Some_Page:1' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $store->addWatch(
+                       $this->getMockNonAnonUserWithId( 1 ),
+                       Title::newFromText( 'Some_Page' )
+               );
+       }
+
+       public function testAddWatch_anonymousUser() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )
+                       ->method( 'insert' );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )
+                       ->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $store->addWatch(
+                       $this->getAnonUser(),
+                       Title::newFromText( 'Some_Page' )
+               );
+       }
+
+       public function testAddWatchBatch_nonAnonymousUser() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'insert' )
+                       ->with(
+                               'watchlist',
+                               [
+                                       [
+                                               'wl_user' => 1,
+                                               'wl_namespace' => 0,
+                                               'wl_title' => 'Some_Page',
+                                               'wl_notificationtimestamp' => null,
+                                       ],
+                                       [
+                                               'wl_user' => 1,
+                                               'wl_namespace' => 1,
+                                               'wl_title' => 'Some_Page',
+                                               'wl_notificationtimestamp' => null,
+                                       ]
+                               ]
+                       );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->exactly( 2 ) )
+                       ->method( 'delete' );
+               $mockCache->expects( $this->at( 1 ) )
+                       ->method( 'delete' )
+                       ->with( '0:Some_Page:1' );
+               $mockCache->expects( $this->at( 3 ) )
+                       ->method( 'delete' )
+                       ->with( '1:Some_Page:1' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $mockUser = $this->getMockNonAnonUserWithId( 1 );
+
+               $this->assertTrue(
+                       $store->addWatchBatch(
+                               [
+                                       [ $mockUser, new TitleValue( 0, 'Some_Page' ) ],
+                                       [ $mockUser, new TitleValue( 1, 'Some_Page' ) ],
+                               ]
+                       )
+               );
+       }
+
+       public function testAddWatchBatch_anonymousUserCombinationsAreSkipped() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'insert' )
+                       ->with(
+                               'watchlist',
+                               [
+                                       [
+                                               'wl_user' => 1,
+                                               'wl_namespace' => 0,
+                                               'wl_title' => 'Some_Page',
+                                               'wl_notificationtimestamp' => null,
+                                       ]
+                               ]
+                       );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->once() )
+                       ->method( 'delete' )
+                       ->with( '0:Some_Page:1' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertTrue(
+                       $store->addWatchBatch(
+                               [
+                                       [ $this->getMockNonAnonUserWithId( 1 ), new TitleValue( 0, 'Some_Page' ) ],
+                                       [ $this->getAnonUser(), new TitleValue( 0, 'Other_Page' ) ],
+                               ]
+                       )
+               );
+       }
+
+       public function testAddWatchBatchReturnsFalse_whenOnlyGivenAnonymousUserCombinations() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )
+                       ->method( 'insert' );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )
+                       ->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $anonUser = $this->getAnonUser();
+               $this->assertFalse(
+                       $store->addWatchBatch(
+                               [
+                                       [ $anonUser, new TitleValue( 0, 'Some_Page' ) ],
+                                       [ $anonUser, new TitleValue( 1, 'Other_Page' ) ],
+                               ]
+                       )
+               );
+       }
+
+       public function testAddWatchBatchReturnsFalse_whenGivenEmptyList() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )
+                       ->method( 'insert' );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )
+                       ->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertFalse(
+                       $store->addWatchBatch( [] )
+               );
+       }
+
+       public function testLoadWatchedItem_existingItem() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectRow' )
+                       ->with(
+                               'watchlist',
+                               'wl_notificationtimestamp',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       )
+                       ->will( $this->returnValue(
+                               $this->getFakeRow( [ 'wl_notificationtimestamp' => '20151212010101' ] )
+                       ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->once() )
+                       ->method( 'set' )
+                       ->with(
+                               '0:SomeDbKey:1'
+                       );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $watchedItem = $store->loadWatchedItem(
+                       $this->getMockNonAnonUserWithId( 1 ),
+                       new TitleValue( 0, 'SomeDbKey' )
+               );
+               $this->assertInstanceOf( 'WatchedItem', $watchedItem );
+               $this->assertEquals( 1, $watchedItem->getUser()->getId() );
+               $this->assertEquals( 'SomeDbKey', $watchedItem->getLinkTarget()->getDBkey() );
+               $this->assertEquals( 0, $watchedItem->getLinkTarget()->getNamespace() );
+       }
+
+       public function testLoadWatchedItem_noItem() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectRow' )
+                       ->with(
+                               'watchlist',
+                               'wl_notificationtimestamp',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       )
+                       ->will( $this->returnValue( [] ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertFalse(
+                       $store->loadWatchedItem(
+                               $this->getMockNonAnonUserWithId( 1 ),
+                               new TitleValue( 0, 'SomeDbKey' )
+                       )
+               );
+       }
+
+       public function testLoadWatchedItem_anonymousUser() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )
+                       ->method( 'selectRow' );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertFalse(
+                       $store->loadWatchedItem(
+                               $this->getAnonUser(),
+                               new TitleValue( 0, 'SomeDbKey' )
+                       )
+               );
+       }
+
+       public function testRemoveWatch_existingItem() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'delete' )
+                       ->with(
+                               'watchlist',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       );
+               $mockDb->expects( $this->once() )
+                       ->method( 'affectedRows' )
+                       ->will( $this->returnValue( 1 ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->once() )
+                       ->method( 'delete' )
+                       ->with( '0:SomeDbKey:1' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertTrue(
+                       $store->removeWatch(
+                               $this->getMockNonAnonUserWithId( 1 ),
+                               new TitleValue( 0, 'SomeDbKey' )
+                       )
+               );
+       }
+
+       public function testRemoveWatch_noItem() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'delete' )
+                       ->with(
+                               'watchlist',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       );
+               $mockDb->expects( $this->once() )
+                       ->method( 'affectedRows' )
+                       ->will( $this->returnValue( 0 ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->once() )
+                       ->method( 'delete' )
+                       ->with( '0:SomeDbKey:1' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertFalse(
+                       $store->removeWatch(
+                               $this->getMockNonAnonUserWithId( 1 ),
+                               new TitleValue( 0, 'SomeDbKey' )
+                       )
+               );
+       }
+
+       public function testRemoveWatch_anonymousUser() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )
+                       ->method( 'delete' );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )
+                       ->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertFalse(
+                       $store->removeWatch(
+                               $this->getAnonUser(),
+                               new TitleValue( 0, 'SomeDbKey' )
+                       )
+               );
+       }
+
+       public function testGetWatchedItem_existingItem() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectRow' )
+                       ->with(
+                               'watchlist',
+                               'wl_notificationtimestamp',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       )
+                       ->will( $this->returnValue(
+                               $this->getFakeRow( [ 'wl_notificationtimestamp' => '20151212010101' ] )
+                       ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'delete' );
+               $mockCache->expects( $this->once() )
+                       ->method( 'get' )
+                       ->with(
+                               '0:SomeDbKey:1'
+                       )
+                       ->will( $this->returnValue( null ) );
+               $mockCache->expects( $this->once() )
+                       ->method( 'set' )
+                       ->with(
+                               '0:SomeDbKey:1'
+                       );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $watchedItem = $store->getWatchedItem(
+                       $this->getMockNonAnonUserWithId( 1 ),
+                       new TitleValue( 0, 'SomeDbKey' )
+               );
+               $this->assertInstanceOf( 'WatchedItem', $watchedItem );
+               $this->assertEquals( 1, $watchedItem->getUser()->getId() );
+               $this->assertEquals( 'SomeDbKey', $watchedItem->getLinkTarget()->getDBkey() );
+               $this->assertEquals( 0, $watchedItem->getLinkTarget()->getNamespace() );
+       }
+
+       public function testGetWatchedItem_cachedItem() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )
+                       ->method( 'selectRow' );
+
+               $mockUser = $this->getMockNonAnonUserWithId( 1 );
+               $linkTarget = new TitleValue( 0, 'SomeDbKey' );
+               $cachedItem = new WatchedItem( $mockUser, $linkTarget, '20151212010101' );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'delete' );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->once() )
+                       ->method( 'get' )
+                       ->with(
+                               '0:SomeDbKey:1'
+                       )
+                       ->will( $this->returnValue( $cachedItem ) );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertEquals(
+                       $cachedItem,
+                       $store->getWatchedItem(
+                               $mockUser,
+                               $linkTarget
+                       )
+               );
+       }
+
+       public function testGetWatchedItem_noItem() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectRow' )
+                       ->with(
+                               'watchlist',
+                               'wl_notificationtimestamp',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       )
+                       ->will( $this->returnValue( [] ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+               $mockCache->expects( $this->once() )
+                       ->method( 'get' )
+                       ->with( '0:SomeDbKey:1' )
+                       ->will( $this->returnValue( false ) );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertFalse(
+                       $store->getWatchedItem(
+                               $this->getMockNonAnonUserWithId( 1 ),
+                               new TitleValue( 0, 'SomeDbKey' )
+                       )
+               );
+       }
+
+       public function testGetWatchedItem_anonymousUser() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )
+                       ->method( 'selectRow' );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertFalse(
+                       $store->getWatchedItem(
+                               $this->getAnonUser(),
+                               new TitleValue( 0, 'SomeDbKey' )
+                       )
+               );
+       }
+
+       public function testGetWatchedItemsForUser() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
+                               [ 'wl_user' => 1 ]
+                       )
+                       ->will( $this->returnValue( [
+                               $this->getFakeRow( [
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'Foo1',
+                                       'wl_notificationtimestamp' => '20151212010101',
+                               ] ),
+                               $this->getFakeRow( [
+                                       'wl_namespace' => 1,
+                                       'wl_title' => 'Foo2',
+                                       'wl_notificationtimestamp' => null,
+                               ] ),
+                       ] ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'delete' );
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'set' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+               $user = $this->getMockNonAnonUserWithId( 1 );
+
+               $watchedItems = $store->getWatchedItemsForUser( $user );
+
+               $this->assertInternalType( 'array', $watchedItems );
+               $this->assertCount( 2, $watchedItems );
+               foreach ( $watchedItems as $watchedItem ) {
+                       $this->assertInstanceOf( 'WatchedItem', $watchedItem );
+               }
+               $this->assertEquals(
+                       new WatchedItem( $user, new TitleValue( 0, 'Foo1' ), '20151212010101' ),
+                       $watchedItems[0]
+               );
+               $this->assertEquals(
+                       new WatchedItem( $user, new TitleValue( 1, 'Foo2' ), null ),
+                       $watchedItems[1]
+               );
+       }
+
+       public function provideDbTypes() {
+               return [
+                       [ false, DB_SLAVE ],
+                       [ true, DB_MASTER ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideDbTypes
+        */
+       public function testGetWatchedItemsForUser_optionsAndEmptyResult( $forWrite, $dbType ) {
+               $mockDb = $this->getMockDb();
+               $mockCache = $this->getMockCache();
+               $mockLoadBalancer = $this->getMockLoadBalancer( $mockDb, $dbType );
+               $user = $this->getMockNonAnonUserWithId( 1 );
+
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
+                               [ 'wl_user' => 1 ],
+                               $this->isType( 'string' ),
+                               [ 'ORDER BY' => [ 'wl_namespace ASC', 'wl_title ASC' ] ]
+                       )
+                       ->will( $this->returnValue( [] ) );
+
+               $store = new WatchedItemStore(
+                       $mockLoadBalancer,
+                       $mockCache
+               );
+
+               $watchedItems = $store->getWatchedItemsForUser(
+                       $user,
+                       [ 'forWrite' => $forWrite, 'sort' => WatchedItemStore::SORT_ASC ]
+               );
+               $this->assertEquals( [], $watchedItems );
+       }
+
+       public function testGetWatchedItemsForUser_badSortOptionThrowsException() {
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $this->getMockDb() ),
+                       $this->getMockCache()
+               );
+
+               $this->setExpectedException( 'InvalidArgumentException' );
+               $store->getWatchedItemsForUser(
+                       $this->getMockNonAnonUserWithId( 1 ),
+                       [ 'sort' => 'foo' ]
+               );
+       }
+
+       public function testIsWatchedItem_existingItem() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectRow' )
+                       ->with(
+                               'watchlist',
+                               'wl_notificationtimestamp',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       )
+                       ->will( $this->returnValue(
+                               $this->getFakeRow( [ 'wl_notificationtimestamp' => '20151212010101' ] )
+                       ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'delete' );
+               $mockCache->expects( $this->once() )
+                       ->method( 'get' )
+                       ->with( '0:SomeDbKey:1' )
+                       ->will( $this->returnValue( false ) );
+               $mockCache->expects( $this->once() )
+                       ->method( 'set' )
+                       ->with(
+                               '0:SomeDbKey:1'
+                       );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertTrue(
+                       $store->isWatched(
+                               $this->getMockNonAnonUserWithId( 1 ),
+                               new TitleValue( 0, 'SomeDbKey' )
+                       )
+               );
+       }
+
+       public function testIsWatchedItem_noItem() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectRow' )
+                       ->with(
+                               'watchlist',
+                               'wl_notificationtimestamp',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       )
+                       ->will( $this->returnValue( [] ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+               $mockCache->expects( $this->once() )
+                       ->method( 'get' )
+                       ->with( '0:SomeDbKey:1' )
+                       ->will( $this->returnValue( false ) );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertFalse(
+                       $store->isWatched(
+                               $this->getMockNonAnonUserWithId( 1 ),
+                               new TitleValue( 0, 'SomeDbKey' )
+                       )
+               );
+       }
+
+       public function testIsWatchedItem_anonymousUser() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )
+                       ->method( 'selectRow' );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertFalse(
+                       $store->isWatched(
+                               $this->getAnonUser(),
+                               new TitleValue( 0, 'SomeDbKey' )
+                       )
+               );
+       }
+
+       public function testGetNotificationTimestampsBatch() {
+               $targets = [
+                       new TitleValue( 0, 'SomeDbKey' ),
+                       new TitleValue( 1, 'AnotherDbKey' ),
+               ];
+
+               $mockDb = $this->getMockDb();
+               $dbResult = [
+                       $this->getFakeRow( [
+                               'wl_namespace' => 0,
+                               'wl_title' => 'SomeDbKey',
+                               'wl_notificationtimestamp' => '20151212010101',
+                       ] ),
+                       $this->getFakeRow(
+                               [
+                                       'wl_namespace' => 1,
+                                       'wl_title' => 'AnotherDbKey',
+                                       'wl_notificationtimestamp' => null,
+                               ]
+                       ),
+               ];
+
+               $mockDb->expects( $this->once() )
+                       ->method( 'makeWhereFrom2d' )
+                       ->with(
+                               [ [ 'SomeDbKey' => 1 ], [ 'AnotherDbKey' => 1 ] ],
+                               $this->isType( 'string' ),
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( 'makeWhereFrom2d return value' ) );
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
+                               [
+                                       'makeWhereFrom2d return value',
+                                       'wl_user' => 1
+                               ],
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( $dbResult ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->exactly( 2 ) )
+                       ->method( 'get' )
+                       ->withConsecutive(
+                               [ '0:SomeDbKey:1' ],
+                               [ '1:AnotherDbKey:1' ]
+                       )
+                       ->will( $this->returnValue( null ) );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertEquals(
+                       [
+                               0 => [ 'SomeDbKey' => '20151212010101', ],
+                               1 => [ 'AnotherDbKey' => null, ],
+                       ],
+                       $store->getNotificationTimestampsBatch( $this->getMockNonAnonUserWithId( 1 ), $targets )
+               );
+       }
+
+       public function testGetNotificationTimestampsBatch_notWatchedTarget() {
+               $targets = [
+                       new TitleValue( 0, 'OtherDbKey' ),
+               ];
+
+               $mockDb = $this->getMockDb();
+
+               $mockDb->expects( $this->once() )
+                       ->method( 'makeWhereFrom2d' )
+                       ->with(
+                               [ [ 'OtherDbKey' => 1 ] ],
+                               $this->isType( 'string' ),
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( 'makeWhereFrom2d return value' ) );
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
+                               [
+                                       'makeWhereFrom2d return value',
+                                       'wl_user' => 1
+                               ],
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( $this->getFakeRow( [] ) ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->once() )
+                       ->method( 'get' )
+                       ->with( '0:OtherDbKey:1' )
+                       ->will( $this->returnValue( null ) );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertEquals(
+                       [
+                               0 => [ 'OtherDbKey' => false, ],
+                       ],
+                       $store->getNotificationTimestampsBatch( $this->getMockNonAnonUserWithId( 1 ), $targets )
+               );
+       }
+
+       public function testGetNotificationTimestampsBatch_cachedItem() {
+               $targets = [
+                       new TitleValue( 0, 'SomeDbKey' ),
+                       new TitleValue( 1, 'AnotherDbKey' ),
+               ];
+
+               $user = $this->getMockNonAnonUserWithId( 1 );
+               $cachedItem = new WatchedItem( $user, $targets[0], '20151212010101' );
+
+               $mockDb = $this->getMockDb();
+
+               $mockDb->expects( $this->once() )
+                       ->method( 'makeWhereFrom2d' )
+                       ->with(
+                               [ 1 => [ 'AnotherDbKey' => 1 ] ],
+                               $this->isType( 'string' ),
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( 'makeWhereFrom2d return value' ) );
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ],
+                               [
+                                       'makeWhereFrom2d return value',
+                                       'wl_user' => 1
+                               ],
+                               $this->isType( 'string' )
+                       )
+                       ->will( $this->returnValue( [
+                               $this->getFakeRow(
+                                       [ 'wl_namespace' => 1, 'wl_title' => 'AnotherDbKey', 'wl_notificationtimestamp' => null, ]
+                               )
+                       ] ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->at( 1 ) )
+                       ->method( 'get' )
+                       ->with( '0:SomeDbKey:1' )
+                       ->will( $this->returnValue( $cachedItem ) );
+               $mockCache->expects( $this->at( 3 ) )
+                       ->method( 'get' )
+                       ->with( '1:AnotherDbKey:1' )
+                       ->will( $this->returnValue( null ) );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertEquals(
+                       [
+                               0 => [ 'SomeDbKey' => '20151212010101', ],
+                               1 => [ 'AnotherDbKey' => null, ],
+                       ],
+                       $store->getNotificationTimestampsBatch( $user, $targets )
+               );
+       }
+
+       public function testGetNotificationTimestampsBatch_allItemsCached() {
+               $targets = [
+                       new TitleValue( 0, 'SomeDbKey' ),
+                       new TitleValue( 1, 'AnotherDbKey' ),
+               ];
+
+               $user = $this->getMockNonAnonUserWithId( 1 );
+               $cachedItems = [
+                       new WatchedItem( $user, $targets[0], '20151212010101' ),
+                       new WatchedItem( $user, $targets[1], null ),
+               ];
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )->method( $this->anything() );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->at( 1 ) )
+                       ->method( 'get' )
+                       ->with( '0:SomeDbKey:1' )
+                       ->will( $this->returnValue( $cachedItems[0] ) );
+               $mockCache->expects( $this->at( 3 ) )
+                       ->method( 'get' )
+                       ->with( '1:AnotherDbKey:1' )
+                       ->will( $this->returnValue( $cachedItems[1] ) );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertEquals(
+                       [
+                               0 => [ 'SomeDbKey' => '20151212010101', ],
+                               1 => [ 'AnotherDbKey' => null, ],
+                       ],
+                       $store->getNotificationTimestampsBatch( $user, $targets )
+               );
+       }
+
+       public function testGetNotificationTimestampsBatch_anonymousUser() {
+               $targets = [
+                       new TitleValue( 0, 'SomeDbKey' ),
+                       new TitleValue( 1, 'AnotherDbKey' ),
+               ];
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )->method( $this->anything() );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( $this->anything() );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertEquals(
+                       [
+                               0 => [ 'SomeDbKey' => false, ],
+                               1 => [ 'AnotherDbKey' => false, ],
+                       ],
+                       $store->getNotificationTimestampsBatch( $this->getAnonUser(), $targets )
+               );
+       }
+
+       public function testResetNotificationTimestamp_anonymousUser() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )
+                       ->method( 'selectRow' );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertFalse(
+                       $store->resetNotificationTimestamp(
+                               $this->getAnonUser(),
+                               Title::newFromText( 'SomeDbKey' )
+                       )
+               );
+       }
+
+       public function testResetNotificationTimestamp_noItem() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectRow' )
+                       ->with(
+                               'watchlist',
+                               'wl_notificationtimestamp',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       )
+                       ->will( $this->returnValue( [] ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertFalse(
+                       $store->resetNotificationTimestamp(
+                               $this->getMockNonAnonUserWithId( 1 ),
+                               Title::newFromText( 'SomeDbKey' )
+                       )
+               );
+       }
+
+       public function testResetNotificationTimestamp_item() {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+               $title = Title::newFromText( 'SomeDbKey' );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectRow' )
+                       ->with(
+                               'watchlist',
+                               'wl_notificationtimestamp',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       )
+                       ->will( $this->returnValue(
+                               $this->getFakeRow( [ 'wl_notificationtimestamp' => '20151212010101' ] )
+                       ) );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->once() )
+                       ->method( 'set' )
+                       ->with(
+                               '0:SomeDbKey:1',
+                               $this->isInstanceOf( WatchedItem::class )
+                       );
+               $mockCache->expects( $this->once() )
+                       ->method( 'delete' )
+                       ->with( '0:SomeDbKey:1' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               // Note: This does not actually assert the job is correct
+               $callableCallCounter = 0;
+               $mockCallback = function( $callable ) use ( &$callableCallCounter ) {
+                       $callableCallCounter++;
+                       $this->assertInternalType( 'callable', $callable );
+               };
+               $scopedOverride = $store->overrideDeferredUpdatesAddCallableUpdateCallback( $mockCallback );
+
+               $this->assertTrue(
+                       $store->resetNotificationTimestamp(
+                               $user,
+                               $title
+                       )
+               );
+               $this->assertEquals( 1, $callableCallCounter );
+
+               ScopedCallback::consume( $scopedOverride );
+       }
+
+       public function testResetNotificationTimestamp_noItemForced() {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+               $title = Title::newFromText( 'SomeDbKey' );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )
+                       ->method( 'selectRow' );
+
+               $mockCache = $this->getMockCache();
+               $mockDb->expects( $this->never() )
+                       ->method( 'get' );
+               $mockDb->expects( $this->never() )
+                       ->method( 'set' );
+               $mockDb->expects( $this->never() )
+                       ->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               // Note: This does not actually assert the job is correct
+               $callableCallCounter = 0;
+               $mockCallback = function( $callable ) use ( &$callableCallCounter ) {
+                       $callableCallCounter++;
+                       $this->assertInternalType( 'callable', $callable );
+               };
+               $scopedOverride = $store->overrideDeferredUpdatesAddCallableUpdateCallback( $mockCallback );
+
+               $this->assertTrue(
+                       $store->resetNotificationTimestamp(
+                               $user,
+                               $title,
+                               'force'
+                       )
+               );
+               $this->assertEquals( 1, $callableCallCounter );
+
+               ScopedCallback::consume( $scopedOverride );
+       }
+
+       /**
+        * @param $text
+        * @param int $ns
+        *
+        * @return PHPUnit_Framework_MockObject_MockObject|Title
+        */
+       private function getMockTitle( $text, $ns = 0 ) {
+               $title = $this->getMock( Title::class );
+               $title->expects( $this->any() )
+                       ->method( 'getText' )
+                       ->will( $this->returnValue( str_replace( '_', ' ', $text ) ) );
+               $title->expects( $this->any() )
+                       ->method( 'getDbKey' )
+                       ->will( $this->returnValue( str_replace( '_', ' ', $text ) ) );
+               $title->expects( $this->any() )
+                       ->method( 'getNamespace' )
+                       ->will( $this->returnValue( $ns ) );
+               return $title;
+       }
+
+       public function testResetNotificationTimestamp_oldidSpecifiedLatestRevisionForced() {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+               $oldid = 22;
+               $title = $this->getMockTitle( 'SomeTitle' );
+               $title->expects( $this->once() )
+                       ->method( 'getNextRevisionID' )
+                       ->with( $oldid )
+                       ->will( $this->returnValue( false ) );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->never() )
+                       ->method( 'selectRow' );
+
+               $mockCache = $this->getMockCache();
+               $mockDb->expects( $this->never() )
+                       ->method( 'get' );
+               $mockDb->expects( $this->never() )
+                       ->method( 'set' );
+               $mockDb->expects( $this->never() )
+                       ->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               // Note: This does not actually assert the job is correct
+               $callableCallCounter = 0;
+               $scopedOverride = $store->overrideDeferredUpdatesAddCallableUpdateCallback(
+                       function( $callable ) use ( &$callableCallCounter ) {
+                               $callableCallCounter++;
+                               $this->assertInternalType( 'callable', $callable );
+                       }
+               );
+
+               $this->assertTrue(
+                       $store->resetNotificationTimestamp(
+                               $user,
+                               $title,
+                               'force',
+                               $oldid
+                       )
+               );
+               $this->assertEquals( 1, $callableCallCounter );
+
+               ScopedCallback::consume( $scopedOverride );
+       }
+
+       public function testResetNotificationTimestamp_oldidSpecifiedNotLatestRevisionForced() {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+               $oldid = 22;
+               $title = $this->getMockTitle( 'SomeDbKey' );
+               $title->expects( $this->once() )
+                       ->method( 'getNextRevisionID' )
+                       ->with( $oldid )
+                       ->will( $this->returnValue( 33 ) );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectRow' )
+                       ->with(
+                               'watchlist',
+                               'wl_notificationtimestamp',
+                               [
+                                       'wl_user' => 1,
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       )
+                       ->will( $this->returnValue(
+                               $this->getFakeRow( [ 'wl_notificationtimestamp' => '20151212010101' ] )
+                       ) );
+
+               $mockCache = $this->getMockCache();
+               $mockDb->expects( $this->never() )
+                       ->method( 'get' );
+               $mockDb->expects( $this->never() )
+                       ->method( 'set' );
+               $mockDb->expects( $this->never() )
+                       ->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               // Note: This does not actually assert the job is correct
+               $addUpdateCallCounter = 0;
+               $scopedOverrideDeferred = $store->overrideDeferredUpdatesAddCallableUpdateCallback(
+                       function( $callable ) use ( &$addUpdateCallCounter ) {
+                               $addUpdateCallCounter++;
+                               $this->assertInternalType( 'callable', $callable );
+                       }
+               );
+
+               $getTimestampCallCounter = 0;
+               $scopedOverrideRevision = $store->overrideRevisionGetTimestampFromIdCallback(
+                       function( $titleParam, $oldidParam ) use ( &$getTimestampCallCounter, $title, $oldid ) {
+                               $getTimestampCallCounter++;
+                               $this->assertEquals( $title, $titleParam );
+                               $this->assertEquals( $oldid, $oldidParam );
+                       }
+               );
+
+               $this->assertTrue(
+                       $store->resetNotificationTimestamp(
+                               $user,
+                               $title,
+                               'force',
+                               $oldid
+                       )
+               );
+               $this->assertEquals( 1, $addUpdateCallCounter );
+               $this->assertEquals( 1, $getTimestampCallCounter );
+
+               ScopedCallback::consume( $scopedOverrideDeferred );
+               ScopedCallback::consume( $scopedOverrideRevision );
+       }
+
+       public function testUpdateNotificationTimestamp_watchersExist() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               [ 'watchlist' ],
+                               [ 'wl_user' ],
+                               [
+                                       'wl_user != 1',
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                                       'wl_notificationtimestamp IS NULL'
+                               ]
+                       )
+                       ->will(
+                               $this->returnValue( [
+                                       $this->getFakeRow( [ 'wl_user' => '2' ] ),
+                                       $this->getFakeRow( [ 'wl_user' => '3' ] )
+                               ] )
+                       );
+               $mockDb->expects( $this->once() )
+                       ->method( 'onTransactionIdle' )
+                       ->with( $this->isType( 'callable' ) )
+                       ->will( $this->returnCallback( function( $callable ) {
+                               $callable();
+                       } ) );
+               $mockDb->expects( $this->once() )
+                       ->method( 'update' )
+                       ->with(
+                               'watchlist',
+                               [ 'wl_notificationtimestamp' => null ],
+                               [
+                                       'wl_user' => [ 2, 3 ],
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                               ]
+                       );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $this->assertEquals(
+                       [ 2, 3 ],
+                       $store->updateNotificationTimestamp(
+                               $this->getMockNonAnonUserWithId( 1 ),
+                               new TitleValue( 0, 'SomeDbKey' ),
+                               '20151212010101'
+                       )
+               );
+       }
+
+       public function testUpdateNotificationTimestamp_noWatchers() {
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with(
+                               [ 'watchlist' ],
+                               [ 'wl_user' ],
+                               [
+                                       'wl_user != 1',
+                                       'wl_namespace' => 0,
+                                       'wl_title' => 'SomeDbKey',
+                                       'wl_notificationtimestamp IS NULL'
+                               ]
+                       )
+                       ->will(
+                               $this->returnValue( [] )
+                       );
+               $mockDb->expects( $this->never() )
+                       ->method( 'onTransactionIdle' );
+               $mockDb->expects( $this->never() )
+                       ->method( 'update' );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->never() )->method( 'set' );
+               $mockCache->expects( $this->never() )->method( 'get' );
+               $mockCache->expects( $this->never() )->method( 'delete' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               $watchers = $store->updateNotificationTimestamp(
+                       $this->getMockNonAnonUserWithId( 1 ),
+                       new TitleValue( 0, 'SomeDbKey' ),
+                       '20151212010101'
+               );
+               $this->assertInternalType( 'array', $watchers );
+               $this->assertEmpty( $watchers );
+       }
+
+       public function testUpdateNotificationTimestamp_clearsCachedItems() {
+               $user = $this->getMockNonAnonUserWithId( 1 );
+               $titleValue = new TitleValue( 0, 'SomeDbKey' );
+
+               $mockDb = $this->getMockDb();
+               $mockDb->expects( $this->once() )
+                       ->method( 'selectRow' )
+                       ->will( $this->returnValue(
+                               $this->getFakeRow( [ 'wl_notificationtimestamp' => '20151212010101' ] )
+                       ) );
+               $mockDb->expects( $this->once() )
+                       ->method( 'select' )
+                       ->will(
+                               $this->returnValue( [
+                                       $this->getFakeRow( [ 'wl_user' => '2' ] ),
+                                       $this->getFakeRow( [ 'wl_user' => '3' ] )
+                               ] )
+                       );
+               $mockDb->expects( $this->once() )
+                       ->method( 'onTransactionIdle' )
+                       ->with( $this->isType( 'callable' ) )
+                       ->will( $this->returnCallback( function( $callable ) {
+                               $callable();
+                       } ) );
+               $mockDb->expects( $this->once() )
+                       ->method( 'update' );
+
+               $mockCache = $this->getMockCache();
+               $mockCache->expects( $this->once() )
+                       ->method( 'set' )
+                       ->with( '0:SomeDbKey:1', $this->isType( 'object' ) );
+               $mockCache->expects( $this->once() )
+                       ->method( 'get' )
+                       ->with( '0:SomeDbKey:1' );
+               $mockCache->expects( $this->once() )
+                       ->method( 'delete' )
+                       ->with( '0:SomeDbKey:1' );
+
+               $store = new WatchedItemStore(
+                       $this->getMockLoadBalancer( $mockDb ),
+                       $mockCache
+               );
+
+               // This will add the item to the cache
+               $store->getWatchedItem( $user, $titleValue );
+
+               $store->updateNotificationTimestamp(
+                       $this->getMockNonAnonUserWithId( 1 ),
+                       $titleValue,
+                       '20151212010101'
+               );
+       }
+
+}
diff --git a/tests/phpunit/includes/WatchedItemUnitTest.php b/tests/phpunit/includes/WatchedItemUnitTest.php
new file mode 100644 (file)
index 0000000..58984cf
--- /dev/null
@@ -0,0 +1,191 @@
+<?php
+
+/**
+ * @author Addshore
+ *
+ * @covers WatchedItem
+ */
+class WatchedItemUnitTest extends PHPUnit_Framework_TestCase {
+
+       public function provideUserTitleTimestamp() {
+               return [
+                       [ User::newFromId( 111 ), Title::newFromText( 'SomeTitle' ), null ],
+                       [ User::newFromId( 111 ), Title::newFromText( 'SomeTitle' ), '20150101010101' ],
+                       [ User::newFromId( 111 ), new TitleValue( 0, 'TVTitle', 'frag' ), '20150101010101' ],
+               ];
+       }
+
+       /**
+        * @return PHPUnit_Framework_MockObject_MockObject|WatchedItemStore
+        */
+       private function getMockWatchedItemStore() {
+               return $this->getMockBuilder( WatchedItemStore::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+       }
+
+       /**
+        * @dataProvider provideUserTitleTimestamp
+        */
+       public function testConstruction( $user, LinkTarget $linkTarget, $notifTimestamp ) {
+               $item = new WatchedItem( $user, $linkTarget, $notifTimestamp );
+
+               $this->assertSame( $user, $item->getUser() );
+               $this->assertSame( $linkTarget, $item->getLinkTarget() );
+               $this->assertSame( $notifTimestamp, $item->getNotificationTimestamp() );
+
+               // The below tests the internal WatchedItem::getTitle method
+               $this->assertInstanceOf( 'Title', $item->getTitle() );
+               $this->assertSame( $linkTarget->getDBkey(), $item->getTitle()->getDBkey() );
+               $this->assertSame( $linkTarget->getFragment(), $item->getTitle()->getFragment() );
+               $this->assertSame( $linkTarget->getNamespace(), $item->getTitle()->getNamespace() );
+               $this->assertSame( $linkTarget->getText(), $item->getTitle()->getText() );
+       }
+
+       /**
+        * @dataProvider provideUserTitleTimestamp
+        */
+       public function testFromUserTitle( $user, $linkTarget, $timestamp ) {
+               $store = $this->getMockWatchedItemStore();
+               $store->expects( $this->once() )
+                       ->method( 'loadWatchedItem' )
+                       ->with( $user, $linkTarget )
+                       ->will( $this->returnValue( new WatchedItem( $user, $linkTarget, $timestamp ) ) );
+               $scopedOverride = WatchedItemStore::overrideDefaultInstance( $store );
+
+               $item = WatchedItem::fromUserTitle( $user, $linkTarget, User::IGNORE_USER_RIGHTS );
+
+               $this->assertEquals( $user, $item->getUser() );
+               $this->assertEquals( $linkTarget, $item->getLinkTarget() );
+               $this->assertEquals( $timestamp, $item->getNotificationTimestamp() );
+
+               ScopedCallback::consume( $scopedOverride );
+       }
+
+       /**
+        * @dataProvider provideUserTitleTimestamp
+        */
+       public function testResetNotificationTimestamp( $user, $linkTarget, $timestamp ) {
+               $force = 'XXX';
+               $oldid = 999;
+
+               $store = $this->getMockWatchedItemStore();
+               $store->expects( $this->once() )
+                       ->method( 'resetNotificationTimestamp' )
+                       ->with( $user, $this->isInstanceOf( Title::class ), $force, $oldid )
+                       ->will( $this->returnCallback(
+                               function ( $user, Title $title, $force, $oldid ) use ( $linkTarget ) {
+                                       /** @var LinkTarget $linkTarget */
+                                       $this->assertInstanceOf( 'Title', $title );
+                                       $this->assertSame( $linkTarget->getDBkey(), $title->getDBkey() );
+                                       $this->assertSame( $linkTarget->getFragment(), $title->getFragment() );
+                                       $this->assertSame( $linkTarget->getNamespace(), $title->getNamespace() );
+                                       $this->assertSame( $linkTarget->getText(), $title->getText() );
+
+                                       return true;
+                               }
+                       ) );
+               $scopedOverride = WatchedItemStore::overrideDefaultInstance( $store );
+
+               $item = new WatchedItem( $user, $linkTarget, $timestamp );
+               $item->resetNotificationTimestamp( $force, $oldid );
+
+               ScopedCallback::consume( $scopedOverride );
+       }
+
+       public function testAddWatch() {
+               $title = Title::newFromText( 'SomeTitle' );
+               $timestamp = null;
+               $checkRights = 0;
+
+               /** @var User|PHPUnit_Framework_MockObject_MockObject $user */
+               $user = $this->getMock( User::class );
+               $user->expects( $this->once() )
+                       ->method( 'addWatch' )
+                       ->with( $title, $checkRights );
+
+               $item = new WatchedItem( $user, $title, $timestamp, $checkRights );
+               $this->assertTrue( $item->addWatch() );
+       }
+
+       public function testRemoveWatch() {
+               $title = Title::newFromText( 'SomeTitle' );
+               $timestamp = null;
+               $checkRights = 0;
+
+               /** @var User|PHPUnit_Framework_MockObject_MockObject $user */
+               $user = $this->getMock( User::class );
+               $user->expects( $this->once() )
+                       ->method( 'removeWatch' )
+                       ->with( $title, $checkRights );
+
+               $item = new WatchedItem( $user, $title, $timestamp, $checkRights );
+               $this->assertTrue( $item->removeWatch() );
+       }
+
+       public function provideBooleans() {
+               return [
+                       [ true ],
+                       [ false ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideBooleans
+        */
+       public function testIsWatched( $returnValue ) {
+               $title = Title::newFromText( 'SomeTitle' );
+               $timestamp = null;
+               $checkRights = 0;
+
+               /** @var User|PHPUnit_Framework_MockObject_MockObject $user */
+               $user = $this->getMock( User::class );
+               $user->expects( $this->once() )
+                       ->method( 'isWatched' )
+                       ->with( $title, $checkRights )
+                       ->will( $this->returnValue( $returnValue ) );
+
+               $item = new WatchedItem( $user, $title, $timestamp, $checkRights );
+               $this->assertEquals( $returnValue, $item->isWatched() );
+       }
+
+       public function testDuplicateEntries() {
+               $oldTitle = Title::newFromText( 'OldTitle' );
+               $newTitle = Title::newFromText( 'NewTitle' );
+
+               $store = $this->getMockWatchedItemStore();
+               $store->expects( $this->once() )
+                       ->method( 'duplicateAllAssociatedEntries' )
+                       ->with( $oldTitle, $newTitle );
+               $scopedOverride = WatchedItemStore::overrideDefaultInstance( $store );
+
+               WatchedItem::duplicateEntries( $oldTitle, $newTitle );
+
+               ScopedCallback::consume( $scopedOverride );
+       }
+
+       public function testBatchAddWatch() {
+               /** @var WatchedItem[] $items */
+               $items = [
+                       new WatchedItem( User::newFromId( 1 ), new TitleValue( 0, 'Title1' ), null ),
+                       new WatchedItem( User::newFromId( 3 ), Title::newFromText( 'Title2' ), '20150101010101' ),
+               ];
+
+               $userTargetCombinations = [];
+               foreach ( $items as $item ) {
+                       $userTargetCombinations[] = [ $item->getUser(), $item->getTitle()->getSubjectPage() ];
+                       $userTargetCombinations[] = [ $item->getUser(), $item->getTitle()->getTalkPage() ];
+               }
+
+               $store = $this->getMockWatchedItemStore();
+               $store->expects( $this->once() )
+                       ->method( 'addWatchBatch' )
+                       ->with( $userTargetCombinations );
+               $scopedOverride = WatchedItemStore::overrideDefaultInstance( $store );
+
+               WatchedItem::batchAddWatch( $items );
+
+               ScopedCallback::consume( $scopedOverride );
+       }
+
+}
index c5314cb..7b82d68 100644 (file)
@@ -152,7 +152,7 @@ class XmlTest extends MediaWikiTestCase {
 
                $this->assertEquals(
                        '<label for="year">From year (and earlier):</label> ' .
-                               '<input id="year" maxlength="4" size="7" type="number" value="2011" name="year" /> ' .
+                               '<input id="year" maxlength="4" size="7" type="number" value="2011" name="year"/> ' .
                                '<label for="month">From month (and earlier):</label> ' .
                                '<select name="month" id="month" class="mw-month-selector">' .
                                '<option value="-1">all</option>' . "\n" .
@@ -173,7 +173,7 @@ class XmlTest extends MediaWikiTestCase {
                );
                $this->assertEquals(
                        '<label for="year">From year (and earlier):</label> ' .
-                               '<input id="year" maxlength="4" size="7" type="number" value="2011" name="year" /> ' .
+                               '<input id="year" maxlength="4" size="7" type="number" value="2011" name="year"/> ' .
                                '<label for="month">From month (and earlier):</label> ' .
                                '<select name="month" id="month" class="mw-month-selector">' .
                                '<option value="-1">all</option>' . "\n" .
@@ -207,7 +207,7 @@ class XmlTest extends MediaWikiTestCase {
 
                $this->assertEquals(
                        '<label for="year">From year (and earlier):</label> ' .
-                               '<input id="year" maxlength="4" size="7" type="number" name="year" /> ' .
+                               '<input id="year" maxlength="4" size="7" type="number" name="year"/> ' .
                                '<label for="month">From month (and earlier):</label> ' .
                                '<select name="month" id="month" class="mw-month-selector">' .
                                '<option value="-1">all</option>' . "\n" .
index 462c715..4a30292 100644 (file)
@@ -187,7 +187,7 @@ class ActionTest extends MediaWikiTestCase {
 class DummyAction extends Action {
 
        public function getName() {
-               return get_called_class();
+               return static::class;
        }
 
        public function show() {
index f51997c..d2dccf9 100644 (file)
@@ -17,7 +17,7 @@ class ApiBlockTest extends ApiTestCase {
                return $this->getTokenList( self::$users['sysop'] );
        }
 
-       function addDBData() {
+       function addDBDataOnce() {
                $user = User::newFromName( 'UTApiBlockee' );
 
                if ( $user->getId() == 0 ) {
index 00701db..3052915 100644 (file)
@@ -27,7 +27,7 @@ class ApiLoginTest extends ApiTestCase {
                global $wgServer;
 
                $user = self::$users['sysop'];
-               $user->getUser()->logOut();
+               $user->getUser()->logout();
 
                if ( !isset( $wgServer ) ) {
                        $this->markTestIncomplete( 'This test needs $wgServer to be set in LocalSettings.php' );
@@ -72,7 +72,7 @@ class ApiLoginTest extends ApiTestCase {
                }
 
                $user = self::$users['sysop'];
-               $user->getUser()->logOut();
+               $user->getUser()->logout();
 
                $ret = $this->doApiRequest( [
                                "action" => "login",
@@ -153,7 +153,7 @@ class ApiLoginTest extends ApiTestCase {
                $this->assertNotEquals( false, $serverName );
                $serializedCookie = $cj->serializeToHttpRequest( $wgScriptPath, $serverName );
                $this->assertNotEquals( '', $serializedCookie );
-               $this->assertRegexp(
+               $this->assertRegExp(
                        '/_session=[^;]*; .*UserID=[0-9]*; .*UserName=' . $user->userName . '; .*Token=/',
                        $serializedCookie
                );
index bacc061..873917e 100644 (file)
@@ -137,7 +137,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $this->assertFalse( $exception );
 
                // clean up
-               $this->deleteFileByFilename( $fileName );
+               $this->deleteFileByFileName( $fileName );
        }
 
        /**
@@ -173,7 +173,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $this->assertTrue( $exception );
 
                // clean up
-               $this->deleteFileByFilename( $fileName );
+               $this->deleteFileByFileName( $fileName );
        }
 
        /**
@@ -243,7 +243,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $this->assertFalse( $exception );
 
                // clean up
-               $this->deleteFileByFilename( $fileName );
+               $this->deleteFileByFileName( $fileName );
        }
 
        /**
@@ -322,8 +322,8 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $this->assertFalse( $exception );
 
                // clean up
-               $this->deleteFileByFilename( $fileNames[0] );
-               $this->deleteFileByFilename( $fileNames[1] );
+               $this->deleteFileByFileName( $fileNames[0] );
+               $this->deleteFileByFileName( $fileNames[1] );
        }
 
        /**
@@ -406,7 +406,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $this->assertFalse( $exception, "No UsageException exception." );
 
                // clean up
-               $this->deleteFileByFilename( $fileName );
+               $this->deleteFileByFileName( $fileName );
        }
 
        /**
@@ -550,6 +550,6 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $this->assertFalse( $exception );
 
                // clean up
-               $this->deleteFileByFilename( $fileName );
+               $this->deleteFileByFileName( $fileName );
        }
 }
index 62e175b..78cb7fb 100644 (file)
@@ -230,7 +230,7 @@ class RandomImageGenerator {
                        $points[] = $point['x'] . ',' . $point['y'];
                }
 
-               return join( " ", $points );
+               return implode( " ", $points );
        }
 
        /**
@@ -425,7 +425,7 @@ class RandomImageGenerator {
                        $components[] = mt_rand( 0, 255 );
                }
 
-               return 'rgb(' . join( ', ', $components ) . ')';
+               return 'rgb(' . implode( ', ', $components ) . ')';
        }
 
        /**
index 1f4e26c..9942a0f 100644 (file)
@@ -10,7 +10,7 @@ class UserWrapper {
                $this->password = $password;
 
                $this->user = User::newFromName( $this->userName );
-               if ( !$this->user->getID() ) {
+               if ( !$this->user->getId() ) {
                        $this->user = User::createNew( $this->userName, [
                                "email" => "test@example.com",
                                "real_name" => "Test User" ] );
index 9ba4587..e5971b4 100644 (file)
@@ -36,9 +36,10 @@ class ApiQueryBasicTest extends ApiQueryTestBase {
 
        /**
         * Create a set of pages. These must not change, otherwise the tests might give wrong results.
-        * @see MediaWikiTestCase::addDBData()
+        *
+*@see MediaWikiTestCase::addDBDataOnce()
         */
-       function addDBData() {
+       function addDBDataOnce() {
                try {
                        if ( Title::newFromText( 'AQBT-All' )->exists() ) {
                                return;
index 8f11a51..944d31c 100644 (file)
@@ -29,9 +29,10 @@ class ApiQueryContinue2Test extends ApiQueryContinueTestBase {
 
        /**
         * Create a set of pages. These must not change, otherwise the tests might give wrong results.
-        * @see MediaWikiTestCase::addDBData()
+        *
+*@see MediaWikiTestCase::addDBDataOnce()
         */
-       function addDBData() {
+       function addDBDataOnce() {
                try {
                        $this->editPage( 'AQCT73462-A', '**AQCT73462-A**  [[AQCT73462-B]] [[AQCT73462-C]]' );
                        $this->editPage( 'AQCT73462-B', '[[AQCT73462-A]]  **AQCT73462-B** [[AQCT73462-C]]' );
index a6269ed..b31627b 100644 (file)
@@ -33,9 +33,10 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
 
        /**
         * Create a set of pages. These must not change, otherwise the tests might give wrong results.
-        * @see MediaWikiTestCase::addDBData()
+        *
+*@see MediaWikiTestCase::addDBDataOnce()
         */
-       function addDBData() {
+       function addDBDataOnce() {
                try {
                        $this->editPage( 'Template:AQCT-T1', '**Template:AQCT-T1**' );
                        $this->editPage( 'Template:AQCT-T2', '**Template:AQCT-T2**' );
index a441b3d..e329f8d 100644 (file)
@@ -6,12 +6,12 @@
  */
 class GenderCacheTest extends MediaWikiLangTestCase {
 
-       function addDBData() {
+       function addDBDataOnce() {
                // ensure the correct default gender
                $this->mergeMwGlobalArrayValue( 'wgDefaultUserOptions', [ 'gender' => 'unknown' ] );
 
                $user = User::newFromName( 'UTMale' );
-               if ( $user->getID() == 0 ) {
+               if ( $user->getId() == 0 ) {
                        $user->addToDatabase();
                        TestUser::setPasswordForUser( $user, 'UTMalePassword' );
                }
@@ -20,7 +20,7 @@ class GenderCacheTest extends MediaWikiLangTestCase {
                $user->saveSettings();
 
                $user = User::newFromName( 'UTFemale' );
-               if ( $user->getID() == 0 ) {
+               if ( $user->getId() == 0 ) {
                        $user->addToDatabase();
                        TestUser::setPasswordForUser( $user, 'UTFemalePassword' );
                }
@@ -29,7 +29,7 @@ class GenderCacheTest extends MediaWikiLangTestCase {
                $user->saveSettings();
 
                $user = User::newFromName( 'UTDefaultGender' );
-               if ( $user->getID() == 0 ) {
+               if ( $user->getId() == 0 ) {
                        $user->addToDatabase();
                        TestUser::setPasswordForUser( $user, 'UTDefaultGenderPassword' );
                }
index 7d62b01..697eb2d 100644 (file)
@@ -15,7 +15,7 @@ class LocalisationCacheTest extends MediaWikiTestCase {
        }
 
        /**
-        * @return PHPUnit_Framework_MockObject_MockObject|LocalisationCache
+        * @return LocalisationCache
         */
        protected function getMockLocalisationCache() {
                global $IP;
index ddd74e3..bd744c0 100644 (file)
@@ -19,17 +19,11 @@ class MessageCacheTest extends MediaWikiLangTestCase {
        protected function configureLanguages() {
                // for the test, we need the content language to be anything but English,
                // let's choose e.g. German (de)
-               $langCode = 'de';
-               $langObj = Language::factory( $langCode );
-
-               $this->setMwGlobals( [
-                       'wgLanguageCode' => $langCode,
-                       'wgLang' => $langObj,
-                       'wgContLang' => $langObj,
-               ] );
+               $this->setUserLang( 'de' );
+               $this->setContentLang( 'de' );
        }
 
-       function addDBData() {
+       function addDBDataOnce() {
                $this->configureLanguages();
 
                // Set up messages and fallbacks ab -> ru -> de
index 70da12e..6369b33 100644 (file)
@@ -24,6 +24,16 @@ class CategoryMembershipChangeTest extends MediaWikiLangTestCase {
         */
        private static $mockRecentChange;
 
+       /**
+        * @var Revision
+        */
+       private static $pageRev = null;
+
+       /**
+        * @var string
+        */
+       private static $pageName = 'CategoryMembershipChangeTestPage';
+
        public static function newForCategorizationCallback() {
                self::$lastNotifyArgs = func_get_args();
                self::$notifyCallCounter += 1;
@@ -34,10 +44,20 @@ class CategoryMembershipChangeTest extends MediaWikiLangTestCase {
                parent::setUp();
                self::$notifyCallCounter = 0;
                self::$mockRecentChange = self::getMock( 'RecentChange' );
+
+               $this->setContentLang( 'qqx' );
+       }
+
+       public function addDBDataOnce() {
+               $info = $this->insertPage( self::$pageName );
+               $title = $info['title'];
+
+               $page = WikiPage::factory( $title );
+               self::$pageRev = $page->getRevision();
        }
 
        private function newChange( Revision $revision = null ) {
-               $change = new CategoryMembershipChange( Title::newFromText( 'UTPage' ), $revision );
+               $change = new CategoryMembershipChange( Title::newFromText( self::$pageName ), $revision );
                $change->overrideNewForCategorizationCallback(
                        'CategoryMembershipChangeTest::newForCategorizationCallback'
                );
@@ -53,9 +73,10 @@ class CategoryMembershipChangeTest extends MediaWikiLangTestCase {
 
                $this->assertTrue( strlen( self::$lastNotifyArgs[0] ) === 14 );
                $this->assertEquals( 'Category:CategoryName', self::$lastNotifyArgs[1]->getPrefixedText() );
-               $this->assertEquals( 'MediaWiki automatic change', self::$lastNotifyArgs[2]->getName() );
-               $this->assertEquals( '[[:UTPage]] added to category', self::$lastNotifyArgs[3] );
-               $this->assertEquals( 'UTPage', self::$lastNotifyArgs[4]->getPrefixedText() );
+               $this->assertEquals( '(autochange-username)', self::$lastNotifyArgs[2]->getName() );
+               $this->assertEquals( '(recentchanges-page-added-to-category: ' . self::$pageName . ', 0)',
+                       self::$lastNotifyArgs[3] );
+               $this->assertEquals( self::$pageName, self::$lastNotifyArgs[4]->getPrefixedText() );
                $this->assertEquals( 0, self::$lastNotifyArgs[5] );
                $this->assertEquals( 0, self::$lastNotifyArgs[6] );
                $this->assertEquals( null, self::$lastNotifyArgs[7] );
@@ -72,9 +93,10 @@ class CategoryMembershipChangeTest extends MediaWikiLangTestCase {
 
                $this->assertTrue( strlen( self::$lastNotifyArgs[0] ) === 14 );
                $this->assertEquals( 'Category:CategoryName', self::$lastNotifyArgs[1]->getPrefixedText() );
-               $this->assertEquals( 'MediaWiki automatic change', self::$lastNotifyArgs[2]->getName() );
-               $this->assertEquals( '[[:UTPage]] removed from category', self::$lastNotifyArgs[3] );
-               $this->assertEquals( 'UTPage', self::$lastNotifyArgs[4]->getPrefixedText() );
+               $this->assertEquals( '(autochange-username)', self::$lastNotifyArgs[2]->getName() );
+               $this->assertEquals( '(recentchanges-page-removed-from-category: ' . self::$pageName . ', 0)',
+                       self::$lastNotifyArgs[3] );
+               $this->assertEquals( self::$pageName, self::$lastNotifyArgs[4]->getPrefixedText() );
                $this->assertEquals( 0, self::$lastNotifyArgs[5] );
                $this->assertEquals( 0, self::$lastNotifyArgs[6] );
                $this->assertEquals( null, self::$lastNotifyArgs[7] );
@@ -84,7 +106,7 @@ class CategoryMembershipChangeTest extends MediaWikiLangTestCase {
        }
 
        public function testChangeAddedWithRev() {
-               $revision = Revision::newFromId( Title::newFromText( 'UTPage' )->getLatestRevID() );
+               $revision = Revision::newFromId( Title::newFromText( self::$pageName )->getLatestRevID() );
                $change = $this->newChange( $revision );
                $change->triggerCategoryAddedNotification( Title::newFromText( 'CategoryName', NS_CATEGORY ) );
 
@@ -93,9 +115,10 @@ class CategoryMembershipChangeTest extends MediaWikiLangTestCase {
                $this->assertTrue( strlen( self::$lastNotifyArgs[0] ) === 14 );
                $this->assertEquals( 'Category:CategoryName', self::$lastNotifyArgs[1]->getPrefixedText() );
                $this->assertEquals( 'UTSysop', self::$lastNotifyArgs[2]->getName() );
-               $this->assertEquals( '[[:UTPage]] added to category', self::$lastNotifyArgs[3] );
-               $this->assertEquals( 'UTPage', self::$lastNotifyArgs[4]->getPrefixedText() );
-               $this->assertEquals( 0, self::$lastNotifyArgs[5] );
+               $this->assertEquals( '(recentchanges-page-added-to-category: ' . self::$pageName . ', 0)',
+                       self::$lastNotifyArgs[3] );
+               $this->assertEquals( self::$pageName, self::$lastNotifyArgs[4]->getPrefixedText() );
+               $this->assertEquals( self::$pageRev->getParentId(), self::$lastNotifyArgs[5] );
                $this->assertEquals( $revision->getId(), self::$lastNotifyArgs[6] );
                $this->assertEquals( null, self::$lastNotifyArgs[7] );
                $this->assertEquals( 0, self::$lastNotifyArgs[8] );
@@ -104,7 +127,7 @@ class CategoryMembershipChangeTest extends MediaWikiLangTestCase {
        }
 
        public function testChangeRemovedWithRev() {
-               $revision = Revision::newFromId( Title::newFromText( 'UTPage' )->getLatestRevID() );
+               $revision = Revision::newFromId( Title::newFromText( self::$pageName )->getLatestRevID() );
                $change = $this->newChange( $revision );
                $change->triggerCategoryRemovedNotification( Title::newFromText( 'CategoryName', NS_CATEGORY ) );
 
@@ -113,9 +136,10 @@ class CategoryMembershipChangeTest extends MediaWikiLangTestCase {
                $this->assertTrue( strlen( self::$lastNotifyArgs[0] ) === 14 );
                $this->assertEquals( 'Category:CategoryName', self::$lastNotifyArgs[1]->getPrefixedText() );
                $this->assertEquals( 'UTSysop', self::$lastNotifyArgs[2]->getName() );
-               $this->assertEquals( '[[:UTPage]] removed from category', self::$lastNotifyArgs[3] );
-               $this->assertEquals( 'UTPage', self::$lastNotifyArgs[4]->getPrefixedText() );
-               $this->assertEquals( 0, self::$lastNotifyArgs[5] );
+               $this->assertEquals( '(recentchanges-page-removed-from-category: ' . self::$pageName . ', 0)',
+                       self::$lastNotifyArgs[3] );
+               $this->assertEquals( self::$pageName, self::$lastNotifyArgs[4]->getPrefixedText() );
+               $this->assertEquals( self::$pageRev->getParentId(), self::$lastNotifyArgs[5] );
                $this->assertEquals( $revision->getId(), self::$lastNotifyArgs[6] );
                $this->assertEquals( null, self::$lastNotifyArgs[7] );
                $this->assertEquals( 0, self::$lastNotifyArgs[8] );
index 193034f..5746a61 100644 (file)
@@ -29,8 +29,8 @@ class OldChangesListTest extends MediaWikiLangTestCase {
 
                $this->setMwGlobals( [
                        'wgArticlePath' => '/wiki/$1',
-                       'wgLang' => Language::factory( 'qqx' )
                ] );
+               $this->setUserLang( 'qqx' );
        }
 
        /**
@@ -108,13 +108,13 @@ class OldChangesListTest extends MediaWikiLangTestCase {
                $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
 
                $this->assertContains(
-                       "<abbr class='newpage' title='(recentchanges-label-newpage)'>(newpageletter)</abbr>",
+                       '<abbr class="newpage" title="(recentchanges-label-newpage)">(newpageletter)</abbr>',
                        $line,
                        'new page flag'
                );
 
                $this->assertContains(
-                       "<abbr class='botedit' title='(recentchanges-label-bot)'>(boteditletter)</abbr>",
+                       '<abbr class="botedit" title="(recentchanges-label-bot)">(boteditletter)</abbr>',
                        $line,
                        'bot flag'
                );
@@ -197,7 +197,7 @@ class OldChangesListTest extends MediaWikiLangTestCase {
        private function getContext() {
                $user = $this->getTestUser();
                $context = $this->testRecentChangesHelper->getTestContext( $user );
-               $context->setLanguage( Language::factory( 'qqx' ) );
+               $context->setLanguage( 'qqx' );
 
                return $context;
        }
index 128e067..faa1dcc 100644 (file)
@@ -154,7 +154,7 @@ class TestRecentChangesHelper {
 
        public function getTestContext( User $user ) {
                $context = new RequestContext();
-               $context->setLanguage( Language::factory( 'en' ) );
+               $context->setLanguage( 'en' );
 
                $context->setUser( $user );
 
index 9c17c3e..91f27fb 100644 (file)
@@ -350,6 +350,11 @@ class ContentHandlerTest extends MediaWikiTestCase {
        }
        */
 
+       public function testSupportsCategories() {
+               $handler = new DummyContentHandlerForTesting( CONTENT_MODEL_WIKITEXT );
+               $this->assertTrue( $handler->supportsCategories(), 'content model supports categories' );
+       }
+
        public function testSupportsDirectEditing() {
                $handler = new DummyContentHandlerForTesting( CONTENT_MODEL_JSON );
                $this->assertFalse( $handler->supportsDirectEditing(), 'direct editing is not supported' );
index c7fba50..32e71e0 100644 (file)
@@ -91,7 +91,7 @@ class RequestContextTest extends MediaWikiTestCase {
                        MediaWiki\Session\SessionManager::getGlobalSession()->getId(),
                        "Correct context session ID."
                );
-               if ( \MediaWiki\Session\PhpSessionHandler::isEnabled() ) {
+               if ( \MediaWiki\Session\PHPSessionHandler::isEnabled() ) {
                        $this->assertEquals( $sinfo['sessionId'], session_id(), "Correct context session ID." );
                } else {
                        $this->assertEquals( $oldSessionId, session_id(), "Unchanged PHP session ID." );
index 8e8002c..168b2c6 100644 (file)
@@ -247,14 +247,64 @@ class DatabaseMysqlBaseTest extends MediaWikiTestCase {
                ];
        }
 
-       function testMasterPos() {
-               $pos1 = new MySQLMasterPos( 'db1034-bin.000976', '843431247' );
-               $pos2 = new MySQLMasterPos( 'db1034-bin.000976', '843431248' );
-
-               $this->assertTrue( $pos1->hasReached( $pos1 ) );
-               $this->assertTrue( $pos2->hasReached( $pos2 ) );
-               $this->assertTrue( $pos2->hasReached( $pos1 ) );
-               $this->assertFalse( $pos1->hasReached( $pos2 ) );
+       /**
+        * @dataProvider provideComparePositions
+        */
+       function testHasReached( MySQLMasterPos $lowerPos, MySQLMasterPos $higherPos ) {
+               $this->assertTrue( $higherPos->hasReached( $lowerPos ) );
+               $this->assertTrue( $higherPos->hasReached( $higherPos ) );
+               $this->assertTrue( $lowerPos->hasReached( $lowerPos ) );
+               $this->assertFalse( $lowerPos->hasReached( $higherPos ) );
+       }
+
+       function provideComparePositions() {
+               return [
+                       [
+                               new MySQLMasterPos( 'db1034-bin.000976', '843431247' ),
+                               new MySQLMasterPos( 'db1034-bin.000976', '843431248' )
+                       ],
+                       [
+                               new MySQLMasterPos( 'db1034-bin.000976', '999' ),
+                               new MySQLMasterPos( 'db1034-bin.000976', '1000' )
+                       ],
+                       [
+                               new MySQLMasterPos( 'db1034-bin.000976', '999' ),
+                               new MySQLMasterPos( 'db1035-bin.000976', '1000' )
+                       ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideChannelPositions
+        */
+       function testChannelsMatch( MySQLMasterPos $pos1, MySQLMasterPos $pos2, $matches ) {
+               $this->assertEquals( $matches, $pos1->channelsMatch( $pos2 ) );
+               $this->assertEquals( $matches, $pos2->channelsMatch( $pos1 ) );
+       }
+
+       function provideChannelPositions() {
+               return [
+                       [
+                               new MySQLMasterPos( 'db1034-bin.000876', '44' ),
+                               new MySQLMasterPos( 'db1034-bin.000976', '74' ),
+                               true
+                       ],
+                       [
+                               new MySQLMasterPos( 'db1052-bin.000976', '999' ),
+                               new MySQLMasterPos( 'db1052-bin.000976', '1000' ),
+                               true
+                       ],
+                       [
+                               new MySQLMasterPos( 'db1066-bin.000976', '9999' ),
+                               new MySQLMasterPos( 'db1035-bin.000976', '10000' ),
+                               false
+                       ],
+                       [
+                               new MySQLMasterPos( 'db1066-bin.000976', '9999' ),
+                               new MySQLMasterPos( 'trump2016.000976', '10000' ),
+                               false
+                       ],
+               ];
        }
 
        /**
index 18de9be..80fb826 100644 (file)
@@ -330,7 +330,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
 
                foreach ( $versions as $version ) {
                        $versions = "upgrading from $version to $wgVersion";
-                       $db = $this->prepareDB( $version );
+                       $db = $this->prepareTestDB( $version );
                        $tables = $this->getTables( $db );
                        $this->assertEquals( $currentTables, $tables, "Different tables $versions" );
                        foreach ( $tables as $table ) {
@@ -389,7 +389,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
                $this->assertTrue( $db->close(), "closing database" );
        }
 
-       private function prepareDB( $version ) {
+       private function prepareTestDB( $version ) {
                static $maint = null;
                if ( $maint === null ) {
                        $maint = new FakeMaintenance();
index faad97b..37a28c3 100644 (file)
@@ -26,7 +26,7 @@ use Psr\Log\LogLevel;
 class LegacyLoggerTest extends MediaWikiTestCase {
 
        /**
-        * @covers LegacyLogger::interpolate
+        * @covers MediaWiki\Logger\LegacyLogger::interpolate
         * @dataProvider provideInterpolate
         */
        public function testInterpolate( $message, $context, $expect ) {
@@ -125,7 +125,7 @@ class LegacyLoggerTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers LegacyLogger::shouldEmit
+        * @covers MediaWiki\Logger\LegacyLogger::shouldEmit
         * @dataProvider provideShouldEmit
         */
        public function testShouldEmit( $level, $config, $expected ) {
index 206362f..0ee7d26 100644 (file)
@@ -26,7 +26,7 @@ use TestingAccessWrapper;
 class MonologSpiTest extends MediaWikiTestCase {
 
        /**
-        * @covers MonologSpi::mergeConfig
+        * @covers MediaWiki\Logger\MonologSpi::mergeConfig
         */
        public function testMergeConfig() {
                $base = [
index be23c4a..f33cf7e 100644 (file)
@@ -36,7 +36,7 @@ class LineFormatterTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers LineFormatter::normalizeException
+        * @covers MediaWiki\Logger\Monolog\LineFormatter::normalizeException
         */
        public function testNormalizeExceptionNoTrace() {
                $fixture = new LineFormatter();
@@ -55,7 +55,7 @@ class LineFormatterTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers LineFormatter::normalizeException
+        * @covers MediaWiki\Logger\Monolog\LineFormatter::normalizeException
         */
        public function testNormalizeExceptionTrace() {
                $fixture = new LineFormatter();
index 75af87e..ac75e55 100644 (file)
@@ -6,7 +6,7 @@
  * ^--- make sure temporary tables are used.
  */
 class LinksUpdateTest extends MediaWikiLangTestCase {
-       protected $testingPageId;
+       protected static $testingPageId;
 
        function __construct( $name = null, array $data = [], $dataName = '' ) {
                parent::__construct( $name, $data, $dataName );
@@ -45,9 +45,9 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
                $this->setMwGlobals( 'wgRCWatchCategoryMembership', true );
        }
 
-       public function addDBData() {
+       public function addDBDataOnce() {
                $res = $this->insertPage( 'Testing' );
-               $this->testingPageId = $res['id'];
+               self::$testingPageId = $res['id'];
                $this->insertPage( 'Some_other_page' );
                $this->insertPage( 'Template:TestingTemplate' );
        }
@@ -68,7 +68,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
        public function testUpdate_pagelinks() {
                /** @var Title $t */
                /** @var ParserOutput $po */
-               list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", $this->testingPageId );
+               list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", self::$testingPageId );
 
                $po->addLink( Title::newFromText( "Foo" ) );
                $po->addLink( Title::newFromText( "Special:Foo" ) ); // special namespace should be ignored
@@ -81,7 +81,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
                        'pagelinks',
                        'pl_namespace,
                        pl_title',
-                       'pl_from = ' . $this->testingPageId,
+                       'pl_from = ' . self::$testingPageId,
                        [ [ NS_MAIN, 'Foo' ] ]
                );
                $this->assertArrayEquals( [
@@ -100,7 +100,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
                        'pagelinks',
                        'pl_namespace,
                        pl_title',
-                       'pl_from = ' . $this->testingPageId,
+                       'pl_from = ' . self::$testingPageId,
                        [
                                [ NS_MAIN, 'Bar' ],
                                [ NS_TALK, 'Bar' ],
@@ -120,7 +120,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
         */
        public function testUpdate_externallinks() {
                /** @var ParserOutput $po */
-               list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", $this->testingPageId );
+               list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", self::$testingPageId );
 
                $po->addExternalLink( "http://testing.com/wiki/Foo" );
 
@@ -129,7 +129,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
                        $po,
                        'externallinks',
                        'el_to, el_index',
-                       'el_from = ' . $this->testingPageId,
+                       'el_from = ' . self::$testingPageId,
                        [
                                [ 'http://testing.com/wiki/Foo', 'http://com.testing./wiki/Foo' ],
                        ]
@@ -143,7 +143,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
                /** @var ParserOutput $po */
                $this->setMwGlobals( 'wgCategoryCollation', 'uppercase' );
 
-               list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", $this->testingPageId );
+               list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", self::$testingPageId );
 
                $po->addCategory( "Foo", "FOO" );
 
@@ -152,7 +152,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
                        $po,
                        'categorylinks',
                        'cl_to, cl_sortkey',
-                       'cl_from = ' . $this->testingPageId,
+                       'cl_from = ' . self::$testingPageId,
                        [ [ 'Foo', "FOO\nTESTING" ] ]
                );
        }
@@ -223,7 +223,11 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
                        $templateTitle,
                        $templatePage->getParserOutput( new ParserOptions() ),
                        Title::newFromText( 'Baz' ),
-                       [ [ 'Baz', '[[:Template:TestingTemplate]] and 2 pages added to category' ] ]
+                       [ [
+                               'Baz',
+                               '[[:Template:TestingTemplate]] and [[Special:WhatLinksHere/Template:TestingTemplate|2 pages]] '
+                               . 'added to category'
+                       ] ]
                );
        }
 
@@ -232,7 +236,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
         */
        public function testUpdate_iwlinks() {
                /** @var ParserOutput $po */
-               list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", $this->testingPageId );
+               list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", self::$testingPageId );
 
                $target = Title::makeTitleSafe( NS_MAIN, "Foo", '', 'linksupdatetest' );
                $po->addInterwikiLink( $target );
@@ -242,7 +246,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
                        $po,
                        'iwlinks',
                        'iwl_prefix, iwl_title',
-                       'iwl_from = ' . $this->testingPageId,
+                       'iwl_from = ' . self::$testingPageId,
                        [ [ 'linksupdatetest', 'Foo' ] ]
                );
        }
@@ -252,7 +256,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
         */
        public function testUpdate_templatelinks() {
                /** @var ParserOutput $po */
-               list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", $this->testingPageId );
+               list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", self::$testingPageId );
 
                $po->addTemplate( Title::newFromText( "Template:Foo" ), 23, 42 );
 
@@ -262,7 +266,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
                        'templatelinks',
                        'tl_namespace,
                        tl_title',
-                       'tl_from = ' . $this->testingPageId,
+                       'tl_from = ' . self::$testingPageId,
                        [ [ NS_TEMPLATE, 'Foo' ] ]
                );
        }
@@ -272,7 +276,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
         */
        public function testUpdate_imagelinks() {
                /** @var ParserOutput $po */
-               list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", $this->testingPageId );
+               list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", self::$testingPageId );
 
                $po->addImage( "Foo.png" );
 
@@ -281,7 +285,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
                        $po,
                        'imagelinks',
                        'il_to',
-                       'il_from = ' . $this->testingPageId,
+                       'il_from = ' . self::$testingPageId,
                        [ [ 'Foo.png' ] ]
                );
        }
@@ -295,7 +299,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
                ] );
 
                /** @var ParserOutput $po */
-               list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", $this->testingPageId );
+               list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", self::$testingPageId );
 
                $po->addLanguageLink( Title::newFromText( "en:Foo" )->getFullText() );
 
@@ -304,7 +308,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
                        $po,
                        'langlinks',
                        'll_lang, ll_title',
-                       'll_from = ' . $this->testingPageId,
+                       'll_from = ' . self::$testingPageId,
                        [ [ 'En', 'Foo' ] ]
                );
        }
@@ -316,7 +320,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
                global $wgPagePropsHaveSortkey;
 
                /** @var ParserOutput $po */
-               list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", $this->testingPageId );
+               list( $t, $po ) = $this->makeTitleAndParserOutput( "Testing", self::$testingPageId );
 
                $fields = [ 'pp_propname', 'pp_value' ];
                $expected = [];
@@ -349,7 +353,7 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
                }
 
                $this->assertLinksUpdate(
-                       $t, $po, 'page_props', $fields, 'pp_page = ' . $this->testingPageId, $expected );
+                       $t, $po, 'page_props', $fields, 'pp_page = ' . self::$testingPageId, $expected );
        }
 
        public function testUpdate_page_props_without_sortkey() {
index e7f3a21..90ccd1e 100644 (file)
@@ -22,7 +22,7 @@ class HttpErrorTest extends MediaWikiTestCase {
         */
        public function testGetHtml( array $expected, $content, $header ) {
                $httpError = new HttpError( 500, $content, $header );
-               $errorHtml = $httpError->getHtml();
+               $errorHtml = $httpError->getHTML();
 
                foreach ( $expected as $key => $html ) {
                        $this->assertContains( $html, $errorHtml, $key );
index 94c039c..0e87ffa 100644 (file)
@@ -19,9 +19,9 @@ class MWExceptionTest extends MediaWikiTestCase {
         * @dataProvider provideTextUseOutputPage
         * @covers MWException::useOutputPage
         */
-       public function testUseOutputPage( $expected, $wgLang, $wgFullyInitialised, $wgOut ) {
+       public function testUseOutputPage( $expected, $langObj, $wgFullyInitialised, $wgOut ) {
                $this->setMwGlobals( [
-                       'wgLang' => $wgLang,
+                       'wgLang' => $langObj,
                        'wgFullyInitialised' => $wgFullyInitialised,
                        'wgOut' => $wgOut,
                ] );
@@ -32,7 +32,7 @@ class MWExceptionTest extends MediaWikiTestCase {
 
        public function provideTextUseOutputPage() {
                return [
-                       // expected, wgLang, wgFullyInitialised, wgOut
+                       // expected, langObj, wgFullyInitialised, wgOut
                        [ false, null, null, null ],
                        [ false, $this->getMockLanguage(), null, null ],
                        [ false, $this->getMockLanguage(), true, null ],
@@ -52,9 +52,9 @@ class MWExceptionTest extends MediaWikiTestCase {
         * @dataProvider provideUseMessageCache
         * @covers MWException::useMessageCache
         */
-       public function testUseMessageCache( $expected, $wgLang ) {
+       public function testUseMessageCache( $expected, $langObj ) {
                $this->setMwGlobals( [
-                       'wgLang' => $wgLang,
+                       'wgLang' => $langObj,
                ] );
                $e = new MWException();
                $this->assertEquals( $expected, $e->useMessageCache() );
index bf59ab5..4aeddc6 100644 (file)
@@ -57,7 +57,7 @@ class FileBackendTest extends MediaWikiTestCase {
                        'name' => 'localtesting',
                        'lockManager' => LockManagerGroup::singleton()->get( 'fsLockManager' ),
                        'parallelize' => 'implicit',
-                       'wikiId' => wfWikiId() . wfRandomString(),
+                       'wikiId' => wfWikiID() . wfRandomString(),
                        'backends' => [
                                [
                                        'name' => 'localmultitesting1',
@@ -2431,7 +2431,7 @@ class FileBackendTest extends MediaWikiTestCase {
                $be = TestingAccessWrapper::newFromObject(
                        new FileBackendMultiWrite( [
                                'name' => 'localtesting',
-                               'wikiId' => wfWikiId() . mt_rand(),
+                               'wikiId' => wfWikiID() . mt_rand(),
                                'backends' => [
                                        [ // backend 0
                                                'name' => 'multitesting0',
@@ -2481,7 +2481,7 @@ class FileBackendTest extends MediaWikiTestCase {
                $be = TestingAccessWrapper::newFromObject(
                        new FileBackendMultiWrite( [
                                'name' => 'localtesting',
-                               'wikiId' => wfWikiId() . mt_rand(),
+                               'wikiId' => wfWikiID() . mt_rand(),
                                'backends' => [
                                        [ // backend 0
                                                'name' => 'multitesting0',
index 4f47f32..95ffb70 100644 (file)
@@ -27,17 +27,17 @@ class SwiftFileBackendTest extends MediaWikiTestCase {
        }
 
        /**
-        * @dataProvider provider_testSanitzeHdrs
-        * @covers SwiftFileBackend::sanitzeHdrs
+        * @dataProvider provider_testSanitizeHdrs
+        * @covers SwiftFileBackend::sanitizeHdrs
         * @covers SwiftFileBackend::getCustomHeaders
         */
-       public function testSanitzeHdrs( $raw, $sanitized ) {
+       public function testSanitizeHdrs( $raw, $sanitized ) {
                $hdrs = $this->backend->sanitizeHdrs( [ 'headers' => $raw ] );
 
                $this->assertEquals( $hdrs, $sanitized, 'sanitizeHdrs() has expected result' );
        }
 
-       public static function provider_testSanitzeHdrs() {
+       public static function provider_testSanitizeHdrs() {
                return [
                        [
                                [
index 77a7320..8366541 100644 (file)
@@ -120,7 +120,7 @@ class FileBackendDBRepoWrapperTest extends MediaWikiTestCase {
                        [],
                        [ [
                                'name' => $this->backendName,
-                               'wikiId' => wfWikiId()
+                               'wikiId' => wfWikiID()
                        ] ] );
 
                $wrapperMock = $this->getMock( 'FileBackendDBRepoWrapper',
index a7408f2..c5fd369 100644 (file)
@@ -137,7 +137,7 @@ class FileTest extends MediaWikiMediaTestCase {
         */
        public function testGetThumbnailSource( $data ) {
                $backendMock = $this->getMockBuilder( 'FSFileBackend' )
-                       ->setConstructorArgs( [ [ 'name' => 'backendMock', 'wikiId' => wfWikiId() ] ] )
+                       ->setConstructorArgs( [ [ 'name' => 'backendMock', 'wikiId' => wfWikiID() ] ] )
                        ->getMock();
 
                $repoMock = $this->getMockBuilder( 'FileRepo' )
@@ -247,7 +247,7 @@ class FileTest extends MediaWikiMediaTestCase {
                $this->setMwGlobals( 'wgThumbnailBuckets', $data['buckets'] );
 
                $backendMock = $this->getMockBuilder( 'FSFileBackend' )
-                       ->setConstructorArgs( [ [ 'name' => 'backendMock', 'wikiId' => wfWikiId() ] ] )
+                       ->setConstructorArgs( [ [ 'name' => 'backendMock', 'wikiId' => wfWikiID() ] ] )
                        ->getMock();
 
                $repoMock = $this->getMockBuilder( 'FileRepo' )
index 9c7040a..ffaa2c3 100644 (file)
@@ -20,7 +20,7 @@ class LocalFileTest extends MediaWikiTestCase {
                        'transformVia404' => false,
                        'backend' => new FSFileBackend( [
                                'name' => 'local-backend',
-                               'wikiId' => wfWikiId(),
+                               'wikiId' => wfWikiID(),
                                'containerPaths' => [
                                        'cont1' => "/testdir/local-backend/tempimages/cont1",
                                        'cont2' => "/testdir/local-backend/tempimages/cont2"
index 65ffa49..3c648f9 100644 (file)
@@ -52,6 +52,29 @@ class JobTest extends MediaWikiTestCase {
                                $this->getMockJob( [ $mockToStringObj ] ),
                                'someCommand  0={STRING_OBJ_VAL}'
                        ],
+                       [
+                               $this->getMockJob( [
+                                       "pages" => [
+                                               "932737" => [
+                                                       0,
+                                                       "Robert_James_Waller"
+                                               ]
+                                       ],
+                                       "rootJobSignature" => "45868e99bba89064e4483743ebb9b682ef95c1a7",
+                                       "rootJobTimestamp" => "20160309110158",
+                                       "masterPos" => [
+                                               "file" => "db1023-bin.001288",
+                                               "pos" => "308257743",
+                                               "asOfTime" => 1457521464.3814
+                                       ],
+                                       "triggeredRecursive" => true
+                               ] ),
+                               'someCommand  pages={"932737":[0,"Robert_James_Waller"]} ' .
+                               'rootJobSignature=45868e99bba89064e4483743ebb9b682ef95c1a7 ' .
+                               'rootJobTimestamp=20160309110158 masterPos=' .
+                               '{"file":"db1023-bin.001288","pos":"308257743","asOfTime":1457521464.3814} ' .
+                               'triggeredRecursive=1'
+                       ],
                ];
        }
 
diff --git a/tests/phpunit/includes/jobqueue/jobs/CategoryMembershipChangeJobTest.php b/tests/phpunit/includes/jobqueue/jobs/CategoryMembershipChangeJobTest.php
new file mode 100644 (file)
index 0000000..54178fe
--- /dev/null
@@ -0,0 +1,87 @@
+<?php
+
+/**
+ * @covers CategoryMembershipChangeJob
+ *
+ * @group JobQueue
+ * @group Database
+ *
+ * @licence GNU GPL v2+
+ * @author Addshore
+ */
+class CategoryMembershipChangeJobTest extends MediaWikiTestCase {
+
+       const TITLE_STRING = 'UTCatChangeJobPage';
+
+       /**
+        * @var Title
+        */
+       private $title;
+
+       public function setUp() {
+               parent::setUp();
+               $this->setMwGlobals( 'wgRCWatchCategoryMembership', true );
+               $this->setContentLang( 'qqx' );
+       }
+
+       public function addDBDataOnce() {
+               parent::addDBDataOnce();
+               $insertResult = $this->insertPage( self::TITLE_STRING, 'UT Content' );
+               $this->title = $insertResult['title'];
+       }
+
+       private function runJobs() {
+               JobQueueGroup::destroySingletons();
+               $jobs = new RunJobs;
+               $jobs->loadParamsAndArgs( null, [ 'quiet' => true ], null );
+               $jobs->execute();
+       }
+
+       /**
+        * @param string $text new page text
+        *
+        * @return int|null
+        */
+       private function editPageText( $text ) {
+               $page = WikiPage::factory( $this->title );
+               $editResult = $page->doEditContent(
+                       ContentHandler::makeContent( $text, $this->title ),
+                       __METHOD__
+               );
+               /** @var Revision $revision */
+               $revision = $editResult->value['revision'];
+               $this->runJobs();
+
+               return $revision->getId();
+       }
+
+       /**
+        * @param int $revId
+        *
+        * @return RecentChange|null
+        */
+       private function getCategorizeRecentChangeForRevId( $revId ) {
+               return RecentChange::newFromConds(
+                       [
+                               'rc_type' => RC_CATEGORIZE,
+                               'rc_this_oldid' => $revId,
+                       ],
+                       __METHOD__
+               );
+       }
+
+       public function testRun_normalCategoryAddedAndRemoved() {
+               $addedRevId = $this->editPageText( '[[Category:Normal]]' );
+               $removedRevId = $this->editPageText( 'Blank' );
+
+               $this->assertEquals(
+                       '(recentchanges-page-added-to-category: ' . self::TITLE_STRING . ', 0)',
+                       $this->getCategorizeRecentChangeForRevId( $addedRevId )->getAttribute( 'rc_comment' )
+               );
+               $this->assertEquals(
+                       '(recentchanges-page-removed-from-category: ' . self::TITLE_STRING . ', 0)',
+                       $this->getCategorizeRecentChangeForRevId( $removedRevId )->getAttribute( 'rc_comment' )
+               );
+       }
+
+}
index 519c8c3..6eb96b1 100644 (file)
@@ -4,7 +4,7 @@
  * in an instance property rather than APC.
  */
 class ArrayBackedMemoizedCallable extends MemoizedCallable {
-       public $cache = [];
+       private $cache = [];
 
        protected function fetchResult( $key, &$success ) {
                if ( array_key_exists( $key, $this->cache ) ) {
@@ -112,6 +112,11 @@ class MemoizedCallableTest extends PHPUnit_Framework_TestCase {
                        $this->readAttribute( $a, 'callableName' ),
                        $this->readAttribute( $b, 'callableName' )
                );
+
+               $c = new ArrayBackedMemoizedCallable( function () {
+                       return rand();
+               } );
+               $this->assertEquals( $c->invokeArgs(), $c->invokeArgs(), 'memoized random' );
        }
 
        /**
index a579f3a..9c189d1 100644 (file)
@@ -94,7 +94,7 @@ class ProcessCacheLRUTest extends PHPUnit_Framework_TestCase {
        /**
         * @covers ProcessCacheLRU::get
         * @covers ProcessCacheLRU::set
-        * @covers ProcessCacheLRU::het
+        * @covers ProcessCacheLRU::has
         */
        public function testAddAndGetAKey() {
                $oneCache = new ProcessCacheLRUTestable( 1 );
@@ -184,7 +184,7 @@ class ProcessCacheLRUTest extends PHPUnit_Framework_TestCase {
        /**
         * @covers ProcessCacheLRU::get
         * @covers ProcessCacheLRU::set
-        * @covers ProcessCacheLRU::het
+        * @covers ProcessCacheLRU::has
         */
        public function testRecentlyAccessedKeyStickIn() {
                $cache = new ProcessCacheLRUTestable( 2 );
index 3b19c9a..7fe8055 100644 (file)
@@ -49,4 +49,22 @@ class CachedBagOStuffTest extends PHPUnit_Framework_TestCase {
                $cache->delete( 'foo', CachedBagOStuff::WRITE_CACHE_ONLY );
                $this->assertEquals( 'old', $cache->get( 'foo' ) ); // Reloaded from backend
        }
+
+       public function testCacheBackendMisses() {
+               $backend = new HashBagOStuff;
+               $cache = new CachedBagOStuff( $backend );
+
+               // First hit primes the cache with miss from the backend
+               $this->assertEquals( false, $cache->get( 'foo' ) );
+
+               // Change the value in the backend
+               $backend->set( 'foo', true );
+
+               // Second hit returns the cached miss
+               $this->assertEquals( false, $cache->get( 'foo' ) );
+
+               // But a fresh value is read from the backend
+               $backend->set( 'bar', true );
+               $this->assertEquals( true, $cache->get( 'bar' ) );
+       }
 }
index 6090803..a70c005 100644 (file)
@@ -131,7 +131,7 @@ class BitmapMetadataHandlerTest extends MediaWikiTestCase {
                        $this->markTestSkipped( "This test needs the xml extension." );
                }
                $handler = new BitmapMetadataHandler();
-               $result = $handler->png( $this->filePath . 'xmp.png' );
+               $result = $handler->PNG( $this->filePath . 'xmp.png' );
                $expected = [
                        'frameCount' => 0,
                        'loopCount' => 1,
@@ -151,7 +151,7 @@ class BitmapMetadataHandlerTest extends MediaWikiTestCase {
         */
        public function testPNGNative() {
                $handler = new BitmapMetadataHandler();
-               $result = $handler->png( $this->filePath . 'Png-native-test.png' );
+               $result = $handler->PNG( $this->filePath . 'Png-native-test.png' );
                $expected = 'http://example.com/url';
                $this->assertEquals( $expected, $result['metadata']['Identifier']['x-default'] );
        }
index b777ed0..f70b42d 100644 (file)
@@ -146,7 +146,7 @@ class ExifBitmapTest extends MediaWikiMediaTestCase {
 
        /**
         * @dataProvider provideSwappingICCProfile
-        * @covers BitmapHandler::swapICCProfile
+        * @covers ExifBitmapHandler::swapICCProfile
         */
        public function testSwappingICCProfile(
                $sourceFilename, $controlFilename, $newProfileFilename, $oldProfileName
index 747ca44..826957e 100644 (file)
@@ -15,25 +15,25 @@ class IPTCTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers IPTC::Parse
+        * @covers IPTC::parse
         */
        public function testIPTCParseNoCharset88591() {
                // basically IPTC for keyword with value of 0xBC which is 1/4 in iso-8859-1
                // This data doesn't specify a charset. We're supposed to guess
                // (which basically means utf-8 if valid, windows 1252 (iso 8859-1) if not)
                $iptcData = "Photoshop 3.0\08BIM\4\4\0\0\0\0\0\x06\x1c\x02\x19\x00\x01\xBC";
-               $res = IPTC::Parse( $iptcData );
+               $res = IPTC::parse( $iptcData );
                $this->assertEquals( [ '¼' ], $res['Keywords'] );
        }
 
        /**
-        * @covers IPTC::Parse
+        * @covers IPTC::parse
         */
        public function testIPTCParseNoCharset88591b() {
                /* This one contains a sequence that's valid iso 8859-1 but not valid utf8 */
                /* \xC3 = Ã, \xB8 = ¸  */
                $iptcData = "Photoshop 3.0\08BIM\4\4\0\0\0\0\0\x09\x1c\x02\x19\x00\x04\xC3\xC3\xC3\xB8";
-               $res = IPTC::Parse( $iptcData );
+               $res = IPTC::parse( $iptcData );
                $this->assertEquals( [ 'ÃÃø' ], $res['Keywords'] );
        }
 
@@ -41,7 +41,7 @@ class IPTCTest extends MediaWikiTestCase {
         * Same as testIPTCParseNoCharset88591b, but forcing the charset to utf-8.
         * What should happen is the first "\xC3\xC3" should be dropped as invalid,
         * leaving \xC3\xB8, which is ø
-        * @covers IPTC::Parse
+        * @covers IPTC::parse
         */
        public function testIPTCParseForcedUTFButInvalid() {
                if ( version_compare( PHP_VERSION, '5.5.26', '<' )
@@ -53,40 +53,40 @@ class IPTCTest extends MediaWikiTestCase {
                }
                $iptcData = "Photoshop 3.0\08BIM\4\4\0\0\0\0\0\x11\x1c\x02\x19\x00\x04\xC3\xC3\xC3\xB8"
                        . "\x1c\x01\x5A\x00\x03\x1B\x25\x47";
-               $res = IPTC::Parse( $iptcData );
+               $res = IPTC::parse( $iptcData );
                $this->assertEquals( [ 'ø' ], $res['Keywords'] );
        }
 
        /**
-        * @covers IPTC::Parse
+        * @covers IPTC::parse
         */
        public function testIPTCParseNoCharsetUTF8() {
                $iptcData = "Photoshop 3.0\08BIM\4\4\0\0\0\0\0\x07\x1c\x02\x19\x00\x02¼";
-               $res = IPTC::Parse( $iptcData );
+               $res = IPTC::parse( $iptcData );
                $this->assertEquals( [ '¼' ], $res['Keywords'] );
        }
 
        /**
         * Testing something that has 2 values for keyword
-        * @covers IPTC::Parse
+        * @covers IPTC::parse
         */
        public function testIPTCParseMulti() {
                $iptcData = /* identifier */ "Photoshop 3.0\08BIM\4\4"
                        /* length */ . "\0\0\0\0\0\x0D"
                        . "\x1c\x02\x19" . "\x00\x01" . "\xBC"
                        . "\x1c\x02\x19" . "\x00\x02" . "\xBC\xBD";
-               $res = IPTC::Parse( $iptcData );
+               $res = IPTC::parse( $iptcData );
                $this->assertEquals( [ '¼', '¼½' ], $res['Keywords'] );
        }
 
        /**
-        * @covers IPTC::Parse
+        * @covers IPTC::parse
         */
        public function testIPTCParseUTF8() {
                // This has the magic "\x1c\x01\x5A\x00\x03\x1B\x25\x47" which marks content as UTF8.
                $iptcData =
                        "Photoshop 3.0\08BIM\4\4\0\0\0\0\0\x0F\x1c\x02\x19\x00\x02¼\x1c\x01\x5A\x00\x03\x1B\x25\x47";
-               $res = IPTC::Parse( $iptcData );
+               $res = IPTC::parse( $iptcData );
                $this->assertEquals( [ '¼' ], $res['Keywords'] );
        }
 }
index 5887d38..5042121 100644 (file)
@@ -25,7 +25,7 @@ abstract class MediaWikiMediaTestCase extends MediaWikiTestCase {
 
                $this->backend = new FSFileBackend( [
                        'name' => 'localtesting',
-                       'wikiId' => wfWikiId(),
+                       'wikiId' => wfWikiID(),
                        'containerPaths' => $containers
                ] );
                $this->repo = new FSRepo( $this->getRepoOptions() );
index b50fe80..dfa92f1 100644 (file)
@@ -137,5 +137,5 @@ class WebPHandlerTest extends MediaWikiTestCase {
 }
 
 /* Python code to extract a header and convert to PHP format:
- * print '"%s"' % ''.join( '\\x%02X' % ord(c) for c in urllib.urlopen(url).read(36) )
+ * print '"%s"' % ''.implode( '\\x%02X' % ord(c) for c in urllib.urlopen(url).read(36) )
  */
index dacef8d..bffe415 100644 (file)
@@ -175,7 +175,7 @@ class XMPTest extends MediaWikiTestCase {
 
        /**
         * Test for multi-section, hostile XML
-        * @covers checkParseSafety
+        * @covers XMPReader::checkParseSafety
         */
        public function testCheckParseSafety() {
 
index d885926..3a3b514 100644 (file)
@@ -17,9 +17,8 @@ class ArticleTablesTest extends MediaWikiLangTestCase {
                $page = WikiPage::factory( $title );
                $user = new User();
                $user->mRights = [ 'createpage', 'edit', 'purge' ];
-               $this->setMwGlobals( 'wgLanguageCode', 'es' );
-               $this->setMwGlobals( 'wgContLang', Language::factory( 'es' ) );
-               $this->setMwGlobals( 'wgLang', Language::factory( 'fr' ) );
+               $this->setContentLang( 'es' );
+               $this->setUserLang( 'fr' );
 
                $page->doEditContent(
                        new WikitextContent( '{{:{{int:history}}}}' ),
@@ -30,7 +29,7 @@ class ArticleTablesTest extends MediaWikiLangTestCase {
                );
                $templates1 = $title->getTemplateLinksFrom();
 
-               $this->setMwGlobals( 'wgLang', Language::factory( 'de' ) );
+               $this->setUserLang( '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
index ae069ea..a96a296 100644 (file)
@@ -41,16 +41,6 @@ class ArticleTest extends MediaWikiTestCase {
                $this->assertEquals( 2, $this->article->mLatest, "Article __set magic" );
        }
 
-       /**
-        * @depends testImplementsSetMagic
-        * @covers Article::__call
-        */
-       public function testImplementsCallMagic() {
-               $this->article->mLatest = 33;
-               $this->article->mDataLoaded = true;
-               $this->assertEquals( 33, $this->article->getLatest(), "Article __call magic" );
-       }
-
        /**
         * @covers Article::__get
         * @covers Article::__set
index 895398f..b0c1525 100644 (file)
@@ -71,13 +71,14 @@ class NewParserTest extends MediaWikiTestCase {
                $tmpGlobals['wgSitename'] = 'MediaWiki';
                $tmpGlobals['wgServer'] = 'http://example.org';
                $tmpGlobals['wgServerName'] = 'example.org';
+               $tmpGlobals['wgScriptPath'] = '';
                $tmpGlobals['wgScript'] = '/index.php';
-               $tmpGlobals['wgScriptPath'] = '/';
+               $tmpGlobals['wgResourceBasePath'] = '';
+               $tmpGlobals['wgStylePath'] = '/skins';
+               $tmpGlobals['wgExtensionAssetsPath'] = '/extensions';
                $tmpGlobals['wgArticlePath'] = '/wiki/$1';
                $tmpGlobals['wgActionPaths'] = [];
                $tmpGlobals['wgVariantArticlePath'] = false;
-               $tmpGlobals['wgExtensionAssetsPath'] = '/extensions';
-               $tmpGlobals['wgStylePath'] = '/skins';
                $tmpGlobals['wgEnableUploads'] = true;
                $tmpGlobals['wgUploadNavigationUrl'] = false;
                $tmpGlobals['wgThumbnailScriptPath'] = false;
@@ -101,7 +102,6 @@ class NewParserTest extends MediaWikiTestCase {
                $tmpGlobals['wgAllowExternalImages'] = true;
                $tmpGlobals['wgRawHtml'] = false;
                $tmpGlobals['wgWellFormedXml'] = true;
-               $tmpGlobals['wgAllowMicrodataAttributes'] = true;
                $tmpGlobals['wgExperimentalHtmlIds'] = false;
                $tmpGlobals['wgAdaptiveMessageCache'] = true;
                $tmpGlobals['wgUseDatabaseMessages'] = true;
@@ -142,6 +142,9 @@ class NewParserTest extends MediaWikiTestCase {
                // DjVu images have to be handled slightly differently
                $tmpGlobals['wgMediaHandlers']['image/vnd.djvu'] = 'MockDjVuHandler';
 
+               // Ogg video/audio increasingly more differently
+               $tmpGlobals['wgMediaHandlers']['application/ogg'] = 'MockOggHandler';
+
                $tmpHooks = $wgHooks;
                $tmpHooks['ParserTestParser'][] = 'ParserTestParserHook::setup';
                $tmpHooks['ParserGetVariableValueTs'][] = 'ParserTest::getFakeTimestamp';
@@ -207,15 +210,15 @@ class NewParserTest extends MediaWikiTestCase {
                parent::tearDownAfterClass();
        }
 
-       function addDBData() {
-               $this->tablesUsed[] = 'site_stats';
+       function addDBDataOnce() {
                # disabled for performance
                # $this->tablesUsed[] = 'image';
 
                # Update certain things in site_stats
                $this->db->insert( 'site_stats',
                        [ 'ss_row_id' => 1, 'ss_images' => 2, 'ss_good_articles' => 1 ],
-                       __METHOD__
+                       __METHOD__,
+                       [ 'IGNORE' ]
                );
 
                $user = User::newFromId( 0 );
@@ -308,13 +311,13 @@ class NewParserTest extends MediaWikiTestCase {
                if ( !$this->db->selectField( 'image', '1', [ 'img_name' => $image->getName() ] ) ) {
                        $image->recordUpload2( '', 'A pretty movie', 'Will it play', [
                                        'size'        => 12345,
-                                       'width'       => 240,
-                                       'height'      => 180,
+                                       'width'       => 320,
+                                       'height'      => 240,
                                        'bits'        => 0,
                                        'media_type'  => MEDIATYPE_VIDEO,
                                        'mime'        => 'application/ogg',
                                        'metadata'    => serialize( [] ),
-                                       'sha1'        => Wikimedia\base_convert( '', 16, 36, 31 ),
+                                       'sha1'        => Wikimedia\base_convert( '', 16, 36, 32 ),
                                        'fileExists'  => true
                        ], $this->db->timestamp( '20010115123500' ), $user );
                }
@@ -408,7 +411,7 @@ class NewParserTest extends MediaWikiTestCase {
                        # informations.
                        $backend = new MockFileBackend( [
                                'name' => 'local-backend',
-                               'wikiId' => wfWikiId()
+                               'wikiId' => wfWikiID()
                        ] );
                }
 
index 46ba46c..d6940b5 100644 (file)
@@ -3,7 +3,7 @@
 /**
  * @group large
  */
-class BcryptPasswordTestCase extends PasswordTestCase {
+class BcryptPasswordTest extends PasswordTestCase {
        protected function getTypeConfigs() {
                return [ 'bcrypt' => [
                        'class' => 'BcryptPassword',
index af34282..6357510 100644 (file)
@@ -42,7 +42,7 @@ class PasswordPolicyChecksTest extends MediaWikiTestCase {
                        'Password is shorter than minimal policy'
                );
                $this->assertTrue(
-                       $statusShort->isOk(),
+                       $statusShort->isOK(),
                        'Password is shorter than minimal policy, not fatal'
                );
        }
@@ -67,7 +67,7 @@ class PasswordPolicyChecksTest extends MediaWikiTestCase {
                        'Password is shorter than minimum login policy'
                );
                $this->assertFalse(
-                       $statusShort->isOk(),
+                       $statusShort->isOK(),
                        'Password is shorter than minimum login policy, fatal'
                );
        }
@@ -90,7 +90,7 @@ class PasswordPolicyChecksTest extends MediaWikiTestCase {
                $this->assertFalse( $statusLong->isGood(),
                        'Password is longer than maximal policy'
                );
-               $this->assertFalse( $statusLong->isOk(),
+               $this->assertFalse( $statusLong->isOK(),
                        'Password is longer than maximal policy, fatal'
                );
        }
@@ -111,7 +111,7 @@ class PasswordPolicyChecksTest extends MediaWikiTestCase {
                        'user'  // password
                );
                $this->assertFalse( $statusLong->isGood(), 'Password matches username' );
-               $this->assertTrue( $statusLong->isOk(), 'Password matches username, not fatal' );
+               $this->assertTrue( $statusLong->isOK(), 'Password matches username, not fatal' );
        }
 
        /**
@@ -130,7 +130,7 @@ class PasswordPolicyChecksTest extends MediaWikiTestCase {
                        'Passpass1'  // password
                );
                $this->assertFalse( $statusLong->isGood(), 'Password matches blacklist' );
-               $this->assertTrue( $statusLong->isOk(), 'Password matches blacklist, not fatal' );
+               $this->assertTrue( $statusLong->isOK(), 'Password matches blacklist, not fatal' );
        }
 
 }
index d820040..d16200b 100644 (file)
@@ -112,7 +112,7 @@ class UserPasswordPolicyTest extends MediaWikiTestCase {
 
                $status = $upp->checkUserPassword( $user, $password );
                $this->assertSame( $valid, $status->isGood(), $msg . ' - password valid' );
-               $this->assertSame( $ok, $status->isOk(), $msg . ' - can login' );
+               $this->assertSame( $ok, $status->isOK(), $msg . ' - can login' );
        }
 
        public function provideCheckUserPassword() {
index 35aca48..27c0c60 100644 (file)
@@ -130,7 +130,7 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
                $this->assertEquals( 'somevalue', $extracted['globals']['egBar'] );
        }
 
-       public static function provideExtracttExtensionMessagesFiles() {
+       public static function provideExtractExtensionMessagesFiles() {
                $dir = __DIR__ . '/FooBar/';
                return [
                        [
@@ -155,10 +155,10 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers ExtensionProcessor::extracttExtensionMessagesFiles
-        * @dataProvider provideExtracttExtensionMessagesFiles
+        * @covers ExtensionProcessor::extractExtensionMessagesFiles
+        * @dataProvider provideExtractExtensionMessagesFiles
         */
-       public function testExtracttExtensionMessagesFiles( $input, $expected ) {
+       public function testExtractExtensionMessagesFiles( $input, $expected ) {
                $processor = new ExtensionProcessor();
                $processor->extractInfo( $this->dir, $input + self::$default, 1 );
                $out = $processor->getExtractedInfo();
index 2a3a5fe..6a3f95b 100644 (file)
@@ -10,7 +10,7 @@ class SearchEnginePrefixTest extends MediaWikiLangTestCase {
         */
        private $search;
 
-       public function addDBData() {
+       public function addDBDataOnce() {
                if ( !$this->isWikitextNS( NS_MAIN ) ) {
                        // tests are skipped if NS_MAIN is not wikitext
                        return;
index b680d5e..055e982 100644 (file)
@@ -44,7 +44,7 @@ class SearchEngineTest extends MediaWikiLangTestCase {
                parent::tearDown();
        }
 
-       public function addDBData() {
+       public function addDBDataOnce() {
                if ( !$this->isWikitextNS( NS_MAIN ) ) {
                        // @todo cover the case of non-wikitext content in the main namespace
                        return;
index b40a05c..d76d9df 100644 (file)
@@ -62,7 +62,7 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase {
                ] );
        }
 
-       public function addDBData() {
+       public function addDBDataOnce() {
                $passwordFactory = new \PasswordFactory();
                $passwordFactory->init( \RequestContext::getMain()->getConfig() );
                // A is unsalted MD5 (thus fast) ... we don't care about security here, this is test only
@@ -154,7 +154,7 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase {
        public function testBasics() {
                $provider = $this->getProvider();
 
-               $this->assertTrue( $provider->persistsSessionID() );
+               $this->assertTrue( $provider->persistsSessionId() );
                $this->assertFalse( $provider->canChangeUser() );
 
                $this->assertNull( $provider->newSessionInfo() );
@@ -281,4 +281,58 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase {
                $this->assertSame( [], $logger->getBuffer() );
                $this->assertEquals( $dataMD + [ 'rights' => [ 'read' ] ], $metadata );
        }
+
+       public function testGetAllowedUserRights() {
+               $logger = new \TestLogger( true );
+               $provider = $this->getProvider();
+               $provider->setLogger( $logger );
+
+               $backend = TestUtils::getDummySessionBackend();
+               $backendPriv = \TestingAccessWrapper::newFromObject( $backend );
+
+               try {
+                       $provider->getAllowedUserRights( $backend );
+                       $this->fail( 'Expected exception not thrown' );
+               } catch ( \InvalidArgumentException $ex ) {
+                       $this->assertSame( 'Backend\'s provider isn\'t $this', $ex->getMessage() );
+               }
+
+               $backendPriv->provider = $provider;
+               $backendPriv->providerMetadata = [ 'rights' => [ 'foo', 'bar', 'baz' ] ];
+               $this->assertSame( [ 'foo', 'bar', 'baz' ], $provider->getAllowedUserRights( $backend ) );
+               $this->assertSame( [], $logger->getBuffer() );
+
+               $backendPriv->providerMetadata = [ 'foo' => 'bar' ];
+               $this->assertSame( [], $provider->getAllowedUserRights( $backend ) );
+               $this->assertSame( [
+                       [
+                               LogLevel::DEBUG,
+                               'MediaWiki\\Session\\BotPasswordSessionProvider::getAllowedUserRights: ' .
+                                       'No provider metadata, returning no rights allowed'
+                       ]
+               ], $logger->getBuffer() );
+               $logger->clearBuffer();
+
+               $backendPriv->providerMetadata = [ 'rights' => 'bar' ];
+               $this->assertSame( [], $provider->getAllowedUserRights( $backend ) );
+               $this->assertSame( [
+                       [
+                               LogLevel::DEBUG,
+                               'MediaWiki\\Session\\BotPasswordSessionProvider::getAllowedUserRights: ' .
+                                       'No provider metadata, returning no rights allowed'
+                       ]
+               ], $logger->getBuffer() );
+               $logger->clearBuffer();
+
+               $backendPriv->providerMetadata = null;
+               $this->assertSame( [], $provider->getAllowedUserRights( $backend ) );
+               $this->assertSame( [
+                       [
+                               LogLevel::DEBUG,
+                               'MediaWiki\\Session\\BotPasswordSessionProvider::getAllowedUserRights: ' .
+                                       'No provider metadata, returning no rights allowed'
+                       ]
+               ], $logger->getBuffer() );
+               $logger->clearBuffer();
+       }
 }
index d376159..70e89d4 100644 (file)
@@ -145,7 +145,7 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
        public function testBasics() {
                $provider = new CookieSessionProvider( [ 'priority' => 10 ] );
 
-               $this->assertTrue( $provider->persistsSessionID() );
+               $this->assertTrue( $provider->persistsSessionId() );
                $this->assertTrue( $provider->canChangeUser() );
 
                $msg = $provider->whyNoSession();
@@ -762,4 +762,25 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
        public function onUserSetCookies( $user, &$sessionData, &$cookies ) {
        }
 
+       public function testGetCookie() {
+               $provider = new CookieSessionProvider( [
+                       'priority' => 1,
+                       'sessionName' => 'MySessionName',
+                       'cookieOptions' => [ 'prefix' => 'x' ],
+               ] );
+               $provider->setLogger( new \Psr\Log\NullLogger() );
+               $provider->setConfig( $this->getConfig() );
+               $provider->setManager( SessionManager::singleton() );
+               $provider = \TestingAccessWrapper::newFromObject( $provider );
+
+               $request = new \FauxRequest();
+               $request->setCookies( [
+                       'xFoo' => 'foo!',
+                       'xBar' => 'deleted',
+               ], '' );
+               $this->assertSame( 'foo!', $provider->getCookie( $request, 'Foo', 'x' ) );
+               $this->assertNull( $provider->getCookie( $request, 'Bar', 'x' ) );
+               $this->assertNull( $provider->getCookie( $request, 'Baz', 'x' ) );
+       }
+
 }
diff --git a/tests/phpunit/includes/session/MetadataMergeExceptionTest.php b/tests/phpunit/includes/session/MetadataMergeExceptionTest.php
new file mode 100644 (file)
index 0000000..0981f02
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+
+namespace MediaWiki\Session;
+
+use MediaWikiTestCase;
+
+/**
+ * @group Session
+ * @covers MediaWiki\Session\MetadataMergeException
+ */
+class MetadataMergeExceptionTest extends MediaWikiTestCase {
+
+       public function testBasics() {
+               $data = [ 'foo' => 'bar' ];
+
+               $ex = new MetadataMergeException();
+               $this->assertInstanceOf( 'UnexpectedValueException', $ex );
+               $this->assertSame( [], $ex->getContext() );
+
+               $ex2 = new MetadataMergeException( 'Message', 42, $ex, $data );
+               $this->assertSame( 'Message', $ex2->getMessage() );
+               $this->assertSame( 42, $ex2->getCode() );
+               $this->assertSame( $ex, $ex2->getPrevious() );
+               $this->assertSame( $data, $ex2->getContext() );
+
+               $ex->setContext( $data );
+               $this->assertSame( $data, $ex->getContext() );
+       }
+
+}
index 64b16db..05773a9 100644 (file)
@@ -292,7 +292,9 @@ class PHPSessionHandlerTest extends MediaWikiTestCase {
                // Test that write doesn't break if the session is invalid
                $session = $manager->getEmptySession();
                $session->persist();
-               session_id( $session->getId() );
+               $id = $session->getId();
+               unset( $session );
+               session_id( $id );
                session_start();
                $this->mergeMwGlobalArrayValue( 'wgHooks', [
                        'SessionCheckInfo' => [ function ( &$reason ) {
@@ -300,12 +302,13 @@ class PHPSessionHandlerTest extends MediaWikiTestCase {
                                return false;
                        } ],
                ] );
-               $this->assertNull( $manager->getSessionById( $session->getId(), true ), 'sanity check' );
+               $this->assertNull( $manager->getSessionById( $id, true ), 'sanity check' );
                session_write_close();
+
                $this->mergeMwGlobalArrayValue( 'wgHooks', [
                        'SessionCheckInfo' => [],
                ] );
-               $this->assertNotNull( $manager->getSessionById( $session->getId(), true ), 'sanity check' );
+               $this->assertNotNull( $manager->getSessionById( $id, true ), 'sanity check' );
        }
 
        public static function provideHandlers() {
index 5824ce1..7459ed2 100644 (file)
@@ -23,8 +23,9 @@ class SessionBackendTest extends MediaWikiTestCase {
        /**
         * Returns a non-persistent backend that thinks it has at least one session active
         * @param User|null $user
+        * @param string $id
         */
-       protected function getBackend( User $user = null ) {
+       protected function getBackend( User $user = null, $id = null ) {
                if ( !$this->config ) {
                        $this->config = new \HashConfig();
                        $this->manager = null;
@@ -52,7 +53,7 @@ class SessionBackendTest extends MediaWikiTestCase {
 
                $info = new SessionInfo( SessionInfo::MIN_PRIORITY, [
                        'provider' => $this->provider,
-                       'id' => self::SESSIONID,
+                       'id' => $id ?: self::SESSIONID,
                        'persisted' => true,
                        'userInfo' => UserInfo::newFromUser( $user ?: new User, true ),
                        'idIsSafe' => true,
@@ -63,11 +64,12 @@ class SessionBackendTest extends MediaWikiTestCase {
                $priv = \TestingAccessWrapper::newFromObject( $backend );
                $priv->persist = false;
                $priv->requests = [ 100 => new \FauxRequest() ];
+               $priv->requests[100]->setSessionId( $id );
                $priv->usePhpSessionHandling = false;
 
                $manager = \TestingAccessWrapper::newFromObject( $this->manager );
-               $manager->allSessionBackends = [ $backend->getId() => $backend ];
-               $manager->allSessionIds = [ $backend->getId() => $id ];
+               $manager->allSessionBackends = [ $backend->getId() => $backend ] + $manager->allSessionBackends;
+               $manager->allSessionIds = [ $backend->getId() => $id ] + $manager->allSessionIds;
                $manager->sessionProviders = [ (string)$this->provider => $this->provider ];
 
                return $backend;
@@ -216,6 +218,42 @@ class SessionBackendTest extends MediaWikiTestCase {
                $this->assertArrayHasKey( $backend->getId(), $manager->allSessionIds );
        }
 
+       public function testSetProviderMetadata() {
+               $backend = $this->getBackend();
+               $priv = \TestingAccessWrapper::newFromObject( $backend );
+               $priv->providerMetadata = [ 'dummy' ];
+
+               try {
+                       $backend->setProviderMetadata( 'foo' );
+                       $this->fail( 'Expected exception not thrown' );
+               } catch ( \InvalidArgumentException $ex ) {
+                       $this->assertSame( '$metadata must be an array or null', $ex->getMessage() );
+               }
+
+               try {
+                       $backend->setProviderMetadata( (object)[] );
+                       $this->fail( 'Expected exception not thrown' );
+               } catch ( \InvalidArgumentException $ex ) {
+                       $this->assertSame( '$metadata must be an array or null', $ex->getMessage() );
+               }
+
+               $this->assertFalse( $this->store->getSession( self::SESSIONID ), 'sanity check' );
+               $backend->setProviderMetadata( [ 'dummy' ] );
+               $this->assertFalse( $this->store->getSession( self::SESSIONID ) );
+
+               $this->assertFalse( $this->store->getSession( self::SESSIONID ), 'sanity check' );
+               $backend->setProviderMetadata( [ 'test' ] );
+               $this->assertNotFalse( $this->store->getSession( self::SESSIONID ) );
+               $this->assertSame( [ 'test' ], $backend->getProviderMetadata() );
+               $this->store->deleteSession( self::SESSIONID );
+
+               $this->assertFalse( $this->store->getSession( self::SESSIONID ), 'sanity check' );
+               $backend->setProviderMetadata( null );
+               $this->assertNotFalse( $this->store->getSession( self::SESSIONID ) );
+               $this->assertSame( null, $backend->getProviderMetadata() );
+               $this->store->deleteSession( self::SESSIONID );
+       }
+
        public function testResetId() {
                $id = session_id();
 
@@ -273,6 +311,25 @@ class SessionBackendTest extends MediaWikiTestCase {
                $this->assertNotEquals( 0, $wrap->expires );
        }
 
+       public function testUnpersist() {
+               $this->provider = $this->getMock( 'DummySessionProvider', [ 'unpersistSession' ] );
+               $this->provider->expects( $this->once() )->method( 'unpersistSession' );
+               $backend = $this->getBackend();
+               $wrap = \TestingAccessWrapper::newFromObject( $backend );
+               $wrap->store = new \CachedBagOStuff( $this->store );
+               $wrap->persist = true;
+               $wrap->dataDirty = true;
+
+               $backend->save(); // This one shouldn't call $provider->persistSession(), but should save
+               $this->assertTrue( $backend->isPersistent(), 'sanity check' );
+               $this->assertNotFalse( $this->store->getSession( self::SESSIONID ), 'sanity check' );
+
+               $backend->unpersist();
+               $this->assertFalse( $backend->isPersistent() );
+               $this->assertFalse( $this->store->getSession( self::SESSIONID ) );
+               $this->assertNotFalse( $wrap->store->get( wfMemcKey( 'MWSession', self::SESSIONID ) ) );
+       }
+
        public function testRememberUser() {
                $backend = $this->getBackend();
 
@@ -434,8 +491,12 @@ class SessionBackendTest extends MediaWikiTestCase {
                $neverHook = $this->getMock( __CLASS__, [ 'onSessionMetadata' ] );
                $neverHook->expects( $this->never() )->method( 'onSessionMetadata' );
 
-               $neverProvider = $this->getMock( 'DummySessionProvider', [ 'persistSession' ] );
+               $builder = $this->getMockBuilder( 'DummySessionProvider' )
+                       ->setMethods( [ 'persistSession', 'unpersistSession' ] );
+
+               $neverProvider = $builder->getMock();
                $neverProvider->expects( $this->never() )->method( 'persistSession' );
+               $neverProvider->expects( $this->never() )->method( 'unpersistSession' );
 
                // Not persistent or dirty
                $this->provider = $neverProvider;
@@ -449,6 +510,38 @@ class SessionBackendTest extends MediaWikiTestCase {
                $backend->save();
                $this->assertFalse( $this->store->getSession( self::SESSIONID ), 'making sure it didn\'t save' );
 
+               // (but does unpersist if forced)
+               $this->provider = $builder->getMock();
+               $this->provider->expects( $this->never() )->method( 'persistSession' );
+               $this->provider->expects( $this->atLeastOnce() )->method( 'unpersistSession' );
+               $this->mergeMwGlobalArrayValue( 'wgHooks', [ 'SessionMetadata' => [ $neverHook ] ] );
+               $this->store->setSessionData( self::SESSIONID, $testData );
+               $backend = $this->getBackend( $user );
+               $this->store->deleteSession( self::SESSIONID );
+               \TestingAccessWrapper::newFromObject( $backend )->persist = false;
+               \TestingAccessWrapper::newFromObject( $backend )->forcePersist = true;
+               $this->assertFalse( $backend->isPersistent(), 'sanity check' );
+               \TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
+               \TestingAccessWrapper::newFromObject( $backend )->dataDirty = false;
+               $backend->save();
+               $this->assertFalse( $this->store->getSession( self::SESSIONID ), 'making sure it didn\'t save' );
+
+               // (but not to a WebRequest associated with a different session)
+               $this->provider = $neverProvider;
+               $this->mergeMwGlobalArrayValue( 'wgHooks', [ 'SessionMetadata' => [ $neverHook ] ] );
+               $this->store->setSessionData( self::SESSIONID, $testData );
+               $backend = $this->getBackend( $user );
+               \TestingAccessWrapper::newFromObject( $backend )->requests[100]
+                       ->setSessionId( new SessionId( 'x' ) );
+               $this->store->deleteSession( self::SESSIONID );
+               \TestingAccessWrapper::newFromObject( $backend )->persist = false;
+               \TestingAccessWrapper::newFromObject( $backend )->forcePersist = true;
+               $this->assertFalse( $backend->isPersistent(), 'sanity check' );
+               \TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
+               \TestingAccessWrapper::newFromObject( $backend )->dataDirty = false;
+               $backend->save();
+               $this->assertFalse( $this->store->getSession( self::SESSIONID ), 'making sure it didn\'t save' );
+
                // Not persistent, but dirty
                $this->provider = $neverProvider;
                $this->onSessionMetadataCalled = false;
@@ -484,8 +577,10 @@ class SessionBackendTest extends MediaWikiTestCase {
                $backend->save();
                $this->assertFalse( $this->store->getSession( self::SESSIONID ), 'making sure it didn\'t save' );
 
-               $this->provider = $this->getMock( 'DummySessionProvider', [ 'persistSession' ] );
+               // (but will persist if forced)
+               $this->provider = $builder->getMock();
                $this->provider->expects( $this->atLeastOnce() )->method( 'persistSession' );
+               $this->provider->expects( $this->never() )->method( 'unpersistSession' );
                $this->mergeMwGlobalArrayValue( 'wgHooks', [ 'SessionMetadata' => [ $neverHook ] ] );
                $this->store->setSessionData( self::SESSIONID, $testData );
                $backend = $this->getBackend( $user );
@@ -521,8 +616,10 @@ class SessionBackendTest extends MediaWikiTestCase {
                $this->assertNotSame( false, $this->store->getSessionFromBackend( self::SESSIONID ),
                        'making sure it did save to backend' );
 
-               $this->provider = $this->getMock( 'DummySessionProvider', [ 'persistSession' ] );
+               // (also persists if forced)
+               $this->provider = $builder->getMock();
                $this->provider->expects( $this->atLeastOnce() )->method( 'persistSession' );
+               $this->provider->expects( $this->never() )->method( 'unpersistSession' );
                $this->onSessionMetadataCalled = false;
                $this->mergeMwGlobalArrayValue( 'wgHooks', [ 'SessionMetadata' => [ $this ] ] );
                $this->store->setSessionData( self::SESSIONID, $testData );
@@ -545,8 +642,10 @@ class SessionBackendTest extends MediaWikiTestCase {
                $this->assertNotSame( false, $this->store->getSessionFromBackend( self::SESSIONID ),
                        'making sure it did save to backend' );
 
-               $this->provider = $this->getMock( 'DummySessionProvider', [ 'persistSession' ] );
+               // (also persists if metadata dirty)
+               $this->provider = $builder->getMock();
                $this->provider->expects( $this->atLeastOnce() )->method( 'persistSession' );
+               $this->provider->expects( $this->never() )->method( 'unpersistSession' );
                $this->onSessionMetadataCalled = false;
                $this->mergeMwGlobalArrayValue( 'wgHooks', [ 'SessionMetadata' => [ $this ] ] );
                $this->store->setSessionData( self::SESSIONID, $testData );
@@ -715,6 +814,46 @@ class SessionBackendTest extends MediaWikiTestCase {
                $metadata['???'] = '!!!';
        }
 
+       public function testTakeOverGlobalSession() {
+               if ( !PHPSessionHandler::isInstalled() ) {
+                       PHPSessionHandler::install( SessionManager::singleton() );
+               }
+               if ( !PHPSessionHandler::isEnabled() ) {
+                       $rProp = new \ReflectionProperty( 'MediaWiki\\Session\\PHPSessionHandler', 'instance' );
+                       $rProp->setAccessible( true );
+                       $handler = \TestingAccessWrapper::newFromObject( $rProp->getValue() );
+                       $resetHandler = new \ScopedCallback( function () use ( $handler ) {
+                               session_write_close();
+                               $handler->enable = false;
+                       } );
+                       $handler->enable = true;
+               }
+
+               $backend = $this->getBackend( User::newFromName( 'UTSysop' ) );
+               \TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = true;
+
+               $resetSingleton = TestUtils::setSessionManagerSingleton( $this->manager );
+
+               $manager = \TestingAccessWrapper::newFromObject( $this->manager );
+               $request = \RequestContext::getMain()->getRequest();
+               $manager->globalSession = $backend->getSession( $request );
+               $manager->globalSessionRequest = $request;
+
+               session_id( '' );
+               \TestingAccessWrapper::newFromObject( $backend )->checkPHPSession();
+               $this->assertSame( $backend->getId(), session_id() );
+               session_write_close();
+
+               $backend2 = $this->getBackend(
+                       User::newFromName( 'UTSysop' ), 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'
+               );
+               \TestingAccessWrapper::newFromObject( $backend2 )->usePhpSessionHandling = true;
+
+               session_id( '' );
+               \TestingAccessWrapper::newFromObject( $backend2 )->checkPHPSession();
+               $this->assertSame( '', session_id() );
+       }
+
        public function testResetIdOfGlobalSession() {
                if ( !PHPSessionHandler::isInstalled() ) {
                        PHPSessionHandler::install( SessionManager::singleton() );
@@ -733,7 +872,7 @@ class SessionBackendTest extends MediaWikiTestCase {
                $backend = $this->getBackend( User::newFromName( 'UTSysop' ) );
                \TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = true;
 
-               TestUtils::setSessionManagerSingleton( $this->manager );
+               $resetSingleton = TestUtils::setSessionManagerSingleton( $this->manager );
 
                $manager = \TestingAccessWrapper::newFromObject( $this->manager );
                $request = \RequestContext::getMain()->getRequest();
@@ -742,16 +881,51 @@ class SessionBackendTest extends MediaWikiTestCase {
 
                session_id( self::SESSIONID );
                \MediaWiki\quietCall( 'session_start' );
+               $_SESSION['foo'] = __METHOD__;
                $backend->resetId();
                $this->assertNotEquals( self::SESSIONID, $backend->getId() );
                $this->assertSame( $backend->getId(), session_id() );
+               $this->assertArrayHasKey( 'foo', $_SESSION );
+               $this->assertSame( __METHOD__, $_SESSION['foo'] );
                session_write_close();
+       }
 
-               session_id( '' );
-               $this->assertNotSame( $backend->getId(), session_id(), 'sanity check' );
-               $backend->persist();
-               $this->assertSame( $backend->getId(), session_id() );
-               session_write_close();
+       public function testUnpersistOfGlobalSession() {
+               if ( !PHPSessionHandler::isInstalled() ) {
+                       PHPSessionHandler::install( SessionManager::singleton() );
+               }
+               if ( !PHPSessionHandler::isEnabled() ) {
+                       $rProp = new \ReflectionProperty( 'MediaWiki\\Session\\PHPSessionHandler', 'instance' );
+                       $rProp->setAccessible( true );
+                       $handler = \TestingAccessWrapper::newFromObject( $rProp->getValue() );
+                       $resetHandler = new \ScopedCallback( function () use ( $handler ) {
+                               session_write_close();
+                               $handler->enable = false;
+                       } );
+                       $handler->enable = true;
+               }
+
+               $backend = $this->getBackend( User::newFromName( 'UTSysop' ) );
+               $wrap = \TestingAccessWrapper::newFromObject( $backend );
+               $wrap->usePhpSessionHandling = true;
+               $wrap->persist = true;
+
+               $resetSingleton = TestUtils::setSessionManagerSingleton( $this->manager );
+
+               $manager = \TestingAccessWrapper::newFromObject( $this->manager );
+               $request = \RequestContext::getMain()->getRequest();
+               $manager->globalSession = $backend->getSession( $request );
+               $manager->globalSessionRequest = $request;
+
+               session_id( self::SESSIONID . 'x' );
+               \MediaWiki\quietCall( 'session_start' );
+               $backend->unpersist();
+               $this->assertSame( self::SESSIONID . 'x', session_id() );
+
+               session_id( self::SESSIONID );
+               $wrap->persist = true;
+               $backend->unpersist();
+               $this->assertSame( '', session_id() );
        }
 
        public function testGetAllowedUserRights() {
index d3d8509..b0f84fc 100644 (file)
@@ -3,7 +3,6 @@
 namespace MediaWiki\Session;
 
 use AuthPlugin;
-use MediaWiki\Logger\LoggerFactory;
 use MediaWikiTestCase;
 use Psr\Log\LogLevel;
 use User;
@@ -132,6 +131,8 @@ class SessionManagerTest extends MediaWikiTestCase {
        public function testGetSessionForRequest() {
                $manager = $this->getManager();
                $request = new \FauxRequest();
+               $request->unpersist1 = false;
+               $request->unpersist2 = false;
 
                $id1 = '';
                $id2 = '';
@@ -139,7 +140,7 @@ class SessionManagerTest extends MediaWikiTestCase {
 
                $providerBuilder = $this->getMockBuilder( 'DummySessionProvider' )
                        ->setMethods(
-                               [ 'provideSessionInfo', 'newSessionInfo', '__toString', 'describe' ]
+                               [ 'provideSessionInfo', 'newSessionInfo', '__toString', 'describe', 'unpersistSession' ]
                        );
 
                $provider1 = $providerBuilder->getMock();
@@ -161,6 +162,10 @@ class SessionManagerTest extends MediaWikiTestCase {
                        ->will( $this->returnValue( 'Provider1' ) );
                $provider1->expects( $this->any() )->method( 'describe' )
                        ->will( $this->returnValue( '#1 sessions' ) );
+               $provider1->expects( $this->any() )->method( 'unpersistSession' )
+                       ->will( $this->returnCallback( function ( $request ) {
+                               $request->unpersist1 = true;
+                       } ) );
 
                $provider2 = $providerBuilder->getMock();
                $provider2->expects( $this->any() )->method( 'provideSessionInfo' )
@@ -172,6 +177,10 @@ class SessionManagerTest extends MediaWikiTestCase {
                        ->will( $this->returnValue( 'Provider2' ) );
                $provider2->expects( $this->any() )->method( 'describe' )
                        ->will( $this->returnValue( '#2 sessions' ) );
+               $provider2->expects( $this->any() )->method( 'unpersistSession' )
+                       ->will( $this->returnCallback( function ( $request ) {
+                               $request->unpersist2 = true;
+                       } ) );
 
                $this->config->set( 'SessionProviders', [
                        $this->objectCacheDef( $provider1 ),
@@ -184,6 +193,8 @@ class SessionManagerTest extends MediaWikiTestCase {
                $session = $manager->getSessionForRequest( $request );
                $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
                $this->assertSame( $idEmpty, $session->getId() );
+               $this->assertFalse( $request->unpersist1 );
+               $this->assertFalse( $request->unpersist2 );
 
                // Both providers return info, picks best one
                $request->info1 = new SessionInfo( SessionInfo::MIN_PRIORITY + 1, [
@@ -201,6 +212,8 @@ class SessionManagerTest extends MediaWikiTestCase {
                $session = $manager->getSessionForRequest( $request );
                $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
                $this->assertSame( $id2, $session->getId() );
+               $this->assertFalse( $request->unpersist1 );
+               $this->assertFalse( $request->unpersist2 );
 
                $request->info1 = new SessionInfo( SessionInfo::MIN_PRIORITY + 2, [
                        'provider' => $provider1,
@@ -217,6 +230,8 @@ class SessionManagerTest extends MediaWikiTestCase {
                $session = $manager->getSessionForRequest( $request );
                $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
                $this->assertSame( $id1, $session->getId() );
+               $this->assertFalse( $request->unpersist1 );
+               $this->assertFalse( $request->unpersist2 );
 
                // Tied priorities
                $request->info1 = new SessionInfo( SessionInfo::MAX_PRIORITY, [
@@ -236,7 +251,7 @@ class SessionManagerTest extends MediaWikiTestCase {
                try {
                        $manager->getSessionForRequest( $request );
                        $this->fail( 'Expcected exception not thrown' );
-               } catch ( \OverFlowException $ex ) {
+               } catch ( \OverflowException $ex ) {
                        $this->assertStringStartsWith(
                                'Multiple sessions for this request tied for top priority: ',
                                $ex->getMessage()
@@ -245,6 +260,8 @@ class SessionManagerTest extends MediaWikiTestCase {
                        $this->assertContains( $request->info1, $ex->sessionInfos );
                        $this->assertContains( $request->info2, $ex->sessionInfos );
                }
+               $this->assertFalse( $request->unpersist1 );
+               $this->assertFalse( $request->unpersist2 );
 
                // Bad provider
                $request->info1 = new SessionInfo( SessionInfo::MAX_PRIORITY, [
@@ -263,6 +280,8 @@ class SessionManagerTest extends MediaWikiTestCase {
                                $ex->getMessage()
                        );
                }
+               $this->assertFalse( $request->unpersist1 );
+               $this->assertFalse( $request->unpersist2 );
 
                // Unusable session info
                $this->logger->setCollect( true );
@@ -283,6 +302,31 @@ class SessionManagerTest extends MediaWikiTestCase {
                $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
                $this->assertSame( $id2, $session->getId() );
                $this->logger->setCollect( false );
+               $this->assertTrue( $request->unpersist1 );
+               $this->assertFalse( $request->unpersist2 );
+               $request->unpersist1 = false;
+
+               $this->logger->setCollect( true );
+               $request->info1 = new SessionInfo( SessionInfo::MAX_PRIORITY, [
+                       'provider' => $provider1,
+                       'id' => ( $id1 = $manager->generateSessionId() ),
+                       'persisted' => true,
+                       'idIsSafe' => true,
+               ] );
+               $request->info2 = new SessionInfo( SessionInfo::MAX_PRIORITY, [
+                       'provider' => $provider2,
+                       'id' => ( $id2 = $manager->generateSessionId() ),
+                       'persisted' => true,
+                       'userInfo' => UserInfo::newFromName( 'UTSysop', false ),
+                       'idIsSafe' => true,
+               ] );
+               $session = $manager->getSessionForRequest( $request );
+               $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
+               $this->assertSame( $id1, $session->getId() );
+               $this->logger->setCollect( false );
+               $this->assertFalse( $request->unpersist1 );
+               $this->assertTrue( $request->unpersist2 );
+               $request->unpersist2 = false;
 
                // Unpersisted session ID
                $request->info1 = new SessionInfo( SessionInfo::MAX_PRIORITY, [
@@ -296,6 +340,8 @@ class SessionManagerTest extends MediaWikiTestCase {
                $session = $manager->getSessionForRequest( $request );
                $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
                $this->assertSame( $id1, $session->getId() );
+               $this->assertTrue( $request->unpersist1 ); // The saving of the session does it
+               $this->assertFalse( $request->unpersist2 );
                $session->persist();
                $this->assertTrue( $session->isPersistent(), 'sanity check' );
        }
@@ -335,6 +381,40 @@ class SessionManagerTest extends MediaWikiTestCase {
                $session = $manager->getSessionById( $id, false );
                $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
                $this->assertSame( $id, $session->getId() );
+
+               // Store isn't checked if the session is already loaded
+               $this->store->setSession( $id, [ 'metadata' => [
+                       'userId' => User::idFromName( 'UTSysop' ),
+                       'userToken' => 'bad',
+               ] ] );
+               $session2 = $manager->getSessionById( $id, false );
+               $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session2 );
+               $this->assertSame( $id, $session2->getId() );
+               unset( $session, $session2 );
+               $this->logger->setCollect( true );
+               $this->assertNull( $manager->getSessionById( $id, true ) );
+               $this->logger->setCollect( false );
+
+               // Failure to create an empty session
+               $manager = $this->getManager();
+               $provider = $this->getMockBuilder( 'DummySessionProvider' )
+                       ->setMethods( [ 'provideSessionInfo', 'newSessionInfo', '__toString' ] )
+                       ->getMock();
+               $provider->expects( $this->any() )->method( 'provideSessionInfo' )
+                       ->will( $this->returnValue( null ) );
+               $provider->expects( $this->any() )->method( 'newSessionInfo' )
+                       ->will( $this->returnValue( null ) );
+               $provider->expects( $this->any() )->method( '__toString' )
+                       ->will( $this->returnValue( 'MockProvider' ) );
+               $this->config->set( 'SessionProviders', [
+                       $this->objectCacheDef( $provider ),
+               ] );
+               $this->logger->setCollect( true );
+               $this->assertNull( $manager->getSessionById( $id, true ) );
+               $this->logger->setCollect( false );
+               $this->assertSame( [
+                       [ LogLevel::ERROR, 'Failed to create empty session: {exception}' ]
+               ], $this->logger->getBuffer() );
        }
 
        public function testGetEmptySession() {
@@ -763,7 +843,7 @@ class SessionManagerTest extends MediaWikiTestCase {
 
                \ObjectCache::$instances[__METHOD__] = new TestBagOStuff();
                $this->setMwGlobals( [ 'wgMainCacheType' => __METHOD__ ] );
-               $this->setMWGlobals( [
+               $this->setMwGlobals( [
                        'wgAuth' => new AuthPlugin,
                ] );
 
@@ -1677,74 +1757,4 @@ class SessionManagerTest extends MediaWikiTestCase {
                ], $logger->getBuffer() );
                $logger->clearBuffer();
        }
-
-       /**
-        * @dataProvider provideCheckIpLimits
-        */
-       public function testCheckIpLimits( $ip, $sessionData, $userData, $logLevel1, $logLevel2 ) {
-               $this->setMwGlobals( [
-                       'wgSuspiciousIpPerSessionLimit' => 5,
-                       'wgSuspiciousIpPerUserLimit' => 10,
-                       'wgSuspiciousIpExpiry' => 600,
-                       'wgSquidServers' => [ '11.22.33.44' ],
-               ] );
-               $manager = new SessionManager();
-               $logger = $this->getMock( '\Psr\Log\LoggerInterface' );
-               $this->setLogger( 'session-ip', $logger );
-               $request = new \FauxRequest();
-               $request->setIP( $ip );
-
-               $session = $manager->getSessionForRequest( $request );
-               /** @var SessionBackend $backend */
-               $backend = \TestingAccessWrapper::newFromObject( $session )->backend;
-               $data = &$backend->getData();
-               $data = [ 'SessionManager-ip' => $sessionData ];
-               $backend->setUser( User::newFromName( 'UTSysop' ) );
-               $manager = \TestingAccessWrapper::newFromObject( $manager );
-               $manager->store->set( 'SessionManager-ip:' . md5( 'UTSysop' ), $userData );
-
-               $logger->expects( $this->exactly( isset( $logLevel1 ) + isset( $logLevel2 ) ) )->method( 'log' );
-               if ( $logLevel1 ) {
-                       $logger->expects( $this->at( 0 ) )->method( 'log' )->with( $logLevel1,
-                               'Same session used from {count} IPs', $this->isType( 'array' ) );
-               }
-               if ( $logLevel2 ) {
-                       $logger->expects( $this->at( isset( $logLevel1 ) ) )->method( 'log' )->with( $logLevel2,
-                               'Same user had sessions from {count} IPs', $this->isType( 'array' ) );
-               }
-
-               $manager->checkIpLimits( $session );
-       }
-
-       public function provideCheckIpLimits() {
-               $future = time() + 1000;
-               $past = time() - 1000;
-               return [
-                       // DEBUG log for first new IP
-                       [ '1.2.3.4', [], [], LogLevel::DEBUG, LogLevel::DEBUG ],
-                       // no log for same IP
-                       [ '1.2.3.4', [ '1.2.3.4'  => $future ], [ '1.2.3.4' => $future ],
-                                  null, null ],
-                       [ '1.2.3.4', [], [ '1.2.3.4' => $future ],
-                                  LogLevel::DEBUG, null ],
-                       // INFO log for second new IP
-                       [ '1.2.3.4', [ '10.20.30.40'  => $future ], [ '10.20.30.40' => $future ],
-                          LogLevel::INFO, LogLevel::INFO ],
-                       // WARNING above $wgSuspiciousIpPerSessionLimit
-                       [ '1.2.3.4', array_fill_keys( range( 1, 5 ), $future ),
-                          array_fill_keys( range( 1, 5 ), $future ), LogLevel::WARNING, LogLevel::INFO ],
-                       // WARNING above $wgSuspiciousIpPerUserLimit
-
-                       [ '1.2.3.4', array_fill_keys( range( 1, 2 ), $future ),
-                                  array_fill_keys( range( 1, 12 ), $future ), LogLevel::INFO, LogLevel::WARNING ],
-                       // expired keys ignored
-                       [ '1.2.3.4', [ '1.2.3.4'  => $past ], [ '1.2.3.4' => $past ],
-                          LogLevel::DEBUG, LogLevel::DEBUG ],
-                       [ '1.2.3.4', array_fill_keys( range( 1, 5 ), $past ),
-                                  array_fill_keys( range( 1, 5 ), $past ), LogLevel::DEBUG, LogLevel::DEBUG ],
-                       // special IPs are ignored
-                       [ '127.0.0.1', [], [], null, null ],
-                       [ '11.22.33.44', [], [], null, null ],
-               ];
-       }
 }
index 24b9716..e92eb09 100644 (file)
@@ -128,6 +128,11 @@ class SessionProviderTest extends MediaWikiTestCase {
                        $provider->preventSessionsForUser( 'Foo' );
                        $this->fail( 'Expected exception not thrown' );
                } catch ( \BadMethodCallException $ex ) {
+                       $this->assertSame(
+                               'MediaWiki\\Session\\SessionProvider::preventSessionsForUser must be implmented ' .
+                                       'when canChangeUser() is false',
+                               $ex->getMessage()
+                       );
                }
 
        }
index d0ebc9c..a4727c4 100644 (file)
@@ -75,6 +75,7 @@ class SessionTest extends MediaWikiTestCase {
                        [ 'getProvider', [], false, true ],
                        [ 'isPersistent', [], false, true ],
                        [ 'persist', [], false, false ],
+                       [ 'unpersist', [], false, false ],
                        [ 'shouldRememberUser', [], false, true ],
                        [ 'setRememberUser', [ true ], false, false ],
                        [ 'getRequest', [], true, true ],
index 8084a66..9e3a620 100644 (file)
@@ -23,20 +23,20 @@ class SkinTemplateTest extends MediaWikiTestCase {
        }
 
        public function makeListItemProvider() {
-               return array(
-                       array(
+               return [
+                       [
                                '<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 998d2bb..534cf9b 100644 (file)
@@ -171,7 +171,7 @@ class SpecialPageFactoryTest extends MediaWikiTestCase {
                $gotWarnings = count( $warnings );
                if ( $gotWarnings !== $expectWarnings ) {
                        $this->fail( "Expected $expectWarnings warning(s), but got $gotWarnings:\n" .
-                               join( "\n", $warnings )
+                               implode( "\n", $warnings )
                        );
                }
        }
diff --git a/tests/phpunit/includes/specials/SpecialEditWatchlistTest.php b/tests/phpunit/includes/specials/SpecialEditWatchlistTest.php
new file mode 100644 (file)
index 0000000..cd84d79
--- /dev/null
@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * @author Addshore
+ *
+ * @group Database
+ *
+ * @covers SpecialEditWatchlist
+ */
+class SpecialEditWatchlistTest extends SpecialPageTestBase {
+
+       /**
+        * Returns a new instance of the special page under test.
+        *
+        * @return SpecialPage
+        */
+       protected function newSpecialPage() {
+               return new SpecialEditWatchlist();
+       }
+
+       public function testNotLoggedIn_throwsException() {
+               $this->setExpectedException( 'UserNotLoggedIn' );
+               $this->executeSpecialPage();
+       }
+
+       public function testRootPage_displaysExplanationMessage() {
+               $user = new TestUser( __METHOD__ );
+               list( $html, ) = $this->executeSpecialPage( '', null, 'qqx', $user->getUser() );
+               $this->assertContains( '(watchlistedit-normal-explain)', $html );
+       }
+
+       public function testClearPage_hasClearButtonForm() {
+               $user = new TestUser( __METHOD__ );
+               list( $html, ) = $this->executeSpecialPage( 'clear', null, 'qqx', $user->getUser() );
+               $this->assertRegExp(
+                       '/<form action=".*?Special:EditWatchlist\/clear" method="post" class="visualClear">/',
+                       $html
+               );
+       }
+
+       public function testEditRawPage_hasTitlesBox() {
+               $user = new TestUser( __METHOD__ );
+               list( $html, ) = $this->executeSpecialPage( 'raw', null, 'qqx', $user->getUser() );
+               $this->assertContains(
+                       '<textarea id="mw-input-wpTitles"',
+                       $html
+               );
+       }
+
+}
index 548b75b..89fd1b0 100644 (file)
@@ -5,7 +5,7 @@
  * @covers SpecialMyLanguage
  */
 class SpecialMyLanguageTest extends MediaWikiTestCase {
-       public function addDBData() {
+       public function addDBDataOnce() {
                $titles = [
                        'Page/Another',
                        'Page/Another/ru',
diff --git a/tests/phpunit/includes/specials/SpecialWatchlistTest.php b/tests/phpunit/includes/specials/SpecialWatchlistTest.php
new file mode 100644 (file)
index 0000000..6e702b6
--- /dev/null
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * @author Addshore
+ *
+ * @group Database
+ *
+ * @covers SpecialWatchlist
+ */
+class SpecialWatchlistTest extends SpecialPageTestBase {
+
+       /**
+        * Returns a new instance of the special page under test.
+        *
+        * @return SpecialPage
+        */
+       protected function newSpecialPage() {
+               return new SpecialWatchlist();
+       }
+
+       public function testNotLoggedIn_throwsException() {
+               $this->setExpectedException( 'UserNotLoggedIn' );
+               $this->executeSpecialPage();
+       }
+
+       public function testUserWithNoWatchedItems_displaysNoWatchlistMessage() {
+               $user = new TestUser( __METHOD__ );
+               list( $html, ) = $this->executeSpecialPage( '', null, 'qqx', $user->getUser() );
+               $this->assertContains( '(nowatchlist)', $html );
+       }
+
+}
index 1ac5e59..0bb0afe 100644 (file)
@@ -32,10 +32,6 @@ class MediaWikiTitleCodecTest extends MediaWikiTestCase {
                parent::setUp();
 
                $this->setMwGlobals( [
-                       'wgLanguageCode' => 'en',
-                       'wgContLang' => Language::factory( 'en' ),
-                       // User language
-                       'wgLang' => Language::factory( 'en' ),
                        'wgAllowUserJs' => false,
                        'wgDefaultLanguageVariant' => false,
                        'wgMetaNamespace' => 'Project',
@@ -57,6 +53,8 @@ class MediaWikiTitleCodecTest extends MediaWikiTestCase {
                                ]
                        ]
                ] );
+               $this->setUserLang( 'en' );
+               $this->setContentLang( 'en' );
        }
 
        /**
index e2b138b..c86fb6c 100644 (file)
@@ -104,11 +104,11 @@ class LocalIdLookupTest extends MediaWikiTestCase {
                $this->assertTrue( $lookup->isAttached( $user1 ) );
                $this->assertFalse( $lookup->isAttached( $user2 ) );
 
-               $wiki = wfWikiId();
+               $wiki = wfWikiID();
                $this->assertTrue( $lookup->isAttached( $user1, $wiki ) );
                $this->assertFalse( $lookup->isAttached( $user2, $wiki ) );
 
-               $wiki = 'not-' . wfWikiId();
+               $wiki = 'not-' . wfWikiID();
                $this->assertFalse( $lookup->isAttached( $user1, $wiki ) );
                $this->assertFalse( $lookup->isAttached( $user2, $wiki ) );
        }
index db18b72..2de4bff 100644 (file)
@@ -18,7 +18,7 @@ class FileContentsHasherTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers FileContentsHasher::getFileContentHash
+        * @covers FileContentsHasher::getFileContentsHash
         * @covers FileContentsHasher::getFileContentsHashInternal
         * @dataProvider provideSingleFile
         */
@@ -33,7 +33,7 @@ class FileContentsHasherTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers FileContentsHasher::getFileContentHash
+        * @covers FileContentsHasher::getFileContentsHash
         * @covers FileContentsHasher::getFileContentsHashInternal
         * @dataProvider provideMultipleFiles
         */
index 5dc0498..17442b8 100644 (file)
@@ -28,10 +28,10 @@ class MWCryptHKDFTest extends MediaWikiTestCase {
         * @dataProvider providerRfc5869
         */
        public function testRfc5869( $hash, $ikm, $salt, $info, $L, $prk, $okm ) {
-               $ikm = pack( 'H*', $ikm );
-               $salt = pack( 'H*', $salt );
-               $info = pack( 'H*', $info );
-               $okm = pack( 'H*', $okm );
+               $ikm = hex2bin( $ikm );
+               $salt = hex2bin( $salt );
+               $info = hex2bin( $info );
+               $okm = hex2bin( $okm );
                $result = MWCryptHKDF::HKDF( $hash, $ikm, $salt, $info, $L );
                $this->assertEquals( $okm, $result );
        }
index ad54e2f..4c85c3d 100644 (file)
@@ -26,7 +26,7 @@ class MWCryptHashTest extends MediaWikiTestCase {
                // @codingStandardsIgnoreEnd
 
                $this->assertEquals(
-                       pack( 'H*', $hash ),
+                       hex2bin( $hash ),
                        MWCryptHash::hash( $data ),
                        'Raw hash'
                );
@@ -49,7 +49,7 @@ class MWCryptHashTest extends MediaWikiTestCase {
                // @codingStandardsIgnoreEnd
 
                $this->assertEquals(
-                       pack( 'H*', $hash ),
+                       hex2bin( $hash ),
                        MWCryptHash::hmac( $data, $key ),
                        'Raw hmac'
                );
index 5e99d69..6d7325d 100644 (file)
@@ -79,7 +79,7 @@ class UIDGeneratorTest extends PHPUnit_Framework_TestCase {
                                preg_match( '!^[0-9a-f]{12}1[0-9a-f]{3}[89ab][0-9a-f]{15}$!', $id ),
                                "UID $id has the right format" );
 
-                       $id = UIDGenerator::newRawUUIDv1( UIDGenerator::QUICK_RAND );
+                       $id = UIDGenerator::newRawUUIDv1();
                        $this->assertEquals( true,
                                preg_match( '!^[0-9a-f]{12}1[0-9a-f]{3}[89ab][0-9a-f]{15}$!', $id ),
                                "UID $id has the right format" );
index f93ff7d..2216ba4 100644 (file)
@@ -47,7 +47,7 @@ abstract class LanguageClassesTestCase extends MediaWikiTestCase {
         */
        protected function setUp() {
                parent::setUp();
-               $found = preg_match( '/Language(.+)Test/', get_called_class(), $m );
+               $found = preg_match( '/Language(.+)Test/', static::class, $m );
                if ( $found ) {
                        # Normalize language code since classes uses underscores
                        $m[1] = strtolower( str_replace( '_', '-', $m[1] ) );
@@ -55,8 +55,8 @@ abstract class LanguageClassesTestCase extends MediaWikiTestCase {
                        # Fallback to english language
                        $m[1] = 'en';
                        wfDebug(
-                               __METHOD__ . " could not extract a language name "
-                                       . "out of " . get_called_class() . " failling back to 'en'\n"
+                               __METHOD__ . ' could not extract a language name '
+                                       . 'out of ' . static::class . " failling back to 'en'\n"
                        );
                }
                // @todo validate $m[1] which should be a valid language code
index 20f4c4f..3f80b90 100644 (file)
@@ -281,7 +281,7 @@ class LanguageTest extends LanguageClassesTestCase {
                // Actual HTML...
                $this->assertEquals(
                        $expected,
-                       $this->getLang()->truncateHTML( $input, $len, $ellipsis )
+                       $this->getLang()->truncateHtml( $input, $len, $ellipsis )
                );
        }
 
index e015216..d7e72bb 100644 (file)
@@ -114,7 +114,7 @@ class TextPassDumperDatabaseTest extends DumpTestCase {
                $dumper = new TextPassDumper( [ "--stub=file:" . $nameStub,
                        "--output=file:" . $nameFull ] );
                $dumper->reporting = false;
-               $dumper->setDb( $this->db );
+               $dumper->setDB( $this->db );
 
                // Performing the dump
                $dumper->dump( WikiExporter::FULL, WikiExporter::TEXT );
@@ -183,7 +183,7 @@ class TextPassDumperDatabaseTest extends DumpTestCase {
 
                $dumper->prefetch = $prefetchMock;
                $dumper->reporting = false;
-               $dumper->setDb( $this->db );
+               $dumper->setDB( $this->db );
 
                // Performing the dump
                $dumper->dump( WikiExporter::FULL, WikiExporter::TEXT );
@@ -274,7 +274,7 @@ class TextPassDumperDatabaseTest extends DumpTestCase {
                                "--maxtime=1" /*This is in minutes. Fixup is below*/,
                                "--buffersize=32768", // The default of 32 iterations fill up 32KB about twice
                                "--checkpointfile=checkpoint-%s-%s.xml.gz" ] );
-                       $dumper->setDb( $this->db );
+                       $dumper->setDB( $this->db );
                        $dumper->maxTimeAllowed = $checkpointAfter; // Patching maxTime from 1 minute
                        $dumper->stderr = $stderr;
 
index 0b2f7fb..0019a3f 100644 (file)
@@ -146,7 +146,7 @@ class BackupDumperLoggerTest extends DumpTestCase {
                $dumper->startId = $this->logId1;
                $dumper->endId = $this->logId3 + 1;
                $dumper->reporting = false;
-               $dumper->setDb( $this->db );
+               $dumper->setDB( $this->db );
 
                // Performing the dump
                $dumper->dump( WikiExporter::LOGS, WikiExporter::TEXT );
@@ -185,7 +185,7 @@ class BackupDumperLoggerTest extends DumpTestCase {
                        '--reporting=2' ] );
                $dumper->startId = $this->logId1;
                $dumper->endId = $this->logId3 + 1;
-               $dumper->setDb( $this->db );
+               $dumper->setDB( $this->db );
 
                // xmldumps-backup demands reporting, although this is currently not
                // implemented in BackupDumper, when dumping logging data. We
index 5cd8336..2262cc0 100644 (file)
@@ -104,7 +104,7 @@ class BackupDumperPageTest extends DumpTestCase {
                $dumper->loadWithArgv( [ '--full', '--quiet', '--output', 'file:' . $fname ] );
                $dumper->startId = $this->pageId1;
                $dumper->endId = $this->pageId4 + 1;
-               $dumper->setDb( $this->db );
+               $dumper->setDB( $this->db );
 
                // Performing the dump
                $dumper->execute();
@@ -160,7 +160,7 @@ class BackupDumperPageTest extends DumpTestCase {
                $dumper->loadWithArgv( [ '--full', '--quiet', '--output', 'file:' . $fname, '--stub' ] );
                $dumper->startId = $this->pageId1;
                $dumper->endId = $this->pageId4 + 1;
-               $dumper->setDb( $this->db );
+               $dumper->setDB( $this->db );
 
                // Performing the dump
                $dumper->execute();
@@ -210,7 +210,7 @@ class BackupDumperPageTest extends DumpTestCase {
                $dumper->startId = $this->pageId1;
                $dumper->endId = $this->pageId4 + 1;
                $dumper->reporting = false;
-               $dumper->setDb( $this->db );
+               $dumper->setDB( $this->db );
 
                // Performing the dump
                $dumper->dump( WikiExporter::CURRENT, WikiExporter::STUB );
@@ -256,7 +256,7 @@ class BackupDumperPageTest extends DumpTestCase {
                $dumper->startId = $this->pageId1;
                $dumper->endId = $this->pageId4 + 1;
                $dumper->reporting = false;
-               $dumper->setDb( $this->db );
+               $dumper->setDB( $this->db );
 
                // Performing the dump
                $dumper->dump( WikiExporter::CURRENT, WikiExporter::STUB );
@@ -318,7 +318,7 @@ class BackupDumperPageTest extends DumpTestCase {
                        "--reporting=1000" ] );
                $dumper->startId = $this->pageId1;
                $dumper->endId = $this->pageId4 + 1;
-               $dumper->setDb( $this->db );
+               $dumper->setDB( $this->db );
 
                // xmldumps-backup uses reporting. We will not check the exact reported
                // message, as they are dependent on the processing power of the used
index 0c69027..cdb3f78 100644 (file)
@@ -82,7 +82,7 @@ class DummyContentForTesting extends AbstractContent {
         * Returns true if this content is countable as a "real" wiki page, provided
         * that it's also in a countable location (e.g. a current revision in the main namespace).
         *
-        * @param bool $hasLinks If it is known whether this content contains links,
+        * @param bool|null $hasLinks If it is known whether this content contains links,
         * provide this information here, to avoid redundant parsing to find out.
         * @return bool
         */
index 889efb7..afc1a4a 100644 (file)
@@ -82,7 +82,7 @@ class DummyNonTextContent extends AbstractContent {
         * Returns true if this content is countable as a "real" wiki page, provided
         * that it's also in a countable location (e.g. a current revision in the main namespace).
         *
-        * @param bool $hasLinks If it is known whether this content contains links,
+        * @param bool|null $hasLinks If it is known whether this content contains links,
         * provide this information here, to avoid redundant parsing to find out.
         * @return bool
         */
diff --git a/tests/phpunit/mocks/media/MockOggHandler.php b/tests/phpunit/mocks/media/MockOggHandler.php
new file mode 100644 (file)
index 0000000..b110e21
--- /dev/null
@@ -0,0 +1,93 @@
+<?php
+/**
+ * Fake handler for Ogg videos.
+ *
+ * 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 Media
+ */
+
+class MockOggHandler extends OggHandlerTMH {
+       function doTransform( $file, $dstPath, $dstUrl, $params, $flags = 0 ) {
+               # Important or height handling is wrong.
+               if ( !$this->normaliseParams( $file, $params ) ) {
+                       return new TransformParameterError( $params );
+               }
+
+               $srcWidth = $file->getWidth();
+               $srcHeight = $file->getHeight();
+
+               // Audio should not be transformed by size, give it a default width and height
+               if ( $this->isAudio( $file ) ) {
+                       $srcWidth = 220;
+                       $srcHeight = 23;
+               }
+
+               $params['width'] = isset( $params['width'] ) ? $params['width'] : $srcWidth;
+
+               // if height overtakes width use height as max:
+               $targetWidth = $params['width'];
+               $targetHeight = $srcWidth == 0 ? $srcHeight : round( $params['width'] * $srcHeight / $srcWidth );
+               if ( isset( $params['height'] ) && $targetHeight > $params['height'] ) {
+                       $targetHeight = $params['height'];
+                       $targetWidth = round( $params['height'] * $srcWidth / $srcHeight );
+               }
+               $options = [
+                       'file' => $file,
+                       'length' => $this->getLength( $file ),
+                       'offset' => $this->getOffset( $file ),
+                       'width' => $targetWidth,
+                       'height' =>  $targetHeight,
+                       'isVideo' => !$this->isAudio( $file ),
+                       'thumbtime' => isset(
+                               $params['thumbtime']
+                       ) ? $params['thumbtime'] : intval( $file->getLength() / 2 ),
+                       'start' => isset( $params['start'] ) ? $params['start'] : false,
+                       'end' => isset( $params['end'] ) ? $params['end'] : false,
+                       'fillwindow' => isset( $params['fillwindow'] ) ? $params['fillwindow'] : false,
+                       'disablecontrols' => isset ( $params['disablecontrols'] ) ? $params['disablecontrols'] : false
+               ];
+
+               // No thumbs for audio
+               if ( !$options['isVideo'] ) {
+                       return new TimedMediaTransformOutput( $options );
+               }
+
+               // Setup pointer to thumb arguments
+               $options[ 'thumbUrl' ] = $dstUrl;
+               $options[ 'dstPath' ] = $dstPath;
+               $options[ 'path' ] = $dstPath;
+
+               return new TimedMediaTransformOutput( $options );
+       }
+
+       function getLength( $file ) {
+               return 4.3666666666667;
+       }
+
+       function getBitRate( $file ) {
+               return 590013;
+       }
+
+       function getWebType( $file ) {
+               return "video/ogg; codecs=\"theora\"";
+       }
+
+       function getFramerate( $file ) {
+               return 30;
+       }
+}
index 66e8182..4d060e4 100755 (executable)
@@ -10,6 +10,8 @@
 // through this entry point or not.
 define( 'MW_PHPUNIT_TEST', true );
 
+$wgPhpUnitClass = 'PHPUnit_TextUI_Command';
+
 // Start up MediaWiki in command-line mode
 require_once dirname( dirname( __DIR__ ) ) . "/maintenance/Maintenance.php";
 
@@ -30,11 +32,10 @@ class PHPUnitMaintClass extends Maintenance {
        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`.',
-                       false, # not required
-                       true # need arg
+                       'with-phpunitclass',
+                       'Class name of the PHPUnit entry point to use',
+                       false,
+                       true
                );
                $this->addOption(
                        'debug-tests',
@@ -158,51 +159,18 @@ class PHPUnitMaintClass extends Maintenance {
                                [ '--configuration', $IP . '/tests/phpunit/suite.xml' ] );
                }
 
-               # --with-phpunitdir let us override the default PHPUnit version
-               # Can use with either or phpunit.phar in the directory or the
-               # full PHPUnit code base.
-               if ( $this->hasOption( 'with-phpunitdir' ) ) {
-                       $phpunitDir = $this->getOption( 'with-phpunitdir' );
-
-                       # prepends provided PHPUnit directory or phar
-                       $this->output( "Will attempt loading PHPUnit from `$phpunitDir`\n" );
-                       set_include_path( $phpunitDir . PATH_SEPARATOR . get_include_path() );
+               if ( $this->hasOption( 'with-phpunitclass' ) ) {
+                       global $wgPhpUnitClass;
+                       $wgPhpUnitClass = $this->getOption( 'with-phpunitclass' );
 
                        # Cleanup $args array so the option and its value do not
                        # pollute PHPUnit
-                       $key = array_search( '--with-phpunitdir', $_SERVER['argv'] );
+                       $key = array_search( '--with-phpunitclass', $_SERVER['argv'] );
                        unset( $_SERVER['argv'][$key] ); // the option
                        unset( $_SERVER['argv'][$key + 1] ); // its value
                        $_SERVER['argv'] = array_values( $_SERVER['argv'] );
                }
 
-               if ( !wfIsWindows() ) {
-                       # If we are not running on windows then we can enable phpunit colors
-                       # Windows does not come anymore with ANSI.SYS loaded by default
-                       # PHPUnit uses the suite.xml parameters to enable/disable colors
-                       # which can be then forced to be enabled with --colors.
-                       # The below code injects a parameter just like if the user called
-                       # Probably fix bug 29226
-                       $key = array_search( '--colors', $_SERVER['argv'] );
-                       if ( $key === false ) {
-                               array_splice( $_SERVER['argv'], 1, 0, '--colors' );
-                       }
-               }
-
-               # Makes MediaWiki PHPUnit directory includable so the PHPUnit will
-               # be able to resolve relative files inclusion such as suites/*
-               # PHPUnit uses stream_resolve_include_path() internally
-               # See bug 32022
-               $key = array_search( '--include-path', $_SERVER['argv'] );
-               if ( $key === false ) {
-                       array_splice( $_SERVER['argv'], 1, 0,
-                               __DIR__
-                               . PATH_SEPARATOR
-                               . get_include_path()
-                       );
-                       array_splice( $_SERVER['argv'], 1, 0, '--include-path' );
-               }
-
                $key = array_search( '--debug-tests', $_SERVER['argv'] );
                if ( $key !== false && array_search( '--printer', $_SERVER['argv'] ) === false ) {
                        unset( $_SERVER['argv'][$key] );
@@ -254,43 +222,14 @@ class PHPUnitMaintClass extends Maintenance {
 $maintClass = 'PHPUnitMaintClass';
 require RUN_MAINTENANCE_IF_MAIN;
 
-$ok = false;
-
-if ( class_exists( 'PHPUnit_TextUI_Command' ) ) {
-       echo "PHPUnit already present\n";
-       $ok = true;
-} else {
-       foreach ( [
-                               stream_resolve_include_path( 'phpunit.phar' ),
-                               stream_resolve_include_path( 'phpunit-old.phar' ),
-                               'PHPUnit/Runner/Version.php',
-                               'PHPUnit/Autoload.php'
-                       ] as $includePath ) {
-
-               if ( $includePath === false ) {
-                       // stream_resolve_include_path can return false
-                       continue;
-               }
-
-               \MediaWiki\suppressWarnings();
-               include_once $includePath;
-               \MediaWiki\restoreWarnings();
-               if ( class_exists( 'PHPUnit_TextUI_Command' ) ) {
-                       $ok = true;
-                       echo "Using PHPUnit from $includePath\n";
-                       break;
-               }
-       }
-}
-
-if ( !$ok ) {
-       echo "Couldn't find a usable PHPUnit.\n";
+if ( !class_exists( 'PHPUnit_Framework_TestCase' ) ) {
+       echo "PHPUnit not found. Please install it and other dev dependencies by
+running `composer install` in MediaWiki root directory.\n";
        exit( 1 );
 }
-
-$puVersion = PHPUnit_Runner_Version::id();
-if ( $puVersion !== '@package_version@' && version_compare( $puVersion, '3.7.0', '<' ) ) {
-       echo "PHPUnit 3.7.0 or later required; you have {$puVersion}.\n";
+if ( !class_exists( $wgPhpUnitClass ) ) {
+       echo "PHPUnit entry point '" . $wgPhpUnitClass . "' not found. Please make sure you installed
+the containing component and check the spelling of the class name.\n";
        exit( 1 );
 }
 
@@ -298,4 +237,4 @@ echo defined( 'HHVM_VERSION' ) ?
        'Using HHVM ' . HHVM_VERSION . ' (' . PHP_VERSION . ")\n" :
        'Using PHP ' . PHP_VERSION . "\n";
 
-PHPUnit_TextUI_Command::main();
+$wgPhpUnitClass::main();
index a3122b9..aaa1feb 100644 (file)
@@ -17,14 +17,14 @@ class SideBarTest extends MediaWikiLangTestCase {
        private function initMessagesHref() {
                # List of default messages for the sidebar. The sidebar doesn't care at
                # all whether they are full URLs, interwiki links or local titles.
-               $URL_messages = array(
+               $URL_messages = [
                        'mainpage',
                        'portal-url',
                        'currentevents-url',
                        'recentchanges-url',
                        'randompage-url',
                        'helppage',
-               );
+               ];
 
                # We're assuming that isValidURI works as advertised: it's also
                # tested separately, in tests/phpunit/includes/HttpTest.php.
@@ -54,7 +54,7 @@ class SideBarTest extends MediaWikiLangTestCase {
         * @todo this assert method to should be converted to a test using a dataprovider..
         */
        private function assertSideBar( $expected, $text, $message = '' ) {
-               $bar = array();
+               $bar = [];
                $this->skin->addToSidebarPlain( $bar, $text );
                $this->assertEquals( $expected, $bar, $message );
        }
@@ -64,10 +64,10 @@ class SideBarTest extends MediaWikiLangTestCase {
         */
        public function testSidebarWithOnlyTwoTitles() {
                $this->assertSideBar(
-                       array(
-                               'Title1' => array(),
-                               'Title2' => array(),
-                       ),
+                       [
+                               'Title1' => [],
+                               'Title2' => [],
+                       ],
                        '* Title1
 * Title2
 '
@@ -78,15 +78,15 @@ class SideBarTest extends MediaWikiLangTestCase {
         * @covers SkinTemplate::addToSidebarPlain
         */
        public function testExpandMessages() {
-               $this->assertSidebar(
-                       array( 'Title' => array(
-                               array(
+               $this->assertSideBar(
+                       [ 'Title' => [
+                               [
                                        'text' => 'Help',
                                        'href' => $this->messages['helppage']['href'],
                                        'id' => 'n-help',
                                        'active' => null
-                               )
-                       ) ),
+                               ]
+                       ] ],
                        '* Title
 ** helppage|help
 '
@@ -97,24 +97,24 @@ class SideBarTest extends MediaWikiLangTestCase {
         * @covers SkinTemplate::addToSidebarPlain
         */
        public function testExternalUrlsRequireADescription() {
-               $this->setMwGlobals( array(
+               $this->setMwGlobals( [
                        'wgNoFollowLinks' => true,
-                       'wgNoFollowDomainExceptions' => array(),
-                       'wgNoFollowNsExceptions' => array(),
-               ) );
-               $this->assertSidebar(
-                       array( 'Title' => array(
+                       'wgNoFollowDomainExceptions' => [],
+                       'wgNoFollowNsExceptions' => [],
+               ] );
+               $this->assertSideBar(
+                       [ 'Title' => [
                                # ** http://www.mediawiki.org/| Home
-                               array(
+                               [
                                        'text' => 'Home',
                                        'href' => 'http://www.mediawiki.org/',
                                        'id' => 'n-Home',
                                        'active' => null,
                                        'rel' => 'nofollow',
-                               ),
+                               ],
                                # ** http://valid.no.desc.org/
                                # ... skipped since it is missing a pipe with a description
-                       ) ),
+                       ] ],
                        '* Title
 ** http://www.mediawiki.org/| Home
 ** http://valid.no.desc.org/
@@ -128,25 +128,25 @@ class SideBarTest extends MediaWikiLangTestCase {
         * @covers SkinTemplate::addToSidebarPlain
         */
        public function testTrickyPipe() {
-               $this->assertSidebar(
-                       array( 'Title' => array(
+               $this->assertSideBar(
+                       [ 'Title' => [
                                # The first 2 are skipped
                                # Doesn't really test the url properly
                                # because it will vary with $wgArticlePath et al.
                                # ** Baz|Fred
-                               array(
+                               [
                                        'text' => 'Fred',
                                        'href' => Title::newFromText( 'Baz' )->getLocalURL(),
                                        'id' => 'n-Fred',
                                        'active' => null,
-                               ),
-                               array(
+                               ],
+                               [
                                        'text' => 'title-to-display',
                                        'href' => Title::newFromText( 'page-to-go-to' )->getLocalURL(),
                                        'id' => 'n-title-to-display',
                                        'active' => null,
-                               ),
-                       ) ),
+                               ],
+                       ] ],
                        '* Title
 ** {{PAGENAME|Foo}}
 ** Bar
@@ -162,8 +162,8 @@ class SideBarTest extends MediaWikiLangTestCase {
                $text = '* Title
 ** http://www.mediawiki.org/| Home';
 
-               $bar = array();
-               $this->skin->addToSideBarPlain( $bar, $text );
+               $bar = [];
+               $this->skin->addToSidebarPlain( $bar, $text );
 
                return $bar['Title'][0];
        }
@@ -172,12 +172,12 @@ class SideBarTest extends MediaWikiLangTestCase {
         * Simple test to verify our helper assertAttribs() is functional
         */
        public function testTestAttributesAssertionHelper() {
-               $this->setMwGlobals( array(
+               $this->setMwGlobals( [
                        'wgNoFollowLinks' => true,
-                       'wgNoFollowDomainExceptions' => array(),
-                       'wgNoFollowNsExceptions' => array(),
+                       'wgNoFollowDomainExceptions' => [],
+                       'wgNoFollowNsExceptions' => [],
                        'wgExternalLinkTarget' => false,
-               ) );
+               ] );
                $attribs = $this->getAttribs();
 
                $this->assertArrayHasKey( 'rel', $attribs );
@@ -211,9 +211,9 @@ class SideBarTest extends MediaWikiLangTestCase {
        }
 
        public static function dataRespectExternallinktarget() {
-               return array(
-                       array( '_blank' ),
-                       array( '_self' ),
-               );
+               return [
+                       [ '_blank' ],
+                       [ '_self' ],
+               ];
        }
 }
index b9cb6c1..2049e38 100644 (file)
@@ -65,7 +65,7 @@ class ApiDocumentationTest extends MediaWikiTestCase {
                        RequestContext::getMain()->getConfig(),
                ] ) );
                foreach ( $globals as $k => $v ) {
-                       $this->setMWGlobals( "wg$k", $v );
+                       $this->setMwGlobals( "wg$k", $v );
                }
 
                // Fetch module.
@@ -153,7 +153,7 @@ class ApiDocumentationTest extends MediaWikiTestCase {
                                foreach ( $globals as $k => $v ) {
                                        $g[] = "$k=" . var_export( $v, 1 );
                                }
-                               $k = "Module $path with " . join( ', ', $g );
+                               $k = "Module $path with " . implode( ', ', $g );
                                $ret[$k] = [ $path, $globals ];
                        }
                }
diff --git a/tests/phpunit/structure/ExtensionJsonValidationTest.php b/tests/phpunit/structure/ExtensionJsonValidationTest.php
new file mode 100644 (file)
index 0000000..275c0d1
--- /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
+ */
+
+/**
+ * Validates all loaded extensions and skins using the ExtensionRegistry
+ * against the extension.json schema in the docs/ folder.
+ */
+class ExtensionJsonValidationTest extends PHPUnit_Framework_TestCase {
+
+       public function setUp() {
+               parent::setUp();
+               if ( !class_exists( 'JsonSchema\Uri\UriRetriever' ) ) {
+                       $this->markTestSkipped(
+                               'The JsonSchema library cannot be found,' .
+                               ' please install it through composer to run extension.json validation tests.'
+                       );
+               }
+
+               if ( !ExtensionRegistry::getInstance()->getAllThings() ) {
+                       $this->markTestSkipped(
+                               'There are no extensions or skins loaded via the ExtensionRegistry'
+                       );
+               }
+       }
+
+       public static function providePassesValidation() {
+               $values = [];
+               foreach ( ExtensionRegistry::getInstance()->getAllThings() as $thing ) {
+                       $values[] = [ $thing['path'] ];
+               }
+
+               return $values;
+       }
+
+       /**
+        * @dataProvider providePassesValidation
+        * @param string $path Path to thing's json file
+        */
+       public function testPassesValidation( $path ) {
+               $data = json_decode( file_get_contents( $path ) );
+               $this->assertInstanceOf( 'stdClass', $data, "$path is not valid JSON" );
+
+               $this->assertObjectHasAttribute( 'manifest_version', $data,
+                       "$path does not have manifest_version set." );
+               $version = $data->manifest_version;
+               if ( $version !== ExtensionRegistry::MANIFEST_VERSION ) {
+                       $schemaPath = __DIR__ . "/../../../docs/extension.schema.v$version.json";
+               } else {
+                       $schemaPath = __DIR__ . '/../../../docs/extension.schema.json';
+               }
+
+               // Not too old
+               $this->assertTrue(
+                       $version >= ExtensionRegistry::OLDEST_MANIFEST_VERSION,
+                       "$path is using a non-supported schema version"
+               );
+               // Not too new
+               $this->assertTrue(
+                       $version <= ExtensionRegistry::MANIFEST_VERSION,
+                       "$path is using a non-supported schema version"
+               );
+               $retriever = new JsonSchema\Uri\UriRetriever();
+               $schema = $retriever->retrieve( 'file://' . $schemaPath );
+
+               $validator = new JsonSchema\Validator();
+               $validator->check( $data, $schema );
+               if ( $validator->isValid() ) {
+                       // All good.
+                       $this->assertTrue( true );
+               } else {
+                       $out = "$path did pass validation.\n";
+                       foreach ( $validator->getErrors() as $error ) {
+                               $out .= "[{$error['property']}] {$error['message']}\n";
+                       }
+                       $this->assertTrue( false, $out );
+               }
+       }
+}
index 6b1709f..5c65c1e 100644 (file)
@@ -119,13 +119,13 @@ class ResourcesTest extends MediaWikiTestCase {
        }
 
        /**
-        * CSSMin::getAllLocalFileReferences should ignore url(...) expressions
+        * CSSMin::getLocalFileReferences should ignore url(...) expressions
         * that have been commented out.
         */
        public function testCommentedLocalFileReferences() {
                $basepath = __DIR__ . '/../data/css/';
                $css = file_get_contents( $basepath . 'comments.css' );
-               $files = CSSMin::getAllLocalFileReferences( $css, $basepath );
+               $files = CSSMin::getLocalFileReferences( $css, $basepath );
                $expected = [ $basepath . 'not-commented.gif' ];
                $this->assertArrayEquals(
                        $expected,
index bdabdc1..63f5de0 100644 (file)
@@ -1,11 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-Colors don't work on Windows!
-phpunit.php enables colors for other OSs at runtime
--->
 <phpunit bootstrap="./bootstrap.php"
-       colors="false"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.8/phpunit.xsd"
+
+       colors="true"
        backupGlobals="false"
        convertErrorsToExceptions="true"
        convertNoticesToExceptions="true"
@@ -15,7 +13,9 @@ phpunit.php enables colors for other OSs at runtime
        timeoutForSmallTests="10"
        timeoutForMediumTests="30"
        timeoutForLargeTests="60"
-       strict="true"
+       beStrictAboutTestsThatDoNotTestAnything="true"
+       beStrictAboutOutputDuringTests="true"
+       beStrictAboutTestSize="true"
        verbose="true">
        <testsuites>
                <testsuite name="includes">
index 723328e..0e23fdd 100644 (file)
@@ -8,16 +8,14 @@
 class ExtensionsTestSuite extends PHPUnit_Framework_TestSuite {
        public function __construct() {
                parent::__construct();
-               $paths = array();
+               $paths = [];
                // Extensions can return a list of files or directories
-               Hooks::run( 'UnitTestsList', array( &$paths ) );
+               Hooks::run( 'UnitTestsList', [ &$paths ] );
                foreach ( $paths as $path ) {
                        if ( is_dir( $path ) ) {
                                // If the path is a directory, search for test cases.
                                // @since 1.24
-                               $suffixes = array(
-                                       'Test.php',
-                               );
+                               $suffixes = [ 'Test.php' ];
                                $fileIterator = new File_Iterator_Facade();
                                $matchingFiles = $fileIterator->getFilesAsArray( $path, $suffixes );
                                $this->addTestFiles( $matchingFiles );
@@ -26,7 +24,7 @@ class ExtensionsTestSuite extends PHPUnit_Framework_TestSuite {
                                $this->addTestFile( $path );
                        }
                }
-               if ( !count( $paths ) ) {
+               if ( !$paths ) {
                        $this->addTest( new DummyExtensionsTest( 'testNothing' ) );
                }
        }
index 9ff79a5..8366369 100644 (file)
@@ -37,7 +37,7 @@ class UploadFromUrlTestSuite extends PHPUnit_Framework_TestSuite {
                        'transformVia404' => false,
                        'backend' => new FSFileBackend( [
                                'name' => 'local-backend',
-                               'wikiId' => wfWikiId(),
+                               'wikiId' => wfWikiID(),
                                'containerPaths' => [
                                        'local-public' => "{$tmpDir}/test-repo/public",
                                        'local-thumb' => "{$tmpDir}/test-repo/thumb",
@@ -63,8 +63,9 @@ class UploadFromUrlTestSuite extends PHPUnit_Framework_TestSuite {
                $messageMemc = wfGetMessageCacheStorage();
                $parserMemc = wfGetParserCacheStorage();
 
+               RequestContext::resetMain();
+               $context = RequestContext::getMain();
                $wgUser = new User;
-               $context = new RequestContext;
                $wgLang = $context->getLanguage();
                $wgOut = $context->getOutput();
                $wgParser = new StubObject( 'wgParser', $wgParserConf['class'], [ $wgParserConf ] );
index a2dead6..b7161b1 100644 (file)
@@ -8,14 +8,7 @@ return [
 
        'test.sinonjs' => [
                'scripts' => [
-                       'resources/lib/sinonjs/sinon-1.15.4.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/lib/sinonjs/sinon-ie-1.15.4.js',
+                       'resources/lib/sinonjs/sinon-1.17.3.js',
                ],
                'targets' => [ 'desktop', 'mobile' ],
        ],
@@ -80,6 +73,7 @@ return [
                        'tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js',
+                       'tests/qunit/suites/resources/mediawiki/mediawiki.viewport.test.js',
                        'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js',
                        'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.category.test.js',
                        'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.messages.test.js',
@@ -130,6 +124,7 @@ return [
                        'mediawiki.template.mustache',
                        'mediawiki.template',
                        'mediawiki.util',
+                       'mediawiki.viewport',
                        'mediawiki.special.recentchanges',
                        'mediawiki.language',
                        'mediawiki.cldr',
index 456787c..5a96dc3 100644 (file)
@@ -110,7 +110,7 @@ class GenerateJqueryMsgData extends Maintenance {
                                        $langKey = $languageCode . '_' . $key;
                                        $messages[$langKey] = $template;
                                        $tests[] = [
-                                               'name' => $languageCode . ' ' . $key . ' ' . join( ',', $args ),
+                                               'name' => $languageCode . ' ' . $key . ' ' . implode( ',', $args ),
                                                'key' => $langKey,
                                                'args' => $args,
                                                'result' => $result,
index 07e6f26..1091d09 100644 (file)
@@ -26,8 +26,6 @@
        // killing the test and assuming timeout failure.
        QUnit.config.testTimeout = 60 * 1000;
 
-       QUnit.config.requireExpects = true;
-
        // Add a checkbox to QUnit header to toggle MediaWiki ResourceLoader debug mode.
        QUnit.config.urlConfig.push( {
                id: 'debug',
index a0cfba9..a480671 100644 (file)
                this.server.respond( function ( request ) {
                        switch ( request.requestBody ) {
                                // simple
-                               case 'action=options&format=json&change=foo%3Dbar&token=%2B%5C':
+                               case 'action=options&format=json&formatversion=2&change=foo%3Dbar&token=%2B%5C':
                                // two options
-                               case 'action=options&format=json&change=foo%3Dbar%7Cbaz%3Dquux&token=%2B%5C':
+                               case 'action=options&format=json&formatversion=2&change=foo%3Dbar%7Cbaz%3Dquux&token=%2B%5C':
                                // not bundleable
-                               case 'action=options&format=json&optionname=foo&optionvalue=bar%7Cquux&token=%2B%5C':
-                               case 'action=options&format=json&optionname=bar&optionvalue=a%7Cb%7Cc&token=%2B%5C':
-                               case 'action=options&format=json&change=baz%3Dquux&token=%2B%5C':
+                               case 'action=options&format=json&formatversion=2&optionname=foo&optionvalue=bar%7Cquux&token=%2B%5C':
+                               case 'action=options&format=json&formatversion=2&optionname=bar&optionvalue=a%7Cb%7Cc&token=%2B%5C':
+                               case 'action=options&format=json&formatversion=2&change=baz%3Dquux&token=%2B%5C':
                                // reset an option
-                               case 'action=options&format=json&change=foo&token=%2B%5C':
+                               case 'action=options&format=json&formatversion=2&change=foo&token=%2B%5C':
                                // reset an option, not bundleable
-                               case 'action=options&format=json&optionname=foo%7Cbar%3Dquux&token=%2B%5C':
+                               case 'action=options&format=json&formatversion=2&optionname=foo%7Cbar%3Dquux&token=%2B%5C':
                                        assert.ok( true, 'Repond to ' + request.requestBody );
                                        request.respond( 200, { 'Content-Type': 'application/json' },
                                                '{ "options": "success" }' );
index f2865eb..dc0cff4 100644 (file)
@@ -6,12 +6,20 @@
        } ) );
 
        QUnit.test( 'Hello world', function ( assert ) {
-               QUnit.expect( 1 );
+               QUnit.expect( 3 );
 
                var api = new mw.Api();
 
                api.parse( '\'\'\'Hello world\'\'\'' ).done( function ( html ) {
-                       assert.equal( html, '<p><b>Hello world</b></p>' );
+                       assert.equal( html, '<p><b>Hello world</b></p>', 'Parse wikitext by string' );
+               } );
+
+               api.parse( {
+                       toString: function () {
+                               return '\'\'\'Hello world\'\'\'';
+                       }
+               } ).done( function ( html ) {
+                       assert.equal( html, '<p><b>Hello world</b></p>', 'Parse wikitext by toString object' );
                } );
 
                this.server.respondWith( /action=parse.*&text='''Hello\+world'''/, function ( request ) {
                        );
                } );
 
+               api.parse( new mw.Title( 'Earth' ) ).done( function ( html ) {
+                       assert.equal( html, '<p><b>Earth</b> is a planet.</p>', 'Parse page by Title object'  );
+               } );
+
+               this.server.respondWith( /action=parse.*&page=Earth/, function ( request ) {
+                       request.respond( 200, { 'Content-Type': 'application/json' },
+                               '{ "parse": { "text": "<p><b>Earth</b> is a planet.</p>" } }'
+                       );
+               } );
+
                this.server.respond();
        } );
 }( mediaWiki ) );
index 394f3bd..520db42 100644 (file)
@@ -3,11 +3,6 @@
                setup: function () {
                        this.server = this.sandbox.useFakeServer();
                        this.server.respondImmediately = true;
-                       this.clock = this.sandbox.useFakeTimers();
-               },
-               teardown: function () {
-                       // https://github.com/jquery/jquery/issues/2453
-                       this.clock.tick();
                }
        } ) );
 
                return sequence( bodies );
        }
 
-       QUnit.test( 'Basic functionality', function ( assert ) {
-               QUnit.expect( 2 );
+       QUnit.test( 'get()', function ( assert ) {
                var api = new mw.Api();
 
                this.server.respond( [ 200, { 'Content-Type': 'application/json' }, '[]' ] );
 
-               api.get( {} )
-                       .done( function ( data ) {
-                               assert.deepEqual( data, [], 'If request succeeds without errors, resolve deferred' );
-                       } );
+               return api.get( {} ).then( function ( data ) {
+                       assert.deepEqual( data, [], 'If request succeeds without errors, resolve deferred' );
+               } );
+       } );
 
-               api.post( {} )
-                       .done( function ( data ) {
-                               assert.deepEqual( data, [], 'Simple POST request' );
-                       } );
+       QUnit.test( 'post()', function ( assert ) {
+               var api = new mw.Api();
+
+               this.server.respond( [ 200, { 'Content-Type': 'application/json' }, '[]' ] );
+
+               return api.post( {} ).then( function ( data ) {
+                       assert.deepEqual( data, [], 'Simple POST request' );
+               } );
        } );
 
        QUnit.test( 'API error', function ( assert ) {
-               QUnit.expect( 1 );
                var api = new mw.Api();
 
                this.server.respond( [ 200, { 'Content-Type': 'application/json' },
                api.get( { action: 'doesntexist' } )
                        .fail( function ( errorCode ) {
                                assert.equal( errorCode, 'unknown_action', 'API error should reject the deferred' );
-                       } );
+                       } )
+                       .always( assert.async() );
        } );
 
        QUnit.test( 'FormData support', function ( assert ) {
-               QUnit.expect( 2 );
                var api = new mw.Api();
 
                this.server.respond( function ( request ) {
                        request.respond( 200, { 'Content-Type': 'application/json' }, '[]' );
                } );
 
-               api.post( { action: 'test' }, { contentType: 'multipart/form-data' } );
+               return api.post( { action: 'test' }, { contentType: 'multipart/form-data' } );
        } );
 
        QUnit.test( 'Converting arrays to pipe-separated', function ( assert ) {
-               QUnit.expect( 1 );
                var api = new mw.Api();
 
                this.server.respond( function ( request ) {
                        request.respond( 200, { 'Content-Type': 'application/json' }, '[]' );
                } );
 
-               api.get( { test: [ 'foo', 'bar', 'baz' ] } );
+               return api.get( { test: [ 'foo', 'bar', 'baz' ] } );
        } );
 
        QUnit.test( 'Omitting false booleans', function ( assert ) {
-               QUnit.expect( 2 );
                var api = new mw.Api();
 
                this.server.respond( function ( request ) {
                        request.respond( 200, { 'Content-Type': 'application/json' }, '[]' );
                } );
 
-               api.get( { foo: false, bar: true } );
+               return api.get( { foo: false, bar: true } );
        } );
 
        QUnit.test( 'getToken() - cached', function ( assert ) {
-               QUnit.expect( 2 );
-               var api = new mw.Api();
+               var api = new mw.Api(),
+                       test = this;
 
                // Get editToken for local wiki, this should not make
                // a request as it should be retrieved from mw.user.tokens.
-               api.getToken( 'edit' )
-                       .done( function ( token ) {
+               return api.getToken( 'edit' )
+                       .then( function ( token ) {
                                assert.ok( token.length, 'Got a token' );
-                       } )
-                       .fail( function ( err ) {
+                       }, function ( err ) {
                                assert.equal( '', err, 'API error' );
+                       } )
+                       .then( function () {
+                               assert.equal( test.server.requests.length, 0, 'Requests made' );
                        } );
-
-               assert.equal( this.server.requests.length, 0, 'Requests made' );
        } );
 
        QUnit.test( 'getToken() - uncached', function ( assert ) {
-               QUnit.expect( 3 );
-               var api = new mw.Api();
+               var api = new mw.Api(),
+                       firstDone = assert.async(),
+                       secondDone = assert.async();
 
                this.server.respondWith( /type=testuncached/, [ 200, { 'Content-Type': 'application/json' },
                        '{ "query": { "tokens": { "testuncachedtoken": "good" } } }'
                        } )
                        .fail( function ( err ) {
                                assert.equal( err, '', 'API error' );
-                       } );
+                       } )
+                       .always( firstDone );
 
                api.getToken( 'testuncached' )
                        .done( function ( token ) {
                        } )
                        .fail( function ( err ) {
                                assert.equal( err, '', 'API error' );
-                       } );
+                       } )
+                       .always( secondDone );
 
                assert.equal( this.server.requests.length, 1, 'Requests made' );
        } );
 
        QUnit.test( 'getToken() - error', function ( assert ) {
-               QUnit.expect( 2 );
                var api = new mw.Api();
 
                this.server.respondWith( /type=testerror/, sequenceBodies( 200, { 'Content-Type': 'application/json' },
                ) );
 
                // Don't cache error (bug 65268)
-               api.getToken( 'testerror' ).fail( function ( err ) {
-                       assert.equal( err, 'bite-me', 'Expected error' );
-
-                       // Make this request after the first one has finished.
-                       // If we make it simultaneously we still want it to share
-                       // the cache, but as soon as it is fulfilled as error we
-                       // reject it so that the next one tries fresh.
-                       api.getToken( 'testerror' ).done( function ( token ) {
+               return api.getToken( 'testerror' )
+                       .then( null, function ( err ) {
+                               assert.equal( err, 'bite-me', 'Expected error' );
+
+                               return api.getToken( 'testerror' );
+                       } )
+                       .then( function ( token ) {
                                assert.equal( token, 'good', 'The token' );
                        } );
-               } );
        } );
 
        QUnit.test( 'getToken() - deprecated', function ( assert ) {
-               QUnit.expect( 2 );
                // Cache API endpoint from default to avoid cachehit in mw.user.tokens
-               var api = new mw.Api( { ajax: { url: '/postWithToken/api.php' } } );
+               var api = new mw.Api( { ajax: { url: '/postWithToken/api.php' } } ),
+                       test = this;
 
                this.server.respondWith( /type=csrf/, [ 200, { 'Content-Type': 'application/json' },
                        '{ "query": { "tokens": { "csrftoken": "csrfgood" } } }'
                ] );
 
                // Get a token of a type that is in the legacy map.
-               api.getToken( 'email' )
+               return api.getToken( 'email' )
                        .done( function ( token ) {
                                assert.equal( token, 'csrfgood', 'Token' );
                        } )
                        .fail( function ( err ) {
                                assert.equal( err, '', 'API error' );
+                       } )
+                       .always( function () {
+                               assert.equal( test.server.requests.length, 1, 'Requests made' );
                        } );
-
-               assert.equal( this.server.requests.length, 1, 'Requests made' );
        } );
 
        QUnit.test( 'badToken()', function ( assert ) {
-               QUnit.expect( 2 );
                var api = new mw.Api(),
                        test = this;
 
                        ]
                ) );
 
-               api.getToken( 'testbad' )
+               return api.getToken( 'testbad' )
                        .then( function () {
                                api.badToken( 'testbad' );
                                return api.getToken( 'testbad' );
        } );
 
        QUnit.test( 'badToken( legacy )', function ( assert ) {
-               QUnit.expect( 2 );
                var api = new mw.Api( { ajax: { url: '/badTokenLegacy/api.php' } } ),
                        test = this;
 
                        ]
                ) );
 
-               api.getToken( 'options' )
+               return api.getToken( 'options' )
                        .then( function () {
                                api.badToken( 'options' );
                                return api.getToken( 'options' );
        } );
 
        QUnit.test( 'postWithToken( tokenType, params )', function ( assert ) {
-               QUnit.expect( 1 );
                var api = new mw.Api( { ajax: { url: '/postWithToken/api.php' } } );
 
                this.server.respondWith( 'GET', /type=testpost/, [ 200, { 'Content-Type': 'application/json' },
                        }
                } );
 
-               api.postWithToken( 'testpost', { action: 'example', key: 'foo' } )
-                       .done( function ( data ) {
+               return api.postWithToken( 'testpost', { action: 'example', key: 'foo' } )
+                       .then( function ( data ) {
                                assert.deepEqual( data, { example: { foo: 'quux' } } );
                        } );
        } );
 
        QUnit.test( 'postWithToken( tokenType, params with assert )', function ( assert ) {
-               QUnit.expect( 2 );
-               var api = new mw.Api( { ajax: { url: '/postWithToken/api.php' } } );
+               var api = new mw.Api( { ajax: { url: '/postWithToken/api.php' } } ),
+                       test = this;
 
                this.server.respondWith( /assert=user/, [ 200, { 'Content-Type': 'application/json' },
                        '{ "error": { "code": "assertuserfailed", "info": "Assertion failed" } }'
                ] );
 
-               api.postWithToken( 'testassertpost', { action: 'example', key: 'foo', assert: 'user' } )
-                       .fail( function ( errorCode ) {
+               return api.postWithToken( 'testassertpost', { action: 'example', key: 'foo', assert: 'user' } )
+                       // Cast error to success and vice versa
+                       .then( function ( ) {
+                               return $.Deferred().reject( 'Unexpected success' );
+                       }, function ( errorCode ) {
                                assert.equal( errorCode, 'assertuserfailed', 'getToken fails assert' );
+                               return $.Deferred().resolve();
+                       } )
+                       .then( function () {
+                               assert.equal( test.server.requests.length, 1, 'Requests made' );
                        } );
-
-               assert.equal( this.server.requests.length, 1, 'Requests made' );
        } );
 
        QUnit.test( 'postWithToken( tokenType, params, ajaxOptions )', function ( assert ) {
-               QUnit.expect( 3 );
-               var api = new mw.Api();
+               var api = new mw.Api(),
+                       test = this;
 
                this.server.respond( [ 200, { 'Content-Type': 'application/json' }, '{ "example": "quux" }' ] );
 
-               api.postWithToken(
-                       'edit',
-                       {
-                               action: 'example'
-                       },
-                       {
-                               headers: {
-                                       'X-Foo': 'Bar'
+               return api.postWithToken( 'edit',
+                               { action: 'example' },
+                               {
+                                       headers: {
+                                               'X-Foo': 'Bar'
+                                       }
                                }
-                       }
-               );
+                       )
+                       .then( function () {
+                               assert.equal( test.server.requests[ 0 ].requestHeaders[ 'X-Foo' ], 'Bar', 'Header sent' );
 
-               api.postWithToken(
-                       'edit',
-                       {
-                               action: 'example'
-                       },
-                       function () {
-                               assert.ok( false, 'This parameter cannot be a callback' );
-                       }
-               )
-               .always( function ( data ) {
-                       assert.equal( data.example, 'quux' );
-               } );
+                               return api.postWithToken( 'edit',
+                                       { action: 'example' },
+                                       function () {
+                                               assert.ok( false, 'This parameter cannot be a callback' );
+                                       }
+                               );
+                       } )
+                       .then( function ( data ) {
+                               assert.equal( data.example, 'quux' );
 
-               assert.equal( this.server.requests.length, 2, 'Request made' );
-               assert.equal( this.server.requests[ 0 ].requestHeaders[ 'X-Foo' ], 'Bar', 'Header sent' );
+                               assert.equal( test.server.requests.length, 2, 'Request made' );
+                       } );
        } );
 
        QUnit.test( 'postWithToken() - badtoken', function ( assert ) {
-               QUnit.expect( 1 );
                var api = new mw.Api();
 
                this.server.respondWith( /type=testbadtoken/, sequenceBodies( 200, { 'Content-Type': 'application/json' },
                // - Request: action=example -> badtoken error
                // - Request: new token -> good
                // - Request: action=example -> success
-               api.postWithToken( 'testbadtoken', { action: 'example', key: 'foo' } )
-                       .done( function ( data ) {
+               return api.postWithToken( 'testbadtoken', { action: 'example', key: 'foo' } )
+                       .then( function ( data ) {
                                assert.deepEqual( data, { example: { foo: 'quux' } } );
                        } );
        } );
 
        QUnit.test( 'postWithToken() - badtoken-cached', function ( assert ) {
-               QUnit.expect( 2 );
                var sequenceA,
                        api = new mw.Api();
 
 
                // - Request: new token -> A
                // - Request: action=example
-               api.postWithToken( 'testonce', { action: 'example', key: 'foo' } )
-                       .done( function ( data ) {
+               return api.postWithToken( 'testonce', { action: 'example', key: 'foo' } )
+                       .then( function ( data ) {
                                assert.deepEqual( data, { example: { value: 'A' } } );
-                       } );
 
-               // - Request: action=example w/ token A -> badtoken error
-               // - Request: new token -> B
-               // - Request: action=example w/ token B -> success
-               api.postWithToken( 'testonce', { action: 'example', key: 'bar' } )
-                       .done( function ( data ) {
+                               // - Request: action=example w/ token A -> badtoken error
+                               // - Request: new token -> B
+                               // - Request: action=example w/ token B -> success
+                               return api.postWithToken( 'testonce', { action: 'example', key: 'bar' } );
+                       } )
+                       .then( function ( data ) {
                                assert.deepEqual( data, { example: { value: 'B' } } );
                        } );
        } );
index 3772097..7a09964 100644 (file)
 ( function ( mw ) {
        QUnit.module( 'mediawiki.requestIdleCallback', QUnit.newMwEnvironment( {
                setup: function () {
-                       var time = mw.now(),
-                               clock = this.clock = this.sandbox.useFakeTimers();
+                       var clock = this.clock = this.sandbox.useFakeTimers();
 
-                       this.tick = function ( forward ) {
-                               time += forward;
-                               clock.tick( forward );
-                       };
                        this.sandbox.stub( mw, 'now', function () {
-                               return time;
+                               return +new Date();
                        } );
 
-                       // Don't test the native version (if available)
-                       this.mwRIC = mw.requestIdleCallback;
-                       mw.requestIdleCallback = mw.requestIdleCallbackInternal;
-               },
-               teardown: function () {
-                       mw.requestIdleCallback = this.mwRIC;
+                       this.tick = function ( forward ) {
+                               return clock.tick( forward || 1 );
+                       };
+
+                       // Always test the polyfill, not native
+                       this.sandbox.stub( mw, 'requestIdleCallback', mw.requestIdleCallbackInternal );
                }
        } ) );
 
-       // Basic scheduling of callbacks
-       QUnit.test( 'callback', 3, function ( assert ) {
-               var sequence,
-                       tick = this.tick;
+       QUnit.test( 'callback', function ( assert ) {
+               var sequence;
 
                mw.requestIdleCallback( function () {
                        sequence.push( 'x' );
-                       tick( 30 );
                } );
                mw.requestIdleCallback( function () {
-                       tick( 5 );
                        sequence.push( 'y' );
-                       tick( 30 );
                } );
-               // Task Z is not run in the first sequence because the
-               // first two tasks consumed the available 50ms budget.
                mw.requestIdleCallback( function () {
                        sequence.push( 'z' );
-                       tick( 30 );
                } );
 
                sequence = [];
-               tick( 1000 );
-               assert.deepEqual( sequence, [ 'x', 'y' ] );
-
-               sequence = [];
-               tick( 1000 );
-               assert.deepEqual( sequence, [ 'z' ] );
-
-               sequence = [];
-               tick( 1000 );
-               assert.deepEqual( sequence, [] );
+               this.tick();
+               assert.deepEqual( sequence, [ 'x', 'y', 'z' ] );
        } );
 
-       // Schedule new callbacks within a callback that tick
-       // the clock. If the budget is exceeded, the newly scheduled
-       // task is delayed until the next idle period.
-       QUnit.test( 'nest-tick', 3, function ( assert ) {
-               var sequence,
-                       tick = this.tick;
+       QUnit.test( 'nested', function ( assert ) {
+               var sequence;
 
                mw.requestIdleCallback( function () {
                        sequence.push( 'x' );
-                       tick( 30 );
                } );
                // Task Y is a task that schedules another task.
                mw.requestIdleCallback( function () {
                        function other() {
                                sequence.push( 'y' );
-                               tick( 35 );
                        }
                        mw.requestIdleCallback( other );
                } );
                mw.requestIdleCallback( function () {
                        sequence.push( 'z' );
-                       tick( 30 );
                } );
 
                sequence = [];
-               tick( 1000 );
+               this.tick();
                assert.deepEqual( sequence, [ 'x', 'z' ] );
 
                sequence = [];
-               tick( 1000 );
+               this.tick();
                assert.deepEqual( sequence, [ 'y' ] );
-
-               sequence = [];
-               tick( 1000 );
-               assert.deepEqual( sequence, [] );
        } );
 
-       // Schedule new callbacks within a callback that run quickly.
-       // Note how the newly scheduled task gets to run as part of the
-       // current idle period (budget allowing).
-       QUnit.test( 'nest-quick', 2, function ( assert ) {
+       QUnit.test( 'timeRemaining', function ( assert ) {
                var sequence,
-                       tick = this.tick;
-
-               mw.requestIdleCallback( function () {
-                       sequence.push( 'x' );
-                       mw.requestIdleCallback( function () {
-                               sequence.push( 'x-expand' );
-                       } );
-               } );
-               mw.requestIdleCallback( function () {
-                       sequence.push( 'y' );
+                       tick = this.tick,
+                       jobs = [
+                               { time: 10, key: 'a' },
+                               { time: 20, key: 'b' },
+                               { time: 10, key: 'c' },
+                               { time: 20, key: 'd' },
+                               { time: 10, key: 'e' }
+                       ];
+
+               mw.requestIdleCallback( function doWork( deadline ) {
+                       var job;
+                       while ( jobs[ 0 ] && deadline.timeRemaining() > 15 ) {
+                               job = jobs.shift();
+                               tick( job.time );
+                               sequence.push( job.key );
+                       }
+                       if ( jobs[ 0 ] ) {
+                               mw.requestIdleCallback( doWork );
+                       }
                } );
 
                sequence = [];
-               tick( 1000 );
-               assert.deepEqual( sequence, [ 'x', 'y', 'x-expand' ] );
+               tick();
+               assert.deepEqual( sequence, [ 'a', 'b', 'c' ] );
 
                sequence = [];
-               tick( 1000 );
-               assert.deepEqual( sequence, [] );
+               tick();
+               assert.deepEqual( sequence, [ 'd', 'e' ] );
        } );
 
+       if ( window.requestIdleCallback ) {
+               QUnit.test( 'native', function ( assert ) {
+                       var done = assert.async();
+                       // Remove polyfill
+                       mw.requestIdleCallback.restore();
+                       mw.requestIdleCallback( function () {
+                               assert.expect( 0 );
+                               done();
+                       } );
+               } );
+       }
+
 }( mediaWiki ) );
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.viewport.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.viewport.test.js
new file mode 100644 (file)
index 0000000..f404294
--- /dev/null
@@ -0,0 +1,112 @@
+( function ( mw, $ ) {
+
+       // Simulate square element with 20px long edges placed at (20, 20) on the page
+       var
+               DEFAULT_VIEWPORT = {
+                       top: 0,
+                       left: 0,
+                       right: 100,
+                       bottom: 100
+               };
+
+       QUnit.module( 'mediawiki.viewport', QUnit.newMwEnvironment( {
+               setup: function () {
+                       this.el = $( '<div />' )
+                               .appendTo( '#qunit-fixture' )
+                               .width( 20 )
+                               .height( 20 )
+                               .offset( {
+                                       top: 20,
+                                       left: 20
+                               } )
+                               .get( 0 );
+                       this.sandbox.stub( mw.viewport, 'makeViewportFromWindow' )
+                               .returns( DEFAULT_VIEWPORT );
+               }
+       } ) );
+
+       QUnit.test( 'isElementInViewport', 6, function ( assert ) {
+               var viewport = $.extend( {}, DEFAULT_VIEWPORT );
+               assert.ok( mw.viewport.isElementInViewport( this.el, viewport ),
+                       'It should return true when the element is fully enclosed in the viewport' );
+
+               viewport.right = 20;
+               viewport.bottom = 20;
+               assert.ok( mw.viewport.isElementInViewport( this.el, viewport ),
+                       'It should return true when only the top-left of the element is within the viewport' );
+
+               viewport.top = 40;
+               viewport.left = 40;
+               viewport.right = 50;
+               viewport.bottom = 50;
+               assert.ok( mw.viewport.isElementInViewport( this.el, viewport ),
+                       'It should return true when only the bottom-right is within the viewport' );
+
+               viewport.top = 30;
+               viewport.left = 30;
+               viewport.right = 35;
+               viewport.bottom = 35;
+               assert.ok( mw.viewport.isElementInViewport( this.el, viewport ),
+                       'It should return true when the element encapsulates the viewport' );
+
+               viewport.top = 0;
+               viewport.left = 0;
+               viewport.right = 19;
+               viewport.bottom = 19;
+               assert.notOk( mw.viewport.isElementInViewport( this.el, viewport ),
+                       'It should return false when the element is not within the viewport' );
+
+               assert.ok( mw.viewport.isElementInViewport( this.el ),
+                       'It should default to the window object if no viewport is given' );
+       } );
+
+       QUnit.test( 'isElementInViewport with scrolled page', 1, function ( assert ) {
+               var viewport = {
+                               top: 2000,
+                               left: 0,
+                               right: 1000,
+                               bottom: 2500
+                       },
+                       el = $( '<div />' )
+                               .appendTo( '#qunit-fixture' )
+                               .width( 20 )
+                               .height( 20 )
+                               .offset( {
+                                       top: 2300,
+                                       left: 20
+                               } )
+                               .get( 0 );
+               window.scrollTo( viewport.left, viewport.top );
+               assert.ok( mw.viewport.isElementInViewport( el, viewport ),
+                       'It should return true when the element is fully enclosed in the ' +
+                       'viewport even when the page is scrolled down' );
+               window.scrollTo( 0, 0 );
+       } );
+
+       QUnit.test( 'isElementCloseToViewport', 3, function ( assert ) {
+               var
+                       viewport = {
+                               top: 90,
+                               left: 90,
+                               right: 100,
+                               bottom: 100
+                       },
+                       distantElement = $( '<div />' )
+                               .appendTo( '#qunit-fixture' )
+                               .width( 20 )
+                               .height( 20 )
+                               .offset( {
+                                       top: 220,
+                                       left: 20
+                               } )
+                               .get( 0 );
+
+               assert.ok( mw.viewport.isElementCloseToViewport( this.el, 60, viewport ),
+                       'It should return true when the element is within the given threshold away' );
+               assert.notOk( mw.viewport.isElementCloseToViewport( this.el, 20, viewport ),
+                       'It should return false when the element is further than the given threshold away' );
+               assert.notOk( mw.viewport.isElementCloseToViewport( distantElement ),
+                       'It should default to a threshold of 50px and the window\'s viewport' );
+       } );
+
+}( mediaWiki, jQuery ) );
index 0299c26..76544a5 100644 (file)
@@ -661,8 +661,7 @@ class TestFileIterator implements Iterator {
                        ) );
                }
 
-               $tokens = array_values( $tokens );
-               return $tokens[0];
+               return array_values( $tokens )[0];
        }
 }